From 25c1303940b99fff991eb9ee2ea35f2de5fcb4fd Mon Sep 17 00:00:00 2001 From: "Christopher C. Wells" Date: Sun, 24 Feb 2019 05:50:42 -0800 Subject: [PATCH] Update node dependencies and static files. --- package-lock.json | 122 +- package.json | 4 +- static/admin/css/base.7c5fa36168a7.css | 983 + static/admin/css/base.7ea12481fb59.css | 2 +- static/admin/img/README.837277fa1908.txt.gz | Bin 214 -> 0 bytes ...7277fa1908.txt => README.a70711a38d87.txt} | 2 +- static/admin/img/README.a70711a38d87.txt.gz | Bin 0 -> 214 bytes static/admin/img/README.txt | 2 +- static/admin/img/README.txt.gz | Bin 214 -> 214 bytes static/admin/js/core.953326603873.js.gz | Bin 1835 -> 0 bytes ...e.953326603873.js => core.9c3bce7d1006.js} | 2 +- static/admin/js/core.9c3bce7d1006.js.gz | Bin 0 -> 1836 bytes static/admin/js/core.js | 2 +- static/admin/js/core.js.gz | Bin 1835 -> 1836 bytes ...f88b5c8f54a.js => inlines.3b3fb199b064.js} | 2 +- static/admin/js/inlines.3b3fb199b064.js.gz | Bin 0 -> 3279 bytes static/admin/js/inlines.ff88b5c8f54a.js.gz | Bin 3282 -> 0 bytes static/admin/js/inlines.js | 2 +- static/admin/js/inlines.js.gz | Bin 3282 -> 3279 bytes ....0163435a3ec4.css => app.5e5e1b68e17f.css} | 1654 +- ....b82863a2a4d6.css => app.7e0588ab9c78.css} | 1654 +- static/babybuddy/css/app.7e0588ab9c78.css.gz | Bin 0 -> 34709 bytes static/babybuddy/css/app.b82863a2a4d6.css.gz | Bin 32294 -> 0 bytes static/babybuddy/css/app.css | 1654 +- static/babybuddy/css/app.css.gz | Bin 32239 -> 34663 bytes .../babybuddy/css/vendor.538af7ecea08.css.gz | Bin 1589 -> 0 bytes ...8af7ecea08.css => vendor.be1a1448dd86.css} | 2 +- .../babybuddy/css/vendor.be1a1448dd86.css.gz | Bin 0 -> 1588 bytes static/babybuddy/css/vendor.css | 2 +- static/babybuddy/css/vendor.css.gz | Bin 1589 -> 1588 bytes static/babybuddy/js/app.0079764f3fc1.js.gz | Bin 1317 -> 0 bytes ...pp.0079764f3fc1.js => app.818b5a7636cd.js} | 0 static/babybuddy/js/app.818b5a7636cd.js.gz | Bin 0 -> 1330 bytes static/babybuddy/js/app.js.gz | Bin 1317 -> 1330 bytes ....d96c5b659cfb.js => graph.9d17ed9a2576.js} | 15966 ++++++++++------ static/babybuddy/js/graph.9d17ed9a2576.js.gz | Bin 0 -> 636016 bytes static/babybuddy/js/graph.d96c5b659cfb.js.gz | Bin 612984 -> 0 bytes static/babybuddy/js/graph.js | 15966 ++++++++++------ static/babybuddy/js/graph.js.gz | Bin 612984 -> 636016 bytes static/babybuddy/js/vendor.748ffa77dc7a.js.gz | Bin 170803 -> 0 bytes ...748ffa77dc7a.js => vendor.9c126bd7589e.js} | 8385 ++++---- static/babybuddy/js/vendor.9c126bd7589e.js.gz | Bin 0 -> 176161 bytes static/babybuddy/js/vendor.js | 8385 ++++---- static/babybuddy/js/vendor.js.gz | Bin 170803 -> 176161 bytes ...a38.xml => browserconfig.118acb4bca3d.xml} | 0 .../root/browserconfig.118acb4bca3d.xml.gz | Bin 0 -> 170 bytes .../root/browserconfig.5858221e0a38.xml.gz | Bin 168 -> 0 bytes static/babybuddy/root/browserconfig.xml.gz | Bin 168 -> 170 bytes ...son => site.webmanifest.5d647514e2b7.json} | 0 .../site.webmanifest.5d647514e2b7.json.gz | Bin 0 -> 227 bytes .../site.webmanifest.61dac00bb04b.json.gz | Bin 224 -> 0 bytes .../babybuddy/root/site.webmanifest.json.gz | Bin 224 -> 227 bytes .../css/bootstrap-theme.a279820bbeb5.css | 587 + .../css/bootstrap-theme.a279820bbeb5.css.gz | Bin 0 -> 2838 bytes static/rest_framework/css/bootstrap-theme.css | 587 + .../rest_framework/css/bootstrap-theme.css.gz | Bin 0 -> 2838 bytes .../css/bootstrap-theme.min.00b93e6ea6fb.css | 11 - .../bootstrap-theme.min.00b93e6ea6fb.css.gz | Bin 20156 -> 0 bytes .../css/bootstrap-theme.min.321ccd3adb83.css | 11 - .../css/bootstrap-theme.min.66b84a04375e.css | 6 + .../bootstrap-theme.min.66b84a04375e.css.gz | Bin 0 -> 2772 bytes .../css/bootstrap-theme.min.css | 15 +- .../css/bootstrap-theme.min.css.gz | Bin 20103 -> 2772 bytes .../css/bootstrap.23773f1bb199.css | 6834 +++++++ .../css/bootstrap.23773f1bb199.css.gz | Bin 0 -> 21006 bytes static/rest_framework/css/bootstrap.css | 6834 +++++++ static/rest_framework/css/bootstrap.css.gz | Bin 0 -> 20949 bytes .../css/bootstrap.ed23e508d5ce.css | 6834 +++++++ .../css/bootstrap.min.77017a69879a.css | 6 + .../css/bootstrap.min.77017a69879a.css.gz | Bin 0 -> 19646 bytes .../css/bootstrap.min.86ba6b6fae66.css | 6 - .../css/bootstrap.min.86ba6b6fae66.css.gz | Bin 19642 -> 0 bytes .../css/bootstrap.min.9568d6466155.css | 6 + static/rest_framework/css/bootstrap.min.css | 6 +- .../rest_framework/css/bootstrap.min.css.gz | Bin 19581 -> 19586 bytes .../css/bootstrap.min.ec3bb52a00e1.css | 6 - .../docs/css/base.c1f714975cce.css.gz | Bin 1552 -> 0 bytes static/rest_framework/docs/css/base.css | 4 + static/rest_framework/docs/css/base.css.gz | Bin 1552 -> 1563 bytes ...c1f714975cce.css => base.d9cd17260641.css} | 4 + .../docs/css/base.d9cd17260641.css.gz | Bin 0 -> 1563 bytes .../js/bootstrap.4919e6382103.js | 2408 +++ .../js/bootstrap.4919e6382103.js.gz | Bin 0 -> 14567 bytes static/rest_framework/js/bootstrap.js | 2408 +++ static/rest_framework/js/bootstrap.js.gz | Bin 0 -> 14567 bytes .../js/bootstrap.min.3d8308804264.js | 6 + .../js/bootstrap.min.3d8308804264.js.gz | Bin 0 -> 9996 bytes .../js/bootstrap.min.5869c96cc8f1.js | 7 - .../js/bootstrap.min.5869c96cc8f1.js.gz | Bin 9806 -> 0 bytes static/rest_framework/js/bootstrap.min.js | 7 +- static/rest_framework/js/bootstrap.min.js.gz | Bin 9806 -> 9996 bytes ...846d7d305c9.js => default.5b08897dbdc3.js} | 2 +- .../js/default.5b08897dbdc3.js.gz | Bin 0 -> 571 bytes .../js/default.b846d7d305c9.js.gz | Bin 568 -> 0 bytes static/rest_framework/js/default.js | 2 +- static/rest_framework/js/default.js.gz | Bin 568 -> 571 bytes static/staticfiles.json | 2 +- 97 files changed, 59492 insertions(+), 21898 deletions(-) create mode 100644 static/admin/css/base.7c5fa36168a7.css delete mode 100644 static/admin/img/README.837277fa1908.txt.gz rename static/admin/img/{README.837277fa1908.txt => README.a70711a38d87.txt} (90%) create mode 100644 static/admin/img/README.a70711a38d87.txt.gz delete mode 100644 static/admin/js/core.953326603873.js.gz rename static/admin/js/{core.953326603873.js => core.9c3bce7d1006.js} (99%) create mode 100644 static/admin/js/core.9c3bce7d1006.js.gz rename static/admin/js/{inlines.ff88b5c8f54a.js => inlines.3b3fb199b064.js} (99%) create mode 100644 static/admin/js/inlines.3b3fb199b064.js.gz delete mode 100644 static/admin/js/inlines.ff88b5c8f54a.js.gz rename static/babybuddy/css/{app.0163435a3ec4.css => app.5e5e1b68e17f.css} (84%) rename static/babybuddy/css/{app.b82863a2a4d6.css => app.7e0588ab9c78.css} (84%) create mode 100644 static/babybuddy/css/app.7e0588ab9c78.css.gz delete mode 100644 static/babybuddy/css/app.b82863a2a4d6.css.gz delete mode 100644 static/babybuddy/css/vendor.538af7ecea08.css.gz rename static/babybuddy/css/{vendor.538af7ecea08.css => vendor.be1a1448dd86.css} (99%) create mode 100644 static/babybuddy/css/vendor.be1a1448dd86.css.gz delete mode 100644 static/babybuddy/js/app.0079764f3fc1.js.gz rename static/babybuddy/js/{app.0079764f3fc1.js => app.818b5a7636cd.js} (100%) create mode 100644 static/babybuddy/js/app.818b5a7636cd.js.gz rename static/babybuddy/js/{graph.d96c5b659cfb.js => graph.9d17ed9a2576.js} (87%) create mode 100644 static/babybuddy/js/graph.9d17ed9a2576.js.gz delete mode 100644 static/babybuddy/js/graph.d96c5b659cfb.js.gz delete mode 100644 static/babybuddy/js/vendor.748ffa77dc7a.js.gz rename static/babybuddy/js/{vendor.748ffa77dc7a.js => vendor.9c126bd7589e.js} (82%) create mode 100644 static/babybuddy/js/vendor.9c126bd7589e.js.gz rename static/babybuddy/root/{browserconfig.5858221e0a38.xml => browserconfig.118acb4bca3d.xml} (100%) create mode 100644 static/babybuddy/root/browserconfig.118acb4bca3d.xml.gz delete mode 100644 static/babybuddy/root/browserconfig.5858221e0a38.xml.gz rename static/babybuddy/root/{site.webmanifest.61dac00bb04b.json => site.webmanifest.5d647514e2b7.json} (100%) create mode 100644 static/babybuddy/root/site.webmanifest.5d647514e2b7.json.gz delete mode 100644 static/babybuddy/root/site.webmanifest.61dac00bb04b.json.gz create mode 100644 static/rest_framework/css/bootstrap-theme.a279820bbeb5.css create mode 100644 static/rest_framework/css/bootstrap-theme.a279820bbeb5.css.gz create mode 100644 static/rest_framework/css/bootstrap-theme.css create mode 100644 static/rest_framework/css/bootstrap-theme.css.gz delete mode 100644 static/rest_framework/css/bootstrap-theme.min.00b93e6ea6fb.css delete mode 100644 static/rest_framework/css/bootstrap-theme.min.00b93e6ea6fb.css.gz delete mode 100644 static/rest_framework/css/bootstrap-theme.min.321ccd3adb83.css create mode 100644 static/rest_framework/css/bootstrap-theme.min.66b84a04375e.css create mode 100644 static/rest_framework/css/bootstrap-theme.min.66b84a04375e.css.gz create mode 100644 static/rest_framework/css/bootstrap.23773f1bb199.css create mode 100644 static/rest_framework/css/bootstrap.23773f1bb199.css.gz create mode 100644 static/rest_framework/css/bootstrap.css create mode 100644 static/rest_framework/css/bootstrap.css.gz create mode 100644 static/rest_framework/css/bootstrap.ed23e508d5ce.css create mode 100644 static/rest_framework/css/bootstrap.min.77017a69879a.css create mode 100644 static/rest_framework/css/bootstrap.min.77017a69879a.css.gz delete mode 100644 static/rest_framework/css/bootstrap.min.86ba6b6fae66.css delete mode 100644 static/rest_framework/css/bootstrap.min.86ba6b6fae66.css.gz create mode 100644 static/rest_framework/css/bootstrap.min.9568d6466155.css delete mode 100644 static/rest_framework/css/bootstrap.min.ec3bb52a00e1.css delete mode 100644 static/rest_framework/docs/css/base.c1f714975cce.css.gz rename static/rest_framework/docs/css/{base.c1f714975cce.css => base.d9cd17260641.css} (99%) create mode 100644 static/rest_framework/docs/css/base.d9cd17260641.css.gz create mode 100644 static/rest_framework/js/bootstrap.4919e6382103.js create mode 100644 static/rest_framework/js/bootstrap.4919e6382103.js.gz create mode 100644 static/rest_framework/js/bootstrap.js create mode 100644 static/rest_framework/js/bootstrap.js.gz create mode 100644 static/rest_framework/js/bootstrap.min.3d8308804264.js create mode 100644 static/rest_framework/js/bootstrap.min.3d8308804264.js.gz delete mode 100644 static/rest_framework/js/bootstrap.min.5869c96cc8f1.js delete mode 100644 static/rest_framework/js/bootstrap.min.5869c96cc8f1.js.gz rename static/rest_framework/js/{default.b846d7d305c9.js => default.5b08897dbdc3.js} (97%) create mode 100644 static/rest_framework/js/default.5b08897dbdc3.js.gz delete mode 100644 static/rest_framework/js/default.b846d7d305c9.js.gz diff --git a/package-lock.json b/package-lock.json index 1c75866a..1e208223 100644 --- a/package-lock.json +++ b/package-lock.json @@ -773,9 +773,9 @@ "dev": true }, "bootstrap": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.2.1.tgz", - "integrity": "sha512-tt/7vIv3Gm2mnd/WeDx36nfGGHleil0Wg8IeB7eMrVkY0fZ5iTaBisSh8oNANc2IBsCc6vCgCNTIM/IEN0+50Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", + "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==", "dev": true }, "boundary-cells": { @@ -945,12 +945,12 @@ }, "dependencies": { "magic-string": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", - "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", + "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", "dev": true, "requires": { - "sourcemap-codec": "^1.4.1" + "sourcemap-codec": "^1.4.4" } }, "vlq": { @@ -1804,9 +1804,9 @@ } }, "d3-quadtree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.5.tgz", - "integrity": "sha512-U2tjwDFbZ75JRAg8A+cqMvqPg1G3BE7UTJn3h8DHjY/pnsAfWdbJKgyfcy7zKjqGtLAmI0q8aDSeG1TVIKRaHQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.6.tgz", + "integrity": "sha512-NUgeo9G+ENQCQ1LsRr2qJg3MQ4DJvxcDNCiohdJGHt5gRhBW6orIB5m5FJ9kK3HNL8g9F4ERVoBzcEwQBfXWVA==", "dev": true }, "d3-timer": { @@ -2089,9 +2089,9 @@ } }, "earcut": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.1.4.tgz", - "integrity": "sha512-ttRjmPD5oaTtXOoxhFp9aZvMB14kBjapYaiBuzBB1elOgSLU9P2Ev86G2OClBg+uspUXERsIzXKpUWweH2K4Xg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.1.5.tgz", + "integrity": "sha512-QFWC7ywTVLtvRAJTVp8ugsuuGQ5mVqNmJ1cRYeLrSHgP3nycr2RHTJob9OtM0v8ujuoKN0NY1a93J/omeTL1PA==", "dev": true }, "ecc-jsbn": { @@ -2246,9 +2246,9 @@ "dev": true }, "escodegen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", - "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", + "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", "dev": true, "requires": { "esprima": "^3.1.3", @@ -3584,9 +3584,9 @@ } }, "gl-axes3d": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/gl-axes3d/-/gl-axes3d-1.4.4.tgz", - "integrity": "sha512-yvM1ZObNa4x7Lhh14sy9PGqNtwkFCX5dTvtkzVXB5qtdm4AWNBOMUiDlYbxn0uwyVXKdoDFxkPtnoTh1eFY+JQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/gl-axes3d/-/gl-axes3d-1.5.1.tgz", + "integrity": "sha512-AOx3jfzN+Z2YTFZ+7OTYaRWoFgSJhYA35BHZI8Q1VnYkB1ZQpco837x3zDSioA/qjkTG1lSUs2WpsfBoBW9NFg==", "dev": true, "requires": { "bit-twiddle": "^1.0.2", @@ -3660,9 +3660,9 @@ } }, "gl-error3d": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/gl-error3d/-/gl-error3d-1.0.12.tgz", - "integrity": "sha512-OaYMB0G9RJx8MfC16x6Q0TnYKZ51nrac4GiUqBlIKyDuNGW1U6YLmiuzY3u6ftQlh0jVhk7lDXCawgAeeYA3JA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/gl-error3d/-/gl-error3d-1.0.13.tgz", + "integrity": "sha512-KxZ7NhsYOLZTXpYpoHfebGZJPCxl5ZumlqX1NvJ+1hRxE0pt7gT6ZBMZvWCgUSt+XDtMtD6IolG6ADtRvgYCcg==", "dev": true, "requires": { "gl-buffer": "^2.1.2", @@ -3716,9 +3716,9 @@ } }, "gl-line3d": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/gl-line3d/-/gl-line3d-1.1.9.tgz", - "integrity": "sha512-00E3VAxTXGOpn8cGImtMaDnKs6UkyVYEZ2tzUBYwjea9N8UB6wvR1NBoKwb0A/wFNIYUsLhdc3LKZyliB0DVLA==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/gl-line3d/-/gl-line3d-1.1.10.tgz", + "integrity": "sha512-/IudYVrkERVwtQNaXYJNwDy3qoN/q/2Pb71bk2cqtTswda7moD2JO5o7xg9enSXGRb6vggRw26G4DDt/iMpK+Q==", "dev": true, "requires": { "binary-search-bounds": "^2.0.4", @@ -3859,9 +3859,9 @@ } }, "gl-scatter3d": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/gl-scatter3d/-/gl-scatter3d-1.1.5.tgz", - "integrity": "sha512-i/5Vrd2c9rqvgISkJcrSz3st7eCCIBgCkICb73MBJANd+PI+ptRZ3mgrUttwGB3bQm01HKJPpBr/R4/gQ6PPAw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/gl-scatter3d/-/gl-scatter3d-1.1.6.tgz", + "integrity": "sha512-KwdBJMyc9d7snHAfIlJAPPFa70zNWjrxuZV6NyMCEM9WlzFCoIScMtbuPdpQZJccaFjmM+aBfyiyWBbGWYsBjw==", "dev": true, "requires": { "gl-buffer": "^2.0.6", @@ -5596,9 +5596,9 @@ } }, "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, "lodash.assign": { @@ -6835,9 +6835,9 @@ } }, "plotly.js": { - "version": "1.44.1", - "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-1.44.1.tgz", - "integrity": "sha512-uJZYLuUNbNVI00VHCmDwbvs3MBCNewAX7+7sIHSMTw3D/E12ufqpqsFzUc87LzBMPc34gjOJWxeJbVFiSXZ5xQ==", + "version": "1.44.4", + "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-1.44.4.tgz", + "integrity": "sha512-YTSR4gZCpZw4PznaxdRQEh39SUok0lTJtRfIYG5AGoSmQ83JN6nEbHsGbaNZeB3L0M5eHRbeCEEJDSDLngKFTQ==", "dev": true, "requires": { "3d-view": "^2.0.0", @@ -6856,15 +6856,15 @@ "font-atlas-sdf": "^1.3.3", "gl-cone3d": "^1.2.2", "gl-contour2d": "^1.1.5", - "gl-error3d": "^1.0.11", + "gl-error3d": "^1.0.13", "gl-heatmap2d": "^1.0.5", - "gl-line3d": "^1.1.8", + "gl-line3d": "^1.1.10", "gl-mat4": "^1.2.0", - "gl-mesh3d": "^2.0.6", + "gl-mesh3d": "^2.0.7", "gl-plot2d": "^1.4.2", "gl-plot3d": "^1.6.3", "gl-pointcloud2d": "^1.0.2", - "gl-scatter3d": "^1.1.4", + "gl-scatter3d": "^1.1.6", "gl-select-box": "^1.0.3", "gl-spikes2d": "^1.0.2", "gl-streamtube3d": "^1.1.2", @@ -8380,9 +8380,9 @@ "dev": true }, "static-eval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.0.tgz", - "integrity": "sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.1.tgz", + "integrity": "sha512-1JJ8ADJ7UB//CRqocI6j4WxGvSqQHX14Fz0gXDNvRA6Y1JIAI/lMNdqn1lpnaA6ugQ0fMH0uBB955DkwhKActw==", "dev": true, "requires": { "escodegen": "^1.8.1" @@ -8880,33 +8880,53 @@ } }, "tape": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.9.2.tgz", - "integrity": "sha512-lPXKRKILZ1kZaUy5ynWKs8ATGSUO7HAFHCFnBam6FaGSqPdOwMWbxXHq4EXFLE8WRTleo/YOMXkaUTRmTB1Fiw==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.10.1.tgz", + "integrity": "sha512-G0DywYV1jQeY3axeYnXUOt6ktnxS9OPJh97FGR3nrua8lhWi1zPflLxcAHavZ7Jf3qUfY7cxcVIVFa4mY2IY1w==", "dev": true, "requires": { "deep-equal": "~1.0.1", "defined": "~1.0.0", "for-each": "~0.3.3", "function-bind": "~1.1.1", - "glob": "~7.1.2", + "glob": "~7.1.3", "has": "~1.0.3", "inherits": "~2.0.3", "minimist": "~1.2.0", "object-inspect": "~1.6.0", - "resolve": "~1.7.1", + "resolve": "~1.10.0", "resumer": "~0.0.0", "string.prototype.trim": "~1.1.2", "through": "~2.3.8" }, "dependencies": { - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "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" + } + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" } } } diff --git a/package.json b/package.json index d1a66516..660fad50 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "url": "https://github.com/cdubz/babybuddy.git" }, "devDependencies": { - "bootstrap": "4.2.1", + "bootstrap": "4.3.1", "del": "^3.0.0", "font-awesome": "^4.7.0", "gulp": "^4.0.0", @@ -21,7 +21,7 @@ "gulp-uglify": "^3.0.1", "jquery": "^3.3.1", "moment": "^2.24.0", - "plotly.js": "^1.44.1", + "plotly.js": "^1.44.4", "popper.js": "^1.14.7", "pump": "^3.0.0", "tempusdominus-bootstrap-4": "^5.1.2", diff --git a/static/admin/css/base.7c5fa36168a7.css b/static/admin/css/base.7c5fa36168a7.css new file mode 100644 index 00000000..f51bc28b --- /dev/null +++ b/static/admin/css/base.7c5fa36168a7.css @@ -0,0 +1,983 @@ +/* + DJANGO Admin styles +*/ + +@import url("fonts.494e4ec545c9.css"); + +body { + margin: 0; + padding: 0; + font-size: 14px; + font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; + color: #333; + background: #fff; +} + +/* LINKS */ + +a:link, a:visited { + color: #447e9b; + text-decoration: none; +} + +a:focus, a:hover { + color: #036; +} + +a:focus { + text-decoration: underline; +} + +a img { + border: none; +} + +a.section:link, a.section:visited { + color: #fff; + text-decoration: none; +} + +a.section:focus, a.section:hover { + text-decoration: underline; +} + +/* GLOBAL DEFAULTS */ + +p, ol, ul, dl { + margin: .2em 0 .8em 0; +} + +p { + padding: 0; + line-height: 140%; +} + +h1,h2,h3,h4,h5 { + font-weight: bold; +} + +h1 { + margin: 0 0 20px; + font-weight: 300; + font-size: 20px; + color: #666; +} + +h2 { + font-size: 16px; + margin: 1em 0 .5em 0; +} + +h2.subhead { + font-weight: normal; + margin-top: 0; +} + +h3 { + font-size: 14px; + margin: .8em 0 .3em 0; + color: #666; + font-weight: bold; +} + +h4 { + font-size: 12px; + margin: 1em 0 .8em 0; + padding-bottom: 3px; +} + +h5 { + font-size: 10px; + margin: 1.5em 0 .5em 0; + color: #666; + text-transform: uppercase; + letter-spacing: 1px; +} + +ul li { + list-style-type: square; + padding: 1px 0; +} + +li ul { + margin-bottom: 0; +} + +li, dt, dd { + font-size: 13px; + line-height: 20px; +} + +dt { + font-weight: bold; + margin-top: 4px; +} + +dd { + margin-left: 0; +} + +form { + margin: 0; + padding: 0; +} + +fieldset { + margin: 0; + padding: 0; + border: none; + border-top: 1px solid #eee; +} + +blockquote { + font-size: 11px; + color: #777; + margin-left: 2px; + padding-left: 10px; + border-left: 5px solid #ddd; +} + +code, pre { + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; + color: #666; + font-size: 12px; +} + +pre.literal-block { + margin: 10px; + background: #eee; + padding: 6px 8px; +} + +code strong { + color: #930; +} + +hr { + clear: both; + color: #eee; + background-color: #eee; + height: 1px; + border: none; + margin: 0; + padding: 0; + font-size: 1px; + line-height: 1px; +} + +/* TEXT STYLES & MODIFIERS */ + +.small { + font-size: 11px; +} + +.tiny { + font-size: 10px; +} + +p.tiny { + margin-top: -2px; +} + +.mini { + font-size: 10px; +} + +p.mini { + margin-top: -3px; +} + +.help, p.help, form p.help, div.help, form div.help, div.help li { + font-size: 11px; + color: #999; +} + +div.help ul { + margin-bottom: 0; +} + +.help-tooltip { + cursor: help; +} + +p img, h1 img, h2 img, h3 img, h4 img, td img { + vertical-align: middle; +} + +.quiet, a.quiet:link, a.quiet:visited { + color: #999; + font-weight: normal; +} + +.float-right { + float: right; +} + +.float-left { + float: left; +} + +.clear { + clear: both; +} + +.align-left { + text-align: left; +} + +.align-right { + text-align: right; +} + +.example { + margin: 10px 0; + padding: 5px 10px; + background: #efefef; +} + +.nowrap { + white-space: nowrap; +} + +/* TABLES */ + +table { + border-collapse: collapse; + border-color: #ccc; +} + +td, th { + font-size: 13px; + line-height: 16px; + border-bottom: 1px solid #eee; + vertical-align: top; + padding: 8px; + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; +} + +th { + font-weight: 600; + text-align: left; +} + +thead th, +tfoot td { + color: #666; + padding: 5px 10px; + font-size: 11px; + background: #fff; + border: none; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; +} + +tfoot td { + border-bottom: none; + border-top: 1px solid #eee; +} + +thead th.required { + color: #000; +} + +tr.alt { + background: #f6f6f6; +} + +.row1 { + background: #fff; +} + +.row2 { + background: #f9f9f9; +} + +/* SORTABLE TABLES */ + +thead th { + padding: 5px 10px; + line-height: normal; + text-transform: uppercase; + background: #f6f6f6; +} + +thead th a:link, thead th a:visited { + color: #666; +} + +thead th.sorted { + background: #eee; +} + +thead th.sorted .text { + padding-right: 42px; +} + +table thead th .text span { + padding: 8px 10px; + display: block; +} + +table thead th .text a { + display: block; + cursor: pointer; + padding: 8px 10px; +} + +table thead th .text a:focus, table thead th .text a:hover { + background: #eee; +} + +thead th.sorted a.sortremove { + visibility: hidden; +} + +table thead th.sorted:hover a.sortremove { + visibility: visible; +} + +table thead th.sorted .sortoptions { + display: block; + padding: 9px 5px 0 5px; + float: right; + text-align: right; +} + +table thead th.sorted .sortpriority { + font-size: .8em; + min-width: 12px; + text-align: center; + vertical-align: 3px; + margin-left: 2px; + margin-right: 2px; +} + +table thead th.sorted .sortoptions a { + position: relative; + width: 14px; + height: 14px; + display: inline-block; + background: url("../img/sorting-icons.3a097b59f104.svg") 0 0 no-repeat; + background-size: 14px auto; +} + +table thead th.sorted .sortoptions a.sortremove { + background-position: 0 0; +} + +table thead th.sorted .sortoptions a.sortremove:after { + content: '\\'; + position: absolute; + top: -6px; + left: 3px; + font-weight: 200; + font-size: 18px; + color: #999; +} + +table thead th.sorted .sortoptions a.sortremove:focus:after, +table thead th.sorted .sortoptions a.sortremove:hover:after { + color: #447e9b; +} + +table thead th.sorted .sortoptions a.sortremove:focus, +table thead th.sorted .sortoptions a.sortremove:hover { + background-position: 0 -14px; +} + +table thead th.sorted .sortoptions a.ascending { + background-position: 0 -28px; +} + +table thead th.sorted .sortoptions a.ascending:focus, +table thead th.sorted .sortoptions a.ascending:hover { + background-position: 0 -42px; +} + +table thead th.sorted .sortoptions a.descending { + top: 1px; + background-position: 0 -56px; +} + +table thead th.sorted .sortoptions a.descending:focus, +table thead th.sorted .sortoptions a.descending:hover { + background-position: 0 -70px; +} + +/* FORM DEFAULTS */ + +input, textarea, select, .form-row p, form .button { + margin: 2px 0; + padding: 2px 3px; + vertical-align: middle; + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; + font-weight: normal; + font-size: 13px; +} +.form-row div.help { + padding: 2px 3px; +} + +textarea { + vertical-align: top; +} + +input[type=text], input[type=password], input[type=email], input[type=url], +input[type=number], input[type=tel], textarea, select, .vTextField { + border: 1px solid #ccc; + border-radius: 4px; + padding: 5px 6px; + margin-top: 0; +} + +input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, +input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus, +textarea:focus, select:focus, .vTextField:focus { + border-color: #999; +} + +select { + height: 30px; +} + +select[multiple] { + min-height: 150px; +} + +/* FORM BUTTONS */ + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: #79aec8; + padding: 10px 15px; + border: none; + border-radius: 4px; + color: #fff; + cursor: pointer; +} + +a.button { + padding: 4px 5px; +} + +.button:active, input[type=submit]:active, input[type=button]:active, +.button:focus, input[type=submit]:focus, input[type=button]:focus, +.button:hover, input[type=submit]:hover, input[type=button]:hover { + background: #609ab6; +} + +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { + opacity: 0.4; +} + +.button.default, input[type=submit].default, .submit-row input.default { + float: right; + border: none; + font-weight: 400; + background: #417690; +} + +.button.default:active, input[type=submit].default:active, +.button.default:focus, input[type=submit].default:focus, +.button.default:hover, input[type=submit].default:hover { + background: #205067; +} + +.button[disabled].default, +input[type=submit][disabled].default, +input[type=button][disabled].default { + opacity: 0.4; +} + + +/* MODULES */ + +.module { + border: none; + margin-bottom: 30px; + background: #fff; +} + +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { + padding-left: 10px; + padding-right: 10px; +} + +.module blockquote { + margin-left: 12px; +} + +.module ul, .module ol { + margin-left: 1.5em; +} + +.module h3 { + margin-top: .6em; +} + +.module h2, .module caption, .inline-group h2 { + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 13px; + text-align: left; + background: #79aec8; + color: #fff; +} + +.module caption, +.inline-group h2 { + font-size: 12px; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +.module table { + border-collapse: collapse; +} + +/* MESSAGES & ERRORS */ + +ul.messagelist { + padding: 0; + margin: 0; +} + +ul.messagelist li { + display: block; + font-weight: 400; + font-size: 13px; + padding: 10px 10px 10px 65px; + margin: 0 0 10px 0; + background: #dfd url("../img/icon-yes.d2f9f035226a.svg") 40px 12px no-repeat; + background-size: 16px auto; + color: #333; +} + +ul.messagelist li.warning { + background: #ffc url("../img/icon-alert.034cc7d8a67f.svg") 40px 14px no-repeat; + background-size: 14px auto; +} + +ul.messagelist li.error { + background: #ffefef url("../img/icon-no.439e821418cd.svg") 40px 12px no-repeat; + background-size: 16px auto; +} + +.errornote { + font-size: 14px; + font-weight: 700; + display: block; + padding: 10px 12px; + margin: 0 0 10px 0; + color: #ba2121; + border: 1px solid #ba2121; + border-radius: 4px; + background-color: #fff; + background-position: 5px 12px; +} + +ul.errorlist { + margin: 0 0 4px; + padding: 0; + color: #ba2121; + background: #fff; +} + +ul.errorlist li { + font-size: 13px; + display: block; + margin-bottom: 4px; +} + +ul.errorlist li:first-child { + margin-top: 0; +} + +ul.errorlist li a { + color: inherit; + text-decoration: underline; +} + +td ul.errorlist { + margin: 0; + padding: 0; +} + +td ul.errorlist li { + margin: 0; +} + +.form-row.errors { + margin: 0; + border: none; + border-bottom: 1px solid #eee; + background: none; +} + +.form-row.errors ul.errorlist li { + padding-left: 0; +} + +.errors input, .errors select, .errors textarea { + border: 1px solid #ba2121; +} + +div.system-message { + background: #ffc; + margin: 10px; + padding: 6px 8px; + font-size: .8em; +} + +div.system-message p.system-message-title { + padding: 4px 5px 4px 25px; + margin: 0; + color: #c11; + background: #ffefef url("../img/icon-no.439e821418cd.svg") 5px 5px no-repeat; +} + +.description { + font-size: 12px; + padding: 5px 0 0 12px; +} + +/* BREADCRUMBS */ + +div.breadcrumbs { + background: #79aec8; + padding: 10px 40px; + border: none; + font-size: 14px; + color: #c4dce8; + text-align: left; +} + +div.breadcrumbs a { + color: #fff; +} + +div.breadcrumbs a:focus, div.breadcrumbs a:hover { + color: #c4dce8; +} + +/* ACTION ICONS */ + +.viewlink, .inlineviewlink { + padding-left: 16px; + background: url("../img/icon-viewlink.41eb31f7826e.svg") 0 1px no-repeat; +} + +.addlink { + padding-left: 16px; + background: url("../img/icon-addlink.d519b3bab011.svg") 0 1px no-repeat; +} + +.changelink, .inlinechangelink { + padding-left: 16px; + background: url("../img/icon-changelink.18d2fd706348.svg") 0 1px no-repeat; +} + +.deletelink { + padding-left: 16px; + background: url("../img/icon-deletelink.564ef9dc3854.svg") 0 1px no-repeat; +} + +a.deletelink:link, a.deletelink:visited { + color: #CC3434; +} + +a.deletelink:focus, a.deletelink:hover { + color: #993333; + text-decoration: none; +} + +/* OBJECT TOOLS */ + +.object-tools { + font-size: 10px; + font-weight: bold; + padding-left: 0; + float: right; + position: relative; + margin-top: -48px; +} + +.form-row .object-tools { + margin-top: 5px; + margin-bottom: 5px; + float: none; + height: 2em; + padding-left: 3.5em; +} + +.object-tools li { + display: block; + float: left; + margin-left: 5px; + height: 16px; +} + +.object-tools a { + border-radius: 15px; +} + +.object-tools a:link, .object-tools a:visited { + display: block; + float: left; + padding: 3px 12px; + background: #999; + font-weight: 400; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.5px; + color: #fff; +} + +.object-tools a:focus, .object-tools a:hover { + background-color: #417690; +} + +.object-tools a:focus{ + text-decoration: none; +} + +.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink { + background-repeat: no-repeat; + background-position: right 7px center; + padding-right: 26px; +} + +.object-tools a.viewsitelink, .object-tools a.golink { + background-image: url("../img/tooltag-arrowright.bbfb788a849e.svg"); +} + +.object-tools a.addlink { + background-image: url("../img/tooltag-add.e59d620a9742.svg"); +} + +/* OBJECT HISTORY */ + +table#change-history { + width: 100%; +} + +table#change-history tbody th { + width: 16em; +} + +/* PAGE STRUCTURE */ + +#container { + position: relative; + width: 100%; + min-width: 980px; + padding: 0; +} + +#content { + padding: 20px 40px; +} + +.dashboard #content { + width: 600px; +} + +#content-main { + float: left; + width: 100%; +} + +#content-related { + float: right; + width: 260px; + position: relative; + margin-right: -300px; +} + +#footer { + clear: both; + padding: 10px; +} + +/* COLUMN TYPES */ + +.colMS { + margin-right: 300px; +} + +.colSM { + margin-left: 300px; +} + +.colSM #content-related { + float: left; + margin-right: 0; + margin-left: -300px; +} + +.colSM #content-main { + float: right; +} + +.popup .colM { + width: auto; +} + +/* HEADER */ + +#header { + width: auto; + height: 40px; + padding: 10px 40px; + background: #417690; + line-height: 40px; + color: #ffc; + overflow: hidden; +} + +#header a:link, #header a:visited { + color: #fff; +} + +#header a:focus , #header a:hover { + text-decoration: underline; +} + +#branding { + float: left; +} + +#branding h1 { + padding: 0; + margin: 0 20px 0 0; + font-weight: 300; + font-size: 24px; + color: #f5dd5d; +} + +#branding h1, #branding h1 a:link, #branding h1 a:visited { + color: #f5dd5d; +} + +#branding h2 { + padding: 0 10px; + font-size: 14px; + margin: -8px 0 8px 0; + font-weight: normal; + color: #ffc; +} + +#branding a:hover { + text-decoration: none; +} + +#user-tools { + float: right; + padding: 0; + margin: 0 0 0 20px; + font-weight: 300; + font-size: 11px; + letter-spacing: 0.5px; + text-transform: uppercase; + text-align: right; +} + +#user-tools a { + border-bottom: 1px solid rgba(255, 255, 255, 0.25); +} + +#user-tools a:focus, #user-tools a:hover { + text-decoration: none; + border-bottom-color: #79aec8; + color: #79aec8; +} + +/* SIDEBAR */ + +#content-related { + background: #f8f8f8; +} + +#content-related .module { + background: none; +} + +#content-related h3 { + font-size: 14px; + color: #666; + padding: 0 16px; + margin: 0 0 16px; +} + +#content-related h4 { + font-size: 13px; +} + +#content-related p { + padding-left: 16px; + padding-right: 16px; +} + +#content-related .actionlist { + padding: 0; + margin: 16px; +} + +#content-related .actionlist li { + line-height: 1.2; + margin-bottom: 10px; + padding-left: 18px; +} + +#content-related .module h2 { + background: none; + padding: 16px; + margin-bottom: 16px; + border-bottom: 1px solid #eaeaea; + font-size: 18px; + color: #333; +} + +.delete-confirmation form input[type="submit"] { + background: #ba2121; + border-radius: 4px; + padding: 10px 15px; + color: #fff; +} + +.delete-confirmation form input[type="submit"]:active, +.delete-confirmation form input[type="submit"]:focus, +.delete-confirmation form input[type="submit"]:hover { + background: #a41515; +} + +.delete-confirmation form .cancel-link { + display: inline-block; + vertical-align: middle; + height: 15px; + line-height: 15px; + background: #ddd; + border-radius: 4px; + padding: 10px 15px; + color: #333; + margin: 0 0 0 10px; +} + +.delete-confirmation form .cancel-link:active, +.delete-confirmation form .cancel-link:focus, +.delete-confirmation form .cancel-link:hover { + background: #ccc; +} + +/* POPUP */ +.popup #content { + padding: 20px; +} + +.popup #container { + min-width: 0; +} + +.popup #header { + padding: 10px 20px; +} diff --git a/static/admin/css/base.7ea12481fb59.css b/static/admin/css/base.7ea12481fb59.css index f51bc28b..500499f0 100644 --- a/static/admin/css/base.7ea12481fb59.css +++ b/static/admin/css/base.7ea12481fb59.css @@ -2,7 +2,7 @@ DJANGO Admin styles */ -@import url("fonts.494e4ec545c9.css"); +@import url("fonts.cc6140298ba7.css"); body { margin: 0; diff --git a/static/admin/img/README.837277fa1908.txt.gz b/static/admin/img/README.837277fa1908.txt.gz deleted file mode 100644 index 43182c77db11aa2707a91d700b8ff72a0101387f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmV;{04e_;iwFP!00002|8tCbLp7W`z3rEICbLFr zziq4fmCG={`zT|e9EVQFaPM!H{-!3I*XO2Q8vtc>apoajLuXT({R>RY{} Qnpu1I1+0$fd_DmH0Ep;kxc~qF diff --git a/static/admin/img/README.837277fa1908.txt b/static/admin/img/README.a70711a38d87.txt similarity index 90% rename from static/admin/img/README.837277fa1908.txt rename to static/admin/img/README.a70711a38d87.txt index 43373ad1..4eb2e492 100644 --- a/static/admin/img/README.837277fa1908.txt +++ b/static/admin/img/README.a70711a38d87.txt @@ -1,6 +1,6 @@ All icons are taken from Font Awesome (http://fontawesome.io/) project. The Font Awesome font is licensed under the SIL OFL 1.1: -- http://scripts.sil.org/OFL +- https://scripts.sil.org/OFL SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG Font-Awesome-SVG-PNG is licensed under the MIT license (see file license diff --git a/static/admin/img/README.a70711a38d87.txt.gz b/static/admin/img/README.a70711a38d87.txt.gz new file mode 100644 index 0000000000000000000000000000000000000000..d3afcbd6be7ba75414a71eea6660e14b2906d17c GIT binary patch literal 214 zcmV;{04e_;iwFP!00002|8-A6}u<$ z_j4k4Ads|=H^a;}C2*8%=#)^p8)ft=BX*Jtwx47&5>`VgQyW5GVfW2EOITx4`Jh<5 zI}h|bvZ!D~;z-%(f;nGEQL1-39PzR{V&gZhYp`@%Ew`vV74yc)i(W%joIAbk@B2(< zjnw|=S1!Z+?xT!>avVAx!!n?`4`^z#d41lyzu-T^o(|^+#>%Lk;6xANI3v!gRDbo7 QYG&=-7frS7pFaTr0A8SIz5oCK literal 0 HcmV?d00001 diff --git a/static/admin/img/README.txt b/static/admin/img/README.txt index 43373ad1..4eb2e492 100644 --- a/static/admin/img/README.txt +++ b/static/admin/img/README.txt @@ -1,6 +1,6 @@ All icons are taken from Font Awesome (http://fontawesome.io/) project. The Font Awesome font is licensed under the SIL OFL 1.1: -- http://scripts.sil.org/OFL +- https://scripts.sil.org/OFL SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG Font-Awesome-SVG-PNG is licensed under the MIT license (see file license diff --git a/static/admin/img/README.txt.gz b/static/admin/img/README.txt.gz index 43182c77db11aa2707a91d700b8ff72a0101387f..d3afcbd6be7ba75414a71eea6660e14b2906d17c 100644 GIT binary patch literal 214 zcmV;{04e_;iwFP!00002|8-A6}u<$ z_j4k4Ads|=H^a;}C2*8%=#)^p8)ft=BX*Jtwx47&5>`VgQyW5GVfW2EOITx4`Jh<5 zI}h|bvZ!D~;z-%(f;nGEQL1-39PzR{V&gZhYp`@%Ew`vV74yc)i(W%joIAbk@B2(< zjnw|=S1!Z+?xT!>avVAx!!n?`4`^z#d41lyzu-T^o(|^+#>%Lk;6xANI3v!gRDbo7 QYG&=-7frS7pFaTr0A8SIz5oCK literal 214 zcmV;{04e_;iwFP!00002|8tCbLp7W`z3rEICbLFr zziq4fmCG={`zT|e9EVQFaPM!H{-!3I*XO2Q8vtc>apoajLuXT({R>RY{} Qnpu1I1+0$fd_DmH0Ep;kxc~qF diff --git a/static/admin/js/core.953326603873.js.gz b/static/admin/js/core.953326603873.js.gz deleted file mode 100644 index 89dfe0e055886ead4d55227ae71b57959a404270..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1835 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 aTSDFx!i;O?Y&j`T+WrBg_X_&o8vp>eB9d_c literal 0 HcmV?d00001 diff --git a/static/admin/js/core.js b/static/admin/js/core.js index 2989a94c..591394e5 100644 --- a/static/admin/js/core.js +++ b/static/admin/js/core.js @@ -30,7 +30,7 @@ function removeChildren(a) { // ---------------------------------------------------------------------------- // Find-position functions by PPK -// See http://www.quirksmode.org/js/findpos.html +// See https://www.quirksmode.org/js/findpos.html // ---------------------------------------------------------------------------- function findPosX(obj) { 'use strict'; diff --git a/static/admin/js/core.js.gz b/static/admin/js/core.js.gz index 89dfe0e055886ead4d55227ae71b57959a404270..1e37902b5bd504bbd7f751773ff69ae912bf538f 100644 GIT binary patch delta 1326 zcmV+}1=0Ge4y+Ea5CVVn`u*i{=|a#Z-{b;Ra78lff0g|y@BkL>TrI*!mvLinJmo^j zPuh1obHz`SkWCdt)}TlR3?ng}LL^=29JY;b9JC99KRI8B&;t4fS9(yE@)|^*lL7Iv zu=NuWhKR88$HX+TnPle`nDyof%n4=6MnS$ZNg|;LkNhx&6jpz8jM2CkvRf8zC{bx$ zGod8nNm=PKCF3Egl{Kjfxh5X^3FhX?p0lVy_c&&^B>`9WLvVv z6)f!ZGXVYvZf?-4q{clyUR8W-v0T-=SRqecz6gN(U5(Cax z)E>0q0^iz&JG}!^)vgcs6idg*o>C!J3w1mwq^fLsm4$zOXzFPc^N18>U+S$!wU zh7}d93SM|k_Aleky~a>017mNy&OO7MQm667c^iLx**-gOm#Hqj#y~9tm)_RRvZ`Y4 zHs*dKe25pcWxe4)RghN@4fV(ssMWU5MTcX^!PlrO(+R|qbJ8WhRLHJD+rxz>QDc{u-cmABp{1kGcc$&JJ<^ufIp|nnR0kXrzV_R#b(KE z&NP1yMc5O~EQL&A@a zs^L`PUI+osEp~SJtqRKP`Ii0wiubGNdUAjHCEG)E7Gv2wvw!1$?)At0PB{mItQpp+ zyc1Z-&y04}CHki7k`?5CZT8wSHRP~da^=s7V?%HFxGsHt3i;J~612RnEq&+E6^<}L zC!inJLM92L--b<$7Y&RT=2OP7#t)+JVSnAg9!$XC_yI7=Eox>?dnNKh_@HP$al$EC`DKE@=dQq z;DcN0bBZw~gpSQj$2L@}gz9~_CIhwPj&7lVm4nvWgfs+G$Lc889qccEKz03tsZ2Am zh@tlgh*T@c9;{FlI%$>-Z+_e;6~BKo@I*(v2p3%(VvMAGpN4GruniWn|6@QK+{))| z#lK^qFQ#xWedJ)|!$VTHj=jUkD6J*1Gu~pq7p;-L)#~8ZMIvIBsFh~nSSr~QDKo~> zl&+s9I4Y}?!_a~x#fzJ;ID}5!>3{AypO>BftXouPfSpq)X>d0kH%w>ZW9TN&KExp8 k2ol(y?yRk6%LrRS-W0-&Yvyb@DNfq{0i^c|`rjJ>0C9?xEdT%j delta 1325 zcmV+|1=9Mg4yz8Z5CVVK?=P227h*Q~CKsTAE0S6NtL#sK1#ocZY7suVh#Pa`DHlS1 z(yrT?Dt?-TY^orz21PDl6p85+0_j4hux)$epIs3A$@xNn7SK1i(u1m$mmu<-42YLS zt)GZ6M1++-CZvhYBs;IbtT#_!PN-5g3euHH5(!0k+;xT$jO6q z$2E-_tq|4=^c=&c73>~SUN`blnSw0sN+E)Rb|twEbMf2X?x`;vaSA*^Y=2!cS_L+$PT?<%$I2x>XPx6F7CAy(1x|MsuId;WbQ5yF5gYB8BJ~~#csS)OSprkikG#6 z&#MJh)q7^jSs36&Q@##SG!9%4>**GVJv> ztf**J@WN}de;Ie~HHKOl7<=1w?it>cI*l*R+u(o8_St#6Om*os25K3&^tNu6RTXo$ zG4~tcL%g6Z>ka>@g1mxgs7J0qt+stGIvhg|K1N-cP9TwCLUs+})>D;n?I&#y ze-(|xuoQp^lWB+_X6<%YfB6rF)z%yb0a^5#c|o<=!CuG!{5eg|l*2nZHR0SUHcM`E zrg?ujGHGyAVWK;V@or}?Fs0lw{Dv(9bf6!O! ztkH*A6)mR07xM+bsc6|61_Tb_f-h1NRV!S?mS)Ga(}fvJ6Q{w@f|@{sz$*?J5`J`4 z4W|^7|X_){TugluRrd0$~hQh&9F}8 zoxntRVkuv)7iXA&2FXD}PQL8+yaXb?NI<$gkFupyh3C={tw6aDoXs z0sXKRGD#TyHf&x`$u|4T>9*uCSrd< zK3t869(R!6z+V1M}os_P$2Wtxda z482D{q*_7tV1=U4NwaKt^W#RT_?>@&CpzLqxai^#V>Wl%X)S@B@fQ2NXpQu(RtL8(5)rdRtuzbAQpui3nK728 zbp15JQCXcFh883#UfhJmA$00a|8vjzyzKO6-J&`J?3_YLgS+XtVLB5ZLw_aqAqF8w jkihnIXKg)OM%WVarVwUaGiS?5ankk=LG!0--Wvb_SZ0To diff --git a/static/admin/js/inlines.ff88b5c8f54a.js b/static/admin/js/inlines.3b3fb199b064.js similarity index 99% rename from static/admin/js/inlines.ff88b5c8f54a.js rename to static/admin/js/inlines.3b3fb199b064.js index 5916e86f..045ef1ec 100644 --- a/static/admin/js/inlines.ff88b5c8f54a.js +++ b/static/admin/js/inlines.3b3fb199b064.js @@ -13,7 +13,7 @@ * and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. * * Licensed under the New BSD License - * See: http://www.opensource.org/licenses/bsd-license.php + * See: https://opensource.org/licenses/bsd-license.php */ (function($) { 'use strict'; diff --git a/static/admin/js/inlines.3b3fb199b064.js.gz b/static/admin/js/inlines.3b3fb199b064.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..8204bd767e0a6339ffdf3cae47f26f42e71a407e GIT binary patch literal 3279 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 delta 454 zcmV;%0XhE98PXZBd;xzS&Ssm2-sIEu7~^hq5m+a1xry0-7PX-{az@qGEcxUz7=c@4_|@l zuG?DU7UTt6@avGI$#r`Hl>nYx6l|%7rC{%qAObi74hEB20zmw z0yP|^#g@obw$WHZlZ4Dmr2xBOCpOSfz<(jK4M2{Q4g(+oxRWmfW&uf)mIIaoP!E$X z1XB!)(39ZSx@~V9W}!KgjRdv=!1j|x1t0~aVp#!clWGM(2S_91ELD(Jld%Oj0?4kD z>jn7?i(^-?S4pUw@!aWplkf&)0X36V2Q&p`mM2ozla2?d0Wy;}2rmIslV=FH5=|_b z{?ec3SScg&KoycF$qxu+@h0&2_Y5rF*s7p2IYUX%^Bn@gByIEf_Zphle!5Z w3wI0duo1@0blZ6wv*rn)0Rk8ClZXqb0w2edG7OLnH&f8`Z_p5Rto1bj0I!P1I{*Lx diff --git a/static/babybuddy/css/app.0163435a3ec4.css b/static/babybuddy/css/app.5e5e1b68e17f.css similarity index 84% rename from static/babybuddy/css/app.0163435a3ec4.css rename to static/babybuddy/css/app.5e5e1b68e17f.css index f9501dca..72088179 100644 --- a/static/babybuddy/css/app.0163435a3ec4.css +++ b/static/babybuddy/css/app.5e5e1b68e17f.css @@ -21,9 +21,9 @@ border-color: inherit; } /*! - * Bootstrap v4.1.3 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ :root { @@ -55,7 +55,7 @@ --breakpoint-md: 768px; --breakpoint-lg: 992px; --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } *, @@ -67,19 +67,14 @@ html { font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -ms-overflow-style: scrollbar; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } -@-ms-viewport { - width: device-width; } - article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; line-height: 1.5; @@ -108,7 +103,8 @@ abbr[data-original-title] { text-decoration: underline; text-decoration: underline dotted; cursor: help; - border-bottom: 0; } + border-bottom: 0; + text-decoration-skip-ink: none; } address { margin-bottom: 1rem; @@ -137,9 +133,6 @@ dd { blockquote { margin: 0 0 1rem; } -dfn { - font-style: italic; } - b, strong { font-weight: bolder; } @@ -163,8 +156,7 @@ sup { a { color: #15b2d3; text-decoration: none; - background-color: transparent; - -webkit-text-decoration-skip: objects; } + background-color: transparent; } a:hover { color: #0e778d; text-decoration: underline; } @@ -188,8 +180,7 @@ samp { pre { margin-top: 0; margin-bottom: 1rem; - overflow: auto; - -ms-overflow-style: scrollbar; } + overflow: auto; } figure { margin: 0 0 1rem; } @@ -244,12 +235,21 @@ button, select { text-transform: none; } +select { + word-wrap: normal; } + button, -html [type="button"], +[type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), +[type="submit"]:not(:disabled) { + cursor: pointer; } + button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, @@ -300,7 +300,6 @@ progress { outline-offset: -2px; -webkit-appearance: none; } -[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } @@ -324,10 +323,8 @@ template { h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .card-dashboard .card-header, .card-dashboard .card-body .card-title, .h5, .h6 { margin-bottom: 0.5rem; - font-family: inherit; font-weight: 500; - line-height: 1.2; - color: inherit; } + line-height: 1.2; } h1, .h1 { font-size: 2.5rem; } @@ -413,7 +410,7 @@ mark, font-size: 80%; color: #6c757d; } .blockquote-footer::before { - content: "\2014 \00A0"; } + content: "\2014\00A0"; } .img-fluid { max-width: 100%; @@ -517,7 +514,6 @@ pre { .col-xl-auto { position: relative; width: 100%; - min-height: 1px; padding-right: 15px; padding-left: 15px; } @@ -529,7 +525,7 @@ pre { .col-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-1 { flex: 0 0 8.33333%; @@ -665,7 +661,7 @@ pre { .col-sm-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-sm-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -765,7 +761,7 @@ pre { .col-md-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-md-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -865,7 +861,7 @@ pre { .col-lg-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-lg-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -965,7 +961,7 @@ pre { .col-xl-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-xl-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -1060,7 +1056,7 @@ pre { .table { width: 100%; margin-bottom: 1rem; - background-color: transparent; } + color: #212529; } .table th, .table td { padding: 0.75rem; @@ -1071,8 +1067,6 @@ pre { border-bottom: 2px solid #343a40; } .table tbody + tbody { border-top: 2px solid #343a40; } - .table .table { - background-color: #212529; } .table-sm th, .table-sm td { @@ -1097,6 +1091,7 @@ pre { background-color: rgba(34, 111, 151, 0.1); } .table-hover tbody tr:hover { + color: #212529; background-color: rgba(0, 0, 0, 0.075); } .table-primary, @@ -1104,6 +1099,12 @@ pre { .table-primary > td { background-color: #c1d7e2; } +.table-primary th, +.table-primary td, +.table-primary thead th, +.table-primary tbody + tbody { + border-color: #8cb4c9; } + .table-hover .table-primary:hover { background-color: #b0ccda; } .table-hover .table-primary:hover > td, @@ -1115,6 +1116,12 @@ pre { .table-secondary > td { background-color: #ffe0b8; } +.table-secondary th, +.table-secondary td, +.table-secondary thead th, +.table-secondary tbody + tbody { + border-color: #ffc57a; } + .table-hover .table-secondary:hover { background-color: #ffd59f; } .table-hover .table-secondary:hover > td, @@ -1126,6 +1133,12 @@ pre { .table-success > td { background-color: #c1e1d0; } +.table-success th, +.table-success td, +.table-success thead th, +.table-success tbody + tbody { + border-color: #8dc8a7; } + .table-hover .table-success:hover { background-color: #b0d9c3; } .table-hover .table-success:hover > td, @@ -1137,6 +1150,12 @@ pre { .table-info > td { background-color: #bde9f3; } +.table-info th, +.table-info td, +.table-info thead th, +.table-info tbody + tbody { + border-color: #85d7e8; } + .table-hover .table-info:hover { background-color: #a7e2ef; } .table-hover .table-info:hover > td, @@ -1148,6 +1167,12 @@ pre { .table-warning > td { background-color: #ffedca; } +.table-warning th, +.table-warning td, +.table-warning thead th, +.table-warning tbody + tbody { + border-color: #ffdd9d; } + .table-hover .table-warning:hover { background-color: #ffe4b1; } .table-hover .table-warning:hover > td, @@ -1159,6 +1184,12 @@ pre { .table-danger > td { background-color: #e6c2c5; } +.table-danger th, +.table-danger td, +.table-danger thead th, +.table-danger tbody + tbody { + border-color: #d18d94; } + .table-hover .table-danger:hover { background-color: #dfb0b4; } .table-hover .table-danger:hover > td, @@ -1170,6 +1201,12 @@ pre { .table-light > td { background-color: #fdfdfe; } +.table-light th, +.table-light td, +.table-light thead th, +.table-light tbody + tbody { + border-color: #fbfcfc; } + .table-hover .table-light:hover { background-color: #ececf6; } .table-hover .table-light:hover > td, @@ -1181,6 +1218,12 @@ pre { .table-dark > td { background-color: #c6c8ca; } +.table-dark th, +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { + border-color: #95999c; } + .table-hover .table-dark:hover { background-color: #b9bbbe; } .table-hover .table-dark:hover > td, @@ -1192,6 +1235,12 @@ pre { .table-debug > td { background-color: #bde9f3; } +.table-debug th, +.table-debug td, +.table-debug thead th, +.table-debug tbody + tbody { + border-color: #85d7e8; } + .table-hover .table-debug:hover { background-color: #a7e2ef; } .table-hover .table-debug:hover > td, @@ -1203,6 +1252,12 @@ pre { .table-error > td { background-color: #e6c2c5; } +.table-error th, +.table-error td, +.table-error thead th, +.table-error tbody + tbody { + border-color: #d18d94; } + .table-hover .table-error:hover { background-color: #dfb0b4; } .table-hover .table-error:hover > td, @@ -1222,8 +1277,8 @@ pre { .table .thead-dark th { color: #fff; - background-color: #212529; - border-color: #32383e; } + background-color: #343a40; + border-color: #454d55; } .table .thead-light th { color: #495057; @@ -1232,16 +1287,17 @@ pre { .table-dark { color: #fff; - background-color: #212529; } + background-color: #343a40; } .table-dark th, .table-dark td, .table-dark thead th { - border-color: #32383e; } + border-color: #454d55; } .table-dark.table-bordered { border: 0; } .table-dark.table-striped tbody tr:nth-of-type(odd) { background-color: rgba(255, 255, 255, 0.05); } .table-dark.table-hover tbody tr:hover { + color: #fff; background-color: rgba(255, 255, 255, 0.075); } @media (max-width: 575.98px) { @@ -1249,8 +1305,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-sm > .table-bordered { border: 0; } } @@ -1259,8 +1314,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-md > .table-bordered { border: 0; } } @@ -1269,8 +1323,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-lg > .table-bordered { border: 0; } } @@ -1279,8 +1332,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-xl > .table-bordered { border: 0; } } @@ -1288,17 +1340,17 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive > .table-bordered { border: 0; } .form-control { display: block; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; font-size: 1rem; + font-weight: 400; line-height: 1.5; color: #000; background-color: #fff; @@ -1306,7 +1358,7 @@ pre { border: 1px solid rgba(108, 117, 125, 0.15); border-radius: 0.25rem; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .form-control { transition: none; } } .form-control::-ms-expand { @@ -1369,14 +1421,14 @@ select.form-control:focus::-ms-value { padding-left: 0; } .form-control-sm { - height: calc(1.8125rem + 2px); + height: calc(1.5em + 0.5rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } .form-control-lg { - height: calc(2.875rem + 2px); + height: calc(1.5em + 1rem + 2px); padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; @@ -1452,22 +1504,34 @@ textarea.form-control { background-color: rgba(40, 167, 69, 0.9); border-radius: 0.25rem; } -.was-validated .form-control:valid, .form-control.is-valid, .was-validated -.custom-select:valid, -.custom-select.is-valid { - border-color: #28a745; } - .was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated - .custom-select:valid:focus, - .custom-select.is-valid:focus { +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #28a745; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:valid:focus, .form-control.is-valid:focus { border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .was-validated .form-control:valid ~ .valid-feedback, .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, - .form-control.is-valid ~ .valid-tooltip, .was-validated - .custom-select:valid ~ .valid-feedback, - .was-validated - .custom-select:valid ~ .valid-tooltip, - .custom-select.is-valid ~ .valid-feedback, + .form-control.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .custom-select:valid, .custom-select.is-valid { + border-color: #28a745; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + .was-validated .custom-select:valid ~ .valid-feedback, + .was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, .custom-select.is-valid ~ .valid-tooltip { display: block; } @@ -1487,7 +1551,7 @@ textarea.form-control { .was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { color: #28a745; } .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { - background-color: #71dd8a; } + border-color: #28a745; } .was-validated .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, @@ -1495,15 +1559,17 @@ textarea.form-control { display: block; } .was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #34ce57; background-color: #34ce57; } .was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #212529, 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + +.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #28a745; } .was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { border-color: #28a745; } - .was-validated .custom-file-input:valid ~ .custom-file-label::after, .custom-file-input.is-valid ~ .custom-file-label::after { - border-color: inherit; } .was-validated .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, @@ -1511,6 +1577,7 @@ textarea.form-control { display: block; } .was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .invalid-feedback { @@ -1534,22 +1601,34 @@ textarea.form-control { background-color: rgba(220, 53, 69, 0.9); border-radius: 0.25rem; } -.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated -.custom-select:invalid, -.custom-select.is-invalid { - border-color: #dc3545; } - .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated - .custom-select:invalid:focus, - .custom-select.is-invalid:focus { +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .was-validated .form-control:invalid ~ .invalid-feedback, .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, - .form-control.is-invalid ~ .invalid-tooltip, .was-validated - .custom-select:invalid ~ .invalid-feedback, - .was-validated - .custom-select:invalid ~ .invalid-tooltip, - .custom-select.is-invalid ~ .invalid-feedback, + .form-control.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .custom-select:invalid, .custom-select.is-invalid { + border-color: #dc3545; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + .was-validated .custom-select:invalid ~ .invalid-feedback, + .was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, .custom-select.is-invalid ~ .invalid-tooltip { display: block; } @@ -1569,7 +1648,7 @@ textarea.form-control { .was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { color: #dc3545; } .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { - background-color: #efa2a9; } + border-color: #dc3545; } .was-validated .custom-control-input:invalid ~ .invalid-feedback, .was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, @@ -1577,15 +1656,17 @@ textarea.form-control { display: block; } .was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #e4606d; background-color: #e4606d; } .was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #212529, 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + +.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #dc3545; } .was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { border-color: #dc3545; } - .was-validated .custom-file-input:invalid ~ .custom-file-label::after, .custom-file-input.is-invalid ~ .custom-file-label::after { - border-color: inherit; } .was-validated .custom-file-input:invalid ~ .invalid-feedback, .was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, @@ -1593,6 +1674,7 @@ textarea.form-control { display: block; } .was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .form-inline { @@ -1630,6 +1712,7 @@ textarea.form-control { padding-left: 0; } .form-inline .form-check-input { position: relative; + flex-shrink: 0; margin-top: 0; margin-right: 0.25rem; margin-left: 0; } @@ -1642,28 +1725,28 @@ textarea.form-control { .btn { display: inline-block; font-weight: 400; + color: #ced4da; text-align: center; - white-space: nowrap; vertical-align: middle; user-select: none; + background-color: transparent; border: 1px solid transparent; padding: 0.375rem 0.75rem; font-size: 1rem; line-height: 1.5; border-radius: 0.25rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .btn { transition: none; } } - .btn:hover, .btn:focus { + .btn:hover { + color: #ced4da; text-decoration: none; } .btn:focus, .btn.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .btn.disabled, .btn:disabled { opacity: 0.65; } - .btn:not(:disabled):not(.disabled) { - cursor: pointer; } a.btn.disabled, fieldset:disabled a.btn { @@ -1678,7 +1761,7 @@ fieldset:disabled a.btn { background-color: #1b5878; border-color: #19506d; } .btn-primary:focus, .btn-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(34, 111, 151, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(67, 133, 167, 0.5); } .btn-primary.disabled, .btn-primary:disabled { color: #fff; background-color: #226f97; @@ -1690,7 +1773,7 @@ fieldset:disabled a.btn { border-color: #164963; } .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(34, 111, 151, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(67, 133, 167, 0.5); } .btn-secondary { color: #212529; @@ -1701,7 +1784,7 @@ fieldset:disabled a.btn { background-color: #d97a00; border-color: #cc7200; } .btn-secondary:focus, .btn-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 143, 0, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 127, 6, 0.5); } .btn-secondary.disabled, .btn-secondary:disabled { color: #212529; background-color: #ff8f00; @@ -1713,7 +1796,7 @@ fieldset:disabled a.btn { border-color: #bf6b00; } .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 143, 0, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 127, 6, 0.5); } .btn-success { color: #fff; @@ -1724,7 +1807,7 @@ fieldset:disabled a.btn { background-color: #1c7644; border-color: #196c3e; } .btn-success:focus, .btn-success.focus { - box-shadow: 0 0 0 0.2rem rgba(35, 149, 86, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(68, 165, 111, 0.5); } .btn-success.disabled, .btn-success:disabled { color: #fff; background-color: #239556; @@ -1736,7 +1819,7 @@ fieldset:disabled a.btn { border-color: #176138; } .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, .show > .btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(35, 149, 86, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(68, 165, 111, 0.5); } .btn-info { color: #fff; @@ -1747,7 +1830,7 @@ fieldset:disabled a.btn { background-color: #1295b0; border-color: #108ba5; } .btn-info:focus, .btn-info.focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-info.disabled, .btn-info:disabled { color: #fff; background-color: #15b2d3; @@ -1759,7 +1842,7 @@ fieldset:disabled a.btn { border-color: #0f8199; } .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, .show > .btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-warning { color: #212529; @@ -1770,7 +1853,7 @@ fieldset:disabled a.btn { background-color: #ffb11c; border-color: #ffac0f; } .btn-warning:focus, .btn-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 190, 66, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 167, 62, 0.5); } .btn-warning.disabled, .btn-warning:disabled { color: #212529; background-color: #ffbe42; @@ -1782,7 +1865,7 @@ fieldset:disabled a.btn { border-color: #ffa802; } .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 190, 66, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 167, 62, 0.5); } .btn-danger { color: #fff; @@ -1793,7 +1876,7 @@ fieldset:disabled a.btn { background-color: #881d28; border-color: #7d1b25; } .btn-danger:focus, .btn-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-danger.disabled, .btn-danger:disabled { color: #fff; background-color: #a72431; @@ -1805,7 +1888,7 @@ fieldset:disabled a.btn { border-color: #731922; } .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-light { color: #212529; @@ -1816,7 +1899,7 @@ fieldset:disabled a.btn { background-color: #e2e6ea; border-color: #dae0e5; } .btn-light:focus, .btn-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } .btn-light.disabled, .btn-light:disabled { color: #212529; background-color: #f8f9fa; @@ -1828,7 +1911,7 @@ fieldset:disabled a.btn { border-color: #d3d9df; } .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, .show > .btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } .btn-dark { color: #fff; @@ -1839,7 +1922,7 @@ fieldset:disabled a.btn { background-color: #23272b; border-color: #1d2124; } .btn-dark:focus, .btn-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } .btn-dark.disabled, .btn-dark:disabled { color: #fff; background-color: #343a40; @@ -1851,7 +1934,7 @@ fieldset:disabled a.btn { border-color: #171a1d; } .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } .btn-debug { color: #fff; @@ -1862,7 +1945,7 @@ fieldset:disabled a.btn { background-color: #1295b0; border-color: #108ba5; } .btn-debug:focus, .btn-debug.focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-debug.disabled, .btn-debug:disabled { color: #fff; background-color: #15b2d3; @@ -1874,7 +1957,7 @@ fieldset:disabled a.btn { border-color: #0f8199; } .btn-debug:not(:disabled):not(.disabled):active:focus, .btn-debug:not(:disabled):not(.disabled).active:focus, .show > .btn-debug.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-error { color: #fff; @@ -1885,7 +1968,7 @@ fieldset:disabled a.btn { background-color: #881d28; border-color: #7d1b25; } .btn-error:focus, .btn-error.focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-error.disabled, .btn-error:disabled { color: #fff; background-color: #a72431; @@ -1897,12 +1980,10 @@ fieldset:disabled a.btn { border-color: #731922; } .btn-error:not(:disabled):not(.disabled):active:focus, .btn-error:not(:disabled):not(.disabled).active:focus, .show > .btn-error.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-outline-primary { color: #226f97; - background-color: transparent; - background-image: none; border-color: #226f97; } .btn-outline-primary:hover { color: #fff; @@ -1924,8 +2005,6 @@ fieldset:disabled a.btn { .btn-outline-secondary { color: #ff8f00; - background-color: transparent; - background-image: none; border-color: #ff8f00; } .btn-outline-secondary:hover { color: #212529; @@ -1947,8 +2026,6 @@ fieldset:disabled a.btn { .btn-outline-success { color: #239556; - background-color: transparent; - background-image: none; border-color: #239556; } .btn-outline-success:hover { color: #fff; @@ -1970,8 +2047,6 @@ fieldset:disabled a.btn { .btn-outline-info { color: #15b2d3; - background-color: transparent; - background-image: none; border-color: #15b2d3; } .btn-outline-info:hover { color: #fff; @@ -1993,8 +2068,6 @@ fieldset:disabled a.btn { .btn-outline-warning { color: #ffbe42; - background-color: transparent; - background-image: none; border-color: #ffbe42; } .btn-outline-warning:hover { color: #212529; @@ -2016,8 +2089,6 @@ fieldset:disabled a.btn { .btn-outline-danger { color: #a72431; - background-color: transparent; - background-image: none; border-color: #a72431; } .btn-outline-danger:hover { color: #fff; @@ -2039,8 +2110,6 @@ fieldset:disabled a.btn { .btn-outline-light { color: #f8f9fa; - background-color: transparent; - background-image: none; border-color: #f8f9fa; } .btn-outline-light:hover { color: #212529; @@ -2062,8 +2131,6 @@ fieldset:disabled a.btn { .btn-outline-dark { color: #343a40; - background-color: transparent; - background-image: none; border-color: #343a40; } .btn-outline-dark:hover { color: #fff; @@ -2085,8 +2152,6 @@ fieldset:disabled a.btn { .btn-outline-debug { color: #15b2d3; - background-color: transparent; - background-image: none; border-color: #15b2d3; } .btn-outline-debug:hover { color: #fff; @@ -2108,8 +2173,6 @@ fieldset:disabled a.btn { .btn-outline-error { color: #a72431; - background-color: transparent; - background-image: none; border-color: #a72431; } .btn-outline-error:hover { color: #fff; @@ -2132,15 +2195,12 @@ fieldset:disabled a.btn { .btn-link { font-weight: 400; color: #15b2d3; - background-color: transparent; } + text-decoration: none; } .btn-link:hover { color: #0e778d; - text-decoration: underline; - background-color: transparent; - border-color: transparent; } + text-decoration: underline; } .btn-link:focus, .btn-link.focus { text-decoration: underline; - border-color: transparent; box-shadow: none; } .btn-link:disabled, .btn-link.disabled { color: #6c757d; @@ -2171,7 +2231,7 @@ input[type="button"].btn-block { .fade { transition: opacity 0.15s linear; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .fade { transition: none; } } .fade:not(.show) { @@ -2185,7 +2245,7 @@ input[type="button"].btn-block { height: 0; overflow: hidden; transition: height 0.35s ease; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .collapsing { transition: none; } } @@ -2195,20 +2255,19 @@ input[type="button"].btn-block { .dropleft { position: relative; } -.dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; } - -.dropdown-toggle:empty::after { - margin-left: 0; } +.dropdown-toggle { + white-space: nowrap; } + .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; } + .dropdown-toggle:empty::after { + margin-left: 0; } .dropdown-menu { position: absolute; @@ -2221,7 +2280,7 @@ input[type="button"].btn-block { padding: 0.5rem 0; margin: 0.125rem 0 0; font-size: 1rem; - color: #ced4da; + color: #212529; text-align: left; list-style: none; background-color: #495057; @@ -2229,10 +2288,46 @@ input[type="button"].btn-block { border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } +.dropdown-menu-left { + right: auto; + left: 0; } + .dropdown-menu-right { right: 0; left: auto; } +@media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; } + .dropdown-menu-sm-right { + right: 0; + left: auto; } } + +@media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; } + .dropdown-menu-md-right { + right: 0; + left: auto; } } + +@media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; } + .dropdown-menu-lg-right { + right: 0; + left: auto; } } + +@media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; } + .dropdown-menu-xl-right { + right: 0; + left: auto; } } + .dropup .dropdown-menu { top: auto; bottom: 100%; @@ -2241,8 +2336,6 @@ input[type="button"].btn-block { .dropup .dropdown-toggle::after { display: inline-block; - width: 0; - height: 0; margin-left: 0.255em; vertical-align: 0.255em; content: ""; @@ -2263,8 +2356,6 @@ input[type="button"].btn-block { .dropright .dropdown-toggle::after { display: inline-block; - width: 0; - height: 0; margin-left: 0.255em; vertical-align: 0.255em; content: ""; @@ -2288,8 +2379,6 @@ input[type="button"].btn-block { .dropleft .dropdown-toggle::after { display: inline-block; - width: 0; - height: 0; margin-left: 0.255em; vertical-align: 0.255em; content: ""; } @@ -2299,8 +2388,6 @@ input[type="button"].btn-block { .dropleft .dropdown-toggle::before { display: inline-block; - width: 0; - height: 0; margin-right: 0.255em; vertical-align: 0.255em; content: ""; @@ -2345,6 +2432,7 @@ input[type="button"].btn-block { background-color: #226f97; } .dropdown-item.disabled, .dropdown-item:disabled { color: #6c757d; + pointer-events: none; background-color: transparent; } .dropdown-menu.show { @@ -2371,7 +2459,7 @@ input[type="button"].btn-block { .btn-group > .btn, .btn-group-vertical > .btn { position: relative; - flex: 0 1 auto; } + flex: 1 1 auto; } .btn-group > .btn:hover, .btn-group-vertical > .btn:hover { z-index: 1; } @@ -2380,15 +2468,6 @@ input[type="button"].btn-block { .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active { z-index: 1; } - .btn-group .btn + .btn, - .btn-group .btn + .btn-group, - .btn-group .btn-group + .btn, - .btn-group .btn-group + .btn-group, - .btn-group-vertical .btn + .btn, - .btn-group-vertical .btn + .btn-group, - .btn-group-vertical .btn-group + .btn, - .btn-group-vertical .btn-group + .btn-group { - margin-left: -1px; } .btn-toolbar { display: flex; @@ -2397,8 +2476,9 @@ input[type="button"].btn-block { .btn-toolbar .input-group { width: auto; } -.btn-group > .btn:first-child { - margin-left: 0; } +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; } .btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn-group:not(:last-child) > .btn { @@ -2432,15 +2512,12 @@ input[type="button"].btn-block { flex-direction: column; align-items: flex-start; justify-content: center; } - .btn-group-vertical .btn, - .btn-group-vertical .btn-group { + .btn-group-vertical > .btn, + .btn-group-vertical > .btn-group { width: 100%; } - .btn-group-vertical > .btn + .btn, - .btn-group-vertical > .btn + .btn-group, - .btn-group-vertical > .btn-group + .btn, - .btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; } + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; } .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; @@ -2468,6 +2545,7 @@ input[type="button"].btn-block { align-items: stretch; width: 100%; } .input-group > .form-control, + .input-group > .form-control-plaintext, .input-group > .custom-select, .input-group > .custom-file { position: relative; @@ -2477,6 +2555,9 @@ input[type="button"].btn-block { .input-group > .form-control + .form-control, .input-group > .form-control + .custom-select, .input-group > .form-control + .custom-file, + .input-group > .form-control-plaintext + .form-control, + .input-group > .form-control-plaintext + .custom-select, + .input-group > .form-control-plaintext + .custom-file, .input-group > .custom-select + .form-control, .input-group > .custom-select + .custom-select, .input-group > .custom-select + .custom-file, @@ -2516,6 +2597,9 @@ input[type="button"].btn-block { .input-group-append .btn { position: relative; z-index: 2; } + .input-group-prepend .btn:focus, + .input-group-append .btn:focus { + z-index: 3; } .input-group-prepend .btn + .btn, .input-group-prepend .btn + .input-group-text, .input-group-prepend .input-group-text + .input-group-text, @@ -2550,28 +2634,40 @@ input[type="button"].btn-block { .input-group-text input[type="checkbox"] { margin-top: 0; } +.input-group-lg > .form-control:not(textarea), +.input-group-lg > .custom-select { + height: calc(1.5em + 1rem + 2px); } + .input-group-lg > .form-control, +.input-group-lg > .custom-select, .input-group-lg > .input-group-prepend > .input-group-text, .input-group-lg > .input-group-append > .input-group-text, .input-group-lg > .input-group-prepend > .btn, .input-group-lg > .input-group-append > .btn { - height: calc(2.875rem + 2px); padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } +.input-group-sm > .form-control:not(textarea), +.input-group-sm > .custom-select { + height: calc(1.5em + 0.5rem + 2px); } + .input-group-sm > .form-control, +.input-group-sm > .custom-select, .input-group-sm > .input-group-prepend > .input-group-text, .input-group-sm > .input-group-append > .input-group-text, .input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-append > .btn { - height: calc(1.8125rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } +.input-group-lg > .custom-select, +.input-group-sm > .custom-select { + padding-right: 1.75rem; } + .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, .input-group > .input-group-append:not(:last-child) > .btn, @@ -2606,12 +2702,16 @@ input[type="button"].btn-block { opacity: 0; } .custom-control-input:checked ~ .custom-control-label::before { color: #fff; + border-color: #007bff; background-color: #007bff; } .custom-control-input:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } - .custom-control-input:active ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #80bdff; } + .custom-control-input:not(:disabled):active ~ .custom-control-label::before { color: #fff; - background-color: #b3d7ff; } + background-color: #b3d7ff; + border-color: #b3d7ff; } .custom-control-input:disabled ~ .custom-control-label { color: #6c757d; } .custom-control-input:disabled ~ .custom-control-label::before { @@ -2619,7 +2719,8 @@ input[type="button"].btn-block { .custom-control-label { position: relative; - margin-bottom: 0; } + margin-bottom: 0; + vertical-align: top; } .custom-control-label::before { position: absolute; top: 0.25rem; @@ -2629,8 +2730,8 @@ input[type="button"].btn-block { height: 1rem; pointer-events: none; content: ""; - user-select: none; - background-color: #dee2e6; } + background-color: #fff; + border: #adb5bd solid 1px; } .custom-control-label::after { position: absolute; top: 0.25rem; @@ -2639,24 +2740,20 @@ input[type="button"].btn-block { width: 1rem; height: 1rem; content: ""; - background-repeat: no-repeat; - background-position: center center; - background-size: 50% 50%; } + background: no-repeat 50% / 50% 50%; } .custom-checkbox .custom-control-label::before { border-radius: 0.25rem; } -.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before { - background-color: #007bff; } - .custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #007bff; background-color: #007bff; } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); } .custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(0, 123, 255, 0.5); } @@ -2667,32 +2764,55 @@ input[type="button"].btn-block { .custom-radio .custom-control-label::before { border-radius: 50%; } -.custom-radio .custom-control-input:checked ~ .custom-control-label::before { - background-color: #007bff; } - .custom-radio .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } .custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(0, 123, 255, 0.5); } +.custom-switch { + padding-left: 2.25rem; } + .custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; } + .custom-switch .custom-control-label::after { + top: calc(0.25rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + transition: none; } } + .custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + transform: translateX(0.75rem); } + .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); } + .custom-select { display: inline-block; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; line-height: 1.5; color: #495057; vertical-align: middle; - background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; - background-size: 8px 10px; + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; + background-color: #fff; border: 1px solid #ced4da; border-radius: 0.25rem; appearance: none; } .custom-select:focus { border-color: #80bdff; outline: 0; - box-shadow: 0 0 0 0.2rem rgba(128, 189, 255, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .custom-select:focus::-ms-value { color: #000; background-color: #fff; } @@ -2704,43 +2824,45 @@ input[type="button"].btn-block { color: #6c757d; background-color: #e9ecef; } .custom-select::-ms-expand { - opacity: 0; } + display: none; } .custom-select-sm { - height: calc(1.8125rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 75%; } + height: calc(1.5em + 0.5rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; } .custom-select-lg { - height: calc(2.875rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 125%; } + height: calc(1.5em + 1rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; } .custom-file { position: relative; display: inline-block; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); margin-bottom: 0; } .custom-file-input { position: relative; z-index: 2; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); margin: 0; opacity: 0; } .custom-file-input:focus ~ .custom-file-label { border-color: #80bdff; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } - .custom-file-input:focus ~ .custom-file-label::after { - border-color: #80bdff; } .custom-file-input:disabled ~ .custom-file-label { background-color: #e9ecef; } .custom-file-input:lang(en) ~ .custom-file-label::after { content: "Browse"; } + .custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); } .custom-file-label { position: absolute; @@ -2748,8 +2870,9 @@ input[type="button"].btn-block { right: 0; left: 0; z-index: 1; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; + font-weight: 400; line-height: 1.5; color: #495057; background-color: #fff; @@ -2762,18 +2885,19 @@ input[type="button"].btn-block { bottom: 0; z-index: 3; display: block; - height: 2.25rem; + height: calc(1.5em + 0.75rem); padding: 0.375rem 0.75rem; line-height: 1.5; color: #495057; content: "Browse"; background-color: #e9ecef; - border-left: 1px solid #ced4da; + border-left: inherit; border-radius: 0 0.25rem 0.25rem 0; } .custom-range { width: 100%; - padding-left: 0; + height: calc(1rem + 0.4rem); + padding: 0; background-color: transparent; appearance: none; } .custom-range:focus { @@ -2795,7 +2919,7 @@ input[type="button"].btn-block { border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-range::-webkit-slider-thumb { transition: none; } } .custom-range::-webkit-slider-thumb:active { @@ -2816,7 +2940,7 @@ input[type="button"].btn-block { border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-range::-moz-range-thumb { transition: none; } } .custom-range::-moz-range-thumb:active { @@ -2840,7 +2964,7 @@ input[type="button"].btn-block { border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-range::-ms-thumb { transition: none; } } .custom-range::-ms-thumb:active { @@ -2860,12 +2984,22 @@ input[type="button"].btn-block { margin-right: 15px; background-color: #dee2e6; border-radius: 1rem; } + .custom-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; } + .custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; } + .custom-range:disabled::-moz-range-thumb { + background-color: #adb5bd; } + .custom-range:disabled::-moz-range-track { + cursor: default; } + .custom-range:disabled::-ms-thumb { + background-color: #adb5bd; } .custom-control-label::before, .custom-file-label, .custom-select { transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-control-label::before, .custom-file-label, .custom-select { @@ -2884,7 +3018,9 @@ input[type="button"].btn-block { .nav-link:hover, .nav-link:focus { text-decoration: none; } .nav-link.disabled { - color: #6c757d; } + color: #6c757d; + pointer-events: none; + cursor: default; } .nav-tabs { border-bottom: 1px solid #dee2e6; } @@ -2990,8 +3126,6 @@ input[type="button"].btn-block { border-radius: 0.25rem; } .navbar-toggler:hover, .navbar-toggler:focus { text-decoration: none; } - .navbar-toggler:not(:disabled):not(.disabled) { - cursor: pointer; } .navbar-toggler-icon { display: inline-block; @@ -3152,7 +3286,7 @@ input[type="button"].btn-block { border-color: rgba(0, 0, 0, 0.1); } .navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-light .navbar-text { color: rgba(0, 0, 0, 0.5); } @@ -3184,7 +3318,7 @@ input[type="button"].btn-block { border-color: rgba(255, 255, 255, 0.1); } .navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-dark .navbar-text { color: rgba(255, 255, 255, 0.5); } @@ -3314,41 +3448,24 @@ input[type="button"].btn-block { .card-group > .card + .card { margin-left: 0; border-left: 0; } - .card-group > .card:first-child { + .card-group > .card:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } - .card-group > .card:first-child .card-img-top, - .card-group > .card:first-child .card-header { + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { border-top-right-radius: 0; } - .card-group > .card:first-child .card-img-bottom, - .card-group > .card:first-child .card-footer { + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { border-bottom-right-radius: 0; } - .card-group > .card:last-child { + .card-group > .card:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } - .card-group > .card:last-child .card-img-top, - .card-group > .card:last-child .card-header { + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { border-top-left-radius: 0; } - .card-group > .card:last-child .card-img-bottom, - .card-group > .card:last-child .card-footer { - border-bottom-left-radius: 0; } - .card-group > .card:only-child { - border-radius: 0.25rem; } - .card-group > .card:only-child .card-img-top, - .card-group > .card:only-child .card-header { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; } - .card-group > .card:only-child .card-img-bottom, - .card-group > .card:only-child .card-footer { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; } - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) { - border-radius: 0; } - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer { - border-radius: 0; } } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; } } .card-columns .card { margin-bottom: 0.75rem; } @@ -3363,21 +3480,22 @@ input[type="button"].btn-block { display: inline-block; width: 100%; } } -.accordion .card:not(:first-of-type):not(:last-of-type) { - border-bottom: 0; - border-radius: 0; } - -.accordion .card:not(:first-of-type) .card-header:first-child { - border-radius: 0; } - -.accordion .card:first-of-type { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; } - -.accordion .card:last-of-type { - border-top-left-radius: 0; - border-top-right-radius: 0; } +.accordion > .card { + overflow: hidden; } + .accordion > .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; } + .accordion > .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; } + .accordion > .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .accordion > .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; } + .accordion > .card .card-header { + margin-bottom: -1px; } .breadcrumb { display: flex; @@ -3430,8 +3548,6 @@ input[type="button"].btn-block { z-index: 2; outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } - .page-link:not(:disabled):not(.disabled) { - cursor: pointer; } .page-item:first-child .page-link { margin-left: 0; @@ -3490,7 +3606,13 @@ input[type="button"].btn-block { text-align: center; white-space: nowrap; vertical-align: baseline; - border-radius: 0.25rem; } + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .badge { + transition: none; } } + a.badge:hover, a.badge:focus { + text-decoration: none; } .badge:empty { display: none; } @@ -3506,82 +3628,102 @@ input[type="button"].btn-block { .badge-primary { color: #fff; background-color: #226f97; } - .badge-primary[href]:hover, .badge-primary[href]:focus { + a.badge-primary:hover, a.badge-primary:focus { color: #fff; - text-decoration: none; background-color: #19506d; } + a.badge-primary:focus, a.badge-primary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(34, 111, 151, 0.5); } .badge-secondary { color: #212529; background-color: #ff8f00; } - .badge-secondary[href]:hover, .badge-secondary[href]:focus { + a.badge-secondary:hover, a.badge-secondary:focus { color: #212529; - text-decoration: none; background-color: #cc7200; } + a.badge-secondary:focus, a.badge-secondary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(255, 143, 0, 0.5); } .badge-success { color: #fff; background-color: #239556; } - .badge-success[href]:hover, .badge-success[href]:focus { + a.badge-success:hover, a.badge-success:focus { color: #fff; - text-decoration: none; background-color: #196c3e; } + a.badge-success:focus, a.badge-success.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(35, 149, 86, 0.5); } .badge-info { color: #fff; background-color: #15b2d3; } - .badge-info[href]:hover, .badge-info[href]:focus { + a.badge-info:hover, a.badge-info:focus { color: #fff; - text-decoration: none; background-color: #108ba5; } + a.badge-info:focus, a.badge-info.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } .badge-warning { color: #212529; background-color: #ffbe42; } - .badge-warning[href]:hover, .badge-warning[href]:focus { + a.badge-warning:hover, a.badge-warning:focus { color: #212529; - text-decoration: none; background-color: #ffac0f; } + a.badge-warning:focus, a.badge-warning.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(255, 190, 66, 0.5); } .badge-danger { color: #fff; background-color: #a72431; } - .badge-danger[href]:hover, .badge-danger[href]:focus { + a.badge-danger:hover, a.badge-danger:focus { color: #fff; - text-decoration: none; background-color: #7d1b25; } + a.badge-danger:focus, a.badge-danger.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } .badge-light { color: #212529; background-color: #f8f9fa; } - .badge-light[href]:hover, .badge-light[href]:focus { + a.badge-light:hover, a.badge-light:focus { color: #212529; - text-decoration: none; background-color: #dae0e5; } + a.badge-light:focus, a.badge-light.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } .badge-dark { color: #fff; background-color: #343a40; } - .badge-dark[href]:hover, .badge-dark[href]:focus { + a.badge-dark:hover, a.badge-dark:focus { color: #fff; - text-decoration: none; background-color: #1d2124; } + a.badge-dark:focus, a.badge-dark.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } .badge-debug { color: #fff; background-color: #15b2d3; } - .badge-debug[href]:hover, .badge-debug[href]:focus { + a.badge-debug:hover, a.badge-debug:focus { color: #fff; - text-decoration: none; background-color: #108ba5; } + a.badge-debug:focus, a.badge-debug.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } .badge-error { color: #fff; background-color: #a72431; } - .badge-error[href]:hover, .badge-error[href]:focus { + a.badge-error:hover, a.badge-error:focus { color: #fff; - text-decoration: none; background-color: #7d1b25; } + a.badge-error:focus, a.badge-error.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } .jumbotron { padding: 2rem 1rem; @@ -3732,7 +3874,7 @@ input[type="button"].btn-block { white-space: nowrap; background-color: #007bff; transition: width 0.6s ease; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .progress-bar { transition: none; } } @@ -3742,6 +3884,9 @@ input[type="button"].btn-block { .progress-bar-animated { animation: progress-bar-stripes 1s linear infinite; } + @media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + animation: none; } } .media { display: flex; @@ -3761,6 +3906,7 @@ input[type="button"].btn-block { color: #ced4da; text-align: inherit; } .list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; color: #ced4da; text-decoration: none; background-color: #292d32; } @@ -3782,11 +3928,9 @@ input[type="button"].btn-block { margin-bottom: 0; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } - .list-group-item:hover, .list-group-item:focus { - z-index: 1; - text-decoration: none; } .list-group-item.disabled, .list-group-item:disabled { color: #6c757d; + pointer-events: none; background-color: #fff; } .list-group-item.active { z-index: 2; @@ -3794,15 +3938,97 @@ input[type="button"].btn-block { background-color: #007bff; border-color: #007bff; } +.list-group-horizontal { + flex-direction: row; } + .list-group-horizontal .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; } + .list-group-horizontal-sm .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-sm .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-sm .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; } + .list-group-horizontal-md .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-md .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-md .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; } + .list-group-horizontal-lg .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-lg .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-lg .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; } + .list-group-horizontal-xl .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-xl .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-xl .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + .list-group-flush .list-group-item { border-right: 0; border-left: 0; border-radius: 0; } + .list-group-flush .list-group-item:last-child { + margin-bottom: -1px; } .list-group-flush:first-child .list-group-item:first-child { border-top: 0; } .list-group-flush:last-child .list-group-item:last-child { + margin-bottom: 0; border-bottom: 0; } .list-group-item-primary { @@ -3923,18 +4149,53 @@ input[type="button"].btn-block { color: #000; text-shadow: 0 1px 0 #fff; opacity: .5; } - .close:not(:disabled):not(.disabled) { - cursor: pointer; } - .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { - color: #000; - text-decoration: none; - opacity: .75; } + .close:hover { + color: #000; + text-decoration: none; } + .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + opacity: .75; } button.close { padding: 0; background-color: transparent; border: 0; - -webkit-appearance: none; } + appearance: none; } + +a.close.disabled { + pointer-events: none; } + +.toast { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + backdrop-filter: blur(10px); + opacity: 0; + border-radius: 0.25rem; } + .toast:not(:last-child) { + margin-bottom: 0.75rem; } + .toast.showing { + opacity: 1; } + .toast.show { + display: block; + opacity: 1; } + .toast.hide { + display: none; } + +.toast-header { + display: flex; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); } + +.toast-body { + padding: 0.75rem; } .modal-open { overflow: hidden; } @@ -3945,11 +4206,11 @@ button.close { .modal { position: fixed; top: 0; - right: 0; - bottom: 0; left: 0; z-index: 1050; display: none; + width: 100%; + height: 100%; overflow: hidden; outline: 0; } @@ -3960,21 +4221,41 @@ button.close { pointer-events: none; } .modal.fade .modal-dialog { transition: transform 0.3s ease-out; - transform: translate(0, -25%); } - @media screen and (prefers-reduced-motion: reduce) { + transform: translate(0, -50px); } + @media (prefers-reduced-motion: reduce) { .modal.fade .modal-dialog { transition: none; } } .modal.show .modal-dialog { - transform: translate(0, 0); } + transform: none; } + +.modal-dialog-scrollable { + display: flex; + max-height: calc(100% - 1rem); } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 1rem); + overflow: hidden; } + .modal-dialog-scrollable .modal-header, + .modal-dialog-scrollable .modal-footer { + flex-shrink: 0; } + .modal-dialog-scrollable .modal-body { + overflow-y: auto; } .modal-dialog-centered { display: flex; align-items: center; - min-height: calc(100% - (0.5rem * 2)); } + min-height: calc(100% - 1rem); } .modal-dialog-centered::before { display: block; - height: calc(100vh - (0.5rem * 2)); + height: calc(100vh - 1rem); content: ""; } + .modal-dialog-centered.modal-dialog-scrollable { + flex-direction: column; + justify-content: center; + height: 100%; } + .modal-dialog-centered.modal-dialog-scrollable .modal-content { + max-height: none; } + .modal-dialog-centered.modal-dialog-scrollable::before { + content: none; } .modal-content { position: relative; @@ -3991,10 +4272,10 @@ button.close { .modal-backdrop { position: fixed; top: 0; - right: 0; - bottom: 0; left: 0; z-index: 1040; + width: 100vw; + height: 100vh; background-color: #000; } .modal-backdrop.fade { opacity: 0; } @@ -4005,12 +4286,12 @@ button.close { display: flex; align-items: flex-start; justify-content: space-between; - padding: 1rem; - border-bottom: 1px solid #e9ecef; + padding: 1rem 1rem; + border-bottom: 1px solid #dee2e6; border-top-left-radius: 0.3rem; border-top-right-radius: 0.3rem; } .modal-header .close { - padding: 1rem; + padding: 1rem 1rem; margin: -1rem -1rem -1rem auto; } .modal-title { @@ -4027,7 +4308,9 @@ button.close { align-items: center; justify-content: flex-end; padding: 1rem; - border-top: 1px solid #e9ecef; } + border-top: 1px solid #dee2e6; + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; } .modal-footer > :not(:first-child) { margin-left: .25rem; } .modal-footer > :not(:last-child) { @@ -4044,23 +4327,32 @@ button.close { .modal-dialog { max-width: 500px; margin: 1.75rem auto; } + .modal-dialog-scrollable { + max-height: calc(100% - 3.5rem); } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 3.5rem); } .modal-dialog-centered { - min-height: calc(100% - (1.75rem * 2)); } + min-height: calc(100% - 3.5rem); } .modal-dialog-centered::before { - height: calc(100vh - (1.75rem * 2)); } + height: calc(100vh - 3.5rem); } .modal-sm { max-width: 300px; } } @media (min-width: 992px) { - .modal-lg { + .modal-lg, + .modal-xl { max-width: 800px; } } +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; } } + .tooltip { position: absolute; z-index: 1070; display: block; margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; @@ -4145,7 +4437,7 @@ button.close { z-index: 1060; display: block; max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; @@ -4180,57 +4472,45 @@ button.close { .bs-popover-top, .bs-popover-auto[x-placement^="top"] { margin-bottom: 0.5rem; } - .bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { + .bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { bottom: calc((0.5rem + 1px) * -1); } - .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, - .bs-popover-top .arrow::after, - .bs-popover-auto[x-placement^="top"] .arrow::after { - border-width: 0.5rem 0.5rem 0; } - .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before { - bottom: 0; - border-top-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-top .arrow::after, - .bs-popover-auto[x-placement^="top"] .arrow::after { - bottom: 1px; - border-top-color: #fff; } + .bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); } + .bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; } .bs-popover-right, .bs-popover-auto[x-placement^="right"] { margin-left: 0.5rem; } - .bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { + .bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { left: calc((0.5rem + 1px) * -1); width: 0.5rem; height: 1rem; margin: 0.3rem 0; } - .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, - .bs-popover-right .arrow::after, - .bs-popover-auto[x-placement^="right"] .arrow::after { - border-width: 0.5rem 0.5rem 0.5rem 0; } - .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before { - left: 0; - border-right-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-right .arrow::after, - .bs-popover-auto[x-placement^="right"] .arrow::after { - left: 1px; - border-right-color: #fff; } + .bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); } + .bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; } .bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { margin-top: 0.5rem; } - .bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { + .bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { top: calc((0.5rem + 1px) * -1); } - .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, - .bs-popover-bottom .arrow::after, - .bs-popover-auto[x-placement^="bottom"] .arrow::after { - border-width: 0 0.5rem 0.5rem 0.5rem; } - .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before { - top: 0; - border-bottom-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-bottom .arrow::after, - .bs-popover-auto[x-placement^="bottom"] .arrow::after { - top: 1px; - border-bottom-color: #fff; } + .bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); } + .bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; } .bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { position: absolute; top: 0; @@ -4243,29 +4523,24 @@ button.close { .bs-popover-left, .bs-popover-auto[x-placement^="left"] { margin-right: 0.5rem; } - .bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { + .bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { right: calc((0.5rem + 1px) * -1); width: 0.5rem; height: 1rem; margin: 0.3rem 0; } - .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, - .bs-popover-left .arrow::after, - .bs-popover-auto[x-placement^="left"] .arrow::after { - border-width: 0.5rem 0 0.5rem 0.5rem; } - .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before { - right: 0; - border-left-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-left .arrow::after, - .bs-popover-auto[x-placement^="left"] .arrow::after { - right: 1px; - border-left-color: #fff; } + .bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); } + .bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; } .popover-header { padding: 0.5rem 0.75rem; margin-bottom: 0; font-size: 1rem; - color: inherit; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-top-left-radius: calc(0.3rem - 1px); @@ -4280,106 +4555,89 @@ button.close { .carousel { position: relative; } +.carousel.pointer-event { + touch-action: pan-y; } + .carousel-inner { position: relative; width: 100%; overflow: hidden; } + .carousel-inner::after { + display: block; + clear: both; + content: ""; } .carousel-item { position: relative; display: none; - align-items: center; + float: left; width: 100%; + margin-right: -100%; backface-visibility: hidden; - perspective: 1000px; } + transition: transform 0.6s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; } } .carousel-item.active, .carousel-item-next, .carousel-item-prev { - display: block; - transition: transform 0.6s ease; } - @media screen and (prefers-reduced-motion: reduce) { - .carousel-item.active, - .carousel-item-next, - .carousel-item-prev { - transition: none; } } + display: block; } -.carousel-item-next, -.carousel-item-prev { - position: absolute; - top: 0; } - -.carousel-item-next.carousel-item-left, -.carousel-item-prev.carousel-item-right { - transform: translateX(0); } - @supports (transform-style: preserve-3d) { - .carousel-item-next.carousel-item-left, - .carousel-item-prev.carousel-item-right { - transform: translate3d(0, 0, 0); } } - -.carousel-item-next, +.carousel-item-next:not(.carousel-item-left), .active.carousel-item-right { transform: translateX(100%); } - @supports (transform-style: preserve-3d) { - .carousel-item-next, - .active.carousel-item-right { - transform: translate3d(100%, 0, 0); } } -.carousel-item-prev, +.carousel-item-prev:not(.carousel-item-right), .active.carousel-item-left { transform: translateX(-100%); } - @supports (transform-style: preserve-3d) { - .carousel-item-prev, - .active.carousel-item-left { - transform: translate3d(-100%, 0, 0); } } .carousel-fade .carousel-item { opacity: 0; - transition-duration: .6s; - transition-property: opacity; } + transition-property: opacity; + transform: none; } .carousel-fade .carousel-item.active, .carousel-fade .carousel-item-next.carousel-item-left, .carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; opacity: 1; } .carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-right { - opacity: 0; } - -.carousel-fade .carousel-item-next, -.carousel-fade .carousel-item-prev, -.carousel-fade .carousel-item.active, -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-prev { - transform: translateX(0); } - @supports (transform-style: preserve-3d) { - .carousel-fade .carousel-item-next, - .carousel-fade .carousel-item-prev, - .carousel-fade .carousel-item.active, + z-index: 0; + opacity: 0; + transition: 0s 0.6s opacity; } + @media (prefers-reduced-motion: reduce) { .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-prev { - transform: translate3d(0, 0, 0); } } + .carousel-fade .active.carousel-item-right { + transition: none; } } .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; + z-index: 1; display: flex; align-items: center; justify-content: center; width: 15%; color: #fff; text-align: center; - opacity: 0.5; } + opacity: 0.5; + transition: opacity 0.15s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; } } .carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus { color: #fff; text-decoration: none; outline: 0; - opacity: .9; } + opacity: 0.9; } .carousel-control-prev { left: 0; } @@ -4392,19 +4650,18 @@ button.close { display: inline-block; width: 20px; height: 20px; - background: transparent no-repeat center center; - background-size: 100% 100%; } + background: no-repeat 50% / 100% 100%; } .carousel-control-prev-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); } .carousel-control-next-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); } .carousel-indicators { position: absolute; right: 0; - bottom: 10px; + bottom: 0; left: 0; z-index: 15; display: flex; @@ -4414,7 +4671,7 @@ button.close { margin-left: 15%; list-style: none; } .carousel-indicators li { - position: relative; + box-sizing: content-box; flex: 0 1 auto; width: 30px; height: 3px; @@ -4422,25 +4679,17 @@ button.close { margin-left: 3px; text-indent: -999px; cursor: pointer; - background-color: rgba(255, 255, 255, 0.5); } - .carousel-indicators li::before { - position: absolute; - top: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; } - .carousel-indicators li::after { - position: absolute; - bottom: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; } + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + transition: opacity 0.6s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + transition: none; } } .carousel-indicators .active { - background-color: #fff; } + opacity: 1; } .carousel-caption { position: absolute; @@ -4453,6 +4702,45 @@ button.close { color: #fff; text-align: center; } +@keyframes spinner-border { + to { + transform: rotate(360deg); } } + +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + animation: spinner-border .75s linear infinite; } + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; } + +@keyframes spinner-grow { + 0% { + transform: scale(0); } + 50% { + opacity: 1; } } + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + animation: spinner-grow .75s linear infinite; } + +.spinner-grow-sm { + width: 1rem; + height: 1rem; } + .align-baseline { vertical-align: baseline !important; } @@ -4632,6 +4920,9 @@ button.bg-error:focus { .border-white { border-color: #fff !important; } +.rounded-sm { + border-radius: 0.2rem !important; } + .rounded { border-radius: 0.25rem !important; } @@ -4651,9 +4942,15 @@ button.bg-error:focus { border-top-left-radius: 0.25rem !important; border-bottom-left-radius: 0.25rem !important; } +.rounded-lg { + border-radius: 0.3rem !important; } + .rounded-circle { border-radius: 50% !important; } +.rounded-pill { + border-radius: 50rem !important; } + .rounded-0 { border-radius: 0 !important; } @@ -4823,6 +5120,18 @@ button.bg-error:focus { .embed-responsive-1by1::before { padding-top: 100%; } +.embed-responsive-21by9::before { + padding-top: 42.85714%; } + +.embed-responsive-16by9::before { + padding-top: 56.25%; } + +.embed-responsive-4by3::before { + padding-top: 75%; } + +.embed-responsive-1by1::before { + padding-top: 100%; } + .flex-row { flex-direction: row !important; } @@ -5246,6 +5555,12 @@ button.bg-error:focus { .float-xl-none { float: none !important; } } +.overflow-auto { + overflow: auto !important; } + +.overflow-hidden { + overflow: hidden !important; } + .position-static { position: static !important; } @@ -5347,6 +5662,29 @@ button.bg-error:focus { .mh-100 { max-height: 100% !important; } +.min-vw-100 { + min-width: 100vw !important; } + +.min-vh-100 { + min-height: 100vh !important; } + +.vw-100 { + width: 100vw !important; } + +.vh-100 { + height: 100vh !important; } + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + pointer-events: auto; + content: ""; + background-color: rgba(0, 0, 0, 0); } + .m-0 { margin: 0 !important; } @@ -5575,6 +5913,101 @@ button.bg-error:focus { .px-5 { padding-left: 3rem !important; } +.m-n1 { + margin: -0.25rem !important; } + +.mt-n1, +.my-n1 { + margin-top: -0.25rem !important; } + +.mr-n1, +.mx-n1 { + margin-right: -0.25rem !important; } + +.mb-n1, +.my-n1 { + margin-bottom: -0.25rem !important; } + +.ml-n1, +.mx-n1 { + margin-left: -0.25rem !important; } + +.m-n2 { + margin: -0.5rem !important; } + +.mt-n2, +.my-n2 { + margin-top: -0.5rem !important; } + +.mr-n2, +.mx-n2 { + margin-right: -0.5rem !important; } + +.mb-n2, +.my-n2 { + margin-bottom: -0.5rem !important; } + +.ml-n2, +.mx-n2 { + margin-left: -0.5rem !important; } + +.m-n3 { + margin: -1rem !important; } + +.mt-n3, +.my-n3 { + margin-top: -1rem !important; } + +.mr-n3, +.mx-n3 { + margin-right: -1rem !important; } + +.mb-n3, +.my-n3 { + margin-bottom: -1rem !important; } + +.ml-n3, +.mx-n3 { + margin-left: -1rem !important; } + +.m-n4 { + margin: -1.5rem !important; } + +.mt-n4, +.my-n4 { + margin-top: -1.5rem !important; } + +.mr-n4, +.mx-n4 { + margin-right: -1.5rem !important; } + +.mb-n4, +.my-n4 { + margin-bottom: -1.5rem !important; } + +.ml-n4, +.mx-n4 { + margin-left: -1.5rem !important; } + +.m-n5 { + margin: -3rem !important; } + +.mt-n5, +.my-n5 { + margin-top: -3rem !important; } + +.mr-n5, +.mx-n5 { + margin-right: -3rem !important; } + +.mb-n5, +.my-n5 { + margin-bottom: -3rem !important; } + +.ml-n5, +.mx-n5 { + margin-left: -3rem !important; } + .m-auto { margin: auto !important; } @@ -5763,6 +6196,76 @@ button.bg-error:focus { .pl-sm-5, .px-sm-5 { padding-left: 3rem !important; } + .m-sm-n1 { + margin: -0.25rem !important; } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; } + .m-sm-n2 { + margin: -0.5rem !important; } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; } + .m-sm-n3 { + margin: -1rem !important; } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; } + .m-sm-n4 { + margin: -1.5rem !important; } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; } + .m-sm-n5 { + margin: -3rem !important; } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; } .m-sm-auto { margin: auto !important; } .mt-sm-auto, @@ -5947,6 +6450,76 @@ button.bg-error:focus { .pl-md-5, .px-md-5 { padding-left: 3rem !important; } + .m-md-n1 { + margin: -0.25rem !important; } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; } + .m-md-n2 { + margin: -0.5rem !important; } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; } + .m-md-n3 { + margin: -1rem !important; } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; } + .m-md-n4 { + margin: -1.5rem !important; } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; } + .m-md-n5 { + margin: -3rem !important; } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; } .m-md-auto { margin: auto !important; } .mt-md-auto, @@ -6131,6 +6704,76 @@ button.bg-error:focus { .pl-lg-5, .px-lg-5 { padding-left: 3rem !important; } + .m-lg-n1 { + margin: -0.25rem !important; } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; } + .m-lg-n2 { + margin: -0.5rem !important; } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; } + .m-lg-n3 { + margin: -1rem !important; } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; } + .m-lg-n4 { + margin: -1.5rem !important; } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; } + .m-lg-n5 { + margin: -3rem !important; } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; } .m-lg-auto { margin: auto !important; } .mt-lg-auto, @@ -6315,6 +6958,76 @@ button.bg-error:focus { .pl-xl-5, .px-xl-5 { padding-left: 3rem !important; } + .m-xl-n1 { + margin: -0.25rem !important; } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; } + .m-xl-n2 { + margin: -0.5rem !important; } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; } + .m-xl-n3 { + margin: -1rem !important; } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; } + .m-xl-n4 { + margin: -1.5rem !important; } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; } + .m-xl-n5 { + margin: -3rem !important; } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; } .m-xl-auto { margin: auto !important; } .mt-xl-auto, @@ -6331,11 +7044,14 @@ button.bg-error:focus { margin-left: auto !important; } } .text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; } .text-justify { text-align: justify !important; } +.text-wrap { + white-space: normal !important; } + .text-nowrap { white-space: nowrap !important; } @@ -6397,12 +7113,18 @@ button.bg-error:focus { .font-weight-light { font-weight: 300 !important; } +.font-weight-lighter { + font-weight: lighter !important; } + .font-weight-normal { font-weight: 400 !important; } .font-weight-bold { font-weight: 700 !important; } +.font-weight-bolder { + font-weight: bolder !important; } + .font-italic { font-style: italic !important; } @@ -6413,61 +7135,61 @@ button.bg-error:focus { color: #226f97 !important; } a.text-primary:hover, .card-feeding a.card-body:hover, a.text-primary:focus, .card-feeding a.card-body:focus { - color: #19506d !important; } + color: #144159 !important; } .text-secondary { color: #ff8f00 !important; } a.text-secondary:hover, a.text-secondary:focus { - color: #cc7200 !important; } + color: #b36400 !important; } .text-success, .card-tummytime .card-body { color: #239556 !important; } a.text-success:hover, .card-tummytime a.card-body:hover, a.text-success:focus, .card-tummytime a.card-body:focus { - color: #196c3e !important; } + color: #145732 !important; } .text-info { color: #15b2d3 !important; } a.text-info:hover, a.text-info:focus { - color: #108ba5 !important; } + color: #0e778d !important; } .text-warning { color: #ffbe42 !important; } a.text-warning:hover, a.text-warning:focus { - color: #ffac0f !important; } + color: #f5a000 !important; } .text-danger, .card-diaperchange .card-body { color: #a72431 !important; } a.text-danger:hover, .card-diaperchange a.card-body:hover, a.text-danger:focus, .card-diaperchange a.card-body:focus { - color: #7d1b25 !important; } + color: #68161f !important; } .text-light, .card-statistics .card-body, .card-timer .card-body { color: #f8f9fa !important; } a.text-light:hover, .card-statistics a.card-body:hover, .card-timer a.card-body:hover, a.text-light:focus, .card-statistics a.card-body:focus, .card-timer a.card-body:focus { - color: #dae0e5 !important; } + color: #cbd3da !important; } .text-dark, .card-statistics .card-header, .card-timer .card-header { color: #343a40 !important; } a.text-dark:hover, .card-statistics a.card-header:hover, .card-timer a.card-header:hover, a.text-dark:focus, .card-statistics a.card-header:focus, .card-timer a.card-header:focus { - color: #1d2124 !important; } + color: #121416 !important; } .text-debug { color: #15b2d3 !important; } a.text-debug:hover, a.text-debug:focus { - color: #108ba5 !important; } + color: #0e778d !important; } .text-error { color: #a72431 !important; } a.text-error:hover, a.text-error:focus { - color: #7d1b25 !important; } + color: #68161f !important; } .text-body { color: #ced4da !important; } @@ -6488,6 +7210,16 @@ a.text-error:hover, a.text-error:focus { background-color: transparent; border: 0; } +.text-decoration-none { + text-decoration: none !important; } + +.text-break { + word-break: break-word !important; + overflow-wrap: break-word !important; } + +.text-reset { + color: inherit !important; } + .visible { visibility: visible !important; } diff --git a/static/babybuddy/css/app.b82863a2a4d6.css b/static/babybuddy/css/app.7e0588ab9c78.css similarity index 84% rename from static/babybuddy/css/app.b82863a2a4d6.css rename to static/babybuddy/css/app.7e0588ab9c78.css index f9501dca..72088179 100644 --- a/static/babybuddy/css/app.b82863a2a4d6.css +++ b/static/babybuddy/css/app.7e0588ab9c78.css @@ -21,9 +21,9 @@ border-color: inherit; } /*! - * Bootstrap v4.1.3 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ :root { @@ -55,7 +55,7 @@ --breakpoint-md: 768px; --breakpoint-lg: 992px; --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } *, @@ -67,19 +67,14 @@ html { font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -ms-overflow-style: scrollbar; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } -@-ms-viewport { - width: device-width; } - article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; line-height: 1.5; @@ -108,7 +103,8 @@ abbr[data-original-title] { text-decoration: underline; text-decoration: underline dotted; cursor: help; - border-bottom: 0; } + border-bottom: 0; + text-decoration-skip-ink: none; } address { margin-bottom: 1rem; @@ -137,9 +133,6 @@ dd { blockquote { margin: 0 0 1rem; } -dfn { - font-style: italic; } - b, strong { font-weight: bolder; } @@ -163,8 +156,7 @@ sup { a { color: #15b2d3; text-decoration: none; - background-color: transparent; - -webkit-text-decoration-skip: objects; } + background-color: transparent; } a:hover { color: #0e778d; text-decoration: underline; } @@ -188,8 +180,7 @@ samp { pre { margin-top: 0; margin-bottom: 1rem; - overflow: auto; - -ms-overflow-style: scrollbar; } + overflow: auto; } figure { margin: 0 0 1rem; } @@ -244,12 +235,21 @@ button, select { text-transform: none; } +select { + word-wrap: normal; } + button, -html [type="button"], +[type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), +[type="submit"]:not(:disabled) { + cursor: pointer; } + button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, @@ -300,7 +300,6 @@ progress { outline-offset: -2px; -webkit-appearance: none; } -[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } @@ -324,10 +323,8 @@ template { h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .card-dashboard .card-header, .card-dashboard .card-body .card-title, .h5, .h6 { margin-bottom: 0.5rem; - font-family: inherit; font-weight: 500; - line-height: 1.2; - color: inherit; } + line-height: 1.2; } h1, .h1 { font-size: 2.5rem; } @@ -413,7 +410,7 @@ mark, font-size: 80%; color: #6c757d; } .blockquote-footer::before { - content: "\2014 \00A0"; } + content: "\2014\00A0"; } .img-fluid { max-width: 100%; @@ -517,7 +514,6 @@ pre { .col-xl-auto { position: relative; width: 100%; - min-height: 1px; padding-right: 15px; padding-left: 15px; } @@ -529,7 +525,7 @@ pre { .col-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-1 { flex: 0 0 8.33333%; @@ -665,7 +661,7 @@ pre { .col-sm-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-sm-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -765,7 +761,7 @@ pre { .col-md-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-md-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -865,7 +861,7 @@ pre { .col-lg-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-lg-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -965,7 +961,7 @@ pre { .col-xl-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-xl-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -1060,7 +1056,7 @@ pre { .table { width: 100%; margin-bottom: 1rem; - background-color: transparent; } + color: #212529; } .table th, .table td { padding: 0.75rem; @@ -1071,8 +1067,6 @@ pre { border-bottom: 2px solid #343a40; } .table tbody + tbody { border-top: 2px solid #343a40; } - .table .table { - background-color: #212529; } .table-sm th, .table-sm td { @@ -1097,6 +1091,7 @@ pre { background-color: rgba(34, 111, 151, 0.1); } .table-hover tbody tr:hover { + color: #212529; background-color: rgba(0, 0, 0, 0.075); } .table-primary, @@ -1104,6 +1099,12 @@ pre { .table-primary > td { background-color: #c1d7e2; } +.table-primary th, +.table-primary td, +.table-primary thead th, +.table-primary tbody + tbody { + border-color: #8cb4c9; } + .table-hover .table-primary:hover { background-color: #b0ccda; } .table-hover .table-primary:hover > td, @@ -1115,6 +1116,12 @@ pre { .table-secondary > td { background-color: #ffe0b8; } +.table-secondary th, +.table-secondary td, +.table-secondary thead th, +.table-secondary tbody + tbody { + border-color: #ffc57a; } + .table-hover .table-secondary:hover { background-color: #ffd59f; } .table-hover .table-secondary:hover > td, @@ -1126,6 +1133,12 @@ pre { .table-success > td { background-color: #c1e1d0; } +.table-success th, +.table-success td, +.table-success thead th, +.table-success tbody + tbody { + border-color: #8dc8a7; } + .table-hover .table-success:hover { background-color: #b0d9c3; } .table-hover .table-success:hover > td, @@ -1137,6 +1150,12 @@ pre { .table-info > td { background-color: #bde9f3; } +.table-info th, +.table-info td, +.table-info thead th, +.table-info tbody + tbody { + border-color: #85d7e8; } + .table-hover .table-info:hover { background-color: #a7e2ef; } .table-hover .table-info:hover > td, @@ -1148,6 +1167,12 @@ pre { .table-warning > td { background-color: #ffedca; } +.table-warning th, +.table-warning td, +.table-warning thead th, +.table-warning tbody + tbody { + border-color: #ffdd9d; } + .table-hover .table-warning:hover { background-color: #ffe4b1; } .table-hover .table-warning:hover > td, @@ -1159,6 +1184,12 @@ pre { .table-danger > td { background-color: #e6c2c5; } +.table-danger th, +.table-danger td, +.table-danger thead th, +.table-danger tbody + tbody { + border-color: #d18d94; } + .table-hover .table-danger:hover { background-color: #dfb0b4; } .table-hover .table-danger:hover > td, @@ -1170,6 +1201,12 @@ pre { .table-light > td { background-color: #fdfdfe; } +.table-light th, +.table-light td, +.table-light thead th, +.table-light tbody + tbody { + border-color: #fbfcfc; } + .table-hover .table-light:hover { background-color: #ececf6; } .table-hover .table-light:hover > td, @@ -1181,6 +1218,12 @@ pre { .table-dark > td { background-color: #c6c8ca; } +.table-dark th, +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { + border-color: #95999c; } + .table-hover .table-dark:hover { background-color: #b9bbbe; } .table-hover .table-dark:hover > td, @@ -1192,6 +1235,12 @@ pre { .table-debug > td { background-color: #bde9f3; } +.table-debug th, +.table-debug td, +.table-debug thead th, +.table-debug tbody + tbody { + border-color: #85d7e8; } + .table-hover .table-debug:hover { background-color: #a7e2ef; } .table-hover .table-debug:hover > td, @@ -1203,6 +1252,12 @@ pre { .table-error > td { background-color: #e6c2c5; } +.table-error th, +.table-error td, +.table-error thead th, +.table-error tbody + tbody { + border-color: #d18d94; } + .table-hover .table-error:hover { background-color: #dfb0b4; } .table-hover .table-error:hover > td, @@ -1222,8 +1277,8 @@ pre { .table .thead-dark th { color: #fff; - background-color: #212529; - border-color: #32383e; } + background-color: #343a40; + border-color: #454d55; } .table .thead-light th { color: #495057; @@ -1232,16 +1287,17 @@ pre { .table-dark { color: #fff; - background-color: #212529; } + background-color: #343a40; } .table-dark th, .table-dark td, .table-dark thead th { - border-color: #32383e; } + border-color: #454d55; } .table-dark.table-bordered { border: 0; } .table-dark.table-striped tbody tr:nth-of-type(odd) { background-color: rgba(255, 255, 255, 0.05); } .table-dark.table-hover tbody tr:hover { + color: #fff; background-color: rgba(255, 255, 255, 0.075); } @media (max-width: 575.98px) { @@ -1249,8 +1305,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-sm > .table-bordered { border: 0; } } @@ -1259,8 +1314,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-md > .table-bordered { border: 0; } } @@ -1269,8 +1323,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-lg > .table-bordered { border: 0; } } @@ -1279,8 +1332,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-xl > .table-bordered { border: 0; } } @@ -1288,17 +1340,17 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive > .table-bordered { border: 0; } .form-control { display: block; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; font-size: 1rem; + font-weight: 400; line-height: 1.5; color: #000; background-color: #fff; @@ -1306,7 +1358,7 @@ pre { border: 1px solid rgba(108, 117, 125, 0.15); border-radius: 0.25rem; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .form-control { transition: none; } } .form-control::-ms-expand { @@ -1369,14 +1421,14 @@ select.form-control:focus::-ms-value { padding-left: 0; } .form-control-sm { - height: calc(1.8125rem + 2px); + height: calc(1.5em + 0.5rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } .form-control-lg { - height: calc(2.875rem + 2px); + height: calc(1.5em + 1rem + 2px); padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; @@ -1452,22 +1504,34 @@ textarea.form-control { background-color: rgba(40, 167, 69, 0.9); border-radius: 0.25rem; } -.was-validated .form-control:valid, .form-control.is-valid, .was-validated -.custom-select:valid, -.custom-select.is-valid { - border-color: #28a745; } - .was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated - .custom-select:valid:focus, - .custom-select.is-valid:focus { +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #28a745; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:valid:focus, .form-control.is-valid:focus { border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .was-validated .form-control:valid ~ .valid-feedback, .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, - .form-control.is-valid ~ .valid-tooltip, .was-validated - .custom-select:valid ~ .valid-feedback, - .was-validated - .custom-select:valid ~ .valid-tooltip, - .custom-select.is-valid ~ .valid-feedback, + .form-control.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .custom-select:valid, .custom-select.is-valid { + border-color: #28a745; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + .was-validated .custom-select:valid ~ .valid-feedback, + .was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, .custom-select.is-valid ~ .valid-tooltip { display: block; } @@ -1487,7 +1551,7 @@ textarea.form-control { .was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { color: #28a745; } .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { - background-color: #71dd8a; } + border-color: #28a745; } .was-validated .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, @@ -1495,15 +1559,17 @@ textarea.form-control { display: block; } .was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #34ce57; background-color: #34ce57; } .was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #212529, 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + +.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #28a745; } .was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { border-color: #28a745; } - .was-validated .custom-file-input:valid ~ .custom-file-label::after, .custom-file-input.is-valid ~ .custom-file-label::after { - border-color: inherit; } .was-validated .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, @@ -1511,6 +1577,7 @@ textarea.form-control { display: block; } .was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .invalid-feedback { @@ -1534,22 +1601,34 @@ textarea.form-control { background-color: rgba(220, 53, 69, 0.9); border-radius: 0.25rem; } -.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated -.custom-select:invalid, -.custom-select.is-invalid { - border-color: #dc3545; } - .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated - .custom-select:invalid:focus, - .custom-select.is-invalid:focus { +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .was-validated .form-control:invalid ~ .invalid-feedback, .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, - .form-control.is-invalid ~ .invalid-tooltip, .was-validated - .custom-select:invalid ~ .invalid-feedback, - .was-validated - .custom-select:invalid ~ .invalid-tooltip, - .custom-select.is-invalid ~ .invalid-feedback, + .form-control.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .custom-select:invalid, .custom-select.is-invalid { + border-color: #dc3545; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + .was-validated .custom-select:invalid ~ .invalid-feedback, + .was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, .custom-select.is-invalid ~ .invalid-tooltip { display: block; } @@ -1569,7 +1648,7 @@ textarea.form-control { .was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { color: #dc3545; } .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { - background-color: #efa2a9; } + border-color: #dc3545; } .was-validated .custom-control-input:invalid ~ .invalid-feedback, .was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, @@ -1577,15 +1656,17 @@ textarea.form-control { display: block; } .was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #e4606d; background-color: #e4606d; } .was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #212529, 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + +.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #dc3545; } .was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { border-color: #dc3545; } - .was-validated .custom-file-input:invalid ~ .custom-file-label::after, .custom-file-input.is-invalid ~ .custom-file-label::after { - border-color: inherit; } .was-validated .custom-file-input:invalid ~ .invalid-feedback, .was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, @@ -1593,6 +1674,7 @@ textarea.form-control { display: block; } .was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .form-inline { @@ -1630,6 +1712,7 @@ textarea.form-control { padding-left: 0; } .form-inline .form-check-input { position: relative; + flex-shrink: 0; margin-top: 0; margin-right: 0.25rem; margin-left: 0; } @@ -1642,28 +1725,28 @@ textarea.form-control { .btn { display: inline-block; font-weight: 400; + color: #ced4da; text-align: center; - white-space: nowrap; vertical-align: middle; user-select: none; + background-color: transparent; border: 1px solid transparent; padding: 0.375rem 0.75rem; font-size: 1rem; line-height: 1.5; border-radius: 0.25rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .btn { transition: none; } } - .btn:hover, .btn:focus { + .btn:hover { + color: #ced4da; text-decoration: none; } .btn:focus, .btn.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .btn.disabled, .btn:disabled { opacity: 0.65; } - .btn:not(:disabled):not(.disabled) { - cursor: pointer; } a.btn.disabled, fieldset:disabled a.btn { @@ -1678,7 +1761,7 @@ fieldset:disabled a.btn { background-color: #1b5878; border-color: #19506d; } .btn-primary:focus, .btn-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(34, 111, 151, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(67, 133, 167, 0.5); } .btn-primary.disabled, .btn-primary:disabled { color: #fff; background-color: #226f97; @@ -1690,7 +1773,7 @@ fieldset:disabled a.btn { border-color: #164963; } .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(34, 111, 151, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(67, 133, 167, 0.5); } .btn-secondary { color: #212529; @@ -1701,7 +1784,7 @@ fieldset:disabled a.btn { background-color: #d97a00; border-color: #cc7200; } .btn-secondary:focus, .btn-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 143, 0, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 127, 6, 0.5); } .btn-secondary.disabled, .btn-secondary:disabled { color: #212529; background-color: #ff8f00; @@ -1713,7 +1796,7 @@ fieldset:disabled a.btn { border-color: #bf6b00; } .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 143, 0, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 127, 6, 0.5); } .btn-success { color: #fff; @@ -1724,7 +1807,7 @@ fieldset:disabled a.btn { background-color: #1c7644; border-color: #196c3e; } .btn-success:focus, .btn-success.focus { - box-shadow: 0 0 0 0.2rem rgba(35, 149, 86, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(68, 165, 111, 0.5); } .btn-success.disabled, .btn-success:disabled { color: #fff; background-color: #239556; @@ -1736,7 +1819,7 @@ fieldset:disabled a.btn { border-color: #176138; } .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, .show > .btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(35, 149, 86, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(68, 165, 111, 0.5); } .btn-info { color: #fff; @@ -1747,7 +1830,7 @@ fieldset:disabled a.btn { background-color: #1295b0; border-color: #108ba5; } .btn-info:focus, .btn-info.focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-info.disabled, .btn-info:disabled { color: #fff; background-color: #15b2d3; @@ -1759,7 +1842,7 @@ fieldset:disabled a.btn { border-color: #0f8199; } .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, .show > .btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-warning { color: #212529; @@ -1770,7 +1853,7 @@ fieldset:disabled a.btn { background-color: #ffb11c; border-color: #ffac0f; } .btn-warning:focus, .btn-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 190, 66, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 167, 62, 0.5); } .btn-warning.disabled, .btn-warning:disabled { color: #212529; background-color: #ffbe42; @@ -1782,7 +1865,7 @@ fieldset:disabled a.btn { border-color: #ffa802; } .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 190, 66, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 167, 62, 0.5); } .btn-danger { color: #fff; @@ -1793,7 +1876,7 @@ fieldset:disabled a.btn { background-color: #881d28; border-color: #7d1b25; } .btn-danger:focus, .btn-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-danger.disabled, .btn-danger:disabled { color: #fff; background-color: #a72431; @@ -1805,7 +1888,7 @@ fieldset:disabled a.btn { border-color: #731922; } .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-light { color: #212529; @@ -1816,7 +1899,7 @@ fieldset:disabled a.btn { background-color: #e2e6ea; border-color: #dae0e5; } .btn-light:focus, .btn-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } .btn-light.disabled, .btn-light:disabled { color: #212529; background-color: #f8f9fa; @@ -1828,7 +1911,7 @@ fieldset:disabled a.btn { border-color: #d3d9df; } .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, .show > .btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } .btn-dark { color: #fff; @@ -1839,7 +1922,7 @@ fieldset:disabled a.btn { background-color: #23272b; border-color: #1d2124; } .btn-dark:focus, .btn-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } .btn-dark.disabled, .btn-dark:disabled { color: #fff; background-color: #343a40; @@ -1851,7 +1934,7 @@ fieldset:disabled a.btn { border-color: #171a1d; } .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } .btn-debug { color: #fff; @@ -1862,7 +1945,7 @@ fieldset:disabled a.btn { background-color: #1295b0; border-color: #108ba5; } .btn-debug:focus, .btn-debug.focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-debug.disabled, .btn-debug:disabled { color: #fff; background-color: #15b2d3; @@ -1874,7 +1957,7 @@ fieldset:disabled a.btn { border-color: #0f8199; } .btn-debug:not(:disabled):not(.disabled):active:focus, .btn-debug:not(:disabled):not(.disabled).active:focus, .show > .btn-debug.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-error { color: #fff; @@ -1885,7 +1968,7 @@ fieldset:disabled a.btn { background-color: #881d28; border-color: #7d1b25; } .btn-error:focus, .btn-error.focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-error.disabled, .btn-error:disabled { color: #fff; background-color: #a72431; @@ -1897,12 +1980,10 @@ fieldset:disabled a.btn { border-color: #731922; } .btn-error:not(:disabled):not(.disabled):active:focus, .btn-error:not(:disabled):not(.disabled).active:focus, .show > .btn-error.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-outline-primary { color: #226f97; - background-color: transparent; - background-image: none; border-color: #226f97; } .btn-outline-primary:hover { color: #fff; @@ -1924,8 +2005,6 @@ fieldset:disabled a.btn { .btn-outline-secondary { color: #ff8f00; - background-color: transparent; - background-image: none; border-color: #ff8f00; } .btn-outline-secondary:hover { color: #212529; @@ -1947,8 +2026,6 @@ fieldset:disabled a.btn { .btn-outline-success { color: #239556; - background-color: transparent; - background-image: none; border-color: #239556; } .btn-outline-success:hover { color: #fff; @@ -1970,8 +2047,6 @@ fieldset:disabled a.btn { .btn-outline-info { color: #15b2d3; - background-color: transparent; - background-image: none; border-color: #15b2d3; } .btn-outline-info:hover { color: #fff; @@ -1993,8 +2068,6 @@ fieldset:disabled a.btn { .btn-outline-warning { color: #ffbe42; - background-color: transparent; - background-image: none; border-color: #ffbe42; } .btn-outline-warning:hover { color: #212529; @@ -2016,8 +2089,6 @@ fieldset:disabled a.btn { .btn-outline-danger { color: #a72431; - background-color: transparent; - background-image: none; border-color: #a72431; } .btn-outline-danger:hover { color: #fff; @@ -2039,8 +2110,6 @@ fieldset:disabled a.btn { .btn-outline-light { color: #f8f9fa; - background-color: transparent; - background-image: none; border-color: #f8f9fa; } .btn-outline-light:hover { color: #212529; @@ -2062,8 +2131,6 @@ fieldset:disabled a.btn { .btn-outline-dark { color: #343a40; - background-color: transparent; - background-image: none; border-color: #343a40; } .btn-outline-dark:hover { color: #fff; @@ -2085,8 +2152,6 @@ fieldset:disabled a.btn { .btn-outline-debug { color: #15b2d3; - background-color: transparent; - background-image: none; border-color: #15b2d3; } .btn-outline-debug:hover { color: #fff; @@ -2108,8 +2173,6 @@ fieldset:disabled a.btn { .btn-outline-error { color: #a72431; - background-color: transparent; - background-image: none; border-color: #a72431; } .btn-outline-error:hover { color: #fff; @@ -2132,15 +2195,12 @@ fieldset:disabled a.btn { .btn-link { font-weight: 400; color: #15b2d3; - background-color: transparent; } + text-decoration: none; } .btn-link:hover { color: #0e778d; - text-decoration: underline; - background-color: transparent; - border-color: transparent; } + text-decoration: underline; } .btn-link:focus, .btn-link.focus { text-decoration: underline; - border-color: transparent; box-shadow: none; } .btn-link:disabled, .btn-link.disabled { color: #6c757d; @@ -2171,7 +2231,7 @@ input[type="button"].btn-block { .fade { transition: opacity 0.15s linear; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .fade { transition: none; } } .fade:not(.show) { @@ -2185,7 +2245,7 @@ input[type="button"].btn-block { height: 0; overflow: hidden; transition: height 0.35s ease; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .collapsing { transition: none; } } @@ -2195,20 +2255,19 @@ input[type="button"].btn-block { .dropleft { position: relative; } -.dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; } - -.dropdown-toggle:empty::after { - margin-left: 0; } +.dropdown-toggle { + white-space: nowrap; } + .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; } + .dropdown-toggle:empty::after { + margin-left: 0; } .dropdown-menu { position: absolute; @@ -2221,7 +2280,7 @@ input[type="button"].btn-block { padding: 0.5rem 0; margin: 0.125rem 0 0; font-size: 1rem; - color: #ced4da; + color: #212529; text-align: left; list-style: none; background-color: #495057; @@ -2229,10 +2288,46 @@ input[type="button"].btn-block { border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } +.dropdown-menu-left { + right: auto; + left: 0; } + .dropdown-menu-right { right: 0; left: auto; } +@media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; } + .dropdown-menu-sm-right { + right: 0; + left: auto; } } + +@media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; } + .dropdown-menu-md-right { + right: 0; + left: auto; } } + +@media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; } + .dropdown-menu-lg-right { + right: 0; + left: auto; } } + +@media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; } + .dropdown-menu-xl-right { + right: 0; + left: auto; } } + .dropup .dropdown-menu { top: auto; bottom: 100%; @@ -2241,8 +2336,6 @@ input[type="button"].btn-block { .dropup .dropdown-toggle::after { display: inline-block; - width: 0; - height: 0; margin-left: 0.255em; vertical-align: 0.255em; content: ""; @@ -2263,8 +2356,6 @@ input[type="button"].btn-block { .dropright .dropdown-toggle::after { display: inline-block; - width: 0; - height: 0; margin-left: 0.255em; vertical-align: 0.255em; content: ""; @@ -2288,8 +2379,6 @@ input[type="button"].btn-block { .dropleft .dropdown-toggle::after { display: inline-block; - width: 0; - height: 0; margin-left: 0.255em; vertical-align: 0.255em; content: ""; } @@ -2299,8 +2388,6 @@ input[type="button"].btn-block { .dropleft .dropdown-toggle::before { display: inline-block; - width: 0; - height: 0; margin-right: 0.255em; vertical-align: 0.255em; content: ""; @@ -2345,6 +2432,7 @@ input[type="button"].btn-block { background-color: #226f97; } .dropdown-item.disabled, .dropdown-item:disabled { color: #6c757d; + pointer-events: none; background-color: transparent; } .dropdown-menu.show { @@ -2371,7 +2459,7 @@ input[type="button"].btn-block { .btn-group > .btn, .btn-group-vertical > .btn { position: relative; - flex: 0 1 auto; } + flex: 1 1 auto; } .btn-group > .btn:hover, .btn-group-vertical > .btn:hover { z-index: 1; } @@ -2380,15 +2468,6 @@ input[type="button"].btn-block { .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active { z-index: 1; } - .btn-group .btn + .btn, - .btn-group .btn + .btn-group, - .btn-group .btn-group + .btn, - .btn-group .btn-group + .btn-group, - .btn-group-vertical .btn + .btn, - .btn-group-vertical .btn + .btn-group, - .btn-group-vertical .btn-group + .btn, - .btn-group-vertical .btn-group + .btn-group { - margin-left: -1px; } .btn-toolbar { display: flex; @@ -2397,8 +2476,9 @@ input[type="button"].btn-block { .btn-toolbar .input-group { width: auto; } -.btn-group > .btn:first-child { - margin-left: 0; } +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; } .btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn-group:not(:last-child) > .btn { @@ -2432,15 +2512,12 @@ input[type="button"].btn-block { flex-direction: column; align-items: flex-start; justify-content: center; } - .btn-group-vertical .btn, - .btn-group-vertical .btn-group { + .btn-group-vertical > .btn, + .btn-group-vertical > .btn-group { width: 100%; } - .btn-group-vertical > .btn + .btn, - .btn-group-vertical > .btn + .btn-group, - .btn-group-vertical > .btn-group + .btn, - .btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; } + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; } .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; @@ -2468,6 +2545,7 @@ input[type="button"].btn-block { align-items: stretch; width: 100%; } .input-group > .form-control, + .input-group > .form-control-plaintext, .input-group > .custom-select, .input-group > .custom-file { position: relative; @@ -2477,6 +2555,9 @@ input[type="button"].btn-block { .input-group > .form-control + .form-control, .input-group > .form-control + .custom-select, .input-group > .form-control + .custom-file, + .input-group > .form-control-plaintext + .form-control, + .input-group > .form-control-plaintext + .custom-select, + .input-group > .form-control-plaintext + .custom-file, .input-group > .custom-select + .form-control, .input-group > .custom-select + .custom-select, .input-group > .custom-select + .custom-file, @@ -2516,6 +2597,9 @@ input[type="button"].btn-block { .input-group-append .btn { position: relative; z-index: 2; } + .input-group-prepend .btn:focus, + .input-group-append .btn:focus { + z-index: 3; } .input-group-prepend .btn + .btn, .input-group-prepend .btn + .input-group-text, .input-group-prepend .input-group-text + .input-group-text, @@ -2550,28 +2634,40 @@ input[type="button"].btn-block { .input-group-text input[type="checkbox"] { margin-top: 0; } +.input-group-lg > .form-control:not(textarea), +.input-group-lg > .custom-select { + height: calc(1.5em + 1rem + 2px); } + .input-group-lg > .form-control, +.input-group-lg > .custom-select, .input-group-lg > .input-group-prepend > .input-group-text, .input-group-lg > .input-group-append > .input-group-text, .input-group-lg > .input-group-prepend > .btn, .input-group-lg > .input-group-append > .btn { - height: calc(2.875rem + 2px); padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } +.input-group-sm > .form-control:not(textarea), +.input-group-sm > .custom-select { + height: calc(1.5em + 0.5rem + 2px); } + .input-group-sm > .form-control, +.input-group-sm > .custom-select, .input-group-sm > .input-group-prepend > .input-group-text, .input-group-sm > .input-group-append > .input-group-text, .input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-append > .btn { - height: calc(1.8125rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } +.input-group-lg > .custom-select, +.input-group-sm > .custom-select { + padding-right: 1.75rem; } + .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, .input-group > .input-group-append:not(:last-child) > .btn, @@ -2606,12 +2702,16 @@ input[type="button"].btn-block { opacity: 0; } .custom-control-input:checked ~ .custom-control-label::before { color: #fff; + border-color: #007bff; background-color: #007bff; } .custom-control-input:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } - .custom-control-input:active ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #80bdff; } + .custom-control-input:not(:disabled):active ~ .custom-control-label::before { color: #fff; - background-color: #b3d7ff; } + background-color: #b3d7ff; + border-color: #b3d7ff; } .custom-control-input:disabled ~ .custom-control-label { color: #6c757d; } .custom-control-input:disabled ~ .custom-control-label::before { @@ -2619,7 +2719,8 @@ input[type="button"].btn-block { .custom-control-label { position: relative; - margin-bottom: 0; } + margin-bottom: 0; + vertical-align: top; } .custom-control-label::before { position: absolute; top: 0.25rem; @@ -2629,8 +2730,8 @@ input[type="button"].btn-block { height: 1rem; pointer-events: none; content: ""; - user-select: none; - background-color: #dee2e6; } + background-color: #fff; + border: #adb5bd solid 1px; } .custom-control-label::after { position: absolute; top: 0.25rem; @@ -2639,24 +2740,20 @@ input[type="button"].btn-block { width: 1rem; height: 1rem; content: ""; - background-repeat: no-repeat; - background-position: center center; - background-size: 50% 50%; } + background: no-repeat 50% / 50% 50%; } .custom-checkbox .custom-control-label::before { border-radius: 0.25rem; } -.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before { - background-color: #007bff; } - .custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #007bff; background-color: #007bff; } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); } .custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(0, 123, 255, 0.5); } @@ -2667,32 +2764,55 @@ input[type="button"].btn-block { .custom-radio .custom-control-label::before { border-radius: 50%; } -.custom-radio .custom-control-input:checked ~ .custom-control-label::before { - background-color: #007bff; } - .custom-radio .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } .custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(0, 123, 255, 0.5); } +.custom-switch { + padding-left: 2.25rem; } + .custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; } + .custom-switch .custom-control-label::after { + top: calc(0.25rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + transition: none; } } + .custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + transform: translateX(0.75rem); } + .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); } + .custom-select { display: inline-block; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; line-height: 1.5; color: #495057; vertical-align: middle; - background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; - background-size: 8px 10px; + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; + background-color: #fff; border: 1px solid #ced4da; border-radius: 0.25rem; appearance: none; } .custom-select:focus { border-color: #80bdff; outline: 0; - box-shadow: 0 0 0 0.2rem rgba(128, 189, 255, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .custom-select:focus::-ms-value { color: #000; background-color: #fff; } @@ -2704,43 +2824,45 @@ input[type="button"].btn-block { color: #6c757d; background-color: #e9ecef; } .custom-select::-ms-expand { - opacity: 0; } + display: none; } .custom-select-sm { - height: calc(1.8125rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 75%; } + height: calc(1.5em + 0.5rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; } .custom-select-lg { - height: calc(2.875rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 125%; } + height: calc(1.5em + 1rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; } .custom-file { position: relative; display: inline-block; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); margin-bottom: 0; } .custom-file-input { position: relative; z-index: 2; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); margin: 0; opacity: 0; } .custom-file-input:focus ~ .custom-file-label { border-color: #80bdff; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } - .custom-file-input:focus ~ .custom-file-label::after { - border-color: #80bdff; } .custom-file-input:disabled ~ .custom-file-label { background-color: #e9ecef; } .custom-file-input:lang(en) ~ .custom-file-label::after { content: "Browse"; } + .custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); } .custom-file-label { position: absolute; @@ -2748,8 +2870,9 @@ input[type="button"].btn-block { right: 0; left: 0; z-index: 1; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; + font-weight: 400; line-height: 1.5; color: #495057; background-color: #fff; @@ -2762,18 +2885,19 @@ input[type="button"].btn-block { bottom: 0; z-index: 3; display: block; - height: 2.25rem; + height: calc(1.5em + 0.75rem); padding: 0.375rem 0.75rem; line-height: 1.5; color: #495057; content: "Browse"; background-color: #e9ecef; - border-left: 1px solid #ced4da; + border-left: inherit; border-radius: 0 0.25rem 0.25rem 0; } .custom-range { width: 100%; - padding-left: 0; + height: calc(1rem + 0.4rem); + padding: 0; background-color: transparent; appearance: none; } .custom-range:focus { @@ -2795,7 +2919,7 @@ input[type="button"].btn-block { border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-range::-webkit-slider-thumb { transition: none; } } .custom-range::-webkit-slider-thumb:active { @@ -2816,7 +2940,7 @@ input[type="button"].btn-block { border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-range::-moz-range-thumb { transition: none; } } .custom-range::-moz-range-thumb:active { @@ -2840,7 +2964,7 @@ input[type="button"].btn-block { border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-range::-ms-thumb { transition: none; } } .custom-range::-ms-thumb:active { @@ -2860,12 +2984,22 @@ input[type="button"].btn-block { margin-right: 15px; background-color: #dee2e6; border-radius: 1rem; } + .custom-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; } + .custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; } + .custom-range:disabled::-moz-range-thumb { + background-color: #adb5bd; } + .custom-range:disabled::-moz-range-track { + cursor: default; } + .custom-range:disabled::-ms-thumb { + background-color: #adb5bd; } .custom-control-label::before, .custom-file-label, .custom-select { transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-control-label::before, .custom-file-label, .custom-select { @@ -2884,7 +3018,9 @@ input[type="button"].btn-block { .nav-link:hover, .nav-link:focus { text-decoration: none; } .nav-link.disabled { - color: #6c757d; } + color: #6c757d; + pointer-events: none; + cursor: default; } .nav-tabs { border-bottom: 1px solid #dee2e6; } @@ -2990,8 +3126,6 @@ input[type="button"].btn-block { border-radius: 0.25rem; } .navbar-toggler:hover, .navbar-toggler:focus { text-decoration: none; } - .navbar-toggler:not(:disabled):not(.disabled) { - cursor: pointer; } .navbar-toggler-icon { display: inline-block; @@ -3152,7 +3286,7 @@ input[type="button"].btn-block { border-color: rgba(0, 0, 0, 0.1); } .navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-light .navbar-text { color: rgba(0, 0, 0, 0.5); } @@ -3184,7 +3318,7 @@ input[type="button"].btn-block { border-color: rgba(255, 255, 255, 0.1); } .navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-dark .navbar-text { color: rgba(255, 255, 255, 0.5); } @@ -3314,41 +3448,24 @@ input[type="button"].btn-block { .card-group > .card + .card { margin-left: 0; border-left: 0; } - .card-group > .card:first-child { + .card-group > .card:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } - .card-group > .card:first-child .card-img-top, - .card-group > .card:first-child .card-header { + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { border-top-right-radius: 0; } - .card-group > .card:first-child .card-img-bottom, - .card-group > .card:first-child .card-footer { + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { border-bottom-right-radius: 0; } - .card-group > .card:last-child { + .card-group > .card:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } - .card-group > .card:last-child .card-img-top, - .card-group > .card:last-child .card-header { + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { border-top-left-radius: 0; } - .card-group > .card:last-child .card-img-bottom, - .card-group > .card:last-child .card-footer { - border-bottom-left-radius: 0; } - .card-group > .card:only-child { - border-radius: 0.25rem; } - .card-group > .card:only-child .card-img-top, - .card-group > .card:only-child .card-header { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; } - .card-group > .card:only-child .card-img-bottom, - .card-group > .card:only-child .card-footer { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; } - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) { - border-radius: 0; } - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer { - border-radius: 0; } } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; } } .card-columns .card { margin-bottom: 0.75rem; } @@ -3363,21 +3480,22 @@ input[type="button"].btn-block { display: inline-block; width: 100%; } } -.accordion .card:not(:first-of-type):not(:last-of-type) { - border-bottom: 0; - border-radius: 0; } - -.accordion .card:not(:first-of-type) .card-header:first-child { - border-radius: 0; } - -.accordion .card:first-of-type { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; } - -.accordion .card:last-of-type { - border-top-left-radius: 0; - border-top-right-radius: 0; } +.accordion > .card { + overflow: hidden; } + .accordion > .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; } + .accordion > .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; } + .accordion > .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .accordion > .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; } + .accordion > .card .card-header { + margin-bottom: -1px; } .breadcrumb { display: flex; @@ -3430,8 +3548,6 @@ input[type="button"].btn-block { z-index: 2; outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } - .page-link:not(:disabled):not(.disabled) { - cursor: pointer; } .page-item:first-child .page-link { margin-left: 0; @@ -3490,7 +3606,13 @@ input[type="button"].btn-block { text-align: center; white-space: nowrap; vertical-align: baseline; - border-radius: 0.25rem; } + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .badge { + transition: none; } } + a.badge:hover, a.badge:focus { + text-decoration: none; } .badge:empty { display: none; } @@ -3506,82 +3628,102 @@ input[type="button"].btn-block { .badge-primary { color: #fff; background-color: #226f97; } - .badge-primary[href]:hover, .badge-primary[href]:focus { + a.badge-primary:hover, a.badge-primary:focus { color: #fff; - text-decoration: none; background-color: #19506d; } + a.badge-primary:focus, a.badge-primary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(34, 111, 151, 0.5); } .badge-secondary { color: #212529; background-color: #ff8f00; } - .badge-secondary[href]:hover, .badge-secondary[href]:focus { + a.badge-secondary:hover, a.badge-secondary:focus { color: #212529; - text-decoration: none; background-color: #cc7200; } + a.badge-secondary:focus, a.badge-secondary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(255, 143, 0, 0.5); } .badge-success { color: #fff; background-color: #239556; } - .badge-success[href]:hover, .badge-success[href]:focus { + a.badge-success:hover, a.badge-success:focus { color: #fff; - text-decoration: none; background-color: #196c3e; } + a.badge-success:focus, a.badge-success.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(35, 149, 86, 0.5); } .badge-info { color: #fff; background-color: #15b2d3; } - .badge-info[href]:hover, .badge-info[href]:focus { + a.badge-info:hover, a.badge-info:focus { color: #fff; - text-decoration: none; background-color: #108ba5; } + a.badge-info:focus, a.badge-info.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } .badge-warning { color: #212529; background-color: #ffbe42; } - .badge-warning[href]:hover, .badge-warning[href]:focus { + a.badge-warning:hover, a.badge-warning:focus { color: #212529; - text-decoration: none; background-color: #ffac0f; } + a.badge-warning:focus, a.badge-warning.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(255, 190, 66, 0.5); } .badge-danger { color: #fff; background-color: #a72431; } - .badge-danger[href]:hover, .badge-danger[href]:focus { + a.badge-danger:hover, a.badge-danger:focus { color: #fff; - text-decoration: none; background-color: #7d1b25; } + a.badge-danger:focus, a.badge-danger.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } .badge-light { color: #212529; background-color: #f8f9fa; } - .badge-light[href]:hover, .badge-light[href]:focus { + a.badge-light:hover, a.badge-light:focus { color: #212529; - text-decoration: none; background-color: #dae0e5; } + a.badge-light:focus, a.badge-light.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } .badge-dark { color: #fff; background-color: #343a40; } - .badge-dark[href]:hover, .badge-dark[href]:focus { + a.badge-dark:hover, a.badge-dark:focus { color: #fff; - text-decoration: none; background-color: #1d2124; } + a.badge-dark:focus, a.badge-dark.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } .badge-debug { color: #fff; background-color: #15b2d3; } - .badge-debug[href]:hover, .badge-debug[href]:focus { + a.badge-debug:hover, a.badge-debug:focus { color: #fff; - text-decoration: none; background-color: #108ba5; } + a.badge-debug:focus, a.badge-debug.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } .badge-error { color: #fff; background-color: #a72431; } - .badge-error[href]:hover, .badge-error[href]:focus { + a.badge-error:hover, a.badge-error:focus { color: #fff; - text-decoration: none; background-color: #7d1b25; } + a.badge-error:focus, a.badge-error.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } .jumbotron { padding: 2rem 1rem; @@ -3732,7 +3874,7 @@ input[type="button"].btn-block { white-space: nowrap; background-color: #007bff; transition: width 0.6s ease; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .progress-bar { transition: none; } } @@ -3742,6 +3884,9 @@ input[type="button"].btn-block { .progress-bar-animated { animation: progress-bar-stripes 1s linear infinite; } + @media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + animation: none; } } .media { display: flex; @@ -3761,6 +3906,7 @@ input[type="button"].btn-block { color: #ced4da; text-align: inherit; } .list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; color: #ced4da; text-decoration: none; background-color: #292d32; } @@ -3782,11 +3928,9 @@ input[type="button"].btn-block { margin-bottom: 0; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } - .list-group-item:hover, .list-group-item:focus { - z-index: 1; - text-decoration: none; } .list-group-item.disabled, .list-group-item:disabled { color: #6c757d; + pointer-events: none; background-color: #fff; } .list-group-item.active { z-index: 2; @@ -3794,15 +3938,97 @@ input[type="button"].btn-block { background-color: #007bff; border-color: #007bff; } +.list-group-horizontal { + flex-direction: row; } + .list-group-horizontal .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; } + .list-group-horizontal-sm .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-sm .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-sm .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; } + .list-group-horizontal-md .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-md .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-md .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; } + .list-group-horizontal-lg .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-lg .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-lg .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; } + .list-group-horizontal-xl .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-xl .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-xl .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + .list-group-flush .list-group-item { border-right: 0; border-left: 0; border-radius: 0; } + .list-group-flush .list-group-item:last-child { + margin-bottom: -1px; } .list-group-flush:first-child .list-group-item:first-child { border-top: 0; } .list-group-flush:last-child .list-group-item:last-child { + margin-bottom: 0; border-bottom: 0; } .list-group-item-primary { @@ -3923,18 +4149,53 @@ input[type="button"].btn-block { color: #000; text-shadow: 0 1px 0 #fff; opacity: .5; } - .close:not(:disabled):not(.disabled) { - cursor: pointer; } - .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { - color: #000; - text-decoration: none; - opacity: .75; } + .close:hover { + color: #000; + text-decoration: none; } + .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + opacity: .75; } button.close { padding: 0; background-color: transparent; border: 0; - -webkit-appearance: none; } + appearance: none; } + +a.close.disabled { + pointer-events: none; } + +.toast { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + backdrop-filter: blur(10px); + opacity: 0; + border-radius: 0.25rem; } + .toast:not(:last-child) { + margin-bottom: 0.75rem; } + .toast.showing { + opacity: 1; } + .toast.show { + display: block; + opacity: 1; } + .toast.hide { + display: none; } + +.toast-header { + display: flex; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); } + +.toast-body { + padding: 0.75rem; } .modal-open { overflow: hidden; } @@ -3945,11 +4206,11 @@ button.close { .modal { position: fixed; top: 0; - right: 0; - bottom: 0; left: 0; z-index: 1050; display: none; + width: 100%; + height: 100%; overflow: hidden; outline: 0; } @@ -3960,21 +4221,41 @@ button.close { pointer-events: none; } .modal.fade .modal-dialog { transition: transform 0.3s ease-out; - transform: translate(0, -25%); } - @media screen and (prefers-reduced-motion: reduce) { + transform: translate(0, -50px); } + @media (prefers-reduced-motion: reduce) { .modal.fade .modal-dialog { transition: none; } } .modal.show .modal-dialog { - transform: translate(0, 0); } + transform: none; } + +.modal-dialog-scrollable { + display: flex; + max-height: calc(100% - 1rem); } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 1rem); + overflow: hidden; } + .modal-dialog-scrollable .modal-header, + .modal-dialog-scrollable .modal-footer { + flex-shrink: 0; } + .modal-dialog-scrollable .modal-body { + overflow-y: auto; } .modal-dialog-centered { display: flex; align-items: center; - min-height: calc(100% - (0.5rem * 2)); } + min-height: calc(100% - 1rem); } .modal-dialog-centered::before { display: block; - height: calc(100vh - (0.5rem * 2)); + height: calc(100vh - 1rem); content: ""; } + .modal-dialog-centered.modal-dialog-scrollable { + flex-direction: column; + justify-content: center; + height: 100%; } + .modal-dialog-centered.modal-dialog-scrollable .modal-content { + max-height: none; } + .modal-dialog-centered.modal-dialog-scrollable::before { + content: none; } .modal-content { position: relative; @@ -3991,10 +4272,10 @@ button.close { .modal-backdrop { position: fixed; top: 0; - right: 0; - bottom: 0; left: 0; z-index: 1040; + width: 100vw; + height: 100vh; background-color: #000; } .modal-backdrop.fade { opacity: 0; } @@ -4005,12 +4286,12 @@ button.close { display: flex; align-items: flex-start; justify-content: space-between; - padding: 1rem; - border-bottom: 1px solid #e9ecef; + padding: 1rem 1rem; + border-bottom: 1px solid #dee2e6; border-top-left-radius: 0.3rem; border-top-right-radius: 0.3rem; } .modal-header .close { - padding: 1rem; + padding: 1rem 1rem; margin: -1rem -1rem -1rem auto; } .modal-title { @@ -4027,7 +4308,9 @@ button.close { align-items: center; justify-content: flex-end; padding: 1rem; - border-top: 1px solid #e9ecef; } + border-top: 1px solid #dee2e6; + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; } .modal-footer > :not(:first-child) { margin-left: .25rem; } .modal-footer > :not(:last-child) { @@ -4044,23 +4327,32 @@ button.close { .modal-dialog { max-width: 500px; margin: 1.75rem auto; } + .modal-dialog-scrollable { + max-height: calc(100% - 3.5rem); } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 3.5rem); } .modal-dialog-centered { - min-height: calc(100% - (1.75rem * 2)); } + min-height: calc(100% - 3.5rem); } .modal-dialog-centered::before { - height: calc(100vh - (1.75rem * 2)); } + height: calc(100vh - 3.5rem); } .modal-sm { max-width: 300px; } } @media (min-width: 992px) { - .modal-lg { + .modal-lg, + .modal-xl { max-width: 800px; } } +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; } } + .tooltip { position: absolute; z-index: 1070; display: block; margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; @@ -4145,7 +4437,7 @@ button.close { z-index: 1060; display: block; max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; @@ -4180,57 +4472,45 @@ button.close { .bs-popover-top, .bs-popover-auto[x-placement^="top"] { margin-bottom: 0.5rem; } - .bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { + .bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { bottom: calc((0.5rem + 1px) * -1); } - .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, - .bs-popover-top .arrow::after, - .bs-popover-auto[x-placement^="top"] .arrow::after { - border-width: 0.5rem 0.5rem 0; } - .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before { - bottom: 0; - border-top-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-top .arrow::after, - .bs-popover-auto[x-placement^="top"] .arrow::after { - bottom: 1px; - border-top-color: #fff; } + .bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); } + .bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; } .bs-popover-right, .bs-popover-auto[x-placement^="right"] { margin-left: 0.5rem; } - .bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { + .bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { left: calc((0.5rem + 1px) * -1); width: 0.5rem; height: 1rem; margin: 0.3rem 0; } - .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, - .bs-popover-right .arrow::after, - .bs-popover-auto[x-placement^="right"] .arrow::after { - border-width: 0.5rem 0.5rem 0.5rem 0; } - .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before { - left: 0; - border-right-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-right .arrow::after, - .bs-popover-auto[x-placement^="right"] .arrow::after { - left: 1px; - border-right-color: #fff; } + .bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); } + .bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; } .bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { margin-top: 0.5rem; } - .bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { + .bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { top: calc((0.5rem + 1px) * -1); } - .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, - .bs-popover-bottom .arrow::after, - .bs-popover-auto[x-placement^="bottom"] .arrow::after { - border-width: 0 0.5rem 0.5rem 0.5rem; } - .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before { - top: 0; - border-bottom-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-bottom .arrow::after, - .bs-popover-auto[x-placement^="bottom"] .arrow::after { - top: 1px; - border-bottom-color: #fff; } + .bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); } + .bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; } .bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { position: absolute; top: 0; @@ -4243,29 +4523,24 @@ button.close { .bs-popover-left, .bs-popover-auto[x-placement^="left"] { margin-right: 0.5rem; } - .bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { + .bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { right: calc((0.5rem + 1px) * -1); width: 0.5rem; height: 1rem; margin: 0.3rem 0; } - .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, - .bs-popover-left .arrow::after, - .bs-popover-auto[x-placement^="left"] .arrow::after { - border-width: 0.5rem 0 0.5rem 0.5rem; } - .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before { - right: 0; - border-left-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-left .arrow::after, - .bs-popover-auto[x-placement^="left"] .arrow::after { - right: 1px; - border-left-color: #fff; } + .bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); } + .bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; } .popover-header { padding: 0.5rem 0.75rem; margin-bottom: 0; font-size: 1rem; - color: inherit; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-top-left-radius: calc(0.3rem - 1px); @@ -4280,106 +4555,89 @@ button.close { .carousel { position: relative; } +.carousel.pointer-event { + touch-action: pan-y; } + .carousel-inner { position: relative; width: 100%; overflow: hidden; } + .carousel-inner::after { + display: block; + clear: both; + content: ""; } .carousel-item { position: relative; display: none; - align-items: center; + float: left; width: 100%; + margin-right: -100%; backface-visibility: hidden; - perspective: 1000px; } + transition: transform 0.6s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; } } .carousel-item.active, .carousel-item-next, .carousel-item-prev { - display: block; - transition: transform 0.6s ease; } - @media screen and (prefers-reduced-motion: reduce) { - .carousel-item.active, - .carousel-item-next, - .carousel-item-prev { - transition: none; } } + display: block; } -.carousel-item-next, -.carousel-item-prev { - position: absolute; - top: 0; } - -.carousel-item-next.carousel-item-left, -.carousel-item-prev.carousel-item-right { - transform: translateX(0); } - @supports (transform-style: preserve-3d) { - .carousel-item-next.carousel-item-left, - .carousel-item-prev.carousel-item-right { - transform: translate3d(0, 0, 0); } } - -.carousel-item-next, +.carousel-item-next:not(.carousel-item-left), .active.carousel-item-right { transform: translateX(100%); } - @supports (transform-style: preserve-3d) { - .carousel-item-next, - .active.carousel-item-right { - transform: translate3d(100%, 0, 0); } } -.carousel-item-prev, +.carousel-item-prev:not(.carousel-item-right), .active.carousel-item-left { transform: translateX(-100%); } - @supports (transform-style: preserve-3d) { - .carousel-item-prev, - .active.carousel-item-left { - transform: translate3d(-100%, 0, 0); } } .carousel-fade .carousel-item { opacity: 0; - transition-duration: .6s; - transition-property: opacity; } + transition-property: opacity; + transform: none; } .carousel-fade .carousel-item.active, .carousel-fade .carousel-item-next.carousel-item-left, .carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; opacity: 1; } .carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-right { - opacity: 0; } - -.carousel-fade .carousel-item-next, -.carousel-fade .carousel-item-prev, -.carousel-fade .carousel-item.active, -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-prev { - transform: translateX(0); } - @supports (transform-style: preserve-3d) { - .carousel-fade .carousel-item-next, - .carousel-fade .carousel-item-prev, - .carousel-fade .carousel-item.active, + z-index: 0; + opacity: 0; + transition: 0s 0.6s opacity; } + @media (prefers-reduced-motion: reduce) { .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-prev { - transform: translate3d(0, 0, 0); } } + .carousel-fade .active.carousel-item-right { + transition: none; } } .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; + z-index: 1; display: flex; align-items: center; justify-content: center; width: 15%; color: #fff; text-align: center; - opacity: 0.5; } + opacity: 0.5; + transition: opacity 0.15s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; } } .carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus { color: #fff; text-decoration: none; outline: 0; - opacity: .9; } + opacity: 0.9; } .carousel-control-prev { left: 0; } @@ -4392,19 +4650,18 @@ button.close { display: inline-block; width: 20px; height: 20px; - background: transparent no-repeat center center; - background-size: 100% 100%; } + background: no-repeat 50% / 100% 100%; } .carousel-control-prev-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); } .carousel-control-next-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); } .carousel-indicators { position: absolute; right: 0; - bottom: 10px; + bottom: 0; left: 0; z-index: 15; display: flex; @@ -4414,7 +4671,7 @@ button.close { margin-left: 15%; list-style: none; } .carousel-indicators li { - position: relative; + box-sizing: content-box; flex: 0 1 auto; width: 30px; height: 3px; @@ -4422,25 +4679,17 @@ button.close { margin-left: 3px; text-indent: -999px; cursor: pointer; - background-color: rgba(255, 255, 255, 0.5); } - .carousel-indicators li::before { - position: absolute; - top: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; } - .carousel-indicators li::after { - position: absolute; - bottom: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; } + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + transition: opacity 0.6s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + transition: none; } } .carousel-indicators .active { - background-color: #fff; } + opacity: 1; } .carousel-caption { position: absolute; @@ -4453,6 +4702,45 @@ button.close { color: #fff; text-align: center; } +@keyframes spinner-border { + to { + transform: rotate(360deg); } } + +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + animation: spinner-border .75s linear infinite; } + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; } + +@keyframes spinner-grow { + 0% { + transform: scale(0); } + 50% { + opacity: 1; } } + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + animation: spinner-grow .75s linear infinite; } + +.spinner-grow-sm { + width: 1rem; + height: 1rem; } + .align-baseline { vertical-align: baseline !important; } @@ -4632,6 +4920,9 @@ button.bg-error:focus { .border-white { border-color: #fff !important; } +.rounded-sm { + border-radius: 0.2rem !important; } + .rounded { border-radius: 0.25rem !important; } @@ -4651,9 +4942,15 @@ button.bg-error:focus { border-top-left-radius: 0.25rem !important; border-bottom-left-radius: 0.25rem !important; } +.rounded-lg { + border-radius: 0.3rem !important; } + .rounded-circle { border-radius: 50% !important; } +.rounded-pill { + border-radius: 50rem !important; } + .rounded-0 { border-radius: 0 !important; } @@ -4823,6 +5120,18 @@ button.bg-error:focus { .embed-responsive-1by1::before { padding-top: 100%; } +.embed-responsive-21by9::before { + padding-top: 42.85714%; } + +.embed-responsive-16by9::before { + padding-top: 56.25%; } + +.embed-responsive-4by3::before { + padding-top: 75%; } + +.embed-responsive-1by1::before { + padding-top: 100%; } + .flex-row { flex-direction: row !important; } @@ -5246,6 +5555,12 @@ button.bg-error:focus { .float-xl-none { float: none !important; } } +.overflow-auto { + overflow: auto !important; } + +.overflow-hidden { + overflow: hidden !important; } + .position-static { position: static !important; } @@ -5347,6 +5662,29 @@ button.bg-error:focus { .mh-100 { max-height: 100% !important; } +.min-vw-100 { + min-width: 100vw !important; } + +.min-vh-100 { + min-height: 100vh !important; } + +.vw-100 { + width: 100vw !important; } + +.vh-100 { + height: 100vh !important; } + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + pointer-events: auto; + content: ""; + background-color: rgba(0, 0, 0, 0); } + .m-0 { margin: 0 !important; } @@ -5575,6 +5913,101 @@ button.bg-error:focus { .px-5 { padding-left: 3rem !important; } +.m-n1 { + margin: -0.25rem !important; } + +.mt-n1, +.my-n1 { + margin-top: -0.25rem !important; } + +.mr-n1, +.mx-n1 { + margin-right: -0.25rem !important; } + +.mb-n1, +.my-n1 { + margin-bottom: -0.25rem !important; } + +.ml-n1, +.mx-n1 { + margin-left: -0.25rem !important; } + +.m-n2 { + margin: -0.5rem !important; } + +.mt-n2, +.my-n2 { + margin-top: -0.5rem !important; } + +.mr-n2, +.mx-n2 { + margin-right: -0.5rem !important; } + +.mb-n2, +.my-n2 { + margin-bottom: -0.5rem !important; } + +.ml-n2, +.mx-n2 { + margin-left: -0.5rem !important; } + +.m-n3 { + margin: -1rem !important; } + +.mt-n3, +.my-n3 { + margin-top: -1rem !important; } + +.mr-n3, +.mx-n3 { + margin-right: -1rem !important; } + +.mb-n3, +.my-n3 { + margin-bottom: -1rem !important; } + +.ml-n3, +.mx-n3 { + margin-left: -1rem !important; } + +.m-n4 { + margin: -1.5rem !important; } + +.mt-n4, +.my-n4 { + margin-top: -1.5rem !important; } + +.mr-n4, +.mx-n4 { + margin-right: -1.5rem !important; } + +.mb-n4, +.my-n4 { + margin-bottom: -1.5rem !important; } + +.ml-n4, +.mx-n4 { + margin-left: -1.5rem !important; } + +.m-n5 { + margin: -3rem !important; } + +.mt-n5, +.my-n5 { + margin-top: -3rem !important; } + +.mr-n5, +.mx-n5 { + margin-right: -3rem !important; } + +.mb-n5, +.my-n5 { + margin-bottom: -3rem !important; } + +.ml-n5, +.mx-n5 { + margin-left: -3rem !important; } + .m-auto { margin: auto !important; } @@ -5763,6 +6196,76 @@ button.bg-error:focus { .pl-sm-5, .px-sm-5 { padding-left: 3rem !important; } + .m-sm-n1 { + margin: -0.25rem !important; } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; } + .m-sm-n2 { + margin: -0.5rem !important; } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; } + .m-sm-n3 { + margin: -1rem !important; } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; } + .m-sm-n4 { + margin: -1.5rem !important; } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; } + .m-sm-n5 { + margin: -3rem !important; } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; } .m-sm-auto { margin: auto !important; } .mt-sm-auto, @@ -5947,6 +6450,76 @@ button.bg-error:focus { .pl-md-5, .px-md-5 { padding-left: 3rem !important; } + .m-md-n1 { + margin: -0.25rem !important; } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; } + .m-md-n2 { + margin: -0.5rem !important; } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; } + .m-md-n3 { + margin: -1rem !important; } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; } + .m-md-n4 { + margin: -1.5rem !important; } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; } + .m-md-n5 { + margin: -3rem !important; } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; } .m-md-auto { margin: auto !important; } .mt-md-auto, @@ -6131,6 +6704,76 @@ button.bg-error:focus { .pl-lg-5, .px-lg-5 { padding-left: 3rem !important; } + .m-lg-n1 { + margin: -0.25rem !important; } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; } + .m-lg-n2 { + margin: -0.5rem !important; } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; } + .m-lg-n3 { + margin: -1rem !important; } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; } + .m-lg-n4 { + margin: -1.5rem !important; } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; } + .m-lg-n5 { + margin: -3rem !important; } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; } .m-lg-auto { margin: auto !important; } .mt-lg-auto, @@ -6315,6 +6958,76 @@ button.bg-error:focus { .pl-xl-5, .px-xl-5 { padding-left: 3rem !important; } + .m-xl-n1 { + margin: -0.25rem !important; } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; } + .m-xl-n2 { + margin: -0.5rem !important; } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; } + .m-xl-n3 { + margin: -1rem !important; } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; } + .m-xl-n4 { + margin: -1.5rem !important; } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; } + .m-xl-n5 { + margin: -3rem !important; } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; } .m-xl-auto { margin: auto !important; } .mt-xl-auto, @@ -6331,11 +7044,14 @@ button.bg-error:focus { margin-left: auto !important; } } .text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; } .text-justify { text-align: justify !important; } +.text-wrap { + white-space: normal !important; } + .text-nowrap { white-space: nowrap !important; } @@ -6397,12 +7113,18 @@ button.bg-error:focus { .font-weight-light { font-weight: 300 !important; } +.font-weight-lighter { + font-weight: lighter !important; } + .font-weight-normal { font-weight: 400 !important; } .font-weight-bold { font-weight: 700 !important; } +.font-weight-bolder { + font-weight: bolder !important; } + .font-italic { font-style: italic !important; } @@ -6413,61 +7135,61 @@ button.bg-error:focus { color: #226f97 !important; } a.text-primary:hover, .card-feeding a.card-body:hover, a.text-primary:focus, .card-feeding a.card-body:focus { - color: #19506d !important; } + color: #144159 !important; } .text-secondary { color: #ff8f00 !important; } a.text-secondary:hover, a.text-secondary:focus { - color: #cc7200 !important; } + color: #b36400 !important; } .text-success, .card-tummytime .card-body { color: #239556 !important; } a.text-success:hover, .card-tummytime a.card-body:hover, a.text-success:focus, .card-tummytime a.card-body:focus { - color: #196c3e !important; } + color: #145732 !important; } .text-info { color: #15b2d3 !important; } a.text-info:hover, a.text-info:focus { - color: #108ba5 !important; } + color: #0e778d !important; } .text-warning { color: #ffbe42 !important; } a.text-warning:hover, a.text-warning:focus { - color: #ffac0f !important; } + color: #f5a000 !important; } .text-danger, .card-diaperchange .card-body { color: #a72431 !important; } a.text-danger:hover, .card-diaperchange a.card-body:hover, a.text-danger:focus, .card-diaperchange a.card-body:focus { - color: #7d1b25 !important; } + color: #68161f !important; } .text-light, .card-statistics .card-body, .card-timer .card-body { color: #f8f9fa !important; } a.text-light:hover, .card-statistics a.card-body:hover, .card-timer a.card-body:hover, a.text-light:focus, .card-statistics a.card-body:focus, .card-timer a.card-body:focus { - color: #dae0e5 !important; } + color: #cbd3da !important; } .text-dark, .card-statistics .card-header, .card-timer .card-header { color: #343a40 !important; } a.text-dark:hover, .card-statistics a.card-header:hover, .card-timer a.card-header:hover, a.text-dark:focus, .card-statistics a.card-header:focus, .card-timer a.card-header:focus { - color: #1d2124 !important; } + color: #121416 !important; } .text-debug { color: #15b2d3 !important; } a.text-debug:hover, a.text-debug:focus { - color: #108ba5 !important; } + color: #0e778d !important; } .text-error { color: #a72431 !important; } a.text-error:hover, a.text-error:focus { - color: #7d1b25 !important; } + color: #68161f !important; } .text-body { color: #ced4da !important; } @@ -6488,6 +7210,16 @@ a.text-error:hover, a.text-error:focus { background-color: transparent; border: 0; } +.text-decoration-none { + text-decoration: none !important; } + +.text-break { + word-break: break-word !important; + overflow-wrap: break-word !important; } + +.text-reset { + color: inherit !important; } + .visible { visibility: visible !important; } diff --git a/static/babybuddy/css/app.7e0588ab9c78.css.gz b/static/babybuddy/css/app.7e0588ab9c78.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..53534e55bde9a6754760c5302923f06a8d8c321f GIT binary patch literal 34709 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 P^_cu03qM#cw|D~p7#L>Y literal 0 HcmV?d00001 diff --git a/static/babybuddy/css/app.b82863a2a4d6.css.gz b/static/babybuddy/css/app.b82863a2a4d6.css.gz deleted file mode 100644 index e63197446b14ccc1e001a89ccacf3e5c061f0c19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32294 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 diff --git a/static/babybuddy/css/app.css b/static/babybuddy/css/app.css index da39070a..4ad5abc8 100644 --- a/static/babybuddy/css/app.css +++ b/static/babybuddy/css/app.css @@ -21,9 +21,9 @@ border-color: inherit; } /*! - * Bootstrap v4.1.3 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ :root { @@ -55,7 +55,7 @@ --breakpoint-md: 768px; --breakpoint-lg: 992px; --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } *, @@ -67,19 +67,14 @@ html { font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -ms-overflow-style: scrollbar; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } -@-ms-viewport { - width: device-width; } - article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; line-height: 1.5; @@ -108,7 +103,8 @@ abbr[data-original-title] { text-decoration: underline; text-decoration: underline dotted; cursor: help; - border-bottom: 0; } + border-bottom: 0; + text-decoration-skip-ink: none; } address { margin-bottom: 1rem; @@ -137,9 +133,6 @@ dd { blockquote { margin: 0 0 1rem; } -dfn { - font-style: italic; } - b, strong { font-weight: bolder; } @@ -163,8 +156,7 @@ sup { a { color: #15b2d3; text-decoration: none; - background-color: transparent; - -webkit-text-decoration-skip: objects; } + background-color: transparent; } a:hover { color: #0e778d; text-decoration: underline; } @@ -188,8 +180,7 @@ samp { pre { margin-top: 0; margin-bottom: 1rem; - overflow: auto; - -ms-overflow-style: scrollbar; } + overflow: auto; } figure { margin: 0 0 1rem; } @@ -244,12 +235,21 @@ button, select { text-transform: none; } +select { + word-wrap: normal; } + button, -html [type="button"], +[type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), +[type="submit"]:not(:disabled) { + cursor: pointer; } + button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, @@ -300,7 +300,6 @@ progress { outline-offset: -2px; -webkit-appearance: none; } -[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } @@ -324,10 +323,8 @@ template { h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .card-dashboard .card-header, .card-dashboard .card-body .card-title, .h5, .h6 { margin-bottom: 0.5rem; - font-family: inherit; font-weight: 500; - line-height: 1.2; - color: inherit; } + line-height: 1.2; } h1, .h1 { font-size: 2.5rem; } @@ -413,7 +410,7 @@ mark, font-size: 80%; color: #6c757d; } .blockquote-footer::before { - content: "\2014 \00A0"; } + content: "\2014\00A0"; } .img-fluid { max-width: 100%; @@ -517,7 +514,6 @@ pre { .col-xl-auto { position: relative; width: 100%; - min-height: 1px; padding-right: 15px; padding-left: 15px; } @@ -529,7 +525,7 @@ pre { .col-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-1 { flex: 0 0 8.33333%; @@ -665,7 +661,7 @@ pre { .col-sm-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-sm-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -765,7 +761,7 @@ pre { .col-md-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-md-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -865,7 +861,7 @@ pre { .col-lg-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-lg-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -965,7 +961,7 @@ pre { .col-xl-auto { flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; } .col-xl-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } @@ -1060,7 +1056,7 @@ pre { .table { width: 100%; margin-bottom: 1rem; - background-color: transparent; } + color: #212529; } .table th, .table td { padding: 0.75rem; @@ -1071,8 +1067,6 @@ pre { border-bottom: 2px solid #343a40; } .table tbody + tbody { border-top: 2px solid #343a40; } - .table .table { - background-color: #212529; } .table-sm th, .table-sm td { @@ -1097,6 +1091,7 @@ pre { background-color: rgba(34, 111, 151, 0.1); } .table-hover tbody tr:hover { + color: #212529; background-color: rgba(0, 0, 0, 0.075); } .table-primary, @@ -1104,6 +1099,12 @@ pre { .table-primary > td { background-color: #c1d7e2; } +.table-primary th, +.table-primary td, +.table-primary thead th, +.table-primary tbody + tbody { + border-color: #8cb4c9; } + .table-hover .table-primary:hover { background-color: #b0ccda; } .table-hover .table-primary:hover > td, @@ -1115,6 +1116,12 @@ pre { .table-secondary > td { background-color: #ffe0b8; } +.table-secondary th, +.table-secondary td, +.table-secondary thead th, +.table-secondary tbody + tbody { + border-color: #ffc57a; } + .table-hover .table-secondary:hover { background-color: #ffd59f; } .table-hover .table-secondary:hover > td, @@ -1126,6 +1133,12 @@ pre { .table-success > td { background-color: #c1e1d0; } +.table-success th, +.table-success td, +.table-success thead th, +.table-success tbody + tbody { + border-color: #8dc8a7; } + .table-hover .table-success:hover { background-color: #b0d9c3; } .table-hover .table-success:hover > td, @@ -1137,6 +1150,12 @@ pre { .table-info > td { background-color: #bde9f3; } +.table-info th, +.table-info td, +.table-info thead th, +.table-info tbody + tbody { + border-color: #85d7e8; } + .table-hover .table-info:hover { background-color: #a7e2ef; } .table-hover .table-info:hover > td, @@ -1148,6 +1167,12 @@ pre { .table-warning > td { background-color: #ffedca; } +.table-warning th, +.table-warning td, +.table-warning thead th, +.table-warning tbody + tbody { + border-color: #ffdd9d; } + .table-hover .table-warning:hover { background-color: #ffe4b1; } .table-hover .table-warning:hover > td, @@ -1159,6 +1184,12 @@ pre { .table-danger > td { background-color: #e6c2c5; } +.table-danger th, +.table-danger td, +.table-danger thead th, +.table-danger tbody + tbody { + border-color: #d18d94; } + .table-hover .table-danger:hover { background-color: #dfb0b4; } .table-hover .table-danger:hover > td, @@ -1170,6 +1201,12 @@ pre { .table-light > td { background-color: #fdfdfe; } +.table-light th, +.table-light td, +.table-light thead th, +.table-light tbody + tbody { + border-color: #fbfcfc; } + .table-hover .table-light:hover { background-color: #ececf6; } .table-hover .table-light:hover > td, @@ -1181,6 +1218,12 @@ pre { .table-dark > td { background-color: #c6c8ca; } +.table-dark th, +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { + border-color: #95999c; } + .table-hover .table-dark:hover { background-color: #b9bbbe; } .table-hover .table-dark:hover > td, @@ -1192,6 +1235,12 @@ pre { .table-debug > td { background-color: #bde9f3; } +.table-debug th, +.table-debug td, +.table-debug thead th, +.table-debug tbody + tbody { + border-color: #85d7e8; } + .table-hover .table-debug:hover { background-color: #a7e2ef; } .table-hover .table-debug:hover > td, @@ -1203,6 +1252,12 @@ pre { .table-error > td { background-color: #e6c2c5; } +.table-error th, +.table-error td, +.table-error thead th, +.table-error tbody + tbody { + border-color: #d18d94; } + .table-hover .table-error:hover { background-color: #dfb0b4; } .table-hover .table-error:hover > td, @@ -1222,8 +1277,8 @@ pre { .table .thead-dark th { color: #fff; - background-color: #212529; - border-color: #32383e; } + background-color: #343a40; + border-color: #454d55; } .table .thead-light th { color: #495057; @@ -1232,16 +1287,17 @@ pre { .table-dark { color: #fff; - background-color: #212529; } + background-color: #343a40; } .table-dark th, .table-dark td, .table-dark thead th { - border-color: #32383e; } + border-color: #454d55; } .table-dark.table-bordered { border: 0; } .table-dark.table-striped tbody tr:nth-of-type(odd) { background-color: rgba(255, 255, 255, 0.05); } .table-dark.table-hover tbody tr:hover { + color: #fff; background-color: rgba(255, 255, 255, 0.075); } @media (max-width: 575.98px) { @@ -1249,8 +1305,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-sm > .table-bordered { border: 0; } } @@ -1259,8 +1314,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-md > .table-bordered { border: 0; } } @@ -1269,8 +1323,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-lg > .table-bordered { border: 0; } } @@ -1279,8 +1332,7 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive-xl > .table-bordered { border: 0; } } @@ -1288,17 +1340,17 @@ pre { display: block; width: 100%; overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } + -webkit-overflow-scrolling: touch; } .table-responsive > .table-bordered { border: 0; } .form-control { display: block; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; font-size: 1rem; + font-weight: 400; line-height: 1.5; color: #000; background-color: #fff; @@ -1306,7 +1358,7 @@ pre { border: 1px solid rgba(108, 117, 125, 0.15); border-radius: 0.25rem; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .form-control { transition: none; } } .form-control::-ms-expand { @@ -1369,14 +1421,14 @@ select.form-control:focus::-ms-value { padding-left: 0; } .form-control-sm { - height: calc(1.8125rem + 2px); + height: calc(1.5em + 0.5rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } .form-control-lg { - height: calc(2.875rem + 2px); + height: calc(1.5em + 1rem + 2px); padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; @@ -1452,22 +1504,34 @@ textarea.form-control { background-color: rgba(40, 167, 69, 0.9); border-radius: 0.25rem; } -.was-validated .form-control:valid, .form-control.is-valid, .was-validated -.custom-select:valid, -.custom-select.is-valid { - border-color: #28a745; } - .was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated - .custom-select:valid:focus, - .custom-select.is-valid:focus { +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #28a745; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:valid:focus, .form-control.is-valid:focus { border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .was-validated .form-control:valid ~ .valid-feedback, .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, - .form-control.is-valid ~ .valid-tooltip, .was-validated - .custom-select:valid ~ .valid-feedback, - .was-validated - .custom-select:valid ~ .valid-tooltip, - .custom-select.is-valid ~ .valid-feedback, + .form-control.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .custom-select:valid, .custom-select.is-valid { + border-color: #28a745; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + .was-validated .custom-select:valid ~ .valid-feedback, + .was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, .custom-select.is-valid ~ .valid-tooltip { display: block; } @@ -1487,7 +1551,7 @@ textarea.form-control { .was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { color: #28a745; } .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { - background-color: #71dd8a; } + border-color: #28a745; } .was-validated .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, @@ -1495,15 +1559,17 @@ textarea.form-control { display: block; } .was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #34ce57; background-color: #34ce57; } .was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #212529, 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } + +.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #28a745; } .was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { border-color: #28a745; } - .was-validated .custom-file-input:valid ~ .custom-file-label::after, .custom-file-input.is-valid ~ .custom-file-label::after { - border-color: inherit; } .was-validated .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, @@ -1511,6 +1577,7 @@ textarea.form-control { display: block; } .was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #28a745; box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .invalid-feedback { @@ -1534,22 +1601,34 @@ textarea.form-control { background-color: rgba(220, 53, 69, 0.9); border-radius: 0.25rem; } -.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated -.custom-select:invalid, -.custom-select.is-invalid { - border-color: #dc3545; } - .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated - .custom-select:invalid:focus, - .custom-select.is-invalid:focus { +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .was-validated .form-control:invalid ~ .invalid-feedback, .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, - .form-control.is-invalid ~ .invalid-tooltip, .was-validated - .custom-select:invalid ~ .invalid-feedback, - .was-validated - .custom-select:invalid ~ .invalid-tooltip, - .custom-select.is-invalid ~ .invalid-feedback, + .form-control.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .custom-select:invalid, .custom-select.is-invalid { + border-color: #dc3545; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + .was-validated .custom-select:invalid ~ .invalid-feedback, + .was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, .custom-select.is-invalid ~ .invalid-tooltip { display: block; } @@ -1569,7 +1648,7 @@ textarea.form-control { .was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { color: #dc3545; } .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { - background-color: #efa2a9; } + border-color: #dc3545; } .was-validated .custom-control-input:invalid ~ .invalid-feedback, .was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, @@ -1577,15 +1656,17 @@ textarea.form-control { display: block; } .was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #e4606d; background-color: #e4606d; } .was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #212529, 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } + +.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #dc3545; } .was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { border-color: #dc3545; } - .was-validated .custom-file-input:invalid ~ .custom-file-label::after, .custom-file-input.is-invalid ~ .custom-file-label::after { - border-color: inherit; } .was-validated .custom-file-input:invalid ~ .invalid-feedback, .was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, @@ -1593,6 +1674,7 @@ textarea.form-control { display: block; } .was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .form-inline { @@ -1630,6 +1712,7 @@ textarea.form-control { padding-left: 0; } .form-inline .form-check-input { position: relative; + flex-shrink: 0; margin-top: 0; margin-right: 0.25rem; margin-left: 0; } @@ -1642,28 +1725,28 @@ textarea.form-control { .btn { display: inline-block; font-weight: 400; + color: #ced4da; text-align: center; - white-space: nowrap; vertical-align: middle; user-select: none; + background-color: transparent; border: 1px solid transparent; padding: 0.375rem 0.75rem; font-size: 1rem; line-height: 1.5; border-radius: 0.25rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .btn { transition: none; } } - .btn:hover, .btn:focus { + .btn:hover { + color: #ced4da; text-decoration: none; } .btn:focus, .btn.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .btn.disabled, .btn:disabled { opacity: 0.65; } - .btn:not(:disabled):not(.disabled) { - cursor: pointer; } a.btn.disabled, fieldset:disabled a.btn { @@ -1678,7 +1761,7 @@ fieldset:disabled a.btn { background-color: #1b5878; border-color: #19506d; } .btn-primary:focus, .btn-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(34, 111, 151, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(67, 133, 167, 0.5); } .btn-primary.disabled, .btn-primary:disabled { color: #fff; background-color: #226f97; @@ -1690,7 +1773,7 @@ fieldset:disabled a.btn { border-color: #164963; } .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(34, 111, 151, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(67, 133, 167, 0.5); } .btn-secondary { color: #212529; @@ -1701,7 +1784,7 @@ fieldset:disabled a.btn { background-color: #d97a00; border-color: #cc7200; } .btn-secondary:focus, .btn-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 143, 0, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 127, 6, 0.5); } .btn-secondary.disabled, .btn-secondary:disabled { color: #212529; background-color: #ff8f00; @@ -1713,7 +1796,7 @@ fieldset:disabled a.btn { border-color: #bf6b00; } .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 143, 0, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 127, 6, 0.5); } .btn-success { color: #fff; @@ -1724,7 +1807,7 @@ fieldset:disabled a.btn { background-color: #1c7644; border-color: #196c3e; } .btn-success:focus, .btn-success.focus { - box-shadow: 0 0 0 0.2rem rgba(35, 149, 86, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(68, 165, 111, 0.5); } .btn-success.disabled, .btn-success:disabled { color: #fff; background-color: #239556; @@ -1736,7 +1819,7 @@ fieldset:disabled a.btn { border-color: #176138; } .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, .show > .btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(35, 149, 86, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(68, 165, 111, 0.5); } .btn-info { color: #fff; @@ -1747,7 +1830,7 @@ fieldset:disabled a.btn { background-color: #1295b0; border-color: #108ba5; } .btn-info:focus, .btn-info.focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-info.disabled, .btn-info:disabled { color: #fff; background-color: #15b2d3; @@ -1759,7 +1842,7 @@ fieldset:disabled a.btn { border-color: #0f8199; } .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, .show > .btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-warning { color: #212529; @@ -1770,7 +1853,7 @@ fieldset:disabled a.btn { background-color: #ffb11c; border-color: #ffac0f; } .btn-warning:focus, .btn-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 190, 66, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 167, 62, 0.5); } .btn-warning.disabled, .btn-warning:disabled { color: #212529; background-color: #ffbe42; @@ -1782,7 +1865,7 @@ fieldset:disabled a.btn { border-color: #ffa802; } .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 190, 66, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(222, 167, 62, 0.5); } .btn-danger { color: #fff; @@ -1793,7 +1876,7 @@ fieldset:disabled a.btn { background-color: #881d28; border-color: #7d1b25; } .btn-danger:focus, .btn-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-danger.disabled, .btn-danger:disabled { color: #fff; background-color: #a72431; @@ -1805,7 +1888,7 @@ fieldset:disabled a.btn { border-color: #731922; } .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-light { color: #212529; @@ -1816,7 +1899,7 @@ fieldset:disabled a.btn { background-color: #e2e6ea; border-color: #dae0e5; } .btn-light:focus, .btn-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } .btn-light.disabled, .btn-light:disabled { color: #212529; background-color: #f8f9fa; @@ -1828,7 +1911,7 @@ fieldset:disabled a.btn { border-color: #d3d9df; } .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, .show > .btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); } .btn-dark { color: #fff; @@ -1839,7 +1922,7 @@ fieldset:disabled a.btn { background-color: #23272b; border-color: #1d2124; } .btn-dark:focus, .btn-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } .btn-dark.disabled, .btn-dark:disabled { color: #fff; background-color: #343a40; @@ -1851,7 +1934,7 @@ fieldset:disabled a.btn { border-color: #171a1d; } .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } .btn-debug { color: #fff; @@ -1862,7 +1945,7 @@ fieldset:disabled a.btn { background-color: #1295b0; border-color: #108ba5; } .btn-debug:focus, .btn-debug.focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-debug.disabled, .btn-debug:disabled { color: #fff; background-color: #15b2d3; @@ -1874,7 +1957,7 @@ fieldset:disabled a.btn { border-color: #0f8199; } .btn-debug:not(:disabled):not(.disabled):active:focus, .btn-debug:not(:disabled):not(.disabled).active:focus, .show > .btn-debug.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(56, 190, 218, 0.5); } .btn-error { color: #fff; @@ -1885,7 +1968,7 @@ fieldset:disabled a.btn { background-color: #881d28; border-color: #7d1b25; } .btn-error:focus, .btn-error.focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-error.disabled, .btn-error:disabled { color: #fff; background-color: #a72431; @@ -1897,12 +1980,10 @@ fieldset:disabled a.btn { border-color: #731922; } .btn-error:not(:disabled):not(.disabled):active:focus, .btn-error:not(:disabled):not(.disabled).active:focus, .show > .btn-error.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(180, 69, 80, 0.5); } .btn-outline-primary { color: #226f97; - background-color: transparent; - background-image: none; border-color: #226f97; } .btn-outline-primary:hover { color: #fff; @@ -1924,8 +2005,6 @@ fieldset:disabled a.btn { .btn-outline-secondary { color: #ff8f00; - background-color: transparent; - background-image: none; border-color: #ff8f00; } .btn-outline-secondary:hover { color: #212529; @@ -1947,8 +2026,6 @@ fieldset:disabled a.btn { .btn-outline-success { color: #239556; - background-color: transparent; - background-image: none; border-color: #239556; } .btn-outline-success:hover { color: #fff; @@ -1970,8 +2047,6 @@ fieldset:disabled a.btn { .btn-outline-info { color: #15b2d3; - background-color: transparent; - background-image: none; border-color: #15b2d3; } .btn-outline-info:hover { color: #fff; @@ -1993,8 +2068,6 @@ fieldset:disabled a.btn { .btn-outline-warning { color: #ffbe42; - background-color: transparent; - background-image: none; border-color: #ffbe42; } .btn-outline-warning:hover { color: #212529; @@ -2016,8 +2089,6 @@ fieldset:disabled a.btn { .btn-outline-danger { color: #a72431; - background-color: transparent; - background-image: none; border-color: #a72431; } .btn-outline-danger:hover { color: #fff; @@ -2039,8 +2110,6 @@ fieldset:disabled a.btn { .btn-outline-light { color: #f8f9fa; - background-color: transparent; - background-image: none; border-color: #f8f9fa; } .btn-outline-light:hover { color: #212529; @@ -2062,8 +2131,6 @@ fieldset:disabled a.btn { .btn-outline-dark { color: #343a40; - background-color: transparent; - background-image: none; border-color: #343a40; } .btn-outline-dark:hover { color: #fff; @@ -2085,8 +2152,6 @@ fieldset:disabled a.btn { .btn-outline-debug { color: #15b2d3; - background-color: transparent; - background-image: none; border-color: #15b2d3; } .btn-outline-debug:hover { color: #fff; @@ -2108,8 +2173,6 @@ fieldset:disabled a.btn { .btn-outline-error { color: #a72431; - background-color: transparent; - background-image: none; border-color: #a72431; } .btn-outline-error:hover { color: #fff; @@ -2132,15 +2195,12 @@ fieldset:disabled a.btn { .btn-link { font-weight: 400; color: #15b2d3; - background-color: transparent; } + text-decoration: none; } .btn-link:hover { color: #0e778d; - text-decoration: underline; - background-color: transparent; - border-color: transparent; } + text-decoration: underline; } .btn-link:focus, .btn-link.focus { text-decoration: underline; - border-color: transparent; box-shadow: none; } .btn-link:disabled, .btn-link.disabled { color: #6c757d; @@ -2171,7 +2231,7 @@ input[type="button"].btn-block { .fade { transition: opacity 0.15s linear; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .fade { transition: none; } } .fade:not(.show) { @@ -2185,7 +2245,7 @@ input[type="button"].btn-block { height: 0; overflow: hidden; transition: height 0.35s ease; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .collapsing { transition: none; } } @@ -2195,20 +2255,19 @@ input[type="button"].btn-block { .dropleft { position: relative; } -.dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; } - -.dropdown-toggle:empty::after { - margin-left: 0; } +.dropdown-toggle { + white-space: nowrap; } + .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; } + .dropdown-toggle:empty::after { + margin-left: 0; } .dropdown-menu { position: absolute; @@ -2221,7 +2280,7 @@ input[type="button"].btn-block { padding: 0.5rem 0; margin: 0.125rem 0 0; font-size: 1rem; - color: #ced4da; + color: #212529; text-align: left; list-style: none; background-color: #495057; @@ -2229,10 +2288,46 @@ input[type="button"].btn-block { border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } +.dropdown-menu-left { + right: auto; + left: 0; } + .dropdown-menu-right { right: 0; left: auto; } +@media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; } + .dropdown-menu-sm-right { + right: 0; + left: auto; } } + +@media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; } + .dropdown-menu-md-right { + right: 0; + left: auto; } } + +@media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; } + .dropdown-menu-lg-right { + right: 0; + left: auto; } } + +@media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; } + .dropdown-menu-xl-right { + right: 0; + left: auto; } } + .dropup .dropdown-menu { top: auto; bottom: 100%; @@ -2241,8 +2336,6 @@ input[type="button"].btn-block { .dropup .dropdown-toggle::after { display: inline-block; - width: 0; - height: 0; margin-left: 0.255em; vertical-align: 0.255em; content: ""; @@ -2263,8 +2356,6 @@ input[type="button"].btn-block { .dropright .dropdown-toggle::after { display: inline-block; - width: 0; - height: 0; margin-left: 0.255em; vertical-align: 0.255em; content: ""; @@ -2288,8 +2379,6 @@ input[type="button"].btn-block { .dropleft .dropdown-toggle::after { display: inline-block; - width: 0; - height: 0; margin-left: 0.255em; vertical-align: 0.255em; content: ""; } @@ -2299,8 +2388,6 @@ input[type="button"].btn-block { .dropleft .dropdown-toggle::before { display: inline-block; - width: 0; - height: 0; margin-right: 0.255em; vertical-align: 0.255em; content: ""; @@ -2345,6 +2432,7 @@ input[type="button"].btn-block { background-color: #226f97; } .dropdown-item.disabled, .dropdown-item:disabled { color: #6c757d; + pointer-events: none; background-color: transparent; } .dropdown-menu.show { @@ -2371,7 +2459,7 @@ input[type="button"].btn-block { .btn-group > .btn, .btn-group-vertical > .btn { position: relative; - flex: 0 1 auto; } + flex: 1 1 auto; } .btn-group > .btn:hover, .btn-group-vertical > .btn:hover { z-index: 1; } @@ -2380,15 +2468,6 @@ input[type="button"].btn-block { .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active { z-index: 1; } - .btn-group .btn + .btn, - .btn-group .btn + .btn-group, - .btn-group .btn-group + .btn, - .btn-group .btn-group + .btn-group, - .btn-group-vertical .btn + .btn, - .btn-group-vertical .btn + .btn-group, - .btn-group-vertical .btn-group + .btn, - .btn-group-vertical .btn-group + .btn-group { - margin-left: -1px; } .btn-toolbar { display: flex; @@ -2397,8 +2476,9 @@ input[type="button"].btn-block { .btn-toolbar .input-group { width: auto; } -.btn-group > .btn:first-child { - margin-left: 0; } +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; } .btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn-group:not(:last-child) > .btn { @@ -2432,15 +2512,12 @@ input[type="button"].btn-block { flex-direction: column; align-items: flex-start; justify-content: center; } - .btn-group-vertical .btn, - .btn-group-vertical .btn-group { + .btn-group-vertical > .btn, + .btn-group-vertical > .btn-group { width: 100%; } - .btn-group-vertical > .btn + .btn, - .btn-group-vertical > .btn + .btn-group, - .btn-group-vertical > .btn-group + .btn, - .btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; } + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; } .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; @@ -2468,6 +2545,7 @@ input[type="button"].btn-block { align-items: stretch; width: 100%; } .input-group > .form-control, + .input-group > .form-control-plaintext, .input-group > .custom-select, .input-group > .custom-file { position: relative; @@ -2477,6 +2555,9 @@ input[type="button"].btn-block { .input-group > .form-control + .form-control, .input-group > .form-control + .custom-select, .input-group > .form-control + .custom-file, + .input-group > .form-control-plaintext + .form-control, + .input-group > .form-control-plaintext + .custom-select, + .input-group > .form-control-plaintext + .custom-file, .input-group > .custom-select + .form-control, .input-group > .custom-select + .custom-select, .input-group > .custom-select + .custom-file, @@ -2516,6 +2597,9 @@ input[type="button"].btn-block { .input-group-append .btn { position: relative; z-index: 2; } + .input-group-prepend .btn:focus, + .input-group-append .btn:focus { + z-index: 3; } .input-group-prepend .btn + .btn, .input-group-prepend .btn + .input-group-text, .input-group-prepend .input-group-text + .input-group-text, @@ -2550,28 +2634,40 @@ input[type="button"].btn-block { .input-group-text input[type="checkbox"] { margin-top: 0; } +.input-group-lg > .form-control:not(textarea), +.input-group-lg > .custom-select { + height: calc(1.5em + 1rem + 2px); } + .input-group-lg > .form-control, +.input-group-lg > .custom-select, .input-group-lg > .input-group-prepend > .input-group-text, .input-group-lg > .input-group-append > .input-group-text, .input-group-lg > .input-group-prepend > .btn, .input-group-lg > .input-group-append > .btn { - height: calc(2.875rem + 2px); padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } +.input-group-sm > .form-control:not(textarea), +.input-group-sm > .custom-select { + height: calc(1.5em + 0.5rem + 2px); } + .input-group-sm > .form-control, +.input-group-sm > .custom-select, .input-group-sm > .input-group-prepend > .input-group-text, .input-group-sm > .input-group-append > .input-group-text, .input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-append > .btn { - height: calc(1.8125rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } +.input-group-lg > .custom-select, +.input-group-sm > .custom-select { + padding-right: 1.75rem; } + .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, .input-group > .input-group-append:not(:last-child) > .btn, @@ -2606,12 +2702,16 @@ input[type="button"].btn-block { opacity: 0; } .custom-control-input:checked ~ .custom-control-label::before { color: #fff; + border-color: #007bff; background-color: #007bff; } .custom-control-input:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } - .custom-control-input:active ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } + .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #80bdff; } + .custom-control-input:not(:disabled):active ~ .custom-control-label::before { color: #fff; - background-color: #b3d7ff; } + background-color: #b3d7ff; + border-color: #b3d7ff; } .custom-control-input:disabled ~ .custom-control-label { color: #6c757d; } .custom-control-input:disabled ~ .custom-control-label::before { @@ -2619,7 +2719,8 @@ input[type="button"].btn-block { .custom-control-label { position: relative; - margin-bottom: 0; } + margin-bottom: 0; + vertical-align: top; } .custom-control-label::before { position: absolute; top: 0.25rem; @@ -2629,8 +2730,8 @@ input[type="button"].btn-block { height: 1rem; pointer-events: none; content: ""; - user-select: none; - background-color: #dee2e6; } + background-color: #fff; + border: #adb5bd solid 1px; } .custom-control-label::after { position: absolute; top: 0.25rem; @@ -2639,24 +2740,20 @@ input[type="button"].btn-block { width: 1rem; height: 1rem; content: ""; - background-repeat: no-repeat; - background-position: center center; - background-size: 50% 50%; } + background: no-repeat 50% / 50% 50%; } .custom-checkbox .custom-control-label::before { border-radius: 0.25rem; } -.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before { - background-color: #007bff; } - .custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #007bff; background-color: #007bff; } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); } .custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(0, 123, 255, 0.5); } @@ -2667,32 +2764,55 @@ input[type="button"].btn-block { .custom-radio .custom-control-label::before { border-radius: 50%; } -.custom-radio .custom-control-input:checked ~ .custom-control-label::before { - background-color: #007bff; } - .custom-radio .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } .custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(0, 123, 255, 0.5); } +.custom-switch { + padding-left: 2.25rem; } + .custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; } + .custom-switch .custom-control-label::after { + top: calc(0.25rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + transition: none; } } + .custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + transform: translateX(0.75rem); } + .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); } + .custom-select { display: inline-block; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; line-height: 1.5; color: #495057; vertical-align: middle; - background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; - background-size: 8px 10px; + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; + background-color: #fff; border: 1px solid #ced4da; border-radius: 0.25rem; appearance: none; } .custom-select:focus { border-color: #80bdff; outline: 0; - box-shadow: 0 0 0 0.2rem rgba(128, 189, 255, 0.5); } + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } .custom-select:focus::-ms-value { color: #000; background-color: #fff; } @@ -2704,43 +2824,45 @@ input[type="button"].btn-block { color: #6c757d; background-color: #e9ecef; } .custom-select::-ms-expand { - opacity: 0; } + display: none; } .custom-select-sm { - height: calc(1.8125rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 75%; } + height: calc(1.5em + 0.5rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; } .custom-select-lg { - height: calc(2.875rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 125%; } + height: calc(1.5em + 1rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; } .custom-file { position: relative; display: inline-block; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); margin-bottom: 0; } .custom-file-input { position: relative; z-index: 2; width: 100%; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); margin: 0; opacity: 0; } .custom-file-input:focus ~ .custom-file-label { border-color: #80bdff; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } - .custom-file-input:focus ~ .custom-file-label::after { - border-color: #80bdff; } .custom-file-input:disabled ~ .custom-file-label { background-color: #e9ecef; } .custom-file-input:lang(en) ~ .custom-file-label::after { content: "Browse"; } + .custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); } .custom-file-label { position: absolute; @@ -2748,8 +2870,9 @@ input[type="button"].btn-block { right: 0; left: 0; z-index: 1; - height: calc(2.25rem + 2px); + height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; + font-weight: 400; line-height: 1.5; color: #495057; background-color: #fff; @@ -2762,18 +2885,19 @@ input[type="button"].btn-block { bottom: 0; z-index: 3; display: block; - height: 2.25rem; + height: calc(1.5em + 0.75rem); padding: 0.375rem 0.75rem; line-height: 1.5; color: #495057; content: "Browse"; background-color: #e9ecef; - border-left: 1px solid #ced4da; + border-left: inherit; border-radius: 0 0.25rem 0.25rem 0; } .custom-range { width: 100%; - padding-left: 0; + height: calc(1rem + 0.4rem); + padding: 0; background-color: transparent; appearance: none; } .custom-range:focus { @@ -2795,7 +2919,7 @@ input[type="button"].btn-block { border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-range::-webkit-slider-thumb { transition: none; } } .custom-range::-webkit-slider-thumb:active { @@ -2816,7 +2940,7 @@ input[type="button"].btn-block { border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-range::-moz-range-thumb { transition: none; } } .custom-range::-moz-range-thumb:active { @@ -2840,7 +2964,7 @@ input[type="button"].btn-block { border-radius: 1rem; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-range::-ms-thumb { transition: none; } } .custom-range::-ms-thumb:active { @@ -2860,12 +2984,22 @@ input[type="button"].btn-block { margin-right: 15px; background-color: #dee2e6; border-radius: 1rem; } + .custom-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; } + .custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; } + .custom-range:disabled::-moz-range-thumb { + background-color: #adb5bd; } + .custom-range:disabled::-moz-range-track { + cursor: default; } + .custom-range:disabled::-ms-thumb { + background-color: #adb5bd; } .custom-control-label::before, .custom-file-label, .custom-select { transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .custom-control-label::before, .custom-file-label, .custom-select { @@ -2884,7 +3018,9 @@ input[type="button"].btn-block { .nav-link:hover, .nav-link:focus { text-decoration: none; } .nav-link.disabled { - color: #6c757d; } + color: #6c757d; + pointer-events: none; + cursor: default; } .nav-tabs { border-bottom: 1px solid #dee2e6; } @@ -2990,8 +3126,6 @@ input[type="button"].btn-block { border-radius: 0.25rem; } .navbar-toggler:hover, .navbar-toggler:focus { text-decoration: none; } - .navbar-toggler:not(:disabled):not(.disabled) { - cursor: pointer; } .navbar-toggler-icon { display: inline-block; @@ -3152,7 +3286,7 @@ input[type="button"].btn-block { border-color: rgba(0, 0, 0, 0.1); } .navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-light .navbar-text { color: rgba(0, 0, 0, 0.5); } @@ -3184,7 +3318,7 @@ input[type="button"].btn-block { border-color: rgba(255, 255, 255, 0.1); } .navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-dark .navbar-text { color: rgba(255, 255, 255, 0.5); } @@ -3314,41 +3448,24 @@ input[type="button"].btn-block { .card-group > .card + .card { margin-left: 0; border-left: 0; } - .card-group > .card:first-child { + .card-group > .card:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } - .card-group > .card:first-child .card-img-top, - .card-group > .card:first-child .card-header { + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { border-top-right-radius: 0; } - .card-group > .card:first-child .card-img-bottom, - .card-group > .card:first-child .card-footer { + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { border-bottom-right-radius: 0; } - .card-group > .card:last-child { + .card-group > .card:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } - .card-group > .card:last-child .card-img-top, - .card-group > .card:last-child .card-header { + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { border-top-left-radius: 0; } - .card-group > .card:last-child .card-img-bottom, - .card-group > .card:last-child .card-footer { - border-bottom-left-radius: 0; } - .card-group > .card:only-child { - border-radius: 0.25rem; } - .card-group > .card:only-child .card-img-top, - .card-group > .card:only-child .card-header { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; } - .card-group > .card:only-child .card-img-bottom, - .card-group > .card:only-child .card-footer { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; } - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) { - border-radius: 0; } - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer { - border-radius: 0; } } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; } } .card-columns .card { margin-bottom: 0.75rem; } @@ -3363,21 +3480,22 @@ input[type="button"].btn-block { display: inline-block; width: 100%; } } -.accordion .card:not(:first-of-type):not(:last-of-type) { - border-bottom: 0; - border-radius: 0; } - -.accordion .card:not(:first-of-type) .card-header:first-child { - border-radius: 0; } - -.accordion .card:first-of-type { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; } - -.accordion .card:last-of-type { - border-top-left-radius: 0; - border-top-right-radius: 0; } +.accordion > .card { + overflow: hidden; } + .accordion > .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; } + .accordion > .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; } + .accordion > .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .accordion > .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; } + .accordion > .card .card-header { + margin-bottom: -1px; } .breadcrumb { display: flex; @@ -3430,8 +3548,6 @@ input[type="button"].btn-block { z-index: 2; outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } - .page-link:not(:disabled):not(.disabled) { - cursor: pointer; } .page-item:first-child .page-link { margin-left: 0; @@ -3490,7 +3606,13 @@ input[type="button"].btn-block { text-align: center; white-space: nowrap; vertical-align: baseline; - border-radius: 0.25rem; } + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .badge { + transition: none; } } + a.badge:hover, a.badge:focus { + text-decoration: none; } .badge:empty { display: none; } @@ -3506,82 +3628,102 @@ input[type="button"].btn-block { .badge-primary { color: #fff; background-color: #226f97; } - .badge-primary[href]:hover, .badge-primary[href]:focus { + a.badge-primary:hover, a.badge-primary:focus { color: #fff; - text-decoration: none; background-color: #19506d; } + a.badge-primary:focus, a.badge-primary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(34, 111, 151, 0.5); } .badge-secondary { color: #212529; background-color: #ff8f00; } - .badge-secondary[href]:hover, .badge-secondary[href]:focus { + a.badge-secondary:hover, a.badge-secondary:focus { color: #212529; - text-decoration: none; background-color: #cc7200; } + a.badge-secondary:focus, a.badge-secondary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(255, 143, 0, 0.5); } .badge-success { color: #fff; background-color: #239556; } - .badge-success[href]:hover, .badge-success[href]:focus { + a.badge-success:hover, a.badge-success:focus { color: #fff; - text-decoration: none; background-color: #196c3e; } + a.badge-success:focus, a.badge-success.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(35, 149, 86, 0.5); } .badge-info { color: #fff; background-color: #15b2d3; } - .badge-info[href]:hover, .badge-info[href]:focus { + a.badge-info:hover, a.badge-info:focus { color: #fff; - text-decoration: none; background-color: #108ba5; } + a.badge-info:focus, a.badge-info.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } .badge-warning { color: #212529; background-color: #ffbe42; } - .badge-warning[href]:hover, .badge-warning[href]:focus { + a.badge-warning:hover, a.badge-warning:focus { color: #212529; - text-decoration: none; background-color: #ffac0f; } + a.badge-warning:focus, a.badge-warning.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(255, 190, 66, 0.5); } .badge-danger { color: #fff; background-color: #a72431; } - .badge-danger[href]:hover, .badge-danger[href]:focus { + a.badge-danger:hover, a.badge-danger:focus { color: #fff; - text-decoration: none; background-color: #7d1b25; } + a.badge-danger:focus, a.badge-danger.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } .badge-light { color: #212529; background-color: #f8f9fa; } - .badge-light[href]:hover, .badge-light[href]:focus { + a.badge-light:hover, a.badge-light:focus { color: #212529; - text-decoration: none; background-color: #dae0e5; } + a.badge-light:focus, a.badge-light.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } .badge-dark { color: #fff; background-color: #343a40; } - .badge-dark[href]:hover, .badge-dark[href]:focus { + a.badge-dark:hover, a.badge-dark:focus { color: #fff; - text-decoration: none; background-color: #1d2124; } + a.badge-dark:focus, a.badge-dark.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } .badge-debug { color: #fff; background-color: #15b2d3; } - .badge-debug[href]:hover, .badge-debug[href]:focus { + a.badge-debug:hover, a.badge-debug:focus { color: #fff; - text-decoration: none; background-color: #108ba5; } + a.badge-debug:focus, a.badge-debug.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(21, 178, 211, 0.5); } .badge-error { color: #fff; background-color: #a72431; } - .badge-error[href]:hover, .badge-error[href]:focus { + a.badge-error:hover, a.badge-error:focus { color: #fff; - text-decoration: none; background-color: #7d1b25; } + a.badge-error:focus, a.badge-error.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(167, 36, 49, 0.5); } .jumbotron { padding: 2rem 1rem; @@ -3732,7 +3874,7 @@ input[type="button"].btn-block { white-space: nowrap; background-color: #007bff; transition: width 0.6s ease; } - @media screen and (prefers-reduced-motion: reduce) { + @media (prefers-reduced-motion: reduce) { .progress-bar { transition: none; } } @@ -3742,6 +3884,9 @@ input[type="button"].btn-block { .progress-bar-animated { animation: progress-bar-stripes 1s linear infinite; } + @media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + animation: none; } } .media { display: flex; @@ -3761,6 +3906,7 @@ input[type="button"].btn-block { color: #ced4da; text-align: inherit; } .list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; color: #ced4da; text-decoration: none; background-color: #292d32; } @@ -3782,11 +3928,9 @@ input[type="button"].btn-block { margin-bottom: 0; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } - .list-group-item:hover, .list-group-item:focus { - z-index: 1; - text-decoration: none; } .list-group-item.disabled, .list-group-item:disabled { color: #6c757d; + pointer-events: none; background-color: #fff; } .list-group-item.active { z-index: 2; @@ -3794,15 +3938,97 @@ input[type="button"].btn-block { background-color: #007bff; border-color: #007bff; } +.list-group-horizontal { + flex-direction: row; } + .list-group-horizontal .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; } + .list-group-horizontal-sm .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-sm .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-sm .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; } + .list-group-horizontal-md .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-md .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-md .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; } + .list-group-horizontal-lg .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-lg .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-lg .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; } + .list-group-horizontal-xl .list-group-item { + margin-right: -1px; + margin-bottom: 0; } + .list-group-horizontal-xl .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; } + .list-group-horizontal-xl .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; } } + .list-group-flush .list-group-item { border-right: 0; border-left: 0; border-radius: 0; } + .list-group-flush .list-group-item:last-child { + margin-bottom: -1px; } .list-group-flush:first-child .list-group-item:first-child { border-top: 0; } .list-group-flush:last-child .list-group-item:last-child { + margin-bottom: 0; border-bottom: 0; } .list-group-item-primary { @@ -3923,18 +4149,53 @@ input[type="button"].btn-block { color: #000; text-shadow: 0 1px 0 #fff; opacity: .5; } - .close:not(:disabled):not(.disabled) { - cursor: pointer; } - .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { - color: #000; - text-decoration: none; - opacity: .75; } + .close:hover { + color: #000; + text-decoration: none; } + .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + opacity: .75; } button.close { padding: 0; background-color: transparent; border: 0; - -webkit-appearance: none; } + appearance: none; } + +a.close.disabled { + pointer-events: none; } + +.toast { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + backdrop-filter: blur(10px); + opacity: 0; + border-radius: 0.25rem; } + .toast:not(:last-child) { + margin-bottom: 0.75rem; } + .toast.showing { + opacity: 1; } + .toast.show { + display: block; + opacity: 1; } + .toast.hide { + display: none; } + +.toast-header { + display: flex; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); } + +.toast-body { + padding: 0.75rem; } .modal-open { overflow: hidden; } @@ -3945,11 +4206,11 @@ button.close { .modal { position: fixed; top: 0; - right: 0; - bottom: 0; left: 0; z-index: 1050; display: none; + width: 100%; + height: 100%; overflow: hidden; outline: 0; } @@ -3960,21 +4221,41 @@ button.close { pointer-events: none; } .modal.fade .modal-dialog { transition: transform 0.3s ease-out; - transform: translate(0, -25%); } - @media screen and (prefers-reduced-motion: reduce) { + transform: translate(0, -50px); } + @media (prefers-reduced-motion: reduce) { .modal.fade .modal-dialog { transition: none; } } .modal.show .modal-dialog { - transform: translate(0, 0); } + transform: none; } + +.modal-dialog-scrollable { + display: flex; + max-height: calc(100% - 1rem); } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 1rem); + overflow: hidden; } + .modal-dialog-scrollable .modal-header, + .modal-dialog-scrollable .modal-footer { + flex-shrink: 0; } + .modal-dialog-scrollable .modal-body { + overflow-y: auto; } .modal-dialog-centered { display: flex; align-items: center; - min-height: calc(100% - (0.5rem * 2)); } + min-height: calc(100% - 1rem); } .modal-dialog-centered::before { display: block; - height: calc(100vh - (0.5rem * 2)); + height: calc(100vh - 1rem); content: ""; } + .modal-dialog-centered.modal-dialog-scrollable { + flex-direction: column; + justify-content: center; + height: 100%; } + .modal-dialog-centered.modal-dialog-scrollable .modal-content { + max-height: none; } + .modal-dialog-centered.modal-dialog-scrollable::before { + content: none; } .modal-content { position: relative; @@ -3991,10 +4272,10 @@ button.close { .modal-backdrop { position: fixed; top: 0; - right: 0; - bottom: 0; left: 0; z-index: 1040; + width: 100vw; + height: 100vh; background-color: #000; } .modal-backdrop.fade { opacity: 0; } @@ -4005,12 +4286,12 @@ button.close { display: flex; align-items: flex-start; justify-content: space-between; - padding: 1rem; - border-bottom: 1px solid #e9ecef; + padding: 1rem 1rem; + border-bottom: 1px solid #dee2e6; border-top-left-radius: 0.3rem; border-top-right-radius: 0.3rem; } .modal-header .close { - padding: 1rem; + padding: 1rem 1rem; margin: -1rem -1rem -1rem auto; } .modal-title { @@ -4027,7 +4308,9 @@ button.close { align-items: center; justify-content: flex-end; padding: 1rem; - border-top: 1px solid #e9ecef; } + border-top: 1px solid #dee2e6; + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; } .modal-footer > :not(:first-child) { margin-left: .25rem; } .modal-footer > :not(:last-child) { @@ -4044,23 +4327,32 @@ button.close { .modal-dialog { max-width: 500px; margin: 1.75rem auto; } + .modal-dialog-scrollable { + max-height: calc(100% - 3.5rem); } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 3.5rem); } .modal-dialog-centered { - min-height: calc(100% - (1.75rem * 2)); } + min-height: calc(100% - 3.5rem); } .modal-dialog-centered::before { - height: calc(100vh - (1.75rem * 2)); } + height: calc(100vh - 3.5rem); } .modal-sm { max-width: 300px; } } @media (min-width: 992px) { - .modal-lg { + .modal-lg, + .modal-xl { max-width: 800px; } } +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; } } + .tooltip { position: absolute; z-index: 1070; display: block; margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; @@ -4145,7 +4437,7 @@ button.close { z-index: 1060; display: block; max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; @@ -4180,57 +4472,45 @@ button.close { .bs-popover-top, .bs-popover-auto[x-placement^="top"] { margin-bottom: 0.5rem; } - .bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { + .bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { bottom: calc((0.5rem + 1px) * -1); } - .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, - .bs-popover-top .arrow::after, - .bs-popover-auto[x-placement^="top"] .arrow::after { - border-width: 0.5rem 0.5rem 0; } - .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before { - bottom: 0; - border-top-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-top .arrow::after, - .bs-popover-auto[x-placement^="top"] .arrow::after { - bottom: 1px; - border-top-color: #fff; } + .bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); } + .bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; } .bs-popover-right, .bs-popover-auto[x-placement^="right"] { margin-left: 0.5rem; } - .bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { + .bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { left: calc((0.5rem + 1px) * -1); width: 0.5rem; height: 1rem; margin: 0.3rem 0; } - .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, - .bs-popover-right .arrow::after, - .bs-popover-auto[x-placement^="right"] .arrow::after { - border-width: 0.5rem 0.5rem 0.5rem 0; } - .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before { - left: 0; - border-right-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-right .arrow::after, - .bs-popover-auto[x-placement^="right"] .arrow::after { - left: 1px; - border-right-color: #fff; } + .bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); } + .bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; } .bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { margin-top: 0.5rem; } - .bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { + .bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { top: calc((0.5rem + 1px) * -1); } - .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, - .bs-popover-bottom .arrow::after, - .bs-popover-auto[x-placement^="bottom"] .arrow::after { - border-width: 0 0.5rem 0.5rem 0.5rem; } - .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before { - top: 0; - border-bottom-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-bottom .arrow::after, - .bs-popover-auto[x-placement^="bottom"] .arrow::after { - top: 1px; - border-bottom-color: #fff; } + .bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); } + .bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; } .bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { position: absolute; top: 0; @@ -4243,29 +4523,24 @@ button.close { .bs-popover-left, .bs-popover-auto[x-placement^="left"] { margin-right: 0.5rem; } - .bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { + .bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { right: calc((0.5rem + 1px) * -1); width: 0.5rem; height: 1rem; margin: 0.3rem 0; } - .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, - .bs-popover-left .arrow::after, - .bs-popover-auto[x-placement^="left"] .arrow::after { - border-width: 0.5rem 0 0.5rem 0.5rem; } - .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before { - right: 0; - border-left-color: rgba(0, 0, 0, 0.25); } - - .bs-popover-left .arrow::after, - .bs-popover-auto[x-placement^="left"] .arrow::after { - right: 1px; - border-left-color: #fff; } + .bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); } + .bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; } .popover-header { padding: 0.5rem 0.75rem; margin-bottom: 0; font-size: 1rem; - color: inherit; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-top-left-radius: calc(0.3rem - 1px); @@ -4280,106 +4555,89 @@ button.close { .carousel { position: relative; } +.carousel.pointer-event { + touch-action: pan-y; } + .carousel-inner { position: relative; width: 100%; overflow: hidden; } + .carousel-inner::after { + display: block; + clear: both; + content: ""; } .carousel-item { position: relative; display: none; - align-items: center; + float: left; width: 100%; + margin-right: -100%; backface-visibility: hidden; - perspective: 1000px; } + transition: transform 0.6s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; } } .carousel-item.active, .carousel-item-next, .carousel-item-prev { - display: block; - transition: transform 0.6s ease; } - @media screen and (prefers-reduced-motion: reduce) { - .carousel-item.active, - .carousel-item-next, - .carousel-item-prev { - transition: none; } } + display: block; } -.carousel-item-next, -.carousel-item-prev { - position: absolute; - top: 0; } - -.carousel-item-next.carousel-item-left, -.carousel-item-prev.carousel-item-right { - transform: translateX(0); } - @supports (transform-style: preserve-3d) { - .carousel-item-next.carousel-item-left, - .carousel-item-prev.carousel-item-right { - transform: translate3d(0, 0, 0); } } - -.carousel-item-next, +.carousel-item-next:not(.carousel-item-left), .active.carousel-item-right { transform: translateX(100%); } - @supports (transform-style: preserve-3d) { - .carousel-item-next, - .active.carousel-item-right { - transform: translate3d(100%, 0, 0); } } -.carousel-item-prev, +.carousel-item-prev:not(.carousel-item-right), .active.carousel-item-left { transform: translateX(-100%); } - @supports (transform-style: preserve-3d) { - .carousel-item-prev, - .active.carousel-item-left { - transform: translate3d(-100%, 0, 0); } } .carousel-fade .carousel-item { opacity: 0; - transition-duration: .6s; - transition-property: opacity; } + transition-property: opacity; + transform: none; } .carousel-fade .carousel-item.active, .carousel-fade .carousel-item-next.carousel-item-left, .carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; opacity: 1; } .carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-right { - opacity: 0; } - -.carousel-fade .carousel-item-next, -.carousel-fade .carousel-item-prev, -.carousel-fade .carousel-item.active, -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-prev { - transform: translateX(0); } - @supports (transform-style: preserve-3d) { - .carousel-fade .carousel-item-next, - .carousel-fade .carousel-item-prev, - .carousel-fade .carousel-item.active, + z-index: 0; + opacity: 0; + transition: 0s 0.6s opacity; } + @media (prefers-reduced-motion: reduce) { .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-prev { - transform: translate3d(0, 0, 0); } } + .carousel-fade .active.carousel-item-right { + transition: none; } } .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; + z-index: 1; display: flex; align-items: center; justify-content: center; width: 15%; color: #fff; text-align: center; - opacity: 0.5; } + opacity: 0.5; + transition: opacity 0.15s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; } } .carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus { color: #fff; text-decoration: none; outline: 0; - opacity: .9; } + opacity: 0.9; } .carousel-control-prev { left: 0; } @@ -4392,19 +4650,18 @@ button.close { display: inline-block; width: 20px; height: 20px; - background: transparent no-repeat center center; - background-size: 100% 100%; } + background: no-repeat 50% / 100% 100%; } .carousel-control-prev-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); } .carousel-control-next-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); } .carousel-indicators { position: absolute; right: 0; - bottom: 10px; + bottom: 0; left: 0; z-index: 15; display: flex; @@ -4414,7 +4671,7 @@ button.close { margin-left: 15%; list-style: none; } .carousel-indicators li { - position: relative; + box-sizing: content-box; flex: 0 1 auto; width: 30px; height: 3px; @@ -4422,25 +4679,17 @@ button.close { margin-left: 3px; text-indent: -999px; cursor: pointer; - background-color: rgba(255, 255, 255, 0.5); } - .carousel-indicators li::before { - position: absolute; - top: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; } - .carousel-indicators li::after { - position: absolute; - bottom: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; } + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + transition: opacity 0.6s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + transition: none; } } .carousel-indicators .active { - background-color: #fff; } + opacity: 1; } .carousel-caption { position: absolute; @@ -4453,6 +4702,45 @@ button.close { color: #fff; text-align: center; } +@keyframes spinner-border { + to { + transform: rotate(360deg); } } + +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + animation: spinner-border .75s linear infinite; } + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; } + +@keyframes spinner-grow { + 0% { + transform: scale(0); } + 50% { + opacity: 1; } } + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + animation: spinner-grow .75s linear infinite; } + +.spinner-grow-sm { + width: 1rem; + height: 1rem; } + .align-baseline { vertical-align: baseline !important; } @@ -4632,6 +4920,9 @@ button.bg-error:focus { .border-white { border-color: #fff !important; } +.rounded-sm { + border-radius: 0.2rem !important; } + .rounded { border-radius: 0.25rem !important; } @@ -4651,9 +4942,15 @@ button.bg-error:focus { border-top-left-radius: 0.25rem !important; border-bottom-left-radius: 0.25rem !important; } +.rounded-lg { + border-radius: 0.3rem !important; } + .rounded-circle { border-radius: 50% !important; } +.rounded-pill { + border-radius: 50rem !important; } + .rounded-0 { border-radius: 0 !important; } @@ -4823,6 +5120,18 @@ button.bg-error:focus { .embed-responsive-1by1::before { padding-top: 100%; } +.embed-responsive-21by9::before { + padding-top: 42.85714%; } + +.embed-responsive-16by9::before { + padding-top: 56.25%; } + +.embed-responsive-4by3::before { + padding-top: 75%; } + +.embed-responsive-1by1::before { + padding-top: 100%; } + .flex-row { flex-direction: row !important; } @@ -5246,6 +5555,12 @@ button.bg-error:focus { .float-xl-none { float: none !important; } } +.overflow-auto { + overflow: auto !important; } + +.overflow-hidden { + overflow: hidden !important; } + .position-static { position: static !important; } @@ -5347,6 +5662,29 @@ button.bg-error:focus { .mh-100 { max-height: 100% !important; } +.min-vw-100 { + min-width: 100vw !important; } + +.min-vh-100 { + min-height: 100vh !important; } + +.vw-100 { + width: 100vw !important; } + +.vh-100 { + height: 100vh !important; } + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + pointer-events: auto; + content: ""; + background-color: rgba(0, 0, 0, 0); } + .m-0 { margin: 0 !important; } @@ -5575,6 +5913,101 @@ button.bg-error:focus { .px-5 { padding-left: 3rem !important; } +.m-n1 { + margin: -0.25rem !important; } + +.mt-n1, +.my-n1 { + margin-top: -0.25rem !important; } + +.mr-n1, +.mx-n1 { + margin-right: -0.25rem !important; } + +.mb-n1, +.my-n1 { + margin-bottom: -0.25rem !important; } + +.ml-n1, +.mx-n1 { + margin-left: -0.25rem !important; } + +.m-n2 { + margin: -0.5rem !important; } + +.mt-n2, +.my-n2 { + margin-top: -0.5rem !important; } + +.mr-n2, +.mx-n2 { + margin-right: -0.5rem !important; } + +.mb-n2, +.my-n2 { + margin-bottom: -0.5rem !important; } + +.ml-n2, +.mx-n2 { + margin-left: -0.5rem !important; } + +.m-n3 { + margin: -1rem !important; } + +.mt-n3, +.my-n3 { + margin-top: -1rem !important; } + +.mr-n3, +.mx-n3 { + margin-right: -1rem !important; } + +.mb-n3, +.my-n3 { + margin-bottom: -1rem !important; } + +.ml-n3, +.mx-n3 { + margin-left: -1rem !important; } + +.m-n4 { + margin: -1.5rem !important; } + +.mt-n4, +.my-n4 { + margin-top: -1.5rem !important; } + +.mr-n4, +.mx-n4 { + margin-right: -1.5rem !important; } + +.mb-n4, +.my-n4 { + margin-bottom: -1.5rem !important; } + +.ml-n4, +.mx-n4 { + margin-left: -1.5rem !important; } + +.m-n5 { + margin: -3rem !important; } + +.mt-n5, +.my-n5 { + margin-top: -3rem !important; } + +.mr-n5, +.mx-n5 { + margin-right: -3rem !important; } + +.mb-n5, +.my-n5 { + margin-bottom: -3rem !important; } + +.ml-n5, +.mx-n5 { + margin-left: -3rem !important; } + .m-auto { margin: auto !important; } @@ -5763,6 +6196,76 @@ button.bg-error:focus { .pl-sm-5, .px-sm-5 { padding-left: 3rem !important; } + .m-sm-n1 { + margin: -0.25rem !important; } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; } + .m-sm-n2 { + margin: -0.5rem !important; } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; } + .m-sm-n3 { + margin: -1rem !important; } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; } + .m-sm-n4 { + margin: -1.5rem !important; } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; } + .m-sm-n5 { + margin: -3rem !important; } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; } .m-sm-auto { margin: auto !important; } .mt-sm-auto, @@ -5947,6 +6450,76 @@ button.bg-error:focus { .pl-md-5, .px-md-5 { padding-left: 3rem !important; } + .m-md-n1 { + margin: -0.25rem !important; } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; } + .m-md-n2 { + margin: -0.5rem !important; } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; } + .m-md-n3 { + margin: -1rem !important; } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; } + .m-md-n4 { + margin: -1.5rem !important; } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; } + .m-md-n5 { + margin: -3rem !important; } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; } .m-md-auto { margin: auto !important; } .mt-md-auto, @@ -6131,6 +6704,76 @@ button.bg-error:focus { .pl-lg-5, .px-lg-5 { padding-left: 3rem !important; } + .m-lg-n1 { + margin: -0.25rem !important; } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; } + .m-lg-n2 { + margin: -0.5rem !important; } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; } + .m-lg-n3 { + margin: -1rem !important; } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; } + .m-lg-n4 { + margin: -1.5rem !important; } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; } + .m-lg-n5 { + margin: -3rem !important; } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; } .m-lg-auto { margin: auto !important; } .mt-lg-auto, @@ -6315,6 +6958,76 @@ button.bg-error:focus { .pl-xl-5, .px-xl-5 { padding-left: 3rem !important; } + .m-xl-n1 { + margin: -0.25rem !important; } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; } + .m-xl-n2 { + margin: -0.5rem !important; } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; } + .m-xl-n3 { + margin: -1rem !important; } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; } + .m-xl-n4 { + margin: -1.5rem !important; } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; } + .m-xl-n5 { + margin: -3rem !important; } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; } .m-xl-auto { margin: auto !important; } .mt-xl-auto, @@ -6331,11 +7044,14 @@ button.bg-error:focus { margin-left: auto !important; } } .text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; } .text-justify { text-align: justify !important; } +.text-wrap { + white-space: normal !important; } + .text-nowrap { white-space: nowrap !important; } @@ -6397,12 +7113,18 @@ button.bg-error:focus { .font-weight-light { font-weight: 300 !important; } +.font-weight-lighter { + font-weight: lighter !important; } + .font-weight-normal { font-weight: 400 !important; } .font-weight-bold { font-weight: 700 !important; } +.font-weight-bolder { + font-weight: bolder !important; } + .font-italic { font-style: italic !important; } @@ -6413,61 +7135,61 @@ button.bg-error:focus { color: #226f97 !important; } a.text-primary:hover, .card-feeding a.card-body:hover, a.text-primary:focus, .card-feeding a.card-body:focus { - color: #19506d !important; } + color: #144159 !important; } .text-secondary { color: #ff8f00 !important; } a.text-secondary:hover, a.text-secondary:focus { - color: #cc7200 !important; } + color: #b36400 !important; } .text-success, .card-tummytime .card-body { color: #239556 !important; } a.text-success:hover, .card-tummytime a.card-body:hover, a.text-success:focus, .card-tummytime a.card-body:focus { - color: #196c3e !important; } + color: #145732 !important; } .text-info { color: #15b2d3 !important; } a.text-info:hover, a.text-info:focus { - color: #108ba5 !important; } + color: #0e778d !important; } .text-warning { color: #ffbe42 !important; } a.text-warning:hover, a.text-warning:focus { - color: #ffac0f !important; } + color: #f5a000 !important; } .text-danger, .card-diaperchange .card-body { color: #a72431 !important; } a.text-danger:hover, .card-diaperchange a.card-body:hover, a.text-danger:focus, .card-diaperchange a.card-body:focus { - color: #7d1b25 !important; } + color: #68161f !important; } .text-light, .card-statistics .card-body, .card-timer .card-body { color: #f8f9fa !important; } a.text-light:hover, .card-statistics a.card-body:hover, .card-timer a.card-body:hover, a.text-light:focus, .card-statistics a.card-body:focus, .card-timer a.card-body:focus { - color: #dae0e5 !important; } + color: #cbd3da !important; } .text-dark, .card-statistics .card-header, .card-timer .card-header { color: #343a40 !important; } a.text-dark:hover, .card-statistics a.card-header:hover, .card-timer a.card-header:hover, a.text-dark:focus, .card-statistics a.card-header:focus, .card-timer a.card-header:focus { - color: #1d2124 !important; } + color: #121416 !important; } .text-debug { color: #15b2d3 !important; } a.text-debug:hover, a.text-debug:focus { - color: #108ba5 !important; } + color: #0e778d !important; } .text-error { color: #a72431 !important; } a.text-error:hover, a.text-error:focus { - color: #7d1b25 !important; } + color: #68161f !important; } .text-body { color: #ced4da !important; } @@ -6488,6 +7210,16 @@ a.text-error:hover, a.text-error:focus { background-color: transparent; border: 0; } +.text-decoration-none { + text-decoration: none !important; } + +.text-break { + word-break: break-word !important; + overflow-wrap: break-word !important; } + +.text-reset { + color: inherit !important; } + .visible { visibility: visible !important; } diff --git a/static/babybuddy/css/app.css.gz b/static/babybuddy/css/app.css.gz index 26fad40077ae9d96dceea98825c54c6a65ec8de2..65fd553d61b76b6b68a1ad6ca803f9490487cd02 100644 GIT binary patch literal 34663 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%0AlXVOsHY4oh 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 YVG@K~D9gg5@h|Y=e|C8GERbOT2W*pn)c^nh diff --git a/static/babybuddy/css/vendor.538af7ecea08.css.gz b/static/babybuddy/css/vendor.538af7ecea08.css.gz deleted file mode 100644 index 1f1715e3ec0266fa3de1ba033577c3a73e0bde9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1589 zcmV-52Fm##iwFP!00002|IHcOZre8W-9Y|u{>VF-TfL?ZnfZkTl3_IMK89!1hMA<$oXpmF*tQ#ADV2q9mDOsQZYY=^=F zx7@%fU`f|P=l-ku=28{!`PVfLRtyk~^t+D0J%Y-qJKuCy=o|lJr+tMly4rj5Eq;(OtjYmCJBU3#D*IX5K&AB zA;Lo6!*3RXOyfM?#Algy7yfIakfz{eqHtlKONg(8KSE#DlrW4=A&(j9{cJJ!U(Zrz zU1c=2`_K+^DmnL0S26Qu_KW$|f64y(`r_T#cO!1ubSVNl?uu4~jr!vVE+M&E=);Gb z^eBH&jC+hzLwi@Xq1H=!fR<9MQzde7l29@{x&)CH@Opsg@W^K1+RK5s0hBJw`2Ktx*8z%`#G~x)z$MsmUuru$A)Nda<1L{a1R;kCYGsy zTmDW+<4B5(S)s=PxRq_%$gIC=aHuiJ>gPPKpZgo8xb8pdj-C~6j{q`Mx4O}^p3z{9YKPYfucsIa{dzxnxbM%a zJlU67aU%O7n6`Tf#7FV2`aJ?Kr@M25qZT z{rp{R?K2nLDw#24$|s)Z?@ZeSbmx>?aH=(vC3|ZZsb%7$_WmsvM>T;|+G))C(S_Mp{g;e;;8?C& z8)?GW*m+(BBH|=%q4Jw_>^PY_i`jx`=aBl<1sBR^p4d>*%R0qcO%tcc2M=)1L=>WX zIC78su-IO~ZL|0R_gmy!6Q@|sGuDy?&@4MH^N9Y;G8_4V>B({^{hi)Bq1V)*%g#Yt ziH)Ky-HHwULT_O^Ye!6HqiLbFx#pFg*y@6EN4!?vY!AVpQfiWQ7GO}yh`A>|9(O=e zBTRR!WQysImkctkUScI>^bQAN!c5dfN=`SWkRSRi;ucDySgaTW>R~mK7F0Xa-CjX7 z>^%4GJ&S^AHE&$Bs+vC5Dg0GSsD=KJ8{k3a)O7(73()Gztom&s`ziT}z z{q~-isw``oYUPe7*_!&yd8UD}VPr)m07(8PTwwz{k_rC# zm~khdYs%&CA_~IepO%G}z-1V%dr&~qfz${+oMbtzgGd&-VsikY6q$p_BgJav(FYnZ zL55LsJc@&%!Vvt{iA4G}+%W05?eQeGJ&L4jLZH9&K;!gPrfBHz5kkHQnNq<**bapU zZn=R|z>=31I!!uZNUQ}s=}&|v9_jfGrB2<7U`@tAL+ zfI9MYI!5WgGj(H&0CIyuMgNROd(}`9dn}YjDBnD4Auc#om}svBOcDs6hz&O&AflKM zLWG6Bhu=*N^|C0Un^~Jlf??&9R=~4uA+!d_|8}-K#TtafS(1#B< z=~4cm821>bhW4&%L#>ze04=3hr%L4FB%x$@bO|CY;PnCzMi5Ztp^pQQ^rj3MBvIW4 zH07wlo;Z$E3uHLL6A;nC%Enr>n-^ypxD=2Kj71hp5Yd^)!|YM^PRShe_U4#(Fh>Eq zaaoc%3kB!f3SRYAP!W7bZ^!cQbTvTi_j6{Ys;lRNEb)GRjt$Y^O*t?k;5cqxm#b|2qma3}#B&TxCW*}*ac z?aj1dT&%FXr3ccoai-kCa?eJRR^%O&)U+*Um_x*X5 z$J+{%uj(2`Ly8hYLzL2o;Hu@+913g{Ip~p40^XKeX{EBfM5g^yRN>pCMU_b6S$k}T=TrP zT1iY;6k4k5ooSnZ?woQ9PPJyTWN+;vwM=}}-oM4-s3wp~JB?XCx-k2y|B`VJ9LrT} zBTX0^JI|{?M4Y58RDP3=9Vc^VFE=q+q#?TG1YG%d6?*SyjbTU}7@h}X)S?I9RcN=>rP0t`wSG55sB;|@q_ zgz1izOflW@l0l}`ORS`f-r+z@n2EYb$?2vP@dIE$tuGaw3HJz mOve348cJ**C2NdiC-eEZ%=9?fN>+P?qtU;3@c0;SBLDzEoEOCa literal 0 HcmV?d00001 diff --git a/static/babybuddy/css/vendor.css b/static/babybuddy/css/vendor.css index dc6c0c0d..8e706b1c 100644 --- a/static/babybuddy/css/vendor.css +++ b/static/babybuddy/css/vendor.css @@ -1,5 +1,5 @@ /*@preserve - * Tempus Dominus Bootstrap4 v5.0.1 (https://tempusdominus.github.io/bootstrap-4/) + * Tempus Dominus Bootstrap4 v5.1.2 (https://tempusdominus.github.io/bootstrap-4/) * Copyright 2016-2018 Jonathan Peterson * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE) */ diff --git a/static/babybuddy/css/vendor.css.gz b/static/babybuddy/css/vendor.css.gz index 1f1715e3ec0266fa3de1ba033577c3a73e0bde9e..16edbb20ef7e6b5332b87b0917fb7344f546a430 100644 GIT binary patch delta 1499 zcmV<11tj{l473c8Yk%|Hyg;X}lzwPUCNhR3381-R(v57BiHV(|7?+c?nC4gEzXfdN zN^~(jpBwPw3jHBCmM-S#fl3;Lg2#~GnL~L<35qzO0lL3?D)^-w9I-C5));=8*q*Q_ zYa9a2$@jaj-+nxPi)EM`jgCfU7#M7*_!&yd4HyXv0-FIB>+hNCtP6z zJCX_h`IvDhplizI?;;AqF(t*?nJ)C4Yt%FDwx?*zxp%j^e$RovS z<*=HQX@ixb5*IwmpiZYeJyE^g!eERi4}YnTt*1x z>df(&Z=rxX@^m^z>Ay2|V~YTCgF;3Bj7EFaP!fAAltw7uJZd2>I8~TvuLVpJ2%m@z zHy|LQm=HpQg}#U1ECiXxdA^CyGVLz>*F+&r!OKM9!hb%O5MK#@gubjPVHll49y8MW z*<$X$o~6vX%4ll$p&jN_a_*n5V&={47xSzClKu7d#k;ZZM%=RLQUr9|6|D#x^~Vuh zLUOgxhYvUDQU0J9_ZX*!_O5C}t(WuwEu~neO61}sp=5Y;2_h}v^#Tt@5K!fzj{}hO zrVJS*QGeYAH07wlo;Z$E3uHLL6A;nC%Enr>n-^ypxD=2Kj71hp5Yd^)!|YM^PRShe z_U4#(Fh>Eqaaoc%3kB!f3SRYAP!W7bZ^!cQbTvTi_j6{Ys;lRNEb)GRjt$Y^qClB}id6mc83X`wu8b(8k5<)|i(ud%x<E=zlG2XYGjTY&0#jHrKq;6I)$S?uggQo9!VOR7y>< z&H@Zd88P?7$Kwu2YJ};Il}s_+@sdHN)l00TjNaiuOqhwfNXhA@6!Jr#MchJZ6pIyO zKs~HR(t>Jdy4x#=hMni$y=PG{t>%r3R#nr-I)%S#3ANB4a>KImWIA2g%YS7JT&qo0 z!*;erE!p;5mW4^zB0aNBvNRZX#@O-78x4}3FZIK?!O1oi)A$!U@KLeT?5w|bO;4%b zjY_&c`Kfd3LH>8GN2TB16H}FCO;fGhQ7y~A?K(GSrJ}W!9k*TA(EN7Sx#EGH4McbP zW@$OsI$|1PrdQN-78&ZwR#e`tFBP2$_Xw3T;vR36Bc?fKc0|qI&2kh{xq;g8wuBZV zYc*1d^8P0;8|Ahr-C&PQ#{EbdN^Bn`Ym8(k^ZB^U^f=i{R(pk`(Z6``_!w^^003`0 B@Y4VQ delta 1500 zcmV<21ta>j47Ci9YkzZUo}*J&NRe!|O_IUdEqP+qH{`8g7_$-1c}9+a5*IH6hSndZ2OoDpNG{_Xr_hgiNVm zA#8`j1Gn73DSu!|*Fxw1tNP|r74P}iH4at`5RCM@j|pLXWudA1CSGW;^u)$OE+d3; zb>?`?w@^SGc{&}V^xv7fu|)v6L7}35Mx(uID2Y85N+XnS9<>k`oGMJT*8(O9gipkV z8xRmtOb8*uLf^x07J^LUJm17;nRXZcYod^*;ANt4VSk@Xh_8e{LSNRDFpN$ij~VIx zY%%v=&r)VxWi++>&<=AdIrmRjG4p2ji}}@m$^QEK;@#MHBW~GrDFQm~idKY;`r`;L zA-P)U!-t#nD1T6ldyG>g@W^K1+RK5s0hBJw`2Ktx*8z%`#G~x)z$MsmUuru$A)Nda<1L{ za1R;kCYGsyTmDW+<4B5(S)s=PxRq_%$gIC=aDS*V$m-`jub=xHrnv4$Jg)pCrIZ!x zX-gtl@7jK*MDp@Jk4t_ZN|yS3$-HHYS0i*WQB6?$4h88Y&xJ;N+zn+NH`N`HLJCzZ zvu4({g6JGE}#^(X^h?V2x^r*9xzv z7z+J*KY6(C&#OG%R+xNM*DxAVln@%Cls*JkEvM#CV57)EkAxENw%khda!OmmFl%6s ztsw0&c+?!w!WnSi}Sgr10Nb61J}g*m&)Z?wa#80bZQI{l@klann)sTjrBb@in+ zIZ4Kyz};Nun&-9EN@BvI&{AFROxpx>=agG;sx^}(dutb|W#Xgu{w)?qHGx#xX@AW6 z(S_Mp{g;e;;8?C&8)?GW*m+(BBH|=%q4Jw_>^PY_i`jx`=aBl<1sBR^p4d>*%R0qc zO%tcc2M=)1L=>WXIC78su-IO~ZL|0R_gmy!6Q@|sGuDy?&@4MH^N9Y;G8_4V>B({^ z{hi)Bq1V)*%g#YtiH)Ky-HHwULVs^zJ8MTwXQOGMwYlb%p4jSwa!0&Y-fR!Spi*j* zbrxVy%80oqJ|1^KQX@=vtYnJmj+YEFtzKd!W%LdQV!}++MM_RLrH~)`EaDbQqgbpM z1L|Qlk``1u)7@S{H0(V0?mdfwX*F+Lw5pmu)+zi|OQ?nZkQrY#_SR zH%rU8))CVXGrgjwv&c|awpH?OeW~b7xJRgz5%+kj95Kx?vm~gbGVVvxP-6QiSz{zSna{^%rpL)vvf3*gjs68ailO^&BLD!A CkMsus diff --git a/static/babybuddy/js/app.0079764f3fc1.js.gz b/static/babybuddy/js/app.0079764f3fc1.js.gz deleted file mode 100644 index d6a3d23f10f300d2f79297d3b045636523aefcc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1317 zcmV+=1={)_iwFP!00002|Fu_JZ`(E$e)q39^@2)nJUJb(hsDbVq$#if!@6PVUW%ch z#iNJ~bs0t3HCq4o9a48$vR!vG{9u#k`kgBmFW{D~ws4zszMa4e`obLsESDN$7Gah$ zA0bE-=nz|^z|zzs;>AP+;OcFPNdO=I$Wd+K=H>>RJmwgP7`ZcpPZJ<^m24o!4ZKz= zQLfXHrSP9zD9lO$o->>5CX+Q&R$)PN13@19S|l;Jg+zcp#i!lUo-5S3ikqwDWarM7 zlgXm(EIfz^Rq68EjI=Yz@-&qKIo#iYPC(@`9cn}8!2|h^5+jT?CpTs=toJAteHFnR!Bv+Y* zy>`yCesu7;Xaht}+{YT#n#p@kWN|L#vc9!q$If4u?)ERq1N}DTOe0-IiJ`IhR`-=f zg%LI)d3;?P=vv|L1)o=d((hS|+I$+rD(dC_ePiH->wM$DWm{lrQ1!8S+G6q~#*Y*o zO4h5sa`T~pWQjx%%XGc9UR{^YRhbYcnqo`IPD#7mlTjvOz+{Hq+uaf4sC2mNc%AHU zW^J4IlzsjT<08sr`Wg{7_qqbU1h*_dg7IT(VYVm+*2lt@{bx{)d$CH~VJ{jW!eJoFcpB*{~Hl;eCk+a>-K3+_wYY1tr>$|dFA;T5}VoFl~|sSN<6efjRo?ZLt{j& z(fNBUc*h1{(SbV?a7e^%@N}g31~FoszcP!i>y$9*Bu&j@;8cYNW`X^+E3qo~0_&LB z^NT0M{o!?Yhxn+2L?eQV0|iW6w=(gZI1BGpj=s@>38 z%op@XBIb2HZi~?h#n8>X-r8Opbnfb2+cmbPhk|pA>*M;ot+@%O1)zS`n5OZ1P3nIY8EwSo3E9+jB6i|7gT@aFE#HT+5AlCv#DY`em$RnuCNO6KFw9Ugio b74ul3Oc-~M&5_#l&Mf&CMZT8RCKCVvg%*~N diff --git a/static/babybuddy/js/app.0079764f3fc1.js b/static/babybuddy/js/app.818b5a7636cd.js similarity index 100% rename from static/babybuddy/js/app.0079764f3fc1.js rename to static/babybuddy/js/app.818b5a7636cd.js diff --git a/static/babybuddy/js/app.818b5a7636cd.js.gz b/static/babybuddy/js/app.818b5a7636cd.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..72c84776ec37f4490c1370fc823efa66de6b5ecd GIT binary patch literal 1330 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 b74ul3Oc-~M&5_#l&Mf&CMZT8RCKCVvg%*~N diff --git a/static/babybuddy/js/graph.d96c5b659cfb.js b/static/babybuddy/js/graph.9d17ed9a2576.js similarity index 87% rename from static/babybuddy/js/graph.d96c5b659cfb.js rename to static/babybuddy/js/graph.9d17ed9a2576.js index eae015be..6e74d25a 100644 --- a/static/babybuddy/js/graph.d96c5b659cfb.js +++ b/static/babybuddy/js/graph.9d17ed9a2576.js @@ -1,6 +1,6 @@ /** -* plotly.js (cartesian) v1.41.3 -* Copyright 2012-2018, Plotly, Inc. +* plotly.js (cartesian) v1.44.4 +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * Licensed under the MIT license */ @@ -38,21 +38,23 @@ var rules = { "X .cursor-n-resize": "cursor:n-resize;", "X .cursor-ne-resize": "cursor:ne-resize;", "X .cursor-grab": "cursor:-webkit-grab;cursor:grab;", - "X .modebar": "position:absolute;top:2px;right:2px;z-index:1001;background:rgba(255,255,255,0.7);", - "X .modebar--hover": "opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;", - "X:hover .modebar--hover": "opacity:1;", + "X .modebar": "position:absolute;top:2px;right:2px;z-index:1001;", + "X .ease-bg": "-webkit-transition:background-color 0.3s ease 0s;-moz-transition:background-color 0.3s ease 0s;-ms-transition:background-color 0.3s ease 0s;-o-transition:background-color 0.3s ease 0s;transition:background-color 0.3s ease 0s;", + "X .modebar--hover>:not(.watermark)": "opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;", + "X:hover .modebar--hover .modebar-group": "opacity:1;", "X .modebar-group": "float:left;display:inline-block;box-sizing:border-box;margin-left:8px;position:relative;vertical-align:middle;white-space:nowrap;", - "X .modebar-group:first-child": "margin-left:0px;", - "X .modebar-btn": "position:relative;font-size:16px;padding:3px 4px;cursor:pointer;line-height:normal;box-sizing:border-box;", + "X .modebar-btn": "position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;", "X .modebar-btn svg": "position:relative;top:2px;", - "X .modebar-btn path": "fill:rgba(0,31,95,0.3);", - "X .modebar-btn.active path,X .modebar-btn:hover path": "fill:rgba(0,22,72,0.5);", - "X .modebar-btn.modebar-btn--logo": "padding:3px 1px;", - "X .modebar-btn.modebar-btn--logo path": "fill:#447adb !important;", + "X .modebar.vertical": "display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;", + "X .modebar.vertical svg": "top:-1px;", + "X .modebar.vertical .modebar-group": "display:block;float:none;margin-left:0px;margin-bottom:8px;", + "X .modebar.vertical .modebar-group .modebar-btn": "display:block;text-align:center;", "X [data-title]:before,X [data-title]:after": "position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;", "X [data-title]:hover:before,X [data-title]:hover:after": "display:block;opacity:1;", "X [data-title]:before": "content:'';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;", "X [data-title]:after": "content:attr(data-title);background:#69738a;color:white;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;", + "X .vertical [data-title]:before,X .vertical [data-title]:after": "top:0%;right:200%;", + "X .vertical [data-title]:before": "border:6px solid transparent;border-left-color:#69738a;margin-top:8px;margin-right:-30px;", "X .select-outline": "fill:none;stroke-width:1;shape-rendering:crispEdges;", "X .select-outline-1": "stroke:white;", "X .select-outline-2": "stroke:black;stroke-dasharray:2px 2px;", @@ -70,7 +72,7 @@ for(var selector in rules) { Lib.addStyleRule(fullSelector, rules[selector]); } -},{"../src/lib":169}],2:[function(_dereq_,module,exports){ +},{"../src/lib":168}],2:[function(_dereq_,module,exports){ 'use strict'; module.exports = { @@ -105,13 +107,13 @@ module.exports = { 'transform': 'matrix(1 0 0 -1 0 850)' }, 'zoom_plus': { - 'width': 1000, + 'width': 875, 'height': 1000, 'path': 'm1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z', 'transform': 'matrix(1 0 0 -1 0 850)' }, 'zoom_minus': { - 'width': 1000, + 'width': 875, 'height': 1000, 'path': 'm0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z', 'transform': 'matrix(1 0 0 -1 0 850)' @@ -193,12 +195,16 @@ module.exports = { 'height': 1000, 'path': 'M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z', 'transform': 'matrix(1.5 0 0 -1.5 0 850)' + }, + 'newplotlylogo': { + 'name': 'newplotlylogo', + 'svg': 'plotly-logomark' } }; },{}],3:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -211,7 +217,7 @@ module.exports = _dereq_('../src/traces/bar'); },{"../src/traces/bar":274}],4:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -224,7 +230,7 @@ module.exports = _dereq_('../src/traces/box'); },{"../src/traces/box":288}],5:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -237,7 +243,7 @@ module.exports = _dereq_('../src/traces/contour'); },{"../src/traces/contour":308}],6:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -248,9 +254,9 @@ module.exports = _dereq_('../src/traces/contour'); module.exports = _dereq_('../src/core'); -},{"../src/core":153}],7:[function(_dereq_,module,exports){ +},{"../src/core":151}],7:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -263,7 +269,7 @@ module.exports = _dereq_('../src/traces/heatmap'); },{"../src/traces/heatmap":324}],8:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -276,7 +282,7 @@ module.exports = _dereq_('../src/traces/histogram'); },{"../src/traces/histogram":342}],9:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -287,9 +293,9 @@ module.exports = _dereq_('../src/traces/histogram'); module.exports = _dereq_('../src/traces/histogram2d'); -},{"../src/traces/histogram2d":348}],10:[function(_dereq_,module,exports){ +},{"../src/traces/histogram2d":349}],10:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -300,9 +306,9 @@ module.exports = _dereq_('../src/traces/histogram2d'); module.exports = _dereq_('../src/traces/histogram2dcontour'); -},{"../src/traces/histogram2dcontour":352}],11:[function(_dereq_,module,exports){ +},{"../src/traces/histogram2dcontour":353}],11:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -330,7 +336,7 @@ module.exports = Plotly; },{"./bar":3,"./box":4,"./contour":5,"./core":6,"./heatmap":7,"./histogram":8,"./histogram2d":9,"./histogram2dcontour":10,"./pie":12,"./scatterternary":13,"./violin":14}],12:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -341,9 +347,9 @@ module.exports = Plotly; module.exports = _dereq_('../src/traces/pie'); -},{"../src/traces/pie":359}],13:[function(_dereq_,module,exports){ +},{"../src/traces/pie":360}],13:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -354,9 +360,9 @@ module.exports = _dereq_('../src/traces/pie'); module.exports = _dereq_('../src/traces/scatterternary'); -},{"../src/traces/scatterternary":398}],14:[function(_dereq_,module,exports){ +},{"../src/traces/scatterternary":399}],14:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -367,7 +373,7 @@ module.exports = _dereq_('../src/traces/scatterternary'); module.exports = _dereq_('../src/traces/violin'); -},{"../src/traces/violin":406}],15:[function(_dereq_,module,exports){ +},{"../src/traces/violin":407}],15:[function(_dereq_,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -11604,7 +11610,7 @@ return Promise; }))); }).call(this,_dereq_('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":32}],18:[function(_dereq_,module,exports){ +},{"_process":33}],18:[function(_dereq_,module,exports){ /** * inspired by is-number * but significantly simplified and sped up by ignoring number and string constructors @@ -11615,38 +11621,7 @@ return Promise; 'use strict'; -/** - * Is this string all whitespace? - * This solution kind of makes my brain hurt, but it's significantly faster - * than !str.trim() or any other solution I could find. - * - * whitespace codes from: http://en.wikipedia.org/wiki/Whitespace_character - * and verified with: - * - * for(var i = 0; i < 65536; i++) { - * var s = String.fromCharCode(i); - * if(+s===0 && !s.trim()) console.log(i, s); - * } - * - * which counts a couple of these as *not* whitespace, but finds nothing else - * that *is* whitespace. Note that charCodeAt stops at 16 bits, but it appears - * that there are no whitespace characters above this, and code points above - * this do not map onto white space characters. - */ -function allBlankCharCodes(str){ - var l = str.length, - a; - for(var i = 0; i < l; i++) { - a = str.charCodeAt(i); - if((a < 9 || a > 13) && (a !== 32) && (a !== 133) && (a !== 160) && - (a !== 5760) && (a !== 6158) && (a < 8192 || a > 8205) && - (a !== 8232) && (a !== 8233) && (a !== 8239) && (a !== 8287) && - (a !== 8288) && (a !== 12288) && (a !== 65279)) { - return false; - } - } - return true; -} +var allBlankCharCodes = _dereq_('is-string-blank'); module.exports = function(n) { var type = typeof n; @@ -11661,7 +11636,7 @@ module.exports = function(n) { return n - n < 1; }; -},{}],19:[function(_dereq_,module,exports){ +},{"is-string-blank":23}],19:[function(_dereq_,module,exports){ module.exports = fromQuat; /** @@ -11755,6 +11730,43 @@ module.exports = isBrowser && detect() },{"is-browser":22}],22:[function(_dereq_,module,exports){ module.exports = true; },{}],23:[function(_dereq_,module,exports){ +'use strict'; + +/** + * Is this string all whitespace? + * This solution kind of makes my brain hurt, but it's significantly faster + * than !str.trim() or any other solution I could find. + * + * whitespace codes from: http://en.wikipedia.org/wiki/Whitespace_character + * and verified with: + * + * for(var i = 0; i < 65536; i++) { + * var s = String.fromCharCode(i); + * if(+s===0 && !s.trim()) console.log(i, s); + * } + * + * which counts a couple of these as *not* whitespace, but finds nothing else + * that *is* whitespace. Note that charCodeAt stops at 16 bits, but it appears + * that there are no whitespace characters above this, and code points above + * this do not map onto white space characters. + */ + +module.exports = function(str){ + var l = str.length, + a; + for(var i = 0; i < l; i++) { + a = str.charCodeAt(i); + if((a < 9 || a > 13) && (a !== 32) && (a !== 133) && (a !== 160) && + (a !== 5760) && (a !== 6158) && (a < 8192 || a > 8205) && + (a !== 8232) && (a !== 8233) && (a !== 8239) && (a !== 8287) && + (a !== 8288) && (a !== 12288) && (a !== 65279)) { + return false; + } + } + return true; +} + +},{}],24:[function(_dereq_,module,exports){ var rootPosition = { left: 0, top: 0 } module.exports = mouseEventOffset @@ -11781,7 +11793,7 @@ function getBoundingClientOffset (element) { } } -},{}],24:[function(_dereq_,module,exports){ +},{}],25:[function(_dereq_,module,exports){ /* * @copyright 2016 Sean Connelly (@voidqk), http://syntheti.cc * @license MIT @@ -11909,7 +11921,7 @@ if (typeof window === 'object') module.exports = PolyBool; -},{"./lib/build-log":25,"./lib/epsilon":26,"./lib/geojson":27,"./lib/intersecter":28,"./lib/segment-chainer":30,"./lib/segment-selector":31}],25:[function(_dereq_,module,exports){ +},{"./lib/build-log":26,"./lib/epsilon":27,"./lib/geojson":28,"./lib/intersecter":29,"./lib/segment-chainer":31,"./lib/segment-selector":32}],26:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -12024,7 +12036,7 @@ function BuildLog(){ module.exports = BuildLog; -},{}],26:[function(_dereq_,module,exports){ +},{}],27:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -12196,7 +12208,7 @@ function Epsilon(eps){ module.exports = Epsilon; -},{}],27:[function(_dereq_,module,exports){ +},{}],28:[function(_dereq_,module,exports){ // (c) Copyright 2017, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -12386,7 +12398,7 @@ var GeoJSON = { module.exports = GeoJSON; -},{}],28:[function(_dereq_,module,exports){ +},{}],29:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -12893,7 +12905,7 @@ function Intersecter(selfIntersection, eps, buildLog){ module.exports = Intersecter; -},{"./linked-list":29}],29:[function(_dereq_,module,exports){ +},{"./linked-list":30}],30:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -12976,7 +12988,7 @@ var LinkedList = { module.exports = LinkedList; -},{}],30:[function(_dereq_,module,exports){ +},{}],31:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -13230,7 +13242,7 @@ function SegmentChainer(segments, eps, buildLog){ module.exports = SegmentChainer; -},{}],31:[function(_dereq_,module,exports){ +},{}],32:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -13398,7 +13410,7 @@ var SegmentSelector = { module.exports = SegmentSelector; -},{}],32:[function(_dereq_,module,exports){ +},{}],33:[function(_dereq_,module,exports){ // shim for using process in browser var process = module.exports = {}; @@ -13584,7 +13596,7 @@ process.chdir = function (dir) { }; process.umask = function() { return 0; }; -},{}],33:[function(_dereq_,module,exports){ +},{}],34:[function(_dereq_,module,exports){ // TinyColor v1.4.1 // https://github.com/bgrins/TinyColor // Brian Grinstead, MIT License @@ -14781,9 +14793,9 @@ else { })(Math); -},{}],34:[function(_dereq_,module,exports){ +},{}],35:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -14852,9 +14864,9 @@ module.exports = [ } ]; -},{}],35:[function(_dereq_,module,exports){ +},{}],36:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15207,9 +15219,9 @@ module.exports = templatedArray('annotation', { } }); -},{"../../plot_api/plot_template":204,"../../plots/cartesian/constants":219,"../../plots/font_attributes":240,"./arrow_paths":34}],36:[function(_dereq_,module,exports){ +},{"../../plot_api/plot_template":202,"../../plots/cartesian/constants":218,"../../plots/font_attributes":239,"./arrow_paths":35}],37:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15296,9 +15308,9 @@ function calcAxisExpansion(ann, ax) { ann._extremes[axId] = extremes; } -},{"../../lib":169,"../../plots/cartesian/axes":214,"./draw":41}],37:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"./draw":42}],38:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15381,11 +15393,11 @@ function onClick(gd, hoverData) { * } */ function getToggleSets(gd, hoverData) { - var annotations = gd._fullLayout.annotations, - onSet = [], - offSet = [], - explicitOffSet = [], - hoverLen = (hoverData || []).length; + var annotations = gd._fullLayout.annotations; + var onSet = []; + var offSet = []; + var explicitOffSet = []; + var hoverLen = (hoverData || []).length; var i, j, anni, showMode, pointj, xa, ya, toggleType; @@ -15435,9 +15447,9 @@ function clickData2r(d, ax) { return ax.type === 'log' ? ax.l2r(d) : ax.d2r(d); } -},{"../../lib":169,"../../plot_api/plot_template":204,"../../registry":259}],38:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../registry":257}],39:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15515,9 +15527,9 @@ module.exports = function handleAnnotationCommonDefaults(annIn, annOut, fullLayo coerce('captureevents', !!hoverText); }; -},{"../../lib":169,"../color":50}],39:[function(_dereq_,module,exports){ +},{"../../lib":168,"../color":51}],40:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15546,19 +15558,19 @@ var toLogRange = _dereq_('../../lib/to_log_range'); module.exports = function convertCoords(gd, ax, newType, doExtra) { ax = ax || {}; - var toLog = (newType === 'log') && (ax.type === 'linear'), - fromLog = (newType === 'linear') && (ax.type === 'log'); + var toLog = (newType === 'log') && (ax.type === 'linear'); + var fromLog = (newType === 'linear') && (ax.type === 'log'); if(!(toLog || fromLog)) return; - var annotations = gd._fullLayout.annotations, - axLetter = ax._id.charAt(0), - ann, - attrPrefix; + var annotations = gd._fullLayout.annotations; + var axLetter = ax._id.charAt(0); + var ann; + var attrPrefix; function convert(attr) { - var currentVal = ann[attr], - newVal = null; + var currentVal = ann[attr]; + var newVal = null; if(toLog) newVal = toLogRange(currentVal, ax.range); else newVal = Math.pow(10, currentVal); @@ -15578,9 +15590,9 @@ module.exports = function convertCoords(gd, ax, newType, doExtra) { } }; -},{"../../lib/to_log_range":193,"fast-isnumeric":18}],40:[function(_dereq_,module,exports){ +},{"../../lib/to_log_range":191,"fast-isnumeric":18}],41:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15620,9 +15632,10 @@ function handleAnnotationDefaults(annIn, annOut, fullLayout) { var showArrow = annOut.showarrow; // positioning - var axLetters = ['x', 'y'], - arrowPosDflt = [-10, -30], - gdMock = {_fullLayout: fullLayout}; + var axLetters = ['x', 'y']; + var arrowPosDflt = [-10, -30]; + var gdMock = {_fullLayout: fullLayout}; + for(var i = 0; i < 2; i++) { var axLetter = axLetters[i]; @@ -15638,9 +15651,9 @@ function handleAnnotationDefaults(annIn, annOut, fullLayout) { Axes.coercePosition(annOut, gdMock, coerce, axRef, axLetter, 0.5); if(showArrow) { - var arrowPosAttr = 'a' + axLetter, - // axref, ayref - aaxRef = Axes.coerceRef(annIn, annOut, gdMock, arrowPosAttr, 'pixel'); + var arrowPosAttr = 'a' + axLetter; + // axref, ayref + var aaxRef = Axes.coerceRef(annIn, annOut, gdMock, arrowPosAttr, 'pixel'); // for now the arrow can only be on the same axis or specified as pixels // TODO: sometime it might be interesting to allow it to be on *any* axis @@ -15684,9 +15697,9 @@ function handleAnnotationDefaults(annIn, annOut, fullLayout) { } } -},{"../../lib":169,"../../plots/array_container_defaults":210,"../../plots/cartesian/axes":214,"./attributes":35,"./common_defaults":38}],41:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"../../plots/cartesian/axes":212,"./attributes":36,"./common_defaults":39}],42:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15754,6 +15767,9 @@ function drawOne(gd, index) { var xa = Axes.getFromId(gd, options.xref); var ya = Axes.getFromId(gd, options.yref); + if(xa) xa.setScale(); + if(ya) ya.setScale(); + drawRaw(gd, options, index, false, xa, ya); } @@ -15804,8 +15820,8 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { // calculated pixel positions // x & y each will get text, head, and tail as appropriate - var annPosPx = {x: {}, y: {}}, - textangle = +options.textangle || 0; + var annPosPx = {x: {}, y: {}}; + var textangle = +options.textangle || 0; // create the components // made a single group to contain all, so opacity can work right @@ -15872,9 +15888,9 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { }); } - var borderwidth = options.borderwidth, - borderpad = options.borderpad, - borderfull = borderwidth + borderpad; + var borderwidth = options.borderwidth; + var borderpad = options.borderpad; + var borderfull = borderwidth + borderpad; var annTextBG = annTextGroupInner.append('rect') .attr('class', 'bg') @@ -15896,9 +15912,13 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { var font = options.font; + var text = fullLayout.meta ? + Lib.templateString(options.text, {meta: fullLayout.meta}) : + options.text; + var annText = annTextGroupInner.append('text') .classed('annotation-text', true) - .text(options.text); + .text(text); function textLayout(s) { s.call(Drawing.font, font) @@ -15957,24 +15977,24 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { var letters = ['x', 'y']; for(var i = 0; i < letters.length; i++) { - var axLetter = letters[i], - axRef = options[axLetter + 'ref'] || axLetter, - tailRef = options['a' + axLetter + 'ref'], - ax = {x: xa, y: ya}[axLetter], - dimAngle = (textangle + (axLetter === 'x' ? 0 : -90)) * Math.PI / 180, - // note that these two can be either positive or negative - annSizeFromWidth = outerWidth * Math.cos(dimAngle), - annSizeFromHeight = outerHeight * Math.sin(dimAngle), - // but this one is the positive total size - annSize = Math.abs(annSizeFromWidth) + Math.abs(annSizeFromHeight), - anchor = options[axLetter + 'anchor'], - overallShift = options[axLetter + 'shift'] * (axLetter === 'x' ? 1 : -1), - posPx = annPosPx[axLetter], - basePx, - textPadShift, - alignPosition, - autoAlignFraction, - textShift; + var axLetter = letters[i]; + var axRef = options[axLetter + 'ref'] || axLetter; + var tailRef = options['a' + axLetter + 'ref']; + var ax = {x: xa, y: ya}[axLetter]; + var dimAngle = (textangle + (axLetter === 'x' ? 0 : -90)) * Math.PI / 180; + // note that these two can be either positive or negative + var annSizeFromWidth = outerWidth * Math.cos(dimAngle); + var annSizeFromHeight = outerHeight * Math.sin(dimAngle); + // but this one is the positive total size + var annSize = Math.abs(annSizeFromWidth) + Math.abs(annSizeFromHeight); + var anchor = options[axLetter + 'anchor']; + var overallShift = options[axLetter + 'shift'] * (axLetter === 'x' ? 1 : -1); + var posPx = annPosPx[axLetter]; + var basePx; + var textPadShift; + var alignPosition; + var autoAlignFraction; + var textShift; /* * calculate the *primary* pixel position @@ -16040,8 +16060,8 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { posPx.head = Lib.constrain(posPx.head, 1, maxPx - 1); } if(tailRef === 'pixel') { - var shiftPlus = -Math.max(posPx.tail - 3, posPx.text), - shiftMinus = Math.min(posPx.tail + 3, posPx.text) - maxPx; + var shiftPlus = -Math.max(posPx.tail - 3, posPx.text); + var shiftMinus = Math.min(posPx.tail + 3, posPx.text) - maxPx; if(shiftPlus > 0) { posPx.tail += shiftPlus; posPx.text += shiftPlus; @@ -16098,14 +16118,14 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { x: borderfull + xShift - 1, y: borderfull + yShift }) - .call(Drawing.setClipUrl, isSizeConstrained ? annClipID : null); + .call(Drawing.setClipUrl, isSizeConstrained ? annClipID : null, gd); } else { var texty = borderfull + yShift - anntextBB.top; var textx = borderfull + xShift - anntextBB.left; annText.call(svgTextUtils.positionText, textx, texty) - .call(Drawing.setClipUrl, isSizeConstrained ? annClipID : null); + .call(Drawing.setClipUrl, isSizeConstrained ? annClipID : null, gd); } annTextClip.select('rect').call(Drawing.setRect, borderfull, borderfull, @@ -16138,32 +16158,32 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { .selectAll('.annotation-arrow-g') .remove(); - var headX = annPosPx.x.head, - headY = annPosPx.y.head, - tailX = annPosPx.x.tail + dx, - tailY = annPosPx.y.tail + dy, - textX = annPosPx.x.text + dx, - textY = annPosPx.y.text + dy, + var headX = annPosPx.x.head; + var headY = annPosPx.y.head; + var tailX = annPosPx.x.tail + dx; + var tailY = annPosPx.y.tail + dy; + var textX = annPosPx.x.text + dx; + var textY = annPosPx.y.text + dy; - // find the edge of the text box, where we'll start the arrow: - // create transform matrix to rotate the text box corners - transform = Lib.rotationXYMatrix(textangle, textX, textY), - applyTransform = Lib.apply2DTransform(transform), - applyTransform2 = Lib.apply2DTransform2(transform), + // find the edge of the text box, where we'll start the arrow: + // create transform matrix to rotate the text box corners + var transform = Lib.rotationXYMatrix(textangle, textX, textY); + var applyTransform = Lib.apply2DTransform(transform); + var applyTransform2 = Lib.apply2DTransform2(transform); - // calculate and transform bounding box - width = +annTextBG.attr('width'), - height = +annTextBG.attr('height'), - xLeft = textX - 0.5 * width, - xRight = xLeft + width, - yTop = textY - 0.5 * height, - yBottom = yTop + height, - edges = [ - [xLeft, yTop, xLeft, yBottom], - [xLeft, yBottom, xRight, yBottom], - [xRight, yBottom, xRight, yTop], - [xRight, yTop, xLeft, yTop] - ].map(applyTransform2); + // calculate and transform bounding box + var width = +annTextBG.attr('width'); + var height = +annTextBG.attr('height'); + var xLeft = textX - 0.5 * width; + var xRight = xLeft + width; + var yTop = textY - 0.5 * height; + var yBottom = yTop + height; + var edges = [ + [xLeft, yTop, xLeft, yBottom], + [xLeft, yBottom, xRight, yBottom], + [xRight, yBottom, xRight, yTop], + [xRight, yTop, xLeft, yTop] + ].map(applyTransform2); // Remove the line if it ends inside the box. Use ray // casting for rotated boxes: see which edges intersect a @@ -16187,9 +16207,9 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { } }); - var strokewidth = options.arrowwidth, - arrowColor = options.arrowcolor, - arrowSide = options.arrowside; + var strokewidth = options.arrowwidth; + var arrowColor = options.arrowcolor; + var arrowSide = options.arrowside; var arrowGroup = annGroup.append('g') .style({opacity: Color.opacity(arrowColor)}) @@ -16244,9 +16264,9 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { } }, moveFn: function(dx, dy) { - var annxy0 = applyTransform(annx0, anny0), - xcenter = annxy0[0] + dx, - ycenter = annxy0[1] + dy; + var annxy0 = applyTransform(annx0, anny0); + var xcenter = annxy0[0] + dx; + var ycenter = annxy0[1] + dy; annTextGroupInner.call(Drawing.setTranslate, xcenter, ycenter); modifyItem('x', xa ? @@ -16271,7 +16291,7 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { }); }, doneFn: function() { - Registry.call('relayout', gd, getUpdateObj()); + Registry.call('_guiRelayout', gd, getUpdateObj()); var notesBox = document.querySelector('.js-notes-box-panel'); if(notesBox) notesBox.redraw(notesBox.selectedObj); } @@ -16316,9 +16336,8 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { xUpdate = xa.p2r(xa.r2p(options.x) + dx); } else { - var widthFraction = options._xsize / gs.w, - xLeft = options.x + (options._xshift - options.xshift) / gs.w - - widthFraction / 2; + var widthFraction = options._xsize / gs.w; + var xLeft = options.x + (options._xshift - options.xshift) / gs.w - widthFraction / 2; xUpdate = dragElement.align(xLeft + dx / gs.w, widthFraction, 0, 1, options.xanchor); @@ -16327,9 +16346,8 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { if(ya) { yUpdate = ya.p2r(ya.r2p(options.y) + dy); } else { - var heightFraction = options._ysize / gs.h, - yBottom = options.y - (options._yshift + options.yshift) / gs.h - - heightFraction / 2; + var heightFraction = options._ysize / gs.h; + var yBottom = options.y - (options._yshift + options.yshift) / gs.h - heightFraction / 2; yUpdate = dragElement.align(yBottom - dy / gs.h, heightFraction, 0, 1, options.yanchor); @@ -16354,7 +16372,7 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { }, doneFn: function() { setCursor(annTextGroupInner); - Registry.call('relayout', gd, getUpdateObj()); + Registry.call('_guiRelayout', gd, getUpdateObj()); var notesBox = document.querySelector('.js-notes-box-panel'); if(notesBox) notesBox.redraw(notesBox.selectedObj); } @@ -16367,6 +16385,7 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { .call(textLayout) .on('edit', function(_text) { options.text = _text; + this.call(textLayout); modifyItem('text', _text); @@ -16378,15 +16397,15 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { modifyBase(ya._name + '.autorange', true); } - Registry.call('relayout', gd, getUpdateObj()); + Registry.call('_guiRelayout', gd, getUpdateObj()); }); } else annText.call(textLayout); } -},{"../../lib":169,"../../lib/setcursor":189,"../../lib/svg_text_utils":191,"../../plot_api/plot_template":204,"../../plots/cartesian/axes":214,"../../plots/plots":246,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"../fx":92,"./draw_arrow_head":42,"d3":16}],42:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../lib/setcursor":187,"../../lib/svg_text_utils":189,"../../plot_api/plot_template":202,"../../plots/cartesian/axes":212,"../../plots/plots":245,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"../fx":90,"./draw_arrow_head":43,"d3":16}],43:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16456,8 +16475,8 @@ module.exports = function drawArrowHead(el3, ends, options) { hideLine(); return; } - var backOffX = backOff * Math.cos(startRot), - backOffY = backOff * Math.sin(startRot); + var backOffX = backOff * Math.cos(startRot); + var backOffY = backOff * Math.sin(startRot); end.x += backOffX; end.y += backOffY; @@ -16470,8 +16489,8 @@ module.exports = function drawArrowHead(el3, ends, options) { hideLine(); return; } - var startBackOffX = startBackOff * Math.cos(startRot), - startbackOffY = startBackOff * Math.sin(startRot); + var startBackOffX = startBackOff * Math.cos(startRot); + var startbackOffY = startBackOff * Math.sin(startRot); start.x -= startBackOffX; start.y -= startbackOffY; @@ -16480,12 +16499,12 @@ module.exports = function drawArrowHead(el3, ends, options) { } } else if(el.nodeName === 'path') { - var pathlen = el.getTotalLength(), - // using dash to hide the backOff region of the path. - // if we ever allow dash for the arrow we'll have to - // do better than this hack... maybe just manually - // combine the two - dashArray = ''; + var pathlen = el.getTotalLength(); + // using dash to hide the backOff region of the path. + // if we ever allow dash for the arrow we'll have to + // do better than this hack... maybe just manually + // combine the two + var dashArray = ''; if(pathlen < backOff + startBackOff) { hideLine(); @@ -16538,9 +16557,9 @@ module.exports = function drawArrowHead(el3, ends, options) { if(doEnd) drawhead(headStyle, end, endRot, scale); }; -},{"../color":50,"./arrow_paths":34,"d3":16}],43:[function(_dereq_,module,exports){ +},{"../color":51,"./arrow_paths":35,"d3":16}],44:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16572,9 +16591,9 @@ module.exports = { convertCoords: _dereq_('./convert_coords') }; -},{"../../plots/cartesian/include_components":224,"./attributes":35,"./calc_autorange":36,"./click":37,"./convert_coords":39,"./defaults":40,"./draw":41}],44:[function(_dereq_,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-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16660,9 +16679,9 @@ module.exports = overrideAll(templatedArray('annotation', { // zref: 'z' }), 'calc', 'from-root'); -},{"../../plot_api/edit_types":197,"../../plot_api/plot_template":204,"../annotations/attributes":35}],45:[function(_dereq_,module,exports){ +},{"../../plot_api/edit_types":195,"../../plot_api/plot_template":202,"../annotations/attributes":36}],46:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16725,9 +16744,9 @@ function mockAnnAxes(ann, scene) { }; } -},{"../../lib":169,"../../plots/cartesian/axes":214}],46:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212}],47:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16801,9 +16820,9 @@ function handleAnnotationDefaults(annIn, annOut, sceneLayout, opts) { } } -},{"../../lib":169,"../../plots/array_container_defaults":210,"../../plots/cartesian/axes":214,"../annotations/common_defaults":38,"./attributes":44}],47:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"../../plots/cartesian/axes":212,"../annotations/common_defaults":39,"./attributes":45}],48:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16853,9 +16872,9 @@ module.exports = function draw(scene) { } }; -},{"../../plots/gl3d/project":243,"../annotations/draw":41}],48:[function(_dereq_,module,exports){ +},{"../../plots/gl3d/project":242,"../annotations/draw":42}],49:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16901,9 +16920,9 @@ function includeGL3D(layoutIn, layoutOut) { } } -},{"../../lib":169,"../../registry":259,"./attributes":44,"./convert":45,"./defaults":46,"./draw":47}],49:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"./attributes":45,"./convert":46,"./defaults":47,"./draw":48}],50:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16941,9 +16960,9 @@ exports.borderLine = '#BEC8D9'; // gives back exactly lightLine if the other colors are defaults. exports.lightFraction = 100 * (0xe - 0x4) / (0xf - 0x4); -},{}],50:[function(_dereq_,module,exports){ +},{}],51:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16991,17 +17010,17 @@ color.combine = function(front, back) { var fc = tinycolor(front).toRgb(); if(fc.a === 1) return tinycolor(front).toRgbString(); - var bc = tinycolor(back || background).toRgb(), - bcflat = bc.a === 1 ? bc : { - r: 255 * (1 - bc.a) + bc.r * bc.a, - g: 255 * (1 - bc.a) + bc.g * bc.a, - b: 255 * (1 - bc.a) + bc.b * bc.a - }, - fcflat = { - r: bcflat.r * (1 - fc.a) + fc.r * fc.a, - g: bcflat.g * (1 - fc.a) + fc.g * fc.a, - b: bcflat.b * (1 - fc.a) + fc.b * fc.a - }; + var bc = tinycolor(back || background).toRgb(); + var bcflat = bc.a === 1 ? bc : { + r: 255 * (1 - bc.a) + bc.r * bc.a, + g: 255 * (1 - bc.a) + bc.g * bc.a, + b: 255 * (1 - bc.a) + bc.b * bc.a + }; + var fcflat = { + r: bcflat.r * (1 - fc.a) + fc.r * fc.a, + g: bcflat.g * (1 - fc.a) + fc.g * fc.a, + b: bcflat.b * (1 - fc.a) + fc.b * fc.a + }; return tinycolor(fcflat).toRgbString(); }; @@ -17043,11 +17062,8 @@ color.fill = function(s, c) { color.clean = function(container) { if(!container || typeof container !== 'object') return; - var keys = Object.keys(container), - i, - j, - key, - val; + var keys = Object.keys(container); + var i, j, key, val; for(i = 0; i < keys.length; i++) { key = keys[i]; @@ -17086,8 +17102,8 @@ function cleanOne(val) { var match = valTrim.match(/^rgba?\s*\(([^()]*)\)$/); if(!match) return val; - var parts = match[1].trim().split(/\s*[\s,]\s*/), - rgba = valTrim.charAt(3) === 'a' && parts.length === 4; + var parts = match[1].trim().split(/\s*[\s,]\s*/); + var rgba = valTrim.charAt(3) === 'a' && parts.length === 4; if(!rgba && parts.length !== 3) return val; for(var i = 0; i < parts.length; i++) { @@ -17112,9 +17128,9 @@ function cleanOne(val) { return 'rgb(' + rgbStr + ')'; } -},{"./attributes":49,"fast-isnumeric":18,"tinycolor2":33}],51:[function(_dereq_,module,exports){ +},{"./attributes":50,"fast-isnumeric":18,"tinycolor2":34}],52:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17255,35 +17271,55 @@ module.exports = overrideAll({ exponentformat: axesAttrs.exponentformat, showexponent: axesAttrs.showexponent, title: { - valType: 'string', - - + text: { + valType: 'string', + + + }, + font: fontAttrs({ + + }), + side: { + valType: 'enumerated', + values: ['right', 'top', 'bottom'], + + dflt: 'top', + + } }, - titlefont: fontAttrs({ - - }), - titleside: { - valType: 'enumerated', - values: ['right', 'top', 'bottom'], - - dflt: 'top', - + + _deprecated: { + title: { + valType: 'string', + + + }, + titlefont: fontAttrs({ + + }), + titleside: { + valType: 'enumerated', + values: ['right', 'top', 'bottom'], + + dflt: 'top', + + } } }, 'colorbars', 'from-root'); -},{"../../lib/extend":163,"../../plot_api/edit_types":197,"../../plots/cartesian/layout_attributes":226,"../../plots/font_attributes":240}],52:[function(_dereq_,module,exports){ +},{"../../lib/extend":162,"../../plot_api/edit_types":195,"../../plots/cartesian/layout_attributes":225,"../../plots/font_attributes":239}],53:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 drawColorbar = _dereq_('./draw'); +var flipScale = _dereq_('../colorscale/helpers').flipScale; /** * connectColorbar: create a colorbar from a trace, using its module to @@ -17315,22 +17351,33 @@ module.exports = function connectColorbar(gd, cd, moduleOpts) { var trace = cd[0].trace; var cbId = 'cb' + trace.uid; - var containerName = moduleOpts.container; - var container = containerName ? trace[containerName] : trace; + moduleOpts = Array.isArray(moduleOpts) ? moduleOpts : [moduleOpts]; - gd._fullLayout._infolayer.selectAll('.' + cbId).remove(); - if(!container || !container.showscale) return; + for(var i = 0; i < moduleOpts.length; i++) { + var containerName = moduleOpts[i].container; - var cb = cd[0].t.cb = drawColorbar(gd, cbId); + var container = containerName ? trace[containerName] : trace; - cb.fillgradient(container.colorscale) - .zrange([container[moduleOpts.min], container[moduleOpts.max]]) - .options(container.colorbar)(); + gd._fullLayout._infolayer.selectAll('.' + cbId).remove(); + if(!container || !container.showscale) continue; + + var cb = cd[0].t.cb = drawColorbar(gd, cbId); + + var scl = container.reversescale ? + flipScale(container.colorscale) : + container.colorscale; + + cb.fillgradient(scl) + .zrange([container[moduleOpts[i].min], container[moduleOpts[i].max]]) + .options(container.colorbar)(); + + return; + } }; -},{"./draw":55}],53:[function(_dereq_,module,exports){ +},{"../colorscale/helpers":62,"./draw":56}],54:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17356,9 +17403,9 @@ module.exports = { } }; -},{}],54:[function(_dereq_,module,exports){ +},{}],55:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17377,10 +17424,9 @@ var handleTickLabelDefaults = _dereq_('../../plots/cartesian/tick_label_defaults var attributes = _dereq_('./attributes'); - module.exports = function colorbarDefaults(containerIn, containerOut, layout) { - var colorbarOut = Template.newContainer(containerOut, 'colorbar'), - colorbarIn = containerIn.colorbar || {}; + var colorbarOut = Template.newContainer(containerOut, 'colorbar'); + var colorbarIn = containerIn.colorbar || {}; function coerce(attr, dflt) { return Lib.coerce(colorbarIn, colorbarOut, attributes, attr, dflt); @@ -17418,14 +17464,14 @@ module.exports = function colorbarDefaults(containerIn, containerOut, layout) { handleTickLabelDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts); handleTickMarkDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts); - coerce('title', layout._dfltTitle.colorbar); - Lib.coerceFont(coerce, 'titlefont', layout.font); - coerce('titleside'); + coerce('title.text', layout._dfltTitle.colorbar); + Lib.coerceFont(coerce, 'title.font', layout.font); + coerce('title.side'); }; -},{"../../lib":169,"../../plot_api/plot_template":204,"../../plots/cartesian/tick_label_defaults":233,"../../plots/cartesian/tick_mark_defaults":234,"../../plots/cartesian/tick_value_defaults":235,"./attributes":51}],55:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../plots/cartesian/tick_label_defaults":232,"../../plots/cartesian/tick_mark_defaults":233,"../../plots/cartesian/tick_value_defaults":234,"./attributes":52}],56:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17490,8 +17536,8 @@ module.exports = function draw(gd, id) { opts.zrange = null; function component() { - var fullLayout = gd._fullLayout, - gs = fullLayout._size; + var fullLayout = gd._fullLayout; + var gs = fullLayout._size; if((typeof opts.fillcolor !== 'function') && (typeof opts.line.color !== 'function') && !opts.fillgradient) { @@ -17509,10 +17555,10 @@ module.exports = function draw(gd, id) { var l; var i; - var l0 = opts.levels.end + opts.levels.size / 100, - ls = opts.levels.size, - zr0 = (1.001 * zrange[0] - 0.001 * zrange[1]), - zr1 = (1.001 * zrange[1] - 0.001 * zrange[0]); + var l0 = opts.levels.end + opts.levels.size / 100; + var ls = opts.levels.size; + var zr0 = (1.001 * zrange[0] - 0.001 * zrange[1]); + var zr1 = (1.001 * zrange[1] - 0.001 * zrange[0]); for(i = 0; i < 1e5; i++) { l = opts.levels.start + i * ls; if(ls > 0 ? (l >= l0) : (l <= l0)) break; @@ -17560,71 +17606,70 @@ module.exports = function draw(gd, id) { // when the colorbar itself is pushing the margins. // but then the fractional size is calculated based on the // actual graph size, so that the axes will size correctly. - var plotHeight = gs.h, - plotWidth = gs.w, - thickPx = Math.round(opts.thickness * - (opts.thicknessmode === 'fraction' ? plotWidth : 1)), - thickFrac = thickPx / gs.w, - lenPx = Math.round(opts.len * - (opts.lenmode === 'fraction' ? plotHeight : 1)), - lenFrac = lenPx / gs.h, - xpadFrac = opts.xpad / gs.w, - yExtraPx = (opts.borderwidth + opts.outlinewidth) / 2, - ypadFrac = opts.ypad / gs.h, + var plotHeight = gs.h; + var plotWidth = gs.w; + var thickPx = Math.round(opts.thickness * (opts.thicknessmode === 'fraction' ? plotWidth : 1)); + var thickFrac = thickPx / gs.w; + var lenPx = Math.round(opts.len * (opts.lenmode === 'fraction' ? plotHeight : 1)); + var lenFrac = lenPx / gs.h; + var xpadFrac = opts.xpad / gs.w; + var yExtraPx = (opts.borderwidth + opts.outlinewidth) / 2; + var ypadFrac = opts.ypad / gs.h; - // x positioning: do it initially just for left anchor, - // then fix at the end (since we don't know the width yet) - xLeft = Math.round(opts.x * gs.w + opts.xpad), - // for dragging... this is getting a little muddled... - xLeftFrac = opts.x - thickFrac * - ({middle: 0.5, right: 1}[opts.xanchor]||0), + // x positioning: do it initially just for left anchor, + // then fix at the end (since we don't know the width yet) + var xLeft = Math.round(opts.x * gs.w + opts.xpad); + // for dragging... this is getting a little muddled... + var xLeftFrac = opts.x - thickFrac * ({middle: 0.5, right: 1}[opts.xanchor]||0); - // y positioning we can do correctly from the start - yBottomFrac = opts.y + lenFrac * - (({top: -0.5, bottom: 0.5}[opts.yanchor] || 0) - 0.5), - yBottomPx = Math.round(gs.h * (1 - yBottomFrac)), - yTopPx = yBottomPx - lenPx, - titleEl, - cbAxisIn = { - type: 'linear', - range: zrange, - tickmode: opts.tickmode, - nticks: opts.nticks, - tick0: opts.tick0, - dtick: opts.dtick, - tickvals: opts.tickvals, - ticktext: opts.ticktext, - ticks: opts.ticks, - ticklen: opts.ticklen, - tickwidth: opts.tickwidth, - tickcolor: opts.tickcolor, - showticklabels: opts.showticklabels, - tickfont: opts.tickfont, - tickangle: opts.tickangle, - tickformat: opts.tickformat, - exponentformat: opts.exponentformat, - separatethousands: opts.separatethousands, - showexponent: opts.showexponent, - showtickprefix: opts.showtickprefix, - tickprefix: opts.tickprefix, - showticksuffix: opts.showticksuffix, - ticksuffix: opts.ticksuffix, - title: opts.title, - titlefont: opts.titlefont, - showline: true, - anchor: 'free', - position: 1 - }, - cbAxisOut = { - type: 'linear', - _id: 'y' + id - }, - axisOptions = { - letter: 'y', - font: fullLayout.font, - noHover: true, - calendar: fullLayout.calendar // not really necessary (yet?) - }; + // y positioning we can do correctly from the start + var yBottomFrac = opts.y + lenFrac * (({top: -0.5, bottom: 0.5}[opts.yanchor] || 0) - 0.5); + var yBottomPx = Math.round(gs.h * (1 - yBottomFrac)); + var yTopPx = yBottomPx - lenPx; + + var titleEl; + + var cbAxisIn = { + type: 'linear', + range: zrange, + tickmode: opts.tickmode, + nticks: opts.nticks, + tick0: opts.tick0, + dtick: opts.dtick, + tickvals: opts.tickvals, + ticktext: opts.ticktext, + ticks: opts.ticks, + ticklen: opts.ticklen, + tickwidth: opts.tickwidth, + tickcolor: opts.tickcolor, + showticklabels: opts.showticklabels, + tickfont: opts.tickfont, + tickangle: opts.tickangle, + tickformat: opts.tickformat, + exponentformat: opts.exponentformat, + separatethousands: opts.separatethousands, + showexponent: opts.showexponent, + showtickprefix: opts.showtickprefix, + tickprefix: opts.tickprefix, + showticksuffix: opts.showticksuffix, + ticksuffix: opts.ticksuffix, + title: opts.title, + showline: true, + anchor: 'free', + side: 'right', + position: 1 + }; + var cbAxisOut = { + type: 'linear', + _id: 'y' + id + }; + var axisOptions = { + letter: 'y', + font: fullLayout.font, + noHover: true, + noTickson: true, + calendar: fullLayout.calendar // not really necessary (yet?) + }; // Coerce w.r.t. Axes layoutAttributes: // re-use axes.js logic without updating _fullData @@ -17643,11 +17688,11 @@ module.exports = function draw(gd, id) { // save for other callers to access this axis component.axis = cbAxisOut; - if(['top', 'bottom'].indexOf(opts.titleside) !== -1) { - cbAxisOut.titleside = opts.titleside; + if(['top', 'bottom'].indexOf(opts.title.side) !== -1) { + cbAxisOut.title.side = opts.title.side; cbAxisOut.titlex = opts.x + xpadFrac; cbAxisOut.titley = yBottomFrac + - (opts.titleside === 'top' ? lenFrac - ypadFrac : ypadFrac); + (opts.title.side === 'top' ? lenFrac - ypadFrac : ypadFrac); } if(opts.line.color && opts.tickmode === 'auto') { @@ -17655,10 +17700,8 @@ module.exports = function draw(gd, id) { cbAxisOut.tick0 = opts.levels.start; var dtick = opts.levels.size; // expand if too many contours, so we don't get too many ticks - var autoNtick = Lib.constrain( - (yBottomPx - yTopPx) / 50, 4, 15) + 1, - dtFactor = (zrange[1] - zrange[0]) / - ((opts.nticks || autoNtick) * dtick); + var autoNtick = Lib.constrain((yBottomPx - yTopPx) / 50, 4, 15) + 1; + var dtFactor = (zrange[1] - zrange[0]) / ((opts.nticks || autoNtick) * dtick); if(dtFactor > 1) { var dtexp = Math.pow(10, Math.floor( Math.log(dtFactor) / Math.LN10)); @@ -17707,17 +17750,18 @@ module.exports = function draw(gd, id) { Math.round(gs.l) + ',-' + Math.round(gs.t) + ')'); - cbAxisOut._axislayer = container.select('.cbaxis'); + var axisLayer = container.select('.cbaxis'); + var titleHeight = 0; - if(['top', 'bottom'].indexOf(opts.titleside) !== -1) { + if(['top', 'bottom'].indexOf(opts.title.side) !== -1) { // draw the title so we know how much room it needs // when we squish the axis. This one only applies to // top or bottom titles, not right side. - var x = gs.l + (opts.x + xpadFrac) * gs.w, - fontSize = cbAxisOut.titlefont.size, - y; + var x = gs.l + (opts.x + xpadFrac) * gs.w; + var fontSize = cbAxisOut.title.font.size; + var y; - if(opts.titleside === 'top') { + if(opts.title.side === 'top') { y = (1 - (yBottomFrac + lenFrac - ypadFrac)) * gs.h + gs.t + 3 + fontSize * 0.75; } @@ -17731,16 +17775,15 @@ module.exports = function draw(gd, id) { } function drawAxis() { - if(['top', 'bottom'].indexOf(opts.titleside) !== -1) { + if(['top', 'bottom'].indexOf(opts.title.side) !== -1) { // squish the axis top to make room for the title - var titleGroup = container.select('.cbtitle'), - titleText = titleGroup.select('text'), - titleTrans = - [-opts.outlinewidth / 2, opts.outlinewidth / 2], - mathJaxNode = titleGroup - .select('.h' + cbAxisOut._id + 'title-math-group') - .node(), - lineSize = 15.6; + var titleGroup = container.select('.cbtitle'); + var titleText = titleGroup.select('text'); + var titleTrans = [-opts.outlinewidth / 2, opts.outlinewidth / 2]; + var mathJaxNode = titleGroup + .select('.h' + cbAxisOut._id + 'title-math-group') + .node(); + var lineSize = 15.6; if(titleText.node()) { lineSize = parseInt(titleText.node().style.fontSize, 10) * LINE_SPACING; @@ -17762,7 +17805,7 @@ module.exports = function draw(gd, id) { // TODO: configurable titleHeight += 5; - if(opts.titleside === 'top') { + if(opts.title.side === 'top') { cbAxisOut.domain[1] -= titleHeight / gs.h; titleTrans[1] *= -1; } @@ -17783,8 +17826,7 @@ module.exports = function draw(gd, id) { .attr('transform', 'translate(0,' + Math.round(gs.h * (1 - cbAxisOut.domain[1])) + ')'); - cbAxisOut._axislayer.attr('transform', 'translate(0,' + - Math.round(-gs.t) + ')'); + axisLayer.attr('transform', 'translate(0,' + Math.round(-gs.t) + ')'); var fills = container.select('.cbfills') .selectAll('rect.cbfill') @@ -17851,12 +17893,7 @@ module.exports = function draw(gd, id) { }); // force full redraw of labels and ticks - cbAxisOut._axislayer.selectAll('g.' + cbAxisOut._id + 'tick,path') - .remove(); - - cbAxisOut._pos = xLeft + thickPx + - (opts.outlinewidth||0) / 2 - (opts.ticks === 'outside' ? 1 : 0); - cbAxisOut.side = 'right'; + axisLayer.selectAll('g.' + cbAxisOut._id + 'tick,path').remove(); // separate out axis and title drawing, // so we don't need such complicated logic in Titles.draw @@ -17864,15 +17901,37 @@ module.exports = function draw(gd, id) { // this title call only handles side=right return Lib.syncOrAsync([ function() { - return Axes.doTicksSingle(gd, cbAxisOut, true); + var shift = xLeft + thickPx + + (opts.outlinewidth || 0) / 2 - (opts.ticks === 'outside' ? 1 : 0); + + var vals = Axes.calcTicks(cbAxisOut); + var transFn = Axes.makeTransFn(cbAxisOut); + var labelFns = Axes.makeLabelFns(cbAxisOut, shift); + var tickSign = Axes.getTickSigns(cbAxisOut)[2]; + + Axes.drawTicks(gd, cbAxisOut, { + vals: cbAxisOut.ticks === 'inside' ? Axes.clipEnds(cbAxisOut, vals) : vals, + layer: axisLayer, + path: Axes.makeTickPath(cbAxisOut, shift, tickSign), + transFn: transFn + }); + + return Axes.drawLabels(gd, cbAxisOut, { + vals: vals, + layer: axisLayer, + transFn: transFn, + labelXFn: labelFns.labelXFn, + labelYFn: labelFns.labelYFn, + labelAnchorFn: labelFns.labelAnchorFn + }); }, function() { - if(['top', 'bottom'].indexOf(opts.titleside) === -1) { - var fontSize = cbAxisOut.titlefont.size, - y = cbAxisOut._offset + cbAxisOut._length / 2, - x = gs.l + (cbAxisOut.position || 0) * gs.w + ((cbAxisOut.side === 'right') ? - 10 + fontSize * ((cbAxisOut.showticklabels ? 1 : 0.5)) : - -10 - fontSize * ((cbAxisOut.showticklabels ? 0.5 : 0))); + if(['top', 'bottom'].indexOf(opts.title.side) === -1) { + var fontSize = cbAxisOut.title.font.size; + var y = cbAxisOut._offset + cbAxisOut._length / 2; + var x = gs.l + (cbAxisOut.position || 0) * gs.w + ((cbAxisOut.side === 'right') ? + 10 + fontSize * ((cbAxisOut.showticklabels ? 1 : 0.5)) : + -10 - fontSize * ((cbAxisOut.showticklabels ? 0.5 : 0))); // the 'h' + is a hack to get around the fact that // convertToTspans rotates any 'y...' class by 90 degrees. @@ -17880,7 +17939,7 @@ module.exports = function draw(gd, id) { drawTitle('h' + cbAxisOut._id + 'title', { avoid: { selection: d3.select(gd).selectAll('g.' + cbAxisOut._id + 'tick'), - side: opts.titleside, + side: opts.title.side, offsetLeft: gs.l, offsetTop: 0, maxShift: fullLayout.width @@ -17893,15 +17952,10 @@ module.exports = function draw(gd, id) { } function drawTitle(titleClass, titleOpts) { - var trace = getTrace(); - var propName = 'colorbar.title'; - var containerName = trace._module.colorbar.container; - if(containerName) propName = containerName + '.' + propName; - var dfltTitleOpts = { propContainer: cbAxisOut, - propName: propName, - traceIndex: trace.index, + propName: getPropName('title'), + traceIndex: getTrace().index, placeholder: fullLayout._dfltTitle.colorbar, containerGroup: container.select('.cbtitle') }; @@ -17925,19 +17979,19 @@ module.exports = function draw(gd, id) { // TODO: why are we redrawing multiple times now with this? // I guess autoMargin doesn't like being post-promise? var innerWidth = thickPx + opts.outlinewidth / 2 + - Drawing.bBox(cbAxisOut._axislayer.node()).width; + Drawing.bBox(axisLayer.node()).width; titleEl = titleCont.select('text'); if(titleEl.node() && !titleEl.classed(cn.jsPlaceholder)) { var mathJaxNode = titleCont .select('.h' + cbAxisOut._id + 'title-math-group') - .node(), - titleWidth; + .node(); + var titleWidth; if(mathJaxNode && - ['top', 'bottom'].indexOf(opts.titleside) !== -1) { + ['top', 'bottom'].indexOf(opts.title.side) !== -1) { titleWidth = Drawing.bBox(mathJaxNode).width; } else { - // note: the formula below works for all titlesides, + // note: the formula below works for all title sides, // (except for top/bottom mathjax, above) // but the weird gs.l is because the titleunshift // transform gets removed by Drawing.bBox @@ -17949,8 +18003,8 @@ module.exports = function draw(gd, id) { } var outerwidth = 2 * opts.xpad + innerWidth + - opts.borderwidth + opts.outlinewidth / 2, - outerheight = yBottomPx - yTopPx; + opts.borderwidth + opts.outlinewidth / 2; + var outerheight = yBottomPx - yTopPx; container.select('.cbbg').attr({ x: xLeft - opts.xpad - @@ -17966,7 +18020,7 @@ module.exports = function draw(gd, id) { container.selectAll('.cboutline').attr({ x: xLeft, y: yTopPx + opts.ypad + - (opts.titleside === 'top' ? titleHeight : 0), + (opts.title.side === 'top' ? titleHeight : 0), width: Math.max(thickPx, 2), height: Math.max(outerheight - 2 * opts.ypad - titleHeight, 2) }) @@ -18053,11 +18107,10 @@ module.exports = function draw(gd, id) { setCursor(container); if(xf !== undefined && yf !== undefined) { - Registry.call('restyle', - gd, - {'colorbar.x': xf, 'colorbar.y': yf}, - getTrace().index - ); + var update = {}; + update[getPropName('x')] = xf; + update[getPropName('y')] = yf; + Registry.call('_guiRestyle', gd, update, getTrace().index); } } }); @@ -18066,15 +18119,21 @@ module.exports = function draw(gd, id) { } function getTrace() { - var idNum = id.substr(2), - i, - trace; - for(i = 0; i < gd._fullData.length; i++) { - trace = gd._fullData[i]; + var idNum = id.substr(2); + for(var i = 0; i < gd._fullData.length; i++) { + var trace = gd._fullData[i]; if(trace.uid === idNum) return trace; } } + function getPropName(suffix) { + var trace = getTrace(); + var propName = 'colorbar.'; + var containerName = trace._module.colorbar.container; + if(containerName) propName = containerName + '.' + propName; + return propName + suffix; + } + // setter/getters for every item defined in opts Object.keys(opts).forEach(function(name) { component[name] = function(v) { @@ -18108,9 +18167,9 @@ module.exports = function draw(gd, id) { return component; }; -},{"../../constants/alignment":148,"../../lib":169,"../../lib/extend":163,"../../lib/setcursor":189,"../../lib/svg_text_utils":191,"../../plots/cartesian/axes":214,"../../plots/cartesian/axis_defaults":216,"../../plots/cartesian/layout_attributes":226,"../../plots/cartesian/position_defaults":229,"../../plots/plots":246,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"../titles":141,"./attributes":51,"./constants":53,"d3":16,"tinycolor2":33}],56:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../lib":168,"../../lib/extend":162,"../../lib/setcursor":187,"../../lib/svg_text_utils":189,"../../plots/cartesian/axes":212,"../../plots/cartesian/axis_defaults":214,"../../plots/cartesian/layout_attributes":225,"../../plots/cartesian/position_defaults":228,"../../plots/plots":245,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"../titles":139,"./attributes":52,"./constants":54,"d3":16,"tinycolor2":34}],57:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18127,9 +18186,9 @@ module.exports = function hasColorbar(container) { return Lib.isPlainObject(container.colorbar); }; -},{"../../lib":169}],57:[function(_dereq_,module,exports){ +},{"../../lib":168}],58:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18138,7 +18197,7 @@ module.exports = function hasColorbar(container) { 'use strict'; -var palettes = _dereq_('./scales.js'); +var palettes = _dereq_('./scales.js').scales; var paletteStr = Object.keys(palettes); function code(s) { @@ -18184,6 +18243,8 @@ function code(s) { * most of these attributes already require a recalc, but the ones that do not * have editType *style* or *plot* unless you override (presumably with *calc*) * + * - anim {boolean) (dflt: undefined): is 'color' animatable? + * * @return {object} */ module.exports = function colorScaleAttrs(context, opts) { @@ -18233,6 +18294,10 @@ module.exports = function colorScaleAttrs(context, opts) { editType: editTypeOverride || 'style', }; + + if(opts.anim) { + attrs.color.anim = true; + } } attrs[auto] = { @@ -18285,7 +18350,7 @@ module.exports = function colorScaleAttrs(context, opts) { valType: 'boolean', dflt: false, - editType: 'calc', + editType: 'plot', }; @@ -18302,58 +18367,28 @@ module.exports = function colorScaleAttrs(context, opts) { return attrs; }; -},{"./scales.js":69}],58:[function(_dereq_,module,exports){ +},{"./scales.js":66}],59:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Lib = _dereq_('../../lib'); -var scales = _dereq_('./scales'); -var flipScale = _dereq_('./flip_scale'); +module.exports = function calc(gd, trace, opts) { + var fullLayout = gd._fullLayout; + var vals = opts.vals; + var containerStr = opts.containerStr; + var cLetter = opts.cLetter; - -module.exports = function calc(trace, vals, containerStr, cLetter) { - var container = trace; - var inputContainer = trace._input; - var fullInputContainer = trace._fullInput; - - // set by traces with groupby transforms - var updateStyle = trace.updateStyle; - - function doUpdate(attr, inputVal, fullVal) { - if(fullVal === undefined) fullVal = inputVal; - - if(updateStyle) { - updateStyle(trace._input, containerStr ? (containerStr + '.' + attr) : attr, inputVal); - } - else { - inputContainer[attr] = inputVal; - } - - container[attr] = fullVal; - if(fullInputContainer && (trace !== trace._fullInput)) { - if(updateStyle) { - updateStyle(trace._fullInput, containerStr ? (containerStr + '.' + attr) : attr, fullVal); - } - else { - fullInputContainer[attr] = fullVal; - } - } - } - - if(containerStr) { - container = Lib.nestedProperty(container, containerStr).get(); - inputContainer = Lib.nestedProperty(inputContainer, containerStr).get(); - fullInputContainer = Lib.nestedProperty(fullInputContainer, containerStr).get() || {}; - } + var container = containerStr ? + Lib.nestedProperty(trace, containerStr).get() : + trace; var autoAttr = cLetter + 'auto'; var minAttr = cLetter + 'min'; @@ -18376,39 +18411,21 @@ module.exports = function calc(trace, vals, containerStr, cLetter) { max += 0.5; } - doUpdate(minAttr, min); - doUpdate(maxAttr, max); - - /* - * If auto was explicitly false but min or max was missing, - * we filled in the missing piece here but later the trace does - * not look auto. - * Otherwise make sure the trace still looks auto as far as later - * changes are concerned. - */ - doUpdate(autoAttr, (auto !== false || (min === undefined && max === undefined))); + container['_' + minAttr] = container[minAttr] = min; + container['_' + maxAttr] = container[maxAttr] = max; if(container.autocolorscale) { - if(min * max < 0) scl = scales.RdBu; - else if(min >= 0) scl = scales.Reds; - else scl = scales.Blues; + if(min * max < 0) scl = fullLayout.colorscale.diverging; + else if(min >= 0) scl = fullLayout.colorscale.sequential; + else scl = fullLayout.colorscale.sequentialminus; - // reversescale is handled at the containerOut level - doUpdate('colorscale', scl, container.reversescale ? flipScale(scl) : scl); - - // We pushed a colorscale back to input, which will change the default autocolorscale next time - // to avoid spurious redraws from Plotly.react, update resulting autocolorscale now - // This is a conscious decision so that changing the data later does not unexpectedly - // give you a new colorscale - if(!inputContainer.autocolorscale) { - doUpdate('autocolorscale', false); - } + container._colorscale = container.colorscale = scl; } }; -},{"../../lib":169,"./flip_scale":62,"./scales":69}],59:[function(_dereq_,module,exports){ +},{"../../lib":168}],60:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18417,47 +18434,102 @@ module.exports = function calc(trace, vals, containerStr, cLetter) { 'use strict'; -var scales = _dereq_('./scales'); +var Lib = _dereq_('../../lib'); +var hasColorscale = _dereq_('./helpers').hasColorscale; +module.exports = function crossTraceDefaults(fullData) { + function replace(cont, k) { + var val = cont['_' + k]; + if(val !== undefined) { + cont[k] = val; + } + } -module.exports = scales.RdBu; + function relinkColorAtts(trace, cAttrs) { + var cont = cAttrs.container ? + Lib.nestedProperty(trace, cAttrs.container).get() : + trace; -},{"./scales":69}],60:[function(_dereq_,module,exports){ + if(cont) { + var isAuto = cont.zauto || cont.cauto; + var minAttr = cAttrs.min; + var maxAttr = cAttrs.max; + + if(isAuto || cont[minAttr] === undefined) { + replace(cont, minAttr); + } + if(isAuto || cont[maxAttr] === undefined) { + replace(cont, maxAttr); + } + if(cont.autocolorscale) { + replace(cont, 'colorscale'); + } + } + } + + for(var i = 0; i < fullData.length; i++) { + var trace = fullData[i]; + var _module = trace._module; + + if(_module.colorbar) { + relinkColorAtts(trace, _module.colorbar); + } + + // TODO could generalize _module.colorscale and use it here? + + if(hasColorscale(trace, 'marker.line')) { + relinkColorAtts(trace, { + container: 'marker.line', + min: 'cmin', + max: 'cmax' + }); + } + + if(hasColorscale(trace, 'line')) { + relinkColorAtts(trace, { + container: 'line', + min: 'cmin', + max: 'cmax' + }); + } + } +}; + +},{"../../lib":168,"./helpers":62}],61:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); var Lib = _dereq_('../../lib'); - var hasColorbar = _dereq_('../colorbar/has_colorbar'); var colorbarDefaults = _dereq_('../colorbar/defaults'); -var isValidScale = _dereq_('./is_valid_scale'); -var flipScale = _dereq_('./flip_scale'); +var isValidScale = _dereq_('./scales').isValid; + +function npMaybe(cont, prefix) { + var containerStr = prefix.slice(0, prefix.length - 1); + return prefix ? + Lib.nestedProperty(cont, containerStr).get() || {} : + cont; +} module.exports = function colorScaleDefaults(traceIn, traceOut, layout, coerce, opts) { - var prefix = opts.prefix, - cLetter = opts.cLetter, - containerStr = prefix.slice(0, prefix.length - 1), - containerIn = prefix ? - Lib.nestedProperty(traceIn, containerStr).get() || {} : - traceIn, - containerOut = prefix ? - Lib.nestedProperty(traceOut, containerStr).get() || {} : - traceOut, - minIn = containerIn[cLetter + 'min'], - maxIn = containerIn[cLetter + 'max'], - sclIn = containerIn.colorscale; + var prefix = opts.prefix; + var cLetter = opts.cLetter; + var containerIn = npMaybe(traceIn, prefix); + var containerOut = npMaybe(traceOut, prefix); + var template = npMaybe(traceOut._template || {}, prefix) || {}; + var minIn = containerIn[cLetter + 'min']; + var maxIn = containerIn[cLetter + 'max']; var validMinMax = isNumeric(minIn) && isNumeric(maxIn) && (minIn < maxIn); coerce(prefix + cLetter + 'auto', !validMinMax); coerce(prefix + cLetter + 'min'); @@ -18465,19 +18537,17 @@ module.exports = function colorScaleDefaults(traceIn, traceOut, layout, coerce, // handles both the trace case (autocolorscale is false by default) and // the marker and marker.line case (autocolorscale is true by default) + var sclIn = containerIn.colorscale; + var sclTemplate = template.colorscale; var autoColorscaleDflt; if(sclIn !== undefined) autoColorscaleDflt = !isValidScale(sclIn); + if(sclTemplate !== undefined) autoColorscaleDflt = !isValidScale(sclTemplate); coerce(prefix + 'autocolorscale', autoColorscaleDflt); - var sclOut = coerce(prefix + 'colorscale'); - // reversescale is handled at the containerOut level - var reverseScale = coerce(prefix + 'reversescale'); - if(reverseScale) containerOut.colorscale = flipScale(sclOut); + coerce(prefix + 'colorscale'); + coerce(prefix + 'reversescale'); - // ... until Scatter.colorbar can handle marker line colorbars - if(prefix === 'marker.line.') return; - - if(!opts.noScale) { + if(!opts.noScale && prefix !== 'marker.line.') { // handles both the trace case where the dflt is listed in attributes and // the marker case where the dflt is determined by hasColorbar var showScaleDflt; @@ -18488,111 +18558,9 @@ module.exports = function colorScaleDefaults(traceIn, traceOut, layout, coerce, } }; -},{"../../lib":169,"../colorbar/defaults":54,"../colorbar/has_colorbar":56,"./flip_scale":62,"./is_valid_scale":66,"fast-isnumeric":18}],61:[function(_dereq_,module,exports){ +},{"../../lib":168,"../colorbar/defaults":55,"../colorbar/has_colorbar":57,"./scales":66,"fast-isnumeric":18}],62:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - -/** - * Extract colorscale into numeric domain and color range. - * - * @param {array} scl colorscale array of arrays - * @param {number} cmin minimum color value (used to clamp scale) - * @param {number} cmax maximum color value (used to clamp scale) - */ -module.exports = function extractScale(scl, cmin, cmax) { - var N = scl.length, - domain = new Array(N), - range = new Array(N); - - for(var i = 0; i < N; i++) { - var si = scl[i]; - - domain[i] = cmin + si[0] * (cmax - cmin); - range[i] = si[1]; - } - - return { - domain: domain, - range: range - }; -}; - -},{}],62:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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'; - -module.exports = function flipScale(scl) { - var N = scl.length, - sclNew = new Array(N), - si; - - for(var i = N - 1, j = 0; i >= 0; i--, j++) { - si = scl[i]; - sclNew[j] = [1 - si[0], si[1]]; - } - - return sclNew; -}; - -},{}],63:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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 scales = _dereq_('./scales'); -var defaultScale = _dereq_('./default_scale'); -var isValidScaleArray = _dereq_('./is_valid_scale_array'); - - -module.exports = function getScale(scl, dflt) { - if(!dflt) dflt = defaultScale; - if(!scl) return dflt; - - function parseScale() { - try { - scl = scales[scl] || JSON.parse(scl); - } - catch(e) { - scl = dflt; - } - } - - if(typeof scl === 'string') { - parseScale(); - // occasionally scl is double-JSON encoded... - if(typeof scl === 'string') parseScale(); - } - - if(!isValidScaleArray(scl)) return dflt; - return scl; -}; - -},{"./default_scale":59,"./is_valid_scale_array":67,"./scales":69}],64:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18601,11 +18569,16 @@ module.exports = function getScale(scl, dflt) { 'use strict'; +var d3 = _dereq_('d3'); +var tinycolor = _dereq_('tinycolor2'); var isNumeric = _dereq_('fast-isnumeric'); -var Lib = _dereq_('../../lib'); -var isValidScale = _dereq_('./is_valid_scale'); -module.exports = function hasColorscale(trace, containerStr) { +var Lib = _dereq_('../../lib'); +var Color = _dereq_('../color'); + +var isValidScale = _dereq_('./scales').isValid; + +function hasColorscale(trace, containerStr) { var container = containerStr ? Lib.nestedProperty(trace, containerStr).get() || {} : trace; @@ -18630,117 +18603,61 @@ module.exports = function hasColorscale(trace, containerStr) { Lib.isPlainObject(container.colorbar) ) ); -}; +} -},{"../../lib":169,"./is_valid_scale":66,"fast-isnumeric":18}],65:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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. -*/ + * Extract colorscale into numeric domain and color range. + * + * @param {object} cont colorscale container (e.g. trace, marker) + * - colorscale {array of arrays} + * - cmin/zmin {number} + * - cmax/zmax {number} + * - reversescale {boolean} + * @param {object} opts + * - cLetter {string} 'c' (for cmin/cmax) or 'z' (for zmin/zmax) + * + * @return {object} + * - domain {array} + * - range {array} + */ +function extractScale(cont, opts) { + var cLetter = opts.cLetter; + var scl = cont.reversescale ? + flipScale(cont.colorscale) : + cont.colorscale; -'use strict'; + // minimum color value (used to clamp scale) + var cmin = cont[cLetter + 'min']; + // maximum color value (used to clamp scale) + var cmax = cont[cLetter + 'max']; -exports.scales = _dereq_('./scales'); + var N = scl.length; + var domain = new Array(N); + var range = new Array(N); -exports.defaultScale = _dereq_('./default_scale'); - -exports.attributes = _dereq_('./attributes'); - -exports.handleDefaults = _dereq_('./defaults'); - -exports.calc = _dereq_('./calc'); - -exports.hasColorscale = _dereq_('./has_colorscale'); - -exports.isValidScale = _dereq_('./is_valid_scale'); - -exports.getScale = _dereq_('./get_scale'); - -exports.flipScale = _dereq_('./flip_scale'); - -exports.extractScale = _dereq_('./extract_scale'); - -exports.makeColorScaleFunc = _dereq_('./make_color_scale_func'); - -},{"./attributes":57,"./calc":58,"./default_scale":59,"./defaults":60,"./extract_scale":61,"./flip_scale":62,"./get_scale":63,"./has_colorscale":64,"./is_valid_scale":66,"./make_color_scale_func":68,"./scales":69}],66:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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 scales = _dereq_('./scales'); -var isValidScaleArray = _dereq_('./is_valid_scale_array'); - - -module.exports = function isValidScale(scl) { - if(scales[scl] !== undefined) return true; - else return isValidScaleArray(scl); -}; - -},{"./is_valid_scale_array":67,"./scales":69}],67:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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 tinycolor = _dereq_('tinycolor2'); - - -module.exports = function isValidScaleArray(scl) { - var highestVal = 0; - - if(!Array.isArray(scl) || scl.length < 2) return false; - - if(!scl[0] || !scl[scl.length - 1]) return false; - - if(+scl[0][0] !== 0 || +scl[scl.length - 1][0] !== 1) return false; - - for(var i = 0; i < scl.length; i++) { + for(var i = 0; i < N; i++) { var si = scl[i]; - - if(si.length !== 2 || +si[0] < highestVal || !tinycolor(si[1]).isValid()) { - return false; - } - - highestVal = +si[0]; + domain[i] = cmin + si[0] * (cmax - cmin); + range[i] = si[1]; } - return true; -}; + return { + domain: domain, + range: range + }; +} -},{"tinycolor2":33}],68:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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. -*/ +function flipScale(scl) { + var N = scl.length; + var sclNew = new Array(N); - -'use strict'; - -var d3 = _dereq_('d3'); -var tinycolor = _dereq_('tinycolor2'); -var isNumeric = _dereq_('fast-isnumeric'); - -var Color = _dereq_('../color'); + for(var i = N - 1, j = 0; i >= 0; i--, j++) { + var si = scl[i]; + sclNew[j] = [1 - si[0], si[1]]; + } + return sclNew; +} /** * General colorscale function generator. @@ -18755,13 +18672,13 @@ var Color = _dereq_('../color'); * * @return {function} */ -module.exports = function makeColorScaleFunc(specs, opts) { +function makeColorScaleFunc(specs, opts) { opts = opts || {}; - var domain = specs.domain, - range = specs.range, - N = range.length, - _range = new Array(N); + var domain = specs.domain; + var range = specs.range; + var N = range.length; + var _range = new Array(N); for(var i = 0; i < N; i++) { var rgba = tinycolor(range[i]).toRgb(); @@ -18773,9 +18690,9 @@ module.exports = function makeColorScaleFunc(specs, opts) { .range(_range) .clamp(true); - var noNumericCheck = opts.noNumericCheck, - returnArray = opts.returnArray, - sclFunc; + var noNumericCheck = opts.noNumericCheck; + var returnArray = opts.returnArray; + var sclFunc; if(noNumericCheck && returnArray) { sclFunc = _sclFunc; @@ -18807,7 +18724,7 @@ module.exports = function makeColorScaleFunc(specs, opts) { sclFunc.range = function() { return range; }; return sclFunc; -}; +} function colorArray2rbga(colorArray) { var colorObj = { @@ -18820,9 +18737,16 @@ function colorArray2rbga(colorArray) { return tinycolor(colorObj).toRgbString(); } -},{"../color":50,"d3":16,"fast-isnumeric":18,"tinycolor2":33}],69:[function(_dereq_,module,exports){ +module.exports = { + hasColorscale: hasColorscale, + extractScale: extractScale, + flipScale: flipScale, + makeColorScaleFunc: makeColorScaleFunc +}; + +},{"../../lib":168,"../color":51,"./scales":66,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],63:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18831,8 +18755,116 @@ function colorArray2rbga(colorArray) { 'use strict'; +var scales = _dereq_('./scales'); +var helpers = _dereq_('./helpers'); module.exports = { + moduleType: 'component', + name: 'colorscale', + + attributes: _dereq_('./attributes'), + layoutAttributes: _dereq_('./layout_attributes'), + + supplyLayoutDefaults: _dereq_('./layout_defaults'), + handleDefaults: _dereq_('./defaults'), + crossTraceDefaults: _dereq_('./cross_trace_defaults'), + + calc: _dereq_('./calc'), + + // ./scales.js is required in lib/coerce.js ; + // it needs to be a seperate module to avoid circular a dependency + scales: scales.scales, + defaultScale: scales.defaultScale, + getScale: scales.get, + isValidScale: scales.isValid, + + hasColorscale: helpers.hasColorscale, + flipScale: helpers.flipScale, + extractScale: helpers.extractScale, + makeColorScaleFunc: helpers.makeColorScaleFunc +}; + +},{"./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. +* 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 scales = _dereq_('./scales').scales; + +var msg = 'Note that `autocolorscale` must be true for this attribute to work.'; + +module.exports = { + editType: 'calc', + sequential: { + valType: 'colorscale', + dflt: scales.Reds, + + editType: 'calc', + + }, + sequentialminus: { + valType: 'colorscale', + dflt: scales.Blues, + + editType: 'calc', + + }, + diverging: { + valType: 'colorscale', + dflt: scales.RdBu, + + editType: 'calc', + + } +}; + +},{"./scales":66}],65:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, 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 Lib = _dereq_('../../lib'); +var colorscaleAttrs = _dereq_('./layout_attributes'); +var Template = _dereq_('../../plot_api/plot_template'); + +module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) { + var colorscaleIn = layoutIn.colorscale; + var colorscaleOut = Template.newContainer(layoutOut, 'colorscale'); + function coerce(attr, dflt) { + return Lib.coerce(colorscaleIn, colorscaleOut, colorscaleAttrs, attr, dflt); + } + + coerce('sequential'); + coerce('sequentialminus'); + coerce('diverging'); +}; + +},{"../../lib":168,"../../plot_api/plot_template":202,"./layout_attributes":64}],66:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, 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 tinycolor = _dereq_('tinycolor2'); + +var scales = { 'Greys': [ [0, 'rgb(0,0,0)'], [1, 'rgb(255,255,255)'] ], @@ -18963,9 +18995,69 @@ module.exports = { ] }; -},{}],70:[function(_dereq_,module,exports){ +var defaultScale = scales.RdBu; + +function getScale(scl, dflt) { + if(!dflt) dflt = defaultScale; + if(!scl) return dflt; + + function parseScale() { + try { + scl = scales[scl] || JSON.parse(scl); + } catch(e) { + scl = dflt; + } + } + + if(typeof scl === 'string') { + parseScale(); + // occasionally scl is double-JSON encoded... + if(typeof scl === 'string') parseScale(); + } + + if(!isValidScaleArray(scl)) return dflt; + return scl; +} + + +function isValidScaleArray(scl) { + var highestVal = 0; + + if(!Array.isArray(scl) || scl.length < 2) return false; + + if(!scl[0] || !scl[scl.length - 1]) return false; + + if(+scl[0][0] !== 0 || +scl[scl.length - 1][0] !== 1) return false; + + for(var i = 0; i < scl.length; i++) { + var si = scl[i]; + + if(si.length !== 2 || +si[0] < highestVal || !tinycolor(si[1]).isValid()) { + return false; + } + + highestVal = +si[0]; + } + + return true; +} + +function isValidScale(scl) { + if(scales[scl] !== undefined) return true; + else return isValidScaleArray(scl); +} + +module.exports = { + scales: scales, + defaultScale: defaultScale, + + get: getScale, + isValid: isValidScale +}; + +},{"tinycolor2":34}],67:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18981,9 +19073,9 @@ module.exports = { // based on where you are, and return the fraction corresponding to // that position on the object module.exports = function align(v, dv, v0, v1, anchor) { - var vmin = (v - v0) / (v1 - v0), - vmax = vmin + dv / (v1 - v0), - vc = (vmin + vmax) / 2; + var vmin = (v - v0) / (v1 - v0); + var vmax = vmin + dv / (v1 - v0); + var vc = (vmin + vmax) / 2; // explicitly specified anchor if(anchor === 'left' || anchor === 'bottom') return vmin; @@ -18996,9 +19088,9 @@ module.exports = function align(v, dv, v0, v1, anchor) { return vc; }; -},{}],71:[function(_dereq_,module,exports){ +},{}],68:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19034,9 +19126,9 @@ module.exports = function getCursor(x, y, xanchor, yanchor) { return cursorset[y][x]; }; -},{"../../lib":169}],72:[function(_dereq_,module,exports){ +},{"../../lib":168}],69:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19161,8 +19253,6 @@ dragElement.init = function init(options) { var clampFn = options.clampFn || _clampFn; function onStart(e) { - e.preventDefault(); - // make dragging and dragged into properties of gd // so that others can look at and modify them gd._dragged = false; @@ -19204,11 +19294,15 @@ dragElement.init = function init(options) { document.documentElement.style.cursor = window.getComputedStyle(element).cursor; } - document.addEventListener('mousemove', onMove); document.addEventListener('mouseup', onDone); - document.addEventListener('touchmove', onMove); document.addEventListener('touchend', onDone); + if(options.dragmode !== false) { + e.preventDefault(); + document.addEventListener('mousemove', onMove); + document.addEventListener('touchmove', onMove); + } + return; } @@ -19232,12 +19326,14 @@ dragElement.init = function init(options) { } function onDone(e) { - document.removeEventListener('mousemove', onMove); - document.removeEventListener('mouseup', onDone); - document.removeEventListener('touchmove', onMove); - document.removeEventListener('touchend', onDone); + if(options.dragmode !== false) { + e.preventDefault(); + document.removeEventListener('mousemove', onMove); + document.removeEventListener('touchmove', onMove); + } - e.preventDefault(); + document.removeEventListener('mouseup', onDone); + document.removeEventListener('touchend', onDone); if(hasHover) { Lib.removeElement(dragCover); @@ -19331,9 +19427,9 @@ function pointerOffset(e) { ); } -},{"../../constants/interactions":150,"../../lib":169,"../../plots/cartesian/constants":219,"../../registry":259,"./align":70,"./cursor":71,"./unhover":73,"has-hover":20,"has-passive-events":21,"mouse-event-offset":23}],73:[function(_dereq_,module,exports){ +},{"../../constants/interactions":148,"../../lib":168,"../../plots/cartesian/constants":218,"../../registry":257,"./align":67,"./cursor":68,"./unhover":70,"has-hover":20,"has-passive-events":21,"mouse-event-offset":24}],70:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19389,9 +19485,9 @@ unhover.raw = function unhoverRaw(gd, evt) { } }; -},{"../../lib/events":162,"../../lib/get_graph_div":167,"../../lib/throttle":192,"../fx/constants":87}],74:[function(_dereq_,module,exports){ +},{"../../lib/events":161,"../../lib/get_graph_div":166,"../../lib/throttle":190,"../fx/constants":84}],71:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19414,9 +19510,9 @@ exports.dash = { }; -},{}],75:[function(_dereq_,module,exports){ +},{}],72:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19550,9 +19646,9 @@ drawing.crispRound = function(gd, lineWidth, dflt) { drawing.singleLineStyle = function(d, s, lw, lc, ld) { s.style('fill', 'none'); - var line = (((d || [])[0] || {}).trace || {}).line || {}, - lw1 = lw || line.width||0, - dash = ld || line.dash || ''; + var line = (((d || [])[0] || {}).trace || {}).line || {}; + var lw1 = lw || line.width||0; + var dash = ld || line.dash || ''; Color.stroke(s, lc || line.color); drawing.dashLine(s, dash, lw1); @@ -19561,9 +19657,9 @@ drawing.singleLineStyle = function(d, s, lw, lc, ld) { drawing.lineGroupStyle = function(s, lw, lc, ld) { s.style('fill', 'none') .each(function(d) { - var line = (((d || [])[0] || {}).trace || {}).line || {}, - lw1 = lw || line.width||0, - dash = ld || line.dash || ''; + var line = (((d || [])[0] || {}).trace || {}).line || {}; + var lw1 = lw || line.width||0; + var dash = ld || line.dash || ''; d3.select(this) .call(Color.stroke, lc || line.color) @@ -19615,13 +19711,11 @@ drawing.fillGroupStyle = function(s) { s.style('stroke-width', 0) .each(function(d) { var shape = d3.select(this); - try { + // N.B. 'd' won't be a calcdata item when + // fill !== 'none' on a segment-less and marker-less trace + if(d[0].trace) { shape.call(Color.fill, d[0].trace.fillcolor); } - catch(e) { - Lib.error(e, s); - shape.remove(); - } }); }; @@ -19654,9 +19748,10 @@ Object.keys(SYMBOLDEFS).forEach(function(k) { drawing.symbolNoFill[symDef.n] = true; } }); -var MAXSYMBOL = drawing.symbolNames.length, - // add a dot in the middle of the symbol - DOTPATH = 'M0,0.5L0.5,0L0,-0.5L-0.5,0Z'; + +var MAXSYMBOL = drawing.symbolNames.length; +// add a dot in the middle of the symbol +var DOTPATH = 'M0,0.5L0.5,0L0,-0.5L-0.5,0Z'; drawing.symbolNumber = function(v) { if(typeof v === 'string') { @@ -20062,7 +20157,7 @@ drawing.tryColorscale = function(marker, prefix) { if(scl && Lib.isArrayOrTypedArray(colorArray)) { return Colorscale.makeColorScaleFunc( - Colorscale.extractScale(scl, cont.cmin, cont.cmax) + Colorscale.extractScale(cont, {cLetter: 'c'}) ); } } @@ -20160,8 +20255,9 @@ drawing.selectedTextStyle = function(s, trace) { var CatmullRomExp = 0.5; drawing.smoothopen = function(pts, smoothness) { if(pts.length < 3) { return 'M' + pts.join('L');} - var path = 'M' + pts[0], - tangents = [], i; + var path = 'M' + pts[0]; + var tangents = []; + var i; for(i = 1; i < pts.length - 1; i++) { tangents.push(makeTangent(pts[i - 1], pts[i], pts[i + 1], smoothness)); } @@ -20175,11 +20271,10 @@ drawing.smoothopen = function(pts, smoothness) { drawing.smoothclosed = function(pts, smoothness) { if(pts.length < 3) { return 'M' + pts.join('L') + 'Z'; } - var path = 'M' + pts[0], - pLast = pts.length - 1, - tangents = [makeTangent(pts[pLast], - pts[0], pts[1], smoothness)], - i; + var path = 'M' + pts[0]; + var pLast = pts.length - 1; + var tangents = [makeTangent(pts[pLast], pts[0], pts[1], smoothness)]; + var i; for(i = 1; i < pLast; i++) { tangents.push(makeTangent(pts[i - 1], pts[i], pts[i + 1], smoothness)); } @@ -20195,16 +20290,16 @@ drawing.smoothclosed = function(pts, smoothness) { }; function makeTangent(prevpt, thispt, nextpt, smoothness) { - var d1x = prevpt[0] - thispt[0], - d1y = prevpt[1] - thispt[1], - d2x = nextpt[0] - thispt[0], - d2y = nextpt[1] - thispt[1], - d1a = Math.pow(d1x * d1x + d1y * d1y, CatmullRomExp / 2), - d2a = Math.pow(d2x * d2x + d2y * d2y, CatmullRomExp / 2), - numx = (d2a * d2a * d1x - d1a * d1a * d2x) * smoothness, - numy = (d2a * d2a * d1y - d1a * d1a * d2y) * smoothness, - denom1 = 3 * d2a * (d1a + d2a), - denom2 = 3 * d1a * (d1a + d2a); + var d1x = prevpt[0] - thispt[0]; + var d1y = prevpt[1] - thispt[1]; + var d2x = nextpt[0] - thispt[0]; + var d2y = nextpt[1] - thispt[1]; + var d1a = Math.pow(d1x * d1x + d1y * d1y, CatmullRomExp / 2); + var d2a = Math.pow(d2x * d2x + d2y * d2y, CatmullRomExp / 2); + var numx = (d2a * d2a * d1x - d1a * d1a * d2x) * smoothness; + var numy = (d2a * d2a * d1y - d1a * d1a * d2y) * smoothness; + var denom1 = 3 * d2a * (d1a + d2a); + var denom2 = 3 * d1a * (d1a + d2a); return [ [ d3.round(thispt[0] + (denom1 && numx / denom1), 2), @@ -20423,40 +20518,36 @@ function nodeHash(node) { node.getAttribute('style'); } -/* - * make a robust clipPath url from a local id - * note! We'd better not be exporting from a page - * with a or the svg will not be portable! +/** + * Set clipPath URL in a way that work for all situations. + * + * In details, graphs on pages with HTML tags need to prepend + * the clip path ids with the page's base url EXCEPT during toImage exports. + * + * @param {d3 selection} s : node to add clip-path attribute + * @param {string} localId : local clip-path (w/o base url) id + * @param {DOM element || object} gd + * - context._baseUrl {string} + * - context._exportedPlot {boolean} */ -drawing.setClipUrl = function(s, localId) { +drawing.setClipUrl = function(s, localId, gd) { if(!localId) { s.attr('clip-path', null); return; } - if(drawing.baseUrl === undefined) { - var base = d3.select('base'); + var context = gd._context; + var baseUrl = context._exportedPlot ? '' : (context._baseUrl || ''); - // Stash base url once and for all! - // We may have to stash this elsewhere when - // we'll try to support for child windows - // more info -> https://github.com/plotly/plotly.js/issues/702 - if(base.size() && base.attr('href')) { - drawing.baseUrl = window.location.href.split('#')[0]; - } else { - drawing.baseUrl = ''; - } - } - - s.attr('clip-path', 'url(' + drawing.baseUrl + '#' + localId + ')'); + s.attr('clip-path', 'url(' + baseUrl + '#' + localId + ')'); }; drawing.getTranslate = function(element) { // Note the separator [^\d] between x and y in this regex // We generally use ',' but IE will convert it to ' ' - var re = /.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/, - getter = element.attr ? 'attr' : 'getAttribute', - transform = element[getter]('transform') || ''; + var re = /.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/; + var getter = element.attr ? 'attr' : 'getAttribute'; + var transform = element[getter]('transform') || ''; var translate = transform.replace(re, function(match, p1, p2) { return [p1, p2].join(' '); @@ -20470,11 +20561,10 @@ drawing.getTranslate = function(element) { }; drawing.setTranslate = function(element, x, y) { - - var re = /(\btranslate\(.*?\);?)/, - getter = element.attr ? 'attr' : 'getAttribute', - setter = element.attr ? 'attr' : 'setAttribute', - transform = element[getter]('transform') || ''; + var re = /(\btranslate\(.*?\);?)/; + var getter = element.attr ? 'attr' : 'getAttribute'; + var setter = element.attr ? 'attr' : 'setAttribute'; + var transform = element[getter]('transform') || ''; x = x || 0; y = y || 0; @@ -20489,10 +20579,9 @@ drawing.setTranslate = function(element, x, y) { }; drawing.getScale = function(element) { - - var re = /.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/, - getter = element.attr ? 'attr' : 'getAttribute', - transform = element[getter]('transform') || ''; + var re = /.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/; + var getter = element.attr ? 'attr' : 'getAttribute'; + var transform = element[getter]('transform') || ''; var translate = transform.replace(re, function(match, p1, p2) { return [p1, p2].join(' '); @@ -20506,11 +20595,10 @@ drawing.getScale = function(element) { }; drawing.setScale = function(element, x, y) { - - var re = /(\bscale\(.*?\);?)/, - getter = element.attr ? 'attr' : 'getAttribute', - setter = element.attr ? 'attr' : 'setAttribute', - transform = element[getter]('transform') || ''; + var re = /(\bscale\(.*?\);?)/; + var getter = element.attr ? 'attr' : 'getAttribute'; + var setter = element.attr ? 'attr' : 'setAttribute'; + var transform = element[getter]('transform') || ''; x = x || 1; y = y || 1; @@ -20580,9 +20668,9 @@ drawing.setTextPointsScale = function(selection, xScale, yScale) { }); }; -},{"../../constants/alignment":148,"../../constants/interactions":150,"../../constants/xmlns_namespaces":152,"../../lib":169,"../../lib/svg_text_utils":191,"../../registry":259,"../../traces/scatter/make_bubble_size_func":383,"../../traces/scatter/subtypes":390,"../color":50,"../colorscale":65,"./symbol_defs":76,"d3":16,"fast-isnumeric":18,"tinycolor2":33}],76:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../constants/interactions":148,"../../constants/xmlns_namespaces":150,"../../lib":168,"../../lib/svg_text_utils":189,"../../registry":257,"../../traces/scatter/make_bubble_size_func":384,"../../traces/scatter/subtypes":391,"../color":51,"../colorscale":63,"./symbol_defs":73,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],73:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -20628,8 +20716,8 @@ module.exports = { cross: { n: 3, f: function(r) { - var rc = d3.round(r * 0.4, 2), - rc2 = d3.round(r * 1.2, 2); + var rc = d3.round(r * 0.4, 2); + var rc2 = d3.round(r * 1.2, 2); return 'M' + rc2 + ',' + rc + 'H' + rc + 'V' + rc2 + 'H-' + rc + 'V' + rc + 'H-' + rc2 + 'V-' + rc + 'H-' + rc + 'V-' + rc2 + 'H' + rc + 'V-' + rc + 'H' + rc2 + 'Z'; @@ -20638,90 +20726,90 @@ module.exports = { x: { n: 4, f: function(r) { - var rx = d3.round(r * 0.8 / Math.sqrt(2), 2), - ne = 'l' + rx + ',' + rx, - se = 'l' + rx + ',-' + rx, - sw = 'l-' + rx + ',-' + rx, - nw = 'l-' + rx + ',' + rx; + var rx = d3.round(r * 0.8 / Math.sqrt(2), 2); + var ne = 'l' + rx + ',' + rx; + var se = 'l' + rx + ',-' + rx; + var sw = 'l-' + rx + ',-' + rx; + var nw = 'l-' + rx + ',' + rx; return 'M0,' + rx + ne + se + sw + se + sw + nw + sw + nw + ne + nw + ne + 'Z'; } }, 'triangle-up': { n: 5, f: function(r) { - var rt = d3.round(r * 2 / Math.sqrt(3), 2), - r2 = d3.round(r / 2, 2), - rs = d3.round(r, 2); + var rt = d3.round(r * 2 / Math.sqrt(3), 2); + var r2 = d3.round(r / 2, 2); + var rs = d3.round(r, 2); return 'M-' + rt + ',' + r2 + 'H' + rt + 'L0,-' + rs + 'Z'; } }, 'triangle-down': { n: 6, f: function(r) { - var rt = d3.round(r * 2 / Math.sqrt(3), 2), - r2 = d3.round(r / 2, 2), - rs = d3.round(r, 2); + var rt = d3.round(r * 2 / Math.sqrt(3), 2); + var r2 = d3.round(r / 2, 2); + var rs = d3.round(r, 2); return 'M-' + rt + ',-' + r2 + 'H' + rt + 'L0,' + rs + 'Z'; } }, 'triangle-left': { n: 7, f: function(r) { - var rt = d3.round(r * 2 / Math.sqrt(3), 2), - r2 = d3.round(r / 2, 2), - rs = d3.round(r, 2); + var rt = d3.round(r * 2 / Math.sqrt(3), 2); + var r2 = d3.round(r / 2, 2); + var rs = d3.round(r, 2); return 'M' + r2 + ',-' + rt + 'V' + rt + 'L-' + rs + ',0Z'; } }, 'triangle-right': { n: 8, f: function(r) { - var rt = d3.round(r * 2 / Math.sqrt(3), 2), - r2 = d3.round(r / 2, 2), - rs = d3.round(r, 2); + var rt = d3.round(r * 2 / Math.sqrt(3), 2); + var r2 = d3.round(r / 2, 2); + var rs = d3.round(r, 2); return 'M-' + r2 + ',-' + rt + 'V' + rt + 'L' + rs + ',0Z'; } }, 'triangle-ne': { n: 9, f: function(r) { - var r1 = d3.round(r * 0.6, 2), - r2 = d3.round(r * 1.2, 2); + var r1 = d3.round(r * 0.6, 2); + var r2 = d3.round(r * 1.2, 2); return 'M-' + r2 + ',-' + r1 + 'H' + r1 + 'V' + r2 + 'Z'; } }, 'triangle-se': { n: 10, f: function(r) { - var r1 = d3.round(r * 0.6, 2), - r2 = d3.round(r * 1.2, 2); + var r1 = d3.round(r * 0.6, 2); + var r2 = d3.round(r * 1.2, 2); return 'M' + r1 + ',-' + r2 + 'V' + r1 + 'H-' + r2 + 'Z'; } }, 'triangle-sw': { n: 11, f: function(r) { - var r1 = d3.round(r * 0.6, 2), - r2 = d3.round(r * 1.2, 2); + var r1 = d3.round(r * 0.6, 2); + var r2 = d3.round(r * 1.2, 2); return 'M' + r2 + ',' + r1 + 'H-' + r1 + 'V-' + r2 + 'Z'; } }, 'triangle-nw': { n: 12, f: function(r) { - var r1 = d3.round(r * 0.6, 2), - r2 = d3.round(r * 1.2, 2); + var r1 = d3.round(r * 0.6, 2); + var r2 = d3.round(r * 1.2, 2); return 'M-' + r1 + ',' + r2 + 'V-' + r1 + 'H' + r2 + 'Z'; } }, pentagon: { n: 13, f: function(r) { - var x1 = d3.round(r * 0.951, 2), - x2 = d3.round(r * 0.588, 2), - y0 = d3.round(-r, 2), - y1 = d3.round(r * -0.309, 2), - y2 = d3.round(r * 0.809, 2); + var x1 = d3.round(r * 0.951, 2); + var x2 = d3.round(r * 0.588, 2); + var y0 = d3.round(-r, 2); + var y1 = d3.round(r * -0.309, 2); + var y2 = d3.round(r * 0.809, 2); return 'M' + x1 + ',' + y1 + 'L' + x2 + ',' + y2 + 'H-' + x2 + 'L-' + x1 + ',' + y1 + 'L0,' + y0 + 'Z'; } @@ -20729,9 +20817,9 @@ module.exports = { hexagon: { n: 14, f: function(r) { - var y0 = d3.round(r, 2), - y1 = d3.round(r / 2, 2), - x = d3.round(r * Math.sqrt(3) / 2, 2); + var y0 = d3.round(r, 2); + var y1 = d3.round(r / 2, 2); + var x = d3.round(r * Math.sqrt(3) / 2, 2); return 'M' + x + ',-' + y1 + 'V' + y1 + 'L0,' + y0 + 'L-' + x + ',' + y1 + 'V-' + y1 + 'L0,-' + y0 + 'Z'; } @@ -20739,9 +20827,9 @@ module.exports = { hexagon2: { n: 15, f: function(r) { - var x0 = d3.round(r, 2), - x1 = d3.round(r / 2, 2), - y = d3.round(r * Math.sqrt(3) / 2, 2); + var x0 = d3.round(r, 2); + var x1 = d3.round(r / 2, 2); + var y = d3.round(r * Math.sqrt(3) / 2, 2); return 'M-' + x1 + ',' + y + 'H' + x1 + 'L' + x0 + ',0L' + x1 + ',-' + y + 'H-' + x1 + 'L-' + x0 + ',0Z'; } @@ -20749,8 +20837,8 @@ module.exports = { octagon: { n: 16, f: function(r) { - var a = d3.round(r * 0.924, 2), - b = d3.round(r * 0.383, 2); + var a = d3.round(r * 0.924, 2); + var b = d3.round(r * 0.383, 2); return 'M-' + b + ',-' + a + 'H' + b + 'L' + a + ',-' + b + 'V' + b + 'L' + b + ',' + a + 'H-' + b + 'L-' + a + ',' + b + 'V-' + b + 'Z'; } @@ -20758,16 +20846,16 @@ module.exports = { star: { n: 17, f: function(r) { - var rs = r * 1.4, - x1 = d3.round(rs * 0.225, 2), - x2 = d3.round(rs * 0.951, 2), - x3 = d3.round(rs * 0.363, 2), - x4 = d3.round(rs * 0.588, 2), - y0 = d3.round(-rs, 2), - y1 = d3.round(rs * -0.309, 2), - y3 = d3.round(rs * 0.118, 2), - y4 = d3.round(rs * 0.809, 2), - y5 = d3.round(rs * 0.382, 2); + var rs = r * 1.4; + var x1 = d3.round(rs * 0.225, 2); + var x2 = d3.round(rs * 0.951, 2); + var x3 = d3.round(rs * 0.363, 2); + var x4 = d3.round(rs * 0.588, 2); + var y0 = d3.round(-rs, 2); + var y1 = d3.round(rs * -0.309, 2); + var y3 = d3.round(rs * 0.118, 2); + var y4 = d3.round(rs * 0.809, 2); + var y5 = d3.round(rs * 0.382, 2); return 'M' + x1 + ',' + y1 + 'H' + x2 + 'L' + x3 + ',' + y3 + 'L' + x4 + ',' + y4 + 'L0,' + y5 + 'L-' + x4 + ',' + y4 + 'L-' + x3 + ',' + y3 + 'L-' + x2 + ',' + y1 + 'H-' + x1 + @@ -20777,9 +20865,9 @@ module.exports = { hexagram: { n: 18, f: function(r) { - var y = d3.round(r * 0.66, 2), - x1 = d3.round(r * 0.38, 2), - x2 = d3.round(r * 0.76, 2); + var y = d3.round(r * 0.66, 2); + var x1 = d3.round(r * 0.38, 2); + var x2 = d3.round(r * 0.76, 2); return 'M-' + x2 + ',0l-' + x1 + ',-' + y + 'h' + x2 + 'l' + x1 + ',-' + y + 'l' + x1 + ',' + y + 'h' + x2 + 'l-' + x1 + ',' + y + 'l' + x1 + ',' + y + 'h-' + x2 + @@ -20789,11 +20877,11 @@ module.exports = { 'star-triangle-up': { n: 19, f: function(r) { - var x = d3.round(r * Math.sqrt(3) * 0.8, 2), - y1 = d3.round(r * 0.8, 2), - y2 = d3.round(r * 1.6, 2), - rc = d3.round(r * 4, 2), - aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; + var x = d3.round(r * Math.sqrt(3) * 0.8, 2); + var y1 = d3.round(r * 0.8, 2); + var y2 = d3.round(r * 1.6, 2); + var rc = d3.round(r * 4, 2); + var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; return 'M-' + x + ',' + y1 + aPart + x + ',' + y1 + aPart + '0,-' + y2 + aPart + '-' + x + ',' + y1 + 'Z'; } @@ -20801,11 +20889,11 @@ module.exports = { 'star-triangle-down': { n: 20, f: function(r) { - var x = d3.round(r * Math.sqrt(3) * 0.8, 2), - y1 = d3.round(r * 0.8, 2), - y2 = d3.round(r * 1.6, 2), - rc = d3.round(r * 4, 2), - aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; + var x = d3.round(r * Math.sqrt(3) * 0.8, 2); + var y1 = d3.round(r * 0.8, 2); + var y2 = d3.round(r * 1.6, 2); + var rc = d3.round(r * 4, 2); + var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; return 'M' + x + ',-' + y1 + aPart + '-' + x + ',-' + y1 + aPart + '0,' + y2 + aPart + x + ',-' + y1 + 'Z'; } @@ -20813,9 +20901,9 @@ module.exports = { 'star-square': { n: 21, f: function(r) { - var rp = d3.round(r * 1.1, 2), - rc = d3.round(r * 2, 2), - aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; + var rp = d3.round(r * 1.1, 2); + var rc = d3.round(r * 2, 2); + var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; return 'M-' + rp + ',-' + rp + aPart + '-' + rp + ',' + rp + aPart + rp + ',' + rp + aPart + rp + ',-' + rp + aPart + '-' + rp + ',-' + rp + 'Z'; @@ -20824,9 +20912,9 @@ module.exports = { 'star-diamond': { n: 22, f: function(r) { - var rp = d3.round(r * 1.4, 2), - rc = d3.round(r * 1.9, 2), - aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; + var rp = d3.round(r * 1.4, 2); + var rc = d3.round(r * 1.9, 2); + var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; return 'M-' + rp + ',0' + aPart + '0,' + rp + aPart + rp + ',0' + aPart + '0,-' + rp + aPart + '-' + rp + ',0' + 'Z'; @@ -20835,16 +20923,16 @@ module.exports = { 'diamond-tall': { n: 23, f: function(r) { - var x = d3.round(r * 0.7, 2), - y = d3.round(r * 1.4, 2); + var x = d3.round(r * 0.7, 2); + var y = d3.round(r * 1.4, 2); return 'M0,' + y + 'L' + x + ',0L0,-' + y + 'L-' + x + ',0Z'; } }, 'diamond-wide': { n: 24, f: function(r) { - var x = d3.round(r * 1.4, 2), - y = d3.round(r * 0.7, 2); + var x = d3.round(r * 1.4, 2); + var y = d3.round(r * 0.7, 2); return 'M0,' + y + 'L' + x + ',0L0,-' + y + 'L-' + x + ',0Z'; } }, @@ -20878,8 +20966,8 @@ module.exports = { 'circle-x': { n: 28, f: function(r) { - var rs = d3.round(r, 2), - rc = d3.round(r / Math.sqrt(2), 2); + var rs = d3.round(r, 2); + var rc = d3.round(r / Math.sqrt(2), 2); return 'M' + rc + ',' + rc + 'L-' + rc + ',-' + rc + 'M' + rc + ',-' + rc + 'L-' + rc + ',' + rc + 'M' + rs + ',0A' + rs + ',' + rs + ' 0 1,1 0,-' + rs + @@ -20922,8 +21010,8 @@ module.exports = { 'diamond-x': { n: 32, f: function(r) { - var rd = d3.round(r * 1.3, 2), - r2 = d3.round(r * 0.65, 2); + var rd = d3.round(r * 1.3, 2); + var r2 = d3.round(r * 0.65, 2); return 'M' + rd + ',0L0,' + rd + 'L-' + rd + ',0L0,-' + rd + 'Z' + 'M-' + r2 + ',-' + r2 + 'L' + r2 + ',' + r2 + 'M-' + r2 + ',' + r2 + 'L' + r2 + ',-' + r2; @@ -20968,8 +21056,8 @@ module.exports = { hash: { n: 36, f: function(r) { - var r1 = d3.round(r / 2, 2), - r2 = d3.round(r, 2); + var r1 = d3.round(r / 2, 2); + var r2 = d3.round(r, 2); return 'M' + r1 + ',' + r2 + 'V-' + r2 + 'm-' + r2 + ',0V' + r2 + 'M' + r2 + ',' + r1 + 'H-' + r2 + @@ -20981,9 +21069,9 @@ module.exports = { 'y-up': { n: 37, f: function(r) { - var x = d3.round(r * 1.2, 2), - y0 = d3.round(r * 1.6, 2), - y1 = d3.round(r * 0.8, 2); + var x = d3.round(r * 1.2, 2); + var y0 = d3.round(r * 1.6, 2); + var y1 = d3.round(r * 0.8, 2); return 'M-' + x + ',' + y1 + 'L0,0M' + x + ',' + y1 + 'L0,0M0,-' + y0 + 'L0,0'; }, needLine: true, @@ -20993,9 +21081,9 @@ module.exports = { 'y-down': { n: 38, f: function(r) { - var x = d3.round(r * 1.2, 2), - y0 = d3.round(r * 1.6, 2), - y1 = d3.round(r * 0.8, 2); + var x = d3.round(r * 1.2, 2); + var y0 = d3.round(r * 1.6, 2); + var y1 = d3.round(r * 0.8, 2); return 'M-' + x + ',-' + y1 + 'L0,0M' + x + ',-' + y1 + 'L0,0M0,' + y0 + 'L0,0'; }, needLine: true, @@ -21005,9 +21093,9 @@ module.exports = { 'y-left': { n: 39, f: function(r) { - var y = d3.round(r * 1.2, 2), - x0 = d3.round(r * 1.6, 2), - x1 = d3.round(r * 0.8, 2); + var y = d3.round(r * 1.2, 2); + var x0 = d3.round(r * 1.6, 2); + var x1 = d3.round(r * 0.8, 2); return 'M' + x1 + ',' + y + 'L0,0M' + x1 + ',-' + y + 'L0,0M-' + x0 + ',0L0,0'; }, needLine: true, @@ -21017,9 +21105,9 @@ module.exports = { 'y-right': { n: 40, f: function(r) { - var y = d3.round(r * 1.2, 2), - x0 = d3.round(r * 1.6, 2), - x1 = d3.round(r * 0.8, 2); + var y = d3.round(r * 1.2, 2); + var x0 = d3.round(r * 1.6, 2); + var x1 = d3.round(r * 0.8, 2); return 'M-' + x1 + ',' + y + 'L0,0M-' + x1 + ',-' + y + 'L0,0M' + x0 + ',0L0,0'; }, needLine: true, @@ -21068,9 +21156,9 @@ module.exports = { } }; -},{"d3":16}],77:[function(_dereq_,module,exports){ +},{"d3":16}],74:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21183,26 +21271,25 @@ module.exports = { } }; -},{}],78:[function(_dereq_,module,exports){ +},{}],75:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); var Registry = _dereq_('../../registry'); var Axes = _dereq_('../../plots/cartesian/axes'); +var Lib = _dereq_('../../lib'); var makeComputeError = _dereq_('./compute_error'); - module.exports = function calc(gd) { var calcdata = gd.calcdata; @@ -21220,9 +21307,9 @@ module.exports = function calc(gd) { }; function calcOneAxis(calcTrace, trace, axis, coord) { - var opts = trace['error_' + coord] || {}, - isVisible = (opts.visible && ['linear', 'log'].indexOf(axis.type) !== -1), - vals = []; + var opts = trace['error_' + coord] || {}; + var isVisible = (opts.visible && ['linear', 'log'].indexOf(axis.type) !== -1); + var vals = []; if(!isVisible) return; @@ -21253,21 +21340,26 @@ function calcOneAxis(calcTrace, trace, axis, coord) { var errors = computeError(calcCoord, iIn); if(isNumeric(errors[0]) && isNumeric(errors[1])) { - var shoe = calcPt[coord + 's'] = calcCoord - errors[0], - hat = calcPt[coord + 'h'] = calcCoord + errors[1]; + var shoe = calcPt[coord + 's'] = calcCoord - errors[0]; + var hat = calcPt[coord + 'h'] = calcCoord + errors[1]; vals.push(shoe, hat); } } - var extremes = Axes.findExtremes(axis, vals, {padded: true}); var axId = axis._id; - trace._extremes[axId].min = trace._extremes[axId].min.concat(extremes.min); - trace._extremes[axId].max = trace._extremes[axId].max.concat(extremes.max); + var baseExtremes = trace._extremes[axId]; + var extremes = Axes.findExtremes( + axis, + vals, + Lib.extendFlat({tozero: baseExtremes.opts.tozero}, {padded: true}) + ); + baseExtremes.min = baseExtremes.min.concat(extremes.min); + baseExtremes.max = baseExtremes.max.concat(extremes.max); } -},{"../../plots/cartesian/axes":214,"../../registry":259,"./compute_error":79,"fast-isnumeric":18}],79:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"../../registry":257,"./compute_error":76,"fast-isnumeric":18}],76:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21294,8 +21386,8 @@ function calcOneAxis(calcTrace, trace, axis, coord) { * - error[1] : " " " " positive " */ module.exports = function makeComputeError(opts) { - var type = opts.type, - symmetric = opts.symmetric; + var type = opts.type; + var symmetric = opts.symmetric; if(type === 'data') { var array = opts.array || []; @@ -21322,8 +21414,8 @@ module.exports = function makeComputeError(opts) { } } else { - var computeErrorValue = makeComputeErrorValue(type, opts.value), - computeErrorValueMinus = makeComputeErrorValue(type, opts.valueminus); + var computeErrorValue = makeComputeErrorValue(type, opts.value); + var computeErrorValueMinus = makeComputeErrorValue(type, opts.valueminus); if(symmetric || opts.valueminus === undefined) { return function computeError(dataPt) { @@ -21369,9 +21461,9 @@ function makeComputeErrorValue(type, value) { } } -},{}],80:[function(_dereq_,module,exports){ +},{}],77:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21408,8 +21500,8 @@ module.exports = function(traceIn, traceOut, defaultColor, opts) { if(visible === false) return; - var type = coerce('type', 'array' in containerIn ? 'data' : 'percent'), - symmetric = true; + var type = coerce('type', 'array' in containerIn ? 'data' : 'percent'); + var symmetric = true; if(type !== 'sqrt') { symmetric = coerce('symmetric', @@ -21445,9 +21537,9 @@ module.exports = function(traceIn, traceOut, defaultColor, opts) { } }; -},{"../../lib":169,"../../plot_api/plot_template":204,"../../registry":259,"./attributes":77,"fast-isnumeric":18}],81:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../registry":257,"./attributes":74,"fast-isnumeric":18}],78:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21514,9 +21606,9 @@ function hoverInfo(calcPoint, trace, hoverPoint) { } } -},{"../../lib":169,"../../plot_api/edit_types":197,"./attributes":77,"./calc":78,"./compute_error":79,"./defaults":80,"./plot":82,"./style":83}],82:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/edit_types":195,"./attributes":74,"./calc":75,"./compute_error":76,"./defaults":77,"./plot":79,"./style":80}],79:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21532,7 +21624,7 @@ var isNumeric = _dereq_('fast-isnumeric'); var Drawing = _dereq_('../drawing'); var subTypes = _dereq_('../../traces/scatter/subtypes'); -module.exports = function plot(traces, plotinfo, transitionOpts) { +module.exports = function plot(gd, traces, plotinfo, transitionOpts) { var isNew; var xa = plotinfo.xaxis; @@ -21541,13 +21633,13 @@ module.exports = function plot(traces, plotinfo, transitionOpts) { var hasAnimation = transitionOpts && transitionOpts.duration > 0; traces.each(function(d) { - var trace = d[0].trace, - // || {} is in case the trace (specifically scatterternary) - // doesn't support error bars at all, but does go through - // the scatter.plot mechanics, which calls ErrorBars.plot - // internally - xObj = trace.error_x || {}, - yObj = trace.error_y || {}; + var trace = d[0].trace; + // || {} is in case the trace (specifically scatterternary) + // doesn't support error bars at all, but does go through + // the scatter.plot mechanics, which calls ErrorBars.plot + // internally + var xObj = trace.error_x || {}; + var yObj = trace.error_y || {}; var keyFunc; @@ -21583,7 +21675,7 @@ module.exports = function plot(traces, plotinfo, transitionOpts) { .style('opacity', 1); } - Drawing.setClipUrl(errorbars, plotinfo.layerClipId); + Drawing.setClipUrl(errorbars, plotinfo.layerClipId, gd); errorbars.each(function(d) { var errorbar = d3.select(this); @@ -21688,9 +21780,9 @@ function errorCoords(d, xa, ya) { return out; } -},{"../../traces/scatter/subtypes":390,"../drawing":75,"d3":16,"fast-isnumeric":18}],83:[function(_dereq_,module,exports){ +},{"../../traces/scatter/subtypes":391,"../drawing":72,"d3":16,"fast-isnumeric":18}],80:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21707,9 +21799,9 @@ var Color = _dereq_('../color'); module.exports = function style(traces) { traces.each(function(d) { - var trace = d[0].trace, - yObj = trace.error_y || {}, - xObj = trace.error_x || {}; + var trace = d[0].trace; + var yObj = trace.error_y || {}; + var xObj = trace.error_x || {}; var s = d3.select(this); @@ -21725,9 +21817,9 @@ module.exports = function style(traces) { }); }; -},{"../color":50,"d3":16}],84:[function(_dereq_,module,exports){ +},{"../color":51,"d3":16}],81:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21771,9 +21863,9 @@ module.exports = { } }; -},{"../../plots/font_attributes":240}],85:[function(_dereq_,module,exports){ +},{"../../plots/font_attributes":239}],82:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21808,6 +21900,8 @@ module.exports = function calc(gd) { fillFn(trace.hoverinfo, cd, 'hi', makeCoerceHoverInfo(trace)); + if(trace.hovertemplate) fillFn(trace.hovertemplate, cd, 'ht'); + if(!trace.hoverlabel) continue; fillFn(trace.hoverlabel.bgcolor, cd, 'hbg'); @@ -21827,9 +21921,9 @@ function paste(traceAttr, cd, cdAttr, fn) { } } -},{"../../lib":169,"../../registry":259}],86:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],83:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21865,9 +21959,9 @@ module.exports = function click(gd, evt, subplot) { } }; -},{"../../registry":259,"./hover":90}],87:[function(_dereq_,module,exports){ +},{"../../registry":257,"./hover":87}],84:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21897,9 +21991,9 @@ module.exports = { HOVERID: '-hover' }; -},{}],88:[function(_dereq_,module,exports){ +},{}],85:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21920,9 +22014,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout handleHoverLabelDefaults(traceIn, traceOut, coerce, layout.hoverlabel); }; -},{"../../lib":169,"./attributes":84,"./hoverlabel_defaults":91}],89:[function(_dereq_,module,exports){ +},{"../../lib":168,"./attributes":81,"./hoverlabel_defaults":88}],86:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22018,8 +22112,8 @@ exports.inbox = function inbox(v0, v1, passVal) { exports.quadrature = function quadrature(dx, dy) { return function(di) { - var x = dx(di), - y = dy(di); + var x = dx(di); + var y = dy(di); return Math.sqrt(x * x + y * y); }; }; @@ -22163,9 +22257,9 @@ function getPointData(val, pointNumber) { } } -},{"../../lib":169}],90:[function(_dereq_,module,exports){ +},{"../../lib":168}],87:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22292,13 +22386,17 @@ exports.loneHover = function loneHover(hoverItem, opts) { fontColor: hoverItem.fontColor, // filler to make createHoverText happy - trace: { + trace: hoverItem.trace || { index: 0, hoverinfo: '' }, xa: {_offset: 0}, ya: {_offset: 0}, - index: 0 + index: 0, + + hovertemplate: hoverItem.hovertemplate || false, + eventData: hoverItem.eventData || false, + hovertemplateLabels: hoverItem.hovertemplateLabels || false, }; var container3 = d3.select(opts.container); @@ -22312,13 +22410,90 @@ exports.loneHover = function loneHover(hoverItem, opts) { container: container3, outerContainer: outerContainer3 }; - var hoverLabel = createHoverText([pointData], fullOpts, opts.gd); alignHoverText(hoverLabel, fullOpts.rotateLabels); return hoverLabel.node(); }; +exports.multiHovers = function multiHovers(hoverItems, opts) { + + if(!Array.isArray(hoverItems)) { + hoverItems = [hoverItems]; + } + + var pointsData = hoverItems.map(function(hoverItem) { + return { + color: hoverItem.color || Color.defaultLine, + x0: hoverItem.x0 || hoverItem.x || 0, + x1: hoverItem.x1 || hoverItem.x || 0, + y0: hoverItem.y0 || hoverItem.y || 0, + y1: hoverItem.y1 || hoverItem.y || 0, + xLabel: hoverItem.xLabel, + yLabel: hoverItem.yLabel, + zLabel: hoverItem.zLabel, + text: hoverItem.text, + name: hoverItem.name, + idealAlign: hoverItem.idealAlign, + + // optional extra bits of styling + borderColor: hoverItem.borderColor, + fontFamily: hoverItem.fontFamily, + fontSize: hoverItem.fontSize, + fontColor: hoverItem.fontColor, + + // filler to make createHoverText happy + trace: hoverItem.trace || { + index: 0, + hoverinfo: '' + }, + xa: {_offset: 0}, + ya: {_offset: 0}, + index: 0, + + hovertemplate: hoverItem.hovertemplate || false, + eventData: hoverItem.eventData || false, + hovertemplateLabels: hoverItem.hovertemplateLabels || false, + }; + }); + + + var container3 = d3.select(opts.container); + var outerContainer3 = opts.outerContainer ? d3.select(opts.outerContainer) : container3; + + var fullOpts = { + hovermode: 'closest', + rotateLabels: false, + bgColor: opts.bgColor || Color.background, + container: container3, + outerContainer: outerContainer3 + }; + + var hoverLabel = createHoverText(pointsData, fullOpts, opts.gd); + + // Fix vertical overlap + var tooltipSpacing = 5; + var lastBottomY = 0; + hoverLabel + .sort(function(a, b) {return a.y0 - b.y0;}) + .each(function(d) { + var topY = d.y0 - d.by / 2; + + if((topY - tooltipSpacing) < lastBottomY) { + d.offset = (lastBottomY - topY) + tooltipSpacing; + } else { + d.offset = 0; + } + + lastBottomY = topY + d.by + d.offset; + }); + + + alignHoverText(hoverLabel, fullOpts.rotateLabels); + + return hoverLabel.node(); +}; + // The actual implementation is here: function _hover(gd, evt, subplot, noHoverEvent) { if(!subplot) subplot = 'xy'; @@ -22414,12 +22589,14 @@ function _hover(gd, evt, subplot, noHoverEvent) { // user specified an array of points to highlight hovermode = 'array'; for(itemnum = 0; itemnum < evt.length; itemnum++) { - cd = gd.calcdata[evt[itemnum].curveNumber||0]; - trace = cd[0].trace; - if(cd[0].trace.hoverinfo !== 'skip') { - searchData.push(cd); - if(trace.orientation === 'h') { - hasOneHorizontalTrace = true; + cd = gd.calcdata[evt[itemnum].curveNumber || 0]; + if(cd) { + trace = cd[0].trace; + if(cd[0].trace.hoverinfo !== 'skip') { + searchData.push(cd); + if(trace.orientation === 'h') { + hasOneHorizontalTrace = true; + } } } } @@ -22562,6 +22739,10 @@ function _hover(gd, evt, subplot, noHoverEvent) { if(fullLayout[subplotId]) { pointData.subplot = fullLayout[subplotId]._subplot; } + // add ref to splom scene + if(fullLayout._splomScenes && fullLayout._splomScenes[trace.uid]) { + pointData.scene = fullLayout._splomScenes[trace.uid]; + } closedataPreviousLength = hoverData.length; @@ -22698,11 +22879,11 @@ function _hover(gd, evt, subplot, noHoverEvent) { outerContainer: fullLayout._paperdiv, event: evt }; - var oldspikepoints = gd._spikepoints, - newspikepoints = { - vLinePoint: spikePoints.vLinePoint, - hLinePoint: spikePoints.hLinePoint - }; + var oldspikepoints = gd._spikepoints; + var newspikepoints = { + vLinePoint: spikePoints.vLinePoint, + hLinePoint: spikePoints.hLinePoint + }; gd._spikepoints = newspikepoints; // Now if it is not restricted by spikedistance option, set the points to draw the spikelines @@ -22749,7 +22930,14 @@ function _hover(gd, evt, subplot, noHoverEvent) { // other people and send it to the event for(itemnum = 0; itemnum < hoverData.length; itemnum++) { var pt = hoverData[itemnum]; - newhoverdata.push(helpers.makeEventData(pt, pt.trace, pt.cd)); + var eventData = helpers.makeEventData(pt, pt.trace, pt.cd); + + var ht = false; + if(pt.cd[pt.index] && pt.cd[pt.index].ht) ht = pt.cd[pt.index].ht; + hoverData[itemnum].hovertemplate = ht || pt.trace.hovertemplate || false; + hoverData[itemnum].eventData = [eventData]; + + newhoverdata.push(eventData); } gd._hoverdata = newhoverdata; @@ -22807,6 +22995,8 @@ function _hover(gd, evt, subplot, noHoverEvent) { }); } +var EXTRA_STRING_REGEX = /([\s\S]*)<\/extra>/; + function createHoverText(hoverData, opts, gd) { var hovermode = opts.hovermode; var rotateLabels = opts.rotateLabels; @@ -22850,11 +23040,13 @@ function createHoverText(hoverData, opts, gd) { if(allHaveZ && hoverData[i].zLabel === undefined) allHaveZ = false; traceHoverinfo = hoverData[i].hoverinfo || hoverData[i].trace.hoverinfo; - var parts = Array.isArray(traceHoverinfo) ? traceHoverinfo : traceHoverinfo.split('+'); - if(parts.indexOf('all') === -1 && - parts.indexOf(hovermode) === -1) { - showCommonLabel = false; - break; + if(traceHoverinfo) { + var parts = Array.isArray(traceHoverinfo) ? traceHoverinfo : traceHoverinfo.split('+'); + if(parts.indexOf('all') === -1 && + parts.indexOf(hovermode) === -1) { + showCommonLabel = false; + break; + } } } @@ -22993,15 +23185,10 @@ function createHoverText(hoverData, opts, gd) { if(d.nameOverride !== undefined) d.name = d.nameOverride; if(d.name) { - // strip out our pseudo-html elements from d.name (if it exists at all) - name = svgTextUtils.plainText(d.name || ''); - - var nameLength = Math.round(d.nameLength); - - if(nameLength > -1 && name.length > nameLength) { - if(nameLength > 3) name = name.substr(0, nameLength - 3) + '...'; - else name = name.substr(0, nameLength); - } + name = svgTextUtils.plainText(d.name || '', { + len: d.nameLength, + allowedTags: ['br', 'sub', 'sup', 'b', 'i', 'em'] + }); } if(d.zLabel !== undefined) { @@ -23030,13 +23217,27 @@ function createHoverText(hoverData, opts, gd) { if(d.extraText !== undefined) text += (text ? '
' : '') + d.extraText; // if 'text' is empty at this point, + // and hovertemplate is not defined, // put 'name' in main label and don't show secondary label - if(text === '') { + if(text === '' && !d.hovertemplate) { // if 'name' is also empty, remove entire label if(name === '') g.remove(); text = name; } + // hovertemplate + var hovertemplate = d.hovertemplate || false; + var hovertemplateLabels = d.hovertemplateLabels || d; + var eventData = d.eventData[0] || {}; + if(hovertemplate) { + text = Lib.hovertemplateString(hovertemplate, hovertemplateLabels, eventData); + + text = text.replace(EXTRA_STRING_REGEX, function(match, extra) { + name = extra; // Assign name for secondary text label + return ''; // Remove from main text label + }); + } + // main label var tx = g.select('text.nums') .call(Drawing.font, @@ -23050,6 +23251,7 @@ function createHoverText(hoverData, opts, gd) { var tx2 = g.select('text.name'); var tx2width = 0; + var tx2height = 0; // secondary label for non-empty 'name' if(name && name !== text) { @@ -23061,18 +23263,20 @@ function createHoverText(hoverData, opts, gd) { .attr('data-notex', 1) .call(svgTextUtils.positionText, 0, 0) .call(svgTextUtils.convertToTspans, gd); - tx2width = tx2.node().getBoundingClientRect().width + 2 * HOVERTEXTPAD; - } - else { + + var t2bb = tx2.node().getBoundingClientRect(); + tx2width = t2bb.width + 2 * HOVERTEXTPAD; + tx2height = t2bb.height + 2 * HOVERTEXTPAD; + } else { tx2.remove(); g.select('rect').remove(); } - g.select('path') - .style({ - fill: numsColor, - stroke: contrastColor - }); + g.select('path').style({ + fill: numsColor, + stroke: contrastColor + }); + var tbb = tx.node().getBoundingClientRect(); var htx = d.xa._offset + (d.x0 + d.x1) / 2; var hty = d.ya._offset + (d.y0 + d.y1) / 2; @@ -23083,7 +23287,7 @@ function createHoverText(hoverData, opts, gd) { d.ty0 = outerTop - tbb.top; d.bx = tbb.width + 2 * HOVERTEXTPAD; - d.by = tbb.height + 2 * HOVERTEXTPAD; + d.by = Math.max(tbb.height + 2 * HOVERTEXTPAD, tx2height); d.anchor = 'start'; d.txwidth = tbb.width; d.tx2width = tx2width; @@ -23137,7 +23341,6 @@ function createHoverText(hoverData, opts, gd) { // information then. function hoverAvoidOverlaps(hoverData, ax, fullLayout) { var nummoves = 0; - var axSign = 1; // make groups of touching points @@ -23383,7 +23586,7 @@ function cleanPoint(d, hovermode) { fill('fontColor', 'htc', 'hoverlabel.font.color'); fill('nameLength', 'hnl', 'hoverlabel.namelength'); - d.posref = hovermode === 'y' ? + d.posref = (hovermode === 'y' || (hovermode === 'closest' && trace.orientation === 'h')) ? (d.xa._offset + (d.x0 + d.x1) / 2) : (d.ya._offset + (d.y0 + d.y1) / 2); @@ -23435,7 +23638,7 @@ function cleanPoint(d, hovermode) { var infomode = d.hoverinfo || d.trace.hoverinfo; - if(infomode !== 'all') { + if(infomode && infomode !== 'all') { infomode = Array.isArray(infomode) ? infomode : infomode.split('+'); if(infomode.indexOf('x') === -1) d.xLabel = undefined; if(infomode.indexOf('y') === -1) d.yLabel = undefined; @@ -23621,8 +23824,11 @@ function hoverChanged(gd, evt, oldhoverdata) { for(var i = oldhoverdata.length - 1; i >= 0; i--) { var oldPt = oldhoverdata[i]; var newPt = gd._hoverdata[i]; + if(oldPt.curveNumber !== newPt.curveNumber || - String(oldPt.pointNumber) !== String(newPt.pointNumber)) { + String(oldPt.pointNumber) !== String(newPt.pointNumber) || + String(oldPt.pointNumbers) !== String(newPt.pointNumbers) + ) { return true; } } @@ -23638,9 +23844,9 @@ function spikesChanged(gd, oldspikepoints) { return false; } -},{"../../lib":169,"../../lib/events":162,"../../lib/override_cursor":181,"../../lib/svg_text_utils":191,"../../plots/cartesian/axes":214,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"./constants":87,"./helpers":89,"d3":16,"fast-isnumeric":18,"tinycolor2":33}],91:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../lib/events":161,"../../lib/override_cursor":179,"../../lib/svg_text_utils":189,"../../plots/cartesian/axes":212,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"./constants":84,"./helpers":86,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],88:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -23660,9 +23866,51 @@ module.exports = function handleHoverLabelDefaults(contIn, contOut, coerce, opts Lib.coerceFont(coerce, 'hoverlabel.font', opts.font); }; -},{"../../lib":169}],92:[function(_dereq_,module,exports){ +},{"../../lib":168}],89:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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'; + +module.exports = function(opts, extra) { + opts = opts || {}; + extra = extra || {}; + + var descPart = extra.description ? ' ' + extra.description : ''; + var keys = extra.keys || []; + if(keys.length > 0) { + var quotedKeys = []; + for(var i = 0; i < keys.length; i++) { + quotedKeys[i] = '`' + keys[i] + '`'; + } + descPart = descPart + 'Finally, the template string has access to '; + if(keys.length === 1) { + descPart = 'variable ' + quotedKeys[0]; + } else { + descPart = 'variables ' + quotedKeys.slice(0, -1).join(', ') + ' and ' + quotedKeys.slice(-1) + '.'; + } + } + + var hovertemplate = { + valType: 'string', + + dflt: '', + arrayOk: true, + editType: 'none', + + }; + + return hovertemplate; +}; + +},{}],90:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -23676,6 +23924,7 @@ var Lib = _dereq_('../../lib'); var dragElement = _dereq_('../dragelement'); var helpers = _dereq_('./helpers'); var layoutAttributes = _dereq_('./layout_attributes'); +var hoverModule = _dereq_('./hover'); module.exports = { moduleType: 'component', @@ -23704,10 +23953,11 @@ module.exports = { castHoverOption: castHoverOption, castHoverinfo: castHoverinfo, - hover: _dereq_('./hover').hover, + hover: hoverModule.hover, unhover: dragElement.unhover, - loneHover: _dereq_('./hover').loneHover, + loneHover: hoverModule.loneHover, + multiHovers: hoverModule.multiHovers, loneUnhover: loneUnhover, click: _dereq_('./click') @@ -23738,9 +23988,9 @@ function castHoverinfo(trace, fullLayout, ptNumber) { return Lib.castOption(trace, ptNumber, 'hoverinfo', _coerce); } -},{"../../lib":169,"../dragelement":72,"./attributes":84,"./calc":85,"./click":86,"./constants":87,"./defaults":88,"./helpers":89,"./hover":90,"./layout_attributes":93,"./layout_defaults":94,"./layout_global_defaults":95,"d3":16}],93:[function(_dereq_,module,exports){ +},{"../../lib":168,"../dragelement":69,"./attributes":81,"./calc":82,"./click":83,"./constants":84,"./defaults":85,"./helpers":86,"./hover":87,"./layout_attributes":91,"./layout_defaults":92,"./layout_global_defaults":93,"d3":16}],91:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -23771,7 +24021,7 @@ module.exports = { dragmode: { valType: 'enumerated', - values: ['zoom', 'pan', 'select', 'lasso', 'orbit', 'turntable'], + values: ['zoom', 'pan', 'select', 'lasso', 'orbit', 'turntable', false], dflt: 'zoom', editType: 'modebar', @@ -23833,9 +24083,9 @@ module.exports = { } }; -},{"../../plots/font_attributes":240,"./constants":87}],94:[function(_dereq_,module,exports){ +},{"../../plots/font_attributes":239,"./constants":84}],92:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -23906,9 +24156,9 @@ function isHoriz(fullData) { return out; } -},{"../../lib":169,"./layout_attributes":93}],95:[function(_dereq_,module,exports){ +},{"../../lib":168,"./layout_attributes":91}],93:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -23929,9 +24179,9 @@ module.exports = function supplyLayoutGlobalDefaults(layoutIn, layoutOut) { handleHoverLabelDefaults(layoutIn, layoutOut, coerce); }; -},{"../../lib":169,"./hoverlabel_defaults":91,"./layout_attributes":93}],96:[function(_dereq_,module,exports){ +},{"../../lib":168,"./hoverlabel_defaults":88,"./layout_attributes":91}],94:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24314,9 +24564,9 @@ module.exports = { contentDefaults: contentDefaults }; -},{"../../lib":169,"../../lib/regex":185,"../../plot_api/plot_template":204,"../../plots/cartesian/constants":219,"../../plots/domain":239}],97:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../lib/regex":183,"../../plot_api/plot_template":202,"../../plots/cartesian/constants":218,"../../plots/domain":238}],95:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24449,9 +24699,9 @@ module.exports = templatedArray('image', { editType: 'arraydraw' }); -},{"../../plot_api/plot_template":204,"../../plots/cartesian/constants":219}],98:[function(_dereq_,module,exports){ +},{"../../plot_api/plot_template":202,"../../plots/cartesian/constants":218}],96:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24485,25 +24735,25 @@ var toLogRange = _dereq_('../../lib/to_log_range'); module.exports = function convertCoords(gd, ax, newType, doExtra) { ax = ax || {}; - var toLog = (newType === 'log') && (ax.type === 'linear'), - fromLog = (newType === 'linear') && (ax.type === 'log'); + var toLog = (newType === 'log') && (ax.type === 'linear'); + var fromLog = (newType === 'linear') && (ax.type === 'log'); if(!(toLog || fromLog)) return; - var images = gd._fullLayout.images, - axLetter = ax._id.charAt(0), - image, - attrPrefix; + var images = gd._fullLayout.images; + var axLetter = ax._id.charAt(0); + var image; + var attrPrefix; for(var i = 0; i < images.length; i++) { image = images[i]; attrPrefix = 'images[' + i + '].'; if(image[axLetter + 'ref'] === ax._id) { - var currentPos = image[axLetter], - currentSize = image['size' + axLetter], - newPos = null, - newSize = null; + var currentPos = image[axLetter]; + var currentSize = image['size' + axLetter]; + var newPos = null; + var newSize = null; if(toLog) { newPos = toLogRange(currentPos, ax.range); @@ -24532,9 +24782,9 @@ module.exports = function convertCoords(gd, ax, newType, doExtra) { } }; -},{"../../lib/to_log_range":193,"fast-isnumeric":18}],99:[function(_dereq_,module,exports){ +},{"../../lib/to_log_range":191,"fast-isnumeric":18}],97:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24579,13 +24829,18 @@ function imageDefaults(imageIn, imageOut, fullLayout) { coerce('sizing'); coerce('opacity'); - var gdMock = { _fullLayout: fullLayout }, - axLetters = ['x', 'y']; + var gdMock = { _fullLayout: fullLayout }; + var axLetters = ['x', 'y']; for(var i = 0; i < 2; i++) { // 'paper' is the fallback axref - var axLetter = axLetters[i], - axRef = Axes.coerceRef(imageIn, imageOut, gdMock, axLetter, 'paper'); + var axLetter = axLetters[i]; + var axRef = Axes.coerceRef(imageIn, imageOut, gdMock, axLetter, 'paper'); + + if(axRef !== 'paper') { + var ax = Axes.getFromId(gdMock, axRef); + ax._imgIndices.push(imageOut._index); + } Axes.coercePosition(imageOut, gdMock, coerce, axRef, axLetter, 0); } @@ -24593,9 +24848,9 @@ function imageDefaults(imageIn, imageOut, fullLayout) { return imageOut; } -},{"../../lib":169,"../../plots/array_container_defaults":210,"../../plots/cartesian/axes":214,"./attributes":97}],100:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"../../plots/cartesian/axes":212,"./attributes":95}],98:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24610,12 +24865,12 @@ var Axes = _dereq_('../../plots/cartesian/axes'); var xmlnsNamespaces = _dereq_('../../constants/xmlns_namespaces'); module.exports = function draw(gd) { - var fullLayout = gd._fullLayout, - imageDataAbove = [], - imageDataSubplot = {}, - imageDataBelow = [], - subplot, - i; + var fullLayout = gd._fullLayout; + var imageDataAbove = []; + var imageDataSubplot = {}; + var imageDataBelow = []; + var subplot; + var i; // Sort into top, subplot, and bottom layers for(i = 0; i < fullLayout.images.length; i++) { @@ -24720,23 +24975,22 @@ module.exports = function draw(gd) { var thisImage = d3.select(this); // Axes if specified - var xa = Axes.getFromId(gd, d.xref), - ya = Axes.getFromId(gd, d.yref); + var xa = Axes.getFromId(gd, d.xref); + var ya = Axes.getFromId(gd, d.yref); - var size = fullLayout._size, - width = xa ? Math.abs(xa.l2p(d.sizex) - xa.l2p(0)) : d.sizex * size.w, - height = ya ? Math.abs(ya.l2p(d.sizey) - ya.l2p(0)) : d.sizey * size.h; + var size = fullLayout._size; + var width = xa ? Math.abs(xa.l2p(d.sizex) - xa.l2p(0)) : d.sizex * size.w; + var height = ya ? Math.abs(ya.l2p(d.sizey) - ya.l2p(0)) : d.sizey * size.h; // Offsets for anchor positioning - var xOffset = width * anchors.x[d.xanchor].offset, - yOffset = height * anchors.y[d.yanchor].offset; + var xOffset = width * anchors.x[d.xanchor].offset; + var yOffset = height * anchors.y[d.yanchor].offset; var sizing = anchors.x[d.xanchor].sizing + anchors.y[d.yanchor].sizing; // Final positions - var xPos = (xa ? xa.r2p(d.x) + xa._offset : d.x * size.w + size.l) + xOffset, - yPos = (ya ? ya.r2p(d.y) + ya._offset : size.h - d.y * size.h + size.t) + yOffset; - + var xPos = (xa ? xa.r2p(d.x) + xa._offset : d.x * size.w + size.l) + xOffset; + var yPos = (ya ? ya.r2p(d.y) + ya._offset : size.h - d.y * size.h + size.t) + yOffset; // Construct the proper aspectRatio attribute switch(d.sizing) { @@ -24760,20 +25014,21 @@ module.exports = function draw(gd) { // Set proper clipping on images - var xId = xa ? xa._id : '', - yId = ya ? ya._id : '', - clipAxes = xId + yId; + var xId = xa ? xa._id : ''; + var yId = ya ? ya._id : ''; + var clipAxes = xId + yId; - thisImage.call(Drawing.setClipUrl, clipAxes ? - ('clip' + fullLayout._uid + clipAxes) : - null + Drawing.setClipUrl( + thisImage, + clipAxes ? ('clip' + fullLayout._uid + clipAxes) : null, + gd ); } var imagesBelow = fullLayout._imageLowerLayer.selectAll('image') - .data(imageDataBelow), - imagesAbove = fullLayout._imageUpperLayer.selectAll('image') - .data(imageDataAbove); + .data(imageDataBelow); + var imagesAbove = fullLayout._imageUpperLayer.selectAll('image') + .data(imageDataAbove); imagesBelow.enter().append('image'); imagesAbove.enter().append('image'); @@ -24814,9 +25069,9 @@ module.exports = function draw(gd) { } }; -},{"../../constants/xmlns_namespaces":152,"../../plots/cartesian/axes":214,"../drawing":75,"d3":16}],101:[function(_dereq_,module,exports){ +},{"../../constants/xmlns_namespaces":150,"../../plots/cartesian/axes":212,"../drawing":72,"d3":16}],99:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24838,58 +25093,9 @@ module.exports = { convertCoords: _dereq_('./convert_coords') }; -},{"../../plots/cartesian/include_components":224,"./attributes":97,"./convert_coords":98,"./defaults":99,"./draw":100}],102:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/include_components":223,"./attributes":95,"./convert_coords":96,"./defaults":97,"./draw":98}],100:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - - -/** - * Determine the position anchor property of x/y xanchor/yanchor components. - * - * - values < 1/3 align the low side at that fraction, - * - values [1/3, 2/3] align the center at that fraction, - * - values > 2/3 align the right at that fraction. - */ - -exports.isRightAnchor = function isRightAnchor(opts) { - return ( - opts.xanchor === 'right' || - (opts.xanchor === 'auto' && opts.x >= 2 / 3) - ); -}; - -exports.isCenterAnchor = function isCenterAnchor(opts) { - return ( - opts.xanchor === 'center' || - (opts.xanchor === 'auto' && opts.x > 1 / 3 && opts.x < 2 / 3) - ); -}; - -exports.isBottomAnchor = function isBottomAnchor(opts) { - return ( - opts.yanchor === 'bottom' || - (opts.yanchor === 'auto' && opts.y <= 1 / 3) - ); -}; - -exports.isMiddleAnchor = function isMiddleAnchor(opts) { - return ( - opts.yanchor === 'middle' || - (opts.yanchor === 'auto' && opts.y > 1 / 3 && opts.y < 2 / 3) - ); -}; - -},{}],103:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24985,13 +25191,27 @@ module.exports = { editType: 'legend', + }, + uirevision: { + valType: 'any', + + editType: 'none', + + }, + valign: { + valType: 'enumerated', + values: ['top', 'middle', 'bottom'], + dflt: 'middle', + + editType: 'legend', + }, editType: 'legend' }; -},{"../../plots/font_attributes":240,"../color/attributes":49}],104:[function(_dereq_,module,exports){ +},{"../../plots/font_attributes":239,"../color/attributes":50}],101:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25008,9 +25228,9 @@ module.exports = { textOffsetX: 40 }; -},{}],105:[function(_dereq_,module,exports){ +},{}],102:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25077,7 +25297,7 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { basePlotLayoutAttributes, 'showlegend', legendReallyHasATrace && legendTraceCount > 1); - if(showLegend === false) return; + if(showLegend === false && !containerIn.uirevision) return; var containerOut = Template.newContainer(layoutOut, 'legend'); @@ -25085,6 +25305,10 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { return Lib.coerce(containerIn, containerOut, attributes, attr, dflt); } + coerce('uirevision', layoutOut.uirevision); + + if(showLegend === false) return; + coerce('bgcolor', layoutOut.paper_bgcolor); coerce('bordercolor'); coerce('borderwidth'); @@ -25093,7 +25317,7 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { coerce('orientation'); if(containerOut.orientation === 'h') { var xaxis = layoutIn.xaxis; - if(xaxis && xaxis.rangeslider && xaxis.rangeslider.visible) { + if(Registry.getComponentMethod('rangeslider', 'isVisible')(xaxis)) { defaultX = 0; defaultXAnchor = 'left'; defaultY = 1.1; @@ -25114,12 +25338,13 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { coerce('xanchor', defaultXAnchor); coerce('y', defaultY); coerce('yanchor', defaultYAnchor); + coerce('valign'); Lib.noneOrAll(containerIn, containerOut, ['x', 'y']); }; -},{"../../lib":169,"../../plot_api/plot_template":204,"../../plots/layout_attributes":244,"../../registry":259,"./attributes":103,"./helpers":109}],106:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../plots/layout_attributes":243,"../../registry":257,"./attributes":100,"./helpers":106}],103:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25150,7 +25375,6 @@ var FROM_BR = alignmentConstants.FROM_BR; var getLegendData = _dereq_('./get_legend_data'); var style = _dereq_('./style'); var helpers = _dereq_('./helpers'); -var anchorUtils = _dereq_('./anchor_utils'); var DBLCLICKDELAY = interactConstants.DBLCLICKDELAY; @@ -25229,20 +25453,20 @@ module.exports = function draw(gd) { traces.enter().append('g').attr('class', 'traces'); traces.exit().remove(); - traces.call(style, gd) - .style('opacity', function(d) { - var trace = d[0].trace; - if(Registry.traceIs(trace, 'pie')) { - return hiddenSlices.indexOf(d[0].label) !== -1 ? 0.5 : 1; - } else { - return trace.visible === 'legendonly' ? 0.5 : 1; - } - }) - .each(function() { - d3.select(this) - .call(drawTexts, gd, maxLength) - .call(setupTraceToggle, gd); - }); + traces.style('opacity', function(d) { + var trace = d[0].trace; + if(Registry.traceIs(trace, 'pie')) { + return hiddenSlices.indexOf(d[0].label) !== -1 ? 0.5 : 1; + } else { + return trace.visible === 'legendonly' ? 0.5 : 1; + } + }) + .each(function() { + d3.select(this) + .call(drawTexts, gd, maxLength) + .call(setupTraceToggle, gd); + }) + .call(style, gd); Lib.syncOrAsync([Plots.previousPromises, function() { @@ -25252,10 +25476,10 @@ module.exports = function draw(gd) { } // Position and size the legend - var lxMin = 0, - lxMax = fullLayout.width, - lyMin = 0, - lyMax = fullLayout.height; + var lxMin = 0; + var lxMax = fullLayout.width; + var lyMin = 0; + var lyMax = fullLayout.height; computeLegendDimensions(gd, groups, traces); @@ -25270,27 +25494,27 @@ module.exports = function draw(gd) { // Scroll section must be executed after repositionLegend. // It requires the legend width, height, x and y to position the scrollbox // and these values are mutated in repositionLegend. - var gs = fullLayout._size, - lx = gs.l + gs.w * opts.x, - ly = gs.t + gs.h * (1 - opts.y); + var gs = fullLayout._size; + var lx = gs.l + gs.w * opts.x; + var ly = gs.t + gs.h * (1 - opts.y); - if(anchorUtils.isRightAnchor(opts)) { + if(Lib.isRightAnchor(opts)) { lx -= opts._width; } - else if(anchorUtils.isCenterAnchor(opts)) { + else if(Lib.isCenterAnchor(opts)) { lx -= opts._width / 2; } - if(anchorUtils.isBottomAnchor(opts)) { + if(Lib.isBottomAnchor(opts)) { ly -= opts._height; } - else if(anchorUtils.isMiddleAnchor(opts)) { + else if(Lib.isMiddleAnchor(opts)) { ly -= opts._height / 2; } // Make sure the legend left and right sides are visible - var legendWidth = opts._width, - legendWidthMax = gs.w; + var legendWidth = opts._width; + var legendWidthMax = gs.w; if(legendWidth > legendWidthMax) { lx = gs.l; @@ -25305,8 +25529,8 @@ module.exports = function draw(gd) { // Make sure the legend top and bottom are visible // (legends with a scroll bar are not allowed to stretch beyond the extended // margins) - var legendHeight = opts._height, - legendHeightMax = gs.h; + var legendHeight = opts._height; + var legendHeightMax = gs.h; if(legendHeight > legendHeightMax) { ly = gs.t; @@ -25344,7 +25568,7 @@ module.exports = function draw(gd) { y: opts.borderwidth }); - Drawing.setClipUrl(scrollBox, clipId); + Drawing.setClipUrl(scrollBox, clipId, gd); Drawing.setRect(scrollBar, 0, 0, 0, 0); delete opts._scrollY; @@ -25382,7 +25606,7 @@ module.exports = function draw(gd) { y: opts.borderwidth + scrollBoxY }); - Drawing.setClipUrl(scrollBox, clipId); + Drawing.setClipUrl(scrollBox, clipId, gd); scrollHandler(scrollBoxY, scrollBarHeight, scrollRatio); @@ -25449,8 +25673,8 @@ module.exports = function draw(gd) { y0 = transform.y; }, moveFn: function(dx, dy) { - var newX = x0 + dx, - newY = y0 + dy; + var newX = x0 + dx; + var newY = y0 + dy; Drawing.setTranslate(legend, newX, newY); @@ -25459,7 +25683,7 @@ module.exports = function draw(gd) { }, doneFn: function() { if(xf !== undefined && yf !== undefined) { - Registry.call('relayout', gd, {'legend.x': xf, 'legend.y': yf}); + Registry.call('_guiRelayout', gd, {'legend.x': xf, 'legend.y': yf}); } }, clickFn: function(numClicks, e) { @@ -25566,7 +25790,7 @@ function drawTexts(g, gd, maxLength) { update.name = newName; } - return Registry.call('restyle', gd, update, traceIndex); + return Registry.call('_guiRestyle', gd, update, traceIndex); }); } else { textLayout(textEl); @@ -25589,8 +25813,8 @@ function ensureLength(str, maxLength) { } function setupTraceToggle(g, gd) { - var newMouseDownTime, - numClicks = 1; + var newMouseDownTime; + var numClicks = 1; var traceToggle = Lib.ensureSingle(g, 'rect', 'legendtoggle', function(s) { s.style('cursor', 'pointer') @@ -25643,8 +25867,7 @@ function computeTextDimensions(g, gd) { width = mathjaxBB.width; Drawing.setTranslate(mathjaxGroup, 0, (height / 4)); - } - else { + } else { var text = g.select('.legendtext'); var textLines = svgTextUtils.lineCount(text); var textNode = text.node(); @@ -25658,9 +25881,8 @@ function computeTextDimensions(g, gd) { svgTextUtils.positionText(text, constants.textOffsetX, textY); } - height = Math.max(height, 16) + 3; - - legendItem.height = height; + legendItem.lineHeight = lineHeight; + legendItem.height = Math.max(height, 16) + 3; legendItem.width = width; } @@ -25683,9 +25905,9 @@ function computeLegendDimensions(gd, groups, traces) { } traces.each(function(d) { - var legendItem = d[0], - textHeight = legendItem.height, - textWidth = legendItem.width; + var legendItem = d[0]; + var textHeight = legendItem.height; + var textWidth = legendItem.width; Drawing.setTranslate(this, borderwidth, @@ -25705,8 +25927,8 @@ function computeLegendDimensions(gd, groups, traces) { extraWidth = 40; } else if(isGrouped) { - var groupXOffsets = [opts._width], - groupData = groups.data(); + var groupXOffsets = [opts._width]; + var groupData = groups.data(); for(var i = 0, n = groupData.length; i < n; i++) { var textWidths = groupData[i].map(function(legendItemArray) { @@ -25725,13 +25947,13 @@ function computeLegendDimensions(gd, groups, traces) { }); groups.each(function() { - var group = d3.select(this), - groupTraces = group.selectAll('g.traces'), - groupHeight = 0; + var group = d3.select(this); + var groupTraces = group.selectAll('g.traces'); + var groupHeight = 0; groupTraces.each(function(d) { - var legendItem = d[0], - textHeight = legendItem.height; + var legendItem = d[0]; + var textHeight = legendItem.height; Drawing.setTranslate(this, 0, @@ -25747,13 +25969,12 @@ function computeLegendDimensions(gd, groups, traces) { opts._width += borderwidth * 2; } else { - var rowHeight = 0, - maxTraceHeight = 0, - maxTraceWidth = 0, - offsetX = 0, - fullTracesWidth = 0, - traceGap = opts.tracegroupgap || 5, - oneRowLegend; + var rowHeight = 0; + var maxTraceHeight = 0; + var maxTraceWidth = 0; + var offsetX = 0; + var fullTracesWidth = 0; + var traceGap = opts.tracegroupgap || 5; // calculate largest width for traces and use for width of all legend items traces.each(function(d) { @@ -25762,15 +25983,16 @@ function computeLegendDimensions(gd, groups, traces) { }); // check if legend fits in one row - oneRowLegend = fullLayout._size.w > borderwidth + fullTracesWidth - traceGap; + var oneRowLegend = fullLayout._size.w > borderwidth + fullTracesWidth - traceGap; + traces.each(function(d) { - var legendItem = d[0], - traceWidth = oneRowLegend ? 40 + d[0].width : maxTraceWidth; + var legendItem = d[0]; + var traceWidth = oneRowLegend ? 40 + d[0].width : maxTraceWidth; if((borderwidth + offsetX + traceGap + traceWidth) > fullLayout._size.w) { offsetX = 0; - rowHeight = rowHeight + maxTraceHeight; - opts._height = opts._height + maxTraceHeight; + rowHeight += maxTraceHeight; + opts._height += maxTraceHeight; // reset for next row maxTraceHeight = 0; } @@ -25780,16 +26002,20 @@ function computeLegendDimensions(gd, groups, traces) { (5 + borderwidth + legendItem.height / 2) + rowHeight); opts._width += traceGap + traceWidth; - opts._height = Math.max(opts._height, legendItem.height); // keep track of tallest trace in group offsetX += traceGap + traceWidth; maxTraceHeight = Math.max(legendItem.height, maxTraceHeight); }); + if(oneRowLegend) { + opts._height = maxTraceHeight; + } else { + opts._height += maxTraceHeight; + } + opts._width += borderwidth * 2; opts._height += 10 + borderwidth * 2; - } // make sure we're only getting full pixels @@ -25815,22 +26041,22 @@ function computeLegendDimensions(gd, groups, traces) { } function expandMargin(gd) { - var fullLayout = gd._fullLayout, - opts = fullLayout.legend; + var fullLayout = gd._fullLayout; + var opts = fullLayout.legend; var xanchor = 'left'; - if(anchorUtils.isRightAnchor(opts)) { + if(Lib.isRightAnchor(opts)) { xanchor = 'right'; } - else if(anchorUtils.isCenterAnchor(opts)) { + else if(Lib.isCenterAnchor(opts)) { xanchor = 'center'; } var yanchor = 'top'; - if(anchorUtils.isBottomAnchor(opts)) { + if(Lib.isBottomAnchor(opts)) { yanchor = 'bottom'; } - else if(anchorUtils.isMiddleAnchor(opts)) { + else if(Lib.isMiddleAnchor(opts)) { yanchor = 'middle'; } @@ -25846,14 +26072,14 @@ function expandMargin(gd) { } function expandHorizontalMargin(gd) { - var fullLayout = gd._fullLayout, - opts = fullLayout.legend; + var fullLayout = gd._fullLayout; + var opts = fullLayout.legend; var xanchor = 'left'; - if(anchorUtils.isRightAnchor(opts)) { + if(Lib.isRightAnchor(opts)) { xanchor = 'right'; } - else if(anchorUtils.isCenterAnchor(opts)) { + else if(Lib.isCenterAnchor(opts)) { xanchor = 'center'; } @@ -25868,9 +26094,9 @@ function expandHorizontalMargin(gd) { }); } -},{"../../constants/alignment":148,"../../constants/interactions":150,"../../lib":169,"../../lib/events":162,"../../lib/svg_text_utils":191,"../../plots/plots":246,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"./anchor_utils":102,"./constants":104,"./get_legend_data":107,"./handle_click":108,"./helpers":109,"./style":111,"d3":16}],107:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../constants/interactions":148,"../../lib":168,"../../lib/events":161,"../../lib/svg_text_utils":189,"../../plots/plots":245,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"./constants":101,"./get_legend_data":104,"./handle_click":105,"./helpers":106,"./style":108,"d3":16}],104:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25885,12 +26111,11 @@ var helpers = _dereq_('./helpers'); module.exports = function getLegendData(calcdata, opts) { - var lgroupToTraces = {}, - lgroups = [], - hasOneNonBlankGroup = false, - slicesShown = {}, - lgroupi = 0; - + var lgroupToTraces = {}; + var lgroups = []; + var hasOneNonBlankGroup = false; + var slicesShown = {}; + var lgroupi = 0; var i, j; function addOneItem(legendGroup, legendItem) { @@ -25946,9 +26171,9 @@ module.exports = function getLegendData(calcdata, opts) { if(!lgroups.length) return []; // rearrange lgroupToTraces into a d3-friendly array of arrays - var lgroupsLength = lgroups.length, - ltraces, - legendData; + var lgroupsLength = lgroups.length; + var ltraces; + var legendData; if(hasOneNonBlankGroup && helpers.isGrouped(opts)) { legendData = new Array(lgroupsLength); @@ -25974,9 +26199,9 @@ module.exports = function getLegendData(calcdata, opts) { return legendData; }; -},{"../../registry":259,"./helpers":109}],108:[function(_dereq_,module,exports){ +},{"../../registry":257,"./helpers":106}],105:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26070,8 +26295,8 @@ module.exports = function handleClick(g, gd, numClicks) { } if(Registry.traceIs(fullTrace, 'pie')) { - var thisLabel = legendItem.label, - thisLabelIndex = hiddenSlices.indexOf(thisLabel); + var thisLabel = legendItem.label; + var thisLabelIndex = hiddenSlices.indexOf(thisLabel); if(numClicks === 1) { if(thisLabelIndex === -1) hiddenSlices.push(thisLabel); @@ -26088,7 +26313,7 @@ module.exports = function handleClick(g, gd, numClicks) { } } - Registry.call('relayout', gd, 'hiddenlabels', hiddenSlices); + Registry.call('_guiRelayout', gd, 'hiddenlabels', hiddenSlices); } else { var hasLegendgroup = legendgroup && legendgroup.length; var traceIndicesInGroup = []; @@ -26194,13 +26419,13 @@ module.exports = function handleClick(g, gd, numClicks) { } } - Registry.call('restyle', gd, attrUpdate, attrIndices); + Registry.call('_guiRestyle', gd, attrUpdate, attrIndices); } }; -},{"../../lib":169,"../../registry":259}],109:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],106:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26222,9 +26447,9 @@ exports.isReversed = function isReversed(legendLayout) { return (legendLayout.traceorder || '').indexOf('reversed') !== -1; }; -},{}],110:[function(_dereq_,module,exports){ +},{}],107:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26246,9 +26471,9 @@ module.exports = { style: _dereq_('./style') }; -},{"./attributes":103,"./defaults":105,"./draw":106,"./style":111}],111:[function(_dereq_,module,exports){ +},{"./attributes":100,"./defaults":102,"./draw":103,"./style":108}],108:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26274,6 +26499,19 @@ module.exports = function style(s, gd) { var layers = Lib.ensureSingle(traceGroup, 'g', 'layers'); layers.style('opacity', d[0].trace.opacity); + // Marker vertical alignment + var valign = gd._fullLayout.legend.valign; + var lineHeight = d[0].lineHeight; + var height = d[0].height; + + if(valign === 'middle' || !lineHeight || !height) { + layers.attr('transform', null); + } else { + var factor = {top: 1, bottom: -1}[valign]; + var markerOffsetY = factor * (0.5 * (lineHeight - height + 3)); + layers.attr('transform', 'translate(0,' + markerOffsetY + ')'); + } + var fill = layers .selectAll('g.legendfill') .data([d]); @@ -26397,7 +26635,7 @@ module.exports = function style(s, gd) { function boundVal(attrIn, arrayToValFn, bounds) { var valIn = Lib.nestedProperty(trace, attrIn).get(); - var valToBound = (Array.isArray(valIn) && arrayToValFn) ? + var valToBound = (Lib.isArrayOrTypedArray(valIn) && arrayToValFn) ? arrayToValFn(valIn) : valIn; @@ -26478,20 +26716,22 @@ module.exports = function style(s, gd) { } function styleBars(d) { - var trace = d[0].trace, - marker = trace.marker || {}, - markerLine = marker.line || {}, - barpath = d3.select(this).select('g.legendpoints') - .selectAll('path.legendbar') - .data(Registry.traceIs(trace, 'bar') ? [d] : []); + var trace = d[0].trace; + var marker = trace.marker || {}; + var markerLine = marker.line || {}; + + var barpath = d3.select(this).select('g.legendpoints') + .selectAll('path.legendbar') + .data(Registry.traceIs(trace, 'bar') ? [d] : []); barpath.enter().append('path').classed('legendbar', true) .attr('d', 'M6,6H-6V-6H6Z') .attr('transform', 'translate(20,0)'); barpath.exit().remove(); + barpath.each(function(d) { - var p = d3.select(this), - d0 = d[0], - w = (d0.mlw + 1 || markerLine.width + 1) - 1; + var p = d3.select(this); + var d0 = d[0]; + var w = (d0.mlw + 1 || markerLine.width + 1) - 1; p.style('stroke-width', w + 'px') .call(Color.fill, d0.mc || marker.color); @@ -26503,18 +26743,20 @@ module.exports = function style(s, gd) { } function styleBoxes(d) { - var trace = d[0].trace, - pts = d3.select(this).select('g.legendpoints') - .selectAll('path.legendbox') - .data(Registry.traceIs(trace, 'box-violin') && trace.visible ? [d] : []); + var trace = d[0].trace; + + var pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legendbox') + .data(Registry.traceIs(trace, 'box-violin') && trace.visible ? [d] : []); pts.enter().append('path').classed('legendbox', true) // if we want the median bar, prepend M6,0H-6 .attr('d', 'M6,6H-6V-6H6Z') .attr('transform', 'translate(20,0)'); pts.exit().remove(); + pts.each(function() { - var w = trace.line.width, - p = d3.select(this); + var w = trace.line.width; + var p = d3.select(this); p.style('stroke-width', w + 'px') .call(Color.fill, trace.fillcolor); @@ -26526,10 +26768,11 @@ module.exports = function style(s, gd) { } function styleCandles(d) { - var trace = d[0].trace, - pts = d3.select(this).select('g.legendpoints') - .selectAll('path.legendcandle') - .data(trace.type === 'candlestick' && trace.visible ? [d, d] : []); + var trace = d[0].trace; + + var pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legendcandle') + .data(trace.type === 'candlestick' && trace.visible ? [d, d] : []); pts.enter().append('path').classed('legendcandle', true) .attr('d', function(_, i) { if(i) return 'M-15,0H-8M-8,6V-6H8Z'; // increasing @@ -26538,10 +26781,11 @@ module.exports = function style(s, gd) { .attr('transform', 'translate(20,0)') .style('stroke-miterlimit', 1); pts.exit().remove(); + pts.each(function(_, i) { var container = trace[i ? 'increasing' : 'decreasing']; - var w = container.line.width, - p = d3.select(this); + var w = container.line.width; + var p = d3.select(this); p.style('stroke-width', w + 'px') .call(Color.fill, container.fillcolor); @@ -26553,10 +26797,11 @@ module.exports = function style(s, gd) { } function styleOHLC(d) { - var trace = d[0].trace, - pts = d3.select(this).select('g.legendpoints') - .selectAll('path.legendohlc') - .data(trace.type === 'ohlc' && trace.visible ? [d, d] : []); + var trace = d[0].trace; + + var pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legendohlc') + .data(trace.type === 'ohlc' && trace.visible ? [d, d] : []); pts.enter().append('path').classed('legendohlc', true) .attr('d', function(_, i) { if(i) return 'M-15,0H0M-8,-6V0'; // increasing @@ -26565,10 +26810,11 @@ module.exports = function style(s, gd) { .attr('transform', 'translate(20,0)') .style('stroke-miterlimit', 1); pts.exit().remove(); + pts.each(function(_, i) { var container = trace[i ? 'increasing' : 'decreasing']; - var w = container.line.width, - p = d3.select(this); + var w = container.line.width; + var p = d3.select(this); p.style('fill', 'none') .call(Drawing.dashLine, container.line.dash, w); @@ -26580,10 +26826,11 @@ module.exports = function style(s, gd) { } function stylePies(d) { - var trace = d[0].trace, - pts = d3.select(this).select('g.legendpoints') - .selectAll('path.legendpie') - .data(Registry.traceIs(trace, 'pie') && trace.visible ? [d] : []); + var trace = d[0].trace; + + var pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legendpie') + .data(Registry.traceIs(trace, 'pie') && trace.visible ? [d] : []); pts.enter().append('path').classed('legendpie', true) .attr('d', 'M6,6H-6V-6H6Z') .attr('transform', 'translate(20,0)'); @@ -26593,9 +26840,9 @@ module.exports = function style(s, gd) { } }; -},{"../../lib":169,"../../registry":259,"../../traces/pie/style_one":364,"../../traces/scatter/subtypes":390,"../color":50,"../drawing":75,"d3":16}],112:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"../../traces/pie/style_one":365,"../../traces/scatter/subtypes":391,"../color":51,"../drawing":72,"d3":16}],109:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26793,10 +27040,9 @@ function handleCartesian(gd, ev) { var ax, i; if(astr === 'zoom') { - var mag = (val === 'in') ? 0.5 : 2, - r0 = (1 + mag) / 2, - r1 = (1 - mag) / 2; - + var mag = (val === 'in') ? 0.5 : 2; + var r0 = (1 + mag) / 2; + var r1 = (1 - mag) / 2; var axName; for(i = 0; i < axList.length; i++) { @@ -26857,7 +27103,7 @@ function handleCartesian(gd, ev) { aobj[astr] = val; } - Registry.call('relayout', gd, aobj); + Registry.call('_guiRelayout', gd, aobj); } modeBarButtons.zoom3d = { @@ -26913,7 +27159,7 @@ function handleDrag3d(gd, ev) { var val2d = (val === 'pan') ? val : 'zoom'; layoutUpdate.dragmode = val2d; - Registry.call('relayout', gd, layoutUpdate); + Registry.call('_guiRelayout', gd, layoutUpdate); } modeBarButtons.resetCameraDefault3d = { @@ -26940,9 +27186,9 @@ function handleCamera3d(gd, ev) { var aobj = {}; for(var i = 0; i < sceneIds.length; i++) { - var sceneId = sceneIds[i], - key = sceneId + '.camera', - scene = fullLayout[sceneId]._scene; + var sceneId = sceneIds[i]; + var key = sceneId + '.camera'; + var scene = fullLayout[sceneId]._scene; if(attr === 'resetDefault') { aobj[key] = null; @@ -26952,7 +27198,7 @@ function handleCamera3d(gd, ev) { } } - Registry.call('relayout', gd, aobj); + Registry.call('_guiRelayout', gd, aobj); } modeBarButtons.hoverClosest3d = { @@ -26966,54 +27212,48 @@ modeBarButtons.hoverClosest3d = { click: handleHover3d }; -function handleHover3d(gd, ev) { +function getNextHover3d(gd, ev) { var button = ev.currentTarget; - var val = button._previousVal || false; - var layout = gd.layout; + var val = button._previousVal; var fullLayout = gd._fullLayout; var sceneIds = fullLayout._subplots.gl3d; var axes = ['xaxis', 'yaxis', 'zaxis']; - var spikeAttrs = ['showspikes', 'spikesides', 'spikethickness', 'spikecolor']; // initialize 'current spike' object to be stored in the DOM var currentSpikes = {}; - var axisSpikes = {}; var layoutUpdate = {}; if(val) { - layoutUpdate = Lib.extendDeep(layout, val); + layoutUpdate = val; button._previousVal = null; } else { - layoutUpdate = { - 'allaxes.showspikes': false - }; - for(var i = 0; i < sceneIds.length; i++) { - var sceneId = sceneIds[i], - sceneLayout = fullLayout[sceneId], - sceneSpikes = currentSpikes[sceneId] = {}; + var sceneId = sceneIds[i]; + var sceneLayout = fullLayout[sceneId]; - sceneSpikes.hovermode = sceneLayout.hovermode; - layoutUpdate[sceneId + '.hovermode'] = false; + var hovermodeAStr = sceneId + '.hovermode'; + currentSpikes[hovermodeAStr] = sceneLayout.hovermode; + layoutUpdate[hovermodeAStr] = false; // copy all the current spike attrs for(var j = 0; j < 3; j++) { var axis = axes[j]; - axisSpikes = sceneSpikes[axis] = {}; - - for(var k = 0; k < spikeAttrs.length; k++) { - var spikeAttr = spikeAttrs[k]; - axisSpikes[spikeAttr] = sceneLayout[axis][spikeAttr]; - } + var spikeAStr = sceneId + '.' + axis + '.showspikes'; + layoutUpdate[spikeAStr] = false; + currentSpikes[spikeAStr] = sceneLayout[axis].showspikes; } } - button._previousVal = Lib.extendDeep({}, currentSpikes); + button._previousVal = currentSpikes; } + return layoutUpdate; +} - Registry.call('relayout', gd, layoutUpdate); +function handleHover3d(gd, ev) { + var layoutUpdate = getNextHover3d(gd, ev); + Registry.call('_guiRelayout', gd, layoutUpdate); } modeBarButtons.zoomInGeo = { @@ -27069,7 +27309,7 @@ function handleGeo(gd, ev) { var scale = geoLayout.projection.scale; var newScale = (val === 'in') ? 2 * scale : 0.5 * scale; - Registry.call('relayout', gd, id + '.projection.scale', newScale); + Registry.call('_guiRelayout', gd, id + '.projection.scale', newScale); } else if(attr === 'reset') { resetView(gd, 'geo'); } @@ -27097,18 +27337,20 @@ modeBarButtons.hoverClosestPie = { click: toggleHover }; -function toggleHover(gd) { +function getNextHover(gd) { var fullLayout = gd._fullLayout; - var onHoverVal; + if(fullLayout.hovermode) return false; + if(fullLayout._has('cartesian')) { - onHoverVal = fullLayout._isHoriz ? 'y' : 'x'; + return fullLayout._isHoriz ? 'y' : 'x'; } - else onHoverVal = 'closest'; + return 'closest'; +} - var newHover = gd._fullLayout.hovermode ? false : onHoverVal; - - Registry.call('relayout', gd, 'hovermode', newHover); +function toggleHover(gd) { + var newHover = getNextHover(gd); + Registry.call('_guiRelayout', gd, 'hovermode', newHover); } // buttons when more then one plot types are present @@ -27122,12 +27364,10 @@ modeBarButtons.toggleHover = { icon: Icons.tooltip_basic, gravity: 'ne', click: function(gd, ev) { - toggleHover(gd); + var layoutUpdate = getNextHover3d(gd, ev); + layoutUpdate.hovermode = getNextHover(gd); - // the 3d hovermode update must come - // last so that layout.hovermode update does not - // override scene?.hovermode?.layout. - handleHover3d(gd, ev); + Registry.call('_guiRelayout', gd, layoutUpdate); } }; @@ -27163,7 +27403,7 @@ modeBarButtons.toggleSpikelines = { var aobj = setSpikelineVisibility(gd); - Registry.call('relayout', gd, aobj); + Registry.call('_guiRelayout', gd, aobj); } }; @@ -27210,12 +27450,12 @@ function resetView(gd, subplotType) { } } - Registry.call('relayout', gd, aObj); + Registry.call('_guiRelayout', gd, aObj); } -},{"../../../build/ploticon":2,"../../lib":169,"../../plots/cartesian/axis_ids":217,"../../plots/plots":246,"../../registry":259}],113:[function(_dereq_,module,exports){ +},{"../../../build/ploticon":2,"../../lib":168,"../../plots/cartesian/axis_ids":215,"../../plots/plots":245,"../../registry":257}],110:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27227,9 +27467,9 @@ function resetView(gd, subplotType) { exports.manage = _dereq_('./manage'); -},{"./manage":114}],114:[function(_dereq_,module,exports){ +},{"./manage":111}],111:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27255,11 +27495,11 @@ var modeBarButtons = _dereq_('./buttons'); * */ module.exports = function manageModeBar(gd) { - var fullLayout = gd._fullLayout, - context = gd._context, - modeBar = fullLayout._modeBar; + var fullLayout = gd._fullLayout; + var context = gd._context; + var modeBar = fullLayout._modeBar; - if(!context.displayModeBar) { + if(!context.displayModeBar && !context.watermark) { if(modeBar) { modeBar.destroy(); delete fullLayout._modeBar; @@ -27287,11 +27527,15 @@ module.exports = function manageModeBar(gd) { if(Array.isArray(customButtons) && customButtons.length) { buttonGroups = fillCustomButton(customButtons); } + else if(!context.displayModeBar && context.watermark) { + buttonGroups = []; + } else { buttonGroups = getButtonGroups( gd, context.modeBarButtonsToRemove, - context.modeBarButtonsToAdd + context.modeBarButtonsToAdd, + context.showSendToCloud ); } @@ -27300,7 +27544,7 @@ module.exports = function manageModeBar(gd) { }; // logic behind which buttons are displayed by default -function getButtonGroups(gd, buttonsToRemove, buttonsToAdd) { +function getButtonGroups(gd, buttonsToRemove, buttonsToAdd, showSendToCloud) { var fullLayout = gd._fullLayout; var fullData = gd._fullData; @@ -27331,7 +27575,9 @@ function getButtonGroups(gd, buttonsToRemove, buttonsToAdd) { } // buttons common to all plot types - addGroup(['toImage', 'sendDataToCloud']); + var commonGroup = ['toImage']; + if(showSendToCloud) commonGroup.push('sendDataToCloud'); + addGroup(commonGroup); var zoomGroup = []; var hoverGroup = []; @@ -27482,9 +27728,9 @@ function fillCustomButton(customButtons) { return customButtons; } -},{"../../plots/cartesian/axis_ids":217,"../../registry":259,"../../traces/scatter/subtypes":390,"./buttons":112,"./modebar":115}],115:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axis_ids":215,"../../registry":257,"../../traces/scatter/subtypes":391,"./buttons":109,"./modebar":112}],112:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27499,7 +27745,7 @@ var isNumeric = _dereq_('fast-isnumeric'); var Lib = _dereq_('../../lib'); var Icons = _dereq_('../../../build/ploticon'); - +var Parser = new DOMParser(); /** * UI controller for interactive plots @@ -27531,11 +27777,28 @@ proto.update = function(graphInfo, buttons) { this.graphInfo = graphInfo; var context = this.graphInfo._context; + var fullLayout = this.graphInfo._fullLayout; + var modeBarId = 'modebar-' + fullLayout._uid; - if(context.displayModeBar === 'hover') { - this.element.className = 'modebar modebar--hover'; + this.element.setAttribute('id', modeBarId); + this._uid = modeBarId; + + this.element.className = 'modebar'; + if(context.displayModeBar === 'hover') this.element.className += ' modebar--hover ease-bg'; + + if(fullLayout.modebar.orientation === 'v') { + this.element.className += ' vertical'; + buttons = buttons.reverse(); } - else this.element.className = 'modebar'; + + var style = fullLayout.modebar; + var bgSelector = context.displayModeBar === 'hover' ? '.js-plotly-plot .plotly:hover ' : ''; + + Lib.deleteRelatedStyleRule(modeBarId); + Lib.addRelatedStyleRule(modeBarId, bgSelector + '#' + modeBarId, 'background-color: ' + style.bgcolor); + Lib.addRelatedStyleRule(modeBarId, '#' + modeBarId + ' .modebar-btn .icon path', 'fill: ' + style.color); + Lib.addRelatedStyleRule(modeBarId, '#' + modeBarId + ' .modebar-btn:hover .icon path', 'fill: ' + style.activecolor); + Lib.addRelatedStyleRule(modeBarId, '#' + modeBarId + ' .modebar-btn.active .icon path', 'fill: ' + style.activecolor); // if buttons or logo have changed, redraw modebar interior var needsNewButtons = !this.hasButtons(buttons); @@ -27549,8 +27812,18 @@ proto.update = function(graphInfo, buttons) { this.updateButtons(buttons); - if(context.displaylogo) { - this.element.appendChild(this.getLogo()); + if(context.watermark || context.displaylogo) { + var logoGroup = this.getLogo(); + if(context.watermark) { + logoGroup.className = logoGroup.className + ' watermark'; + } + + if(fullLayout.modebar.orientation === 'v') { + this.element.insertBefore(logoGroup, this.element.childNodes[0]); + } else { + this.element.appendChild(logoGroup); + } + this.hasLogo = true; } } @@ -27594,7 +27867,6 @@ proto.updateButtons = function(buttons) { proto.createGroup = function() { var group = document.createElement('div'); group.className = 'modebar-group'; - return group; }; @@ -27604,8 +27876,8 @@ proto.createGroup = function() { * @Return {HTMLelement} */ proto.createButton = function(config) { - var _this = this, - button = document.createElement('a'); + var _this = this; + var button = document.createElement('a'); button.setAttribute('rel', 'tooltip'); button.className = 'modebar-btn'; @@ -27658,31 +27930,42 @@ proto.createButton = function(config) { * @Param {object} thisIcon * @Param {number} thisIcon.width * @Param {string} thisIcon.path + * @Param {string} thisIcon.color * @Return {HTMLelement} */ proto.createIcon = function(thisIcon) { var iconHeight = isNumeric(thisIcon.height) ? - Number(thisIcon.height) : - thisIcon.ascent - thisIcon.descent, - svgNS = 'http://www.w3.org/2000/svg', - icon = document.createElementNS(svgNS, 'svg'), - path = document.createElementNS(svgNS, 'path'); + Number(thisIcon.height) : + thisIcon.ascent - thisIcon.descent; + var svgNS = 'http://www.w3.org/2000/svg'; + var icon; + + if(thisIcon.path) { + icon = document.createElementNS(svgNS, 'svg'); + icon.setAttribute('viewBox', [0, 0, thisIcon.width, iconHeight].join(' ')); + icon.setAttribute('class', 'icon'); + + var path = document.createElementNS(svgNS, 'path'); + path.setAttribute('d', thisIcon.path); + + if(thisIcon.transform) { + path.setAttribute('transform', thisIcon.transform); + } + else if(thisIcon.ascent !== undefined) { + // Legacy icon transform calculation + path.setAttribute('transform', 'matrix(1 0 0 -1 0 ' + thisIcon.ascent + ')'); + } + + icon.appendChild(path); + } + + if(thisIcon.svg) { + var svgDoc = Parser.parseFromString(thisIcon.svg, 'application/xml'); + icon = svgDoc.childNodes[0]; + } icon.setAttribute('height', '1em'); - icon.setAttribute('width', (thisIcon.width / iconHeight) + 'em'); - icon.setAttribute('viewBox', [0, 0, thisIcon.width, iconHeight].join(' ')); - - path.setAttribute('d', thisIcon.path); - - if(thisIcon.transform) { - path.setAttribute('transform', thisIcon.transform); - } - else if(thisIcon.ascent !== undefined) { - // Legacy icon transform calculation - path.setAttribute('transform', 'matrix(1 0 0 -1 0 ' + thisIcon.ascent + ')'); - } - - icon.appendChild(path); + icon.setAttribute('width', '1em'); return icon; }; @@ -27693,16 +27976,16 @@ proto.createIcon = function(thisIcon) { * @Return {HTMLelement} */ proto.updateActiveButton = function(buttonClicked) { - var fullLayout = this.graphInfo._fullLayout, - dataAttrClicked = (buttonClicked !== undefined) ? - buttonClicked.getAttribute('data-attr') : - null; + var fullLayout = this.graphInfo._fullLayout; + var dataAttrClicked = (buttonClicked !== undefined) ? + buttonClicked.getAttribute('data-attr') : + null; this.buttonElements.forEach(function(button) { - var thisval = button.getAttribute('data-val') || true, - dataAttr = button.getAttribute('data-attr'), - isToggleButton = (button.getAttribute('data-toggle') === 'true'), - button3 = d3.select(button); + var thisval = button.getAttribute('data-val') || true; + var dataAttr = button.getAttribute('data-attr'); + var isToggleButton = (button.getAttribute('data-toggle') === 'true'); + var button3 = d3.select(button); // Use 'data-toggle' and 'buttonClicked' to toggle buttons // that have no one-to-one equivalent in fullLayout @@ -27749,15 +28032,15 @@ proto.hasButtons = function(buttons) { * @return {HTMLDivElement} The logo image wrapped in a group */ proto.getLogo = function() { - var group = this.createGroup(), - a = document.createElement('a'); + var group = this.createGroup(); + var a = document.createElement('a'); a.href = 'https://plot.ly/'; a.target = '_blank'; a.setAttribute('data-title', Lib._(this.graphInfo, 'Produced with Plotly')); a.className = 'modebar-btn plotlyjsicon modebar-btn--logo'; - a.appendChild(this.createIcon(Icons.plotlylogo)); + a.appendChild(this.createIcon(Icons.newplotlylogo)); group.appendChild(a); return group; @@ -27773,6 +28056,7 @@ proto.removeAllButtons = function() { proto.destroy = function() { Lib.removeElement(this.container.querySelector('.modebar')); + Lib.deleteRelatedStyleRule(this._uid); }; function createModeBar(gd, buttons) { @@ -27795,9 +28079,9 @@ function createModeBar(gd, buttons) { module.exports = createModeBar; -},{"../../../build/ploticon":2,"../../lib":169,"d3":16,"fast-isnumeric":18}],116:[function(_dereq_,module,exports){ +},{"../../../build/ploticon":2,"../../lib":168,"d3":16,"fast-isnumeric":18}],113:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27931,9 +28215,9 @@ module.exports = { editType: 'plot' }; -},{"../../plot_api/plot_template":204,"../../plots/font_attributes":240,"../color/attributes":49}],117:[function(_dereq_,module,exports){ +},{"../../plot_api/plot_template":202,"../../plots/font_attributes":239,"../color/attributes":50}],114:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27960,9 +28244,9 @@ module.exports = { darkAmount: 10 }; -},{}],118:[function(_dereq_,module,exports){ +},{}],115:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28053,9 +28337,9 @@ function getPosDflt(containerOut, layout, counterAxes) { return [containerOut.domain[0], posY + constants.yPad]; } -},{"../../lib":169,"../../plot_api/plot_template":204,"../../plots/array_container_defaults":210,"../color":50,"./attributes":116,"./constants":117}],119:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../plots/array_container_defaults":208,"../color":51,"./attributes":113,"./constants":114}],116:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28073,7 +28357,6 @@ var Drawing = _dereq_('../drawing'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); var axisIds = _dereq_('../../plots/cartesian/axis_ids'); -var anchorUtils = _dereq_('../legend/anchor_utils'); var alignmentConstants = _dereq_('../../constants/alignment'); var LINE_SPACING = alignmentConstants.LINE_SPACING; @@ -28101,9 +28384,9 @@ module.exports = function draw(gd) { }); selectors.each(function(d) { - var selector = d3.select(this), - axisLayout = d, - selectorLayout = axisLayout.rangeselector; + var selector = d3.select(this); + var axisLayout = d; + var selectorLayout = axisLayout.rangeselector; var buttons = selector.selectAll('g.button') .data(Lib.filterVisible(selectorLayout.buttons)); @@ -28125,7 +28408,7 @@ module.exports = function draw(gd) { button.on('click', function() { if(gd._dragged) return; - Registry.call('relayout', gd, update); + Registry.call('_guiRelayout', gd, update); }); button.on('mouseover', function() { @@ -28274,21 +28557,21 @@ function reposition(gd, buttons, opts, axName, selector) { var ly = graphSize.t + graphSize.h * (1 - opts.y); var xanchor = 'left'; - if(anchorUtils.isRightAnchor(opts)) { + if(Lib.isRightAnchor(opts)) { lx -= width; xanchor = 'right'; } - if(anchorUtils.isCenterAnchor(opts)) { + if(Lib.isCenterAnchor(opts)) { lx -= width / 2; xanchor = 'center'; } var yanchor = 'top'; - if(anchorUtils.isBottomAnchor(opts)) { + if(Lib.isBottomAnchor(opts)) { ly -= height; yanchor = 'bottom'; } - if(anchorUtils.isMiddleAnchor(opts)) { + if(Lib.isMiddleAnchor(opts)) { ly -= height / 2; yanchor = 'middle'; } @@ -28310,9 +28593,9 @@ function reposition(gd, buttons, opts, axName, selector) { selector.attr('transform', 'translate(' + lx + ',' + ly + ')'); } -},{"../../constants/alignment":148,"../../lib":169,"../../lib/svg_text_utils":191,"../../plots/cartesian/axis_ids":217,"../../plots/plots":246,"../../registry":259,"../color":50,"../drawing":75,"../legend/anchor_utils":102,"./constants":117,"./get_update_object":120,"d3":16}],120:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../lib":168,"../../lib/svg_text_utils":189,"../../plots/cartesian/axis_ids":215,"../../plots/plots":245,"../../registry":257,"../color":51,"../drawing":72,"./constants":114,"./get_update_object":117,"d3":16}],117:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28344,10 +28627,8 @@ module.exports = function getUpdateObject(axisLayout, buttonLayout) { function getXRange(axisLayout, buttonLayout) { var currentRange = axisLayout.range; var base = new Date(axisLayout.r2l(currentRange[1])); - - var step = buttonLayout.step, - count = buttonLayout.count; - + var step = buttonLayout.step; + var count = buttonLayout.count; var range0; switch(buttonLayout.stepmode) { @@ -28367,9 +28648,9 @@ function getXRange(axisLayout, buttonLayout) { return [range0, range1]; } -},{"d3":16}],121:[function(_dereq_,module,exports){ +},{"d3":16}],118:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28394,9 +28675,9 @@ module.exports = { draw: _dereq_('./draw') }; -},{"./attributes":116,"./defaults":118,"./draw":119}],122:[function(_dereq_,module,exports){ +},{"./attributes":113,"./defaults":115,"./draw":116}],119:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28468,9 +28749,9 @@ module.exports = { editType: 'calc' }; -},{"../color/attributes":49}],123:[function(_dereq_,module,exports){ +},{"../color/attributes":50}],120:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28502,9 +28783,9 @@ module.exports = function calcAutorange(gd) { } }; -},{"../../plots/cartesian/autorange":213,"../../plots/cartesian/axis_ids":217,"./constants":124}],124:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/autorange":211,"../../plots/cartesian/axis_ids":215,"./constants":121}],121:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28558,9 +28839,9 @@ module.exports = { extraPad: 15 }; -},{}],125:[function(_dereq_,module,exports){ +},{}],122:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28644,9 +28925,9 @@ module.exports = function handleDefaults(layoutIn, layoutOut, axName) { containerOut._input = containerIn; }; -},{"../../lib":169,"../../plot_api/plot_template":204,"../../plots/cartesian/axis_ids":217,"./attributes":122,"./oppaxis_attributes":128}],126:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../plots/cartesian/axis_ids":215,"./attributes":119,"./oppaxis_attributes":126}],123:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28666,7 +28947,7 @@ var Color = _dereq_('../color'); var Titles = _dereq_('../titles'); var Cartesian = _dereq_('../../plots/cartesian'); -var Axes = _dereq_('../../plots/cartesian/axes'); +var axisIDs = _dereq_('../../plots/cartesian/axis_ids'); var dragElement = _dereq_('../dragelement'); var setCursor = _dereq_('../../lib/setcursor'); @@ -28674,8 +28955,13 @@ var setCursor = _dereq_('../../lib/setcursor'); var constants = _dereq_('./constants'); module.exports = function(gd) { - var fullLayout = gd._fullLayout, - rangeSliderData = makeRangeSliderData(fullLayout); + var fullLayout = gd._fullLayout; + var rangeSliderData = fullLayout._rangeSliderData; + for(var i = 0; i < rangeSliderData.length; i++) { + var opts = rangeSliderData[i][constants.name]; + // fullLayout._uid may not exist when we call makeData + opts._clipId = opts._id + '-' + fullLayout._uid; + } /* * @@ -28702,10 +28988,6 @@ module.exports = function(gd) { .selectAll('g.' + constants.containerClassName) .data(rangeSliderData, keyFunction); - rangeSliders.enter().append('g') - .classed(constants.containerClassName, true) - .attr('pointer-events', 'all'); - // remove exiting sliders and their corresponding clip paths rangeSliders.exit().each(function(axisOpts) { var opts = axisOpts[constants.name]; @@ -28715,48 +28997,51 @@ module.exports = function(gd) { // return early if no range slider is visible if(rangeSliderData.length === 0) return; + rangeSliders.enter().append('g') + .classed(constants.containerClassName, true) + .attr('pointer-events', 'all'); + // for all present range sliders rangeSliders.each(function(axisOpts) { - var rangeSlider = d3.select(this), - opts = axisOpts[constants.name], - oppAxisOpts = fullLayout[Axes.id2name(axisOpts.anchor)], - oppAxisRangeOpts = opts[Axes.id2name(axisOpts.anchor)]; + var rangeSlider = d3.select(this); + var opts = axisOpts[constants.name]; + var oppAxisOpts = fullLayout[axisIDs.id2name(axisOpts.anchor)]; + var oppAxisRangeOpts = opts[axisIDs.id2name(axisOpts.anchor)]; // update range // Expand slider range to the axis range - // TODO: what if the ranges are reversed? if(opts.range) { - var outRange = opts.range; - var axRange = axisOpts.range; + var rng = Lib.simpleMap(opts.range, axisOpts.r2l); + var axRng = Lib.simpleMap(axisOpts.range, axisOpts.r2l); + var newRng; - outRange[0] = axisOpts.l2r(Math.min(axisOpts.r2l(outRange[0]), axisOpts.r2l(axRange[0]))); - outRange[1] = axisOpts.l2r(Math.max(axisOpts.r2l(outRange[1]), axisOpts.r2l(axRange[1]))); - opts._input.range = outRange.slice(); + if(axRng[0] < axRng[1]) { + newRng = [ + Math.min(rng[0], axRng[0]), + Math.max(rng[1], axRng[1]) + ]; + } else { + newRng = [ + Math.max(rng[0], axRng[0]), + Math.min(rng[1], axRng[1]) + ]; + } + + opts.range = opts._input.range = Lib.simpleMap(newRng, axisOpts.l2r); } axisOpts.cleanRange('rangeslider.range'); - // update range slider dimensions var margin = fullLayout.margin; var graphSize = fullLayout._size; var domain = axisOpts.domain; - var tickHeight = (axisOpts._boundingBox || {}).height || 0; + var tickHeight = opts._tickHeight; - var oppBottom = Infinity; - var subplotData = Axes.getSubplots(gd, axisOpts); - for(var i = 0; i < subplotData.length; i++) { - var oppAxis = Axes.getFromId(gd, subplotData[i].substr(subplotData[i].indexOf('y'))); - oppBottom = Math.min(oppBottom, oppAxis.domain[0]); - } - - opts._id = constants.name + axisOpts._id; - opts._clipId = opts._id + '-' + fullLayout._uid; + var oppBottom = opts._oppBottom; opts._width = graphSize.w * (domain[1] - domain[0]); - opts._height = (fullLayout.height - margin.b - margin.t) * opts.thickness; - opts._offsetShift = Math.floor(opts.borderwidth / 2); var x = Math.round(margin.l + (graphSize.w * domain[0])); @@ -28770,9 +29055,9 @@ module.exports = function(gd) { // update data <--> pixel coordinate conversion methods - var range0 = axisOpts.r2l(opts.range[0]), - range1 = axisOpts.r2l(opts.range[1]), - dist = range1 - range0; + var range0 = axisOpts.r2l(opts.range[0]); + var range1 = axisOpts.r2l(opts.range[1]); + var dist = range1 - range0; opts.p2d = function(v) { return (v / opts._width) * dist + range0; @@ -28785,9 +29070,9 @@ module.exports = function(gd) { opts._rl = [range0, range1]; if(oppAxisRangeOpts.rangemode !== 'match') { - var range0OppAxis = oppAxisOpts.r2l(oppAxisRangeOpts.range[0]), - range1OppAxis = oppAxisOpts.r2l(oppAxisRangeOpts.range[1]), - distOppAxis = range1OppAxis - range0OppAxis; + var range0OppAxis = oppAxisOpts.r2l(oppAxisRangeOpts.range[0]); + var range1OppAxis = oppAxisOpts.r2l(oppAxisRangeOpts.range[1]); + var distOppAxis = range1OppAxis - range0OppAxis; opts.d2pOppAxis = function(v) { return (v - range0OppAxis) / distOppAxis * opts._height; @@ -28819,53 +29104,26 @@ module.exports = function(gd) { placeholder: fullLayout._dfltTitle.x, attributes: { x: axisOpts._offset + axisOpts._length / 2, - y: y + opts._height + opts._offsetShift + 10 + 1.5 * axisOpts.titlefont.size, + y: y + opts._height + opts._offsetShift + 10 + 1.5 * axisOpts.title.font.size, 'text-anchor': 'middle' } }); } - - // update margins - Plots.autoMargin(gd, opts._id, { - x: domain[0], - y: oppBottom, - l: 0, - r: 0, - t: 0, - b: opts._height + margin.b + tickHeight, - pad: constants.extraPad + opts._offsetShift * 2 - }); }); }; -function makeRangeSliderData(fullLayout) { - var axes = Axes.list({ _fullLayout: fullLayout }, 'x', true), - name = constants.name, - out = []; - - if(fullLayout._has('gl2d')) return out; - - for(var i = 0; i < axes.length; i++) { - var ax = axes[i]; - - if(ax[name] && ax[name].visible) out.push(ax); - } - - return out; -} - function setupDragElement(rangeSlider, gd, axisOpts, opts) { - var slideBox = rangeSlider.select('rect.' + constants.slideBoxClassName).node(), - grabAreaMin = rangeSlider.select('rect.' + constants.grabAreaMinClassName).node(), - grabAreaMax = rangeSlider.select('rect.' + constants.grabAreaMaxClassName).node(); + var slideBox = rangeSlider.select('rect.' + constants.slideBoxClassName).node(); + var grabAreaMin = rangeSlider.select('rect.' + constants.grabAreaMinClassName).node(); + var grabAreaMax = rangeSlider.select('rect.' + constants.grabAreaMaxClassName).node(); rangeSlider.on('mousedown', function() { - var event = d3.event, - target = event.target, - startX = event.clientX, - offsetX = startX - rangeSlider.node().getBoundingClientRect().left, - minVal = opts.d2p(axisOpts._rl[0]), - maxVal = opts.d2p(axisOpts._rl[1]); + var event = d3.event; + var target = event.target; + var startX = event.clientX; + var offsetX = startX - rangeSlider.node().getBoundingClientRect().left; + var minVal = opts.d2p(axisOpts._rl[0]); + var maxVal = opts.d2p(axisOpts._rl[1]); var dragCover = dragElement.coverSlip(); @@ -28929,11 +29187,11 @@ function setDataRange(rangeSlider, gd, axisOpts, opts) { return axisOpts.l2r(Lib.constrain(v, opts._rl[0], opts._rl[1])); } - var dataMin = clamp(opts.p2d(opts._pixelMin)), - dataMax = clamp(opts.p2d(opts._pixelMax)); + var dataMin = clamp(opts.p2d(opts._pixelMin)); + var dataMax = clamp(opts.p2d(opts._pixelMax)); window.requestAnimationFrame(function() { - Registry.call('relayout', gd, axisOpts._name + '.range', [dataMin, dataMax]); + Registry.call('_guiRelayout', gd, axisOpts._name + '.range', [dataMin, dataMax]); }); } @@ -28952,8 +29210,8 @@ function setPixelRange(rangeSlider, gd, axisOpts, opts, oppAxisOpts, oppAxisRang return Lib.constrain(v, -hw2, opts._width + hw2); } - var pixelMin = clamp(opts.d2p(axisOpts._rl[0])), - pixelMax = clamp(opts.d2p(axisOpts._rl[1])); + var pixelMin = clamp(opts.d2p(axisOpts._rl[0])); + var pixelMax = clamp(opts.d2p(axisOpts._rl[1])); rangeSlider.select('rect.' + constants.slideBoxClassName) .attr('x', pixelMin) @@ -28967,8 +29225,8 @@ function setPixelRange(rangeSlider, gd, axisOpts, opts, oppAxisOpts, oppAxisRang .attr('width', opts._width - pixelMax); if(oppAxisRangeOpts.rangemode !== 'match') { - var pixelMinOppAxis = opts._height - clampOppAxis(opts.d2pOppAxis(oppAxisOpts._rl[1])), - pixelMaxOppAxis = opts._height - clampOppAxis(opts.d2pOppAxis(oppAxisOpts._rl[0])); + var pixelMinOppAxis = opts._height - clampOppAxis(opts.d2pOppAxis(oppAxisOpts._rl[1])); + var pixelMaxOppAxis = opts._height - clampOppAxis(opts.d2pOppAxis(oppAxisOpts._rl[0])); rangeSlider.select('rect.' + constants.maskMinOppAxisClassName) .attr('x', pixelMin) @@ -28990,8 +29248,8 @@ function setPixelRange(rangeSlider, gd, axisOpts, opts, oppAxisOpts, oppAxisRang // https://github.com/plotly/plotly.js/pull/1409 var offset = 0.5; - var xMin = Math.round(clampHandle(pixelMin - hw2)) - offset, - xMax = Math.round(clampHandle(pixelMax - hw2)) + offset; + var xMin = Math.round(clampHandle(pixelMin - hw2)) - offset; + var xMax = Math.round(clampHandle(pixelMax - hw2)) + offset; rangeSlider.select('g.' + constants.grabberMinClassName) .attr('transform', 'translate(' + xMin + ',' + offset + ')'); @@ -29010,8 +29268,8 @@ function drawBg(rangeSlider, gd, axisOpts, opts) { }); var borderCorrect = (opts.borderwidth % 2) === 0 ? - opts.borderwidth : - opts.borderwidth - 1; + opts.borderwidth : + opts.borderwidth - 1; var offsetShift = -opts._offsetShift; var lw = Drawing.crispRound(gd, opts.borderwidth); @@ -29040,15 +29298,14 @@ function addClipPath(rangeSlider, gd, axisOpts, opts) { } function drawRangePlot(rangeSlider, gd, axisOpts, opts) { - var subplotData = Axes.getSubplots(gd, axisOpts), - calcData = gd.calcdata; + var calcData = gd.calcdata; var rangePlots = rangeSlider.selectAll('g.' + constants.rangePlotClassName) - .data(subplotData, Lib.identity); + .data(axisOpts._subplotsWith, Lib.identity); rangePlots.enter().append('g') .attr('class', function(id) { return constants.rangePlotClassName + ' ' + id; }) - .call(Drawing.setClipUrl, opts._clipId); + .call(Drawing.setClipUrl, opts._clipId, gd); rangePlots.order(); @@ -29057,12 +29314,12 @@ function drawRangePlot(rangeSlider, gd, axisOpts, opts) { var mainplotinfo; rangePlots.each(function(id, i) { - var plotgroup = d3.select(this), - isMainPlot = (i === 0); + var plotgroup = d3.select(this); + var isMainPlot = (i === 0); - var oppAxisOpts = Axes.getFromId(gd, id, 'y'), - oppAxisName = oppAxisOpts._name, - oppAxisRangeOpts = opts[oppAxisName]; + var oppAxisOpts = axisIDs.getFromId(gd, id, 'y'); + var oppAxisName = oppAxisOpts._name; + var oppAxisRangeOpts = opts[oppAxisName]; var mockFigure = { data: [], @@ -29092,6 +29349,11 @@ function drawRangePlot(rangeSlider, gd, axisOpts, opts) { var xa = mockFigure._fullLayout.xaxis; var ya = mockFigure._fullLayout[oppAxisName]; + xa.clearCalc(); + xa.setScale(); + ya.clearCalc(); + ya.setScale(); + var plotinfo = { id: id, plotgroup: plotgroup, @@ -29114,8 +29376,8 @@ function filterRangePlotCalcData(calcData, subplotId) { var out = []; for(var i = 0; i < calcData.length; i++) { - var calcTrace = calcData[i], - trace = calcTrace[0].trace; + var calcTrace = calcData[i]; + var trace = calcTrace[0].trace; if(trace.xaxis + trace.yaxis === subplotId) { out.push(calcTrace); @@ -29244,9 +29506,79 @@ function drawGrabbers(rangeSlider, gd, axisOpts, opts) { grabAreaMax.attr('height', opts._height); } -},{"../../lib":169,"../../lib/setcursor":189,"../../plots/cartesian":225,"../../plots/cartesian/axes":214,"../../plots/plots":246,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"../titles":141,"./constants":124,"d3":16}],127:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../lib/setcursor":187,"../../plots/cartesian":224,"../../plots/cartesian/axis_ids":215,"../../plots/plots":245,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"../titles":139,"./constants":121,"d3":16}],124:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 axisIDs = _dereq_('../../plots/cartesian/axis_ids'); +var constants = _dereq_('./constants'); +var name = constants.name; + +function isVisible(ax) { + var rangeSlider = ax && ax[name]; + return rangeSlider && rangeSlider.visible; +} +exports.isVisible = isVisible; + +exports.makeData = function(fullLayout) { + var axes = axisIDs.list({ _fullLayout: fullLayout }, 'x', true); + var margin = fullLayout.margin; + var rangeSliderData = []; + + if(!fullLayout._has('gl2d')) { + for(var i = 0; i < axes.length; i++) { + var ax = axes[i]; + + if(isVisible(ax)) { + rangeSliderData.push(ax); + + var opts = ax[name]; + opts._id = name + ax._id; + opts._height = (fullLayout.height - margin.b - margin.t) * opts.thickness; + opts._offsetShift = Math.floor(opts.borderwidth / 2); + } + } + } + + fullLayout._rangeSliderData = rangeSliderData; +}; + +exports.autoMarginOpts = function(gd, ax) { + var opts = ax[name]; + + var oppBottom = Infinity; + var counterAxes = ax._counterAxes; + for(var j = 0; j < counterAxes.length; j++) { + var counterId = counterAxes[j]; + var oppAxis = axisIDs.getFromId(gd, counterId); + oppBottom = Math.min(oppBottom, oppAxis.domain[0]); + } + opts._oppBottom = oppBottom; + + var tickHeight = (ax.side === 'bottom' && ax._boundingBox.height) || 0; + opts._tickHeight = tickHeight; + + return { + x: 0, + y: oppBottom, + l: 0, + r: 0, + t: 0, + b: opts._height + gd._fullLayout.margin.b + tickHeight, + pad: constants.extraPad + opts._offsetShift * 2 + }; +}; + +},{"../../plots/cartesian/axis_ids":215,"./constants":121}],125:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29258,6 +29590,7 @@ function drawGrabbers(rangeSlider, gd, axisOpts, opts) { var Lib = _dereq_('../../lib'); var attrs = _dereq_('./attributes'); var oppAxisAttrs = _dereq_('./oppaxis_attributes'); +var helpers = _dereq_('./helpers'); module.exports = { moduleType: 'component', @@ -29276,12 +29609,15 @@ module.exports = { layoutAttributes: _dereq_('./attributes'), handleDefaults: _dereq_('./defaults'), calcAutorange: _dereq_('./calc_autorange'), - draw: _dereq_('./draw') + draw: _dereq_('./draw'), + isVisible: helpers.isVisible, + makeData: helpers.makeData, + autoMarginOpts: helpers.autoMarginOpts }; -},{"../../lib":169,"./attributes":122,"./calc_autorange":123,"./defaults":125,"./draw":126,"./oppaxis_attributes":128}],128:[function(_dereq_,module,exports){ +},{"../../lib":168,"./attributes":119,"./calc_autorange":120,"./defaults":122,"./draw":123,"./helpers":124,"./oppaxis_attributes":126}],126:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29317,9 +29653,9 @@ module.exports = { editType: 'calc' }; -},{}],129:[function(_dereq_,module,exports){ +},{}],127:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29453,16 +29789,15 @@ module.exports = templatedArray('shape', { editType: 'arraydraw' }); -},{"../../lib/extend":163,"../../plot_api/plot_template":204,"../../traces/scatter/attributes":366,"../annotations/attributes":35,"../drawing/attributes":74}],130:[function(_dereq_,module,exports){ +},{"../../lib/extend":162,"../../plot_api/plot_template":202,"../../traces/scatter/attributes":367,"../annotations/attributes":36,"../drawing/attributes":71}],128:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Lib = _dereq_('../../lib'); @@ -29473,8 +29808,8 @@ var helpers = _dereq_('./helpers'); module.exports = function calcAutorange(gd) { - var fullLayout = gd._fullLayout, - shapeList = Lib.filterVisible(fullLayout.shapes); + var fullLayout = gd._fullLayout; + var shapeList = Lib.filterVisible(fullLayout.shapes); if(!shapeList.length || !gd._fullData.length) return; @@ -29485,8 +29820,8 @@ module.exports = function calcAutorange(gd) { var ax, bounds; if(shape.xref !== 'paper') { - var vx0 = shape.xsizemode === 'pixel' ? shape.xanchor : shape.x0, - vx1 = shape.xsizemode === 'pixel' ? shape.xanchor : shape.x1; + var vx0 = shape.xsizemode === 'pixel' ? shape.xanchor : shape.x0; + var vx1 = shape.xsizemode === 'pixel' ? shape.xanchor : shape.x1; ax = Axes.getFromId(gd, shape.xref); bounds = shapeBounds(ax, vx0, vx1, shape.path, constants.paramIsX); @@ -29496,8 +29831,8 @@ module.exports = function calcAutorange(gd) { } if(shape.yref !== 'paper') { - var vy0 = shape.ysizemode === 'pixel' ? shape.yanchor : shape.y0, - vy1 = shape.ysizemode === 'pixel' ? shape.yanchor : shape.y1; + var vy0 = shape.ysizemode === 'pixel' ? shape.yanchor : shape.y0; + var vy1 = shape.ysizemode === 'pixel' ? shape.yanchor : shape.y1; ax = Axes.getFromId(gd, shape.yref); bounds = shapeBounds(ax, vy0, vy1, shape.path, constants.paramIsY); @@ -29517,17 +29852,17 @@ function calcYPaddingOptions(shape) { } function calcPaddingOptions(lineWidth, sizeMode, v0, v1, path, isYAxis) { - var ppad = lineWidth / 2, - axisDirectionReverted = isYAxis; + var ppad = lineWidth / 2; + var axisDirectionReverted = isYAxis; if(sizeMode === 'pixel') { var coords = path ? - helpers.extractPathCoords(path, isYAxis ? constants.paramIsY : constants.paramIsX) : - [v0, v1]; - var maxValue = Lib.aggNums(Math.max, null, coords), - minValue = Lib.aggNums(Math.min, null, coords), - beforePad = minValue < 0 ? Math.abs(minValue) + ppad : ppad, - afterPad = maxValue > 0 ? maxValue + ppad : ppad; + helpers.extractPathCoords(path, isYAxis ? constants.paramIsY : constants.paramIsX) : + [v0, v1]; + var maxValue = Lib.aggNums(Math.max, null, coords); + var minValue = Lib.aggNums(Math.min, null, coords); + var beforePad = minValue < 0 ? Math.abs(minValue) + ppad : ppad; + var afterPad = maxValue > 0 ? maxValue + ppad : ppad; return { ppad: ppad, @@ -29540,19 +29875,19 @@ function calcPaddingOptions(lineWidth, sizeMode, v0, v1, path, isYAxis) { } function shapeBounds(ax, v0, v1, path, paramsToUse) { - var convertVal = (ax.type === 'category') ? ax.r2c : ax.d2c; + var convertVal = (ax.type === 'category' || ax.type === 'multicategory') ? ax.r2c : ax.d2c; if(v0 !== undefined) return [convertVal(v0), convertVal(v1)]; if(!path) return; - var min = Infinity, - max = -Infinity, - segments = path.match(constants.segmentRE), - i, - segment, - drawnParam, - params, - val; + var min = Infinity; + var max = -Infinity; + var segments = path.match(constants.segmentRE); + var i; + var segment; + var drawnParam; + var params; + var val; if(ax.type === 'date') convertVal = helpers.decodeDate(convertVal); @@ -29571,9 +29906,9 @@ function shapeBounds(ax, v0, v1, path, paramsToUse) { if(max >= min) return [min, max]; } -},{"../../lib":169,"../../plots/cartesian/axes":214,"./constants":131,"./helpers":134}],131:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"./constants":129,"./helpers":132}],129:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29635,9 +29970,9 @@ module.exports = { } }; -},{}],132:[function(_dereq_,module,exports){ +},{}],130:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29678,21 +30013,21 @@ function handleShapeDefaults(shapeIn, shapeOut, fullLayout) { coerce('line.width'); coerce('line.dash'); - var dfltType = shapeIn.path ? 'path' : 'rect', - shapeType = coerce('type', dfltType), - xSizeMode = coerce('xsizemode'), - ySizeMode = coerce('ysizemode'); + var dfltType = shapeIn.path ? 'path' : 'rect'; + var shapeType = coerce('type', dfltType); + var xSizeMode = coerce('xsizemode'); + var ySizeMode = coerce('ysizemode'); // positioning var axLetters = ['x', 'y']; for(var i = 0; i < 2; i++) { - var axLetter = axLetters[i], - attrAnchor = axLetter + 'anchor', - sizeMode = axLetter === 'x' ? xSizeMode : ySizeMode, - gdMock = {_fullLayout: fullLayout}, - ax, - pos2r, - r2pos; + var axLetter = axLetters[i]; + var attrAnchor = axLetter + 'anchor'; + var sizeMode = axLetter === 'x' ? xSizeMode : ySizeMode; + var gdMock = {_fullLayout: fullLayout}; + var ax; + var pos2r; + var r2pos; // xref, yref var axRef = Axes.coerceRef(shapeIn, shapeOut, gdMock, axLetter, '', 'paper'); @@ -29709,17 +30044,17 @@ function handleShapeDefaults(shapeIn, shapeOut, fullLayout) { // Coerce x0, x1, y0, y1 if(shapeType !== 'path') { - var dflt0 = 0.25, - dflt1 = 0.75; + var dflt0 = 0.25; + var dflt1 = 0.75; // hack until V2.0 when log has regular range behavior - make it look like other // ranges to send to coerce, then put it back after // this is all to give reasonable default position behavior on log axes, which is // a pretty unimportant edge case so we could just ignore this. - var attr0 = axLetter + '0', - attr1 = axLetter + '1', - in0 = shapeIn[attr0], - in1 = shapeIn[attr1]; + var attr0 = axLetter + '0'; + var attr1 = axLetter + '1'; + var in0 = shapeIn[attr0]; + var in1 = shapeIn[attr1]; shapeIn[attr0] = pos2r(shapeIn[attr0], true); shapeIn[attr1] = pos2r(shapeIn[attr1], true); @@ -29760,9 +30095,9 @@ function handleShapeDefaults(shapeIn, shapeOut, fullLayout) { } } -},{"../../lib":169,"../../plots/array_container_defaults":210,"../../plots/cartesian/axes":214,"./attributes":129,"./helpers":134}],133:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"../../plots/cartesian/axes":212,"./attributes":127,"./helpers":132}],131:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29857,12 +30192,11 @@ function drawOne(gd, index) { function drawShape(shapeLayer) { var attrs = { - 'data-index': index, - 'fill-rule': 'evenodd', - d: getPathString(gd, options) - }, - lineColor = options.line.width ? - options.line.color : 'rgba(0,0,0,0)'; + 'data-index': index, + 'fill-rule': 'evenodd', + d: getPathString(gd, options) + }; + var lineColor = options.line.width ? options.line.color : 'rgba(0,0,0,0)'; var path = shapeLayer.append('path') .attr(attrs) @@ -29883,9 +30217,10 @@ function setClipPath(shapePath, gd, shapeOptions) { // spans two subplots. See https://github.com/plotly/plotly.js/issues/1452 var clipAxes = (shapeOptions.xref + shapeOptions.yref).replace(/paper/g, ''); - shapePath.call(Drawing.setClipUrl, clipAxes ? - ('clip' + gd._fullLayout._uid + clipAxes) : - null + Drawing.setClipUrl( + shapePath, + clipAxes ? 'clip' + gd._fullLayout._uid + clipAxes : null, + gd ); } @@ -29906,22 +30241,22 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { var pathIn; // setup conversion functions - var xa = Axes.getFromId(gd, shapeOptions.xref), - ya = Axes.getFromId(gd, shapeOptions.yref), - x2p = helpers.getDataToPixel(gd, xa), - y2p = helpers.getDataToPixel(gd, ya, true), - p2x = helpers.getPixelToData(gd, xa), - p2y = helpers.getPixelToData(gd, ya, true); + var xa = Axes.getFromId(gd, shapeOptions.xref); + var ya = Axes.getFromId(gd, shapeOptions.yref); + var x2p = helpers.getDataToPixel(gd, xa); + var y2p = helpers.getDataToPixel(gd, ya, true); + var p2x = helpers.getPixelToData(gd, xa); + var p2y = helpers.getPixelToData(gd, ya, true); var sensoryElement = obtainSensoryElement(); var dragOptions = { - element: sensoryElement.node(), - gd: gd, - prepFn: startDrag, - doneFn: endDrag, - clickFn: abortDrag - }, - dragMode; + element: sensoryElement.node(), + gd: gd, + prepFn: startDrag, + doneFn: endDrag, + clickFn: abortDrag + }; + var dragMode; dragElement.init(dragOptions); @@ -29932,8 +30267,8 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { } function createLineDragHandles() { - var minSensoryWidth = 10, - sensoryWidth = Math.max(shapeOptions.line.width, minSensoryWidth); + var minSensoryWidth = 10; + var sensoryWidth = Math.max(shapeOptions.line.width, minSensoryWidth); // Helper shapes group // Note that by setting the `data-index` attr, it is ensured that @@ -29994,13 +30329,13 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { // choose 'move' or 'resize' // based on initial position of cursor within the drag element - var w = dragBBox.right - dragBBox.left, - h = dragBBox.bottom - dragBBox.top, - x = evt.clientX - dragBBox.left, - y = evt.clientY - dragBBox.top, - cursor = (!isPath && w > MINWIDTH && h > MINHEIGHT && !evt.shiftKey) ? - dragElement.getCursor(x / w, 1 - y / h) : - 'move'; + var w = dragBBox.right - dragBBox.left; + var h = dragBBox.bottom - dragBBox.top; + var x = evt.clientX - dragBBox.left; + var y = evt.clientY - dragBBox.top; + var cursor = (!isPath && w > MINWIDTH && h > MINHEIGHT && !evt.shiftKey) ? + dragElement.getCursor(x / w, 1 - y / h) : + 'move'; setCursor(shapePath, cursor); @@ -30069,7 +30404,7 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { // Don't rely on clipPath being activated during re-layout setClipPath(shapePath, gd, shapeOptions); - Registry.call('relayout', gd, editHelpers.getUpdateObj()); + Registry.call('_guiRelayout', gd, editHelpers.getUpdateObj()); } function abortDrag() { @@ -30078,9 +30413,9 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { function moveShape(dx, dy) { if(shapeOptions.type === 'path') { - var noOp = function(coord) { return coord; }, - moveX = noOp, - moveY = noOp; + var noOp = function(coord) { return coord; }; + var moveX = noOp; + var moveY = noOp; if(xPixelSized) { modifyItem('xanchor', shapeOptions.xanchor = p2x(xAnchor + dx)); @@ -30121,9 +30456,9 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { function resizeShape(dx, dy) { if(isPath) { // TODO: implement path resize, don't forget to update dragMode code - var noOp = function(coord) { return coord; }, - moveX = noOp, - moveY = noOp; + var noOp = function(coord) { return coord; }; + var moveX = noOp; + var moveY = noOp; if(xPixelSized) { modifyItem('xanchor', shapeOptions.xanchor = p2x(xAnchor + dx)); @@ -30155,10 +30490,10 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { } } else { - var newN = (~dragMode.indexOf('n')) ? n0 + dy : n0, - newS = (~dragMode.indexOf('s')) ? s0 + dy : s0, - newW = (~dragMode.indexOf('w')) ? w0 + dx : w0, - newE = (~dragMode.indexOf('e')) ? e0 + dx : e0; + var newN = (~dragMode.indexOf('n')) ? n0 + dy : n0; + var newS = (~dragMode.indexOf('s')) ? s0 + dy : s0; + var newW = (~dragMode.indexOf('w')) ? w0 + dx : w0; + var newE = (~dragMode.indexOf('e')) ? e0 + dx : e0; // Do things in opposing direction for y-axis. // Hint: for data-sized shapes the reversal of axis direction is done in p2y. @@ -30247,29 +30582,30 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { } function deactivateClipPathTemporarily(shapePath, shapeOptions, gd) { - var xref = shapeOptions.xref, - yref = shapeOptions.yref, - xa = Axes.getFromId(gd, xref), - ya = Axes.getFromId(gd, yref); + var xref = shapeOptions.xref; + var yref = shapeOptions.yref; + var xa = Axes.getFromId(gd, xref); + var ya = Axes.getFromId(gd, yref); var clipAxes = ''; if(xref !== 'paper' && !xa.autorange) clipAxes += xref; if(yref !== 'paper' && !ya.autorange) clipAxes += yref; - shapePath.call(Drawing.setClipUrl, clipAxes ? - 'clip' + gd._fullLayout._uid + clipAxes : - null + Drawing.setClipUrl( + shapePath, + clipAxes ? 'clip' + gd._fullLayout._uid + clipAxes : null, + gd ); } } function getPathString(gd, options) { - var type = options.type, - xa = Axes.getFromId(gd, options.xref), - ya = Axes.getFromId(gd, options.yref), - gs = gd._fullLayout._size, - x2r, x2p, y2r, y2p, - x0, x1, y0, y1; + var type = options.type; + var xa = Axes.getFromId(gd, options.xref); + var ya = Axes.getFromId(gd, options.yref); + var gs = gd._fullLayout._size; + var x2r, x2p, y2r, y2p; + var x0, x1, y0, y1; if(xa) { x2r = helpers.shapePositionToRange(xa); @@ -30315,33 +30651,33 @@ function getPathString(gd, options) { if(type === 'line') return 'M' + x0 + ',' + y0 + 'L' + x1 + ',' + y1; if(type === 'rect') return 'M' + x0 + ',' + y0 + 'H' + x1 + 'V' + y1 + 'H' + x0 + 'Z'; + // circle - var cx = (x0 + x1) / 2, - cy = (y0 + y1) / 2, - rx = Math.abs(cx - x0), - ry = Math.abs(cy - y0), - rArc = 'A' + rx + ',' + ry, - rightPt = (cx + rx) + ',' + cy, - topPt = cx + ',' + (cy - ry); + var cx = (x0 + x1) / 2; + var cy = (y0 + y1) / 2; + var rx = Math.abs(cx - x0); + var ry = Math.abs(cy - y0); + var rArc = 'A' + rx + ',' + ry; + var rightPt = (cx + rx) + ',' + cy; + var topPt = cx + ',' + (cy - ry); return 'M' + rightPt + rArc + ' 0 1,1 ' + topPt + rArc + ' 0 0,1 ' + rightPt + 'Z'; } function convertPath(options, x2p, y2p) { - var pathIn = options.path, - xSizemode = options.xsizemode, - ySizemode = options.ysizemode, - xAnchor = options.xanchor, - yAnchor = options.yanchor; - + var pathIn = options.path; + var xSizemode = options.xsizemode; + var ySizemode = options.ysizemode; + var xAnchor = options.xanchor; + var yAnchor = options.yanchor; return pathIn.replace(constants.segmentRE, function(segment) { - var paramNumber = 0, - segmentType = segment.charAt(0), - xParams = constants.paramIsX[segmentType], - yParams = constants.paramIsY[segmentType], - nParams = constants.numParams[segmentType]; + var paramNumber = 0; + var segmentType = segment.charAt(0); + var xParams = constants.paramIsX[segmentType]; + var yParams = constants.paramIsY[segmentType]; + var nParams = constants.numParams[segmentType]; var paramString = segment.substr(1).replace(constants.paramRE, function(param) { if(xParams[paramNumber]) { @@ -30369,11 +30705,11 @@ function convertPath(options, x2p, y2p) { function movePath(pathIn, moveX, moveY) { return pathIn.replace(constants.segmentRE, function(segment) { - var paramNumber = 0, - segmentType = segment.charAt(0), - xParams = constants.paramIsX[segmentType], - yParams = constants.paramIsY[segmentType], - nParams = constants.numParams[segmentType]; + var paramNumber = 0; + var segmentType = segment.charAt(0); + var xParams = constants.paramIsX[segmentType]; + var yParams = constants.paramIsY[segmentType]; + var nParams = constants.numParams[segmentType]; var paramString = segment.substr(1).replace(constants.paramRE, function(param) { if(paramNumber >= nParams) return param; @@ -30390,9 +30726,9 @@ function movePath(pathIn, moveX, moveY) { }); } -},{"../../lib":169,"../../lib/setcursor":189,"../../plot_api/plot_template":204,"../../plots/cartesian/axes":214,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"./constants":131,"./helpers":134}],134:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../lib/setcursor":187,"../../plot_api/plot_template":202,"../../plots/cartesian/axes":212,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"./constants":129,"./helpers":132}],132:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30452,8 +30788,8 @@ exports.extractPathCoords = function(path, paramsToUse) { }; exports.getDataToPixel = function(gd, axis, isVertical) { - var gs = gd._fullLayout._size, - dataToPixel; + var gs = gd._fullLayout._size; + var dataToPixel; if(axis) { var d2r = exports.shapePositionToRange(axis); @@ -30475,8 +30811,8 @@ exports.getDataToPixel = function(gd, axis, isVertical) { }; exports.getPixelToData = function(gd, axis, isVertical) { - var gs = gd._fullLayout._size, - pixelToData; + var gs = gd._fullLayout._size; + var pixelToData; if(axis) { var r2d = exports.rangeToShapePosition(axis); @@ -30515,9 +30851,9 @@ exports.roundPositionForSharpStrokeRendering = function(pos, strokeWidth) { return strokeWidthIsOdd ? posValAsInt + 0.5 : posValAsInt; }; -},{"../../lib":169,"./constants":131}],135:[function(_dereq_,module,exports){ +},{"../../lib":168,"./constants":129}],133:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30542,9 +30878,9 @@ module.exports = { drawOne: drawModule.drawOne }; -},{"../../plots/cartesian/include_components":224,"./attributes":129,"./calc_autorange":130,"./defaults":132,"./draw":133}],136:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/include_components":223,"./attributes":127,"./calc_autorange":128,"./defaults":130,"./draw":131}],134:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30644,7 +30980,7 @@ module.exports = overrideAll(templatedArray('slider', { }, - pad: extendDeepAll({}, padAttrs, { + pad: extendDeepAll(padAttrs({editType: 'arraydraw'}), { }, {t: {dflt: 20}}), xanchor: { @@ -30785,9 +31121,9 @@ module.exports = overrideAll(templatedArray('slider', { } }), 'arraydraw', 'from-root'); -},{"../../lib/extend":163,"../../plot_api/edit_types":197,"../../plot_api/plot_template":204,"../../plots/animation_attributes":209,"../../plots/font_attributes":240,"../../plots/pad_attributes":245,"./constants":137}],137:[function(_dereq_,module,exports){ +},{"../../lib/extend":162,"../../plot_api/edit_types":195,"../../plot_api/plot_template":202,"../../plots/animation_attributes":207,"../../plots/font_attributes":239,"../../plots/pad_attributes":244,"./constants":135}],135:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30879,9 +31215,9 @@ module.exports = { currentValueInset: 0, }; -},{}],138:[function(_dereq_,module,exports){ +},{}],136:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30996,9 +31332,9 @@ function stepDefaults(valueIn, valueOut) { } } -},{"../../lib":169,"../../plots/array_container_defaults":210,"./attributes":136,"./constants":137}],139:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"./attributes":134,"./constants":135}],137:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31014,7 +31350,6 @@ var Color = _dereq_('../color'); var Drawing = _dereq_('../drawing'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); -var anchorUtils = _dereq_('../legend/anchor_utils'); var arrayEditor = _dereq_('../../plot_api/plot_template').arrayEditor; var constants = _dereq_('./constants'); @@ -31024,8 +31359,8 @@ var FROM_TL = alignmentConstants.FROM_TL; var FROM_BR = alignmentConstants.FROM_BR; module.exports = function draw(gd) { - var fullLayout = gd._fullLayout, - sliderData = makeSliderData(fullLayout, gd); + var fullLayout = gd._fullLayout; + var sliderData = makeSliderData(fullLayout, gd); // draw a container for *all* sliders: var sliders = fullLayout._infolayer @@ -31103,8 +31438,8 @@ function autoMarginId(sliderOpts) { // This really only just filters by visibility: function makeSliderData(fullLayout, gd) { - var contOpts = fullLayout[constants.name], - sliderData = []; + var contOpts = fullLayout[constants.name]; + var sliderData = []; for(var i = 0; i < contOpts.length; i++) { var item = contOpts[i]; @@ -31206,21 +31541,21 @@ function findDimensions(gd, sliderOpts) { dims.height = dims.currentValueTotalHeight + constants.tickOffset + sliderOpts.ticklen + constants.labelOffset + dims.labelHeight + sliderOpts.pad.t + sliderOpts.pad.b; var xanchor = 'left'; - if(anchorUtils.isRightAnchor(sliderOpts)) { + if(Lib.isRightAnchor(sliderOpts)) { dims.lx -= dims.outerLength; xanchor = 'right'; } - if(anchorUtils.isCenterAnchor(sliderOpts)) { + if(Lib.isCenterAnchor(sliderOpts)) { dims.lx -= dims.outerLength / 2; xanchor = 'center'; } var yanchor = 'top'; - if(anchorUtils.isBottomAnchor(sliderOpts)) { + if(Lib.isBottomAnchor(sliderOpts)) { dims.ly -= dims.height; yanchor = 'bottom'; } - if(anchorUtils.isMiddleAnchor(sliderOpts)) { + if(Lib.isMiddleAnchor(sliderOpts)) { dims.ly -= dims.height / 2; yanchor = 'middle'; } @@ -31627,9 +31962,9 @@ function drawRail(sliderGroup, sliderOpts) { ); } -},{"../../constants/alignment":148,"../../lib":169,"../../lib/svg_text_utils":191,"../../plot_api/plot_template":204,"../../plots/plots":246,"../color":50,"../drawing":75,"../legend/anchor_utils":102,"./constants":137,"d3":16}],140:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../lib":168,"../../lib/svg_text_utils":189,"../../plot_api/plot_template":202,"../../plots/plots":245,"../color":51,"../drawing":72,"./constants":135,"d3":16}],138:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31650,9 +31985,9 @@ module.exports = { draw: _dereq_('./draw') }; -},{"./attributes":136,"./constants":137,"./defaults":138,"./draw":139}],141:[function(_dereq_,module,exports){ +},{"./attributes":134,"./constants":135,"./defaults":136,"./draw":137}],139:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31720,19 +32055,21 @@ function draw(gd, titleClass, options) { var group = options.containerGroup; var fullLayout = gd._fullLayout; - var titlefont = cont.titlefont || {}; - var font = titlefont.family; - var fontSize = titlefont.size; - var fontColor = titlefont.color; var opacity = 1; var isplaceholder = false; - var txt = (cont.title || '').trim(); + var title = cont.title; + var txt = (title && title.text ? title.text : '').trim(); + + var font = title && title.font ? title.font : {}; + var fontFamily = font.family; + var fontSize = font.size; + var fontColor = font.color; // only make this title editable if we positively identify its property // as one that has editing enabled. var editAttr; - if(prop === 'title') editAttr = 'titleText'; + if(prop === 'title.text') editAttr = 'titleText'; else if(prop.indexOf('axis') !== -1) editAttr = 'axisTitleText'; else if(prop.indexOf('colorbar' !== -1)) editAttr = 'colorbarTitleText'; var editable = gd._context.edits[editAttr]; @@ -31748,6 +32085,10 @@ function draw(gd, titleClass, options) { if(!editable) txt = ''; } + if(fullLayout.meta) { + txt = Lib.templateString(txt, {meta: fullLayout.meta}); + } + var elShouldExist = txt || editable; if(!group) { @@ -31790,7 +32131,7 @@ function draw(gd, titleClass, options) { titleEl.attr('transform', transformVal); titleEl.style({ - 'font-family': font, + 'font-family': fontFamily, 'font-size': d3.round(fontSize, 2) + 'px', fill: Color.rgb(fontColor), opacity: opacity * Color.opacity(fontColor), @@ -31890,9 +32231,9 @@ function draw(gd, titleClass, options) { el.call(svgTextUtils.makeEditable, {gd: gd}) .on('edit', function(text) { if(traceIndex !== undefined) { - Registry.call('restyle', gd, prop, text, traceIndex); + Registry.call('_guiRestyle', gd, prop, text, traceIndex); } else { - Registry.call('relayout', gd, prop, text); + Registry.call('_guiRelayout', gd, prop, text); } }) .on('cancel', function() { @@ -31909,9 +32250,9 @@ function draw(gd, titleClass, options) { return group; } -},{"../../constants/interactions":150,"../../lib":169,"../../lib/svg_text_utils":191,"../../plots/plots":246,"../../registry":259,"../color":50,"../drawing":75,"d3":16,"fast-isnumeric":18}],142:[function(_dereq_,module,exports){ +},{"../../constants/interactions":148,"../../lib":168,"../../lib/svg_text_utils":189,"../../plots/plots":245,"../../registry":257,"../color":51,"../drawing":72,"d3":16,"fast-isnumeric":18}],140:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32038,7 +32379,7 @@ module.exports = overrideAll(templatedArray('updatemenu', { }, - pad: extendFlat({}, padAttrs, { + pad: extendFlat(padAttrs({editType: 'arraydraw'}), { }), @@ -32067,9 +32408,9 @@ module.exports = overrideAll(templatedArray('updatemenu', { } }), 'arraydraw', 'from-root'); -},{"../../lib/extend":163,"../../plot_api/edit_types":197,"../../plot_api/plot_template":204,"../../plots/font_attributes":240,"../../plots/pad_attributes":245,"../color/attributes":49}],143:[function(_dereq_,module,exports){ +},{"../../lib/extend":162,"../../plot_api/edit_types":195,"../../plot_api/plot_template":202,"../../plots/font_attributes":239,"../../plots/pad_attributes":244,"../color/attributes":50}],141:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32148,9 +32489,9 @@ module.exports = { } }; -},{}],144:[function(_dereq_,module,exports){ +},{}],142:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32231,9 +32572,9 @@ function buttonDefaults(buttonIn, buttonOut) { } } -},{"../../lib":169,"../../plots/array_container_defaults":210,"./attributes":142,"./constants":143}],145:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"./attributes":140,"./constants":141}],143:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32250,7 +32591,6 @@ var Color = _dereq_('../color'); var Drawing = _dereq_('../drawing'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); -var anchorUtils = _dereq_('../legend/anchor_utils'); var arrayEditor = _dereq_('../../plot_api/plot_template').arrayEditor; var LINE_SPACING = _dereq_('../../constants/alignment').LINE_SPACING; @@ -32259,8 +32599,8 @@ var constants = _dereq_('./constants'); var ScrollBox = _dereq_('./scrollbox'); module.exports = function draw(gd) { - var fullLayout = gd._fullLayout, - menuData = Lib.filterVisible(fullLayout[constants.name]); + var fullLayout = gd._fullLayout; + var menuData = Lib.filterVisible(fullLayout[constants.name]); /* Update menu data is bound to the header-group. * The items in the header group are always present. @@ -32334,8 +32674,8 @@ module.exports = function draw(gd) { } // setup scrollbox - var scrollBoxId = 'updatemenus' + fullLayout._uid, - scrollBox = new ScrollBox(gd, gButton, scrollBoxId); + var scrollBoxId = 'updatemenus' + fullLayout._uid; + var scrollBox = new ScrollBox(gd, gButton, scrollBoxId); // remove exiting header, remove dropped buttons and reset margins if(headerGroups.enter().size()) { @@ -32591,9 +32931,9 @@ function drawScrollBox(gd, gHeader, gButton, scrollBox, menuOpts, position) { var isVertical = (direction === 'up' || direction === 'down'); var dims = menuOpts._dims; - var active = menuOpts.active, - translateX, translateY, - i; + var active = menuOpts.active; + var translateX, translateY; + var i; if(isVertical) { translateY = 0; for(i = 0; i < active; i++) { @@ -32625,8 +32965,8 @@ function drawScrollBox(gd, gHeader, gButton, scrollBox, menuOpts, position) { } function hideScrollBox(scrollBox) { - var hasHBar = !!scrollBox.hbar, - hasVBar = !!scrollBox.vbar; + var hasHBar = !!scrollBox.hbar; + var hasVBar = !!scrollBox.vbar; if(hasHBar) { scrollBox.hbar @@ -32800,21 +33140,21 @@ function findDimensions(gd, menuOpts) { dims.ly = graphSize.t + graphSize.h * (1 - menuOpts.y); var xanchor = 'left'; - if(anchorUtils.isRightAnchor(menuOpts)) { + if(Lib.isRightAnchor(menuOpts)) { dims.lx -= paddedWidth; xanchor = 'right'; } - if(anchorUtils.isCenterAnchor(menuOpts)) { + if(Lib.isCenterAnchor(menuOpts)) { dims.lx -= paddedWidth / 2; xanchor = 'center'; } var yanchor = 'top'; - if(anchorUtils.isBottomAnchor(menuOpts)) { + if(Lib.isBottomAnchor(menuOpts)) { dims.ly -= paddedHeight; yanchor = 'bottom'; } - if(anchorUtils.isMiddleAnchor(menuOpts)) { + if(Lib.isMiddleAnchor(menuOpts)) { dims.ly -= paddedHeight / 2; yanchor = 'middle'; } @@ -32881,11 +33221,11 @@ function removeAllButtons(gButton, newMenuIndexAttr) { .selectAll('g.' + constants.dropdownButtonClassName).remove(); } -},{"../../constants/alignment":148,"../../lib":169,"../../lib/svg_text_utils":191,"../../plot_api/plot_template":204,"../../plots/plots":246,"../color":50,"../drawing":75,"../legend/anchor_utils":102,"./constants":143,"./scrollbox":147,"d3":16}],146:[function(_dereq_,module,exports){ -arguments[4][140][0].apply(exports,arguments) -},{"./attributes":142,"./constants":143,"./defaults":144,"./draw":145,"dup":140}],147:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../lib":168,"../../lib/svg_text_utils":189,"../../plot_api/plot_template":202,"../../plots/plots":245,"../color":51,"../drawing":72,"./constants":141,"./scrollbox":145,"d3":16}],144:[function(_dereq_,module,exports){ +arguments[4][138][0].apply(exports,arguments) +},{"./attributes":140,"./constants":141,"./defaults":142,"./draw":143,"dup":138}],145:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32965,26 +33305,26 @@ ScrollBox.barColor = '#808BA4'; * @param {number} [translateY=0] Vertical offset (in pixels) */ ScrollBox.prototype.enable = function enable(position, translateX, translateY) { - var fullLayout = this.gd._fullLayout, - fullWidth = fullLayout.width, - fullHeight = fullLayout.height; + var fullLayout = this.gd._fullLayout; + var fullWidth = fullLayout.width; + var fullHeight = fullLayout.height; // compute position of scrollbox this.position = position; - var l = this.position.l, - w = this.position.w, - t = this.position.t, - h = this.position.h, - direction = this.position.direction, - isDown = (direction === 'down'), - isLeft = (direction === 'left'), - isRight = (direction === 'right'), - isUp = (direction === 'up'), - boxW = w, - boxH = h, - boxL, boxR, - boxT, boxB; + var l = this.position.l; + var w = this.position.w; + var t = this.position.t; + var h = this.position.h; + var direction = this.position.direction; + var isDown = (direction === 'down'); + var isLeft = (direction === 'left'); + var isRight = (direction === 'right'); + var isUp = (direction === 'up'); + var boxW = w; + var boxH = h; + var boxL, boxR; + var boxT, boxB; if(!isDown && !isLeft && !isRight && !isUp) { this.position.direction = 'down'; @@ -33035,12 +33375,12 @@ ScrollBox.prototype.enable = function enable(position, translateX, translateY) { }; // compute position of horizontal scroll bar - var needsHorizontalScrollBar = (w > boxW), - hbarW = ScrollBox.barLength + 2 * ScrollBox.barPad, - hbarH = ScrollBox.barWidth + 2 * ScrollBox.barPad, - // draw horizontal scrollbar on the bottom side - hbarL = l, - hbarT = t + h; + var needsHorizontalScrollBar = (w > boxW); + var hbarW = ScrollBox.barLength + 2 * ScrollBox.barPad; + var hbarH = ScrollBox.barWidth + 2 * ScrollBox.barPad; + // draw horizontal scrollbar on the bottom side + var hbarL = l; + var hbarT = t + h; if(hbarT + hbarH > fullHeight) hbarT = fullHeight - hbarH; @@ -33076,12 +33416,12 @@ ScrollBox.prototype.enable = function enable(position, translateX, translateY) { } // compute position of vertical scroll bar - var needsVerticalScrollBar = (h > boxH), - vbarW = ScrollBox.barWidth + 2 * ScrollBox.barPad, - vbarH = ScrollBox.barLength + 2 * ScrollBox.barPad, - // draw vertical scrollbar on the right side - vbarL = l + w, - vbarT = t; + var needsVerticalScrollBar = (h > boxH); + var vbarW = ScrollBox.barWidth + 2 * ScrollBox.barPad; + var vbarH = ScrollBox.barLength + 2 * ScrollBox.barPad; + // draw vertical scrollbar on the right side + var vbarL = l + w; + var vbarT = t; if(vbarL + vbarW > fullWidth) vbarL = fullWidth - vbarW; @@ -33117,11 +33457,11 @@ ScrollBox.prototype.enable = function enable(position, translateX, translateY) { } // setup a clip path (if scroll bars are needed) - var clipId = this.id, - clipL = boxL - 0.5, - clipR = (needsVerticalScrollBar) ? boxR + vbarW + 0.5 : boxR + 0.5, - clipT = boxT - 0.5, - clipB = (needsHorizontalScrollBar) ? boxB + hbarH + 0.5 : boxB + 0.5; + var clipId = this.id; + var clipL = boxL - 0.5; + var clipR = (needsVerticalScrollBar) ? boxR + vbarW + 0.5 : boxR + 0.5; + var clipT = boxT - 0.5; + var clipB = (needsHorizontalScrollBar) ? boxB + hbarH + 0.5 : boxB + 0.5; var clipPath = fullLayout._topdefs.selectAll('#' + clipId) .data((needsHorizontalScrollBar || needsVerticalScrollBar) ? [0] : []); @@ -33140,7 +33480,7 @@ ScrollBox.prototype.enable = function enable(position, translateX, translateY) { height: Math.ceil(clipB) - Math.floor(clipT) }); - this.container.call(Drawing.setClipUrl, clipId); + this.container.call(Drawing.setClipUrl, clipId, this.gd); this.bg.attr({ x: l, @@ -33240,8 +33580,8 @@ ScrollBox.prototype.disable = function disable() { * @method */ ScrollBox.prototype._onBoxDrag = function onBarDrag() { - var translateX = this.translateX, - translateY = this.translateY; + var translateX = this.translateX; + var translateY = this.translateY; if(this.hbar) { translateX -= d3.event.dx; @@ -33260,8 +33600,8 @@ ScrollBox.prototype._onBoxDrag = function onBarDrag() { * @method */ ScrollBox.prototype._onBoxWheel = function onBarWheel() { - var translateX = this.translateX, - translateY = this.translateY; + var translateX = this.translateX; + var translateY = this.translateY; if(this.hbar) { translateX += d3.event.deltaY; @@ -33280,14 +33620,14 @@ ScrollBox.prototype._onBoxWheel = function onBarWheel() { * @method */ ScrollBox.prototype._onBarDrag = function onBarDrag() { - var translateX = this.translateX, - translateY = this.translateY; + var translateX = this.translateX; + var translateY = this.translateY; if(this.hbar) { - var xMin = translateX + this._hbarXMin, - xMax = xMin + this._hbarTranslateMax, - x = Lib.constrain(d3.event.x, xMin, xMax), - xf = (x - xMin) / (xMax - xMin); + var xMin = translateX + this._hbarXMin; + var xMax = xMin + this._hbarTranslateMax; + var x = Lib.constrain(d3.event.x, xMin, xMax); + var xf = (x - xMin) / (xMax - xMin); var translateXMax = this.position.w - this._box.w; @@ -33295,10 +33635,10 @@ ScrollBox.prototype._onBarDrag = function onBarDrag() { } if(this.vbar) { - var yMin = translateY + this._vbarYMin, - yMax = yMin + this._vbarTranslateMax, - y = Lib.constrain(d3.event.y, yMin, yMax), - yf = (y - yMin) / (yMax - yMin); + var yMin = translateY + this._vbarYMin; + var yMax = yMin + this._vbarTranslateMax; + var y = Lib.constrain(d3.event.y, yMin, yMax); + var yf = (y - yMin) / (yMax - yMin); var translateYMax = this.position.h - this._box.h; @@ -33317,8 +33657,8 @@ ScrollBox.prototype._onBarDrag = function onBarDrag() { */ ScrollBox.prototype.setTranslate = function setTranslate(translateX, translateY) { // store translateX and translateY (needed by mouse event handlers) - var translateXMax = this.position.w - this._box.w, - translateYMax = this.position.h - this._box.h; + var translateXMax = this.position.w - this._box.w; + var translateYMax = this.position.h - this._box.h; translateX = Lib.constrain(translateX || 0, 0, translateXMax); translateY = Lib.constrain(translateY || 0, 0, translateYMax); @@ -33354,9 +33694,9 @@ ScrollBox.prototype.setTranslate = function setTranslate(translateX, translateY) } }; -},{"../../lib":169,"../color":50,"../drawing":75,"d3":16}],148:[function(_dereq_,module,exports){ +},{"../../lib":168,"../color":51,"../drawing":72,"d3":16}],146:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33398,12 +33738,17 @@ module.exports = { // multiple of fontSize to get the vertical offset between lines LINE_SPACING: 1.3, - // multiple of fontSize to shift from the baseline to the midline + // multiple of fontSize to shift from the baseline + // to the cap (captical letter) line // (to use when we don't calculate this shift from Drawing.bBox) - // To be precise this should be half the cap height (capital letter) - // of the font, and according to wikipedia: + // This is an approximation since in reality cap height can differ + // from font to font. However, according to Wikipedia // an "average" font might have a cap height of 70% of the em // https://en.wikipedia.org/wiki/Em_(typography)#History + CAP_SHIFT: 0.70, + + // half the cap height (distance between baseline and cap line) + // of an "average" font (for more info see above). MID_SHIFT: 0.35, OPPOSITE_SIDE: { @@ -33414,9 +33759,9 @@ module.exports = { } }; -},{}],149:[function(_dereq_,module,exports){ +},{}],147:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33452,9 +33797,9 @@ module.exports = { } }; -},{}],150:[function(_dereq_,module,exports){ +},{}],148:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33479,9 +33824,9 @@ module.exports = { DESELECTDIM: 0.2 }; -},{}],151:[function(_dereq_,module,exports){ +},{}],149:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33544,9 +33889,9 @@ module.exports = { MINUS_SIGN: '\u2212' }; -},{}],152:[function(_dereq_,module,exports){ +},{}],150:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33568,9 +33913,9 @@ exports.svgAttrs = { 'xmlns:xlink': exports.xlink }; -},{}],153:[function(_dereq_,module,exports){ +},{}],151:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33580,7 +33925,7 @@ exports.svgAttrs = { 'use strict'; // package version injected by `npm run preprocess` -exports.version = '1.41.3'; +exports.version = '1.44.4'; // inject promise polyfill _dereq_('es6-promise').polyfill(); @@ -33589,7 +33934,7 @@ _dereq_('es6-promise').polyfill(); _dereq_('../build/plotcss'); // inject default MathJax config -_dereq_('./fonts/mathjax_config'); +_dereq_('./fonts/mathjax_config')(); // include registry module and expose register method var Registry = _dereq_('./registry'); @@ -33600,7 +33945,8 @@ var plotApi = _dereq_('./plot_api'); var methodNames = Object.keys(plotApi); for(var i = 0; i < methodNames.length; i++) { var name = methodNames[i]; - exports[name] = plotApi[name]; + // _ -> private API methods, but still registered for internal use + if(name.charAt(0) !== '_') exports[name] = plotApi[name]; register({ moduleType: 'apiMethod', name: name, @@ -33624,7 +33970,8 @@ register([ _dereq_('./components/rangeslider'), _dereq_('./components/rangeselector'), _dereq_('./components/grid'), - _dereq_('./components/errorbars') + _dereq_('./components/errorbars'), + _dereq_('./components/colorscale') ]); // locales en and en-US are required for default behavior @@ -33646,9 +33993,9 @@ exports.Queue = _dereq_('./lib/queue'); // export d3 used in the bundle exports.d3 = _dereq_('d3'); -},{"../build/plotcss":1,"../build/ploticon":2,"./components/annotations":43,"./components/annotations3d":48,"./components/errorbars":81,"./components/fx":92,"./components/grid":96,"./components/images":101,"./components/legend":110,"./components/rangeselector":121,"./components/rangeslider":127,"./components/shapes":135,"./components/sliders":140,"./components/updatemenus":146,"./fonts/mathjax_config":154,"./lib/queue":184,"./locale-en":195,"./locale-en-us":194,"./plot_api":199,"./plot_api/plot_schema":203,"./plots/plots":246,"./registry":259,"./snapshot":264,"./traces/scatter":378,"d3":16,"es6-promise":17}],154:[function(_dereq_,module,exports){ +},{"../build/plotcss":1,"../build/ploticon":2,"./components/annotations":44,"./components/annotations3d":49,"./components/colorscale":63,"./components/errorbars":78,"./components/fx":90,"./components/grid":94,"./components/images":99,"./components/legend":107,"./components/rangeselector":118,"./components/rangeslider":125,"./components/shapes":133,"./components/sliders":138,"./components/updatemenus":144,"./fonts/mathjax_config":152,"./lib/queue":182,"./locale-en":193,"./locale-en-us":192,"./plot_api":197,"./plot_api/plot_schema":201,"./plots/plots":245,"./registry":257,"./snapshot":262,"./traces/scatter":379,"d3":16,"es6-promise":17}],152:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33659,29 +34006,91 @@ exports.d3 = _dereq_('d3'); /* global MathJax:false */ -/** - * Check and configure MathJax - */ -if(typeof MathJax !== 'undefined') { - exports.MathJax = true; +module.exports = function() { + if(typeof MathJax !== 'undefined') { + var globalConfig = (window.PlotlyConfig || {}).MathJaxConfig !== 'local'; - MathJax.Hub.Config({ - messageStyle: 'none', - skipStartupTypeset: true, - displayAlign: 'left', - tex2jax: { - inlineMath: [['$', '$'], ['\\(', '\\)']] + if(globalConfig) { + MathJax.Hub.Config({ + messageStyle: 'none', + skipStartupTypeset: true, + displayAlign: 'left', + tex2jax: { + inlineMath: [['$', '$'], ['\\(', '\\)']] + } + }); + MathJax.Hub.Configured(); } - }); + } +}; - MathJax.Hub.Configured(); -} else { - exports.MathJax = false; -} - -},{}],155:[function(_dereq_,module,exports){ +},{}],153:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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'; + + +/** + * Determine the position anchor property of x/y xanchor/yanchor components. + * + * - values < 1/3 align the low side at that fraction, + * - values [1/3, 2/3] align the center at that fraction, + * - values > 2/3 align the right at that fraction. + */ + + +exports.isLeftAnchor = function isLeftAnchor(opts) { + return ( + opts.xanchor === 'left' || + (opts.xanchor === 'auto' && opts.x <= 1 / 3) + ); +}; + +exports.isCenterAnchor = function isCenterAnchor(opts) { + return ( + opts.xanchor === 'center' || + (opts.xanchor === 'auto' && opts.x > 1 / 3 && opts.x < 2 / 3) + ); +}; + +exports.isRightAnchor = function isRightAnchor(opts) { + return ( + opts.xanchor === 'right' || + (opts.xanchor === 'auto' && opts.x >= 2 / 3) + ); +}; + +exports.isTopAnchor = function isTopAnchor(opts) { + return ( + opts.yanchor === 'top' || + (opts.yanchor === 'auto' && opts.y >= 2 / 3) + ); +}; + +exports.isMiddleAnchor = function isMiddleAnchor(opts) { + return ( + opts.yanchor === 'middle' || + (opts.yanchor === 'auto' && opts.y > 1 / 3 && opts.y < 2 / 3) + ); +}; + +exports.isBottomAnchor = function isBottomAnchor(opts) { + return ( + opts.yanchor === 'bottom' || + (opts.yanchor === 'auto' && opts.y <= 1 / 3) + ); +}; + +},{}],154:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33920,9 +34329,168 @@ module.exports = { pathAnnulus: pathAnnulus }; -},{"./mod":177}],156:[function(_dereq_,module,exports){ +},{"./mod":175}],155:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isArray = Array.isArray; + +// IE9 fallbacks + +var ab = (typeof ArrayBuffer === 'undefined' || !ArrayBuffer.isView) ? + {isView: function() { return false; }} : + ArrayBuffer; + +var dv = (typeof DataView === 'undefined') ? + function() {} : + DataView; + +function isTypedArray(a) { + return ab.isView(a) && !(a instanceof dv); +} +exports.isTypedArray = isTypedArray; + +function isArrayOrTypedArray(a) { + return isArray(a) || isTypedArray(a); +} +exports.isArrayOrTypedArray = isArrayOrTypedArray; + +/* + * Test whether an input object is 1D. + * + * Assumes we already know the object is an array. + * + * Looks only at the first element, if the dimensionality is + * not consistent we won't figure that out here. + */ +function isArray1D(a) { + return !isArrayOrTypedArray(a[0]); +} +exports.isArray1D = isArray1D; + +/* + * Ensures an array has the right amount of storage space. If it doesn't + * exist, it creates an array. If it does exist, it returns it if too + * short or truncates it in-place. + * + * The goal is to just reuse memory to avoid a bit of excessive garbage + * collection. + */ +exports.ensureArray = function(out, n) { + // TODO: typed array support here? This is only used in + // traces/carpet/compute_control_points + if(!isArray(out)) out = []; + + // If too long, truncate. (If too short, it will grow + // automatically so we don't care about that case) + out.length = n; + + return out; +}; + +/* + * TypedArray-compatible concatenation of n arrays + * if all arrays are the same type it will preserve that type, + * otherwise it falls back on Array. + * Also tries to avoid copying, in case one array has zero length + * But never mutates an existing array + */ +exports.concat = function() { + var args = []; + var allArray = true; + var totalLen = 0; + + var _constructor, arg0, i, argi, posi, leni, out, j; + + for(i = 0; i < arguments.length; i++) { + argi = arguments[i]; + leni = argi.length; + if(leni) { + if(arg0) args.push(argi); + else { + arg0 = argi; + posi = leni; + } + + if(isArray(argi)) { + _constructor = false; + } + else { + allArray = false; + if(!totalLen) { + _constructor = argi.constructor; + } + else if(_constructor !== argi.constructor) { + // TODO: in principle we could upgrade here, + // ie keep typed array but convert all to Float64Array? + _constructor = false; + } + } + + totalLen += leni; + } + } + + if(!totalLen) return []; + if(!args.length) return arg0; + + if(allArray) return arg0.concat.apply(arg0, args); + if(_constructor) { + // matching typed arrays + out = new _constructor(totalLen); + out.set(arg0); + for(i = 0; i < args.length; i++) { + argi = args[i]; + out.set(argi, posi); + posi += argi.length; + } + return out; + } + + // mismatched types or Array + typed + out = new Array(totalLen); + for(j = 0; j < arg0.length; j++) out[j] = arg0[j]; + for(i = 0; i < args.length; i++) { + argi = args[i]; + for(j = 0; j < argi.length; j++) out[posi + j] = argi[j]; + posi += j; + } + return out; +}; + +exports.maxRowLength = function(z) { + return _rowLength(z, Math.max, 0); +}; + +exports.minRowLength = function(z) { + return _rowLength(z, Math.min, Infinity); +}; + +function _rowLength(z, fn, len0) { + if(isArrayOrTypedArray(z)) { + if(isArrayOrTypedArray(z[0])) { + var len = len0; + for(var i = 0; i < z.length; i++) { + len = fn(len, z[i].length); + } + return len; + } else { + return z.length; + } + } + return 0; +} + +},{}],156:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33953,9 +34521,9 @@ module.exports = function cleanNumber(v) { return BADNUM; }; -},{"../constants/numerical":151,"fast-isnumeric":18}],157:[function(_dereq_,module,exports){ +},{"../constants/numerical":149,"fast-isnumeric":18}],157:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33983,7 +34551,7 @@ module.exports = function clearGlCanvases(gd) { },{}],158:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34006,27 +34574,26 @@ module.exports = function clearResponsive(gd) { },{}],159:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); var tinycolor = _dereq_('tinycolor2'); var baseTraceAttrs = _dereq_('../plots/attributes'); -var getColorscale = _dereq_('../components/colorscale/get_scale'); -var colorscaleNames = Object.keys(_dereq_('../components/colorscale/scales')); +var scales = _dereq_('../components/colorscale/scales'); +var DESELECTDIM = _dereq_('../constants/interactions').DESELECTDIM; + var nestedProperty = _dereq_('./nested_property'); var counterRegex = _dereq_('./regex').counter; -var DESELECTDIM = _dereq_('../constants/interactions').DESELECTDIM; var modHalf = _dereq_('./mod').modHalf; -var isArrayOrTypedArray = _dereq_('./is_array').isArrayOrTypedArray; +var isArrayOrTypedArray = _dereq_('./array').isArrayOrTypedArray; exports.valObjectMeta = { data_array: { @@ -34142,7 +34709,7 @@ exports.valObjectMeta = { coerceFunction: function(v, propOut, dflt) { - propOut.set(getColorscale(v, dflt)); + propOut.set(scales.get(v, dflt)); } }, angle: { @@ -34190,8 +34757,8 @@ exports.valObjectMeta = { propOut.set(v); return; } - var vParts = v.split('+'), - i = 0; + var vParts = v.split('+'); + var i = 0; while(i < vParts.length) { var vi = vParts[i]; if(opts.flags.indexOf(vi) === -1 || vParts.indexOf(vi) < i) { @@ -34370,9 +34937,9 @@ exports.coerce = function(containerIn, containerOut, attributes, attribute, dflt * returns false if there is no user input. */ exports.coerce2 = function(containerIn, containerOut, attributes, attribute, dflt) { - var propIn = nestedProperty(containerIn, attribute), - propOut = exports.coerce(containerIn, containerOut, attributes, attribute, dflt), - valIn = propIn.get(); + var propIn = nestedProperty(containerIn, attribute); + var propOut = exports.coerce(containerIn, containerOut, attributes, attribute, dflt); + var valIn = propIn.get(); return (valIn !== undefined && valIn !== null) ? propOut : false; }; @@ -34465,9 +35032,9 @@ function validate(value, opts) { return valObjectDef.validateFunction(value, opts); } - var failed = {}, - out = failed, - propMock = { set: function(v) { out = v; } }; + var failed = {}; + var out = failed; + var propMock = { set: function(v) { out = v; } }; // 'failed' just something mutable that won't be === anything else @@ -34476,9 +35043,9 @@ function validate(value, opts) { } exports.validate = validate; -},{"../components/colorscale/get_scale":63,"../components/colorscale/scales":69,"../constants/interactions":150,"../plots/attributes":211,"./is_array":170,"./mod":177,"./nested_property":178,"./regex":185,"fast-isnumeric":18,"tinycolor2":33}],160:[function(_dereq_,module,exports){ +},{"../components/colorscale/scales":66,"../constants/interactions":148,"../plots/attributes":209,"./array":155,"./mod":175,"./nested_property":176,"./regex":183,"fast-isnumeric":18,"tinycolor2":34}],160:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34649,12 +35216,12 @@ exports.dateTime2ms = function(s, calendar) { var match = s.match(isChinese ? DATETIME_REGEXP_CN : DATETIME_REGEXP); if(!match) return BADNUM; - var y = match[1], - m = match[3] || '1', - d = Number(match[5] || 1), - H = Number(match[7] || 0), - M = Number(match[9] || 0), - S = Number(match[11] || 0); + var y = match[1]; + var m = match[3] || '1'; + var d = Number(match[5] || 1); + var H = Number(match[7] || 0); + var M = Number(match[9] || 0); + var S = Number(match[11] || 0); if(isWorld) { // disallow 2-digit years for world calendars @@ -34731,18 +35298,17 @@ exports.ms2DateTime = function(ms, r, calendar) { if(!r) r = 0; - var msecTenths = Math.floor(mod(ms + 0.05, 1) * 10), - msRounded = Math.round(ms - msecTenths / 10), - dateStr, h, m, s, msec10, d; + var msecTenths = Math.floor(mod(ms + 0.05, 1) * 10); + var msRounded = Math.round(ms - msecTenths / 10); + var dateStr, h, m, s, msec10, d; if(isWorldCalendar(calendar)) { - var dateJD = Math.floor(msRounded / ONEDAY) + EPOCHJD, - timeMs = Math.floor(mod(ms, ONEDAY)); + var dateJD = Math.floor(msRounded / ONEDAY) + EPOCHJD; + var timeMs = Math.floor(mod(ms, ONEDAY)); try { dateStr = Registry.getComponentMethod('calendars', 'getCal')(calendar) .fromJD(dateJD).formatDate('yyyy-mm-dd'); - } - catch(e) { + } catch(e) { // invalid date in this calendar - fall back to Gyyyy-mm-dd dateStr = utcFormat('G%Y-%m-%d')(new Date(msRounded)); } @@ -34752,8 +35318,7 @@ exports.ms2DateTime = function(ms, r, calendar) { // it manually (after the '-' if there is one) if(dateStr.charAt(0) === '-') { while(dateStr.length < 11) dateStr = '-0' + dateStr.substr(1); - } - else { + } else { while(dateStr.length < 10) dateStr = '0' + dateStr; } @@ -34790,13 +35355,13 @@ exports.ms2DateTime = function(ms, r, calendar) { exports.ms2DateTimeLocal = function(ms) { if(!(ms >= MIN_MS + ONEDAY && ms <= MAX_MS - ONEDAY)) return BADNUM; - var msecTenths = Math.floor(mod(ms + 0.05, 1) * 10), - d = new Date(Math.round(ms - msecTenths / 10)), - dateStr = d3.time.format('%Y-%m-%d')(d), - h = d.getHours(), - m = d.getMinutes(), - s = d.getSeconds(), - msec10 = d.getUTCMilliseconds() * 10 + msecTenths; + var msecTenths = Math.floor(mod(ms + 0.05, 1) * 10); + var d = new Date(Math.round(ms - msecTenths / 10)); + var dateStr = d3.time.format('%Y-%m-%d')(d); + var h = d.getHours(); + var m = d.getMinutes(); + var s = d.getSeconds(); + var msec10 = d.getUTCMilliseconds() * 10 + msecTenths; return includeTime(dateStr, h, m, s, msec10); }; @@ -34824,7 +35389,9 @@ function includeTime(dateStr, h, m, s, msec10) { // a Date object or milliseconds // optional dflt is the return value if cleaning fails exports.cleanDate = function(v, dflt, calendar) { - if(exports.isJSDate(v) || typeof v === 'number') { + // let us use cleanDate to provide a missing default without an error + if(v === BADNUM) return dflt; + if(exports.isJSDate(v) || (typeof v === 'number' && isFinite(v))) { // do not allow milliseconds (old) or jsdate objects (inherently // described as gregorian dates) with world calendars if(isWorldCalendar(calendar)) { @@ -34858,10 +35425,10 @@ var fracMatch = /%\d?f/g; function modDateFormat(fmt, x, formatter, calendar) { fmt = fmt.replace(fracMatch, function(match) { - var digits = Math.min(+(match.charAt(1)) || 6, 6), - fracSecs = ((x / 1000 % 1) + 2) - .toFixed(digits) - .substr(2).replace(/0+$/, '') || '0'; + var digits = Math.min(+(match.charAt(1)) || 6, 6); + var fracSecs = ((x / 1000 % 1) + 2) + .toFixed(digits) + .substr(2).replace(/0+$/, '') || '0'; return fracSecs; }); @@ -34993,16 +35560,15 @@ exports.incrementMonth = function(ms, dMonth, calendar) { if(calendar) { try { - var dateJD = Math.round(ms / ONEDAY) + EPOCHJD, - calInstance = Registry.getComponentMethod('calendars', 'getCal')(calendar), - cDate = calInstance.fromJD(dateJD); + var dateJD = Math.round(ms / ONEDAY) + EPOCHJD; + var calInstance = Registry.getComponentMethod('calendars', 'getCal')(calendar); + var cDate = calInstance.fromJD(dateJD); if(dMonth % 12) calInstance.add(cDate, dMonth, 'm'); else calInstance.add(cDate, dMonth / 12, 'y'); return (cDate.toJD() - EPOCHJD) * ONEDAY + timeMs; - } - catch(e) { + } catch(e) { Loggers.error('invalid ms ' + ms + ' in calendar ' + calendar); // then keep going in gregorian even though the result will be 'Invalid' } @@ -35019,12 +35585,12 @@ exports.incrementMonth = function(ms, dMonth, calendar) { * calendar (string) the calendar to test against */ exports.findExactDates = function(data, calendar) { - var exactYears = 0, - exactMonths = 0, - exactDays = 0, - blankCount = 0, - d, - di; + var exactYears = 0; + var exactMonths = 0; + var exactDays = 0; + var blankCount = 0; + var d; + var di; var calInstance = ( isWorldCalendar(calendar) && @@ -35077,38 +35643,9 @@ exports.findExactDates = function(data, calendar) { }; }; -},{"../constants/numerical":151,"../registry":259,"./loggers":174,"./mod":177,"d3":16,"fast-isnumeric":18}],161:[function(_dereq_,module,exports){ +},{"../constants/numerical":149,"../registry":257,"./loggers":172,"./mod":175,"d3":16,"fast-isnumeric":18}],161:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - -/* - * Ensures an array has the right amount of storage space. If it doesn't - * exist, it creates an array. If it does exist, it returns it if too - * short or truncates it in-place. - * - * The goal is to just reuse memory to avoid a bit of excessive garbage - * collection. - */ -module.exports = function ensureArray(out, n) { - if(!Array.isArray(out)) out = []; - - // If too long, truncate. (If too short, it will grow - // automatically so we don't care about that case) - out.length = n; - - return out; -}; - -},{}],162:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35280,9 +35817,9 @@ var Events = { module.exports = Events; -},{"events":15}],163:[function(_dereq_,module,exports){ +},{"events":15}],162:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35343,8 +35880,8 @@ exports.extendDeepNoArrays = function() { * */ function _extend(inputs, isDeep, keepAllKeys, noArrayCopies) { - var target = inputs[0], - length = inputs.length; + var target = inputs[0]; + var length = inputs.length; var input, key, src, copy, copyIsArray, clone, allPrimitives; @@ -35396,9 +35933,9 @@ function _extend(inputs, isDeep, keepAllKeys, noArrayCopies) { return target; } -},{"./is_plain_object.js":171}],164:[function(_dereq_,module,exports){ +},{"./is_plain_object.js":169}],163:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35431,9 +35968,9 @@ function _extend(inputs, isDeep, keepAllKeys, noArrayCopies) { * @return {array} new filtered array */ module.exports = function filterUnique(array) { - var seen = {}, - out = [], - j = 0; + var seen = {}; + var out = []; + var j = 0; for(var i = 0; i < array.length; i++) { var item = array[i]; @@ -35447,9 +35984,9 @@ module.exports = function filterUnique(array) { return out; }; -},{}],165:[function(_dereq_,module,exports){ +},{}],164:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35494,9 +36031,9 @@ function isCalcData(cont) { ); } -},{}],166:[function(_dereq_,module,exports){ +},{}],165:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35513,18 +36050,18 @@ var mod = _dereq_('./mod').mod; */ exports.segmentsIntersect = segmentsIntersect; function segmentsIntersect(x1, y1, x2, y2, x3, y3, x4, y4) { - var a = x2 - x1, - b = x3 - x1, - c = x4 - x3, - d = y2 - y1, - e = y3 - y1, - f = y4 - y3, - det = a * f - c * d; + var a = x2 - x1; + var b = x3 - x1; + var c = x4 - x3; + var d = y2 - y1; + var e = y3 - y1; + var f = y4 - y3; + var det = a * f - c * d; // parallel lines? intersection is undefined // ignore the case where they are colinear if(det === 0) return null; - var t = (b * f - c * e) / det, - u = (b * d - a * e) / det; + var t = (b * f - c * e) / det; + var u = (b * d - a * e) / det; // segments do not intersect? if(u < 0 || u > 1 || t < 0 || t > 1) return null; @@ -35542,15 +36079,15 @@ exports.segmentDistance = function segmentDistance(x1, y1, x2, y2, x3, y3, x4, y var y12 = y2 - y1; var x34 = x4 - x3; var y34 = y4 - y3; - var l2_12 = x12 * x12 + y12 * y12; - var l2_34 = x34 * x34 + y34 * y34; + var ll12 = x12 * x12 + y12 * y12; + var ll34 = x34 * x34 + y34 * y34; // calculate distance squared, then take the sqrt at the very end var dist2 = Math.min( - perpDistance2(x12, y12, l2_12, x3 - x1, y3 - y1), - perpDistance2(x12, y12, l2_12, x4 - x1, y4 - y1), - perpDistance2(x34, y34, l2_34, x1 - x3, y1 - y3), - perpDistance2(x34, y34, l2_34, x2 - x3, y2 - y3) + perpDistance2(x12, y12, ll12, x3 - x1, y3 - y1), + perpDistance2(x12, y12, ll12, x4 - x1, y4 - y1), + perpDistance2(x34, y34, ll34, x1 - x3, y1 - y3), + perpDistance2(x34, y34, ll34, x2 - x3, y2 - y3) ); return Math.sqrt(dist2); @@ -35560,15 +36097,15 @@ exports.segmentDistance = function segmentDistance(x1, y1, x2, y2, x3, y3, x4, y * distance squared from segment ab to point c * [xab, yab] is the vector b-a * [xac, yac] is the vector c-a - * l2_ab is the length squared of (b-a), just to simplify calculation + * llab is the length squared of (b-a), just to simplify calculation */ -function perpDistance2(xab, yab, l2_ab, xac, yac) { - var fc_ab = (xac * xab + yac * yab); - if(fc_ab < 0) { +function perpDistance2(xab, yab, llab, xac, yac) { + var fcAB = (xac * xab + yac * yab); + if(fcAB < 0) { // point c is closer to point a return xac * xac + yac * yac; } - else if(fc_ab > l2_ab) { + else if(fcAB > llab) { // point c is closer to point b var xbc = xac - xab; var ybc = yac - yab; @@ -35577,7 +36114,7 @@ function perpDistance2(xab, yab, l2_ab, xac, yac) { else { // perpendicular distance is the shortest var crossProduct = xac * yab - yac * xab; - return crossProduct * crossProduct / l2_ab; + return crossProduct * crossProduct / llab; } } @@ -35740,9 +36277,9 @@ exports.findPointOnPath = function findPointOnPath(path, val, coord, opts) { return pt; }; -},{"./mod":177}],167:[function(_dereq_,module,exports){ +},{"./mod":175}],166:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35778,9 +36315,9 @@ module.exports = function(gd) { return gd; // otherwise assume that gd is a DOM element }; -},{}],168:[function(_dereq_,module,exports){ +},{}],167:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35794,9 +36331,9 @@ module.exports = function(gd) { module.exports = function identity(d) { return d; }; -},{}],169:[function(_dereq_,module,exports){ +},{}],168:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35821,17 +36358,20 @@ lib.relativeAttr = _dereq_('./relative_attr'); lib.isPlainObject = _dereq_('./is_plain_object'); lib.toLogRange = _dereq_('./to_log_range'); lib.relinkPrivateKeys = _dereq_('./relink_private'); -lib.ensureArray = _dereq_('./ensure_array'); + +var arrayModule = _dereq_('./array'); +lib.isTypedArray = arrayModule.isTypedArray; +lib.isArrayOrTypedArray = arrayModule.isArrayOrTypedArray; +lib.isArray1D = arrayModule.isArray1D; +lib.ensureArray = arrayModule.ensureArray; +lib.concat = arrayModule.concat; +lib.maxRowLength = arrayModule.maxRowLength; +lib.minRowLength = arrayModule.minRowLength; var modModule = _dereq_('./mod'); lib.mod = modModule.mod; lib.modHalf = modModule.modHalf; -var isArrayModule = _dereq_('./is_array'); -lib.isTypedArray = isArrayModule.isTypedArray; -lib.isArrayOrTypedArray = isArrayModule.isArrayOrTypedArray; -lib.isArray1D = isArrayModule.isArray1D; - var coerceModule = _dereq_('./coerce'); lib.valObjectMeta = coerceModule.valObjectMeta; lib.coerce = coerceModule.coerce; @@ -35896,6 +36436,14 @@ lib.pathArc = anglesModule.pathArc; lib.pathSector = anglesModule.pathSector; lib.pathAnnulus = anglesModule.pathAnnulus; +var anchorUtils = _dereq_('./anchor_utils'); +lib.isLeftAnchor = anchorUtils.isLeftAnchor; +lib.isCenterAnchor = anchorUtils.isCenterAnchor; +lib.isRightAnchor = anchorUtils.isRightAnchor; +lib.isTopAnchor = anchorUtils.isTopAnchor; +lib.isMiddleAnchor = anchorUtils.isMiddleAnchor; +lib.isBottomAnchor = anchorUtils.isBottomAnchor; + var geom2dModule = _dereq_('./geometry2d'); lib.segmentsIntersect = geom2dModule.segmentsIntersect; lib.segmentDistance = geom2dModule.segmentDistance; @@ -35986,10 +36534,10 @@ lib.swapAttrs = function(cont, attrList, part1, part2) { if(!part1) part1 = 'x'; if(!part2) part2 = 'y'; for(var i = 0; i < attrList.length; i++) { - var attr = attrList[i], - xp = lib.nestedProperty(cont, attr.replace('?', part1)), - yp = lib.nestedProperty(cont, attr.replace('?', part2)), - temp = xp.get(); + var attr = attrList[i]; + var xp = lib.nestedProperty(cont, attr.replace('?', part1)); + var yp = lib.nestedProperty(cont, attr.replace('?', part2)); + var temp = xp.get(); xp.set(yp.get()); yp.set(temp); } @@ -36038,8 +36586,8 @@ lib.bBoxIntersect = function(a, b, pad) { * x1, x2: optional extra args */ lib.simpleMap = function(array, func, x1, x2) { - var len = array.length, - out = new Array(len); + var len = array.length; + var out = new Array(len); for(var i = 0; i < len; i++) out[i] = func(array[i], x1, x2); return out; }; @@ -36127,15 +36675,15 @@ lib.smooth = function(arrayIn, FWHM) { FWHM = Math.round(FWHM) || 0; // only makes sense for integers if(FWHM < 2) return arrayIn; - var alen = arrayIn.length, - alen2 = 2 * alen, - wlen = 2 * FWHM - 1, - w = new Array(wlen), - arrayOut = new Array(alen), - i, - j, - k, - v; + var alen = arrayIn.length; + var alen2 = 2 * alen; + var wlen = 2 * FWHM - 1; + var w = new Array(wlen); + var arrayOut = new Array(alen); + var i; + var j; + var k; + var v; // first make the window array for(i = 0; i < wlen; i++) { @@ -36213,10 +36761,10 @@ lib.noneOrAll = function(containerIn, containerOut, attrList) { */ if(!containerIn) return; - var hasAny = false, - hasAll = true, - i, - val; + var hasAny = false; + var hasAll = true; + var i; + var val; for(i = 0; i < attrList.length; i++) { val = containerIn[attrList[i]]; @@ -36420,17 +36968,22 @@ lib.getTargetArray = function(trace, transformOpts) { lib.minExtend = function(obj1, obj2) { var objOut = {}; if(typeof obj2 !== 'object') obj2 = {}; - var arrayLen = 3, - keys = Object.keys(obj1), - i, - k, - v; + var arrayLen = 3; + var keys = Object.keys(obj1); + var i, k, v; + for(i = 0; i < keys.length; i++) { k = keys[i]; v = obj1[k]; if(k.charAt(0) === '_' || typeof v === 'function') continue; else if(k === 'module') objOut[k] = v; - else if(Array.isArray(v)) objOut[k] = v.slice(0, arrayLen); + else if(Array.isArray(v)) { + if(k === 'colorscale') { + objOut[k] = v.slice(); + } else { + objOut[k] = v.slice(0, arrayLen); + } + } else if(v && (typeof v === 'object')) objOut[k] = lib.minExtend(obj1[k], obj2[k]); else objOut[k] = v; } @@ -36476,14 +37029,24 @@ lib.removeElement = function(el) { * by all calls to this function */ lib.addStyleRule = function(selector, styleString) { - if(!lib.styleSheet) { - var style = document.createElement('style'); + lib.addRelatedStyleRule('global', selector, styleString); +}; + +/** + * for dynamically adding style rules + * to a stylesheet uniquely identified by a uid + */ +lib.addRelatedStyleRule = function(uid, selector, styleString) { + var id = 'plotly.js-style-' + uid; + var style = document.getElementById(id); + if(!style) { + style = document.createElement('style'); + style.setAttribute('id', id); // WebKit hack :( style.appendChild(document.createTextNode('')); document.head.appendChild(style); - lib.styleSheet = style.sheet; } - var styleSheet = lib.styleSheet; + var styleSheet = style.sheet; if(styleSheet.insertRule) { styleSheet.insertRule(selector + '{' + styleString + '}', 0); @@ -36494,6 +37057,15 @@ lib.addStyleRule = function(selector, styleString) { else lib.warn('addStyleRule failed'); }; +/** + * to remove from the page a stylesheet identified by a given uid + */ +lib.deleteRelatedStyleRule = function(uid) { + var id = 'plotly.js-style-' + uid; + var style = document.getElementById(id); + if(style) lib.removeElement(style); +}; + lib.isIE = function() { return typeof window.navigator.msSaveBlob !== 'undefined'; }; @@ -36581,9 +37153,9 @@ lib.ensureSingleById = function(parent, nodeType, id, enterFn) { * @return {Object} the constructed object with a full nested path */ lib.objectFromPath = function(path, value) { - var keys = path.split('.'), - tmpObj, - obj = tmpObj = {}; + var keys = path.split('.'); + var tmpObj; + var obj = tmpObj = {}; for(var i = 0; i < keys.length; i++) { var key = keys[i]; @@ -36738,13 +37310,13 @@ lib.numSeparate = function(value, separators, separatethousands) { value = String(value); } - var thousandsRe = /(\d+)(\d{3})/, - decimalSep = separators.charAt(0), - thouSep = separators.charAt(1); + var thousandsRe = /(\d+)(\d{3})/; + var decimalSep = separators.charAt(0); + var thouSep = separators.charAt(1); - var x = value.split('.'), - x1 = x[0], - x2 = x.length > 1 ? decimalSep + x[1] : ''; + var x = value.split('.'); + var x1 = x[0]; + var x2 = x.length > 1 ? decimalSep + x[1] : ''; // Years are ignored for thousands separators if(thouSep && (x.length > 1 || x1.length > 4 || separatethousands)) { @@ -36756,10 +37328,10 @@ lib.numSeparate = function(value, separators, separatethousands) { return x1 + x2; }; -var TEMPLATE_STRING_REGEX = /%{([^\s%{}]*)}/g; +var TEMPLATE_STRING_REGEX = /%{([^\s%{}:]*)(:[^}]*)?}/g; var SIMPLE_PROPERTY_REGEX = /^\w*$/; -/* +/** * Substitute values from an object into a string * * Examples: @@ -36771,7 +37343,6 @@ var SIMPLE_PROPERTY_REGEX = /^\w*$/; * * @return {string} templated string */ - lib.templateString = function(string, obj) { // Not all that useful, but cache nestedProperty instantiation // just in case it speeds things up *slightly*: @@ -36786,6 +37357,67 @@ lib.templateString = function(string, obj) { }); }; +var TEMPLATE_STRING_FORMAT_SEPARATOR = /^:/; +var numberOfHoverTemplateWarnings = 0; +var maximumNumberOfHoverTemplateWarnings = 10; +/** + * Substitute values from an object into a string and optionally formats them using d3-format, + * or fallback to associated labels. + * + * Examples: + * Lib.templateString('name: %{trace}', {trace: 'asdf'}) --> 'name: asdf' + * Lib.templateString('name: %{trace[0].name}', {trace: [{name: 'asdf'}]}) --> 'name: asdf' + * Lib.templateString('price: %{y:$.2f}', {y: 1}) --> 'price: $1.00' + * + * @param {string} input string containing %{...:...} template strings + * @param {obj} data object containing fallback text when no formatting is specified, ex.: {yLabel: 'formattedYValue'} + * @param {obj} data objects containing substitution values + * + * @return {string} templated string + */ +lib.hovertemplateString = function(string, labels) { + var args = arguments; + // Not all that useful, but cache nestedProperty instantiation + // just in case it speeds things up *slightly*: + var getterCache = {}; + + return string.replace(TEMPLATE_STRING_REGEX, function(match, key, format) { + var obj, value, i; + for(i = 2; i < args.length; i++) { + obj = args[i]; + if(obj.hasOwnProperty(key)) { + value = obj[key]; + break; + } + + if(!SIMPLE_PROPERTY_REGEX.test(key)) { + value = getterCache[key] || lib.nestedProperty(obj, key).get(); + if(value) getterCache[key] = value; + } + if(value !== undefined) break; + } + + if(value === undefined) { + if(numberOfHoverTemplateWarnings < maximumNumberOfHoverTemplateWarnings) { + lib.warn('Variable \'' + key + '\' in hovertemplate could not be found!'); + value = match; + } + + if(numberOfHoverTemplateWarnings === maximumNumberOfHoverTemplateWarnings) { + lib.warn('Too many hovertemplate warnings - additional warnings will be suppressed'); + } + numberOfHoverTemplateWarnings++; + } + + if(format) { + value = d3.format(format.replace(TEMPLATE_STRING_FORMAT_SEPARATOR, ''))(value); + } else { + if(labels.hasOwnProperty(key + 'Label')) value = labels[key + 'Label']; + } + return value; + }); +}; + /* * alphanumeric string sort, tailored for subplot IDs like scene2, scene10, x10y13 etc */ @@ -36828,56 +37460,9 @@ lib.pseudoRandom = function() { return randSeed / 4294967296; }; -},{"../constants/numerical":151,"./angles":155,"./clean_number":156,"./clear_responsive":158,"./coerce":159,"./dates":160,"./ensure_array":161,"./extend":163,"./filter_unique":164,"./filter_visible":165,"./geometry2d":166,"./get_graph_div":167,"./identity":168,"./is_array":170,"./is_plain_object":171,"./keyed_container":172,"./localize":173,"./loggers":174,"./make_trace_groups":175,"./matrix":176,"./mod":177,"./nested_property":178,"./noop":179,"./notifier":180,"./push_unique":183,"./regex":185,"./relative_attr":186,"./relink_private":187,"./search":188,"./stats":190,"./throttle":192,"./to_log_range":193,"d3":16,"fast-isnumeric":18}],170:[function(_dereq_,module,exports){ +},{"../constants/numerical":149,"./anchor_utils":153,"./angles":154,"./array":155,"./clean_number":156,"./clear_responsive":158,"./coerce":159,"./dates":160,"./extend":162,"./filter_unique":163,"./filter_visible":164,"./geometry2d":165,"./get_graph_div":166,"./identity":167,"./is_plain_object":169,"./keyed_container":170,"./localize":171,"./loggers":172,"./make_trace_groups":173,"./matrix":174,"./mod":175,"./nested_property":176,"./noop":177,"./notifier":178,"./push_unique":181,"./regex":183,"./relative_attr":184,"./relink_private":185,"./search":186,"./stats":188,"./throttle":190,"./to_log_range":191,"d3":16,"fast-isnumeric":18}],169:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - -// IE9 fallbacks - -var ab = (typeof ArrayBuffer === 'undefined' || !ArrayBuffer.isView) ? - {isView: function() { return false; }} : - ArrayBuffer; - -var dv = (typeof DataView === 'undefined') ? - function() {} : - DataView; - -function isTypedArray(a) { - return ab.isView(a) && !(a instanceof dv); -} - -function isArrayOrTypedArray(a) { - return Array.isArray(a) || isTypedArray(a); -} - -/* - * Test whether an input object is 1D. - * - * Assumes we already know the object is an array. - * - * Looks only at the first element, if the dimensionality is - * not consistent we won't figure that out here. - */ -function isArray1D(a) { - return !isArrayOrTypedArray(a[0]); -} - -module.exports = { - isTypedArray: isTypedArray, - isArrayOrTypedArray: isArrayOrTypedArray, - isArray1D: isArray1D -}; - -},{}],171:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36904,9 +37489,9 @@ module.exports = function isPlainObject(obj) { ); }; -},{}],172:[function(_dereq_,module,exports){ +},{}],170:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37097,9 +37682,9 @@ module.exports = function keyedContainer(baseObj, path, keyName, valueName) { return obj; }; -},{"./nested_property":178}],173:[function(_dereq_,module,exports){ +},{"./nested_property":176}],171:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37153,9 +37738,9 @@ module.exports = function localize(gd, s) { return s; }; -},{"../registry":259}],174:[function(_dereq_,module,exports){ +},{"../registry":257}],172:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37166,7 +37751,7 @@ module.exports = function localize(gd, s) { /* eslint-disable no-console */ -var config = _dereq_('../plot_api/plot_config'); +var dfltConfig = _dereq_('../plot_api/plot_config').dfltConfig; var loggers = module.exports = {}; @@ -37177,7 +37762,7 @@ var loggers = module.exports = {}; */ loggers.log = function() { - if(config.logging > 1) { + if(dfltConfig.logging > 1) { var messages = ['LOG:']; for(var i = 0; i < arguments.length; i++) { @@ -37189,7 +37774,7 @@ loggers.log = function() { }; loggers.warn = function() { - if(config.logging > 0) { + if(dfltConfig.logging > 0) { var messages = ['WARN:']; for(var i = 0; i < arguments.length; i++) { @@ -37201,7 +37786,7 @@ loggers.warn = function() { }; loggers.error = function() { - if(config.logging > 0) { + if(dfltConfig.logging > 0) { var messages = ['ERROR:']; for(var i = 0; i < arguments.length; i++) { @@ -37217,19 +37802,31 @@ loggers.error = function() { * apply like other functions do */ function apply(f, args) { - if(f.apply) { - f.apply(f, args); + if(f && f.apply) { + try { + // `this` should always be console, since here we're always + // applying a method of the console object. + f.apply(console, args); + return; + } + catch(e) { /* in case apply failed, fall back on the code below */ } } - else { - for(var i = 0; i < args.length; i++) { + + // no apply - just try calling the function on each arg independently + for(var i = 0; i < args.length; i++) { + try { f(args[i]); } + catch(e) { + // still fails - last resort simple console.log + console.log(args[i]); + } } } -},{"../plot_api/plot_config":202}],175:[function(_dereq_,module,exports){ +},{"../plot_api/plot_config":200}],173:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37264,9 +37861,9 @@ module.exports = function makeTraceGroups(traceLayer, cdModule, cls) { return traces; }; -},{}],176:[function(_dereq_,module,exports){ +},{}],174:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37289,10 +37886,9 @@ exports.init2dArray = function(rowLength, colLength) { * transposing-a-2d-array-in-javascript */ exports.transposeRagged = function(z) { - var maxlen = 0, - zlen = z.length, - i, - j; + var maxlen = 0; + var zlen = z.length; + var i, j; // Maximum row length: for(i = 0; i < zlen; i++) maxlen = Math.max(maxlen, z[i].length); @@ -37309,9 +37905,9 @@ exports.transposeRagged = function(z) { exports.dot = function(x, y) { if(!(x.length && y.length) || x.length !== y.length) return null; - var len = x.length, - out, - i; + var len = x.length; + var out; + var i; if(x[0].length) { // mat-vec or mat-mat @@ -37374,9 +37970,9 @@ exports.apply2DTransform2 = function(transform) { }; }; -},{}],177:[function(_dereq_,module,exports){ +},{}],175:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37409,9 +38005,9 @@ module.exports = { modHalf: modHalf }; -},{}],178:[function(_dereq_,module,exports){ +},{}],176:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37422,7 +38018,7 @@ module.exports = { 'use strict'; var isNumeric = _dereq_('fast-isnumeric'); -var isArrayOrTypedArray = _dereq_('./is_array').isArrayOrTypedArray; +var isArrayOrTypedArray = _dereq_('./array').isArrayOrTypedArray; /** * convert a string s (such as 'xaxis.range[0]') @@ -37445,11 +38041,11 @@ module.exports = function nestedProperty(container, propStr) { throw 'bad property string'; } - var j = 0, - propParts = propStr.split('.'), - indexed, - indices, - i; + var j = 0; + var propParts = propStr.split('.'); + var indexed; + var indices; + var i; // check for parts of the nesting hierarchy that are numbers (ie array elements) while(j < propParts.length) { @@ -37488,12 +38084,12 @@ module.exports = function nestedProperty(container, propStr) { function npGet(cont, parts) { return function() { - var curCont = cont, - curPart, - allSame, - out, - i, - j; + var curCont = cont; + var curPart; + var allSame; + var out; + var i; + var j; for(i = 0; i < parts.length - 1; i++) { curPart = parts[i]; @@ -37544,12 +38140,12 @@ function isDeletable(val, propStr) { function npSet(cont, parts, propStr) { return function(val) { - var curCont = cont, - propPart = '', - containerLevels = [[cont, propPart]], - toDelete = isDeletable(val, propStr), - curPart, - i; + var curCont = cont; + var propPart = ''; + var containerLevels = [[cont, propPart]]; + var toDelete = isDeletable(val, propStr); + var curPart; + var i; for(i = 0; i < parts.length - 1; i++) { curPart = parts[i]; @@ -37608,13 +38204,13 @@ function joinPropStr(propStr, newPart) { // handle special -1 array index function setArrayAll(containerArray, innerParts, val, propStr) { - var arrayVal = isArrayOrTypedArray(val), - allSet = true, - thisVal = val, - thisPropStr = propStr.replace('-1', 0), - deleteThis = arrayVal ? false : isDeletable(val, thisPropStr), - firstPart = innerParts[0], - i; + var arrayVal = isArrayOrTypedArray(val); + var allSet = true; + var thisVal = val; + var thisPropStr = propStr.replace('-1', 0); + var deleteThis = arrayVal ? false : isDeletable(val, thisPropStr); + var firstPart = innerParts[0]; + var i; for(i = 0; i < containerArray.length; i++) { thisPropStr = propStr.replace('-1', i); @@ -37656,9 +38252,9 @@ function badContainer(container, propStr, propParts) { }; } -},{"./is_array":170,"fast-isnumeric":18}],179:[function(_dereq_,module,exports){ +},{"./array":155,"fast-isnumeric":18}],177:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37672,9 +38268,9 @@ function badContainer(container, propStr, propParts) { module.exports = function noop() {}; -},{}],180:[function(_dereq_,module,exports){ +},{}],178:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37754,9 +38350,9 @@ module.exports = function(text, displayLength) { }); }; -},{"d3":16,"fast-isnumeric":18}],181:[function(_dereq_,module,exports){ +},{"d3":16,"fast-isnumeric":18}],179:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37803,9 +38399,9 @@ module.exports = function overrideCursor(el3, csr) { } }; -},{"./setcursor":189}],182:[function(_dereq_,module,exports){ +},{"./setcursor":187}],180:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37837,12 +38433,12 @@ var polygon = module.exports = {}; * returns boolean: is pt inside the polygon (including on its edges) */ polygon.tester = function tester(ptsIn) { - var pts = ptsIn.slice(), - xmin = pts[0][0], - xmax = xmin, - ymin = pts[0][1], - ymax = ymin, - i; + var pts = ptsIn.slice(); + var xmin = pts[0][0]; + var xmax = xmin; + var ymin = pts[0][1]; + var ymax = ymin; + var i; pts.push(pts[0]); for(i = 1; i < pts.length; i++) { @@ -37855,8 +38451,8 @@ polygon.tester = function tester(ptsIn) { // do we have a rectangle? Handle this here, so we can use the same // tester for the rectangular case without sacrificing speed - var isRect = false, - rectFirstEdgeTest; + var isRect = false; + var rectFirstEdgeTest; if(pts.length === 5) { if(pts[0][0] === pts[1][0]) { // vert, horz, vert, horz @@ -37878,8 +38474,8 @@ polygon.tester = function tester(ptsIn) { } function rectContains(pt, omitFirstEdge) { - var x = pt[0], - y = pt[1]; + var x = pt[0]; + var y = pt[1]; if(x === BADNUM || x < xmin || x > xmax || y === BADNUM || y < ymin || y > ymax) { // pt is outside the bounding box of polygon @@ -37891,23 +38487,23 @@ polygon.tester = function tester(ptsIn) { } function contains(pt, omitFirstEdge) { - var x = pt[0], - y = pt[1]; + var x = pt[0]; + var y = pt[1]; if(x === BADNUM || x < xmin || x > xmax || y === BADNUM || y < ymin || y > ymax) { // pt is outside the bounding box of polygon return false; } - var imax = pts.length, - x1 = pts[0][0], - y1 = pts[0][1], - crossings = 0, - i, - x0, - y0, - xmini, - ycross; + var imax = pts.length; + var x1 = pts[0][0]; + var y1 = pts[0][1]; + var crossings = 0; + var i; + var x0; + var y0; + var xmini; + var ycross; for(i = 1; i < imax; i++) { // find all crossings of a vertical line upward from pt with @@ -37989,14 +38585,14 @@ polygon.tester = function tester(ptsIn) { * @returns boolean: true means this segment is bent, false means straight */ var isBent = polygon.isSegmentBent = function isBent(pts, start, end, tolerance) { - var startPt = pts[start], - segment = [pts[end][0] - startPt[0], pts[end][1] - startPt[1]], - segmentSquared = dot(segment, segment), - segmentLen = Math.sqrt(segmentSquared), - unitPerp = [-segment[1] / segmentLen, segment[0] / segmentLen], - i, - part, - partParallel; + var startPt = pts[start]; + var segment = [pts[end][0] - startPt[0], pts[end][1] - startPt[1]]; + var segmentSquared = dot(segment, segment); + var segmentLen = Math.sqrt(segmentSquared); + var unitPerp = [-segment[1] / segmentLen, segment[0] / segmentLen]; + var i; + var part; + var partParallel; for(i = start + 1; i < end; i++) { part = [pts[i][0] - startPt[0], pts[i][1] - startPt[1]]; @@ -38022,14 +38618,14 @@ var isBent = polygon.isSegmentBent = function isBent(pts, start, end, tolerance) * filtered is the resulting filtered Array of [x, y] pairs */ polygon.filter = function filter(pts, tolerance) { - var ptsFiltered = [pts[0]], - doneRawIndex = 0, - doneFilteredIndex = 0; + var ptsFiltered = [pts[0]]; + var doneRawIndex = 0; + var doneFilteredIndex = 0; function addPt(pt) { pts.push(pt); - var prevFilterLen = ptsFiltered.length, - iLast = doneRawIndex; + var prevFilterLen = ptsFiltered.length; + var iLast = doneRawIndex; ptsFiltered.splice(doneFilteredIndex + 1); for(var i = iLast + 1; i < pts.length; i++) { @@ -38056,9 +38652,9 @@ polygon.filter = function filter(pts, tolerance) { }; }; -},{"../constants/numerical":151,"./matrix":176}],183:[function(_dereq_,module,exports){ +},{"../constants/numerical":149,"./matrix":174}],181:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38082,9 +38678,8 @@ polygon.filter = function filter(pts, tolerance) { */ module.exports = function pushUnique(array, item) { if(item instanceof RegExp) { - var itemStr = item.toString(), - i; - for(i = 0; i < array.length; i++) { + var itemStr = item.toString(); + for(var i = 0; i < array.length; i++) { if(array[i] instanceof RegExp && array[i].toString() === itemStr) { return array; } @@ -38096,21 +38691,19 @@ module.exports = function pushUnique(array, item) { return array; }; -},{}],184:[function(_dereq_,module,exports){ +},{}],182:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Lib = _dereq_('../lib'); -var config = _dereq_('../plot_api/plot_config'); - +var dfltConfig = _dereq_('../plot_api/plot_config').dfltConfig; /** * Copy arg array *without* removing `undefined` values from objects. @@ -38190,7 +38783,7 @@ queue.add = function(gd, undoFunc, undoArgs, redoFunc, redoArgs) { queueObj.redo.args.push(redoArgs); } - if(gd.undoQueue.queue.length > config.queueLength) { + if(gd.undoQueue.queue.length > dfltConfig.queueLength) { gd.undoQueue.queue.shift(); gd.undoQueue.index--; } @@ -38307,9 +38900,9 @@ queue.plotDo = function(gd, func, args) { module.exports = queue; -},{"../lib":169,"../plot_api/plot_config":202}],185:[function(_dereq_,module,exports){ +},{"../lib":168,"../plot_api/plot_config":200}],183:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38326,18 +38919,20 @@ module.exports = queue; * @param {Optional(string)} tail: a fixed piece after the id * eg counterRegex('scene', '.annotations') for scene2.annotations etc. * @param {boolean} openEnded: if true, the string may continue past the match. + * @param {boolean} matchBeginning: if false, the string may start before the match. */ -exports.counter = function(head, tail, openEnded) { +exports.counter = function(head, tail, openEnded, matchBeginning) { var fullTail = (tail || '') + (openEnded ? '' : '$'); + var startWithPrefix = matchBeginning === false ? '' : '^'; if(head === 'xy') { - return new RegExp('^x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?' + fullTail); + return new RegExp(startWithPrefix + 'x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?' + fullTail); } - return new RegExp('^' + head + '([2-9]|[1-9][0-9]+)?' + fullTail); + return new RegExp(startWithPrefix + head + '([2-9]|[1-9][0-9]+)?' + fullTail); }; -},{}],186:[function(_dereq_,module,exports){ +},{}],184:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38388,9 +38983,9 @@ module.exports = function(baseAttr, relativeAttr) { return baseAttr + relativeAttr; }; -},{}],187:[function(_dereq_,module,exports){ +},{}],185:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38400,7 +38995,7 @@ module.exports = function(baseAttr, relativeAttr) { 'use strict'; -var isArrayOrTypedArray = _dereq_('./is_array').isArrayOrTypedArray; +var isArrayOrTypedArray = _dereq_('./array').isArrayOrTypedArray; var isPlainObject = _dereq_('./is_plain_object'); /** @@ -38451,9 +39046,9 @@ module.exports = function relinkPrivateKeys(toContainer, fromContainer) { } }; -},{"./is_array":170,"./is_plain_object":171}],188:[function(_dereq_,module,exports){ +},{"./array":155,"./is_plain_object":169}],186:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38529,10 +39124,10 @@ exports.distinctVals = function(valsIn) { var vals = valsIn.slice(); // otherwise we sort the original array... vals.sort(exports.sorterAsc); - var l = vals.length - 1, - minDiff = (vals[l] - vals[0]) || 1, - errDiff = minDiff / (l || 1) / 10000, - v2 = [vals[0]]; + var l = vals.length - 1; + var minDiff = (vals[l] - vals[0]) || 1; + var errDiff = minDiff / (l || 1) / 10000; + var v2 = [vals[0]]; for(var i = 0; i < l; i++) { // make sure values aren't just off by a rounding error @@ -38553,13 +39148,13 @@ exports.distinctVals = function(valsIn) { * binary search is probably overkill here... */ exports.roundUp = function(val, arrayIn, reverse) { - var low = 0, - high = arrayIn.length - 1, - mid, - c = 0, - dlow = reverse ? 0 : 1, - dhigh = reverse ? 1 : 0, - rounded = reverse ? Math.ceil : Math.floor; + var low = 0; + var high = arrayIn.length - 1; + var mid; + var c = 0; + var dlow = reverse ? 0 : 1; + var dhigh = reverse ? 1 : 0; + var rounded = reverse ? Math.ceil : Math.floor; // c is just to avoid infinite loops if there's an error while(low < high && c++ < 100) { mid = rounded((low + high) / 2); @@ -38572,6 +39167,10 @@ exports.roundUp = function(val, arrayIn, reverse) { /** * Tweak to Array.sort(sortFn) that improves performance for pre-sorted arrays * + * Note that newer browsers (such as Chrome v70+) are starting to pick up + * on pre-sorted arrays which may render the following optimization unnecessary + * in the future. + * * Motivation: sometimes we need to sort arrays but the input is likely to * already be sorted. Browsers don't seem to pick up on pre-sorted arrays, * and in fact Chrome is actually *slower* sorting pre-sorted arrays than purely @@ -38635,9 +39234,9 @@ exports.findIndexOfMin = function(arr, fn) { return ind; }; -},{"./identity":168,"./loggers":174,"fast-isnumeric":18}],189:[function(_dereq_,module,exports){ +},{"./identity":167,"./loggers":172,"fast-isnumeric":18}],187:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38658,9 +39257,9 @@ module.exports = function setCursor(el3, csr) { if(csr) el3.classed('cursor-' + csr, true); }; -},{}],190:[function(_dereq_,module,exports){ +},{}],188:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38671,7 +39270,7 @@ module.exports = function setCursor(el3, csr) { 'use strict'; var isNumeric = _dereq_('fast-isnumeric'); -var isArrayOrTypedArray = _dereq_('./is_array').isArrayOrTypedArray; +var isArrayOrTypedArray = _dereq_('./array').isArrayOrTypedArray; /** * aggNums() returns the result of an aggregate function applied to an array of @@ -38759,9 +39358,9 @@ exports.interp = function(arr, n) { return frac * arr[Math.ceil(n)] + (1 - frac) * arr[Math.floor(n)]; }; -},{"./is_array":170,"fast-isnumeric":18}],191:[function(_dereq_,module,exports){ +},{"./array":155,"fast-isnumeric":18}],189:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38878,13 +39477,13 @@ exports.convertToTspans = function(_context, gd, _callback) { var fill = _context.node().style.fill || 'black'; newSvg.select('g').attr({fill: fill, stroke: fill}); - var newSvgW = getSize(newSvg, 'width'), - newSvgH = getSize(newSvg, 'height'), - newX = +_context.attr('x') - newSvgW * - {start: 0, middle: 0.5, end: 1}[_context.attr('text-anchor') || 'start'], - // font baseline is about 1/4 fontSize below centerline - textHeight = fontSize || getSize(_context, 'height'), - dy = -textHeight / 4; + var newSvgW = getSize(newSvg, 'width'); + var newSvgH = getSize(newSvg, 'height'); + var newX = +_context.attr('x') - newSvgW * + {start: 0, middle: 0.5, end: 1}[_context.attr('text-anchor') || 'start']; + // font baseline is about 1/4 fontSize below centerline + var textHeight = fontSize || getSize(_context, 'height'); + var dy = -textHeight / 4; if(svgClass[0] === 'y') { mathjaxGroup.attr({ @@ -38896,7 +39495,7 @@ exports.convertToTspans = function(_context, gd, _callback) { else if(svgClass[0] === 'l') { newSvg.attr({x: _context.attr('x'), y: dy - (newSvgH / 2)}); } - else if(svgClass[0] === 'a') { + else if(svgClass[0] === 'a' && svgClass.indexOf('atitle') !== 0) { newSvg.attr({x: 0, y: dy}); } else { @@ -38925,14 +39524,48 @@ function cleanEscapesForTex(s) { } function texToSVG(_texString, _config, _callback) { - var randomID = 'math-output-' + Lib.randstr({}, 64); - var tmpDiv = d3.select('body').append('div') - .attr({id: randomID}) - .style({visibility: 'hidden', position: 'absolute'}) - .style({'font-size': _config.fontSize + 'px'}) - .text(cleanEscapesForTex(_texString)); - MathJax.Hub.Queue(['Typeset', MathJax.Hub, tmpDiv.node()], function() { + var originalRenderer, + originalConfig, + originalProcessSectionDelay, + tmpDiv; + + MathJax.Hub.Queue( + function() { + originalConfig = Lib.extendDeepAll({}, MathJax.Hub.config); + + originalProcessSectionDelay = MathJax.Hub.processSectionDelay; + if(MathJax.Hub.processSectionDelay !== undefined) { + // MathJax 2.5+ + MathJax.Hub.processSectionDelay = 0; + } + + return MathJax.Hub.Config({ + messageStyle: 'none', + tex2jax: { + inlineMath: [['$', '$'], ['\\(', '\\)']] + }, + displayAlign: 'left', + }); + }, + function() { + // Get original renderer + originalRenderer = MathJax.Hub.config.menuSettings.renderer; + if(originalRenderer !== 'SVG') { + return MathJax.Hub.setRenderer('SVG'); + } + }, + function() { + var randomID = 'math-output-' + Lib.randstr({}, 64); + tmpDiv = d3.select('body').append('div') + .attr({id: randomID}) + .style({visibility: 'hidden', position: 'absolute'}) + .style({'font-size': _config.fontSize + 'px'}) + .text(cleanEscapesForTex(_texString)); + + return MathJax.Hub.Typeset(tmpDiv.node()); + }, + function() { var glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs'); if(tmpDiv.select('.MathJax_SVG').empty() || !tmpDiv.select('svg').node()) { @@ -38945,6 +39578,16 @@ function texToSVG(_texString, _config, _callback) { } tmpDiv.remove(); + + if(originalRenderer !== 'SVG') { + return MathJax.Hub.setRenderer(originalRenderer); + } + }, + function() { + if(originalProcessSectionDelay !== undefined) { + MathJax.Hub.processSectionDelay = originalProcessSectionDelay; + } + return MathJax.Hub.Config(originalConfig); }); } @@ -38982,8 +39625,6 @@ var ZERO_WIDTH_SPACE = '\u200b'; */ var PROTOCOLS = ['http:', 'https:', 'mailto:', '', undefined, ':']; -var STRIP_TAGS = new RegExp(']*)?/?>', 'g'); - var NEWLINES = /(\r\n?|\n)/g; var SPLIT_TAGS = /(<[^<>]*>)/; @@ -39033,10 +39674,66 @@ function getQuotedMatch(_str, re) { var COLORMATCH = /(^|;)\s*color:/; -exports.plainText = function(_str) { - // strip out our pseudo-html so we have a readable - // version to put into text fields - return (_str || '').replace(STRIP_TAGS, ' '); +/** + * Strip string of tags + * + * @param {string} _str : input string + * @param {object} opts : + * - maxLen {number} max length of output string + * - allowedTags {array} list of pseudo-html tags to NOT strip + * @return {string} + */ +exports.plainText = function(_str, opts) { + opts = opts || {}; + + var len = (opts.len !== undefined && opts.len !== -1) ? opts.len : Infinity; + var allowedTags = opts.allowedTags !== undefined ? opts.allowedTags : ['br']; + + var ellipsis = '...'; + var eLen = ellipsis.length; + + var oldParts = _str.split(SPLIT_TAGS); + var newParts = []; + var prevTag = ''; + var l = 0; + + for(var i = 0; i < oldParts.length; i++) { + var p = oldParts[i]; + var match = p.match(ONE_TAG); + var tagType = match && match[2].toLowerCase(); + + if(tagType) { + // N.B. tags do not count towards string length + if(allowedTags.indexOf(tagType) !== -1) { + newParts.push(p); + prevTag = tagType; + } + } else { + var pLen = p.length; + + if((l + pLen) < len) { + newParts.push(p); + l += pLen; + } else if(l < len) { + var pLen2 = len - l; + + if(prevTag && (prevTag !== 'br' || pLen2 <= eLen || pLen <= eLen)) { + newParts.pop(); + } + + if(len > eLen) { + newParts.push(p.substr(0, pLen2 - eLen) + ellipsis); + } else { + newParts.push(p.substr(0, pLen2)); + } + break; + } + + prevTag = ''; + } + } + + return newParts.join(''); }; /* @@ -39330,13 +40027,13 @@ exports.positionText = function positionText(s, x, y) { }; function alignHTMLWith(_base, container, options) { - var alignH = options.horizontalAlign, - alignV = options.verticalAlign || 'top', - bRect = _base.node().getBoundingClientRect(), - cRect = container.node().getBoundingClientRect(), - thisRect, - getTop, - getLeft; + var alignH = options.horizontalAlign; + var alignV = options.verticalAlign || 'top'; + var bRect = _base.node().getBoundingClientRect(); + var cRect = container.node().getBoundingClientRect(); + var thisRect; + var getTop; + var getLeft; if(alignV === 'bottom') { getTop = function() { return bRect.bottom - thisRect.height; }; @@ -39394,8 +40091,8 @@ exports.makeEditable = function(context, options) { appendEditable(); context.style({opacity: 0}); // also hide any mathjax svg - var svgClass = handlerElement.attr('class'), - mathjaxClass; + var svgClass = handlerElement.attr('class'); + var mathjaxClass; if(svgClass) mathjaxClass = '.' + svgClass.split(' ')[0] + '-math-group'; else mathjaxClass = '[class*=-math-group]'; if(mathjaxClass) { @@ -39443,8 +40140,8 @@ exports.makeEditable = function(context, options) { gd._editing = false; context.text(this.textContent) .style({opacity: 1}); - var svgClass = d3.select(this).attr('class'), - mathjaxClass; + var svgClass = d3.select(this).attr('class'); + var mathjaxClass; if(svgClass) mathjaxClass = '.' + svgClass.split(' ')[0] + '-math-group'; else mathjaxClass = '[class*=-math-group]'; if(mathjaxClass) { @@ -39490,9 +40187,9 @@ exports.makeEditable = function(context, options) { return d3.rebind(context, dispatch, 'on'); }; -},{"../constants/alignment":148,"../constants/xmlns_namespaces":152,"../lib":169,"d3":16}],192:[function(_dereq_,module,exports){ +},{"../constants/alignment":146,"../constants/xmlns_namespaces":150,"../lib":168,"d3":16}],190:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39594,9 +40291,9 @@ function _clearTimeout(cache) { } } -},{}],193:[function(_dereq_,module,exports){ +},{}],191:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39622,9 +40319,9 @@ module.exports = function toLogRange(val, range) { return newVal; }; -},{"fast-isnumeric":18}],194:[function(_dereq_,module,exports){ +},{"fast-isnumeric":18}],192:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39644,9 +40341,9 @@ module.exports = { } }; -},{}],195:[function(_dereq_,module,exports){ +},{}],193:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39687,9 +40384,9 @@ module.exports = { } }; -},{}],196:[function(_dereq_,module,exports){ +},{}],194:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39715,11 +40412,11 @@ var Registry = _dereq_('../registry'); * or the whole object) */ module.exports = function containerArrayMatch(astr) { - var rootContainers = Registry.layoutArrayContainers, - regexpContainers = Registry.layoutArrayRegexes, - rootPart = astr.split('[')[0], - arrayStr, - match; + var rootContainers = Registry.layoutArrayContainers; + var regexpContainers = Registry.layoutArrayRegexes; + var rootPart = astr.split('[')[0]; + var arrayStr; + var match; // look for regexp matches first, because they may be nested inside root matches // eg updatemenus[i].buttons is nested inside updatemenus @@ -39745,9 +40442,9 @@ module.exports = function containerArrayMatch(astr) { return {array: arrayStr, index: Number(match[1]), property: match[3] || ''}; }; -},{"../registry":259}],197:[function(_dereq_,module,exports){ +},{"../registry":257}],195:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39763,7 +40460,7 @@ var isPlainObject = Lib.isPlainObject; var traceOpts = { valType: 'flaglist', extras: ['none'], - flags: ['calc', 'clearAxisTypes', 'plot', 'style', 'colorbars'], + flags: ['calc', 'clearAxisTypes', 'plot', 'style', 'markerSize', 'colorbars'], }; @@ -39871,9 +40568,9 @@ function overrideOne(attr, editTypeOverride, overrideContainers, key) { } } -},{"../lib":169}],198:[function(_dereq_,module,exports){ +},{"../lib":168}],196:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39927,6 +40624,8 @@ exports.cleanLayout = function(layout) { } var axisAttrRegex = (Plots.subplotsRegistry.cartesian || {}).attrRegex; + var polarAttrRegex = (Plots.subplotsRegistry.polar || {}).attrRegex; + var ternaryAttrRegex = (Plots.subplotsRegistry.ternary || {}).attrRegex; var sceneAttrRegex = (Plots.subplotsRegistry.gl3d || {}).attrRegex; var keys = Object.keys(layout); @@ -39965,6 +40664,24 @@ exports.cleanLayout = function(layout) { } delete ax.autotick; } + + cleanTitle(ax); + } + + // modifications for polar + else if(polarAttrRegex && polarAttrRegex.test(key)) { + var polar = layout[key]; + + cleanTitle(polar.radialaxis); + } + + // modifications for ternary + else if(ternaryAttrRegex && ternaryAttrRegex.test(key)) { + var ternary = layout[key]; + + cleanTitle(ternary.aaxis); + cleanTitle(ternary.baxis); + cleanTitle(ternary.caxis); } // modifications for 3D scenes @@ -39975,11 +40692,11 @@ exports.cleanLayout = function(layout) { var cameraposition = scene.cameraposition; if(Array.isArray(cameraposition) && cameraposition[0].length === 4) { - var rotation = cameraposition[0], - center = cameraposition[1], - radius = cameraposition[2], - mat = m4FromQuat([], rotation), - eye = []; + var rotation = cameraposition[0]; + var center = cameraposition[1]; + var radius = cameraposition[2]; + var mat = m4FromQuat([], rotation); + var eye = []; for(j = 0; j < 3; ++j) { eye[j] = center[j] + radius * mat[2 + 4 * j]; @@ -39988,11 +40705,16 @@ exports.cleanLayout = function(layout) { scene.camera = { eye: {x: eye[0], y: eye[1], z: eye[2]}, center: {x: center[0], y: center[1], z: center[2]}, - up: {x: mat[1], y: mat[5], z: mat[9]} + up: {x: 0, y: 0, z: 1} // we just ignore calculating camera z up in this case }; delete scene.cameraposition; } + + // clean axis titles + cleanTitle(scene.xaxis); + cleanTitle(scene.yaxis); + cleanTitle(scene.zaxis); } } @@ -40050,6 +40772,9 @@ exports.cleanLayout = function(layout) { } } + // clean plot title + cleanTitle(layout); + /* * Moved from rotate -> orbit for dragmode */ @@ -40059,17 +40784,62 @@ exports.cleanLayout = function(layout) { // supported, but new tinycolor does not because they're not valid css Color.clean(layout); + // clean the layout container in layout.template + if(layout.template && layout.template.layout) { + exports.cleanLayout(layout.template.layout); + } + return layout; }; function cleanAxRef(container, attr) { - var valIn = container[attr], - axLetter = attr.charAt(0); + var valIn = container[attr]; + var axLetter = attr.charAt(0); if(valIn && valIn !== 'paper') { container[attr] = cleanId(valIn, axLetter); } } +/** + * Cleans up old title attribute structure (flat) in favor of the new one (nested). + * + * @param {Object} titleContainer - an object potentially including deprecated title attributes + */ +function cleanTitle(titleContainer) { + if(titleContainer) { + + // title -> title.text + // (although title used to be a string attribute, + // numbers are accepted as well) + if(typeof titleContainer.title === 'string' || typeof titleContainer.title === 'number') { + titleContainer.title = { + text: titleContainer.title + }; + } + + rewireAttr('titlefont', 'font'); + rewireAttr('titleposition', 'position'); + rewireAttr('titleside', 'side'); + rewireAttr('titleoffset', 'offset'); + } + + function rewireAttr(oldAttrName, newAttrName) { + var oldAttrSet = titleContainer[oldAttrName]; + var newAttrSet = titleContainer.title && titleContainer.title[newAttrName]; + + if(oldAttrSet && !newAttrSet) { + + // Ensure title object exists + if(!titleContainer.title) { + titleContainer.title = {}; + } + + titleContainer.title[newAttrName] = titleContainer[oldAttrName]; + delete titleContainer[oldAttrName]; + } + } +} + /* * cleanData: Make a few changes to the data for backward compatibility * before it gets used for anything. Modifies the data traces users provide. @@ -40090,9 +40860,10 @@ exports.cleanData = function(data) { // error_y.opacity is obsolete - merge into color if(trace.error_y && 'opacity' in trace.error_y) { - var dc = Color.defaults, - yeColor = trace.error_y.color || - (Registry.traceIs(trace, 'bar') ? Color.defaultLine : dc[tracei % dc.length]); + var dc = Color.defaults; + var yeColor = trace.error_y.color || (Registry.traceIs(trace, 'bar') ? + Color.defaultLine : + dc[tracei % dc.length]); trace.error_y.color = Color.addOpacity( Color.rgb(yeColor), Color.opacity(yeColor) * trace.error_y.opacity); @@ -40118,11 +40889,11 @@ exports.cleanData = function(data) { } // scl->scale, reversescl->reversescale - if('scl' in trace) { + if('scl' in trace && !('colorscale' in trace)) { trace.colorscale = trace.scl; delete trace.scl; } - if('reversescl' in trace) { + if('reversescl' in trace && !('reversescale' in trace)) { trace.reversescale = trace.reversescl; delete trace.reversescl; } @@ -40260,6 +41031,26 @@ exports.cleanData = function(data) { // sanitize rgb(fractions) and rgba(fractions) that old tinycolor // supported, but new tinycolor does not because they're not valid css Color.clean(trace); + + // remove obsolete autobin(x|y) attributes, but only if true + // if false, this needs to happen in Histogram.calc because it + // can be a one-time autobin so we need to know the results before + // we can push them back into the trace. + if(trace.autobinx) { + delete trace.autobinx; + delete trace.xbins; + } + if(trace.autobiny) { + delete trace.autobiny; + delete trace.ybins; + } + + cleanTitle(trace); + if(trace.colorbar) cleanTitle(trace.colorbar); + if(trace.marker && trace.marker.colorbar) cleanTitle(trace.marker.colorbar); + if(trace.line && trace.line.colorbar) cleanTitle(trace.line.colorbar); + if(trace.aaxis) cleanTitle(trace.aaxis); + if(trace.baxis) cleanTitle(trace.baxis); } }; @@ -40298,13 +41089,16 @@ function commonPrefix(name1, name2, show1, show2) { // textposition - support partial attributes (ie just 'top') // and incorrect use of middle / center etc. function cleanTextPosition(textposition) { - var posY = 'middle', - posX = 'center'; - if(textposition.indexOf('top') !== -1) posY = 'top'; - else if(textposition.indexOf('bottom') !== -1) posY = 'bottom'; + var posY = 'middle'; + var posX = 'center'; - if(textposition.indexOf('left') !== -1) posX = 'left'; - else if(textposition.indexOf('right') !== -1) posX = 'right'; + if(typeof textposition === 'string') { + if(textposition.indexOf('top') !== -1) posY = 'top'; + else if(textposition.indexOf('bottom') !== -1) posY = 'bottom'; + + if(textposition.indexOf('left') !== -1) posX = 'left'; + else if(textposition.indexOf('right') !== -1) posX = 'right'; + } return posY + ' ' + posX; } @@ -40325,9 +41119,10 @@ exports.swapXYData = function(trace) { else trace.transpose = true; } if(trace.error_x && trace.error_y) { - var errorY = trace.error_y, - copyYstyle = ('copy_ystyle' in errorY) ? errorY.copy_ystyle : - !(errorY.color || errorY.thickness || errorY.width); + var errorY = trace.error_y; + var copyYstyle = ('copy_ystyle' in errorY) ? + errorY.copy_ystyle : + !(errorY.color || errorY.thickness || errorY.width); Lib.swapAttrs(trace, ['error_?.copy_ystyle']); if(copyYstyle) { Lib.swapAttrs(trace, ['error_?.color', 'error_?.thickness', 'error_?.width']); @@ -40351,6 +41146,17 @@ exports.coerceTraceIndices = function(gd, traceIndices) { else if(!Array.isArray(traceIndices) || !traceIndices.length) { return gd.data.map(function(_, i) { return i; }); } + else if(Array.isArray(traceIndices)) { + var traceIndicesOut = []; + for(var i = 0; i < traceIndices.length; i++) { + if(Lib.isIndex(traceIndices[i], gd.data.length)) { + traceIndicesOut.push(traceIndices[i]); + } else { + Lib.warn('trace index (', traceIndices[i], ') is not a number or is out of bounds'); + } + } + return traceIndicesOut; + } return traceIndices; }; @@ -40368,10 +41174,10 @@ exports.coerceTraceIndices = function(gd, traceIndices) { * */ exports.manageArrayContainers = function(np, newVal, undoit) { - var obj = np.obj, - parts = np.parts, - pLength = parts.length, - pLast = parts[pLength - 1]; + var obj = np.obj; + var parts = np.parts; + var pLength = parts.length; + var pLast = parts[pLength - 1]; var pLastIsNumber = isNumeric(pLast); @@ -40379,8 +41185,8 @@ exports.manageArrayContainers = function(np, newVal, undoit) { if(pLastIsNumber && newVal === null) { // Clear item in array container when new value is null - var contPath = parts.slice(0, pLength - 1).join('.'), - cont = Lib.nestedProperty(obj, contPath).get(); + var contPath = parts.slice(0, pLength - 1).join('.'); + var cont = Lib.nestedProperty(obj, contPath).get(); cont.splice(pLast, 1); // Note that nested property clears null / undefined at end of @@ -40469,9 +41275,9 @@ exports.clearAxisTypes = function(gd, traces, layoutUpdate) { } }; -},{"../components/color":50,"../lib":169,"../plots/cartesian/axis_ids":217,"../plots/plots":246,"../registry":259,"fast-isnumeric":18,"gl-mat4/fromQuat":19}],199:[function(_dereq_,module,exports){ +},{"../components/color":51,"../lib":168,"../plots/cartesian/axis_ids":215,"../plots/plots":245,"../registry":257,"fast-isnumeric":18,"gl-mat4/fromQuat":19}],197:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40488,6 +41294,10 @@ exports.restyle = main.restyle; exports.relayout = main.relayout; exports.redraw = main.redraw; exports.update = main.update; +exports._guiRestyle = main._guiRestyle; +exports._guiRelayout = main._guiRelayout; +exports._guiUpdate = main._guiUpdate; +exports._storeDirectGUIEdit = main._storeDirectGUIEdit; exports.react = main.react; exports.extendTraces = main.extendTraces; exports.prependTraces = main.prependTraces; @@ -40508,9 +41318,9 @@ var templateApi = _dereq_('./template_api'); exports.makeTemplate = templateApi.makeTemplate; exports.validateTemplate = templateApi.validateTemplate; -},{"../snapshot/download":261,"./plot_api":201,"./template_api":206,"./to_image":207,"./validate":208}],200:[function(_dereq_,module,exports){ +},{"../snapshot/download":259,"./plot_api":199,"./template_api":204,"./to_image":205,"./validate":206}],198:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40520,7 +41330,6 @@ exports.validateTemplate = templateApi.validateTemplate; 'use strict'; -var nestedProperty = _dereq_('../lib/nested_property'); var isPlainObject = _dereq_('../lib/is_plain_object'); var noop = _dereq_('../lib/noop'); var Loggers = _dereq_('../lib/loggers'); @@ -40577,19 +41386,22 @@ var isRemoveVal = exports.isRemoveVal = function isRemoveVal(val) { * the flags for which actions we're going to perform to display these (and * any other) changes. If we're already `recalc`ing, we don't need to redraw * individual items + * @param {function} _nestedProperty + * a (possibly modified for gui edits) nestedProperty constructor + * The modified version takes a 3rd argument, for a prefix to the attribute + * string necessary for storing GUI edits * * @returns {bool} `true` if it managed to complete drawing of the changes * `false` would mean the parent should replot. */ -exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, edits, flags) { - var componentType = np.astr, - supplyComponentDefaults = Registry.getComponentMethod(componentType, 'supplyLayoutDefaults'), - draw = Registry.getComponentMethod(componentType, 'draw'), - drawOne = Registry.getComponentMethod(componentType, 'drawOne'), - replotLater = flags.replot || flags.recalc || (supplyComponentDefaults === noop) || - (draw === noop), - layout = gd.layout, - fullLayout = gd._fullLayout; +exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, edits, flags, _nestedProperty) { + var componentType = np.astr; + var supplyComponentDefaults = Registry.getComponentMethod(componentType, 'supplyLayoutDefaults'); + var draw = Registry.getComponentMethod(componentType, 'draw'); + var drawOne = Registry.getComponentMethod(componentType, 'drawOne'); + var replotLater = flags.replot || flags.recalc || (supplyComponentDefaults === noop) || (draw === noop); + var layout = gd.layout; + var fullLayout = gd._fullLayout; if(edits['']) { if(Object.keys(edits).length > 1) { @@ -40613,26 +41425,26 @@ exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, return true; } - var componentNums = Object.keys(edits).map(Number).sort(sorterAsc), - componentArrayIn = np.get(), - componentArray = componentArrayIn || [], - // componentArrayFull is used just to keep splices in line between - // full and input arrays, so private keys can be copied over after - // redoing supplyDefaults - // TODO: this assumes componentArray is in gd.layout - which will not be - // true after we extend this to restyle - componentArrayFull = nestedProperty(fullLayout, componentType).get(); + var componentNums = Object.keys(edits).map(Number).sort(sorterAsc); + var componentArrayIn = np.get(); + var componentArray = componentArrayIn || []; + // componentArrayFull is used just to keep splices in line between + // full and input arrays, so private keys can be copied over after + // redoing supplyDefaults + // TODO: this assumes componentArray is in gd.layout - which will not be + // true after we extend this to restyle + var componentArrayFull = _nestedProperty(fullLayout, componentType).get(); - var deletes = [], - firstIndexChange = -1, - maxIndex = componentArray.length, - i, - j, - componentNum, - objEdits, - objKeys, - objVal, - adding; + var deletes = []; + var firstIndexChange = -1; + var maxIndex = componentArray.length; + var i; + var j; + var componentNum; + var objEdits; + var objKeys; + var objVal; + var adding, prefix; // first make the add and edit changes for(i = 0; i < componentNums.length; i++) { @@ -40671,7 +41483,9 @@ exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, } else { for(j = 0; j < objKeys.length; j++) { - nestedProperty(componentArray[componentNum], objKeys[j]).set(objEdits[objKeys[j]]); + prefix = componentType + '[' + componentNum + '].'; + _nestedProperty(componentArray[componentNum], objKeys[j], prefix) + .set(objEdits[objKeys[j]]); } } } @@ -40722,9 +41536,9 @@ exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, return true; }; -},{"../lib/is_plain_object":171,"../lib/loggers":174,"../lib/nested_property":178,"../lib/noop":179,"../lib/search":188,"../registry":259,"./container_array_match":196}],201:[function(_dereq_,module,exports){ +},{"../lib/is_plain_object":169,"../lib/loggers":172,"../lib/noop":177,"../lib/search":186,"../registry":257,"./container_array_match":194}],199:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40740,6 +41554,8 @@ var isNumeric = _dereq_('fast-isnumeric'); var hasHover = _dereq_('has-hover'); var Lib = _dereq_('../lib'); +var nestedProperty = Lib.nestedProperty; + var Events = _dereq_('../lib/events'); var Queue = _dereq_('../lib/queue'); @@ -40756,7 +41572,7 @@ var initInteractions = _dereq_('../plots/cartesian/graph_interact').initInteract var xmlnsNamespaces = _dereq_('../constants/xmlns_namespaces'); var svgTextUtils = _dereq_('../lib/svg_text_utils'); -var defaultConfig = _dereq_('./plot_config'); +var dfltConfig = _dereq_('./plot_config').dfltConfig; var manageArrays = _dereq_('./manage_arrays'); var helpers = _dereq_('./helpers'); var subroutines = _dereq_('./subroutines'); @@ -40835,9 +41651,6 @@ exports.plot = function(gd, data, layout, config) { // so we can share cached text across tabs Drawing.makeTester(); - // clear stashed base url - delete Drawing.baseUrl; - // collect promises for any async actions during plotting // any part of the plotting code can push to gd._promises, then // before we move to the next step, we check that they're all @@ -40882,7 +41695,7 @@ exports.plot = function(gd, data, layout, config) { // Legacy polar plots if(!fullLayout._has('polar') && data && data[0] && data[0].r) { Lib.log('Legacy polar charts are deprecated!'); - return plotPolar(gd, data, layout); + return plotLegacyPolar(gd, data, layout); } // so we don't try to re-call Plotly.plot from inside @@ -40986,15 +41799,15 @@ exports.plot = function(gd, data, layout, config) { if(regl) { // Unfortunately, this can happen when relayouting to large // width/height on some browsers. - if(fullLayout.width !== regl._gl.drawingBufferWidth || - fullLayout.height !== regl._gl.drawingBufferHeight + if(Math.floor(fullLayout.width) !== regl._gl.drawingBufferWidth || + Math.floor(fullLayout.height) !== regl._gl.drawingBufferHeight ) { var msg = 'WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.'; if(drawFrameworkCalls) { Lib.error(msg); } else { Lib.log(msg + ' Clearing graph and plotting again.'); - Plots.cleanPlot([], {}, gd._fullData, fullLayout, gd.calcdata); + Plots.cleanPlot([], {}, gd._fullData, fullLayout); Plots.supplyDefaults(gd); fullLayout = gd._fullLayout; Plots.doCalcdata(gd); @@ -41058,8 +41871,7 @@ exports.plot = function(gd, data, layout, config) { return Lib.syncOrAsync([ Registry.getComponentMethod('shapes', 'calcAutorange'), Registry.getComponentMethod('annotations', 'calcAutorange'), - doAutoRangeAndConstraints, - Registry.getComponentMethod('rangeslider', 'calcAutorange') + doAutoRangeAndConstraints ], gd); } @@ -41071,11 +41883,16 @@ exports.plot = function(gd, data, layout, config) { // store initial ranges *after* enforcing constraints, otherwise // we will never look like we're at the initial ranges if(graphWasEmpty) Axes.saveRangeInitial(gd); + + // this one is different from shapes/annotations calcAutorange + // the others incorporate those components into ax._extremes, + // this one actually sets the ranges in rangesliders. + Registry.getComponentMethod('rangeslider', 'calcAutorange')(gd); } // draw ticks, titles, and calculate axis scaling (._b, ._m) function drawAxes() { - return Axes.doTicks(gd, graphWasEmpty ? '' : 'redraw'); + return Axes.draw(gd, graphWasEmpty ? '' : 'redraw'); } var seq = [ @@ -41127,7 +41944,7 @@ function emitAfterPlot(gd) { } exports.setPlotConfig = function setPlotConfig(obj) { - return Lib.extendFlat(defaultConfig, obj); + return Lib.extendFlat(dfltConfig, obj); }; function setBackground(gd, bgColor) { @@ -41144,7 +41961,16 @@ function opaqueSetBackground(gd, bgColor) { } function setPlotContext(gd, config) { - if(!gd._context) gd._context = Lib.extendDeep({}, defaultConfig); + if(!gd._context) { + gd._context = Lib.extendDeep({}, dfltConfig); + + // stash href, used to make robust clipPath URLs + var base = d3.select('base'); + gd._context._baseUrl = base.size() && base.attr('href') ? + window.location.href.split('#')[0] : + ''; + } + var context = gd._context; var i, keys, key; @@ -41190,6 +42016,9 @@ function setPlotContext(gd, config) { } } } + + // not part of the user-facing config options + context._exportedPlot = config._exportedPlot; } // staticPlot forces a bunch of others: @@ -41213,9 +42042,32 @@ function setPlotContext(gd, config) { if(context.setBackground === 'transparent' || typeof context.setBackground !== 'function') { context.setBackground = setBackground; } + + // Check if gd has a specified widht/height to begin with + context._hasZeroHeight = context._hasZeroHeight || gd.clientHeight === 0; + context._hasZeroWidth = context._hasZeroWidth || gd.clientWidth === 0; + + // fill context._scrollZoom helper to help manage scrollZoom flaglist + var szIn = context.scrollZoom; + var szOut = context._scrollZoom = {}; + if(szIn === true) { + szOut.cartesian = 1; + szOut.gl3d = 1; + szOut.geo = 1; + szOut.mapbox = 1; + } else if(typeof szIn === 'string') { + var parts = szIn.split('+'); + for(i = 0; i < parts.length; i++) { + szOut[parts[i]] = 1; + } + } else if(szIn !== false) { + szOut.gl3d = 1; + szOut.geo = 1; + szOut.mapbox = 1; + } } -function plotPolar(gd, data, layout) { +function plotLegacyPolar(gd, data, layout) { // build or reuse the container skeleton var plotContainer = d3.select(gd).selectAll('.plot-container') .data([0]); @@ -41256,7 +42108,7 @@ function plotPolar(gd, data, layout) { // editable title var opacity = 1; - var txt = gd._fullLayout.title; + var txt = gd._fullLayout.title ? gd._fullLayout.title.text : ''; if(txt === '' || !txt) opacity = 0; var titleLayout = function() { @@ -41290,7 +42142,7 @@ function plotPolar(gd, data, layout) { var setContenteditable = function() { this.call(svgTextUtils.makeEditable, {gd: gd}) .on('edit', function(text) { - gd.framework({layout: {title: text}}); + gd.framework({layout: {title: {text: text}}}); this.text(text) .call(titleLayout); this.call(setContenteditable); @@ -41339,7 +42191,7 @@ exports.newPlot = function(gd, data, layout, config) { gd = Lib.getGraphDiv(gd); // remove gl contexts - Plots.cleanPlot([], {}, gd._fullData || [], gd._fullLayout || {}, gd.calcdata || []); + Plots.cleanPlot([], {}, gd._fullData || [], gd._fullLayout || {}); Plots.purge(gd); return exports.plot(gd, data, layout, config); @@ -41352,10 +42204,10 @@ exports.newPlot = function(gd, data, layout, config) { * @param {Number} maxIndex The maximum index allowable (arr.length - 1) */ function positivifyIndices(indices, maxIndex) { - var parentLength = maxIndex + 1, - positiveIndices = [], - i, - index; + var parentLength = maxIndex + 1; + var positiveIndices = []; + var i; + var index; for(i = 0; i < indices.length; i++) { index = indices[i]; @@ -41543,8 +42395,8 @@ function assertExtendTracesArgs(gd, update, indices, maxPoints) { */ function getExtendProperties(gd, update, indices, maxPoints) { - var maxPointsIsObject = Lib.isPlainObject(maxPoints), - updateProps = []; + var maxPointsIsObject = Lib.isPlainObject(maxPoints); + var updateProps = []; var trace, target, prop, insert, maxp; // allow scalar index to represent a single trace position @@ -41563,7 +42415,7 @@ function getExtendProperties(gd, update, indices, maxPoints) { * instance that references the key and value for this particular trace. */ trace = gd.data[indices[j]]; - prop = Lib.nestedProperty(trace, key); + prop = nestedProperty(trace, key); /* * Target is the existing gd.data.trace.dataArray value like "x" or "marker.size" @@ -41797,13 +42649,13 @@ exports.prependTraces = function prependTraces(gd, update, indices, maxPoints) { exports.addTraces = function addTraces(gd, traces, newIndices) { gd = Lib.getGraphDiv(gd); - var currentIndices = [], - undoFunc = exports.deleteTraces, - redoFunc = addTraces, - undoArgs = [gd, currentIndices], - redoArgs = [gd, traces], // no newIndices here - i, - promise; + var currentIndices = []; + var undoFunc = exports.deleteTraces; + var redoFunc = addTraces; + var undoArgs = [gd, currentIndices]; + var redoArgs = [gd, traces]; // no newIndices here + var i; + var promise; // all validation is done elsewhere to remove clutter here checkAddTracesArgs(gd, traces, newIndices); @@ -41874,13 +42726,13 @@ exports.addTraces = function addTraces(gd, traces, newIndices) { exports.deleteTraces = function deleteTraces(gd, indices) { gd = Lib.getGraphDiv(gd); - var traces = [], - undoFunc = exports.addTraces, - redoFunc = deleteTraces, - undoArgs = [gd, traces, indices], - redoArgs = [gd, indices], - i, - deletedTrace; + var traces = []; + var undoFunc = exports.addTraces; + var redoFunc = deleteTraces; + var undoArgs = [gd, traces, indices]; + var redoArgs = [gd, indices]; + var i; + var deletedTrace; // make sure indices are defined if(typeof indices === 'undefined') { @@ -41940,13 +42792,13 @@ exports.deleteTraces = function deleteTraces(gd, indices) { exports.moveTraces = function moveTraces(gd, currentIndices, newIndices) { gd = Lib.getGraphDiv(gd); - var newData = [], - movingTraceMap = [], - undoFunc = moveTraces, - redoFunc = moveTraces, - undoArgs = [gd, newIndices, currentIndices], - redoArgs = [gd, currentIndices, newIndices], - i; + var newData = []; + var movingTraceMap = []; + var undoFunc = moveTraces; + var redoFunc = moveTraces; + var undoArgs = [gd, newIndices, currentIndices]; + var redoArgs = [gd, currentIndices, newIndices]; + var i; // to reduce complexity here, check args elsewhere // this throws errors where appropriate @@ -42034,7 +42886,7 @@ exports.moveTraces = function moveTraces(gd, currentIndices, newIndices) { * If the array is too short, it will wrap around (useful for * style files that want to specify cyclical default values). */ -exports.restyle = function restyle(gd, astr, val, _traces) { +function restyle(gd, astr, val, _traces) { gd = Lib.getGraphDiv(gd); helpers.clearPromiseQueue(gd); @@ -42069,8 +42921,21 @@ exports.restyle = function restyle(gd, astr, val, _traces) { } else { seq.push(Plots.previousPromises); + // maybe only call Plots.supplyDataDefaults in the splom case, + // to skip over long and slow axes defaults Plots.supplyDefaults(gd); + if(flags.markerSize) { + Plots.doCalcdata(gd); + addAxRangeSequence(seq); + + // TODO + // if all axes have autorange:false, then + // proceed to subroutines.doTraceStyle(), + // otherwise we must go through addAxRangeSequence, + // which in general must redraws 'all' axes + } + if(flags.style) seq.push(subroutines.doTraceStyle); if(flags.colorbars) seq.push(subroutines.doColorBars); @@ -42091,7 +42956,8 @@ exports.restyle = function restyle(gd, astr, val, _traces) { gd.emit('plotly_restyle', specs.eventData); return gd; }); -}; +} +exports.restyle = restyle; // for undo: undefined initial vals must be turned into nulls // so that we unset rather than ignore them @@ -42100,20 +42966,86 @@ function undefinedToNull(val) { return val; } +/** + * Factory function to wrap nestedProperty with GUI edits if necessary + * with GUI edits we add an optional prefix to the nestedProperty constructor + * to prepend to the attribute string in the preGUI store. + */ +function makeNP(preGUI, guiEditFlag) { + if(!guiEditFlag) return nestedProperty; + + return function(container, attr, prefix) { + var np = nestedProperty(container, attr); + var npSet = np.set; + np.set = function(val) { + var fullAttr = (prefix || '') + attr; + storeCurrent(fullAttr, np.get(), val, preGUI); + npSet(val); + }; + return np; + }; +} + +function storeCurrent(attr, val, newVal, preGUI) { + if(Array.isArray(val) || Array.isArray(newVal)) { + var arrayVal = Array.isArray(val) ? val : []; + var arrayNew = Array.isArray(newVal) ? newVal : []; + var maxLen = Math.max(arrayVal.length, arrayNew.length); + for(var i = 0; i < maxLen; i++) { + storeCurrent(attr + '[' + i + ']', arrayVal[i], arrayNew[i], preGUI); + } + } + else if(Lib.isPlainObject(val) || Lib.isPlainObject(newVal)) { + var objVal = Lib.isPlainObject(val) ? val : {}; + var objNew = Lib.isPlainObject(newVal) ? newVal : {}; + var objBoth = Lib.extendFlat({}, objVal, objNew); + for(var key in objBoth) { + storeCurrent(attr + '.' + key, objVal[key], objNew[key], preGUI); + } + } + else if(preGUI[attr] === undefined) { + preGUI[attr] = undefinedToNull(val); + } +} + +/** + * storeDirectGUIEdit: for routines that skip restyle/relayout and mock it + * by emitting a plotly_restyle or plotly_relayout event, this routine + * keeps track of the initial state in _preGUI for use by uirevision + * Does *not* apply these changes to data/layout - that's the responsibility + * of the calling routine. + * + * @param {object} container: the input attributes container (eg `layout` or a `trace`) + * @param {object} preGUI: where original values should be stored, either + * `layout._preGUI` or `layout._tracePreGUI[uid]` + * @param {object} edits: the {attr: val} object as normally passed to `relayout` etc + */ +exports._storeDirectGUIEdit = function(container, preGUI, edits) { + for(var attr in edits) { + var np = nestedProperty(container, attr); + storeCurrent(attr, np.get(), edits[attr], preGUI); + } +}; + function _restyle(gd, aobj, traces) { - var fullLayout = gd._fullLayout, - fullData = gd._fullData, - data = gd.data, - i; + var fullLayout = gd._fullLayout; + var fullData = gd._fullData; + var data = gd.data; + var guiEditFlag = fullLayout._guiEditing; + var layoutNP = makeNP(fullLayout._preGUI, guiEditFlag); + var eventData = Lib.extendDeepAll({}, aobj); + var i; + + cleanDeprecatedAttributeKeys(aobj); // initialize flags var flags = editTypes.traceFlags(); // copies of the change (and previous values of anything affected) // for the undo / redo queue - var redoit = {}, - undoit = {}, - axlist; + var redoit = {}; + var undoit = {}; + var axlist; // make a new empty vals array for undoit function a0() { return traces.map(function() { return undefined; }); } @@ -42128,6 +43060,16 @@ function _restyle(gd, aobj, traces) { function rangeAttr(axName) { return 'LAYOUT' + axName + '.range'; } + function getFullTrace(traceIndex) { + // usually fullData maps 1:1 onto data, but with groupby transforms + // the fullData index can be greater. Take the *first* matching trace. + for(var j = traceIndex; j < fullData.length; j++) { + if(fullData[j]._input === data[traceIndex]) return fullData[j]; + } + // should never get here - and if we *do* it should cause an error + // later on undefined fullTrace is passed to nestedProperty. + } + // for attrs that interact (like scales & autoscales), save the // old vals before making the change // val=undefined will not set a value, just record what the value was. @@ -42143,9 +43085,11 @@ function _restyle(gd, aobj, traces) { var extraparam; if(attr.substr(0, 6) === 'LAYOUT') { - extraparam = Lib.nestedProperty(gd.layout, attr.replace('LAYOUT', '')); + extraparam = layoutNP(gd.layout, attr.replace('LAYOUT', '')); } else { - extraparam = Lib.nestedProperty(data[traces[i]], attr); + var tracei = traces[i]; + var preGUI = fullLayout._tracePreGUI[getFullTrace(tracei)._fullInput.uid]; + extraparam = makeNP(preGUI, guiEditFlag)(data[tracei], attr); } if(!(attr in undoit)) { @@ -42159,6 +43103,18 @@ function _restyle(gd, aobj, traces) { } } + function allBins(binAttr) { + return function(j) { + return fullData[j][binAttr]; + }; + } + + function arrayBins(binAttr) { + return function(vij, j) { + return vij === false ? fullData[traces[j]][binAttr] : null; + }; + } + // now make the changes to gd.data (and occasionally gd.layout) // and figure out what kind of graphics update we need to do for(var ai in aobj) { @@ -42166,18 +43122,29 @@ function _restyle(gd, aobj, traces) { throw new Error('cannot set ' + ai + 'and a parent attribute simultaneously'); } - var vi = aobj[ai], - cont, - contFull, - param, - oldVal, - newVal, - valObject; + var vi = aobj[ai]; + var cont; + var contFull; + var param; + var oldVal; + var newVal; + var valObject; + + // Backward compatibility shim for turning histogram autobin on, + // or freezing previous autobinned values. + // Replace obsolete `autobin(x|y): true` with `(x|y)bins: null` + // and `autobin(x|y): false` with the `(x|y)bins` in `fullData` + if(ai === 'autobinx' || ai === 'autobiny') { + ai = ai.charAt(ai.length - 1) + 'bins'; + if(Array.isArray(vi)) vi = vi.map(arrayBins(ai)); + else if(vi === false) vi = traces.map(allBins(ai)); + else vi = null; + } redoit[ai] = vi; if(ai.substr(0, 6) === 'LAYOUT') { - param = Lib.nestedProperty(gd.layout, ai.replace('LAYOUT', '')); + param = layoutNP(gd.layout, ai.replace('LAYOUT', '')); undoit[ai] = [undefinedToNull(param.get())]; // since we're allowing val to be an array, allow it here too, // even though that's meaningless @@ -42192,8 +43159,9 @@ function _restyle(gd, aobj, traces) { undoit[ai] = a0(); for(i = 0; i < traces.length; i++) { cont = data[traces[i]]; - contFull = fullData[traces[i]]; - param = Lib.nestedProperty(cont, ai); + contFull = getFullTrace(traces[i]); + var preGUI = fullLayout._tracePreGUI[contFull._fullInput.uid]; + param = makeNP(preGUI, guiEditFlag)(cont, ai); oldVal = param.get(); newVal = Array.isArray(vi) ? vi[i % vi.length] : vi; @@ -42203,7 +43171,7 @@ function _restyle(gd, aobj, traces) { var prefix = ai.substr(0, ai.length - finalPart.length - 1); var prefixDot = prefix ? prefix + '.' : ''; var innerContFull = prefix ? - Lib.nestedProperty(contFull, prefix).get() : contFull; + nestedProperty(contFull, prefix).get() : contFull; valObject = PlotSchema.getTraceValObject(contFull, param.parts); @@ -42239,8 +43207,8 @@ function _restyle(gd, aobj, traces) { } else if(ai === 'type' && (newVal === 'pie') !== (oldVal === 'pie')) { - var labelsTo = 'x', - valuesTo = 'y'; + var labelsTo = 'x'; + var valuesTo = 'y'; if((newVal === 'bar' || oldVal === 'bar') && cont.orientation === 'h') { labelsTo = 'y'; valuesTo = 'x'; @@ -42250,14 +43218,14 @@ function _restyle(gd, aobj, traces) { Lib.swapAttrs(cont, ['?', '?src'], 'values', valuesTo); if(oldVal === 'pie') { - Lib.nestedProperty(cont, 'marker.color') - .set(Lib.nestedProperty(cont, 'marker.colors').get()); + nestedProperty(cont, 'marker.color') + .set(nestedProperty(cont, 'marker.colors').get()); // super kludgy - but if all pies are gone we won't remove them otherwise fullLayout._pielayer.selectAll('g.trace').remove(); } else if(Registry.traceIs(cont, 'cartesian')) { - Lib.nestedProperty(cont, 'marker.colors') - .set(Lib.nestedProperty(cont, 'marker.color').get()); + nestedProperty(cont, 'marker.colors') + .set(nestedProperty(cont, 'marker.color').get()); } } @@ -42297,8 +43265,10 @@ function _restyle(gd, aobj, traces) { else { if(valObject) { // must redo calcdata when restyling array values of arrayOk attributes - if(valObject.arrayOk && ( - Lib.isArrayOrTypedArray(newVal) || Lib.isArrayOrTypedArray(oldVal)) + // ... but no need to this for regl-based traces + if(valObject.arrayOk && + !Registry.traceIs(contFull, 'regl') && + (Lib.isArrayOrTypedArray(newVal) || Lib.isArrayOrTypedArray(oldVal)) ) { flags.calc = true; } @@ -42326,7 +43296,7 @@ function _restyle(gd, aobj, traces) { // swap hovermode if set to "compare x/y data" if(ai === 'orientationaxes') { - var hovermode = Lib.nestedProperty(gd.layout, 'hovermode'); + var hovermode = nestedProperty(gd.layout, 'hovermode'); if(hovermode.get() === 'x') { hovermode.set('y'); } else if(hovermode.get() === 'y') { @@ -42334,8 +43304,12 @@ function _restyle(gd, aobj, traces) { } } - // major enough changes deserve autoscale, autobin, and + // Major enough changes deserve autoscale and // non-reversed axes so people don't get confused + // + // Note: autobin (or its new analog bin clearing) is not included here + // since we're not pushing bins back to gd.data, so if we have bin + // info it was explicitly provided by the user. if(['orientation', 'type'].indexOf(ai) !== -1) { axlist = []; for(i = 0; i < traces.length; i++) { @@ -42344,10 +43318,6 @@ function _restyle(gd, aobj, traces) { if(Registry.traceIs(trace, 'cartesian')) { addToAxlist(trace.xaxis || 'x'); addToAxlist(trace.yaxis || 'y'); - - if(ai === 'type') { - doextra(['autobinx', 'autobiny'], true, i); - } } } @@ -42365,10 +43335,53 @@ function _restyle(gd, aobj, traces) { undoit: undoit, redoit: redoit, traces: traces, - eventData: Lib.extendDeepNoArrays([], [redoit, traces]) + eventData: Lib.extendDeepNoArrays([], [eventData, traces]) }; } +/** + * Converts deprecated attribute keys to + * the current API to ensure backwards compatibility. + * + * This is needed for the update mechanism to determine which + * subroutines to run based on the actual attribute + * definitions (that don't include the deprecated ones). + * + * E.g. Maps {'xaxis.title': 'A chart'} to {'xaxis.title.text': 'A chart'} + * and {titlefont: {...}} to {'title.font': {...}}. + * + * @param aobj + */ +function cleanDeprecatedAttributeKeys(aobj) { + var oldAxisTitleRegex = Lib.counterRegex('axis', '\.title', false, false); + var colorbarRegex = /colorbar\.title$/; + var keys = Object.keys(aobj); + var i, key, value; + + for(i = 0; i < keys.length; i++) { + key = keys[i]; + value = aobj[key]; + + if((key === 'title' || oldAxisTitleRegex.test(key) || colorbarRegex.test(key)) && + (typeof value === 'string' || typeof value === 'number')) { + replace(key, key.replace('title', 'title.text')); + } else if(key.indexOf('titlefont') > -1) { + replace(key, key.replace('titlefont', 'title.font')); + } else if(key.indexOf('titleposition') > -1) { + replace(key, key.replace('titleposition', 'title.position')); + } else if(key.indexOf('titleside') > -1) { + replace(key, key.replace('titleside', 'title.side')); + } else if(key.indexOf('titleoffset') > -1) { + replace(key, key.replace('titleoffset', 'title.offset')); + } + } + + function replace(oldAttrStr, newAttrStr) { + aobj[newAttrStr] = aobj[oldAttrStr]; + delete aobj[oldAttrStr]; + } +} + /** * relayout: update layout attributes of an existing plot * @@ -42389,7 +43402,7 @@ function _restyle(gd, aobj, traces) { * attribute object `{astr1: val1, astr2: val2 ...}` * allows setting multiple attributes simultaneously */ -exports.relayout = function relayout(gd, astr, val) { +function relayout(gd, astr, val) { gd = Lib.getGraphDiv(gd); helpers.clearPromiseQueue(gd); @@ -42426,15 +43439,11 @@ exports.relayout = function relayout(gd, astr, val) { seq.push(subroutines.layoutReplot); } else if(Object.keys(aobj).length) { - Plots.supplyDefaults(gd); + axRangeSupplyDefaultsByPass(gd, flags, specs) || Plots.supplyDefaults(gd); if(flags.legend) seq.push(subroutines.doLegend); if(flags.layoutstyle) seq.push(subroutines.layoutStyles); - - if(flags.axrange) { - addAxRangeSequence(seq, specs.rangesAltered); - } - + if(flags.axrange) addAxRangeSequence(seq, specs.rangesAltered); if(flags.ticks) seq.push(subroutines.doTicksRelayout); if(flags.modebar) seq.push(subroutines.doModeBar); if(flags.camera) seq.push(subroutines.doCamera); @@ -42456,19 +43465,53 @@ exports.relayout = function relayout(gd, astr, val) { gd.emit('plotly_relayout', specs.eventData); return gd; }); -}; +} +exports.relayout = relayout; + +// Optimization mostly for large splom traces where +// Plots.supplyDefaults can take > 100ms +function axRangeSupplyDefaultsByPass(gd, flags, specs) { + var k; + + if(!flags.axrange) return false; + + for(k in flags) { + if(k !== 'axrange' && flags[k]) return false; + } + + for(k in specs.rangesAltered) { + var axName = Axes.id2name(k); + var axIn = gd.layout[axName]; + var axOut = gd._fullLayout[axName]; + axOut.autorange = axIn.autorange; + axOut.range = axIn.range.slice(); + axOut.cleanRange(); + } + return true; +} function addAxRangeSequence(seq, rangesAltered) { // N.B. leave as sequence of subroutines (for now) instead of // subroutine of its own so that finalDraw always gets // executed after drawData - var doTicks = rangesAltered ? - function(gd) { return subroutines.doTicksRelayout(gd, rangesAltered); } : - subroutines.doTicksRelayout; + var drawAxes = rangesAltered ? + function(gd) { + var opts = {skipTitle: true}; + for(var id in rangesAltered) { + if(Axes.getFromId(gd, id).automargin) { + opts = {}; + break; + } + } + return Axes.draw(gd, Object.keys(rangesAltered), opts); + } : + function(gd) { + return Axes.draw(gd, 'redraw'); + }; seq.push( subroutines.doAutoRangeAndConstraints, - doTicks, + drawAxes, subroutines.drawData, subroutines.finalDraw ); @@ -42479,23 +43522,28 @@ var AX_AUTORANGE_RE = /^[xyz]axis[0-9]*\.autorange$/; var AX_DOMAIN_RE = /^[xyz]axis[0-9]*\.domain(\[[0|1]\])?$/; function _relayout(gd, aobj) { - var layout = gd.layout, - fullLayout = gd._fullLayout, - keys = Object.keys(aobj), - axes = Axes.list(gd), - arrayEdits = {}, - arrayStr, - i, - j; + var layout = gd.layout; + var fullLayout = gd._fullLayout; + var guiEditFlag = fullLayout._guiEditing; + var layoutNP = makeNP(fullLayout._preGUI, guiEditFlag); + var keys = Object.keys(aobj); + var axes = Axes.list(gd); + var eventData = Lib.extendDeepAll({}, aobj); + var arrayEdits = {}; + + var arrayStr, i, j; + + cleanDeprecatedAttributeKeys(aobj); + keys = Object.keys(aobj); // look for 'allaxes', split out into all axes // in case of 3D the axis are nested within a scene which is held in _id for(i = 0; i < keys.length; i++) { if(keys[i].indexOf('allaxes') === 0) { for(j = 0; j < axes.length; j++) { - var scene = axes[j]._id.substr(1), - axisAttr = (scene.indexOf('scene') !== -1) ? (scene + '.') : '', - newkey = keys[i].replace('allaxes', axisAttr + axes[j]._name); + var scene = axes[j]._id.substr(1); + var axisAttr = (scene.indexOf('scene') !== -1) ? (scene + '.') : ''; + var newkey = keys[i].replace('allaxes', axisAttr + axes[j]._name); if(!aobj[newkey]) aobj[newkey] = aobj[keys[i]]; } @@ -42509,8 +43557,8 @@ function _relayout(gd, aobj) { // copies of the change (and previous values of anything affected) // for the undo / redo queue - var redoit = {}, - undoit = {}; + var redoit = {}; + var undoit = {}; // for attrs that interact (like scales & autoscales), save the // old vals before making the change @@ -42526,7 +43574,7 @@ function _relayout(gd, aobj) { // via a parent) do not override with this auto-generated extra if(attr in aobj || helpers.hasParent(aobj, attr)) return; - var p = Lib.nestedProperty(layout, attr); + var p = layoutNP(layout, attr); if(!(attr in undoit)) { undoit[attr] = undefinedToNull(p.get()); } @@ -42551,7 +43599,7 @@ function _relayout(gd, aobj) { throw new Error('cannot set ' + ai + 'and a parent attribute simultaneously'); } - var p = Lib.nestedProperty(layout, ai); + var p = layoutNP(layout, ai); var vi = aobj[ai]; var plen = p.parts.length; // p.parts may end with an index integer if the property is an array @@ -42563,8 +43611,8 @@ function _relayout(gd, aobj) { var pleafPlus = p.parts[pend - 1] + '.' + pleaf; // trunk nodes (everything except the leaf) var ptrunk = p.parts.slice(0, pend).join('.'); - var parentIn = Lib.nestedProperty(gd.layout, ptrunk).get(); - var parentFull = Lib.nestedProperty(fullLayout, ptrunk).get(); + var parentIn = nestedProperty(gd.layout, ptrunk).get(); + var parentFull = nestedProperty(fullLayout, ptrunk).get(); var vOld = p.get(); if(vi === undefined) continue; @@ -42587,18 +43635,34 @@ function _relayout(gd, aobj) { // back to its initial value as computed during the first pass in Plots.plotAutoSize. // // To do so, we must manually set them back here using the _initialAutoSize cache. - if(['width', 'height'].indexOf(ai) !== -1 && vi === null) { - fullLayout[ai] = gd._initialAutoSize[ai]; + // can't use impliedEdits for this because behavior depends on vi + if(['width', 'height'].indexOf(ai) !== -1) { + if(vi) { + doextra('autosize', null); + // currently we don't support autosize one dim only - so + // explicitly set the other one. Note that doextra will + // ignore this if the same relayout call also provides oppositeAttr + var oppositeAttr = ai === 'height' ? 'width' : 'height'; + doextra(oppositeAttr, fullLayout[oppositeAttr]); + } + else { + fullLayout[ai] = gd._initialAutoSize[ai]; + } + } + else if(ai === 'autosize') { + // depends on vi here too, so again can't use impliedEdits + doextra('width', vi ? null : fullLayout.width); + doextra('height', vi ? null : fullLayout.height); } // check autorange vs range else if(pleafPlus.match(AX_RANGE_RE)) { recordAlteredAxis(pleafPlus); - Lib.nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); + nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); } else if(pleafPlus.match(AX_AUTORANGE_RE)) { recordAlteredAxis(pleafPlus); - Lib.nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); - var axFull = Lib.nestedProperty(fullLayout, ptrunk).get(); + nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); + var axFull = nestedProperty(fullLayout, ptrunk).get(); if(axFull._inputDomain) { // if we're autoranging and this axis has a constrained domain, // reset it so we don't get locked into a shrunken size @@ -42606,7 +43670,7 @@ function _relayout(gd, aobj) { } } else if(pleafPlus.match(AX_DOMAIN_RE)) { - Lib.nestedProperty(fullLayout, ptrunk + '._inputDomain').set(null); + nestedProperty(fullLayout, ptrunk + '._inputDomain').set(null); } // toggling axis type between log and linear: we need to convert @@ -42615,9 +43679,9 @@ function _relayout(gd, aobj) { // previously we did this for log <-> not-log, but now only do it // for log <-> linear if(pleaf === 'type') { - var ax = parentIn, - toLog = parentFull.type === 'linear' && vi === 'log', - fromLog = parentFull.type === 'log' && vi === 'linear'; + var ax = parentIn; + var toLog = parentFull.type === 'linear' && vi === 'log'; + var fromLog = parentFull.type === 'log' && vi === 'linear'; if(toLog || fromLog) { if(!ax || !ax.range) { @@ -42629,8 +43693,8 @@ function _relayout(gd, aobj) { else if(!parentFull.autorange) { // toggling log without autorange: need to also recalculate ranges // because log axes use linearized values for range endpoints - var r0 = ax.range[0], - r1 = ax.range[1]; + var r0 = ax.range[0]; + var r1 = ax.range[1]; if(toLog) { // if both limits are negative, autorange if(r0 <= 0 && r1 <= 0) { @@ -42675,11 +43739,11 @@ function _relayout(gd, aobj) { doextra(ptrunk + '.autorange', true); doextra(ptrunk + '.range', null); } - Lib.nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); + nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); } else if(pleaf.match(AX_NAME_PATTERN)) { - var fullProp = Lib.nestedProperty(fullLayout, ai).get(), - newType = (vi || {}).type; + var fullProp = nestedProperty(fullLayout, ai).get(); + var newType = (vi || {}).type; // This can potentially cause strange behavior if the autotype is not // numeric (linear, because we don't auto-log) but the previous type @@ -42700,22 +43764,20 @@ function _relayout(gd, aobj) { arrayStr = containerArrayMatch.array; i = containerArrayMatch.index; var propStr = containerArrayMatch.property; - var componentArray = Lib.nestedProperty(layout, arrayStr); - var obji = (componentArray || [])[i] || {}; var updateValObject = valObject || {editType: 'calc'}; - if(propStr === '') { + if(i !== '' && propStr === '') { // special handling of undoit if we're adding or removing an element - // ie 'annotations[2]' which can be {...} (add) or null (remove) + // ie 'annotations[2]' which can be {...} (add) or null, + // does not work when replacing the entire array if(manageArrays.isAddVal(vi)) { undoit[ai] = null; } else if(manageArrays.isRemoveVal(vi)) { - undoit[ai] = obji; + undoit[ai] = (nestedProperty(layout, arrayStr).get() || [])[i]; } else { Lib.warn('unrecognized full object value', aobj); } } - editTypes.update(flags, updateValObject); // prepare the edits object we'll send to applyContainerArrayChanges @@ -42755,7 +43817,7 @@ function _relayout(gd, aobj) { // now we've collected component edits - execute them all together for(arrayStr in arrayEdits) { var finished = manageArrays.applyContainerArrayChanges(gd, - Lib.nestedProperty(layout, arrayStr), arrayEdits[arrayStr], flags); + layoutNP(layout, arrayStr), arrayEdits[arrayStr], flags, layoutNP); if(!finished) flags.plot = true; } @@ -42798,7 +43860,7 @@ function _relayout(gd, aobj) { rangesAltered: rangesAltered, undoit: undoit, redoit: redoit, - eventData: Lib.extendDeep({}, redoit) + eventData: eventData }; } @@ -42833,7 +43895,7 @@ function updateAutosize(gd) { * integer or array of integers for the traces to alter (all if omitted) * */ -exports.update = function update(gd, traceUpdate, layoutUpdate, _traces) { +function update(gd, traceUpdate, layoutUpdate, _traces) { gd = Lib.getGraphDiv(gd); helpers.clearPromiseQueue(gd); @@ -42863,8 +43925,8 @@ exports.update = function update(gd, traceUpdate, layoutUpdate, _traces) { var seq = []; if(restyleFlags.fullReplot && relayoutFlags.layoutReplot) { - var data = gd.data, - layout = gd.layout; + var data = gd.data; + var layout = gd.layout; // clear existing data/layout on gd // so that Plotly.plot doesn't try to extend them @@ -42881,15 +43943,13 @@ exports.update = function update(gd, traceUpdate, layoutUpdate, _traces) { } else { seq.push(Plots.previousPromises); - Plots.supplyDefaults(gd); + axRangeSupplyDefaultsByPass(gd, relayoutFlags, relayoutSpecs) || Plots.supplyDefaults(gd); if(restyleFlags.style) seq.push(subroutines.doTraceStyle); if(restyleFlags.colorbars) seq.push(subroutines.doColorBars); if(relayoutFlags.legend) seq.push(subroutines.doLegend); if(relayoutFlags.layoutstyle) seq.push(subroutines.layoutStyles); - if(relayoutFlags.axrange) { - addAxRangeSequence(seq, relayoutSpecs.rangesAltered); - } + if(relayoutFlags.axrange) addAxRangeSequence(seq, relayoutSpecs.rangesAltered); if(relayoutFlags.ticks) seq.push(subroutines.doTicksRelayout); if(relayoutFlags.modebar) seq.push(subroutines.doModeBar); if(relayoutFlags.camera) seq.push(subroutines.doCamera); @@ -42915,7 +43975,235 @@ exports.update = function update(gd, traceUpdate, layoutUpdate, _traces) { return gd; }); -}; +} +exports.update = update; + +/* + * internal-use-only restyle/relayout/update variants that record the initial + * values in (fullLayout|fullTrace)._preGUI so changes can be persisted across + * Plotly.react data updates, dependent on uirevision attributes + */ +function guiEdit(func) { + return function wrappedEdit(gd) { + gd._fullLayout._guiEditing = true; + var p = func.apply(null, arguments); + gd._fullLayout._guiEditing = false; + return p; + }; +} +exports._guiRestyle = guiEdit(restyle); +exports._guiRelayout = guiEdit(relayout); +exports._guiUpdate = guiEdit(update); + +// For connecting edited layout attributes to uirevision attrs +// If no `attr` we use `match[1] + '.uirevision'` +// Ordered by most common edits first, to minimize our search time +var layoutUIControlPatterns = [ + {pattern: /^hiddenlabels/, attr: 'legend.uirevision'}, + {pattern: /^((x|y)axis\d*)\.((auto)?range|title\.text)/}, + + // showspikes and modes include those nested inside scenes + {pattern: /axis\d*\.showspikes$/, attr: 'modebar.uirevision'}, + {pattern: /(hover|drag)mode$/, attr: 'modebar.uirevision'}, + + {pattern: /^(scene\d*)\.camera/}, + {pattern: /^(geo\d*)\.(projection|center)/}, + {pattern: /^(ternary\d*\.[abc]axis)\.(min|title\.text)$/}, + {pattern: /^(polar\d*\.radialaxis)\.((auto)?range|angle|title\.text)/}, + {pattern: /^(polar\d*\.angularaxis)\.rotation/}, + {pattern: /^(mapbox\d*)\.(center|zoom|bearing|pitch)/}, + + {pattern: /^legend\.(x|y)$/, attr: 'editrevision'}, + {pattern: /^(shapes|annotations)/, attr: 'editrevision'}, + {pattern: /^title\.text$/, attr: 'editrevision'} +]; + +// same for trace attributes: if `attr` is given it's in layout, +// or with no `attr` we use `trace.uirevision` +var traceUIControlPatterns = [ + {pattern: /^selectedpoints$/, attr: 'selectionrevision'}, + // "visible" includes trace.transforms[i].styles[j].value.visible + {pattern: /(^|value\.)visible$/, attr: 'legend.uirevision'}, + {pattern: /^dimensions\[\d+\]\.constraintrange/}, + + // below this you must be in editable: true mode + // TODO: I still put name and title with `trace.uirevision` + // reasonable or should these be `editrevision`? + // Also applies to axis titles up in the layout section + + // "name" also includes transform.styles + {pattern: /(^|value\.)name$/}, + // including nested colorbar attributes (ie marker.colorbar) + {pattern: /colorbar\.title\.text$/}, + {pattern: /colorbar\.(x|y)$/, attr: 'editrevision'} +]; + +function findUIPattern(key, patternSpecs) { + for(var i = 0; i < patternSpecs.length; i++) { + var spec = patternSpecs[i]; + var match = key.match(spec.pattern); + if(match) { + return {head: match[1], attr: spec.attr}; + } + } +} + +// We're finding the new uirevision before supplyDefaults, so do the +// inheritance manually. Note that only `undefined` inherits - other +// falsy values are returned. +function getNewRev(revAttr, container) { + var newRev = nestedProperty(container, revAttr).get(); + if(newRev !== undefined) return newRev; + + var parts = revAttr.split('.'); + parts.pop(); + while(parts.length > 1) { + parts.pop(); + newRev = nestedProperty(container, parts.join('.') + '.uirevision').get(); + if(newRev !== undefined) return newRev; + } + + return container.uirevision; +} + +function getFullTraceIndexFromUid(uid, fullData) { + for(var i = 0; i < fullData.length; i++) { + if(fullData[i]._fullInput.uid === uid) return i; + } + return -1; +} + +function getTraceIndexFromUid(uid, data, tracei) { + for(var i = 0; i < data.length; i++) { + if(data[i].uid === uid) return i; + } + // fall back on trace order, but only if user didn't provide a uid for that trace + return (!data[tracei] || data[tracei].uid) ? -1 : tracei; +} + +function valsMatch(v1, v2) { + var v1IsObj = Lib.isPlainObject(v1); + var v1IsArray = Array.isArray(v1); + if(v1IsObj || v1IsArray) { + return ( + (v1IsObj && Lib.isPlainObject(v2)) || + (v1IsArray && Array.isArray(v2)) + ) && JSON.stringify(v1) === JSON.stringify(v2); + } + return v1 === v2; +} + +function applyUIRevisions(data, layout, oldFullData, oldFullLayout) { + var layoutPreGUI = oldFullLayout._preGUI; + var key, revAttr, oldRev, newRev, match, preGUIVal, newNP, newVal; + var bothInheritAutorange = []; + var newRangeAccepted = {}; + for(key in layoutPreGUI) { + match = findUIPattern(key, layoutUIControlPatterns); + if(match) { + revAttr = match.attr || (match.head + '.uirevision'); + oldRev = nestedProperty(oldFullLayout, revAttr).get(); + newRev = oldRev && getNewRev(revAttr, layout); + if(newRev && (newRev === oldRev)) { + preGUIVal = layoutPreGUI[key]; + if(preGUIVal === null) preGUIVal = undefined; + newNP = nestedProperty(layout, key); + newVal = newNP.get(); + if(valsMatch(newVal, preGUIVal)) { + if(newVal === undefined && key.substr(key.length - 9) === 'autorange') { + bothInheritAutorange.push(key.substr(0, key.length - 10)); + } + newNP.set(undefinedToNull(nestedProperty(oldFullLayout, key).get())); + continue; + } + } + } + else { + Lib.warn('unrecognized GUI edit: ' + key); + } + // if we got this far, the new value was accepted as the new starting + // point (either because it changed or revision changed) + // so remove it from _preGUI for next time. + delete layoutPreGUI[key]; + + if(key.substr(key.length - 8, 6) === 'range[') { + newRangeAccepted[key.substr(0, key.length - 9)] = 1; + } + } + + // Special logic for `autorange`, since it interacts with `range`: + // If the new figure's matching `range` was kept, and `autorange` + // wasn't supplied explicitly in either the original or the new figure, + // we shouldn't alter that - but we may just have done that, so fix it. + for(var i = 0; i < bothInheritAutorange.length; i++) { + var axAttr = bothInheritAutorange[i]; + if(newRangeAccepted[axAttr]) { + var newAx = nestedProperty(layout, axAttr).get(); + if(newAx) delete newAx.autorange; + } + } + + // Now traces - try to match them up by uid (in case we added/deleted in + // the middle), then fall back on index. + var allTracePreGUI = oldFullLayout._tracePreGUI; + for(var uid in allTracePreGUI) { + var tracePreGUI = allTracePreGUI[uid]; + var newTrace = null; + var fullInput; + for(key in tracePreGUI) { + // wait until we know we have preGUI values to look for traces + // but if we don't find both, stop looking at this uid + if(!newTrace) { + var fulli = getFullTraceIndexFromUid(uid, oldFullData); + if(fulli < 0) { + // Somehow we didn't even have this trace in oldFullData... + // I guess this could happen with `deleteTraces` or something + delete allTracePreGUI[uid]; + break; + } + var fullTrace = oldFullData[fulli]; + fullInput = fullTrace._fullInput; + + var newTracei = getTraceIndexFromUid(uid, data, fullInput.index); + if(newTracei < 0) { + // No match in new data + delete allTracePreGUI[uid]; + break; + } + newTrace = data[newTracei]; + } + + match = findUIPattern(key, traceUIControlPatterns); + if(match) { + if(match.attr) { + oldRev = nestedProperty(oldFullLayout, match.attr).get(); + newRev = oldRev && getNewRev(match.attr, layout); + } + else { + oldRev = fullInput.uirevision; + // inheritance for trace.uirevision is simple, just layout.uirevision + newRev = newTrace.uirevision; + if(newRev === undefined) newRev = layout.uirevision; + } + + if(newRev && newRev === oldRev) { + preGUIVal = tracePreGUI[key]; + if(preGUIVal === null) preGUIVal = undefined; + newNP = nestedProperty(newTrace, key); + newVal = newNP.get(); + if(valsMatch(newVal, preGUIVal)) { + newNP.set(undefinedToNull(nestedProperty(fullInput, key).get())); + continue; + } + } + } + else { + Lib.warn('unrecognized GUI edit: ' + key + ' in trace uid ' + uid); + } + delete tracePreGUI[key]; + } + } +} /** * Plotly.react: @@ -42979,6 +44267,8 @@ exports.react = function(gd, data, layout, config) { gd.layout = layout || {}; helpers.cleanLayout(gd.layout); + applyUIRevisions(gd.data, gd.layout, oldFullData, oldFullLayout); + // "true" skips updating calcdata and remapping arrays from calcTransforms, // which supplyDefaults usually does at the end, but we may need to NOT do // if the diff (which we haven't determined yet) says we'll recalc @@ -42987,9 +44277,11 @@ exports.react = function(gd, data, layout, config) { var newFullData = gd._fullData; var newFullLayout = gd._fullLayout; var immutable = newFullLayout.datarevision === undefined; + var transition = newFullLayout.transition; - var restyleFlags = diffData(gd, oldFullData, newFullData, immutable); - var relayoutFlags = diffLayout(gd, oldFullLayout, newFullLayout, immutable); + var relayoutFlags = diffLayout(gd, oldFullLayout, newFullLayout, immutable, transition); + var newDataRevision = relayoutFlags.newDataRevision; + var restyleFlags = diffData(gd, oldFullData, newFullData, immutable, transition, newDataRevision); // TODO: how to translate this part of relayout to Plotly.react? // // Setting width or height to null must reset the graph's width / height @@ -43019,7 +44311,19 @@ exports.react = function(gd, data, layout, config) { seq.push(addFrames); } - if(restyleFlags.fullReplot || relayoutFlags.layoutReplot || configChanged) { + // Transition pathway, + // only used when 'transition' is set by user and + // when at least one animatable attribute has changed, + // N.B. config changed aren't animatable + if(newFullLayout.transition && !configChanged && (restyleFlags.anim || relayoutFlags.anim)) { + Plots.doCalcdata(gd); + subroutines.doAutoRangeAndConstraints(gd); + + seq.push(function() { + return Plots.transitionFromReact(gd, restyleFlags, relayoutFlags, oldFullLayout); + }); + } + else if(restyleFlags.fullReplot || relayoutFlags.layoutReplot || configChanged) { gd._fullLayout._skipDefaults = true; seq.push(exports.plot); } @@ -43072,8 +44376,10 @@ exports.react = function(gd, data, layout, config) { }; -function diffData(gd, oldFullData, newFullData, immutable) { - if(oldFullData.length !== newFullData.length) { +function diffData(gd, oldFullData, newFullData, immutable, transition, newDataRevision) { + var sameTraceLength = oldFullData.length === newFullData.length; + + if(!transition && !sameTraceLength) { return { fullReplot: true, calc: true @@ -43082,6 +44388,9 @@ function diffData(gd, oldFullData, newFullData, immutable) { var flags = editTypes.traceFlags(); flags.arrays = {}; + flags.nChanges = 0; + flags.nChangesAnim = 0; + var i, trace; function getTraceValObject(parts) { @@ -43092,31 +44401,41 @@ function diffData(gd, oldFullData, newFullData, immutable) { getValObject: getTraceValObject, flags: flags, immutable: immutable, + transition: transition, + newDataRevision: newDataRevision, gd: gd }; - var seenUIDs = {}; for(i = 0; i < oldFullData.length; i++) { - trace = newFullData[i]._fullInput; - if(Plots.hasMakesDataTransform(trace)) trace = newFullData[i]; - if(seenUIDs[trace.uid]) continue; - seenUIDs[trace.uid] = 1; + if(newFullData[i]) { + trace = newFullData[i]._fullInput; + if(Plots.hasMakesDataTransform(trace)) trace = newFullData[i]; + if(seenUIDs[trace.uid]) continue; + seenUIDs[trace.uid] = 1; - getDiffFlags(oldFullData[i]._fullInput, trace, [], diffOpts); + getDiffFlags(oldFullData[i]._fullInput, trace, [], diffOpts); + } } if(flags.calc || flags.plot) { flags.fullReplot = true; } + if(transition && flags.nChanges && flags.nChangesAnim) { + flags.anim = (flags.nChanges === flags.nChangesAnim) && sameTraceLength ? 'all' : 'some'; + } + return flags; } -function diffLayout(gd, oldFullLayout, newFullLayout, immutable) { +function diffLayout(gd, oldFullLayout, newFullLayout, immutable, transition) { var flags = editTypes.layoutFlags(); flags.arrays = {}; + flags.rangesAltered = {}; + flags.nChanges = 0; + flags.nChangesAnim = 0; function getLayoutValObject(parts) { return PlotSchema.getLayoutValObject(newFullLayout, parts); @@ -43126,6 +44445,7 @@ function diffLayout(gd, oldFullLayout, newFullLayout, immutable) { getValObject: getLayoutValObject, flags: flags, immutable: immutable, + transition: transition, gd: gd }; @@ -43135,11 +44455,15 @@ function diffLayout(gd, oldFullLayout, newFullLayout, immutable) { flags.layoutReplot = true; } + if(transition && flags.nChanges && flags.nChangesAnim) { + flags.anim = flags.nChanges === flags.nChangesAnim ? 'all' : 'some'; + } + return flags; } function getDiffFlags(oldContainer, newContainer, outerparts, opts) { - var valObject, key; + var valObject, key, astr; var getValObject = opts.getValObject; var flags = opts.flags; @@ -43154,6 +44478,30 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) { return; } editTypes.update(flags, valObject); + + if(editType !== 'none') { + flags.nChanges++; + } + + // track animatable changes + if(opts.transition && valObject.anim) { + flags.nChangesAnim++; + } + + // track cartesian axes with altered ranges + if(AX_RANGE_RE.test(astr) || AX_AUTORANGE_RE.test(astr)) { + flags.rangesAltered[outerparts[0]] = 1; + } + + // clear _inputDomain on cartesian axes with altered domains + if(AX_DOMAIN_RE.test(astr)) { + nestedProperty(newContainer, '_inputDomain').set(null); + } + + // track datarevision changes + if(key === 'datarevision') { + flags.newDataRevision = 1; + } } function valObjectCanBeDataArray(valObject) { @@ -43162,10 +44510,12 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) { for(key in oldContainer) { // short-circuit based on previous calls or previous keys that already maximized the pathway - if(flags.calc) return; + if(flags.calc && !opts.transition) return; var oldVal = oldContainer[key]; var newVal = newContainer[key]; + var parts = outerparts.concat(key); + astr = parts.join('.'); if(key.charAt(0) === '_' || typeof oldVal === 'function' || oldVal === newVal) continue; @@ -43181,7 +44531,6 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) { if(key === 'range' && newContainer.autorange) continue; if((key === 'zmin' || key === 'zmax') && newContainer.type === 'contourcarpet') continue; - var parts = outerparts.concat(key); valObject = getValObject(parts); // in case type changed, we may not even *have* a valObject. @@ -43252,6 +44601,11 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) { if(immutable) { flags.calc = true; } + + // look for animatable attributes when the data changed + if(immutable || opts.newDataRevision) { + changed(); + } } else if(wasArray !== nowArray) { flags.calc = true; @@ -43292,6 +44646,7 @@ function diffConfig(oldConfig, newConfig) { var key; for(key in oldConfig) { + if(key.charAt(0) === '_') continue; var oldVal = oldConfig[key]; var newVal = newConfig[key]; if(oldVal !== newVal) { @@ -43825,10 +45180,10 @@ exports.addFrames = function(gd, frameList, indices) { } } - var undoFunc = Plots.modifyFrames, - redoFunc = Plots.modifyFrames, - undoArgs = [gd, revops], - redoArgs = [gd, ops]; + var undoFunc = Plots.modifyFrames; + var redoFunc = Plots.modifyFrames; + var undoArgs = [gd, revops]; + var redoArgs = [gd, ops]; if(Queue) Queue.add(gd, undoFunc, undoArgs, redoFunc, redoArgs); @@ -43872,10 +45227,10 @@ exports.deleteFrames = function(gd, frameList) { revops.unshift({type: 'insert', index: idx, value: _frames[idx]}); } - var undoFunc = Plots.modifyFrames, - redoFunc = Plots.modifyFrames, - undoArgs = [gd, revops], - redoArgs = [gd, ops]; + var undoFunc = Plots.modifyFrames; + var redoFunc = Plots.modifyFrames; + var undoArgs = [gd, revops]; + var redoArgs = [gd, ops]; if(Queue) Queue.add(gd, undoFunc, undoArgs, redoFunc, redoArgs); @@ -43893,10 +45248,9 @@ exports.purge = function purge(gd) { var fullLayout = gd._fullLayout || {}; var fullData = gd._fullData || []; - var calcdata = gd.calcdata || []; // remove gl contexts - Plots.cleanPlot([], {}, fullData, fullLayout, calcdata); + Plots.cleanPlot([], {}, fullData, fullLayout); // purge properties Plots.purge(gd); @@ -44033,9 +45387,9 @@ function makePlotFramework(gd) { gd.emit('plotly_framework'); } -},{"../components/color":50,"../components/colorbar/connect":52,"../components/drawing":75,"../constants/xmlns_namespaces":152,"../lib":169,"../lib/events":162,"../lib/queue":184,"../lib/svg_text_utils":191,"../plots/cartesian/axes":214,"../plots/cartesian/constants":219,"../plots/cartesian/graph_interact":223,"../plots/plots":246,"../plots/polar/legacy":249,"../registry":259,"./edit_types":197,"./helpers":198,"./manage_arrays":200,"./plot_config":202,"./plot_schema":203,"./subroutines":205,"d3":16,"fast-isnumeric":18,"has-hover":20}],202:[function(_dereq_,module,exports){ +},{"../components/color":51,"../components/colorbar/connect":53,"../components/drawing":72,"../constants/xmlns_namespaces":150,"../lib":168,"../lib/events":161,"../lib/queue":182,"../lib/svg_text_utils":189,"../plots/cartesian/axes":212,"../plots/cartesian/constants":218,"../plots/cartesian/graph_interact":222,"../plots/plots":245,"../plots/polar/legacy":248,"../registry":257,"./edit_types":195,"./helpers":196,"./manage_arrays":198,"./plot_config":200,"./plot_schema":201,"./subroutines":203,"d3":16,"fast-isnumeric":18,"has-hover":20}],200:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -44050,191 +45404,286 @@ function makePlotFramework(gd) { * * The defaults are the appropriate settings for plotly.js, * so we get the right experience without any config argument. + * + * N.B. the config options are not coerced using Lib.coerce so keys + * like `valType` and `values` are only set for documentation purposes + * at the moment. */ -module.exports = { - - // no interactivity, for export or image generation - staticPlot: false, - - // base URL for the 'Edit in Chart Studio' (aka sendDataToCloud) mode bar button - // and the showLink/sendData on-graph link - plotlyServerURL: 'https://plot.ly', - - /* - * we can edit titles, move annotations, etc - sets all pieces of `edits` - * unless a separate `edits` config item overrides individual parts - */ - editable: false, - edits: { - /* - * annotationPosition: the main anchor of the annotation, which is the - * text (if no arrow) or the arrow (which drags the whole thing leaving - * the arrow length & direction unchanged) - */ - annotationPosition: false, - // just for annotations with arrows, change the length and direction of the arrow - annotationTail: false, - annotationText: false, - axisTitleText: false, - colorbarPosition: false, - colorbarTitleText: false, - legendPosition: false, - // edit the trace name fields from the legend - legendText: false, - shapePosition: false, - // the global `layout.title` - titleText: false +var configAttributes = { + staticPlot: { + valType: 'boolean', + dflt: false, + }, - /* - * DO autosize once regardless of layout.autosize - * (use default width or height values otherwise) - */ - autosizable: false, + plotlyServerURL: { + valType: 'string', + dflt: 'https://plot.ly', + + }, - // responsive: determines whether to change the layout size when window is resized - responsive: false, + editable: { + valType: 'boolean', + dflt: false, + + }, + edits: { + annotationPosition: { + valType: 'boolean', + dflt: false, + + }, + annotationTail: { + valType: 'boolean', + dflt: false, + + }, + annotationText: { + valType: 'boolean', + dflt: false, + + }, + axisTitleText: { + valType: 'boolean', + dflt: false, + + }, + colorbarPosition: { + valType: 'boolean', + dflt: false, + + }, + colorbarTitleText: { + valType: 'boolean', + dflt: false, + + }, + legendPosition: { + valType: 'boolean', + dflt: false, + + }, + legendText: { + valType: 'boolean', + dflt: false, + + }, + shapePosition: { + valType: 'boolean', + dflt: false, + + }, + titleText: { + valType: 'boolean', + dflt: false, + + } + }, - // set the length of the undo/redo queue - queueLength: 0, + autosizable: { + valType: 'boolean', + dflt: false, + + }, + responsive: { + valType: 'boolean', + dflt: false, + + }, + fillFrame: { + valType: 'boolean', + dflt: false, + + }, + frameMargins: { + valType: 'number', + dflt: 0, + min: 0, + max: 0.5, + + }, - // if we DO autosize, do we fill the container or the screen? - fillFrame: false, + scrollZoom: { + valType: 'flaglist', + flags: ['cartesian', 'gl3d', 'geo', 'mapbox'], + extras: [true, false], + dflt: 'gl3d+geo+mapbox', + + }, + doubleClick: { + valType: 'enumerated', + values: [false, 'reset', 'autosize', 'reset+autosize'], + dflt: 'reset+autosize', + + }, - // if we DO autosize, set the frame margins in percents of plot size - frameMargins: 0, + showAxisDragHandles: { + valType: 'boolean', + dflt: true, + + }, + showAxisRangeEntryBoxes: { + valType: 'boolean', + dflt: true, + + }, - // mousewheel or two-finger scroll zooms the plot - scrollZoom: false, + showTips: { + valType: 'boolean', + dflt: true, + + }, - // double click interaction (false, 'reset', 'autosize' or 'reset+autosize') - doubleClick: 'reset+autosize', + showLink: { + valType: 'boolean', + dflt: false, + + }, + linkText: { + valType: 'string', + dflt: 'Edit chart', + noBlank: true, + + }, + sendData: { + valType: 'boolean', + dflt: true, + + }, + showSources: { + valType: 'any', + dflt: false, + + }, - // new users see some hints about interactivity - showTips: true, + displayModeBar: { + valType: 'enumerated', + values: ['hover', true, false], + dflt: 'hover', + + }, + showSendToCloud: { + valType: 'boolean', + dflt: false, + + }, + modeBarButtonsToRemove: { + valType: 'any', + dflt: [], + + }, + modeBarButtonsToAdd: { + valType: 'any', + dflt: [], + + }, + modeBarButtons: { + valType: 'any', + dflt: false, + + }, + toImageButtonOptions: { + valType: 'any', + dflt: {}, + + }, + displaylogo: { + valType: 'boolean', + dflt: true, + + }, + watermark: { + valType: 'boolean', + dflt: false, + + }, - // enable axis pan/zoom drag handles - showAxisDragHandles: true, + plotGlPixelRatio: { + valType: 'number', + dflt: 2, + min: 1, + max: 4, + + }, - /* - * enable direct range entry at the pan/zoom drag points - * (drag handles must be enabled above) - */ - showAxisRangeEntryBoxes: true, + setBackground: { + valType: 'any', + dflt: 'transparent', + + }, - // link to open this plot in plotly - showLink: false, + topojsonURL: { + valType: 'string', + noBlank: true, + dflt: 'https://cdn.plot.ly/', + + }, - // if we show a link, does it contain data or just link to a plotly file? - sendData: true, + mapboxAccessToken: { + valType: 'string', + dflt: null, + + }, - // text appearing in the sendData link - linkText: 'Edit chart', + logging: { + valType: 'boolean', + dflt: 1, + + }, - // false or function adding source(s) to linkText - showSources: false, + queueLength: { + valType: 'integer', + min: 0, + dflt: 0, + + }, - // display the mode bar (true, false, or 'hover') - displayModeBar: 'hover', + globalTransforms: { + valType: 'any', + dflt: [], + + }, - /* - * remove mode bar button by name - * (see ../components/modebar/buttons.js for the list of names) - */ - modeBarButtonsToRemove: [], + locale: { + valType: 'string', + dflt: 'en-US', + + }, - /* - * add mode bar button using config objects - * (see ./components/modebar/buttons.js for list of arguments) - */ - modeBarButtonsToAdd: [], - - /* - * fully custom mode bar buttons as nested array, - * where the outer arrays represents button groups, and - * the inner arrays have buttons config objects or names of default buttons - * (see ../components/modebar/buttons.js for more info) - */ - modeBarButtons: false, - - // statically override options for toImage modebar button - // allowed keys are format, filename, width, height, scale - // see ../components/modebar/buttons.js - toImageButtonOptions: {}, - - // add the plotly logo on the end of the mode bar - displaylogo: true, - - // increase the pixel ratio for Gl plot images - plotGlPixelRatio: 2, - - /* - * background setting function - * 'transparent' sets the background `layout.paper_color` - * 'opaque' blends bg color with white ensuring an opaque background - * or any other custom function of gd - */ - setBackground: 'transparent', - - // URL to topojson files used in geo charts - topojsonURL: 'https://cdn.plot.ly/', - - /* - * Mapbox access token (required to plot mapbox trace types) - * If using an Mapbox Atlas server, set this option to '', - * so that plotly.js won't attempt to authenticate to the public Mapbox server. - */ - mapboxAccessToken: null, - - /* - * Turn all console logging on or off (errors will be thrown) - * This should ONLY be set via Plotly.setPlotConfig - * 0: no logs - * 1: warnings and errors, but not informational messages - * 2: verbose logs - */ - logging: 1, - - /* - * Set global transform to be applied to all traces with no - * specification needed - */ - globalTransforms: [], - - /* - * Which localization should we use? - * Should be a string like 'en' or 'en-US'. - */ - locale: 'en-US', - - /* - * Localization definitions - * Locales can be provided either here (specific to one chart) or globally - * by registering them as modules. - * Should be an object of objects {locale: {dictionary: {...}, format: {...}}} - * { - * da: { - * dictionary: {'Reset axes': 'Nulstil aksler', ...}, - * format: {months: [...], shortMonths: [...]} - * }, - * ... - * } - * All parts are optional. When looking for translation or format fields, we - * look first for an exact match in a config locale, then in a registered - * module. If those fail, we strip off any regionalization ('en-US' -> 'en') - * and try each (config, registry) again. The final fallback for translation - * is untranslated (which is US English) and for formats is the base English - * (the only consequence being the last fallback date format %x is DD/MM/YYYY - * instead of MM/DD/YYYY). Currently `grouping` and `currency` are ignored - * for our automatic number formatting, but can be used in custom formats. - */ - locales: {} + locales: { + valType: 'any', + dflt: {}, + + } }; -},{}],203:[function(_dereq_,module,exports){ +var dfltConfig = {}; + +function crawl(src, target) { + for(var k in src) { + var obj = src[k]; + if(obj.valType) { + target[k] = obj.dflt; + } else { + if(!target[k]) { + target[k] = {}; + } + crawl(obj, target[k]); + } + } +} + +crawl(configAttributes, dfltConfig); + +module.exports = { + configAttributes: configAttributes, + dfltConfig: dfltConfig +}; + +},{}],201:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -44251,6 +45700,7 @@ var baseAttributes = _dereq_('../plots/attributes'); var baseLayoutAttributes = _dereq_('../plots/layout_attributes'); var frameAttributes = _dereq_('../plots/frame_attributes'); var animationAttributes = _dereq_('../plots/animation_attributes'); +var configAttributes = _dereq_('./plot_config').configAttributes; // polar attributes are not part of the Registry yet var polarAreaAttrs = _dereq_('../plots/polar/legacy/area_attributes'); @@ -44282,7 +45732,7 @@ exports.UNDERSCORE_ATTRS = UNDERSCORE_ATTRS; * - transforms * - frames * - animations - * - config (coming soon ...) + * - config */ exports.get = function() { var traces = {}; @@ -44316,7 +45766,9 @@ exports.get = function() { transforms: transforms, frames: getFramesAttributes(), - animation: formatAttributes(animationAttributes) + animation: formatAttributes(animationAttributes), + + config: formatAttributes(configAttributes) }; }; @@ -44332,6 +45784,7 @@ exports.get = function() { * @param {String} attrName name string * @param {object[]} attrs all the attributes * @param {Number} level the recursion level, 0 at the root + * @param {String} fullAttrString full attribute name (ie 'marker.line') * @param {Number} [specifiedLevel] * The level in the tree, in order to let the callback function detect descend or backtrack, * typically unsupplied (implied 0), just used by the self-recursive call. @@ -44680,11 +46133,22 @@ function getTraceAttributes(type) { // make 'type' the first attribute in the object attributes.type = null; + + var copyBaseAttributes = extendDeepAll({}, baseAttributes); + var copyModuleAttributes = extendDeepAll({}, _module.attributes); + + // prune global-level trace attributes that are already defined in a trace + exports.crawl(copyModuleAttributes, function(attr, attrName, attrs, level, fullAttrString) { + Lib.nestedProperty(copyBaseAttributes, fullAttrString).set(undefined); + // Prune undefined attributes + if(attr === undefined) Lib.nestedProperty(copyModuleAttributes, fullAttrString).set(undefined); + }); + // base attributes (same for all trace types) - extendDeepAll(attributes, baseAttributes); + extendDeepAll(attributes, copyBaseAttributes); // module attributes - extendDeepAll(attributes, _module.attributes); + extendDeepAll(attributes, copyModuleAttributes); // subplot attributes if(basePlotModule.attributes) { @@ -44893,8 +46357,8 @@ function assignPolarLayoutAttrs(layoutAttributes) { } function handleBasePlotModule(layoutAttributes, _module, astr) { - var np = Lib.nestedProperty(layoutAttributes, astr), - attrs = extendDeepAll({}, _module.layoutAttributes); + var np = Lib.nestedProperty(layoutAttributes, astr); + var attrs = extendDeepAll({}, _module.layoutAttributes); attrs[IS_SUBPLOT_OBJ] = true; np.set(attrs); @@ -44906,9 +46370,9 @@ function insertAttrs(baseAttrs, newAttrs, astr) { np.set(extendDeepAll(np.get() || {}, newAttrs)); } -},{"../lib":169,"../plots/animation_attributes":209,"../plots/attributes":211,"../plots/frame_attributes":241,"../plots/layout_attributes":244,"../plots/polar/legacy/area_attributes":247,"../plots/polar/legacy/axis_attributes":248,"../registry":259,"./edit_types":197}],204:[function(_dereq_,module,exports){ +},{"../lib":168,"../plots/animation_attributes":207,"../plots/attributes":209,"../plots/frame_attributes":240,"../plots/layout_attributes":243,"../plots/polar/legacy/area_attributes":246,"../plots/polar/legacy/axis_attributes":247,"../registry":257,"./edit_types":195,"./plot_config":200}],202:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -45220,9 +46684,9 @@ exports.arrayEditor = function(parentIn, containerStr, itemOut) { }; }; -},{"../lib":169,"../plots/attributes":211}],205:[function(_dereq_,module,exports){ +},{"../lib":168,"../plots/attributes":209}],203:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -45250,14 +46714,18 @@ var enforceAxisConstraints = axisConstraints.enforce; var cleanAxisConstraints = axisConstraints.clean; var doAutoRange = _dereq_('../plots/cartesian/autorange').doAutoRange; +var SVG_TEXT_ANCHOR_START = 'start'; +var SVG_TEXT_ANCHOR_MIDDLE = 'middle'; +var SVG_TEXT_ANCHOR_END = 'end'; + exports.layoutStyles = function(gd) { return Lib.syncOrAsync([Plots.doAutoMargin, lsInner], gd); }; function overlappingDomain(xDomain, yDomain, domains) { for(var i = 0; i < domains.length; i++) { - var existingX = domains[i][0], - existingY = domains[i][1]; + var existingX = domains[i][0]; + var existingY = domains[i][1]; if(existingX[0] >= xDomain[1] || existingX[1] <= xDomain[0]) { continue; @@ -45274,12 +46742,25 @@ function lsInner(gd) { var gs = fullLayout._size; var pad = gs.p; var axList = Axes.list(gd, '', true); + var i, subplot, plotinfo, ax, xa, ya; + + fullLayout._paperdiv.style({ + width: (gd._context.responsive && fullLayout.autosize && !gd._context._hasZeroWidth && !gd.layout.width) ? '100%' : fullLayout.width + 'px', + height: (gd._context.responsive && fullLayout.autosize && !gd._context._hasZeroHeight && !gd.layout.height) ? '100%' : fullLayout.height + 'px' + }) + .selectAll('.main-svg') + .call(Drawing.setSize, fullLayout.width, fullLayout.height); + gd._context.setBackground(gd, fullLayout.paper_bgcolor); + + exports.drawMainTitle(gd); + ModeBar.manage(gd); // _has('cartesian') means SVG specifically, not GL2D - but GL2D // can still get here because it makes some of the SVG structure // for shared features like selections. - var hasSVGCartesian = fullLayout._has('cartesian'); - var i; + if(!fullLayout._has('cartesian')) { + return gd._promises.length && Promise.all(gd._promises); + } function getLinePosition(ax, counterAx, side) { var lwHalf = ax._lw / 2; @@ -45297,10 +46778,7 @@ function lsInner(gd) { // some preparation of axis position info for(i = 0; i < axList.length; i++) { - var ax = axList[i]; - - // reset scale in case the margins have changed - ax.setScale(); + ax = axList[i]; var counterAx = ax._anchorAxis; @@ -45319,32 +46797,24 @@ function lsInner(gd) { ax._mainMirrorPosition = (ax.mirror && counterAx) ? getLinePosition(ax, counterAx, alignmentConstants.OPPOSITE_SIDE[ax.side]) : null; - - // Figure out which subplot to draw ticks, labels, & axis lines on - // do this as a separate loop so we already have all the - // _mainAxis and _anchorAxis links set - ax._mainSubplot = findMainSubplot(ax, fullLayout); } - fullLayout._paperdiv - .style({ - width: fullLayout.width + 'px', - height: fullLayout.height + 'px' - }) - .selectAll('.main-svg') - .call(Drawing.setSize, fullLayout.width, fullLayout.height); - - gd._context.setBackground(gd, fullLayout.paper_bgcolor); - - var subplotSelection = fullLayout._paper.selectAll('g.subplot'); - - // figure out which backgrounds we need to draw, and in which layers - // to put them + // figure out which backgrounds we need to draw, + // and in which layers to put them var lowerBackgroundIDs = []; + var backgroundIds = []; var lowerDomains = []; - subplotSelection.each(function(d) { - var subplot = d[0]; - var plotinfo = fullLayout._plots[subplot]; + // no need to draw background when paper and plot color are the same color, + // activate mode just for large splom (which benefit the most from this + // optimization), but this could apply to all cartesian subplots. + var noNeedForBg = ( + Color.opacity(fullLayout.paper_bgcolor) === 1 && + Color.opacity(fullLayout.plot_bgcolor) === 1 && + fullLayout.paper_bgcolor === fullLayout.plot_bgcolor + ); + + for(subplot in fullLayout._plots) { + plotinfo = fullLayout._plots[subplot]; if(plotinfo.mainplot) { // mainplot is a reference to the main plot this one is overlaid on @@ -45354,23 +46824,26 @@ function lsInner(gd) { plotinfo.bg.remove(); } plotinfo.bg = undefined; - return; - } - - var xDomain = plotinfo.xaxis.domain; - var yDomain = plotinfo.yaxis.domain; - var plotgroup = plotinfo.plotgroup; - - if(overlappingDomain(xDomain, yDomain, lowerDomains)) { - var pgNode = plotgroup.node(); - var plotgroupBg = plotinfo.bg = Lib.ensureSingle(plotgroup, 'rect', 'bg'); - pgNode.insertBefore(plotgroupBg.node(), pgNode.childNodes[0]); } else { - plotgroup.select('rect.bg').remove(); - lowerBackgroundIDs.push(subplot); - lowerDomains.push([xDomain, yDomain]); + var xDomain = plotinfo.xaxis.domain; + var yDomain = plotinfo.yaxis.domain; + var plotgroup = plotinfo.plotgroup; + + if(overlappingDomain(xDomain, yDomain, lowerDomains)) { + var pgNode = plotgroup.node(); + var plotgroupBg = plotinfo.bg = Lib.ensureSingle(plotgroup, 'rect', 'bg'); + pgNode.insertBefore(plotgroupBg.node(), pgNode.childNodes[0]); + backgroundIds.push(subplot); + } else { + plotgroup.select('rect.bg').remove(); + lowerDomains.push([xDomain, yDomain]); + if(!noNeedForBg) { + lowerBackgroundIDs.push(subplot); + backgroundIds.push(subplot); + } + } } - }); + } // now create all the lower-layer backgrounds at once now that // we have the list of subplots that need them @@ -45386,13 +46859,13 @@ function lsInner(gd) { fullLayout._plots[subplot].bg = d3.select(this); }); - subplotSelection.each(function(d) { - var subplot = d[0]; - var plotinfo = fullLayout._plots[subplot]; - var xa = plotinfo.xaxis; - var ya = plotinfo.yaxis; + // style all backgrounds + for(i = 0; i < backgroundIds.length; i++) { + plotinfo = fullLayout._plots[backgroundIds[i]]; + xa = plotinfo.xaxis; + ya = plotinfo.yaxis; - if(plotinfo.bg && hasSVGCartesian) { + if(plotinfo.bg) { plotinfo.bg .call(Drawing.setRect, xa._offset - pad, ya._offset - pad, @@ -45400,72 +46873,83 @@ function lsInner(gd) { .call(Color.fill, fullLayout.plot_bgcolor) .style('stroke-width', 0); } + } - // Clip so that data only shows up on the plot area. - var clipId = plotinfo.clipId = 'clip' + fullLayout._uid + subplot + 'plot'; + if(!fullLayout._hasOnlyLargeSploms) { + for(subplot in fullLayout._plots) { + plotinfo = fullLayout._plots[subplot]; + xa = plotinfo.xaxis; + ya = plotinfo.yaxis; - var plotClip = Lib.ensureSingleById(fullLayout._clips, 'clipPath', clipId, function(s) { - s.classed('plotclip', true) - .append('rect'); - }); + // Clip so that data only shows up on the plot area. + var clipId = plotinfo.clipId = 'clip' + fullLayout._uid + subplot + 'plot'; - plotinfo.clipRect = plotClip.select('rect').attr({ - width: xa._length, - height: ya._length - }); + var plotClip = Lib.ensureSingleById(fullLayout._clips, 'clipPath', clipId, function(s) { + s.classed('plotclip', true) + .append('rect'); + }); - Drawing.setTranslate(plotinfo.plot, xa._offset, ya._offset); + plotinfo.clipRect = plotClip.select('rect').attr({ + width: xa._length, + height: ya._length + }); - var plotClipId; - var layerClipId; + Drawing.setTranslate(plotinfo.plot, xa._offset, ya._offset); - if(plotinfo._hasClipOnAxisFalse) { - plotClipId = null; - layerClipId = clipId; - } else { - plotClipId = clipId; - layerClipId = null; + var plotClipId; + var layerClipId; + + if(plotinfo._hasClipOnAxisFalse) { + plotClipId = null; + layerClipId = clipId; + } else { + plotClipId = clipId; + layerClipId = null; + } + + Drawing.setClipUrl(plotinfo.plot, plotClipId, gd); + + // stash layer clipId value (null or same as clipId) + // to DRY up Drawing.setClipUrl calls on trace-module and trace layers + // downstream + plotinfo.layerClipId = layerClipId; } + } - Drawing.setClipUrl(plotinfo.plot, plotClipId); + var xLinesXLeft, xLinesXRight, xLinesYBottom, xLinesYTop, + leftYLineWidth, rightYLineWidth; + var yLinesYBottom, yLinesYTop, yLinesXLeft, yLinesXRight, + connectYBottom, connectYTop; + var extraSubplot; - // stash layer clipId value (null or same as clipId) - // to DRY up Drawing.setClipUrl calls on trace-module and trace layers - // downstream - plotinfo.layerClipId = layerClipId; + function xLinePath(y) { + return 'M' + xLinesXLeft + ',' + y + 'H' + xLinesXRight; + } - // figure out extra axis line and tick positions as needed - if(!hasSVGCartesian) return; + function xLinePathFree(y) { + return 'M' + xa._offset + ',' + y + 'h' + xa._length; + } - var xLinesXLeft, xLinesXRight, xLinesYBottom, xLinesYTop, - leftYLineWidth, rightYLineWidth; - var yLinesYBottom, yLinesYTop, yLinesXLeft, yLinesXRight, - connectYBottom, connectYTop; - var extraSubplot; + function yLinePath(x) { + return 'M' + x + ',' + yLinesYTop + 'V' + yLinesYBottom; + } - function xLinePath(y) { - return 'M' + xLinesXLeft + ',' + y + 'H' + xLinesXRight; - } + function yLinePathFree(x) { + return 'M' + x + ',' + ya._offset + 'v' + ya._length; + } - function xLinePathFree(y) { - return 'M' + xa._offset + ',' + y + 'h' + xa._length; - } + function mainPath(ax, pathFn, pathFnFree) { + if(!ax.showline || subplot !== ax._mainSubplot) return ''; + if(!ax._anchorAxis) return pathFnFree(ax._mainLinePosition); + var out = pathFn(ax._mainLinePosition); + if(ax.mirror) out += pathFn(ax._mainMirrorPosition); + return out; + } - function yLinePath(x) { - return 'M' + x + ',' + yLinesYTop + 'V' + yLinesYBottom; - } - - function yLinePathFree(x) { - return 'M' + x + ',' + ya._offset + 'v' + ya._length; - } - - function mainPath(ax, pathFn, pathFnFree) { - if(!ax.showline || subplot !== ax._mainSubplot) return ''; - if(!ax._anchorAxis) return pathFnFree(ax._mainLinePosition); - var out = pathFn(ax._mainLinePosition); - if(ax.mirror) out += pathFn(ax._mainMirrorPosition); - return out; - } + for(subplot in fullLayout._plots) { + plotinfo = fullLayout._plots[subplot]; + xa = plotinfo.xaxis; + ya = plotinfo.yaxis; /* * x lines get longer where they meet y lines, to make a crisp corner. @@ -45546,57 +47030,13 @@ function lsInner(gd) { ya.linecolor : 'rgba(0,0,0,0)'); } plotinfo.ylines.attr('d', yPath); - }); + } Axes.makeClipPaths(gd); - exports.drawMainTitle(gd); - ModeBar.manage(gd); return gd._promises.length && Promise.all(gd._promises); } -function findMainSubplot(ax, fullLayout) { - var subplotList = fullLayout._subplots; - var ids = subplotList.cartesian.concat(subplotList.gl2d || []); - var mockGd = {_fullLayout: fullLayout}; - - var isX = ax._id.charAt(0) === 'x'; - var anchorAx = ax._mainAxis._anchorAxis; - var mainSubplotID = ''; - var nextBestMainSubplotID = ''; - var anchorID = ''; - - // First try the main ID with the anchor - if(anchorAx) { - anchorID = anchorAx._mainAxis._id; - mainSubplotID = isX ? (ax._id + anchorID) : (anchorID + ax._id); - } - - // Then look for a subplot with the counteraxis overlaying the anchor - // If that fails just use the first subplot including this axis - if(!mainSubplotID || !fullLayout._plots[mainSubplotID]) { - mainSubplotID = ''; - - for(var j = 0; j < ids.length; j++) { - var id = ids[j]; - var yIndex = id.indexOf('y'); - var idPart = isX ? id.substr(0, yIndex) : id.substr(yIndex); - var counterPart = isX ? id.substr(yIndex) : id.substr(0, yIndex); - - if(idPart === ax._id) { - if(!nextBestMainSubplotID) nextBestMainSubplotID = id; - var counterAx = Axes.getFromId(mockGd, counterPart); - if(anchorID && counterAx.overlaying === anchorID) { - mainSubplotID = id; - break; - } - } - } - } - - return mainSubplotID || nextBestMainSubplotID; -} - function shouldShowLinesOrTicks(ax, subplot) { return (ax.ticks || ax.showline) && (subplot === ax._mainSubplot || ax.mirror === 'all' || ax.mirror === 'allticks'); @@ -45651,29 +47091,121 @@ function findCounterAxisLineWidth(ax, side, counterAx, axList) { exports.drawMainTitle = function(gd) { var fullLayout = gd._fullLayout; + var textAnchor = getMainTitleTextAnchor(fullLayout); + var dy = getMainTitleDy(fullLayout); + Titles.draw(gd, 'gtitle', { propContainer: fullLayout, - propName: 'title', + propName: 'title.text', placeholder: fullLayout._dfltTitle.plot, attributes: { - x: fullLayout.width / 2, - y: fullLayout._size.t / 2, - 'text-anchor': 'middle' + x: getMainTitleX(fullLayout, textAnchor), + y: getMainTitleY(fullLayout, dy), + 'text-anchor': textAnchor, + dy: dy } }); }; -// First, see if we need to do arraysToCalcdata -// call it regardless of what change we made, in case -// supplyDefaults brought in an array that was already -// in gd.data but not in gd._fullData previously -exports.doTraceStyle = function(gd) { - for(var i = 0; i < gd.calcdata.length; i++) { - var cdi = gd.calcdata[i], - _module = ((cdi[0] || {}).trace || {})._module || {}, - arraysToCalcdata = _module.arraysToCalcdata; +function getMainTitleX(fullLayout, textAnchor) { + var title = fullLayout.title; + var gs = fullLayout._size; + var hPadShift = 0; - if(arraysToCalcdata) arraysToCalcdata(cdi, cdi[0].trace); + if(textAnchor === SVG_TEXT_ANCHOR_START) { + hPadShift = title.pad.l; + } else if(textAnchor === SVG_TEXT_ANCHOR_END) { + hPadShift = -title.pad.r; + } + + switch(title.xref) { + case 'paper': + return gs.l + gs.w * title.x + hPadShift; + case 'container': + default: + return fullLayout.width * title.x + hPadShift; + } +} + +function getMainTitleY(fullLayout, dy) { + var title = fullLayout.title; + var gs = fullLayout._size; + var vPadShift = 0; + + if(dy === '0em' || !dy) { + vPadShift = -title.pad.b; + } else if(dy === alignmentConstants.CAP_SHIFT + 'em') { + vPadShift = title.pad.t; + } + + if(title.y === 'auto') { + return gs.t / 2; + } else { + switch(title.yref) { + case 'paper': + return gs.t + gs.h - gs.h * title.y + vPadShift; + case 'container': + default: + return fullLayout.height - fullLayout.height * title.y + vPadShift; + } + } +} + +function getMainTitleTextAnchor(fullLayout) { + var title = fullLayout.title; + + var textAnchor = SVG_TEXT_ANCHOR_MIDDLE; + if(Lib.isRightAnchor(title)) { + textAnchor = SVG_TEXT_ANCHOR_END; + } else if(Lib.isLeftAnchor(title)) { + textAnchor = SVG_TEXT_ANCHOR_START; + } + + return textAnchor; +} + +function getMainTitleDy(fullLayout) { + var title = fullLayout.title; + + var dy = '0em'; + if(Lib.isTopAnchor(title)) { + dy = alignmentConstants.CAP_SHIFT + 'em'; + } else if(Lib.isMiddleAnchor(title)) { + dy = alignmentConstants.MID_SHIFT + 'em'; + } + + return dy; +} + +exports.doTraceStyle = function(gd) { + var calcdata = gd.calcdata; + var editStyleCalls = []; + var i; + + for(i = 0; i < calcdata.length; i++) { + var cd = calcdata[i]; + var cd0 = cd[0] || {}; + var trace = cd0.trace || {}; + var _module = trace._module || {}; + + // See if we need to do arraysToCalcdata + // call it regardless of what change we made, in case + // supplyDefaults brought in an array that was already + // in gd.data but not in gd._fullData previously + var arraysToCalcdata = _module.arraysToCalcdata; + if(arraysToCalcdata) arraysToCalcdata(cd, trace); + + var editStyle = _module.editStyle; + if(editStyle) editStyleCalls.push({fn: editStyle, cd0: cd0}); + } + + if(editStyleCalls.length) { + for(i = 0; i < editStyleCalls.length; i++) { + var edit = editStyleCalls[i]; + edit.fn(gd, edit.cd0); + } + clearGlCanvases(gd); + exports.redrawReglTraces(gd); } Plots.style(gd); @@ -45687,8 +47219,8 @@ exports.doColorBars = function(gd) { var cdi0 = gd.calcdata[i][0]; if((cdi0.t || {}).cb) { - var trace = cdi0.trace, - cb = cdi0.t.cb; + var trace = cdi0.trace; + var cb = cdi0.t.cb; if(Registry.traceIs(trace, 'contour')) { cb.line({ @@ -45721,16 +47253,13 @@ exports.doLegend = function(gd) { return Plots.previousPromises(gd); }; -exports.doTicksRelayout = function(gd, rangesAltered) { - if(rangesAltered) { - Axes.doTicks(gd, Object.keys(rangesAltered), true); - } else { - Axes.doTicks(gd, 'redraw'); - } +exports.doTicksRelayout = function(gd) { + Axes.draw(gd, 'redraw'); if(gd._fullLayout._hasOnlyLargeSploms) { + Registry.subplotsRegistry.splom.updateGrid(gd); clearGlCanvases(gd); - Registry.subplotsRegistry.splom.plot(gd); + exports.redrawReglTraces(gd); } exports.drawMainTitle(gd); @@ -45783,6 +47312,8 @@ exports.drawData = function(gd) { basePlotModules[i].plot(gd); } + exports.redrawReglTraces(gd); + // styling separate from drawing Plots.style(gd); @@ -45796,12 +47327,70 @@ exports.drawData = function(gd) { return Plots.previousPromises(gd); }; +// Draw (or redraw) all regl-based traces in one go, +// useful during drag and selection where buffers of targeted traces are updated, +// but all traces need to be redrawn following clearGlCanvases. +// +// Note that _module.plot for regl trace does NOT draw things +// on the canvas, they only update the buffers. +// Drawing is perform here. +// +// TODO try adding per-subplot option using gl.SCISSOR_TEST for +// non-overlaying, disjoint subplots. +// +// TODO try to include parcoords in here. +// https://github.com/plotly/plotly.js/issues/3069 +exports.redrawReglTraces = function(gd) { + var fullLayout = gd._fullLayout; + + if(fullLayout._has('regl')) { + var fullData = gd._fullData; + var cartesianIds = []; + var polarIds = []; + var i, sp; + + if(fullLayout._hasOnlyLargeSploms) { + fullLayout._splomGrid.draw(); + } + + // N.B. + // - Loop over fullData (not _splomScenes) to preserve splom trace-to-trace ordering + // - Fill list if subplot ids (instead of fullLayout._subplots) to handle cases where all traces + // of a given module are `visible !== true` + for(i = 0; i < fullData.length; i++) { + var trace = fullData[i]; + + if(trace.visible === true) { + if(trace.type === 'splom') { + fullLayout._splomScenes[trace.uid].draw(); + } else if(trace.type === 'scattergl') { + Lib.pushUnique(cartesianIds, trace.xaxis + trace.yaxis); + } else if(trace.type === 'scatterpolargl') { + Lib.pushUnique(polarIds, trace.subplot); + } + } + } + + for(i = 0; i < cartesianIds.length; i++) { + sp = fullLayout._plots[cartesianIds[i]]; + if(sp._scene) sp._scene.draw(); + } + + for(i = 0; i < polarIds.length; i++) { + sp = fullLayout[polarIds[i]]._subplot; + if(sp._scene) sp._scene.draw(); + } + } +}; + exports.doAutoRangeAndConstraints = function(gd) { var axList = Axes.list(gd, '', true); for(var i = 0; i < axList.length; i++) { var ax = axList[i]; cleanAxisConstraints(gd, ax); + // in case margins changed, update scale + ax.setScale(); doAutoRange(gd, ax); } @@ -45833,9 +47422,9 @@ exports.drawMarginPushers = function(gd) { Registry.getComponentMethod('updatemenus', 'draw')(gd); }; -},{"../components/color":50,"../components/drawing":75,"../components/modebar":113,"../components/titles":141,"../constants/alignment":148,"../lib":169,"../lib/clear_gl_canvases":157,"../plots/cartesian/autorange":213,"../plots/cartesian/axes":214,"../plots/cartesian/constraints":221,"../plots/plots":246,"../registry":259,"d3":16}],206:[function(_dereq_,module,exports){ +},{"../components/color":51,"../components/drawing":72,"../components/modebar":110,"../components/titles":139,"../constants/alignment":146,"../lib":168,"../lib/clear_gl_canvases":157,"../plots/cartesian/autorange":211,"../plots/cartesian/axes":212,"../plots/cartesian/constraints":220,"../plots/plots":245,"../registry":257,"d3":16}],204:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -45851,7 +47440,7 @@ var PlotSchema = _dereq_('./plot_schema'); var Plots = _dereq_('../plots/plots'); var plotAttributes = _dereq_('../plots/attributes'); var Template = _dereq_('./plot_template'); -var dfltConfig = _dereq_('./plot_config'); +var dfltConfig = _dereq_('./plot_config').dfltConfig; /** * Plotly.makeTemplate: create a template off an existing figure to reuse @@ -45860,14 +47449,15 @@ var dfltConfig = _dereq_('./plot_config'); * Note: separated from the rest of templates because otherwise we get circular * references due to PlotSchema. * - * @param {object|DOM element} figure: The figure to base the template on + * @param {object|DOM element|string} figure: The figure to base the template on * should contain a trace array `figure.data` * and a layout object `figure.layout` * @returns {object} template: the extracted template - can then be used as * `layout.template` in another figure. */ exports.makeTemplate = function(figure) { - figure = Lib.extendDeep({_context: dfltConfig}, figure); + figure = Lib.isPlainObject(figure) ? figure : Lib.getGraphDiv(figure); + figure = Lib.extendDeep({_context: dfltConfig}, {data: figure.data, layout: figure.layout}); Plots.supplyDefaults(figure); var data = figure.data || []; var layout = figure.layout || {}; @@ -46307,9 +47897,9 @@ function format(opts) { return opts; } -},{"../lib":169,"../plots/attributes":211,"../plots/plots":246,"./plot_config":202,"./plot_schema":203,"./plot_template":204}],207:[function(_dereq_,module,exports){ +},{"../lib":168,"../plots/attributes":209,"../plots/plots":245,"./plot_config":200,"./plot_schema":201,"./plot_template":202}],205:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -46427,6 +48017,7 @@ function toImage(gd, opts) { // extend config for static plot var configImage = Lib.extendFlat({}, config, { + _exportedPlot: true, staticPlot: true, setBackground: setBackground }); @@ -46497,9 +48088,9 @@ function toImage(gd, opts) { module.exports = toImage; -},{"../lib":169,"../snapshot/helpers":263,"../snapshot/svgtoimg":265,"../snapshot/tosvg":267,"./plot_api":201}],208:[function(_dereq_,module,exports){ +},{"../lib":168,"../snapshot/helpers":261,"../snapshot/svgtoimg":263,"../snapshot/tosvg":265,"./plot_api":199}],206:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -46511,7 +48102,7 @@ module.exports = toImage; var Lib = _dereq_('../lib'); var Plots = _dereq_('../plots/plots'); var PlotSchema = _dereq_('./plot_schema'); -var dfltConfig = _dereq_('./plot_config'); +var dfltConfig = _dereq_('./plot_config').dfltConfig; var isPlainObject = Lib.isPlainObject; var isArray = Array.isArray; @@ -46573,21 +48164,21 @@ module.exports = function validate(data, layout) { Plots.supplyDefaults(gd); - var dataOut = gd._fullData, - len = dataIn.length; + var dataOut = gd._fullData; + var len = dataIn.length; for(var i = 0; i < len; i++) { - var traceIn = dataIn[i], - base = ['data', i]; + var traceIn = dataIn[i]; + var base = ['data', i]; if(!isPlainObject(traceIn)) { errorList.push(format('object', base)); continue; } - var traceOut = dataOut[i], - traceType = traceOut.type, - traceSchema = schema.traces[traceType].attributes; + var traceOut = dataOut[i]; + var traceType = traceOut.type; + var traceSchema = schema.traces[traceType].attributes; // PlotSchema does something fancy with trace 'type', reset it here // to make the trace schema compatible with Lib.validate. @@ -46602,8 +48193,8 @@ module.exports = function validate(data, layout) { crawl(traceIn, traceOut, traceSchema, errorList, base); - var transformsIn = traceIn.transforms, - transformsOut = traceOut.transforms; + var transformsIn = traceIn.transforms; + var transformsOut = traceOut.transforms; if(transformsIn) { if(!isArray(transformsIn)) { @@ -46613,8 +48204,8 @@ module.exports = function validate(data, layout) { base.push('transforms'); for(var j = 0; j < transformsIn.length; j++) { - var path = ['transforms', j], - transformType = transformsIn[j].type; + var path = ['transforms', j]; + var transformType = transformsIn[j].type; if(!isPlainObject(transformsIn[j])) { errorList.push(format('object', base, path)); @@ -46636,8 +48227,8 @@ module.exports = function validate(data, layout) { } } - var layoutOut = gd._fullLayout, - layoutSchema = fillLayoutSchema(schema, dataOut); + var layoutOut = gd._fullLayout; + var layoutSchema = fillLayoutSchema(schema, dataOut); crawl(layoutIn, layoutOut, layoutSchema, errorList, 'layout'); @@ -46659,8 +48250,8 @@ function crawl(objIn, objOut, schema, list, base, path) { var p = path.slice(); p.push(k); - var valIn = objIn[k], - valOut = objOut[k]; + var valIn = objIn[k]; + var valOut = objOut[k]; var nestedSchema = getNestedSchema(schema, k); var isInfoArray = (nestedSchema || {}).valType === 'info_array'; @@ -46720,8 +48311,8 @@ function crawl(objIn, objOut, schema, list, base, path) { } } else if(nestedSchema.items && !isInfoArray && isArray(valIn)) { - var _nestedSchema = items[Object.keys(items)[0]], - indexList = []; + var _nestedSchema = items[Object.keys(items)[0]]; + var indexList = []; var j, _p; @@ -46892,9 +48483,9 @@ function format(code, base, path, valIn, valOut) { } function isInSchema(schema, key) { - var parts = splitKey(key), - keyMinusId = parts.keyMinusId, - id = parts.id; + var parts = splitKey(key); + var keyMinusId = parts.keyMinusId; + var id = parts.id; if((keyMinusId in schema) && schema[keyMinusId]._isSubplotObj && id) { return true; @@ -46943,9 +48534,9 @@ function convertPathToAttributeString(path) { return astr; } -},{"../lib":169,"../plots/plots":246,"./plot_config":202,"./plot_schema":203}],209:[function(_dereq_,module,exports){ +},{"../lib":168,"../plots/plots":245,"./plot_config":200,"./plot_schema":201}],207:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -46996,6 +48587,7 @@ module.exports = { min: 0, dflt: 500, + editType: 'none', }, easing: { @@ -47040,14 +48632,23 @@ module.exports = { 'bounce-in-out' ], + editType: 'none', }, + ordering: { + valType: 'enumerated', + values: ['layout first', 'traces first'], + dflt: 'layout first', + + editType: 'none', + + } } }; -},{}],210:[function(_dereq_,module,exports){ +},{}],208:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47141,9 +48742,9 @@ module.exports = function handleArrayContainerDefaults(parentObjIn, parentObjOut return contOut; }; -},{"../lib":169,"../plot_api/plot_template":204}],211:[function(_dereq_,module,exports){ +},{"../lib":168,"../plot_api/plot_template":202}],209:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47203,11 +48804,14 @@ module.exports = { uid: { valType: 'string', - editType: 'plot' + editType: 'plot', + anim: true, + }, ids: { valType: 'data_array', editType: 'calc', + anim: true, }, customdata: { @@ -47263,12 +48867,18 @@ module.exports = { _isLinkedToArray: 'transform', editType: 'calc', + }, + uirevision: { + valType: 'any', + + editType: 'none', + } }; -},{"../components/fx/attributes":84}],212:[function(_dereq_,module,exports){ +},{"../components/fx/attributes":81}],210:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47295,9 +48905,9 @@ module.exports = { } }; -},{}],213:[function(_dereq_,module,exports){ +},{}],211:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47310,6 +48920,7 @@ var isNumeric = _dereq_('fast-isnumeric'); var Lib = _dereq_('../../lib'); var FP_SAFE = _dereq_('../../constants/numerical').FP_SAFE; +var Registry = _dereq_('../../registry'); module.exports = { getAutoRange: getAutoRange, @@ -47534,10 +49145,6 @@ function concatExtremes(gd, ax) { } function doAutoRange(gd, ax) { - if(!ax._length) ax.setScale(); - - var axIn; - if(ax.autorange) { ax.range = getAutoRange(gd, ax); @@ -47547,20 +49154,28 @@ function doAutoRange(gd, ax) { // doAutoRange will get called on fullLayout, // but we want to report its results back to layout - axIn = ax._input; + var axIn = ax._input; + + // before we edit _input, store preGUI values + var edits = {}; + edits[ax._attr + '.range'] = ax.range; + edits[ax._attr + '.autorange'] = ax.autorange; + Registry.call('_storeDirectGUIEdit', gd.layout, gd._fullLayout._preGUI, edits); + axIn.range = ax.range.slice(); axIn.autorange = ax.autorange; } - if(ax._anchorAxis && ax._anchorAxis.rangeslider) { - var axeRangeOpts = ax._anchorAxis.rangeslider[ax._name]; + var anchorAx = ax._anchorAxis; + + if(anchorAx && anchorAx.rangeslider) { + var axeRangeOpts = anchorAx.rangeslider[ax._name]; if(axeRangeOpts) { if(axeRangeOpts.rangemode === 'auto') { axeRangeOpts.range = getAutoRange(gd, ax); } } - axIn = ax._anchorAxis._input; - axIn.rangeslider[ax._name] = Lib.extendFlat({}, axeRangeOpts); + anchorAx._input.rangeslider[ax._name] = Lib.extendFlat({}, axeRangeOpts); } } @@ -47583,7 +49198,7 @@ function doAutoRange(gd, ax) { * - ax.d2l * @param {array} data: * array of numbers (i.e. already run though ax.d2c) - * @param {object} options: + * @param {object} opts: * available keys are: * vpad: (number or number array) pad values (data value +-vpad) * ppad: (number or number array) pad pixels (pixel location +-ppad) @@ -47601,17 +49216,18 @@ function doAutoRange(gd, ax) { * - val {number} * - pad {number} * - extrappad {number} + * - opts {object}: a ref to the passed "options" object */ -function findExtremes(ax, data, options) { - if(!options) options = {}; +function findExtremes(ax, data, opts) { + if(!opts) opts = {}; if(!ax._m) ax.setScale(); var minArray = []; var maxArray = []; var len = data.length; - var extrapad = options.padded || false; - var tozero = options.tozero && (ax.type === 'linear' || ax.type === '-'); + var extrapad = opts.padded || false; + var tozero = opts.tozero && (ax.type === 'linear' || ax.type === '-'); var isLog = ax.type === 'log'; var hasArrayOption = false; var i, v, di, dmin, dmax, ppadiplus, ppadiminus, vmin, vmax; @@ -47628,11 +49244,11 @@ function findExtremes(ax, data, options) { } var ppadplus = makePadAccessor((ax._m > 0 ? - options.ppadplus : options.ppadminus) || options.ppad || 0); + opts.ppadplus : opts.ppadminus) || opts.ppad || 0); var ppadminus = makePadAccessor((ax._m > 0 ? - options.ppadminus : options.ppadplus) || options.ppad || 0); - var vpadplus = makePadAccessor(options.vpadplus || options.vpad); - var vpadminus = makePadAccessor(options.vpadminus || options.vpad); + opts.ppadminus : opts.ppadplus) || opts.ppad || 0); + var vpadplus = makePadAccessor(opts.vpadplus || opts.vpad); + var vpadminus = makePadAccessor(opts.vpadminus || opts.vpad); if(!hasArrayOption) { // with no arrays other than `data` we don't need to consider @@ -47696,7 +49312,11 @@ function findExtremes(ax, data, options) { for(i = 0; i < iMax; i++) addItem(i); for(i = len - 1; i >= iMax; i--) addItem(i); - return {min: minArray, max: maxArray}; + return { + min: minArray, + max: maxArray, + opts: opts + }; } function collapseMinArray(array, newVal, newPad, opts) { @@ -47778,9 +49398,9 @@ function goodNumber(v) { function lessOrEqual(v0, v1) { return v0 <= v1; } function greaterOrEqual(v0, v1) { return v0 >= v1; } -},{"../../constants/numerical":151,"../../lib":169,"fast-isnumeric":18}],214:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"../../registry":257,"fast-isnumeric":18}],212:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47802,6 +49422,7 @@ var Color = _dereq_('../../components/color'); var Drawing = _dereq_('../../components/drawing'); var axAttrs = _dereq_('./layout_attributes'); +var cleanTicks = _dereq_('./clean_ticks'); var constants = _dereq_('../../constants/numerical'); var ONEAVGYEAR = constants.ONEAVGYEAR; @@ -47912,6 +49533,39 @@ axes.cleanPosition = function(pos, gd, axRef) { return cleanPos(pos); }; +axes.redrawComponents = function(gd, axIds) { + axIds = axIds ? axIds : axes.listIds(gd); + + var fullLayout = gd._fullLayout; + + function _redrawOneComp(moduleName, methodName, stashName, shortCircuit) { + var method = Registry.getComponentMethod(moduleName, methodName); + var stash = {}; + + for(var i = 0; i < axIds.length; i++) { + var ax = fullLayout[axes.id2name(axIds[i])]; + var indices = ax[stashName]; + + for(var j = 0; j < indices.length; j++) { + var ind = indices[j]; + + if(!stash[ind]) { + method(gd, ind); + stash[ind] = 1; + // once is enough for images (which doesn't use the `i` arg anyway) + if(shortCircuit) return; + } + } + } + } + + // annotations and shapes 'draw' method is slow, + // use the finer-grained 'drawOne' method instead + _redrawOneComp('annotations', 'drawOne', '_annIndices'); + _redrawOneComp('shapes', 'drawOne', '_shapeIndices'); + _redrawOneComp('images', 'draw', '_imgIndices', true); +}; + var getDataConversions = axes.getDataConversions = function(gd, trace, target, targetArray) { var ax; @@ -47937,6 +49591,7 @@ var getDataConversions = axes.getDataConversions = function(gd, trace, target, t ax.d2c(targetArray[i]); } } + // TODO what to do for transforms? } else { ax = axes.getFromTrace(gd, trace, d2cTarget); } @@ -47977,7 +49632,7 @@ axes.counterLetter = function(id) { axes.minDtick = function(ax, newDiff, newFirst, allow) { // doesn't make sense to do forced min dTick on log or category axes, // and the plot itself may decide to cancel (ie non-grouped bars) - if(['log', 'category'].indexOf(ax.type) !== -1 || !allow) { + if(['log', 'category', 'multicategory'].indexOf(ax.type) !== -1 || !allow) { ax._minDtick = 0; } // undefined means there's nothing there yet @@ -48009,18 +49664,15 @@ axes.minDtick = function(ax, newDiff, newFirst, allow) { // save a copy of the initial axis ranges in fullLayout // use them in mode bar and dblclick events axes.saveRangeInitial = function(gd, overwrite) { - var axList = axes.list(gd, '', true), - hasOneAxisChanged = false; + var axList = axes.list(gd, '', true); + var hasOneAxisChanged = false; for(var i = 0; i < axList.length; i++) { var ax = axList[i]; - var isNew = (ax._rangeInitial === undefined); - var hasChanged = ( - isNew || !( - ax.range[0] === ax._rangeInitial[0] && - ax.range[1] === ax._rangeInitial[1] - ) + var hasChanged = isNew || !( + ax.range[0] === ax._rangeInitial[0] && + ax.range[1] === ax._rangeInitial[1] ); if((isNew && ax.autorange === false) || (overwrite && hasChanged)) { @@ -48034,21 +49686,16 @@ axes.saveRangeInitial = function(gd, overwrite) { // save a copy of the initial spike visibility axes.saveShowSpikeInitial = function(gd, overwrite) { - var axList = axes.list(gd, '', true), - hasOneAxisChanged = false, - allSpikesEnabled = 'on'; + var axList = axes.list(gd, '', true); + var hasOneAxisChanged = false; + var allSpikesEnabled = 'on'; for(var i = 0; i < axList.length; i++) { var ax = axList[i]; - var isNew = (ax._showSpikeInitial === undefined); - var hasChanged = ( - isNew || !( - ax.showspikes === ax._showspikes - ) - ); + var hasChanged = isNew || !(ax.showspikes === ax._showspikes); - if((isNew) || (overwrite && hasChanged)) { + if(isNew || (overwrite && hasChanged)) { ax._showSpikeInitial = ax.showspikes; hasOneAxisChanged = true; } @@ -48061,51 +49708,29 @@ axes.saveShowSpikeInitial = function(gd, overwrite) { return hasOneAxisChanged; }; -axes.autoBin = function(data, ax, nbins, is2d, calendar) { - var dataMin = Lib.aggNums(Math.min, null, data), - dataMax = Lib.aggNums(Math.max, null, data); +axes.autoBin = function(data, ax, nbins, is2d, calendar, size) { + var dataMin = Lib.aggNums(Math.min, null, data); + var dataMax = Lib.aggNums(Math.max, null, data); - if(!calendar) calendar = ax.calendar; - - if(ax.type === 'category') { + if(ax.type === 'category' || ax.type === 'multicategory') { return { start: dataMin - 0.5, end: dataMax + 0.5, - size: 1, + size: Math.max(1, Math.round(size) || 1), _dataSpan: dataMax - dataMin, }; } - var size0; - if(nbins) size0 = ((dataMax - dataMin) / nbins); - else { - // totally auto: scale off std deviation so the highest bin is - // somewhat taller than the total number of bins, but don't let - // the size get smaller than the 'nice' rounded down minimum - // difference between values - var distinctData = Lib.distinctVals(data), - msexp = Math.pow(10, Math.floor( - Math.log(distinctData.minDiff) / Math.LN10)), - minSize = msexp * Lib.roundUp( - distinctData.minDiff / msexp, [0.9, 1.9, 4.9, 9.9], true); - size0 = Math.max(minSize, 2 * Lib.stdev(data) / - Math.pow(data.length, is2d ? 0.25 : 0.4)); + if(!calendar) calendar = ax.calendar; - // fallback if ax.d2c output BADNUMs - // e.g. when user try to plot categorical bins - // on a layout.xaxis.type: 'linear' - if(!isNumeric(size0)) size0 = 1; - } - - // piggyback off autotick code to make "nice" bin sizes + // piggyback off tick code to make "nice" bin sizes and edges var dummyAx; if(ax.type === 'log') { dummyAx = { type: 'linear', range: [dataMin, dataMax] }; - } - else { + } else { dummyAx = { type: ax.type, range: Lib.simpleMap([dataMin, dataMax], ax.c2r, 0, calendar), @@ -48114,19 +49739,51 @@ axes.autoBin = function(data, ax, nbins, is2d, calendar) { } axes.setConvert(dummyAx); - axes.autoTicks(dummyAx, size0); + size = size && cleanTicks.dtick(size, dummyAx.type); + + if(size) { + dummyAx.dtick = size; + dummyAx.tick0 = cleanTicks.tick0(undefined, dummyAx.type, calendar); + } + else { + var size0; + if(nbins) size0 = ((dataMax - dataMin) / nbins); + else { + // totally auto: scale off std deviation so the highest bin is + // somewhat taller than the total number of bins, but don't let + // the size get smaller than the 'nice' rounded down minimum + // difference between values + var distinctData = Lib.distinctVals(data); + var msexp = Math.pow(10, Math.floor( + Math.log(distinctData.minDiff) / Math.LN10)); + var minSize = msexp * Lib.roundUp( + distinctData.minDiff / msexp, [0.9, 1.9, 4.9, 9.9], true); + size0 = Math.max(minSize, 2 * Lib.stdev(data) / + Math.pow(data.length, is2d ? 0.25 : 0.4)); + + // fallback if ax.d2c output BADNUMs + // e.g. when user try to plot categorical bins + // on a layout.xaxis.type: 'linear' + if(!isNumeric(size0)) size0 = 1; + } + + axes.autoTicks(dummyAx, size0); + } + + + var finalSize = dummyAx.dtick; var binStart = axes.tickIncrement( - axes.tickFirst(dummyAx), dummyAx.dtick, 'reverse', calendar); + axes.tickFirst(dummyAx), finalSize, 'reverse', calendar); var binEnd, bincount; // check for too many data points right at the edges of bins // (>50% within 1% of bin edges) or all data points integral // and offset the bins accordingly - if(typeof dummyAx.dtick === 'number') { + if(typeof finalSize === 'number') { binStart = autoShiftNumericBins(binStart, data, dummyAx, dataMin, dataMax); - bincount = 1 + Math.floor((dataMax - binStart) / dummyAx.dtick); - binEnd = binStart + bincount * dummyAx.dtick; + bincount = 1 + Math.floor((dataMax - binStart) / finalSize); + binEnd = binStart + bincount * finalSize; } else { // month ticks - should be the only nonlinear kind we have at this point. @@ -48135,7 +49792,7 @@ axes.autoBin = function(data, ax, nbins, is2d, calendar) { // we bin it on a linear axis (which one could argue against, but that's // a separate issue) if(dummyAx.dtick.charAt(0) === 'M') { - binStart = autoShiftMonthBins(binStart, data, dummyAx.dtick, dataMin, calendar); + binStart = autoShiftMonthBins(binStart, data, finalSize, dataMin, calendar); } // calculate the endpoint for nonlinear ticks - you have to @@ -48143,7 +49800,7 @@ axes.autoBin = function(data, ax, nbins, is2d, calendar) { binEnd = binStart; bincount = 0; while(binEnd <= dataMax) { - binEnd = axes.tickIncrement(binEnd, dummyAx.dtick, false, calendar); + binEnd = axes.tickIncrement(binEnd, finalSize, false, calendar); bincount++; } } @@ -48151,17 +49808,17 @@ axes.autoBin = function(data, ax, nbins, is2d, calendar) { return { start: ax.c2r(binStart, 0, calendar), end: ax.c2r(binEnd, 0, calendar), - size: dummyAx.dtick, + size: finalSize, _dataSpan: dataMax - dataMin }; }; function autoShiftNumericBins(binStart, data, ax, dataMin, dataMax) { - var edgecount = 0, - midcount = 0, - intcount = 0, - blankCount = 0; + var edgecount = 0; + var midcount = 0; + var intcount = 0; + var blankCount = 0; function nearEdge(v) { // is a value within 1% of a bin edge? @@ -48252,14 +49909,14 @@ axes.prepTicks = function(ax) { // calculate max number of (auto) ticks to display based on plot size if(ax.tickmode === 'auto' || !ax.dtick) { - var nt = ax.nticks, - minPx; + var nt = ax.nticks; + var minPx; + if(!nt) { - if(ax.type === 'category') { + if(ax.type === 'category' || ax.type === 'multicategory') { minPx = ax.tickfont ? (ax.tickfont.size || 12) * 1.2 : 15; nt = ax._length / minPx; - } - else { + } else { minPx = ax._id.charAt(0) === 'y' ? 40 : 80; nt = Lib.constrain(ax._length / minPx, 4, 9) + 1; } @@ -48321,7 +49978,7 @@ axes.calcTicks = function calcTicks(ax) { // return the full set of tick vals var vals = []; - if(ax.type === 'category') { + if(ax.type === 'category' || ax.type === 'multicategory') { endTick = (axrev) ? Math.max(-0.5, endTick) : Math.min(ax._categories.length - 0.5, endTick); } @@ -48365,23 +50022,22 @@ axes.calcTicks = function calcTicks(ax) { }; function arrayTicks(ax) { - var vals = ax.tickvals, - text = ax.ticktext, - ticksOut = new Array(vals.length), - rng = Lib.simpleMap(ax.range, ax.r2l), - r0expanded = rng[0] * 1.0001 - rng[1] * 0.0001, - r1expanded = rng[1] * 1.0001 - rng[0] * 0.0001, - tickMin = Math.min(r0expanded, r1expanded), - tickMax = Math.max(r0expanded, r1expanded), - vali, - i, - j = 0; + var vals = ax.tickvals; + var text = ax.ticktext; + var ticksOut = new Array(vals.length); + var rng = Lib.simpleMap(ax.range, ax.r2l); + var r0expanded = rng[0] * 1.0001 - rng[1] * 0.0001; + var r1expanded = rng[1] * 1.0001 - rng[0] * 0.0001; + var tickMin = Math.min(r0expanded, r1expanded); + var tickMax = Math.max(r0expanded, r1expanded); + var j = 0; // without a text array, just format the given values as any other ticks // except with more precision to the numbers if(!Array.isArray(text)) text = []; // make sure showing ticks doesn't accidentally add new categories + // TODO multicategory, if we allow ticktext / tickvals var tickVal2l = ax.type === 'category' ? ax.d2l_noadd : ax.d2l; // array ticks on log axes always show the full number @@ -48390,8 +50046,8 @@ function arrayTicks(ax) { ax.dtick = 'L' + Math.pow(10, Math.floor(Math.min(ax.range[0], ax.range[1])) - 1); } - for(i = 0; i < vals.length; i++) { - vali = tickVal2l(vals[i]); + for(var i = 0; i < vals.length; i++) { + var vali = tickVal2l(vals[i]); if(vali > tickMin && vali < tickMax) { if(text[i] === undefined) ticksOut[j] = axes.tickText(ax, vali); else ticksOut[j] = tickTextObj(ax, vali, String(text[i])); @@ -48404,17 +50060,17 @@ function arrayTicks(ax) { return ticksOut; } -var roundBase10 = [2, 5, 10], - roundBase24 = [1, 2, 3, 6, 12], - roundBase60 = [1, 2, 5, 10, 15, 30], - // 2&3 day ticks are weird, but need something btwn 1&7 - roundDays = [1, 2, 3, 7, 14], - // approx. tick positions for log axes, showing all (1) and just 1, 2, 5 (2) - // these don't have to be exact, just close enough to round to the right value - roundLog1 = [-0.046, 0, 0.301, 0.477, 0.602, 0.699, 0.778, 0.845, 0.903, 0.954, 1], - roundLog2 = [-0.301, 0, 0.301, 0.699, 1], - // N.B. `thetaunit; 'radians' angular axes must be converted to degrees - roundAngles = [15, 30, 45, 90, 180]; +var roundBase10 = [2, 5, 10]; +var roundBase24 = [1, 2, 3, 6, 12]; +var roundBase60 = [1, 2, 5, 10, 15, 30]; +// 2&3 day ticks are weird, but need something btwn 1&7 +var roundDays = [1, 2, 3, 7, 14]; +// approx. tick positions for log axes, showing all (1) and just 1, 2, 5 (2) +// these don't have to be exact, just close enough to round to the right value +var roundLog1 = [-0.046, 0, 0.301, 0.477, 0.602, 0.699, 0.778, 0.845, 0.903, 0.954, 1]; +var roundLog2 = [-0.301, 0, 0.301, 0.699, 1]; +// N.B. `thetaunit; 'radians' angular axes must be converted to degrees +var roundAngles = [15, 30, 45, 90, 180]; function roundDTick(roughDTick, base, roundingSet) { return base * Lib.roundUp(roughDTick / base, roundingSet); @@ -48505,7 +50161,7 @@ axes.autoTicks = function(ax, roughDTick) { ax.dtick = (roughDTick > 0.3) ? 'D2' : 'D1'; } } - else if(ax.type === 'category') { + else if(ax.type === 'category' || ax.type === 'multicategory') { ax.tick0 = 0; ax.dtick = Math.ceil(Math.max(roughDTick, 1)); } @@ -48545,7 +50201,7 @@ function autoTickRound(ax) { dtick = 1; } - if(ax.type === 'category') { + if(ax.type === 'category' || ax.type === 'multicategory') { ax._tickround = null; } if(ax.type === 'date') { @@ -48553,9 +50209,9 @@ function autoTickRound(ax) { // not necessarily *all* the information in tick0 though, if it's really odd // minimal string length for tick0: 'd' is 10, 'M' is 16, 'S' is 19 // take off a leading minus (year < 0) and i (intercalary month) so length is consistent - var tick0ms = ax.r2l(ax.tick0), - tick0str = ax.l2r(tick0ms).replace(/(^-|i)/g, ''), - tick0len = tick0str.length; + var tick0ms = ax.r2l(ax.tick0); + var tick0str = ax.l2r(tick0ms).replace(/(^-|i)/g, ''); + var tick0len = tick0str.length; if(String(dtick).charAt(0) === 'M') { // any tick0 more specific than a year: alway show the full date @@ -48613,8 +50269,8 @@ axes.tickIncrement = function(x, dtick, axrev, calendar) { if(isNumeric(dtick)) return x + axSign * dtick; // everything else is a string, one character plus a number - var tType = dtick.charAt(0), - dtSigned = axSign * Number(dtick.substr(1)); + var tType = dtick.charAt(0); + var dtSigned = axSign * Number(dtick.substr(1)); // Dates: months (or years - see Lib.incrementMonth) if(tType === 'M') return Lib.incrementMonth(x, dtSigned, calendar); @@ -48625,9 +50281,9 @@ axes.tickIncrement = function(x, dtick, axrev, calendar) { // log10 of 2,5,10, or all digits (logs just have to be // close enough to round) else if(tType === 'D') { - var tickset = (dtick === 'D2') ? roundLog2 : roundLog1, - x2 = x + axSign * 0.01, - frac = Lib.roundUp(Lib.mod(x2, 1), tickset, axrev); + var tickset = (dtick === 'D2') ? roundLog2 : roundLog1; + var x2 = x + axSign * 0.01; + var frac = Lib.roundUp(Lib.mod(x2, 1), tickset, axrev); return Math.floor(x2) + Math.log(d3.round(Math.pow(10, frac), 1)) / Math.LN10; @@ -48637,36 +50293,34 @@ axes.tickIncrement = function(x, dtick, axrev, calendar) { // calculate the first tick on an axis axes.tickFirst = function(ax) { - var r2l = ax.r2l || Number, - rng = Lib.simpleMap(ax.range, r2l), - axrev = rng[1] < rng[0], - sRound = axrev ? Math.floor : Math.ceil, - // add a tiny extra bit to make sure we get ticks - // that may have been rounded out - r0 = rng[0] * 1.0001 - rng[1] * 0.0001, - dtick = ax.dtick, - tick0 = r2l(ax.tick0); + var r2l = ax.r2l || Number; + var rng = Lib.simpleMap(ax.range, r2l); + var axrev = rng[1] < rng[0]; + var sRound = axrev ? Math.floor : Math.ceil; + // add a tiny extra bit to make sure we get ticks + // that may have been rounded out + var r0 = rng[0] * 1.0001 - rng[1] * 0.0001; + var dtick = ax.dtick; + var tick0 = r2l(ax.tick0); if(isNumeric(dtick)) { var tmin = sRound((r0 - tick0) / dtick) * dtick + tick0; // make sure no ticks outside the category list - if(ax.type === 'category') { + if(ax.type === 'category' || ax.type === 'multicategory') { tmin = Lib.constrain(tmin, 0, ax._categories.length - 1); } return tmin; } - var tType = dtick.charAt(0), - dtNum = Number(dtick.substr(1)); + var tType = dtick.charAt(0); + var dtNum = Number(dtick.substr(1)); // Dates: months (or years) if(tType === 'M') { - var cnt = 0, - t0 = tick0, - t1, - mult, - newDTick; + var cnt = 0; + var t0 = tick0; + var t1, mult, newDTick; // This algorithm should work for *any* nonlinear (but close to linear!) // tick spacing. Limit to 10 iterations, for gregorian months it's normally <=3. @@ -48692,8 +50346,8 @@ axes.tickFirst = function(ax) { (Math.pow(10, r0) - tick0) / dtNum) * dtNum + tick0) / Math.LN10; } else if(tType === 'D') { - var tickset = (dtick === 'D2') ? roundLog2 : roundLog1, - frac = Lib.roundUp(Lib.mod(r0, 1), tickset, axrev); + var tickset = (dtick === 'D2') ? roundLog2 : roundLog1; + var frac = Lib.roundUp(Lib.mod(r0, 1), tickset, axrev); return Math.floor(r0) + Math.log(d3.round(Math.pow(10, frac), 1)) / Math.LN10; @@ -48708,16 +50362,18 @@ axes.tickFirst = function(ax) { // hover is a (truthy) flag for whether to show numbers with a bit // more precision for hovertext axes.tickText = function(ax, x, hover) { - var out = tickTextObj(ax, x), - hideexp, - arrayMode = ax.tickmode === 'array', - extraPrecision = hover || arrayMode, - i, - tickVal2l = ax.type === 'category' ? ax.d2l_noadd : ax.d2l; + var out = tickTextObj(ax, x); + var arrayMode = ax.tickmode === 'array'; + var extraPrecision = hover || arrayMode; + var axType = ax.type; + // TODO multicategory, if we allow ticktext / tickvals + var tickVal2l = axType === 'category' ? ax.d2l_noadd : ax.d2l; + var i; if(arrayMode && Array.isArray(ax.ticktext)) { - var rng = Lib.simpleMap(ax.range, ax.r2l), - minDiff = Math.abs(rng[1] - rng[0]) / 10000; + var rng = Lib.simpleMap(ax.range, ax.r2l); + var minDiff = Math.abs(rng[1] - rng[0]) / 10000; + for(i = 0; i < ax.ticktext.length; i++) { if(Math.abs(x - tickVal2l(ax.tickvals[i])) < minDiff) break; } @@ -48728,28 +50384,25 @@ axes.tickText = function(ax, x, hover) { } function isHidden(showAttr) { - var first_or_last; - if(showAttr === undefined) return true; if(hover) return showAttr === 'none'; - first_or_last = { + var firstOrLast = { first: ax._tmin, last: ax._tmax }[showAttr]; - return showAttr !== 'all' && x !== first_or_last; + return showAttr !== 'all' && x !== firstOrLast; } - if(hover) { - hideexp = 'never'; - } else { - hideexp = ax.exponentformat !== 'none' && isHidden(ax.showexponent) ? 'hide' : ''; - } + var hideexp = hover ? + 'never' : + ax.exponentformat !== 'none' && isHidden(ax.showexponent) ? 'hide' : ''; - if(ax.type === 'date') formatDate(ax, out, hover, extraPrecision); - else if(ax.type === 'log') formatLog(ax, out, hover, extraPrecision, hideexp); - else if(ax.type === 'category') formatCategory(ax, out); + if(axType === 'date') formatDate(ax, out, hover, extraPrecision); + else if(axType === 'log') formatLog(ax, out, hover, extraPrecision, hideexp); + else if(axType === 'category') formatCategory(ax, out); + else if(axType === 'multicategory') formatMultiCategory(ax, out, hover); else if(isAngular(ax)) formatAngle(ax, out, hover, extraPrecision, hideexp); else formatLinear(ax, out, hover, extraPrecision, hideexp); @@ -48757,6 +50410,20 @@ axes.tickText = function(ax, x, hover) { if(ax.tickprefix && !isHidden(ax.showtickprefix)) out.text = ax.tickprefix + out.text; if(ax.ticksuffix && !isHidden(ax.showticksuffix)) out.text += ax.ticksuffix; + // Setup ticks and grid lines boundaries + // at 1/2 a 'category' to the left/bottom + if(ax.tickson === 'boundaries' || ax.showdividers) { + var inbounds = function(v) { + var p = ax.l2p(v); + return p >= 0 && p <= ax._length ? v : null; + }; + + out.xbnd = [ + inbounds(out.x - 0.5), + inbounds(out.x + ax.dtick - 0.5) + ]; + } + return out; }; @@ -48806,8 +50473,8 @@ function tickTextObj(ax, x, text) { } function formatDate(ax, out, hover, extraPrecision) { - var tr = ax._tickround, - fmt = (hover && ax.hoverformat) || axes.getTickFormat(ax); + var tr = ax._tickround; + var fmt = (hover && ax.hoverformat) || axes.getTickFormat(ax); if(extraPrecision) { // second or sub-second precision: extra always shows max digits. @@ -48816,8 +50483,8 @@ function formatDate(ax, out, hover, extraPrecision) { else tr = {y: 'm', m: 'd', d: 'M', M: 'S', S: 4}[tr]; } - var dateStr = Lib.formatDate(out.x, fmt, tr, ax._dateFormat, ax.calendar, ax._extraFormat), - headStr; + var dateStr = Lib.formatDate(out.x, fmt, tr, ax._dateFormat, ax.calendar, ax._extraFormat); + var headStr; var splitIndex = dateStr.indexOf('\n'); if(splitIndex !== -1) { @@ -48934,6 +50601,22 @@ function formatCategory(ax, out) { out.text = String(tt); } +function formatMultiCategory(ax, out, hover) { + var v = Math.round(out.x); + var cats = ax._categories[v] || []; + var tt = cats[1] === undefined ? '' : String(cats[1]); + var tt2 = cats[0] === undefined ? '' : String(cats[0]); + + if(hover) { + // TODO is this what we want? + out.text = tt2 + ' - ' + tt; + } else { + // setup for secondary labels + out.text = tt; + out.text2 = tt2; + } +} + function formatLinear(ax, out, hover, extraPrecision, hideexp) { if(hideexp === 'never') { // If this is a hover label, then we must *never* hide the exponent @@ -49039,14 +50722,13 @@ function beyondSI(exponent) { } function numFormat(v, ax, fmtoverride, hover) { - // negative? - var isNeg = v < 0, - // max number of digits past decimal point to show - tickRound = ax._tickround, - exponentFormat = fmtoverride || ax.exponentformat || 'B', - exponent = ax._tickexponent, - tickformat = axes.getTickFormat(ax), - separatethousands = ax.separatethousands; + var isNeg = v < 0; + // max number of digits past decimal point to show + var tickRound = ax._tickround; + var exponentFormat = fmtoverride || ax.exponentformat || 'B'; + var exponent = ax._tickexponent; + var tickformat = axes.getTickFormat(ax); + var separatethousands = ax.separatethousands; // special case for hover: set exponent just for this value, and // add a couple more digits of precision over tick labels @@ -49219,6 +50901,9 @@ axes.getTickFormat = function(ax) { // as an array of items like 'xy', 'x2y', 'x2y2'... // sorted by x (x,x2,x3...) then y // optionally restrict to only subplots containing axis object ax +// +// NOTE: this is currently only used OUTSIDE plotly.js (toolpanel, webapp) +// ideally we get rid of it there (or just copy this there) and remove it here axes.getSubplots = function(gd, ax) { var subplotObj = gd._fullLayout._subplots; var allSubplots = subplotObj.cartesian.concat(subplotObj.gl2d || []); @@ -49237,18 +50922,20 @@ axes.getSubplots = function(gd, ax) { }; // find all subplots with axis 'ax' +// NOTE: this is only used in axes.getSubplots (only used outside plotly.js) and +// gl2d/convert (where it restricts axis subplots to only those with gl2d) axes.findSubplotsWithAxis = function(subplots, ax) { var axMatch = new RegExp( (ax._id.charAt(0) === 'x') ? ('^' + ax._id + 'y') : (ax._id + '$') ); - var subplotsWithAxis = []; + var subplotsWithAx = []; for(var i = 0; i < subplots.length; i++) { var sp = subplots[i]; - if(axMatch.test(sp)) subplotsWithAxis.push(sp); + if(axMatch.test(sp)) subplotsWithAx.push(sp); } - return subplotsWithAxis; + return subplotsWithAx; }; // makeClipPaths: prepare clipPaths for all single axes and all possible xy pairings @@ -49301,24 +50988,25 @@ axes.makeClipPaths = function(gd) { * * @param {DOM element} gd : graph div * @param {string or array of strings} arg : polymorphic argument - * @param {boolean} skipTitle : optional flag to skip axis title draw/update + * @param {object} opts: + * - @param {boolean} skipTitle : optional flag to skip axis title draw/update * - * Signature 1: Axes.doTicks(gd, 'redraw') + * Signature 1: Axes.draw(gd, 'redraw') * use this to clear and redraw all axes on graph * - * Signature 2: Axes.doTicks(gd, '') + * Signature 2: Axes.draw(gd, '') * use this to draw all axes on graph w/o the selectAll().remove() * of the 'redraw' signature * - * Signature 3: Axes.doTicks(gd, [axId, axId2, ...]) + * Signature 3: Axes.draw(gd, [axId, axId2, ...]) * where the items are axis id string, * use this to update multiple axes in one call * - * N.B doTicks updates: + * N.B draw updates: * - ax._r (stored range for use by zoom/pan) * - ax._rl (stored linearized range for use by zoom/pan) */ -axes.doTicks = function(gd, arg, skipTitle) { +axes.draw = function(gd, arg, opts) { var fullLayout = gd._fullLayout; if(arg === 'redraw') { @@ -49330,8 +51018,14 @@ axes.doTicks = function(gd, arg, skipTitle) { plotinfo.xaxislayer.selectAll('.' + xa._id + 'tick').remove(); plotinfo.yaxislayer.selectAll('.' + ya._id + 'tick').remove(); + plotinfo.xaxislayer.selectAll('.' + xa._id + 'tick2').remove(); + plotinfo.yaxislayer.selectAll('.' + ya._id + 'tick2').remove(); + plotinfo.xaxislayer.selectAll('.' + xa._id + 'divider').remove(); + plotinfo.yaxislayer.selectAll('.' + ya._id + 'divider').remove(); + if(plotinfo.gridlayer) plotinfo.gridlayer.selectAll('path').remove(); if(plotinfo.zerolinelayer) plotinfo.zerolinelayer.selectAll('path').remove(); + fullLayout._infolayer.select('.g-' + xa._id + 'title').remove(); fullLayout._infolayer.select('.g-' + ya._id + 'title').remove(); }); @@ -49339,13 +51033,13 @@ axes.doTicks = function(gd, arg, skipTitle) { var axList = (!arg || arg === 'redraw') ? axes.listIds(gd) : arg; - Lib.syncOrAsync(axList.map(function(axid) { + return Lib.syncOrAsync(axList.map(function(axId) { return function() { - if(!axid) return; + if(!axId) return; - var axDone = axes.doTicksSingle(gd, axid, skipTitle); + var ax = axes.getFromId(gd, axId); + var axDone = axes.drawOne(gd, ax, opts); - var ax = axes.getFromId(gd, axid); ax._r = ax.range.slice(); ax._rl = Lib.simpleMap(ax._r, ax.r2l); @@ -49355,692 +51049,1103 @@ axes.doTicks = function(gd, arg, skipTitle) { }; /** - * Per-axis drawing routine! + * Draw one cartesian axis * - * This routine draws axis ticks and much more (... grids, labels, title etc.) - * Supports multiple argument signatures. - * N.B. this thing is async in general (because of MathJax rendering) - * - * @param {DOM element} gd : graph div - * @param {string or object} arg : polymorphic argument - * @param {boolean} skipTitle : optional flag to skip axis title draw/update - * @return {promise} - * - * Signature 1: Axes.doTicks(gd, ax) - * where ax is an axis object as in fullLayout - * - * Signature 2: Axes.doTicks(gd, axId) - * where axId is a axis id string + * @param {DOM element} gd + * @param {object} ax (full) axis object + * @param {object} opts + * - @param {boolean} skipTitle (set to true to skip axis title draw call) */ -axes.doTicksSingle = function(gd, arg, skipTitle) { - var fullLayout = gd._fullLayout; - var independent = false; - var ax; +axes.drawOne = function(gd, ax, opts) { + opts = opts || {}; - if(Lib.isPlainObject(arg)) { - ax = arg; - independent = true; - } else { - ax = axes.getFromId(gd, arg); - } + var i, sp, plotinfo; - // set scaling to pixels ax.setScale(); - var axid = ax._id; - var axLetter = axid.charAt(0); - var counterLetter = axes.counterLetter(axid); + var fullLayout = gd._fullLayout; + var axId = ax._id; + var axLetter = axId.charAt(0); + var counterLetter = axes.counterLetter(axId); + var mainSubplot = ax._mainSubplot; + var mainLinePosition = ax._mainLinePosition; + var mainMirrorPosition = ax._mainMirrorPosition; + var mainPlotinfo = fullLayout._plots[mainSubplot]; + var mainAxLayer = mainPlotinfo[axLetter + 'axislayer']; + var subplotsWithAx = ax._subplotsWith; + var vals = ax._vals = axes.calcTicks(ax); - var datafn = function(d) { return [d.text, d.x, ax.mirror, d.font, d.fontSize, d.fontColor].join('_'); }; - var tcls = axid + 'tick'; - var gcls = axid + 'grid'; - var zcls = axid + 'zl'; - var pad = (ax.linewidth || 1) / 2; - var labelStandoff = (ax.ticks === 'outside' ? ax.ticklen : 0); - var labelShift = 0; - var gridWidth = Drawing.crispRound(gd, ax.gridwidth, 1); - var zeroLineWidth = Drawing.crispRound(gd, ax.zerolinewidth, gridWidth); - var tickWidth = Drawing.crispRound(gd, ax.tickwidth, 1); - var sides, transfn, tickpathfn, subplots; - var tickLabels; - var i; - if(ax._counterangle && ax.ticks === 'outside') { - var caRad = ax._counterangle * Math.PI / 180; - labelStandoff = ax.ticklen * Math.cos(caRad) + 1; - labelShift = ax.ticklen * Math.sin(caRad); - } - - if(ax.showticklabels && (ax.ticks === 'outside' || ax.showline)) { - labelStandoff += 0.2 * ax.tickfont.size; - } - - // positioning arguments for x vs y axes - if(axLetter === 'x') { - sides = ['bottom', 'top']; - transfn = ax._transfn || function(d) { - return 'translate(' + (ax._offset + ax.l2p(d.x)) + ',0)'; - }; - tickpathfn = function(shift, len) { - if(ax._counterangle) { - var caRad = ax._counterangle * Math.PI / 180; - return 'M0,' + shift + 'l' + (Math.sin(caRad) * len) + ',' + (Math.cos(caRad) * len); - } - else return 'M0,' + shift + 'v' + len; - }; - } - else if(axLetter === 'y') { - sides = ['left', 'right']; - transfn = ax._transfn || function(d) { - return 'translate(0,' + (ax._offset + ax.l2p(d.x)) + ')'; - }; - tickpathfn = function(shift, len) { - if(ax._counterangle) { - var caRad = ax._counterangle * Math.PI / 180; - return 'M' + shift + ',0l' + (Math.cos(caRad) * len) + ',' + (-Math.sin(caRad) * len); - } - else return 'M' + shift + ',0h' + len; - }; - } - else if(isAngular(ax)) { - sides = ['left', 'right']; - transfn = ax._transfn; - tickpathfn = function(shift, len) { - return 'M' + shift + ',0h' + len; - }; - } - else { - Lib.warn('Unrecognized doTicks axis:', axid); - return; - } - - var axside = ax.side || sides[0]; - // which direction do the side[0], side[1], and free ticks go? - // then we flip if outside XOR y axis - var ticksign = [-1, 1, axside === sides[1] ? 1 : -1]; - if((ax.ticks !== 'inside') === (axLetter === 'x')) { - ticksign = ticksign.map(function(v) { return -v; }); + // Add a couple of axis properties that should cause us to recreate + // elements. Used in d3 data function. + var axInfo = [ax.mirror, mainLinePosition, mainMirrorPosition].join('_'); + for(i = 0; i < vals.length; i++) { + vals[i].axInfo = axInfo; } if(!ax.visible) return; - if(ax._tickFilter) { - vals = vals.filter(ax._tickFilter); + // stash selections to avoid DOM queries e.g. + // - stash tickLabels selection, so that drawTitle can use it to scoot title + ax._selections = {}; + // stash tick angle (including the computed 'auto' values) per tick-label class + ax._tickAngles = {}; + + var transFn = axes.makeTransFn(ax); + var tickVals; + // We remove zero lines, grid lines, and inside ticks if they're within 1px of the end + // The key case here is removing zero lines when the axis bound is zero + var valsClipped; + + if(ax.tickson === 'boundaries') { + var boundaryVals = getBoundaryVals(ax, vals); + valsClipped = axes.clipEnds(ax, boundaryVals); + tickVals = ax.ticks === 'inside' ? valsClipped : boundaryVals; + } else { + valsClipped = axes.clipEnds(ax, vals); + tickVals = ax.ticks === 'inside' ? valsClipped : vals; } - // Remove zero lines, grid lines, and inside ticks if they're within - // 1 pixel of the end. - // The key case here is removing zero lines when the axis bound is zero. - // Don't clip angular values. - var valsClipped = ax._valsClipped = isAngular(ax) ? - vals : - vals.filter(function(d) { return clipEnds(ax, d.x); }); - - function drawTicks(container, tickpath) { - var ticks = container.selectAll('path.' + tcls) - .data(ax.ticks === 'inside' ? valsClipped : vals, datafn); - - if(tickpath && ax.ticks) { - ticks.enter().append('path').classed(tcls, 1).classed('ticks', 1) - .classed('crisp', 1) - .call(Color.stroke, ax.tickcolor) - .style('stroke-width', tickWidth + 'px') - .attr('d', tickpath); - ticks.attr('transform', transfn); - ticks.exit().remove(); - } - else ticks.remove(); - } - - function drawLabels(container, position) { - // tick labels - for now just the main labels. - // TODO: mirror labels, esp for subplots - tickLabels = container.selectAll('g.' + tcls).data(vals, datafn); - - if(!isNumeric(position)) { - tickLabels.remove(); - drawAxTitle(); - return; - } - if(!ax.showticklabels) { - tickLabels.remove(); - drawAxTitle(); - calcBoundingBox(); - return; - } - - var labelx, labely, labelanchor, labelpos0, flipit; - if(axLetter === 'x') { - flipit = (axside === 'bottom') ? 1 : -1; - labelx = function(d) { return d.dx + labelShift * flipit; }; - labelpos0 = position + (labelStandoff + pad) * flipit; - labely = function(d) { - return d.dy + labelpos0 + d.fontSize * - ((axside === 'bottom') ? 1 : -0.2); - }; - labelanchor = function(angle) { - if(!isNumeric(angle) || angle === 0 || angle === 180) { - return 'middle'; - } - return (angle * flipit < 0) ? 'end' : 'start'; - }; - } - else if(axLetter === 'y') { - flipit = (axside === 'right') ? 1 : -1; - labely = function(d) { - return d.dy + d.fontSize * MID_SHIFT - labelShift * flipit; - }; - labelx = function(d) { - return d.dx + position + (labelStandoff + pad + - ((Math.abs(ax.tickangle) === 90) ? d.fontSize / 2 : 0)) * flipit; - }; - labelanchor = function(angle) { - if(isNumeric(angle) && Math.abs(angle) === 90) { - return 'middle'; - } - return axside === 'right' ? 'start' : 'end'; - }; - } - else if(isAngular(ax)) { - ax._labelShift = labelShift; - ax._labelStandoff = labelStandoff; - ax._pad = pad; - - labelx = ax._labelx; - labely = ax._labely; - labelanchor = ax._labelanchor; - } - - var maxFontSize = 0, - autoangle = 0, - labelsReady = []; - tickLabels.enter().append('g').classed(tcls, 1) - .append('text') - // only so tex has predictable alignment that we can - // alter later - .attr('text-anchor', 'middle') - .each(function(d) { - var thisLabel = d3.select(this), - newPromise = gd._promises.length; - thisLabel - .call(svgTextUtils.positionText, labelx(d), labely(d)) - .call(Drawing.font, d.font, d.fontSize, d.fontColor) - .text(d.text) - .call(svgTextUtils.convertToTspans, gd); - newPromise = gd._promises[newPromise]; - if(newPromise) { - // if we have an async label, we'll deal with that - // all here so take it out of gd._promises and - // instead position the label and promise this in - // labelsReady - labelsReady.push(gd._promises.pop().then(function() { - positionLabels(thisLabel, ax.tickangle); - })); - } - else { - // sync label: just position it now. - positionLabels(thisLabel, ax.tickangle); - } - }); - tickLabels.exit().remove(); - - tickLabels.each(function(d) { - maxFontSize = Math.max(maxFontSize, d.fontSize); - }); - - if(isAngular(ax)) { - tickLabels.each(function(d) { - d3.select(this).select('text') - .call(svgTextUtils.positionText, labelx(d), labely(d)); - }); - } - - // How much to shift a multi-line label to center it vertically. - function getAnchorHeight(lineCount, lineHeight, angle) { - var h = (lineCount - 1) * lineHeight; - if(axLetter === 'x') { - if(angle < -60 || 60 < angle) { - return -0.5 * h; - } else if(axside === 'top') { - return -h; - } - } else { - angle *= axside === 'left' ? 1 : -1; - if(angle < -30) { - return -h; - } else if(angle < 30) { - return -0.5 * h; - } - } - return 0; - } - - function positionLabels(s, angle) { - s.each(function(d) { - var anchor = labelanchor(angle, d); - var thisLabel = d3.select(this), - mathjaxGroup = thisLabel.select('.text-math-group'), - transform = transfn.call(thisLabel.node(), d) + - ((isNumeric(angle) && +angle !== 0) ? - (' rotate(' + angle + ',' + labelx(d) + ',' + - (labely(d) - d.fontSize / 2) + ')') : - ''); - var anchorHeight = getAnchorHeight( - svgTextUtils.lineCount(thisLabel), - LINE_SPACING * d.fontSize, - isNumeric(angle) ? +angle : 0); - if(anchorHeight) { - transform += ' translate(0, ' + anchorHeight + ')'; - } - if(mathjaxGroup.empty()) { - thisLabel.select('text').attr({ - transform: transform, - 'text-anchor': anchor - }); - } - else { - var mjShift = - Drawing.bBox(mathjaxGroup.node()).width * - {end: -0.5, start: 0.5}[anchor]; - mathjaxGroup.attr('transform', transform + - (mjShift ? 'translate(' + mjShift + ',0)' : '')); - } - }); - } - - // make sure all labels are correctly positioned at their base angle - // the positionLabels call above is only for newly drawn labels. - // do this without waiting, using the last calculated angle to - // minimize flicker, then do it again when we know all labels are - // there, putting back the prescribed angle to check for overlaps. - positionLabels(tickLabels, ax._lastangle || ax.tickangle); - - function allLabelsReady() { - return labelsReady.length && Promise.all(labelsReady); - } - - function fixLabelOverlaps() { - positionLabels(tickLabels, ax.tickangle); - - // check for auto-angling if x labels overlap - // don't auto-angle at all for log axes with - // base and digit format - if(axLetter === 'x' && !isNumeric(ax.tickangle) && - (ax.type !== 'log' || String(ax.dtick).charAt(0) !== 'D')) { - var lbbArray = []; - tickLabels.each(function(d) { - var s = d3.select(this), - thisLabel = s.select('.text-math-group'), - x = ax.l2p(d.x); - if(thisLabel.empty()) thisLabel = s.select('text'); - - var bb = Drawing.bBox(thisLabel.node()); - - lbbArray.push({ - // ignore about y, just deal with x overlaps - top: 0, - bottom: 10, - height: 10, - left: x - bb.width / 2, - // impose a 2px gap - right: x + bb.width / 2 + 2, - width: bb.width + 2 - }); - }); - for(i = 0; i < lbbArray.length - 1; i++) { - if(Lib.bBoxIntersect(lbbArray[i], lbbArray[i + 1])) { - // any overlap at all - set 30 degrees - autoangle = 30; - break; - } - } - if(autoangle) { - var tickspacing = Math.abs( - (vals[vals.length - 1].x - vals[0].x) * ax._m - ) / (vals.length - 1); - if(tickspacing < maxFontSize * 2.5) { - autoangle = 90; - } - positionLabels(tickLabels, autoangle); - } - ax._lastangle = autoangle; - } - - // update the axis title - // (so it can move out of the way if needed) - // TODO: separate out scoot so we don't need to do - // a full redraw of the title (mostly relevant for MathJax) - drawAxTitle(); - return axid + ' done'; - } - - function calcBoundingBox() { - if(ax.showticklabels) { - var gdBB = gd.getBoundingClientRect(); - var bBox = container.node().getBoundingClientRect(); - - /* - * the way we're going to use this, the positioning that matters - * is relative to the origin of gd. This is important particularly - * if gd is scrollable, and may have been scrolled between the time - * we calculate this and the time we use it - */ - - ax._boundingBox = { - width: bBox.width, - height: bBox.height, - left: bBox.left - gdBB.left, - right: bBox.right - gdBB.left, - top: bBox.top - gdBB.top, - bottom: bBox.bottom - gdBB.top - }; - } else { - var gs = fullLayout._size; - var pos; - - // set dummy bbox for ticklabel-less axes - - if(axLetter === 'x') { - pos = ax.anchor === 'free' ? - gs.t + gs.h * (1 - ax.position) : - gs.t + gs.h * (1 - ax._anchorAxis.domain[{bottom: 0, top: 1}[ax.side]]); - - ax._boundingBox = { - top: pos, - bottom: pos, - left: ax._offset, - right: ax._offset + ax._length, - width: ax._length, - height: 0 - }; - } else { - pos = ax.anchor === 'free' ? - gs.l + gs.w * ax.position : - gs.l + gs.w * ax._anchorAxis.domain[{left: 0, right: 1}[ax.side]]; - - ax._boundingBox = { - left: pos, - right: pos, - bottom: ax._offset + ax._length, - top: ax._offset, - height: ax._length, - width: 0 - }; - } - } - - /* - * for spikelines: what's the full domain of positions in the - * opposite direction that are associated with this axis? - * This means any axes that we make a subplot with, plus the - * position of the axis itself if it's free. - */ - if(subplots) { - var fullRange = ax._counterSpan = [Infinity, -Infinity]; - - for(i = 0; i < subplots.length; i++) { - var subplot = fullLayout._plots[subplots[i]]; - var counterAxis = subplot[(axLetter === 'x') ? 'yaxis' : 'xaxis']; - - extendRange(fullRange, [ - counterAxis._offset, - counterAxis._offset + counterAxis._length - ]); - } - - if(ax.anchor === 'free') { - extendRange(fullRange, (axLetter === 'x') ? - [ax._boundingBox.bottom, ax._boundingBox.top] : - [ax._boundingBox.right, ax._boundingBox.left]); - } - } - - function extendRange(range, newRange) { - range[0] = Math.min(range[0], newRange[0]); - range[1] = Math.max(range[1], newRange[1]); - } - } - - function doAutoMargins() { - var pushKey = ax._name + '.automargin'; - if(axLetter !== 'x' && axLetter !== 'y') { return; } - if(!ax.automargin) { - Plots.autoMargin(gd, pushKey); - return; - } - - var s = ax.side[0]; - var push = {x: 0, y: 0, r: 0, l: 0, t: 0, b: 0}; - - if(axLetter === 'x') { - push.y = (ax.anchor === 'free' ? ax.position : - ax._anchorAxis.domain[s === 't' ? 1 : 0]); - push[s] += ax._boundingBox.height; - } - else { - push.x = (ax.anchor === 'free' ? ax.position : - ax._anchorAxis.domain[s === 'r' ? 1 : 0]); - push[s] += ax._boundingBox.width; - } - - if(ax.title !== fullLayout._dfltTitle[axLetter]) { - push[s] += ax.titlefont.size; - } - - Plots.autoMargin(gd, pushKey, push); - } - - var done = Lib.syncOrAsync([ - allLabelsReady, - fixLabelOverlaps, - calcBoundingBox, - doAutoMargins - ]); - if(done && done.then) gd._promises.push(done); - return done; - } - - function drawAxTitle() { - if(skipTitle) return; - - // now this only applies to regular cartesian axes; colorbars and - // others ALWAYS call doTicks with skipTitle=true so they can - // configure their own titles. - - // rangeslider takes over a bottom title so drop it here - if(ax.rangeslider && ax.rangeslider.visible && ax._boundingBox && ax.side === 'bottom') return; - - var avoid = { - selection: tickLabels, - side: ax.side - }; - var axLetter = axid.charAt(0); - var gs = gd._fullLayout._size; - var offsetBase = 1.5; - var fontSize = ax.titlefont.size; - - var transform, counterAxis, x, y; - - if(tickLabels.size()) { - var translation = Drawing.getTranslate(tickLabels.node().parentNode); - avoid.offsetLeft = translation.x; - avoid.offsetTop = translation.y; - } - - var titleStandoff = 10 + fontSize * offsetBase + - (ax.linewidth ? ax.linewidth - 1 : 0); - - if(axLetter === 'x') { - counterAxis = (ax.anchor === 'free') ? - {_offset: gs.t + (1 - (ax.position || 0)) * gs.h, _length: 0} : - axisIds.getFromId(gd, ax.anchor); - - x = ax._offset + ax._length / 2; - - if(ax.side === 'top') { - y = -titleStandoff - fontSize * (ax.showticklabels ? 1 : 0); - } - else { - y = counterAxis._length + titleStandoff + - fontSize * (ax.showticklabels ? 1.5 : 0.5); - } - y += counterAxis._offset; - - if(!avoid.side) avoid.side = 'bottom'; - } - else { - counterAxis = (ax.anchor === 'free') ? - {_offset: gs.l + (ax.position || 0) * gs.w, _length: 0} : - axisIds.getFromId(gd, ax.anchor); - - y = ax._offset + ax._length / 2; - if(ax.side === 'right') { - x = counterAxis._length + titleStandoff + - fontSize * (ax.showticklabels ? 1 : 0.5); - } - else { - x = -titleStandoff - fontSize * (ax.showticklabels ? 0.5 : 0); - } - x += counterAxis._offset; - - transform = {rotate: '-90', offset: 0}; - if(!avoid.side) avoid.side = 'left'; - } - - Titles.draw(gd, axid + 'title', { - propContainer: ax, - propName: ax._name + '.title', - placeholder: fullLayout._dfltTitle[axLetter], - avoid: avoid, - transform: transform, - attributes: {x: x, y: y, 'text-anchor': 'middle'} - }); - } - - function drawGrid(plotinfo, counteraxis) { - if(fullLayout._hasOnlyLargeSploms) return; - - var gridcontainer = plotinfo.gridlayer.selectAll('.' + axid); - var zlcontainer = plotinfo.zerolinelayer; - var gridpath = ax._gridpath || ((axLetter === 'x' ? - ('M0,' + counteraxis._offset + 'v') : - ('M' + counteraxis._offset + ',0h') - ) + counteraxis._length); - var grid = gridcontainer.selectAll('path.' + gcls) - .data((ax.showgrid === false) ? [] : valsClipped, datafn); - grid.enter().append('path').classed(gcls, 1) - .classed('crisp', 1) - .attr('d', gridpath) - .each(function(d) { - if(ax.zeroline && (ax.type === 'linear' || ax.type === '-') && - Math.abs(d.x) < ax.dtick / 100) { - d3.select(this).remove(); - } - }); - grid.attr('transform', transfn) - .call(Color.stroke, ax.gridcolor || '#ddd') - .style('stroke-width', gridWidth + 'px'); - if(typeof gridpath === 'function') grid.attr('d', gridpath); - grid.exit().remove(); - - // zero line - if(zlcontainer) { - var zlData = {x: 0, id: axid}; - var showZl = axes.shouldShowZeroLine(gd, ax, counteraxis); - var zl = zlcontainer.selectAll('path.' + zcls) - .data(showZl ? [zlData] : []); - zl.enter().append('path').classed(zcls, 1).classed('zl', 1) - .classed('crisp', 1) - .attr('d', gridpath) - .each(function() { - // use the fact that only one element can enter to trigger a sort. - // If several zerolines enter at the same time we will sort once per, - // but generally this should be a minimal overhead. - zlcontainer.selectAll('path').sort(function(da, db) { - return axisIds.idSort(da.id, db.id); - }); - }); - zl.attr('transform', transfn) - .call(Color.stroke, ax.zerolinecolor || Color.defaultLine) - .style('stroke-width', zeroLineWidth + 'px'); - zl.exit().remove(); - } - } - - if(independent) { - drawTicks(ax._axislayer, tickpathfn(ax._pos + pad * ticksign[2], ticksign[2] * ax.ticklen)); - if(ax._counteraxis) { - var fictionalPlotinfo = { - gridlayer: ax._gridlayer, - zerolinelayer: ax._zerolinelayer - }; - drawGrid(fictionalPlotinfo, ax._counteraxis); - } - return drawLabels(ax._axislayer, ax._pos); - } - else if(fullLayout._has('cartesian')) { - subplots = axes.getSubplots(gd, ax); + var gridVals = ax._gridVals = valsClipped; + var dividerVals = getDividerVals(ax, vals); + if(!fullLayout._hasOnlyLargeSploms) { // keep track of which subplots (by main conteraxis) we've already // drawn grids for, so we don't overdraw overlaying subplots var finishedGrids = {}; - subplots.map(function(subplot) { - var plotinfo = fullLayout._plots[subplot]; - var counterAxis = plotinfo[counterLetter + 'axis']; + for(i = 0; i < subplotsWithAx.length; i++) { + sp = subplotsWithAx[i]; + plotinfo = fullLayout._plots[sp]; + var counterAxis = plotinfo[counterLetter + 'axis']; var mainCounterID = counterAxis._mainAxis._id; - if(finishedGrids[mainCounterID]) return; + if(finishedGrids[mainCounterID]) continue; finishedGrids[mainCounterID] = 1; - drawGrid(plotinfo, counterAxis, subplot); - }); + var gridPath = axLetter === 'x' ? + 'M0,' + counterAxis._offset + 'v' + counterAxis._length : + 'M' + counterAxis._offset + ',0h' + counterAxis._length; - var mainSubplot = ax._mainSubplot; - var mainPlotinfo = fullLayout._plots[mainSubplot]; - var tickSubplots = []; + axes.drawGrid(gd, ax, { + vals: gridVals, + counterAxis: counterAxis, + layer: plotinfo.gridlayer.select('.' + axId), + path: gridPath, + transFn: transFn + }); + axes.drawZeroLine(gd, ax, { + counterAxis: counterAxis, + layer: plotinfo.zerolinelayer, + path: gridPath, + transFn: transFn + }); + } + } - if(ax.ticks) { - var mainSign = ticksign[2]; - var tickpath = tickpathfn(ax._mainLinePosition + pad * mainSign, mainSign * ax.ticklen); - if(ax._anchorAxis && ax.mirror && ax.mirror !== true) { - tickpath += tickpathfn(ax._mainMirrorPosition - pad * mainSign, -mainSign * ax.ticklen); - } - drawTicks(mainPlotinfo[axLetter + 'axislayer'], tickpath); + var tickSigns = axes.getTickSigns(ax); + var tickSubplots = []; - tickSubplots = Object.keys(ax._linepositions || {}); + if(ax.ticks) { + var mainTickPath = axes.makeTickPath(ax, mainLinePosition, tickSigns[2]); + var mirrorTickPath; + var fullTickPath; + if(ax._anchorAxis && ax.mirror && ax.mirror !== true) { + mirrorTickPath = axes.makeTickPath(ax, mainMirrorPosition, tickSigns[3]); + fullTickPath = mainTickPath + mirrorTickPath; + } else { + mirrorTickPath = ''; + fullTickPath = mainTickPath; } - tickSubplots.map(function(subplot) { - var plotinfo = fullLayout._plots[subplot]; - - var container = plotinfo[axLetter + 'axislayer']; - - // [bottom or left, top or right] - // free and main are handled above - var linepositions = ax._linepositions[subplot] || []; - - function tickPathSide(sidei) { - var tsign = ticksign[sidei]; - return tickpathfn(linepositions[sidei] + pad * tsign, tsign * ax.ticklen); + var tickPath; + if(ax.showdividers && ax.ticks === 'outside' && ax.tickson === 'boundaries') { + var dividerLookup = {}; + for(i = 0; i < dividerVals.length; i++) { + dividerLookup[dividerVals[i].x] = 1; } + tickPath = function(d) { + return dividerLookup[d.x] ? mirrorTickPath : fullTickPath; + }; + } else { + tickPath = fullTickPath; + } - drawTicks(container, tickPathSide(0) + tickPathSide(1)); + axes.drawTicks(gd, ax, { + vals: tickVals, + layer: mainAxLayer, + path: tickPath, + transFn: transFn }); - var mainContainer = mainPlotinfo[axLetter + 'axislayer']; - - return drawLabels(mainContainer, ax._mainLinePosition); + tickSubplots = Object.keys(ax._linepositions || {}); } + + for(i = 0; i < tickSubplots.length; i++) { + sp = tickSubplots[i]; + plotinfo = fullLayout._plots[sp]; + // [bottom or left, top or right], free and main are handled above + var linepositions = ax._linepositions[sp] || []; + var spTickPath = axes.makeTickPath(ax, linepositions[0], tickSigns[0]) + + axes.makeTickPath(ax, linepositions[1], tickSigns[1]); + + axes.drawTicks(gd, ax, { + vals: tickVals, + layer: plotinfo[axLetter + 'axislayer'], + path: spTickPath, + transFn: transFn + }); + } + + var seq = []; + + // tick labels - for now just the main labels. + // TODO: mirror labels, esp for subplots + + seq.push(function() { + var labelFns = axes.makeLabelFns(ax, mainLinePosition); + return axes.drawLabels(gd, ax, { + vals: vals, + layer: mainAxLayer, + transFn: transFn, + labelXFn: labelFns.labelXFn, + labelYFn: labelFns.labelYFn, + labelAnchorFn: labelFns.labelAnchorFn, + }); + }); + + if(ax.type === 'multicategory') { + var labelLength = 0; + var pad = {x: 2, y: 10}[axLetter]; + var sgn = tickSigns[2] * (ax.ticks === 'inside' ? -1 : 1); + + seq.push(function() { + labelLength += getLabelLevelSpan(ax, axId + 'tick') + pad; + labelLength += ax._tickAngles[axId + 'tick'] ? ax.tickfont.size * LINE_SPACING : 0; + var secondaryPosition = mainLinePosition + labelLength * sgn; + var secondaryLabelFns = axes.makeLabelFns(ax, secondaryPosition); + + return axes.drawLabels(gd, ax, { + vals: getSecondaryLabelVals(ax, vals), + layer: mainAxLayer, + cls: axId + 'tick2', + repositionOnUpdate: true, + secondary: true, + transFn: transFn, + labelXFn: secondaryLabelFns.labelXFn, + labelYFn: secondaryLabelFns.labelYFn, + labelAnchorFn: secondaryLabelFns.labelAnchorFn, + }); + }); + + seq.push(function() { + labelLength += getLabelLevelSpan(ax, axId + 'tick2'); + ax._labelLength = labelLength; + + return drawDividers(gd, ax, { + vals: dividerVals, + layer: mainAxLayer, + path: axes.makeTickPath(ax, mainLinePosition, sgn, labelLength), + transFn: transFn + }); + }); + } + + function extendRange(range, newRange) { + range[0] = Math.min(range[0], newRange[0]); + range[1] = Math.max(range[1], newRange[1]); + } + + function calcBoundingBox() { + if(ax.showticklabels) { + var gdBB = gd.getBoundingClientRect(); + var bBox = mainAxLayer.node().getBoundingClientRect(); + + /* + * the way we're going to use this, the positioning that matters + * is relative to the origin of gd. This is important particularly + * if gd is scrollable, and may have been scrolled between the time + * we calculate this and the time we use it + */ + + ax._boundingBox = { + width: bBox.width, + height: bBox.height, + left: bBox.left - gdBB.left, + right: bBox.right - gdBB.left, + top: bBox.top - gdBB.top, + bottom: bBox.bottom - gdBB.top + }; + } else { + var gs = fullLayout._size; + var pos; + + // set dummy bbox for ticklabel-less axes + + if(axLetter === 'x') { + pos = ax.anchor === 'free' ? + gs.t + gs.h * (1 - ax.position) : + gs.t + gs.h * (1 - ax._anchorAxis.domain[{bottom: 0, top: 1}[ax.side]]); + + ax._boundingBox = { + top: pos, + bottom: pos, + left: ax._offset, + right: ax._offset + ax._length, + width: ax._length, + height: 0 + }; + } else { + pos = ax.anchor === 'free' ? + gs.l + gs.w * ax.position : + gs.l + gs.w * ax._anchorAxis.domain[{left: 0, right: 1}[ax.side]]; + + ax._boundingBox = { + left: pos, + right: pos, + bottom: ax._offset + ax._length, + top: ax._offset, + height: ax._length, + width: 0 + }; + } + } + + /* + * for spikelines: what's the full domain of positions in the + * opposite direction that are associated with this axis? + * This means any axes that we make a subplot with, plus the + * position of the axis itself if it's free. + */ + if(subplotsWithAx) { + var fullRange = ax._counterSpan = [Infinity, -Infinity]; + + for(var i = 0; i < subplotsWithAx.length; i++) { + var plotinfo = fullLayout._plots[subplotsWithAx[i]]; + var counterAxis = plotinfo[(axLetter === 'x') ? 'yaxis' : 'xaxis']; + + extendRange(fullRange, [ + counterAxis._offset, + counterAxis._offset + counterAxis._length + ]); + } + + if(ax.anchor === 'free') { + extendRange(fullRange, (axLetter === 'x') ? + [ax._boundingBox.bottom, ax._boundingBox.top] : + [ax._boundingBox.right, ax._boundingBox.left]); + } + } + } + + var hasRangeSlider = Registry.getComponentMethod('rangeslider', 'isVisible')(ax); + + function doAutoMargins() { + var s = ax.side.charAt(0); + var push; + var rangeSliderPush; + + if(hasRangeSlider) { + rangeSliderPush = Registry.getComponentMethod('rangeslider', 'autoMarginOpts')(gd, ax); + } + Plots.autoMargin(gd, rangeSliderAutoMarginID(ax), rangeSliderPush); + + if(ax.automargin && (!hasRangeSlider || s !== 'b')) { + push = {x: 0, y: 0, r: 0, l: 0, t: 0, b: 0}; + + var bbox = ax._boundingBox; + var counterAx = mainPlotinfo[counterLetter + 'axis']; + var anchorAxDomainIndex; + var offset; + + switch(axLetter + s) { + case 'xb': + anchorAxDomainIndex = 0; + offset = bbox.top - counterAx._length - counterAx._offset; + push[s] = bbox.height; + break; + case 'xt': + anchorAxDomainIndex = 1; + offset = counterAx._offset - bbox.bottom; + push[s] = bbox.height; + break; + case 'yl': + anchorAxDomainIndex = 0; + offset = counterAx._offset - bbox.right; + push[s] = bbox.width; + break; + case 'yr': + anchorAxDomainIndex = 1; + offset = bbox.left - counterAx._length - counterAx._offset; + push[s] = bbox.width; + break; + } + + push[counterLetter] = ax.anchor === 'free' ? + ax.position : + ax._anchorAxis.domain[anchorAxDomainIndex]; + + if(push[s] > 0) { + push[s] += offset; + } + if(ax.title.text !== fullLayout._dfltTitle[axLetter]) { + push[s] += ax.title.font.size; + } + } + + Plots.autoMargin(gd, axAutoMarginID(ax), push); + } + + seq.push(calcBoundingBox, doAutoMargins); + + if(!opts.skipTitle && + !(hasRangeSlider && ax._boundingBox && ax.side === 'bottom') + ) { + seq.push(function() { return drawTitle(gd, ax); }); + } + + return Lib.syncOrAsync(seq); }; +function getBoundaryVals(ax, vals) { + var out = []; + var i; + + // boundaryVals are never used for labels; + // no need to worry about the other tickTextObj keys + var _push = function(d, bndIndex) { + var xb = d.xbnd[bndIndex]; + if(xb !== null) { + out.push(Lib.extendFlat({}, d, {x: xb})); + } + }; + + if(vals.length) { + for(i = 0; i < vals.length; i++) { + _push(vals[i], 0); + } + _push(vals[i - 1], 1); + } + + return out; +} + +function getSecondaryLabelVals(ax, vals) { + var out = []; + var lookup = {}; + + for(var i = 0; i < vals.length; i++) { + var d = vals[i]; + if(lookup[d.text2]) { + lookup[d.text2].push(d.x); + } else { + lookup[d.text2] = [d.x]; + } + } + + for(var k in lookup) { + out.push(tickTextObj(ax, Lib.interp(lookup[k], 0.5), k)); + } + + return out; +} + +function getDividerVals(ax, vals) { + var out = []; + var i, current; + + // never used for labels; + // no need to worry about the other tickTextObj keys + var _push = function(d, bndIndex) { + var xb = d.xbnd[bndIndex]; + if(xb !== null) { + out.push(Lib.extendFlat({}, d, {x: xb})); + } + }; + + if(ax.showdividers && vals.length) { + for(i = 0; i < vals.length; i++) { + var d = vals[i]; + if(d.text2 !== current) { + _push(d, 0); + } + current = d.text2; + } + _push(vals[i - 1], 1); + } + + return out; +} + +function getLabelLevelSpan(ax, cls) { + var axLetter = ax._id.charAt(0); + var angle = ax._tickAngles[cls] || 0; + var rad = Lib.deg2rad(angle); + var sinA = Math.sin(rad); + var cosA = Math.cos(rad); + var maxX = 0; + var maxY = 0; + + // N.B. Drawing.bBox does not take into account rotate transforms + + ax._selections[cls].each(function() { + var thisLabel = selectTickLabel(this); + var bb = Drawing.bBox(thisLabel.node()); + var w = bb.width; + var h = bb.height; + maxX = Math.max(maxX, cosA * w, sinA * h); + maxY = Math.max(maxY, sinA * w, cosA * h); + }); + + return {x: maxY, y: maxX}[axLetter]; +} + +/** + * Which direction do the 'ax.side' values, and free ticks go? + * + * @param {object} ax (full) axis object + * - {string} _id (starting with 'x' or 'y') + * - {string} side + * - {string} ticks + * @return {array} all entries are either -1 or 1 + * - [0]: sign for top/right ticks (i.e. negative SVG direction) + * - [1]: sign for bottom/left ticks (i.e. positive SVG direction) + * - [2]: sign for ticks corresponding to 'ax.side' + * - [3]: sign for ticks mirroring 'ax.side' + */ +axes.getTickSigns = function(ax) { + var axLetter = ax._id.charAt(0); + var sideOpposite = {x: 'top', y: 'right'}[axLetter]; + var main = ax.side === sideOpposite ? 1 : -1; + var out = [-1, 1, main, -main]; + // then we flip if outside XOR y axis + if((ax.ticks !== 'inside') === (axLetter === 'x')) { + out = out.map(function(v) { return -v; }); + } + return out; +}; + +/** + * Make axis translate transform function + * + * @param {object} ax (full) axis object + * - {string} _id + * - {number} _offset + * - {fn} l2p + * @return {fn} function of calcTicks items + */ +axes.makeTransFn = function(ax) { + var axLetter = ax._id.charAt(0); + var offset = ax._offset; + return axLetter === 'x' ? + function(d) { return 'translate(' + (offset + ax.l2p(d.x)) + ',0)'; } : + function(d) { return 'translate(0,' + (offset + ax.l2p(d.x)) + ')'; }; +}; + +/** + * Make axis tick path string + * + * @param {object} ax (full) axis object + * - {string} _id + * - {number} ticklen + * - {number} linewidth + * @param {number} shift along direction of ticklen + * @param {1 or -1} sng tick sign + * @param {number (optional)} len tick length + * @return {string} + */ +axes.makeTickPath = function(ax, shift, sgn, len) { + len = len !== undefined ? len : ax.ticklen; + + var axLetter = ax._id.charAt(0); + var pad = (ax.linewidth || 1) / 2; + + return axLetter === 'x' ? + 'M0,' + (shift + pad * sgn) + 'v' + (len * sgn) : + 'M' + (shift + pad * sgn) + ',0h' + (len * sgn); +}; + +/** + * Make axis tick label x, y and anchor functions + * + * @param {object} ax (full) axis object + * - {string} _id + * - {string} ticks + * - {number} ticklen + * - {string} side + * - {number} linewidth + * - {number} tickfont.size + * - {boolean} showline + * @param {number} shift + * @param {number} angle [in degrees] ... + * @return {object} + * - {fn} labelXFn + * - {fn} labelYFn + * - {fn} labelAnchorFn + * - {number} labelStandoff + * - {number} labelShift + */ +axes.makeLabelFns = function(ax, shift, angle) { + var axLetter = ax._id.charAt(0); + var pad = (ax.linewidth || 1) / 2; + var ticksOnOutsideLabels = ax.tickson !== 'boundaries' && ax.ticks === 'outside'; + + var labelStandoff = ticksOnOutsideLabels ? ax.ticklen : 0; + var labelShift = 0; + + if(angle && ax.ticks === 'outside') { + var rad = Lib.deg2rad(angle); + labelStandoff = ax.ticklen * Math.cos(rad) + 1; + labelShift = ax.ticklen * Math.sin(rad); + } + + if(ax.showticklabels && (ticksOnOutsideLabels || ax.showline)) { + labelStandoff += 0.2 * ax.tickfont.size; + } + + // Used in polar angular label x/y functions + // TODO generalize makeLabelFns so that it just work for angular axes + var out = { + labelStandoff: labelStandoff, + labelShift: labelShift + }; + + var x0, y0, ff, flipIt; + if(axLetter === 'x') { + flipIt = ax.side === 'bottom' ? 1 : -1; + x0 = labelShift * flipIt; + y0 = shift + (labelStandoff + pad) * flipIt; + ff = ax.side === 'bottom' ? 1 : -0.2; + + out.labelXFn = function(d) { return d.dx + x0; }; + out.labelYFn = function(d) { return d.dy + y0 + d.fontSize * ff; }; + out.labelAnchorFn = function(a) { + if(!isNumeric(a) || a === 0 || a === 180) { + return 'middle'; + } + return (a * flipIt < 0) ? 'end' : 'start'; + }; + } else if(axLetter === 'y') { + flipIt = ax.side === 'right' ? 1 : -1; + x0 = labelStandoff + pad; + y0 = -labelShift * flipIt; + ff = Math.abs(ax.tickangle) === 90 ? 0.5 : 0; + + out.labelXFn = function(d) { return d.dx + shift + (x0 + d.fontSize * ff) * flipIt; }; + out.labelYFn = function(d) { return d.dy + y0 + d.fontSize * MID_SHIFT; }; + out.labelAnchorFn = function(a) { + if(isNumeric(a) && Math.abs(a) === 90) { + return 'middle'; + } + return ax.side === 'right' ? 'start' : 'end'; + }; + } + + return out; +}; + +function tickDataFn(d) { + return [d.text, d.x, d.axInfo, d.font, d.fontSize, d.fontColor].join('_'); +} + +/** + * Draw axis ticks + * + * @param {DOM element} gd + * @param {object} ax (full) axis object + * - {string} _id + * - {string} ticks + * - {number} linewidth + * - {string} tickcolor + * @param {object} opts + * - {array of object} vals (calcTicks output-like) + * - {d3 selection} layer + * - {string or fn} path + * - {fn} transFn + * - {boolean} crisp (set to false to unset crisp-edge SVG rendering) + */ +axes.drawTicks = function(gd, ax, opts) { + opts = opts || {}; + + var cls = ax._id + 'tick'; + + var ticks = opts.layer.selectAll('path.' + cls) + .data(ax.ticks ? opts.vals : [], tickDataFn); + + ticks.exit().remove(); + + ticks.enter().append('path') + .classed(cls, 1) + .classed('ticks', 1) + .classed('crisp', opts.crisp !== false) + .call(Color.stroke, ax.tickcolor) + .style('stroke-width', Drawing.crispRound(gd, ax.tickwidth, 1) + 'px') + .attr('d', opts.path); + + ticks.attr('transform', opts.transFn); +}; + +/** + * Draw axis grid + * + * @param {DOM element} gd + * @param {object} ax (full) axis object + * - {string} _id + * - {boolean} showgrid + * - {string} gridcolor + * - {string} gridwidth + * - {boolean} zeroline + * - {string} type + * - {string} dtick + * @param {object} opts + * - {array of object} vals (calcTicks output-like) + * - {d3 selection} layer + * - {object} counterAxis (full axis object corresponding to counter axis) + * optional - only required if this axis supports zero lines + * - {string or fn} path + * - {fn} transFn + * - {boolean} crisp (set to false to unset crisp-edge SVG rendering) + */ +axes.drawGrid = function(gd, ax, opts) { + opts = opts || {}; + + var cls = ax._id + 'grid'; + var vals = opts.vals; + var counterAx = opts.counterAxis; + if(ax.showgrid === false) { + vals = []; + } + else if(counterAx && axes.shouldShowZeroLine(gd, ax, counterAx)) { + var isArrayMode = ax.tickmode === 'array'; + for(var i = 0; i < vals.length; i++) { + var xi = vals[i].x; + if(isArrayMode ? !xi : (Math.abs(xi) < ax.dtick / 100)) { + vals = vals.slice(0, i).concat(vals.slice(i + 1)); + // In array mode you can in principle have multiple + // ticks at 0, so test them all. Otherwise once we found + // one we can stop. + if(isArrayMode) i--; + else break; + } + } + } + + var grid = opts.layer.selectAll('path.' + cls) + .data(vals, tickDataFn); + + grid.exit().remove(); + + grid.enter().append('path') + .classed(cls, 1) + .classed('crisp', opts.crisp !== false); + + ax._gw = Drawing.crispRound(gd, ax.gridwidth, 1); + + grid.attr('transform', opts.transFn) + .attr('d', opts.path) + .call(Color.stroke, ax.gridcolor || '#ddd') + .style('stroke-width', ax._gw + 'px'); + + if(typeof opts.path === 'function') grid.attr('d', opts.path); +}; + +/** + * Draw axis zero-line + * + * @param {DOM element} gd + * @param {object} ax (full) axis object + * - {string} _id + * - {boolean} zeroline + * - {number} zerolinewidth + * - {string} zerolinecolor + * - {number (optional)} _gridWidthCrispRound + * @param {object} opts + * - {d3 selection} layer + * - {object} counterAxis (full axis object corresponding to counter axis) + * - {string or fn} path + * - {fn} transFn + * - {boolean} crisp (set to false to unset crisp-edge SVG rendering) + */ +axes.drawZeroLine = function(gd, ax, opts) { + opts = opts || opts; + + var cls = ax._id + 'zl'; + var show = axes.shouldShowZeroLine(gd, ax, opts.counterAxis); + + var zl = opts.layer.selectAll('path.' + cls) + .data(show ? [{x: 0, id: ax._id}] : []); + + zl.exit().remove(); + + zl.enter().append('path') + .classed(cls, 1) + .classed('zl', 1) + .classed('crisp', opts.crisp !== false) + .each(function() { + // use the fact that only one element can enter to trigger a sort. + // If several zerolines enter at the same time we will sort once per, + // but generally this should be a minimal overhead. + opts.layer.selectAll('path').sort(function(da, db) { + return axisIds.idSort(da.id, db.id); + }); + }); + + zl.attr('transform', opts.transFn) + .attr('d', opts.path) + .call(Color.stroke, ax.zerolinecolor || Color.defaultLine) + .style('stroke-width', Drawing.crispRound(gd, ax.zerolinewidth, ax._gw || 1) + 'px'); +}; + +/** + * Draw axis tick labels + * + * @param {DOM element} gd + * @param {object} ax (full) axis object + * - {string} _id + * - {boolean} showticklabels + * - {number} tickangle + * - {object (optional)} _selections + * - {object} (optional)} _tickAngles + * @param {object} opts + * - {array of object} vals (calcTicks output-like) + * - {d3 selection} layer + * - {string (optional)} cls (node className) + * - {boolean} repositionOnUpdate (set to true to reposition update selection) + * - {boolean} secondary + * - {fn} transFn + * - {fn} labelXFn + * - {fn} labelYFn + * - {fn} labelAnchorFn + */ +axes.drawLabels = function(gd, ax, opts) { + opts = opts || {}; + + var axId = ax._id; + var axLetter = axId.charAt(0); + var cls = opts.cls || axId + 'tick'; + var vals = opts.vals; + var labelXFn = opts.labelXFn; + var labelYFn = opts.labelYFn; + var labelAnchorFn = opts.labelAnchorFn; + var tickAngle = opts.secondary ? 0 : ax.tickangle; + var lastAngle = (ax._tickAngles || {})[cls]; + + var tickLabels = opts.layer.selectAll('g.' + cls) + .data(ax.showticklabels ? vals : [], tickDataFn); + + var labelsReady = []; + + tickLabels.enter().append('g') + .classed(cls, 1) + .append('text') + // only so tex has predictable alignment that we can + // alter later + .attr('text-anchor', 'middle') + .each(function(d) { + var thisLabel = d3.select(this); + var newPromise = gd._promises.length; + + thisLabel + .call(svgTextUtils.positionText, labelXFn(d), labelYFn(d)) + .call(Drawing.font, d.font, d.fontSize, d.fontColor) + .text(d.text) + .call(svgTextUtils.convertToTspans, gd); + + if(gd._promises[newPromise]) { + // if we have an async label, we'll deal with that + // all here so take it out of gd._promises and + // instead position the label and promise this in + // labelsReady + labelsReady.push(gd._promises.pop().then(function() { + positionLabels(thisLabel, tickAngle); + })); + } else { + // sync label: just position it now. + positionLabels(thisLabel, tickAngle); + } + }); + + tickLabels.exit().remove(); + + if(opts.repositionOnUpdate) { + tickLabels.each(function(d) { + d3.select(this).select('text') + .call(svgTextUtils.positionText, labelXFn(d), labelYFn(d)); + }); + } + + // How much to shift a multi-line label to center it vertically. + function getAnchorHeight(lineCount, lineHeight, angle) { + var h = (lineCount - 1) * lineHeight; + if(axLetter === 'x') { + if(angle < -60 || 60 < angle) { + return -0.5 * h; + } else if(ax.side === 'top') { + return -h; + } + } else { + angle *= ax.side === 'left' ? 1 : -1; + if(angle < -30) { + return -h; + } else if(angle < 30) { + return -0.5 * h; + } + } + return 0; + } + + function positionLabels(s, angle) { + s.each(function(d) { + var thisLabel = d3.select(this); + var mathjaxGroup = thisLabel.select('.text-math-group'); + var anchor = labelAnchorFn(angle, d); + + var transform = opts.transFn.call(thisLabel.node(), d) + + ((isNumeric(angle) && +angle !== 0) ? + (' rotate(' + angle + ',' + labelXFn(d) + ',' + + (labelYFn(d) - d.fontSize / 2) + ')') : + ''); + + var anchorHeight = getAnchorHeight( + svgTextUtils.lineCount(thisLabel), + LINE_SPACING * d.fontSize, + isNumeric(angle) ? +angle : 0 + ); + + if(anchorHeight) { + transform += ' translate(0, ' + anchorHeight + ')'; + } + + if(mathjaxGroup.empty()) { + thisLabel.select('text').attr({ + transform: transform, + 'text-anchor': anchor + }); + } else { + var mjWidth = Drawing.bBox(mathjaxGroup.node()).width; + var mjShift = mjWidth * {end: -0.5, start: 0.5}[anchor]; + mathjaxGroup.attr('transform', transform + (mjShift ? 'translate(' + mjShift + ',0)' : '')); + } + }); + } + + // make sure all labels are correctly positioned at their base angle + // the positionLabels call above is only for newly drawn labels. + // do this without waiting, using the last calculated angle to + // minimize flicker, then do it again when we know all labels are + // there, putting back the prescribed angle to check for overlaps. + positionLabels(tickLabels, lastAngle || tickAngle); + + function allLabelsReady() { + return labelsReady.length && Promise.all(labelsReady); + } + + function fixLabelOverlaps() { + positionLabels(tickLabels, tickAngle); + + var autoangle = null; + + // check for auto-angling if x labels overlap + // don't auto-angle at all for log axes with + // base and digit format + if(vals.length && axLetter === 'x' && !isNumeric(tickAngle) && + (ax.type !== 'log' || String(ax.dtick).charAt(0) !== 'D') + ) { + autoangle = 0; + + var maxFontSize = 0; + var lbbArray = []; + var i; + + tickLabels.each(function(d) { + maxFontSize = Math.max(maxFontSize, d.fontSize); + + var x = ax.l2p(d.x); + var thisLabel = selectTickLabel(this); + var bb = Drawing.bBox(thisLabel.node()); + + lbbArray.push({ + // ignore about y, just deal with x overlaps + top: 0, + bottom: 10, + height: 10, + left: x - bb.width / 2, + // impose a 2px gap + right: x + bb.width / 2 + 2, + width: bb.width + 2 + }); + }); + + if((ax.tickson === 'boundaries' || ax.showdividers) && !opts.secondary) { + var gap = 2; + if(ax.ticks) gap += ax.tickwidth / 2; + + // TODO should secondary labels also fall into this fix-overlap regime? + + for(i = 0; i < lbbArray.length; i++) { + var xbnd = vals[i].xbnd; + var lbb = lbbArray[i]; + if( + (xbnd[0] !== null && (lbb.left - ax.l2p(xbnd[0])) < gap) || + (xbnd[1] !== null && (ax.l2p(xbnd[1]) - lbb.right) < gap) + ) { + autoangle = 90; + break; + } + } + } else { + var vLen = vals.length; + var tickSpacing = Math.abs((vals[vLen - 1].x - vals[0].x) * ax._m) / (vLen - 1); + var rotate90 = (tickSpacing < maxFontSize * 2.5) || ax.type === 'multicategory'; + + // any overlap at all - set 30 degrees or 90 degrees + for(i = 0; i < lbbArray.length - 1; i++) { + if(Lib.bBoxIntersect(lbbArray[i], lbbArray[i + 1])) { + autoangle = rotate90 ? 90 : 30; + break; + } + } + } + + if(autoangle) { + positionLabels(tickLabels, autoangle); + } + } + + if(ax._tickAngles) { + ax._tickAngles[cls] = autoangle === null ? + (isNumeric(tickAngle) ? tickAngle : 0) : + autoangle; + } + } + + if(ax._selections) { + ax._selections[cls] = tickLabels; + } + + var done = Lib.syncOrAsync([allLabelsReady, fixLabelOverlaps]); + if(done && done.then) gd._promises.push(done); + return done; +}; + +/** + * Draw axis dividers + * + * @param {DOM element} gd + * @param {object} ax (full) axis object + * - {string} _id + * - {string} showdividers + * - {number} dividerwidth + * - {string} dividercolor + * @param {object} opts + * - {array of object} vals (calcTicks output-like) + * - {d3 selection} layer + * - {fn} path + * - {fn} transFn + */ +function drawDividers(gd, ax, opts) { + var cls = ax._id + 'divider'; + var vals = opts.vals; + + var dividers = opts.layer.selectAll('path.' + cls) + .data(vals, tickDataFn); + + dividers.exit().remove(); + + dividers.enter().insert('path', ':first-child') + .classed(cls, 1) + .classed('crisp', 1) + .call(Color.stroke, ax.dividercolor) + .style('stroke-width', Drawing.crispRound(gd, ax.dividerwidth, 1) + 'px'); + + dividers + .attr('transform', opts.transFn) + .attr('d', opts.path); +} + +function drawTitle(gd, ax) { + var fullLayout = gd._fullLayout; + var axId = ax._id; + var axLetter = axId.charAt(0); + var gs = fullLayout._size; + var fontSize = ax.title.font.size; + + var titleStandoff; + if(ax.type === 'multicategory') { + titleStandoff = ax._labelLength; + } else { + var offsetBase = 1.5; + titleStandoff = 10 + fontSize * offsetBase + (ax.linewidth ? ax.linewidth - 1 : 0); + } + + var transform, counterAxis, x, y; + + if(axLetter === 'x') { + counterAxis = (ax.anchor === 'free') ? + {_offset: gs.t + (1 - (ax.position || 0)) * gs.h, _length: 0} : + axisIds.getFromId(gd, ax.anchor); + + x = ax._offset + ax._length / 2; + + if(ax.side === 'top') { + y = -titleStandoff - fontSize * (ax.showticklabels ? 1 : 0); + } else { + y = counterAxis._length + titleStandoff + + fontSize * (ax.showticklabels ? 1.5 : 0.5); + } + y += counterAxis._offset; + } else { + counterAxis = (ax.anchor === 'free') ? + {_offset: gs.l + (ax.position || 0) * gs.w, _length: 0} : + axisIds.getFromId(gd, ax.anchor); + + y = ax._offset + ax._length / 2; + + if(ax.side === 'right') { + x = counterAxis._length + titleStandoff + + fontSize * (ax.showticklabels ? 1 : 0.5); + } else { + x = -titleStandoff - fontSize * (ax.showticklabels ? 0.5 : 0); + } + x += counterAxis._offset; + + transform = {rotate: '-90', offset: 0}; + } + + var avoid; + + if(ax.type !== 'multicategory') { + var tickLabels = ax._selections[ax._id + 'tick']; + + avoid = { + selection: tickLabels, + side: ax.side + }; + + if(tickLabels && tickLabels.node() && tickLabels.node().parentNode) { + var translation = Drawing.getTranslate(tickLabels.node().parentNode); + avoid.offsetLeft = translation.x; + avoid.offsetTop = translation.y; + } + } + + return Titles.draw(gd, axId + 'title', { + propContainer: ax, + propName: ax._name + '.title.text', + placeholder: fullLayout._dfltTitle[axLetter], + avoid: avoid, + transform: transform, + attributes: {x: x, y: y, 'text-anchor': 'middle'} + }); +} + axes.shouldShowZeroLine = function(gd, ax, counterAxis) { var rng = Lib.simpleMap(ax.range, ax.r2l); return ( (rng[0] * rng[1] <= 0) && ax.zeroline && (ax.type === 'linear' || ax.type === '-') && - ax._valsClipped.length && + ax._gridVals.length && ( clipEnds(ax, 0) || !anyCounterAxLineAtZero(gd, ax, counterAxis, rng) || @@ -50049,6 +52154,10 @@ axes.shouldShowZeroLine = function(gd, ax, counterAxis) { ); }; +axes.clipEnds = function(ax, vals) { + return vals.filter(function(d) { return clipEnds(ax, d.x); }); +}; + function clipEnds(ax, l) { var p = ax.l2p(l); return (p > 1 && p < ax._length - 1); @@ -50124,6 +52233,12 @@ function hasBarsOrFill(gd, ax) { return false; } +function selectTickLabel(gTick) { + var s = d3.select(gTick); + var mj = s.select('.text-math-group'); + return mj.empty() ? s.select('text') : mj; +} + /** * Find all margin pushers for 2D axes and reserve them for later use * Both label and rangeslider automargin calculations happen later so @@ -50138,14 +52253,17 @@ axes.allowAutoMargin = function(gd) { for(var i = 0; i < axList.length; i++) { var ax = axList[i]; if(ax.automargin) { - Plots.allowAutoMargin(gd, ax._name + '.automargin'); + Plots.allowAutoMargin(gd, axAutoMarginID(ax)); } - if(ax.rangeslider && ax.rangeslider.visible) { - Plots.allowAutoMargin(gd, 'rangeslider' + ax._id); + if(Registry.getComponentMethod('rangeslider', 'isVisible')(ax)) { + Plots.allowAutoMargin(gd, rangeSliderAutoMarginID(ax)); } } }; +function axAutoMarginID(ax) { return ax._id + '.automargin'; } +function rangeSliderAutoMarginID(ax) { return ax._id + '.rangeslider'; } + // swap all the presentation attributes of the axes showing these traces axes.swap = function(gd, traces) { var axGroups = makeAxisGroups(gd, traces); @@ -50156,14 +52274,13 @@ axes.swap = function(gd, traces) { }; function makeAxisGroups(gd, traces) { - var groups = [], - i, - j; + var groups = []; + var i, j; for(i = 0; i < traces.length; i++) { - var groupsi = [], - xi = gd._fullData[traces[i]].xaxis, - yi = gd._fullData[traces[i]].yaxis; + var groupsi = []; + var xi = gd._fullData[traces[i]].xaxis; + var yi = gd._fullData[traces[i]].yaxis; if(!xi || !yi) continue; // not a 2D cartesian trace? for(j = 0; j < groups.length; j++) { @@ -50177,8 +52294,8 @@ function makeAxisGroups(gd, traces) { continue; } - var group0 = groups[groupsi[0]], - groupj; + var group0 = groups[groupsi[0]]; + var groupj; if(groupsi.length > 1) { for(j = 1; j < groupsi.length; j++) { @@ -50201,11 +52318,10 @@ function mergeAxisGroups(intoSet, fromSet) { } function swapAxisGroup(gd, xIds, yIds) { - var i, - j, - xFullAxes = [], - yFullAxes = [], - layout = gd.layout; + var xFullAxes = []; + var yFullAxes = []; + var layout = gd.layout; + var i, j; for(i = 0; i < xIds.length; i++) xFullAxes.push(axes.getFromId(gd, xIds[i])); for(i = 0; i < yIds.length; i++) yFullAxes.push(axes.getFromId(gd, yIds[i])); @@ -50218,12 +52334,12 @@ function swapAxisGroup(gd, xIds, yIds) { var numericTypes = ['linear', 'log']; for(i = 0; i < allAxKeys.length; i++) { - var keyi = allAxKeys[i], - xVal = xFullAxes[0][keyi], - yVal = yFullAxes[0][keyi], - allEqual = true, - coerceLinearX = false, - coerceLinearY = false; + var keyi = allAxKeys[i]; + var xVal = xFullAxes[0][keyi]; + var yVal = yFullAxes[0][keyi]; + var allEqual = true; + var coerceLinearX = false; + var coerceLinearY = false; if(keyi.charAt(0) === '_' || typeof xVal === 'function' || noSwapAttrs.indexOf(keyi) !== -1) { continue; @@ -50269,17 +52385,18 @@ function swapAxisAttrs(layout, key, xFullAxes, yFullAxes, dfltTitle) { // in case the value is the default for either axis, // look at the first axis in each list and see if // this key's value is undefined - var np = Lib.nestedProperty, - xVal = np(layout[xFullAxes[0]._name], key).get(), - yVal = np(layout[yFullAxes[0]._name], key).get(), - i; + var np = Lib.nestedProperty; + var xVal = np(layout[xFullAxes[0]._name], key).get(); + var yVal = np(layout[yFullAxes[0]._name], key).get(); + var i; + if(key === 'title') { // special handling of placeholder titles - if(xVal === dfltTitle.x) { - xVal = dfltTitle.y; + if(xVal && xVal.text === dfltTitle.x) { + xVal.text = dfltTitle.y; } - if(yVal === dfltTitle.y) { - yVal = dfltTitle.x; + if(yVal && yVal.text === dfltTitle.y) { + yVal.text = dfltTitle.x; } } @@ -50295,9 +52412,9 @@ function isAngular(ax) { return ax._id === 'angularaxis'; } -},{"../../components/color":50,"../../components/drawing":75,"../../components/titles":141,"../../constants/alignment":148,"../../constants/numerical":151,"../../lib":169,"../../lib/svg_text_utils":191,"../../plots/plots":246,"../../registry":259,"./autorange":213,"./axis_autotype":215,"./axis_ids":217,"./layout_attributes":226,"./set_convert":232,"d3":16,"fast-isnumeric":18}],215:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../components/titles":139,"../../constants/alignment":146,"../../constants/numerical":149,"../../lib":168,"../../lib/svg_text_utils":189,"../../plots/plots":245,"../../registry":257,"./autorange":211,"./axis_autotype":213,"./axis_ids":215,"./clean_ticks":217,"./layout_attributes":225,"./set_convert":231,"d3":16,"fast-isnumeric":18}],213:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50312,7 +52429,10 @@ var isNumeric = _dereq_('fast-isnumeric'); var Lib = _dereq_('../../lib'); var BADNUM = _dereq_('../../constants/numerical').BADNUM; -module.exports = function autoType(array, calendar) { +module.exports = function autoType(array, calendar, opts) { + opts = opts || {}; + + if(!opts.noMultiCategory && multiCategory(array)) return 'multicategory'; if(moreDates(array, calendar)) return 'date'; if(category(array)) return 'category'; if(linearOK(array)) return 'linear'; @@ -50336,15 +52456,20 @@ function linearOK(array) { // 2- or 4-digit integers can be both, so require twice as many // dates as non-dates, to exclude cases with mostly 2 & 4 digit // numbers and a few dates +// as with categories, consider DISTINCT values only. function moreDates(a, calendar) { - var dcnt = 0, - ncnt = 0, - // test at most 1000 points, evenly spaced - inc = Math.max(1, (a.length - 1) / 1000), - ai; + // test at most 1000 points, evenly spaced + var inc = Math.max(1, (a.length - 1) / 1000); + var dcnt = 0; + var ncnt = 0; + var seen = {}; for(var i = 0; i < a.length; i += inc) { - ai = a[Math.round(i)]; + var ai = a[Math.round(i)]; + var stri = String(ai); + if(seen[stri]) continue; + seen[stri] = 1; + if(Lib.isDateTime(ai, calendar)) dcnt += 1; if(isNumeric(ai)) ncnt += 1; } @@ -50353,26 +52478,38 @@ function moreDates(a, calendar) { } // are the (x,y)-values in gd.data mostly text? -// require twice as many categories as numbers +// require twice as many DISTINCT categories as distinct numbers function category(a) { // test at most 1000 points - var inc = Math.max(1, (a.length - 1) / 1000), - curvenums = 0, - curvecats = 0, - ai; + var inc = Math.max(1, (a.length - 1) / 1000); + var curvenums = 0; + var curvecats = 0; + var seen = {}; for(var i = 0; i < a.length; i += inc) { - ai = a[Math.round(i)]; - if(Lib.cleanNumber(ai) !== BADNUM) curvenums++; - else if(typeof ai === 'string' && ai !== '' && ai !== 'None') curvecats++; + var ai = a[Math.round(i)]; + var stri = String(ai); + if(seen[stri]) continue; + seen[stri] = 1; + + if(typeof ai === 'boolean') curvecats++; + else if(Lib.cleanNumber(ai) !== BADNUM) curvenums++; + else if(typeof ai === 'string') curvecats++; } return curvecats > curvenums * 2; } -},{"../../constants/numerical":151,"../../lib":169,"fast-isnumeric":18}],216:[function(_dereq_,module,exports){ +// very-loose requirements for multicategory, +// trace modules that should never auto-type to multicategory +// should be declared with 'noMultiCategory' +function multiCategory(a) { + return Lib.isArrayOrTypedArray(a[0]) && Lib.isArrayOrTypedArray(a[1]); +} + +},{"../../constants/numerical":149,"../../lib":168,"fast-isnumeric":18}],214:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50401,6 +52538,7 @@ var setConvert = _dereq_('./set_convert'); * outerTicks: boolean, should ticks default to outside? * showGrid: boolean, should gridlines be shown by default? * noHover: boolean, this axis doesn't support hover effects? + * noTickson: boolean, this axis doesn't support 'tickson' * data: the plot data, used to manage categories * bgColor: the plot background color, to calculate default gridline colors */ @@ -50441,8 +52579,8 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce, // try to get default title from splom trace, fallback to graph-wide value var dfltTitle = splomStash.label || layoutOut._dfltTitle[letter]; - coerce('title', dfltTitle); - Lib.coerceFont(coerce, 'titlefont', { + coerce('title.text', dfltTitle); + Lib.coerceFont(coerce, 'title.font', { family: font.family, size: Math.round(font.size * 1.2), color: dfltFontColor @@ -50462,12 +52600,31 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce, if(options.automargin) coerce('automargin'); + var isMultiCategory = containerOut.type === 'multicategory'; + + if(!options.noTickson && + (containerOut.type === 'category' || isMultiCategory) && + (containerOut.ticks || containerOut.showgrid) + ) { + var ticksonDflt; + if(isMultiCategory) ticksonDflt = 'boundaries'; + coerce('tickson', ticksonDflt); + } + + if(isMultiCategory) { + var showDividers = coerce('showdividers'); + if(showDividers) { + coerce('dividercolor'); + coerce('dividerwidth'); + } + } + return containerOut; }; -},{"../../lib":169,"../../registry":259,"./category_order_defaults":218,"./layout_attributes":226,"./line_grid_defaults":228,"./set_convert":232,"./tick_label_defaults":233,"./tick_mark_defaults":234,"./tick_value_defaults":235}],217:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"./category_order_defaults":216,"./layout_attributes":225,"./line_grid_defaults":227,"./set_convert":231,"./tick_label_defaults":232,"./tick_mark_defaults":233,"./tick_value_defaults":234}],215:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50583,9 +52740,9 @@ exports.idSort = function(id1, id2) { return +(id1.substr(1) || 1) - +(id2.substr(1) || 1); }; -},{"../../registry":259,"./constants":219}],218:[function(_dereq_,module,exports){ +},{"../../registry":257,"./constants":218}],216:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50677,9 +52834,98 @@ module.exports = function handleCategoryOrderDefaults(containerIn, containerOut, } }; -},{}],219:[function(_dereq_,module,exports){ +},{}],217:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); +var Lib = _dereq_('../../lib'); +var ONEDAY = _dereq_('../../constants/numerical').ONEDAY; + +/** + * Return a validated dtick value for this axis + * + * @param {any} dtick: the candidate dtick. valid values are numbers and strings, + * and further constrained depending on the axis type. + * @param {string} axType: the axis type + */ +exports.dtick = function(dtick, axType) { + var isLog = axType === 'log'; + var isDate = axType === 'date'; + var isCat = axType === 'category'; + var dtickDflt = isDate ? ONEDAY : 1; + + if(!dtick) return dtickDflt; + + if(isNumeric(dtick)) { + dtick = Number(dtick); + if(dtick <= 0) return dtickDflt; + if(isCat) { + // category dtick must be positive integers + return Math.max(1, Math.round(dtick)); + } + if(isDate) { + // date dtick must be at least 0.1ms (our current precision) + return Math.max(0.1, dtick); + } + return dtick; + } + + if(typeof dtick !== 'string' || !(isDate || isLog)) { + return dtickDflt; + } + + var prefix = dtick.charAt(0); + var dtickNum = dtick.substr(1); + dtickNum = isNumeric(dtickNum) ? Number(dtickNum) : 0; + + if((dtickNum <= 0) || !( + // "M" gives ticks every (integer) n months + (isDate && prefix === 'M' && dtickNum === Math.round(dtickNum)) || + // "L" gives ticks linearly spaced in data (not in position) every (float) f + (isLog && prefix === 'L') || + // "D1" gives powers of 10 with all small digits between, "D2" gives only 2 and 5 + (isLog && prefix === 'D' && (dtickNum === 1 || dtickNum === 2)) + )) { + return dtickDflt; + } + + return dtick; +}; + +/** + * Return a validated tick0 for this axis + * + * @param {any} tick0: the candidate tick0. Valid values are numbers and strings, + * further constrained depending on the axis type + * @param {string} axType: the axis type + * @param {string} calendar: for date axes, the calendar to validate/convert with + * @param {any} dtick: an already valid dtick. Only used for D1 and D2 log dticks, + * which do not support tick0 at all. + */ +exports.tick0 = function(tick0, axType, calendar, dtick) { + if(axType === 'date') { + return Lib.cleanDate(tick0, Lib.dateTick0(calendar)); + } + if(dtick === 'D1' || dtick === 'D2') { + // D1 and D2 modes ignore tick0 entirely + return undefined; + } + // Aside from date axes, tick0 must be numeric + return isNumeric(tick0) ? Number(tick0) : 0; +}; + +},{"../../constants/numerical":149,"../../lib":168,"fast-isnumeric":18}],218:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50759,9 +53005,9 @@ module.exports = { } }; -},{"../../lib/regex":185}],220:[function(_dereq_,module,exports){ +},{"../../lib/regex":183}],219:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50913,9 +53159,9 @@ function updateConstraintGroups(constraintGroups, thisGroup, thisID, scaleanchor thisGroup[scaleanchor] = 1; } -},{"../../lib":169,"./axis_ids":217}],221:[function(_dereq_,module,exports){ +},{"../../lib":168,"./axis_ids":215}],220:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -51055,7 +53301,6 @@ exports.enforce = function enforceAxisConstraints(gd) { var getPad = makePadFn(ax); updateDomain(ax, factor); - ax.setScale(); var m = Math.abs(ax._m); var extremes = concatExtremes(gd, ax); var minArray = extremes.min; @@ -51122,11 +53367,12 @@ function updateDomain(ax, factor) { center + (inputDomain[0] - center) / factor, center + (inputDomain[1] - center) / factor ]; + ax.setScale(); } -},{"../../constants/alignment":148,"../../constants/numerical":151,"./autorange":213,"./axis_ids":217,"./scale_zoom":230}],222:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../constants/numerical":149,"./autorange":211,"./axis_ids":215,"./scale_zoom":229}],221:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -51143,17 +53389,18 @@ var supportsPassive = _dereq_('has-passive-events'); var Registry = _dereq_('../../registry'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); -var clearGlCanvases = _dereq_('../../lib/clear_gl_canvases'); var Color = _dereq_('../../components/color'); var Drawing = _dereq_('../../components/drawing'); var Fx = _dereq_('../../components/fx'); +var Axes = _dereq_('./axes'); var setCursor = _dereq_('../../lib/setcursor'); var dragElement = _dereq_('../../components/dragelement'); var FROM_TL = _dereq_('../../constants/alignment').FROM_TL; +var clearGlCanvases = _dereq_('../../lib/clear_gl_canvases'); +var redrawReglTraces = _dereq_('../../plot_api/subroutines').redrawReglTraces; var Plots = _dereq_('../plots'); -var doTicksSingle = _dereq_('./axes').doTicksSingle; var getFromId = _dereq_('./axis_ids').getFromId; var prepSelect = _dereq_('./select').prepSelect; var clearSelect = _dereq_('./select').clearSelect; @@ -51211,7 +53458,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { // do we need to edit x/y ranges? var editX, editY; // graph-wide optimization flags - var hasScatterGl, hasOnlyLargeSploms, hasSplom, hasSVG; + var hasScatterGl, hasSplom, hasSVG; // collected changes to be made to the plot by relayout at the end var updates; @@ -51252,8 +53499,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { var fullLayout = gd._fullLayout; hasScatterGl = fullLayout._has('scattergl'); - hasOnlyLargeSploms = fullLayout._hasOnlyLargeSploms; - hasSplom = hasOnlyLargeSploms || fullLayout._has('splom'); + hasSplom = fullLayout._has('splom'); hasSVG = fullLayout._has('svg'); } @@ -51369,12 +53615,12 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { } } else if(numClicks === 1 && singleEnd) { - var ax = ns ? ya0 : xa0, - end = (ns === 's' || ew === 'w') ? 0 : 1, - attrStr = ax._name + '.range[' + end + ']', - initialText = getEndText(ax, end), - hAlign = 'left', - vAlign = 'middle'; + var ax = ns ? ya0 : xa0; + var end = (ns === 's' || ew === 'w') ? 0 : 1; + var attrStr = ax._name + '.range[' + end + ']'; + var initialText = getEndText(ax, end); + var hAlign = 'left'; + var vAlign = 'middle'; if(ax.fixedrange) return; @@ -51398,7 +53644,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { .on('edit', function(text) { var v = ax.d2r(text); if(v !== undefined) { - Registry.call('relayout', gd, attrStr, v); + Registry.call('_guiRelayout', gd, attrStr, v); } }); } @@ -51443,10 +53689,10 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { return false; } - var x1 = Math.max(0, Math.min(pw, dx0 + x0)), - y1 = Math.max(0, Math.min(ph, dy0 + y0)), - dx = Math.abs(x1 - x0), - dy = Math.abs(y1 - y0); + var x1 = Math.max(0, Math.min(pw, dx0 + x0)); + var y1 = Math.max(0, Math.min(ph, dy0 + y0)); + var dx = Math.abs(x1 - x0); + var dy = Math.abs(y1 - y0); box.l = Math.min(x0, x1); box.r = Math.max(x0, x1); @@ -51544,7 +53790,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { // deactivate mousewheel scrolling on embedded graphs // devs can override this with layout._enablescrollzoom, // but _ ensures this setting won't leave their page - if(!gd._context.scrollZoom && !gd._fullLayout._enablescrollzoom) { + if(!gd._context._scrollZoom.cartesian && !gd._fullLayout._enablescrollzoom) { return; } @@ -51557,17 +53803,8 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { return; } - var pc = gd.querySelector('.plotly'); - recomputeAxisLists(); - // if the plot has scrollbars (more than a tiny excess) - // disable scrollzoom too. - if(pc.scrollHeight - pc.clientHeight > 10 || - pc.scrollWidth - pc.clientWidth > 10) { - return; - } - clearTimeout(redrawTimer); var wheelDelta = -e.deltaY; @@ -51577,18 +53814,17 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { return; } - var zoom = Math.exp(-Math.min(Math.max(wheelDelta, -20), 20) / 200), - gbb = mainplot.draglayer.select('.nsewdrag') - .node().getBoundingClientRect(), - xfrac = (e.clientX - gbb.left) / gbb.width, - yfrac = (gbb.bottom - e.clientY) / gbb.height, - i; + var zoom = Math.exp(-Math.min(Math.max(wheelDelta, -20), 20) / 200); + var gbb = mainplot.draglayer.select('.nsewdrag').node().getBoundingClientRect(); + var xfrac = (e.clientX - gbb.left) / gbb.width; + var yfrac = (gbb.bottom - e.clientY) / gbb.height; + var i; function zoomWheelOneAxis(ax, centerFraction, zoom) { if(ax.fixedrange) return; - var axRange = Lib.simpleMap(ax.range, ax.r2l), - v0 = axRange[0] + (axRange[1] - axRange[0]) * centerFraction; + var axRange = Lib.simpleMap(ax.range, ax.r2l); + var v0 = axRange[0] + (axRange[1] - axRange[0]) * centerFraction; function doZoom(v) { return ax.l2r(v0 + (v - v0) * zoom); } ax.range = axRange.map(doZoom); } @@ -51618,7 +53854,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { // viewbox redraw at first updateSubplots(scrollViewBox); - ticksAndAnnotations(ns, ew); + ticksAndAnnotations(); // then replot after a delay to make sure // no more scrolling is coming @@ -51643,11 +53879,14 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { return; } + // prevent axis drawing from monkeying with margins until we're done + gd._fullLayout._replotting = true; + if(xActive === 'ew' || yActive === 'ns') { if(xActive) dragAxList(xaxes, dx); if(yActive) dragAxList(yaxes, dy); updateSubplots([xActive ? -dx : 0, yActive ? -dy : 0, pw, ph]); - ticksAndAnnotations(yActive, xActive); + ticksAndAnnotations(); return; } @@ -51657,9 +53896,9 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { // TODO: this makes (generally non-fatal) errors when you get // near floating point limits function dz(axArray, end, d) { - var otherEnd = 1 - end, - movedAx, - newLinearizedEnd; + var otherEnd = 1 - end; + var movedAx; + var newLinearizedEnd; for(var i = 0; i < axArray.length; i++) { var axi = axArray[i]; if(axi.fixedrange) continue; @@ -51719,14 +53958,14 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { } updateSubplots([x0, y0, pw - dx, ph - dy]); - ticksAndAnnotations(yActive, xActive); + ticksAndAnnotations(); } // Draw ticks and annotations (and other components) when ranges change. // Also records the ranges that have changed for use by update at the end. - function ticksAndAnnotations(ns, ew) { - var activeAxIds = [], - i; + function ticksAndAnnotations() { + var activeAxIds = []; + var i; function pushActiveAxIds(axList) { for(i = 0; i < axList.length; i++) { @@ -51746,39 +53985,21 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { updates = {}; for(i = 0; i < activeAxIds.length; i++) { var axId = activeAxIds[i]; - doTicksSingle(gd, axId, true); var ax = getFromId(gd, axId); + Axes.drawOne(gd, ax, {skipTitle: true}); updates[ax._name + '.range[0]'] = ax.range[0]; updates[ax._name + '.range[1]'] = ax.range[1]; } - function redrawObjs(objArray, method, shortCircuit) { - for(i = 0; i < objArray.length; i++) { - var obji = objArray[i]; - - if((ew && activeAxIds.indexOf(obji.xref) !== -1) || - (ns && activeAxIds.indexOf(obji.yref) !== -1)) { - method(gd, i); - // once is enough for images (which doesn't use the `i` arg anyway) - if(shortCircuit) return; - } - } - } - - // annotations and shapes 'draw' method is slow, - // use the finer-grained 'drawOne' method instead - - redrawObjs(gd._fullLayout.annotations || [], Registry.getComponentMethod('annotations', 'drawOne')); - redrawObjs(gd._fullLayout.shapes || [], Registry.getComponentMethod('shapes', 'drawOne')); - redrawObjs(gd._fullLayout.images || [], Registry.getComponentMethod('images', 'draw'), true); + Axes.redrawComponents(gd, activeAxIds); } function doubleClick() { if(gd._transitioningWithDuration) return; - var doubleClickConfig = gd._context.doubleClick, - axList = (xActive ? xaxes : []).concat(yActive ? yaxes : []), - attrs = {}; + var doubleClickConfig = gd._context.doubleClick; + var axList = (xActive ? xaxes : []).concat(yActive ? yaxes : []); + var attrs = {}; var ax, i, rangeInitial; @@ -51827,19 +54048,20 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { for(i = 0; i < axList.length; i++) { ax = axList[i]; - if(!ax._rangeInitial) { - attrs[ax._name + '.autorange'] = true; - } - else { - rangeInitial = ax._rangeInitial; - attrs[ax._name + '.range[0]'] = rangeInitial[0]; - attrs[ax._name + '.range[1]'] = rangeInitial[1]; + if(!ax.fixedrange) { + if(!ax._rangeInitial) { + attrs[ax._name + '.autorange'] = true; + } else { + rangeInitial = ax._rangeInitial; + attrs[ax._name + '.range[0]'] = rangeInitial[0]; + attrs[ax._name + '.range[1]'] = rangeInitial[1]; + } } } } gd.emit('plotly_doubleclick', null); - Registry.call('relayout', gd, attrs); + Registry.call('_guiRelayout', gd, attrs); } // dragTail - finish a drag event with a redraw @@ -51853,7 +54075,10 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { // accumulated MathJax promises - wait for them before we relayout. Lib.syncOrAsync([ Plots.previousPromises, - function() { Registry.call('relayout', gd, updates); } + function() { + gd._fullLayout._replotting = false; + Registry.call('_guiRelayout', gd, updates); + } ], gd); } @@ -51871,33 +54096,29 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { var subplots = fullLayout._subplots.cartesian; var i, sp, xa, ya; - if(hasSplom || hasScatterGl) { - clearGlCanvases(gd); - } - if(hasSplom) { Registry.subplotsRegistry.splom.drag(gd); - if(hasOnlyLargeSploms) return; } if(hasScatterGl) { - // loop over all subplots (w/o exceptions) here, - // as we cleared the gl canvases above for(i = 0; i < subplots.length; i++) { sp = plotinfos[subplots[i]]; xa = sp.xaxis; ya = sp.yaxis; - var scene = sp._scene; - if(scene) { - // FIXME: possibly we could update axis internal _r and _rl here + if(sp._scene) { var xrng = Lib.simpleMap(xa.range, xa.r2l); var yrng = Lib.simpleMap(ya.range, ya.r2l); - scene.update({range: [xrng[0], yrng[0], xrng[1], yrng[1]]}); + sp._scene.update({range: [xrng[0], yrng[0], xrng[1], yrng[1]]}); } } } + if(hasSplom || hasScatterGl) { + clearGlCanvases(gd); + redrawReglTraces(gd); + } + if(hasSVG) { var xScaleFactor = viewBox[2] / xa0._length; var yScaleFactor = viewBox[3] / ya0._length; @@ -52028,9 +54249,9 @@ function isDirectionActive(axList, activeVal) { } function getEndText(ax, end) { - var initialVal = ax.range[end], - diff = Math.abs(initialVal - ax.range[1 - end]), - dig; + var initialVal = ax.range[end]; + var diff = Math.abs(initialVal - ax.range[1 - end]); + var dig; // TODO: this should basically be ax.r2d but we're doing extra // rounding here... can we clean up at all? @@ -52315,9 +54536,9 @@ module.exports = { attachWheelEventHandler: attachWheelEventHandler }; -},{"../../components/color":50,"../../components/dragelement":72,"../../components/drawing":75,"../../components/fx":92,"../../constants/alignment":148,"../../lib":169,"../../lib/clear_gl_canvases":157,"../../lib/setcursor":189,"../../lib/svg_text_utils":191,"../../registry":259,"../plots":246,"./axes":214,"./axis_ids":217,"./constants":219,"./scale_zoom":230,"./select":231,"d3":16,"has-passive-events":21,"tinycolor2":33}],223:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/dragelement":69,"../../components/drawing":72,"../../components/fx":90,"../../constants/alignment":146,"../../lib":168,"../../lib/clear_gl_canvases":157,"../../lib/setcursor":187,"../../lib/svg_text_utils":189,"../../plot_api/subroutines":203,"../../registry":257,"../plots":245,"./axes":212,"./axis_ids":215,"./constants":218,"./scale_zoom":229,"./select":230,"d3":16,"has-passive-events":21,"tinycolor2":34}],222:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -52351,8 +54572,8 @@ exports.initInteractions = function initInteractions(gd) { // sort overlays last, then by x axis number, then y axis number if((fullLayout._plots[a].mainplot && true) === (fullLayout._plots[b].mainplot && true)) { - var aParts = a.split('y'), - bParts = b.split('y'); + var aParts = a.split('y'); + var bParts = b.split('y'); return (aParts[0] === bParts[0]) ? (Number(aParts[1] || 1) - Number(bParts[1] || 1)) : (Number(aParts[0] || 1) - Number(bParts[0] || 1)); @@ -52483,9 +54704,9 @@ exports.updateFx = function(gd) { setCursor(fullLayout._draggers, cursor); }; -},{"../../components/dragelement":72,"../../components/fx":92,"../../lib/setcursor":189,"./constants":219,"./dragbox":222,"d3":16}],224:[function(_dereq_,module,exports){ +},{"../../components/dragelement":69,"../../components/fx":90,"../../lib/setcursor":187,"./constants":218,"./dragbox":221,"d3":16}],223:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -52558,9 +54779,9 @@ module.exports = function makeIncludeComponents(containerArrayName) { }; }; -},{"../../lib":169,"../../registry":259}],225:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],224:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -52823,7 +55044,7 @@ function plotOne(gd, plotinfo, cdSubplot, transitionOpts, makeOnCompleteCallback // layers that allow `cliponaxis: false` if(className !== 'scatterlayer' && className !== 'barlayer') { - Drawing.setClipUrl(sel, plotinfo.layerClipId); + Drawing.setClipUrl(sel, plotinfo.layerClipId, gd); } }); @@ -53025,7 +55246,6 @@ function makeSubplotLayer(gd, plotinfo) { // and other places // - we don't (x|y)lines and (x|y)axislayer for most subplots // usually just the bottom x and left y axes. - plotinfo.plot = ensureSingle(plotgroup, 'g', 'plot'); plotinfo.xlines = ensureSingle(plotgroup, 'path', 'xlines-above'); plotinfo.ylines = ensureSingle(plotgroup, 'path', 'ylines-above'); plotinfo.xaxislayer = ensureSingle(plotgroup, 'g', 'xaxislayer-above'); @@ -53182,9 +55402,9 @@ exports.toSVG = function(gd) { exports.updateFx = _dereq_('./graph_interact').updateFx; -},{"../../components/drawing":75,"../../constants/xmlns_namespaces":152,"../../lib":169,"../../registry":259,"../get_data":242,"../plots":246,"./attributes":212,"./axis_ids":217,"./constants":219,"./graph_interact":223,"./layout_attributes":226,"./layout_defaults":227,"./transition_axes":236,"d3":16}],226:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../constants/xmlns_namespaces":150,"../../lib":168,"../../registry":257,"../get_data":241,"../plots":245,"./attributes":210,"./axis_ids":215,"./constants":218,"./graph_interact":222,"./layout_attributes":225,"./layout_defaults":226,"./transition_axes":235,"d3":16}],225:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53217,21 +55437,24 @@ module.exports = { }, title: { - valType: 'string', - - editType: 'ticks', - + text: { + valType: 'string', + + editType: 'ticks', + + }, + font: fontAttrs({ + editType: 'ticks', + + }), + editType: 'ticks' }, - titlefont: fontAttrs({ - editType: 'ticks', - - }), type: { valType: 'enumerated', // '-' means we haven't yet run autotype or couldn't find any data // it gets turned into linear in gd._fullLayout but not copied back // to gd.data like the others are. - values: ['-', 'linear', 'log', 'date', 'category'], + values: ['-', 'linear', 'log', 'date', 'category', 'multicategory'], dflt: '-', editType: 'calc', @@ -53263,11 +55486,12 @@ module.exports = { valType: 'info_array', items: [ - {valType: 'any', editType: 'axrange', impliedEdits: {'^autorange': false}}, - {valType: 'any', editType: 'axrange', impliedEdits: {'^autorange': false}} + {valType: 'any', editType: 'axrange', impliedEdits: {'^autorange': false}, anim: true}, + {valType: 'any', editType: 'axrange', impliedEdits: {'^autorange': false}, anim: true} ], editType: 'axrange', impliedEdits: {'autorange': false}, + anim: true, }, fixedrange: { @@ -53360,6 +55584,14 @@ module.exports = { editType: 'ticks', + }, + tickson: { + valType: 'enumerated', + values: ['labels', 'boundaries'], + + dflt: 'labels', + editType: 'ticks', + }, mirror: { valType: 'enumerated', @@ -53613,6 +55845,30 @@ module.exports = { editType: 'ticks', }, + + showdividers: { + valType: 'boolean', + dflt: true, + + editType: 'ticks', + + }, + dividercolor: { + valType: 'color', + dflt: colorAttrs.defaultLine, + + editType: 'ticks', + + }, + dividerwidth: { + valType: 'number', + dflt: 1, + + editType: 'ticks', + + }, + // TODO dividerlen: that would override "to label base" length? + // positioning attributes // anchor: not used directly, just put here for reference // values are any opposite-letter axis id @@ -53694,6 +55950,12 @@ module.exports = { editType: 'calc', + }, + uirevision: { + valType: 'any', + + editType: 'none', + }, editType: 'calc', @@ -53703,13 +55965,23 @@ module.exports = { editType: 'ticks', - } + }, + title: { + valType: 'string', + + editType: 'ticks', + + }, + titlefont: fontAttrs({ + editType: 'ticks', + + }) } }; -},{"../../components/color/attributes":49,"../../components/drawing/attributes":74,"../../lib/extend":163,"../../plot_api/plot_template":204,"../font_attributes":240,"./constants":219}],227:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../components/drawing/attributes":71,"../../lib/extend":162,"../../plot_api/plot_template":202,"../font_attributes":239,"./constants":218}],226:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53812,12 +56084,12 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { // plot_bgcolor only makes sense if there's a (2D) plot! // TODO: bgcolor for each subplot, to inherit from the main one - var plot_bgcolor = Color.background; + var plotBgColor = Color.background; if(xIds.length && yIds.length) { - plot_bgcolor = Lib.coerce(layoutIn, layoutOut, basePlotLayoutAttributes, 'plot_bgcolor'); + plotBgColor = Lib.coerce(layoutIn, layoutOut, basePlotLayoutAttributes, 'plot_bgcolor'); } - var bgColor = Color.combine(plot_bgcolor, layoutOut.paper_bgcolor); + var bgColor = Color.combine(plotBgColor, layoutOut.paper_bgcolor); var axName, axLetter, axLayoutIn, axLayoutOut; @@ -53866,9 +56138,12 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { axLayoutOut._traceIndices = traces.map(function(t) { return t._expandedIndex; }); axLayoutOut._annIndices = []; axLayoutOut._shapeIndices = []; + axLayoutOut._imgIndices = []; + axLayoutOut._subplotsWith = []; + axLayoutOut._counterAxes = []; // set up some private properties - axLayoutOut._name = axName; + axLayoutOut._name = axLayoutOut._attr = axName; var id = axLayoutOut._id = name2id(axName); var overlayableAxes = getOverlayableAxes(axLetter, axName); @@ -53886,15 +56161,17 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { splomStash: ((layoutOut._splomAxes || {})[axLetter] || {})[id] }; + coerce('uirevision', layoutOut.uirevision); + handleTypeDefaults(axLayoutIn, axLayoutOut, coerce, defaultOptions); handleAxisDefaults(axLayoutIn, axLayoutOut, coerce, defaultOptions, layoutOut); - var spikecolor = coerce2('spikecolor'), - spikethickness = coerce2('spikethickness'), - spikedash = coerce2('spikedash'), - spikemode = coerce2('spikemode'), - spikesnap = coerce2('spikesnap'), - showSpikes = coerce('showspikes', !!spikecolor || !!spikethickness || !!spikedash || !!spikemode || !!spikesnap); + var spikecolor = coerce2('spikecolor'); + var spikethickness = coerce2('spikethickness'); + var spikedash = coerce2('spikedash'); + var spikemode = coerce2('spikemode'); + var spikesnap = coerce2('spikesnap'); + var showSpikes = coerce('showspikes', !!spikecolor || !!spikethickness || !!spikedash || !!spikemode || !!spikesnap); if(!showSpikes) { delete axLayoutOut.spikecolor; @@ -53947,11 +56224,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { var anchoredAxis = layoutOut[id2name(axLayoutOut.anchor)]; - var fixedRangeDflt = ( - anchoredAxis && - anchoredAxis.rangeslider && - anchoredAxis.rangeslider.visible - ); + var fixedRangeDflt = getComponentMethod('rangeslider', 'isVisible')(anchoredAxis); coerce('fixedrange', fixedRangeDflt); } @@ -53976,9 +56249,9 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { } }; -},{"../../components/color":50,"../../lib":169,"../../plot_api/plot_template":204,"../../registry":259,"../layout_attributes":244,"./axis_defaults":216,"./axis_ids":217,"./constraint_defaults":220,"./layout_attributes":226,"./position_defaults":229,"./type_defaults":237}],228:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../../plot_api/plot_template":202,"../../registry":257,"../layout_attributes":243,"./axis_defaults":214,"./axis_ids":215,"./constraint_defaults":219,"./layout_attributes":225,"./position_defaults":228,"./type_defaults":236}],227:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54041,9 +56314,9 @@ module.exports = function handleLineGridDefaults(containerIn, containerOut, coer } }; -},{"../../components/color/attributes":49,"../../lib":169,"tinycolor2":33}],229:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../lib":168,"tinycolor2":34}],228:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54116,7 +56389,11 @@ module.exports = function handlePositionDefaults(containerIn, containerOut, coer // in the axes popover to hide domain for the overlaying axis. // perhaps I should make a private version _domain that all axes get??? var domain = coerce('domain', dfltDomain); - if(domain[0] > domain[1] - 0.01) containerOut.domain = dfltDomain; + + // according to https://www.npmjs.com/package/canvas-size + // the minimum value of max canvas width across browsers and devices is 4096 + // which applied in the calculation below: + if(domain[0] > domain[1] - 1 / 4096) containerOut.domain = dfltDomain; Lib.noneOrAll(containerIn.domain, containerOut.domain, dfltDomain); } @@ -54125,9 +56402,9 @@ module.exports = function handlePositionDefaults(containerIn, containerOut, coer return containerOut; }; -},{"../../lib":169,"fast-isnumeric":18}],230:[function(_dereq_,module,exports){ +},{"../../lib":168,"fast-isnumeric":18}],229:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54153,9 +56430,9 @@ module.exports = function scaleZoom(ax, factor, centerFraction) { ]; }; -},{"../../constants/alignment":148}],231:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146}],230:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54175,7 +56452,8 @@ var polygon = _dereq_('../../lib/polygon'); var throttle = _dereq_('../../lib/throttle'); var makeEventData = _dereq_('../../components/fx/helpers').makeEventData; var getFromId = _dereq_('./axis_ids').getFromId; -var sortModules = _dereq_('../sort_modules').sortModules; +var clearGlCanvases = _dereq_('../../lib/clear_gl_canvases'); +var redrawReglTraces = _dereq_('../../plot_api/subroutines').redrawReglTraces; var constants = _dereq_('./constants'); var MINSELECT = constants.MINSELECT; @@ -54281,8 +56559,8 @@ function prepSelect(e, startX, startY, dragOptions, mode) { x1 = Math.max(0, Math.min(pw, dx0 + x0)); y1 = Math.max(0, Math.min(ph, dy0 + y0)); - var dx = Math.abs(x1 - x0), - dy = Math.abs(y1 - y0); + var dx = Math.abs(x1 - x0); + var dy = Math.abs(y1 - y0); if(mode === 'select') { var direction = fullLayout.selectdirection; @@ -54358,7 +56636,9 @@ function prepSelect(e, startX, startY, dragOptions, mode) { function() { selection = []; - var thisSelection, traceSelections = [], traceSelection; + var thisSelection; + var traceSelections = []; + var traceSelection; for(i = 0; i < searchTraces.length; i++) { searchInfo = searchTraces[i]; @@ -54670,7 +56950,9 @@ function determineSearchTraces(gd, xAxes, yAxes, subplot) { // FIXME: make sure we don't have more than single axis for splom trace._xaxes[xAxisIds[0]] && trace._yaxes[yAxisIds[0]] ) { - searchTraces.push(createSearchInfo(trace._module, cd, xAxes[0], yAxes[0])); + var info = createSearchInfo(trace._module, cd, xAxes[0], yAxes[0]); + info.scene = gd._fullLayout._splomScenes[trace.uid]; + searchTraces.push(info); } else { if(xAxisIds.indexOf(trace.xaxis) === -1) continue; if(yAxisIds.indexOf(trace.yaxis) === -1) continue; @@ -54817,15 +57099,24 @@ function isOnlyOnePointSelected(searchTraces) { } function updateSelectedState(gd, searchTraces, eventData) { - var i, j, searchInfo, trace; + var i, searchInfo, cd, trace; + + // before anything else, update preGUI if necessary + for(i = 0; i < searchTraces.length; i++) { + var fullInputTrace = searchTraces[i].cd[0].trace._fullInput; + var tracePreGUI = gd._fullLayout._tracePreGUI[fullInputTrace.uid]; + if(tracePreGUI.selectedpoints === undefined) { + tracePreGUI.selectedpoints = fullInputTrace._input.selectedpoints || null; + } + } if(eventData) { var pts = eventData.points || []; for(i = 0; i < searchTraces.length; i++) { trace = searchTraces[i].cd[0].trace; - trace.selectedpoints = []; - trace._input.selectedpoints = []; + trace._input.selectedpoints = trace._fullInput.selectedpoints = []; + if(trace._fullInput !== trace) trace.selectedpoints = []; } for(i = 0; i < pts.length; i++) { @@ -54835,10 +57126,14 @@ function updateSelectedState(gd, searchTraces, eventData) { if(pt.pointIndices) { [].push.apply(data.selectedpoints, pt.pointIndices); - [].push.apply(fullData.selectedpoints, pt.pointIndices); + if(trace._fullInput !== trace) { + [].push.apply(fullData.selectedpoints, pt.pointIndices); + } } else { data.selectedpoints.push(pt.pointIndex); - fullData.selectedpoints.push(pt.pointIndex); + if(trace._fullInput !== trace) { + fullData.selectedpoints.push(pt.pointIndex); + } } } } @@ -54847,46 +57142,31 @@ function updateSelectedState(gd, searchTraces, eventData) { trace = searchTraces[i].cd[0].trace; delete trace.selectedpoints; delete trace._input.selectedpoints; + if(trace._fullInput !== trace) { + delete trace._fullInput.selectedpoints; + } } } - // group searchInfo traces by trace modules - var lookup = {}; + var hasRegl = false; for(i = 0; i < searchTraces.length; i++) { searchInfo = searchTraces[i]; + cd = searchInfo.cd; + trace = cd[0].trace; - var name = searchInfo._module.name; - if(lookup[name]) { - lookup[name].push(searchInfo); - } else { - lookup[name] = [searchInfo]; + if(Registry.traceIs(trace, 'regl')) { + hasRegl = true; } + + var _module = searchInfo._module; + var fn = _module.styleOnSelect || _module.style; + if(fn) fn(gd, cd); } - var keys = Object.keys(lookup).sort(sortModules); - - for(i = 0; i < keys.length; i++) { - var items = lookup[keys[i]]; - var len = items.length; - var item0 = items[0]; - var trace0 = item0.cd[0].trace; - var _module = item0._module; - var styleSelection = _module.styleOnSelect || _module.style; - - if(Registry.traceIs(trace0, 'regl')) { - // plot regl traces per module - var cds = new Array(len); - for(j = 0; j < len; j++) { - cds[j] = items[j].cd; - } - styleSelection(gd, cds); - } else { - // plot svg trace per trace - for(j = 0; j < len; j++) { - styleSelection(gd, items[j].cd); - } - } + if(hasRegl) { + clearGlCanvases(gd); + redrawReglTraces(gd); } } @@ -54942,9 +57222,9 @@ module.exports = { selectOnClick: selectOnClick }; -},{"../../components/color":50,"../../components/fx":92,"../../components/fx/helpers":89,"../../lib/polygon":182,"../../lib/throttle":192,"../../registry":259,"../sort_modules":253,"./axis_ids":217,"./constants":219,"polybooljs":24}],232:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":90,"../../components/fx/helpers":86,"../../lib/clear_gl_canvases":157,"../../lib/polygon":180,"../../lib/throttle":190,"../../plot_api/subroutines":203,"../../registry":257,"./axis_ids":215,"./constants":218,"polybooljs":25}],231:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54962,6 +57242,7 @@ var cleanNumber = Lib.cleanNumber; var ms2DateTime = Lib.ms2DateTime; var dateTime2ms = Lib.dateTime2ms; var ensureNumber = Lib.ensureNumber; +var isArrayOrTypedArray = Lib.isArrayOrTypedArray; var numConstants = _dereq_('../../constants/numerical'); var FP_SAFE = numConstants.FP_SAFE; @@ -54975,6 +57256,10 @@ function fromLog(v) { return Math.pow(10, v); } +function isValidCategory(v) { + return v !== null && v !== undefined; +} + /** * Define the conversion functions for an axis data is used in 5 ways: * @@ -55011,8 +57296,8 @@ module.exports = function setConvert(ax, fullLayout) { else if(v <= 0 && clip && ax.range && ax.range.length === 2) { // clip NaN (ie past negative infinity) to LOG_CLIP axis // length past the negative edge - var r0 = ax.range[0], - r1 = ax.range[1]; + var r0 = ax.range[0]; + var r1 = ax.range[1]; return 0.5 * (r0 + r1 - 2 * LOG_CLIP * Math.abs(r0 - r1)); } @@ -55068,7 +57353,7 @@ module.exports = function setConvert(ax, fullLayout) { * a disconnect between the array and the index returned */ function setCategoryIndex(v) { - if(v !== null && v !== undefined) { + if(isValidCategory(v)) { if(ax._categoriesMap === undefined) { ax._categoriesMap = {}; } @@ -55087,14 +57372,29 @@ module.exports = function setConvert(ax, fullLayout) { return BADNUM; } - function getCategoryIndex(v) { - // d2l/d2c variant that that won't add categories but will also - // allow numbers to be mapped to the linearized axis positions - if(ax._categoriesMap) { - var index = ax._categoriesMap[v]; - if(index !== undefined) return index; + function setMultiCategoryIndex(arrayIn, len) { + var arrayOut = new Array(len); + + for(var i = 0; i < len; i++) { + var v0 = (arrayIn[0] || [])[i]; + var v1 = (arrayIn[1] || [])[i]; + arrayOut[i] = getCategoryIndex([v0, v1]); } + return arrayOut; + } + + function getCategoryIndex(v) { + if(ax._categoriesMap) { + return ax._categoriesMap[v]; + } + } + + function getCategoryPosition(v) { + // d2l/d2c variant that that won't add categories but will also + // allow numbers to be mapped to the linearized axis positions + var index = getCategoryIndex(v); + if(index !== undefined) return index; if(isNumeric(v)) return +v; } @@ -55180,15 +57480,15 @@ module.exports = function setConvert(ax, fullLayout) { ax.d2c = ax.d2l = setCategoryIndex; ax.r2d = ax.c2d = ax.l2d = getCategoryName; - ax.d2r = ax.d2l_noadd = getCategoryIndex; + ax.d2r = ax.d2l_noadd = getCategoryPosition; ax.r2c = function(v) { - var index = getCategoryIndex(v); + var index = getCategoryPosition(v); return index !== undefined ? index : ax.fraction2r(0.5); }; ax.l2r = ax.c2r = ensureNumber; - ax.r2l = getCategoryIndex; + ax.r2l = getCategoryPosition; ax.d2p = function(v) { return ax.l2p(ax.r2c(v)); }; ax.p2d = function(px) { return getCategoryName(p2l(px)); }; @@ -55200,18 +57500,96 @@ module.exports = function setConvert(ax, fullLayout) { return ensureNumber(v); }; } + else if(ax.type === 'multicategory') { + // N.B. multicategory axes don't define d2c and d2l, + // as 'data-to-calcdata' conversion needs to take into + // account all data array items as in ax.makeCalcdata. + + ax.r2d = ax.c2d = ax.l2d = getCategoryName; + ax.d2r = ax.d2l_noadd = getCategoryPosition; + + ax.r2c = function(v) { + var index = getCategoryPosition(v); + return index !== undefined ? index : ax.fraction2r(0.5); + }; + + ax.r2c_just_indices = getCategoryIndex; + + ax.l2r = ax.c2r = ensureNumber; + ax.r2l = getCategoryPosition; + + ax.d2p = function(v) { return ax.l2p(ax.r2c(v)); }; + ax.p2d = function(px) { return getCategoryName(p2l(px)); }; + ax.r2p = ax.d2p; + ax.p2r = p2l; + + ax.cleanPos = function(v) { + if(Array.isArray(v) || (typeof v === 'string' && v !== '')) return v; + return ensureNumber(v); + }; + + ax.setupMultiCategory = function(fullData) { + var traceIndices = ax._traceIndices; + var i, j; + + // [ [cnt, {$cat: index}], for 1,2 ] + var seen = ax._multicatSeen = [[0, {}], [0, {}]]; + // [ [arrayIn[0][i], arrayIn[1][i]], for i .. N ] + var list = ax._multicatList = []; + + for(i = 0; i < traceIndices.length; i++) { + var trace = fullData[traceIndices[i]]; + + if(axLetter in trace) { + var arrayIn = trace[axLetter]; + var len = trace._length || Lib.minRowLength(arrayIn); + + if(isArrayOrTypedArray(arrayIn[0]) && isArrayOrTypedArray(arrayIn[1])) { + for(j = 0; j < len; j++) { + var v0 = arrayIn[0][j]; + var v1 = arrayIn[1][j]; + + if(isValidCategory(v0) && isValidCategory(v1)) { + list.push([v0, v1]); + + if(!(v0 in seen[0][1])) { + seen[0][1][v0] = seen[0][0]++; + } + if(!(v1 in seen[1][1])) { + seen[1][1][v1] = seen[1][0]++; + } + } + } + } + } + } + + list.sort(function(a, b) { + var ind0 = seen[0][1]; + var d = ind0[a[0]] - ind0[b[0]]; + if(d) return d; + + var ind1 = seen[1][1]; + return ind1[a[1]] - ind1[b[1]]; + }); + + for(i = 0; i < list.length; i++) { + setCategoryIndex(list[i]); + } + }; + } // find the range value at the specified (linear) fraction of the axis ax.fraction2r = function(v) { - var rl0 = ax.r2l(ax.range[0]), - rl1 = ax.r2l(ax.range[1]); + var rl0 = ax.r2l(ax.range[0]); + var rl1 = ax.r2l(ax.range[1]); return ax.l2r(rl0 + v * (rl1 - rl0)); }; // find the fraction of the range at the specified range value ax.r2fraction = function(v) { - var rl0 = ax.r2l(ax.range[0]), - rl1 = ax.r2l(ax.range[1]); + var rl0 = ax.r2l(ax.range[0]); + var rl1 = ax.r2l(ax.range[1]); return (ax.r2l(v) - rl0) / (rl1 - rl0); }; @@ -55293,11 +57671,6 @@ module.exports = function setConvert(ax, fullLayout) { ax.setScale = function(usePrivateRange) { var gs = fullLayout._size; - // TODO cleaner way to handle this case - if(!ax._categories) ax._categories = []; - // Add a map to optimize the performance of category collection - if(!ax._categoriesMap) ax._categoriesMap = {}; - // make sure we have a domain (pull it in from the axis // this one is overlaying if necessary) if(ax.overlaying) { @@ -55309,12 +57682,12 @@ module.exports = function setConvert(ax, fullLayout) { // issue if we transform the drawn layer *and* use the new axis range to // draw the data. This allows us to construct setConvert using the pre- // interaction values of the range: - var rangeAttr = (usePrivateRange && ax._r) ? '_r' : 'range', - calendar = ax.calendar; + var rangeAttr = (usePrivateRange && ax._r) ? '_r' : 'range'; + var calendar = ax.calendar; ax.cleanRange(rangeAttr); - var rl0 = ax.r2l(ax[rangeAttr][0], calendar), - rl1 = ax.r2l(ax[rangeAttr][1], calendar); + var rl0 = ax.r2l(ax[rangeAttr][0], calendar); + var rl1 = ax.r2l(ax[rangeAttr][1], calendar); if(axLetter === 'y') { ax._offset = gs.t + (1 - ax.domain[1]) * gs.h; @@ -55352,7 +57725,7 @@ module.exports = function setConvert(ax, fullLayout) { if(axLetter in trace) { arrayIn = trace[axLetter]; - len = trace._length || arrayIn.length; + len = trace._length || Lib.minRowLength(arrayIn); if(Lib.isTypedArray(arrayIn) && (axType === 'linear' || axType === 'log')) { if(len === arrayIn.length) { @@ -55362,6 +57735,10 @@ module.exports = function setConvert(ax, fullLayout) { } } + if(axType === 'multicategory') { + return setMultiCategoryIndex(arrayIn, len); + } + arrayOut = new Array(len); for(i = 0; i < len; i++) { arrayOut[i] = ax.d2c(arrayIn[i], 0, cal); @@ -55438,9 +57815,9 @@ module.exports = function setConvert(ax, fullLayout) { delete ax._forceTick0; }; -},{"../../constants/numerical":151,"../../lib":169,"./axis_ids":217,"./constants":219,"d3":16,"fast-isnumeric":18}],233:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"./axis_ids":215,"./constants":218,"d3":16,"fast-isnumeric":18}],232:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55512,15 +57889,13 @@ module.exports = function handleTickLabelDefaults(containerIn, containerOut, coe * */ function getShowAttrDflt(containerIn) { - var showAttrsAll = ['showexponent', - 'showtickprefix', - 'showticksuffix'], - showAttrs = showAttrsAll.filter(function(a) { - return containerIn[a] !== undefined; - }), - sameVal = function(a) { - return containerIn[a] === containerIn[showAttrs[0]]; - }; + var showAttrsAll = ['showexponent', 'showtickprefix', 'showticksuffix']; + var showAttrs = showAttrsAll.filter(function(a) { + return containerIn[a] !== undefined; + }); + var sameVal = function(a) { + return containerIn[a] === containerIn[showAttrs[0]]; + }; if(showAttrs.every(sameVal) || showAttrs.length === 1) { return containerIn[showAttrs[0]]; @@ -55539,9 +57914,9 @@ function tickformatstopDefaults(valueIn, valueOut) { } } -},{"../../lib":169,"../array_container_defaults":210,"./layout_attributes":226}],234:[function(_dereq_,module,exports){ +},{"../../lib":168,"../array_container_defaults":208,"./layout_attributes":225}],233:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55560,10 +57935,10 @@ var layoutAttributes = _dereq_('./layout_attributes'); * options: inherits outerTicks from axes.handleAxisDefaults */ module.exports = function handleTickDefaults(containerIn, containerOut, coerce, options) { - var tickLen = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'ticklen'), - tickWidth = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'tickwidth'), - tickColor = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'tickcolor', containerOut.color), - showTicks = coerce('ticks', (options.outerTicks || tickLen || tickWidth || tickColor) ? 'outside' : ''); + var tickLen = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'ticklen'); + var tickWidth = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'tickwidth'); + var tickColor = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'tickcolor', containerOut.color); + var showTicks = coerce('ticks', (options.outerTicks || tickLen || tickWidth || tickColor) ? 'outside' : ''); if(!showTicks) { delete containerOut.ticklen; @@ -55572,22 +57947,18 @@ module.exports = function handleTickDefaults(containerIn, containerOut, coerce, } }; -},{"../../lib":169,"./layout_attributes":226}],235:[function(_dereq_,module,exports){ +},{"../../lib":168,"./layout_attributes":225}],234:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); -var Lib = _dereq_('../../lib'); -var ONEDAY = _dereq_('../../constants/numerical').ONEDAY; - +var cleanTicks = _dereq_('./clean_ticks'); module.exports = function handleTickValueDefaults(containerIn, containerOut, coerce, axType) { var tickmode; @@ -55595,10 +57966,8 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe if(containerIn.tickmode === 'array' && (axType === 'log' || axType === 'date')) { tickmode = containerOut.tickmode = 'auto'; - } - else { - var tickmodeDefault = - Array.isArray(containerIn.tickvals) ? 'array' : + } else { + var tickmodeDefault = Array.isArray(containerIn.tickvals) ? 'array' : containerIn.dtick ? 'linear' : 'auto'; tickmode = coerce('tickmode', tickmodeDefault); @@ -55608,58 +57977,21 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe else if(tickmode === 'linear') { // dtick is usually a positive number, but there are some // special strings available for log or date axes - // default is 1 day for dates, otherwise 1 - var dtickDflt = (axType === 'date') ? ONEDAY : 1; - var dtick = coerce('dtick', dtickDflt); - if(isNumeric(dtick)) { - containerOut.dtick = (dtick > 0) ? Number(dtick) : dtickDflt; - } - else if(typeof dtick !== 'string') { - containerOut.dtick = dtickDflt; - } - else { - // date and log special cases are all one character plus a number - var prefix = dtick.charAt(0), - dtickNum = dtick.substr(1); - - dtickNum = isNumeric(dtickNum) ? Number(dtickNum) : 0; - if((dtickNum <= 0) || !( - // "M" gives ticks every (integer) n months - (axType === 'date' && prefix === 'M' && dtickNum === Math.round(dtickNum)) || - // "L" gives ticks linearly spaced in data (not in position) every (float) f - (axType === 'log' && prefix === 'L') || - // "D1" gives powers of 10 with all small digits between, "D2" gives only 2 and 5 - (axType === 'log' && prefix === 'D' && (dtickNum === 1 || dtickNum === 2)) - )) { - containerOut.dtick = dtickDflt; - } - } - - // tick0 can have different valType for different axis types, so - // validate that now. Also for dates, change milliseconds to date strings - var tick0Dflt = (axType === 'date') ? Lib.dateTick0(containerOut.calendar) : 0; - var tick0 = coerce('tick0', tick0Dflt); - if(axType === 'date') { - containerOut.tick0 = Lib.cleanDate(tick0, tick0Dflt); - } - // Aside from date axes, dtick must be numeric; D1 and D2 modes ignore tick0 entirely - else if(isNumeric(tick0) && dtick !== 'D1' && dtick !== 'D2') { - containerOut.tick0 = Number(tick0); - } - else { - containerOut.tick0 = tick0Dflt; - } - } - else { + // tick0 also has special logic + var dtick = containerOut.dtick = cleanTicks.dtick( + containerIn.dtick, axType); + containerOut.tick0 = cleanTicks.tick0( + containerIn.tick0, axType, containerOut.calendar, dtick); + } else if(axType !== 'multicategory') { var tickvals = coerce('tickvals'); if(tickvals === undefined) containerOut.tickmode = 'auto'; else coerce('ticktext'); } }; -},{"../../constants/numerical":151,"../../lib":169,"fast-isnumeric":18}],236:[function(_dereq_,module,exports){ +},{"./clean_ticks":217}],235:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55673,150 +58005,43 @@ var d3 = _dereq_('d3'); var Registry = _dereq_('../../registry'); var Drawing = _dereq_('../../components/drawing'); var Axes = _dereq_('./axes'); -var axisRegex = _dereq_('./constants').attrRegex; -module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCompleteCallback) { +/** + * transitionAxes + * + * transition axes from one set of ranges to another, using a svg + * transformations, similar to during panning. + * + * @param {DOM element | object} gd + * @param {array} edits : array of 'edits', each item with + * - plotinfo {object} subplot object + * - xr0 {array} initial x-range + * - xr1 {array} end x-range + * - yr0 {array} initial y-range + * - yr1 {array} end y-range + * @param {object} transitionOpts + * @param {function} makeOnCompleteCallback + */ +module.exports = function transitionAxes(gd, edits, transitionOpts, makeOnCompleteCallback) { var fullLayout = gd._fullLayout; - var axes = []; - function computeUpdates(layout) { - var ai, attrList, match, axis, update; - var updates = {}; - - for(ai in layout) { - attrList = ai.split('.'); - match = attrList[0].match(axisRegex); - if(match) { - var axisLetter = ai.charAt(0); - var axisName = attrList[0]; - axis = fullLayout[axisName]; - update = {}; - - if(Array.isArray(layout[ai])) { - update.to = layout[ai].slice(0); - } else { - if(Array.isArray(layout[ai].range)) { - update.to = layout[ai].range.slice(0); - } - } - if(!update.to) continue; - - update.axisName = axisName; - update.length = axis._length; - - axes.push(axisLetter); - - updates[axisLetter] = update; - } - } - - return updates; - } - - function computeAffectedSubplots(fullLayout, updatedAxisIds, updates) { - var plotName; - var plotinfos = fullLayout._plots; - var affectedSubplots = []; - var toX, toY; - - for(plotName in plotinfos) { - var plotinfo = plotinfos[plotName]; - - if(affectedSubplots.indexOf(plotinfo) !== -1) continue; - - var x = plotinfo.xaxis._id; - var y = plotinfo.yaxis._id; - var fromX = plotinfo.xaxis.range; - var fromY = plotinfo.yaxis.range; - - // Store the initial range at the beginning of this transition: - plotinfo.xaxis._r = plotinfo.xaxis.range.slice(); - plotinfo.yaxis._r = plotinfo.yaxis.range.slice(); - - if(updates[x]) { - toX = updates[x].to; - } else { - toX = fromX; - } - if(updates[y]) { - toY = updates[y].to; - } else { - toY = fromY; - } - - if(fromX[0] === toX[0] && fromX[1] === toX[1] && fromY[0] === toY[0] && fromY[1] === toY[1]) continue; - - if(updatedAxisIds.indexOf(x) !== -1 || updatedAxisIds.indexOf(y) !== -1) { - affectedSubplots.push(plotinfo); - } - } - - return affectedSubplots; - } - - var updates = computeUpdates(newLayout); - var updatedAxisIds = Object.keys(updates); - var affectedSubplots = computeAffectedSubplots(fullLayout, updatedAxisIds, updates); - - function updateLayoutObjs() { - function redrawObjs(objArray, method, shortCircuit) { - for(var i = 0; i < objArray.length; i++) { - method(gd, i); - - // once is enough for images (which doesn't use the `i` arg anyway) - if(shortCircuit) return; - } - } - - redrawObjs(fullLayout.annotations || [], Registry.getComponentMethod('annotations', 'drawOne')); - redrawObjs(fullLayout.shapes || [], Registry.getComponentMethod('shapes', 'drawOne')); - redrawObjs(fullLayout.images || [], Registry.getComponentMethod('images', 'draw'), true); - } - - if(!affectedSubplots.length) { - updateLayoutObjs(); - return false; - } - - function ticksAndAnnotations(xa, ya) { - var activeAxIds = [], - i; - - activeAxIds = [xa._id, ya._id]; - - for(i = 0; i < activeAxIds.length; i++) { - Axes.doTicksSingle(gd, activeAxIds[i], true); - } - - function redrawObjs(objArray, method, shortCircuit) { - for(i = 0; i < objArray.length; i++) { - var obji = objArray[i]; - - if((activeAxIds.indexOf(obji.xref) !== -1) || - (activeAxIds.indexOf(obji.yref) !== -1)) { - method(gd, i); - } - - // once is enough for images (which doesn't use the `i` arg anyway) - if(shortCircuit) return; - } - } - - redrawObjs(fullLayout.annotations || [], Registry.getComponentMethod('annotations', 'drawOne')); - redrawObjs(fullLayout.shapes || [], Registry.getComponentMethod('shapes', 'drawOne')); - redrawObjs(fullLayout.images || [], Registry.getComponentMethod('images', 'draw'), true); + // special case for redraw:false Plotly.animate that relies on this + // to update axis-referenced layout components + if(edits.length === 0) { + Axes.redrawComponents(gd); + return; } function unsetSubplotTransform(subplot) { - var xa2 = subplot.xaxis; - var ya2 = subplot.yaxis; + var xa = subplot.xaxis; + var ya = subplot.yaxis; fullLayout._defs.select('#' + subplot.clipId + '> rect') .call(Drawing.setTranslate, 0, 0) .call(Drawing.setScale, 1, 1); subplot.plot - .call(Drawing.setTranslate, xa2._offset, ya2._offset) + .call(Drawing.setTranslate, xa._offset, ya._offset) .call(Drawing.setScale, 1, 1); var traceGroups = subplot.plot.selectAll('.scatterlayer .trace'); @@ -55832,79 +58057,71 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo .call(Drawing.hideOutsideRangePoints, subplot); } - function updateSubplot(subplot, progress) { - var axis, r0, r1; - var xUpdate = updates[subplot.xaxis._id]; - var yUpdate = updates[subplot.yaxis._id]; + function updateSubplot(edit, progress) { + var plotinfo = edit.plotinfo; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; + var xr0 = edit.xr0; + var xr1 = edit.xr1; + var xlen = xa._length; + var yr0 = edit.yr0; + var yr1 = edit.yr1; + var ylen = ya._length; + + var editX = !!xr1; + var editY = !!yr1; var viewBox = []; - if(xUpdate) { - axis = gd._fullLayout[xUpdate.axisName]; - r0 = axis._r; - r1 = xUpdate.to; - viewBox[0] = (r0[0] * (1 - progress) + progress * r1[0] - r0[0]) / (r0[1] - r0[0]) * subplot.xaxis._length; - var dx1 = r0[1] - r0[0]; - var dx2 = r1[1] - r1[0]; - - axis.range[0] = r0[0] * (1 - progress) + progress * r1[0]; - axis.range[1] = r0[1] * (1 - progress) + progress * r1[1]; - - viewBox[2] = subplot.xaxis._length * ((1 - progress) + progress * dx2 / dx1); + if(editX) { + var dx0 = xr0[1] - xr0[0]; + var dx1 = xr1[1] - xr1[0]; + viewBox[0] = (xr0[0] * (1 - progress) + progress * xr1[0] - xr0[0]) / (xr0[1] - xr0[0]) * xlen; + viewBox[2] = xlen * ((1 - progress) + progress * dx1 / dx0); + xa.range[0] = xr0[0] * (1 - progress) + progress * xr1[0]; + xa.range[1] = xr0[1] * (1 - progress) + progress * xr1[1]; } else { viewBox[0] = 0; - viewBox[2] = subplot.xaxis._length; + viewBox[2] = xlen; } - if(yUpdate) { - axis = gd._fullLayout[yUpdate.axisName]; - r0 = axis._r; - r1 = yUpdate.to; - viewBox[1] = (r0[1] * (1 - progress) + progress * r1[1] - r0[1]) / (r0[0] - r0[1]) * subplot.yaxis._length; - var dy1 = r0[1] - r0[0]; - var dy2 = r1[1] - r1[0]; - - axis.range[0] = r0[0] * (1 - progress) + progress * r1[0]; - axis.range[1] = r0[1] * (1 - progress) + progress * r1[1]; - - viewBox[3] = subplot.yaxis._length * ((1 - progress) + progress * dy2 / dy1); + if(editY) { + var dy0 = yr0[1] - yr0[0]; + var dy1 = yr1[1] - yr1[0]; + viewBox[1] = (yr0[1] * (1 - progress) + progress * yr1[1] - yr0[1]) / (yr0[0] - yr0[1]) * ylen; + viewBox[3] = ylen * ((1 - progress) + progress * dy1 / dy0); + ya.range[0] = yr0[0] * (1 - progress) + progress * yr1[0]; + ya.range[1] = yr0[1] * (1 - progress) + progress * yr1[1]; } else { viewBox[1] = 0; - viewBox[3] = subplot.yaxis._length; + viewBox[3] = ylen; } - ticksAndAnnotations(subplot.xaxis, subplot.yaxis); + Axes.drawOne(gd, xa, {skipTitle: true}); + Axes.drawOne(gd, ya, {skipTitle: true}); + Axes.redrawComponents(gd, [xa._id, ya._id]); - var xa2 = subplot.xaxis; - var ya2 = subplot.yaxis; + var xScaleFactor = editX ? xlen / viewBox[2] : 1; + var yScaleFactor = editY ? ylen / viewBox[3] : 1; + var clipDx = editX ? viewBox[0] : 0; + var clipDy = editY ? viewBox[1] : 0; + var fracDx = editX ? (viewBox[0] / viewBox[2] * xlen) : 0; + var fracDy = editY ? (viewBox[1] / viewBox[3] * ylen) : 0; + var plotDx = xa._offset - fracDx; + var plotDy = ya._offset - fracDy; - var editX = !!xUpdate; - var editY = !!yUpdate; - - var xScaleFactor = editX ? xa2._length / viewBox[2] : 1, - yScaleFactor = editY ? ya2._length / viewBox[3] : 1; - - var clipDx = editX ? viewBox[0] : 0, - clipDy = editY ? viewBox[1] : 0; - - var fracDx = editX ? (viewBox[0] / viewBox[2] * xa2._length) : 0, - fracDy = editY ? (viewBox[1] / viewBox[3] * ya2._length) : 0; - - var plotDx = xa2._offset - fracDx, - plotDy = ya2._offset - fracDy; - - subplot.clipRect + plotinfo.clipRect .call(Drawing.setTranslate, clipDx, clipDy) .call(Drawing.setScale, 1 / xScaleFactor, 1 / yScaleFactor); - subplot.plot + plotinfo.plot .call(Drawing.setTranslate, plotDx, plotDy) .call(Drawing.setScale, xScaleFactor, yScaleFactor); // apply an inverse scale to individual points to counteract // the scale of the trace group. - Drawing.setPointGroupScale(subplot.zoomScalePts, 1 / xScaleFactor, 1 / yScaleFactor); - Drawing.setTextPointsScale(subplot.zoomScaleTxt, 1 / xScaleFactor, 1 / yScaleFactor); + Drawing.setPointGroupScale(plotinfo.zoomScalePts, 1 / xScaleFactor, 1 / yScaleFactor); + Drawing.setTextPointsScale(plotinfo.zoomScaleTxt, 1 / xScaleFactor, 1 / yScaleFactor); } var onComplete; @@ -55916,38 +58133,35 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo function transitionComplete() { var aobj = {}; - for(var i = 0; i < updatedAxisIds.length; i++) { - var axi = gd._fullLayout[updates[updatedAxisIds[i]].axisName]; - var to = updates[updatedAxisIds[i]].to; - aobj[axi._name + '.range[0]'] = to[0]; - aobj[axi._name + '.range[1]'] = to[1]; - axi.range = to.slice(); + for(var i = 0; i < edits.length; i++) { + var edit = edits[i]; + if(edit.xr1) aobj[edit.plotinfo.xaxis._name + '.range'] = edit.xr1.slice(); + if(edit.yr1) aobj[edit.plotinfo.yaxis._name + '.range'] = edit.yr1.slice(); } // Signal that this transition has completed: onComplete && onComplete(); return Registry.call('relayout', gd, aobj).then(function() { - for(var i = 0; i < affectedSubplots.length; i++) { - unsetSubplotTransform(affectedSubplots[i]); + for(var i = 0; i < edits.length; i++) { + unsetSubplotTransform(edits[i].plotinfo); } }); } function transitionInterrupt() { var aobj = {}; - for(var i = 0; i < updatedAxisIds.length; i++) { - var axi = gd._fullLayout[updatedAxisIds[i] + 'axis']; - aobj[axi._name + '.range[0]'] = axi.range[0]; - aobj[axi._name + '.range[1]'] = axi.range[1]; - axi.range = axi._r.slice(); + for(var i = 0; i < edits.length; i++) { + var edit = edits[i]; + if(edit.xr0) aobj[edit.plotinfo.xaxis._name + '.range'] = edit.xr0.slice(); + if(edit.yr0) aobj[edit.plotinfo.yaxis._name + '.range'] = edit.yr0.slice(); } return Registry.call('relayout', gd, aobj).then(function() { - for(var i = 0; i < affectedSubplots.length; i++) { - unsetSubplotTransform(affectedSubplots[i]); + for(var i = 0; i < edits.length; i++) { + unsetSubplotTransform(edits[i].plotinfo); } }); } @@ -55967,8 +58181,8 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo var tInterp = Math.min(1, (t2 - t1) / transitionOpts.duration); var progress = easeFn(tInterp); - for(var i = 0; i < affectedSubplots.length; i++) { - updateSubplot(affectedSubplots[i], progress); + for(var i = 0; i < edits.length; i++) { + updateSubplot(edits[i], progress); } if(t2 - t1 > transitionOpts.duration) { @@ -55985,9 +58199,9 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo return Promise.resolve(); }; -},{"../../components/drawing":75,"../../registry":259,"./axes":214,"./constants":219,"d3":16}],237:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../registry":257,"./axes":212,"d3":16}],236:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55996,7 +58210,7 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo 'use strict'; -var Registry = _dereq_('../../registry'); +var traceIs = _dereq_('../../registry').traceIs; var autoType = _dereq_('./axis_autotype'); /* @@ -56045,6 +58259,7 @@ function setAutoType(ax, data) { var calAttr = axLetter + 'calendar'; var calendar = d0[calAttr]; + var opts = {noMultiCategory: !traceIs(d0, 'cartesian') || traceIs(d0, 'noMultiCategory')}; var i; // check all boxes on this x axis to see @@ -56055,8 +58270,7 @@ function setAutoType(ax, data) { for(i = 0; i < data.length; i++) { var trace = data[i]; - if(!Registry.traceIs(trace, 'box-violin') || - (trace[axLetter + 'axis'] || axLetter) !== id) continue; + if(!traceIs(trace, 'box-violin') || (trace[axLetter + 'axis'] || axLetter) !== id) continue; if(trace[posLetter] !== undefined) boxPositions.push(trace[posLetter][0]); else if(trace.name !== undefined) boxPositions.push(trace.name); @@ -56065,7 +58279,7 @@ function setAutoType(ax, data) { if(trace[calAttr] !== calendar) calendar = undefined; } - ax.type = autoType(boxPositions, calendar); + ax.type = autoType(boxPositions, calendar, opts); } else if(d0.type === 'splom') { var dimensions = d0.dimensions; @@ -56073,13 +58287,13 @@ function setAutoType(ax, data) { for(i = 0; i < dimensions.length; i++) { var dim = dimensions[i]; if(dim.visible && (diag[i][0] === id || diag[i][1] === id)) { - ax.type = autoType(dim.values, calendar); + ax.type = autoType(dim.values, calendar, opts); break; } } } else { - ax.type = autoType(d0[axLetter] || [d0[axLetter + '0']], calendar); + ax.type = autoType(d0[axLetter] || [d0[axLetter + '0']], calendar, opts); } } @@ -56110,9 +58324,9 @@ function getBoxPosLetter(trace) { } function isBoxWithoutPositionCoords(trace, axLetter) { - var posLetter = getBoxPosLetter(trace), - isBox = Registry.traceIs(trace, 'box-violin'), - isCandlestick = Registry.traceIs(trace._fullInput || {}, 'candlestick'); + var posLetter = getBoxPosLetter(trace); + var isBox = traceIs(trace, 'box-violin'); + var isCandlestick = traceIs(trace._fullInput || {}, 'candlestick'); return ( isBox && @@ -56123,9 +58337,9 @@ function isBoxWithoutPositionCoords(trace, axLetter) { ); } -},{"../../registry":259,"./axis_autotype":215}],238:[function(_dereq_,module,exports){ +},{"../../registry":257,"./axis_autotype":213}],237:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56547,9 +58761,9 @@ function crawl(attrs, callback, path, depth) { }); } -},{"../lib":169,"../registry":259}],239:[function(_dereq_,module,exports){ +},{"../lib":168,"../registry":257}],238:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56655,9 +58869,9 @@ exports.defaults = function(containerOut, layout, coerce, dfltDomains) { coerce('domain.y', dfltY); }; -},{"../lib/extend":163}],240:[function(_dereq_,module,exports){ +},{"../lib/extend":162}],239:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56720,9 +58934,9 @@ module.exports = function(opts) { return attrs; }; -},{}],241:[function(_dereq_,module,exports){ +},{}],240:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56766,9 +58980,9 @@ module.exports = { } }; -},{}],242:[function(_dereq_,module,exports){ +},{}],241:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56894,9 +59108,9 @@ exports.getSubplotData = function getSubplotData(data, type, subplotId) { return subplotData; }; -},{"../registry":259,"./cartesian/constants":219}],243:[function(_dereq_,module,exports){ +},{"../registry":257,"./cartesian/constants":218}],242:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56928,9 +59142,9 @@ function project(camera, v) { module.exports = project; -},{}],244:[function(_dereq_,module,exports){ +},{}],243:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56940,7 +59154,11 @@ module.exports = project; 'use strict'; var fontAttrs = _dereq_('./font_attributes'); +var animationAttrs = _dereq_('./animation_attributes'); var colorAttrs = _dereq_('../components/color/attributes'); +var colorscaleAttrs = _dereq_('../components/colorscale/layout_attributes'); +var padAttrs = _dereq_('./pad_attributes'); +var extendFlat = _dereq_('../lib/extend').extendFlat; var globalFont = fontAttrs({ editType: 'calc', @@ -56953,15 +59171,71 @@ globalFont.color.dflt = colorAttrs.defaultLine; module.exports = { font: globalFont, title: { - valType: 'string', - - editType: 'layoutstyle', - + text: { + valType: 'string', + + editType: 'layoutstyle', + + }, + font: fontAttrs({ + editType: 'layoutstyle', + + }), + xref: { + valType: 'enumerated', + dflt: 'container', + values: ['container', 'paper'], + + editType: 'layoutstyle', + + }, + yref: { + valType: 'enumerated', + dflt: 'container', + values: ['container', 'paper'], + + editType: 'layoutstyle', + + }, + x: { + valType: 'number', + min: 0, + max: 1, + dflt: 0.5, + + editType: 'layoutstyle', + + }, + y: { + valType: 'number', + min: 0, + max: 1, + dflt: 'auto', + + editType: 'layoutstyle', + + }, + xanchor: { + valType: 'enumerated', + dflt: 'auto', + values: ['auto', 'left', 'center', 'right'], + + editType: 'layoutstyle', + + }, + yanchor: { + valType: 'enumerated', + dflt: 'auto', + values: ['auto', 'top', 'middle', 'bottom'], + + editType: 'layoutstyle', + + }, + pad: extendFlat(padAttrs({editType: 'layoutstyle'}), { + + }), + editType: 'layoutstyle' }, - titlefont: fontAttrs({ - editType: 'layoutstyle', - - }), autosize: { valType: 'boolean', @@ -57080,23 +59354,101 @@ module.exports = { editType: 'calc', }, + colorscale: colorscaleAttrs, datarevision: { valType: 'any', editType: 'calc', + }, + uirevision: { + valType: 'any', + + editType: 'none', + + }, + editrevision: { + valType: 'any', + + editType: 'none', + + }, + selectionrevision: { + valType: 'any', + + editType: 'none', + }, template: { valType: 'any', editType: 'calc', + }, + modebar: { + orientation: { + valType: 'enumerated', + values: ['v', 'h'], + dflt: 'h', + + editType: 'modebar', + + }, + bgcolor: { + valType: 'color', + + editType: 'modebar', + + }, + color: { + valType: 'color', + + editType: 'modebar', + + }, + activecolor: { + valType: 'color', + + editType: 'modebar', + + }, + uirevision: { + valType: 'any', + + editType: 'none', + + }, + editType: 'modebar' + }, + + meta: { + valType: 'data_array', + editType: 'plot', + + }, + + transition: extendFlat({}, animationAttrs.transition, { + + editType: 'none' + }), + + _deprecated: { + title: { + valType: 'string', + + editType: 'layoutstyle', + + }, + titlefont: fontAttrs({ + editType: 'layoutstyle', + + }) } }; -},{"../components/color/attributes":49,"./font_attributes":240}],245:[function(_dereq_,module,exports){ +},{"../components/color/attributes":50,"../components/colorscale/layout_attributes":64,"../lib/extend":162,"./animation_attributes":207,"./font_attributes":239,"./pad_attributes":244}],244:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57105,44 +59457,53 @@ module.exports = { 'use strict'; -// This is used exclusively by components inside component arrays, -// hence the 'arraydraw' editType. If this ever gets used elsewhere -// we could generalize it as a function ala font_attributes -module.exports = { - t: { - valType: 'number', - dflt: 0, - - editType: 'arraydraw', - - }, - r: { - valType: 'number', - dflt: 0, - - editType: 'arraydraw', - - }, - b: { - valType: 'number', - dflt: 0, - - editType: 'arraydraw', - - }, - l: { - valType: 'number', - dflt: 0, - - editType: 'arraydraw', - - }, - editType: 'arraydraw' +/** + * Creates a set of padding attributes. + * + * @param {object} opts + * @param {string} editType: + * the editType for all pieces of this padding definition + * + * @return {object} attributes object containing {t, r, b, l} as specified + */ +module.exports = function(opts) { + var editType = opts.editType; + return { + t: { + valType: 'number', + dflt: 0, + + editType: editType, + + }, + r: { + valType: 'number', + dflt: 0, + + editType: editType, + + }, + b: { + valType: 'number', + dflt: 0, + + editType: editType, + + }, + l: { + valType: 'number', + dflt: 0, + + editType: editType, + + }, + editType: editType + }; }; -},{}],246:[function(_dereq_,module,exports){ +},{}],245:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57163,7 +59524,6 @@ var Color = _dereq_('../components/color'); var BADNUM = _dereq_('../constants/numerical').BADNUM; var axisIDs = _dereq_('../plots/cartesian/axis_ids'); -var sortBasePlotModules = _dereq_('./sort_modules').sortBasePlotModules; var animationAttrs = _dereq_('./animation_attributes'); var frameAttrs = _dereq_('./frame_attributes'); @@ -57315,9 +59675,9 @@ plots.addLinks = function(gd) { linkContainer.attr(attrs); - var toolspan = linkContainer.select('.js-link-to-tool'), - spacespan = linkContainer.select('.js-link-spacer'), - sourcespan = linkContainer.select('.js-sourcelinks'); + var toolspan = linkContainer.select('.js-link-to-tool'); + var spacespan = linkContainer.select('.js-link-spacer'); + var sourcespan = linkContainer.select('.js-sourcelinks'); if(gd._context.showSources) gd._context.showSources(gd); @@ -57485,8 +59845,8 @@ plots.supplyDefaults = function(gd, opts) { if(oldFullLayout._initialAutoSizeIsDone) { // coerce the updated layout while preserving width and height - var oldWidth = oldFullLayout.width, - oldHeight = oldFullLayout.height; + var oldWidth = oldFullLayout.width; + var oldHeight = oldFullLayout.height; plots.supplyLayoutGlobalDefaults(newLayout, newFullLayout, formatObj); @@ -57499,10 +59859,10 @@ plots.supplyDefaults = function(gd, opts) { // coerce the updated layout and autosize if needed plots.supplyLayoutGlobalDefaults(newLayout, newFullLayout, formatObj); - var missingWidthOrHeight = (!newLayout.width || !newLayout.height), - autosize = newFullLayout.autosize, - autosizable = context.autosizable, - initialAutoSize = missingWidthOrHeight && (autosize || autosizable); + var missingWidthOrHeight = (!newLayout.width || !newLayout.height); + var autosize = newFullLayout.autosize; + var autosizable = context.autosizable; + var initialAutoSize = missingWidthOrHeight && (autosize || autosizable); if(initialAutoSize) plots.plotAutoSize(gd, newLayout, newFullLayout); else if(missingWidthOrHeight) plots.sanitizeMargins(newFullLayout); @@ -57571,13 +59931,6 @@ plots.supplyDefaults = function(gd, opts) { // attach helper method to check whether a plot type is present on graph newFullLayout._has = plots._hasPlotType.bind(newFullLayout); - // special cases that introduce interactions between traces - var _modules = newFullLayout._visibleModules; - for(i = 0; i < _modules.length; i++) { - var _module = _modules[i]; - if(_module.cleanData) _module.cleanData(newFullData); - } - if(oldFullData.length === newFullData.length) { for(i = 0; i < newFullData.length; i++) { relinkPrivateKeys(newFullData[i], oldFullData[i]); @@ -57587,6 +59940,21 @@ plots.supplyDefaults = function(gd, opts) { // finally, fill in the pieces of layout that may need to look at data plots.supplyLayoutModuleDefaults(newLayout, newFullLayout, newFullData, gd._transitionData); + // Special cases that introduce interactions between traces. + // This is after relinkPrivateKeys so we can use those in crossTraceDefaults + // and after layout module defaults, so we can use eg barmode + var _modules = newFullLayout._visibleModules; + var crossTraceDefaultsFuncs = []; + for(i = 0; i < _modules.length; i++) { + var funci = _modules[i].crossTraceDefaults; + // some trace types share crossTraceDefaults (ie histogram2d, histogram2dcontour) + if(funci) Lib.pushUnique(crossTraceDefaultsFuncs, funci); + } + for(i = 0; i < crossTraceDefaultsFuncs.length; i++) { + crossTraceDefaultsFuncs[i](newFullData, newFullLayout); + } + Registry.getComponentMethod('colorscale', 'crossTraceDefaults')(newFullData, newFullLayout); + // turn on flag to optimize large splom-only graphs // mostly by omitting SVG layers during Cartesian.drawFramework newFullLayout._hasOnlyLargeSploms = ( @@ -57611,34 +59979,45 @@ plots.supplyDefaults = function(gd, opts) { plots.linkSubplots(newFullData, newFullLayout, oldFullData, oldFullLayout); // clean subplots and other artifacts from previous plot calls - plots.cleanPlot(newFullData, newFullLayout, oldFullData, oldFullLayout, oldCalcdata); + plots.cleanPlot(newFullData, newFullLayout, oldFullData, oldFullLayout); // relink functions and _ attributes to promote consistency between plots relinkPrivateKeys(newFullLayout, oldFullLayout); - // TODO may return a promise - plots.doAutoMargin(gd); - - // set scale after auto margin routine - var axList = axisIDs.list(gd); - for(i = 0; i < axList.length; i++) { - var ax = axList[i]; - ax.setScale(); + // For persisting GUI-driven changes in layout + // _preGUI and _tracePreGUI were already copied over in relinkPrivateKeys + if(!newFullLayout._preGUI) newFullLayout._preGUI = {}; + // track trace GUI changes by uid rather than by trace index + if(!newFullLayout._tracePreGUI) newFullLayout._tracePreGUI = {}; + var tracePreGUI = newFullLayout._tracePreGUI; + var uids = {}; + var uid; + for(uid in tracePreGUI) uids[uid] = 'old'; + for(i = 0; i < newFullData.length; i++) { + uid = newFullData[i]._fullInput.uid; + if(!uids[uid]) tracePreGUI[uid] = {}; + uids[uid] = 'new'; } + for(uid in uids) { + if(uids[uid] === 'old') delete tracePreGUI[uid]; + } + + // set up containers for margin calculations + initMargins(newFullLayout); + + // collect and do some initial calculations for rangesliders + Registry.getComponentMethod('rangeslider', 'makeData')(newFullLayout); // update object references in calcdata if(!skipUpdateCalc && oldCalcdata.length === newFullData.length) { plots.supplyDefaultsUpdateCalc(oldCalcdata, newFullData); } - - // sort base plot modules for consistent ordering - newFullLayout._basePlotModules.sort(sortBasePlotModules); }; plots.supplyDefaultsUpdateCalc = function(oldCalcdata, newFullData) { for(var i = 0; i < newFullData.length; i++) { var newTrace = newFullData[i]; - var cd0 = oldCalcdata[i][0]; + var cd0 = (oldCalcdata[i] || [])[0]; if(cd0 && cd0.trace) { var oldTrace = cd0.trace; if(oldTrace._hasCalcTransform) { @@ -57688,7 +60067,10 @@ function getTraceUids(oldFullData, newData) { } for(i = 0; i < len; i++) { - if(tryUid(newData[i].uid, i)) continue; + var newUid = newData[i].uid; + if(typeof newUid === 'number') newUid = String(newUid); + + if(tryUid(newUid, i)) continue; if(i < oldLen && tryUid(oldFullInput[i].uid, i)) continue; setUid(Lib.randstr(seenUids), i); } @@ -57704,8 +60086,8 @@ function getTraceUids(oldFullData, newData) { * Single-trace subplots (which have no `id`) such as pie, table, etc * do not need to be collected because we just draw all visible traces. */ -var collectableSubplotTypes; function emptySubplotLists() { + var collectableSubplotTypes = Registry.collectableSubplotTypes; var out = {}; var i, j; @@ -57861,7 +60243,7 @@ plots._hasPlotType = function(category) { return false; }; -plots.cleanPlot = function(newFullData, newFullLayout, oldFullData, oldFullLayout, oldCalcdata) { +plots.cleanPlot = function(newFullData, newFullLayout, oldFullData, oldFullLayout) { var i, j; var basePlotModules = oldFullLayout._basePlotModules || []; @@ -57869,7 +60251,7 @@ plots.cleanPlot = function(newFullData, newFullLayout, oldFullData, oldFullLayou var _module = basePlotModules[i]; if(_module.clean) { - _module.clean(newFullData, newFullLayout, oldFullData, oldFullLayout, oldCalcdata); + _module.clean(newFullData, newFullLayout, oldFullData, oldFullLayout); } } @@ -57888,8 +60270,8 @@ plots.cleanPlot = function(newFullData, newFullLayout, oldFullData, oldFullLayou oldLoop: for(i = 0; i < oldFullData.length; i++) { - var oldTrace = oldFullData[i], - oldUid = oldTrace.uid; + var oldTrace = oldFullData[i]; + var oldUid = oldTrace.uid; for(j = 0; j < newFullData.length; j++) { var newTrace = newFullData[j]; @@ -57937,6 +60319,12 @@ plots.linkSubplots = function(newFullData, newFullLayout, oldFullData, oldFullLa plotinfo.id = id; } + // add these axis ids to each others' subplot lists + xaxis._counterAxes.push(yaxis._id); + yaxis._counterAxes.push(xaxis._id); + xaxis._subplotsWith.push(id); + yaxis._subplotsWith.push(id); + // update x and y axis layout object refs plotinfo.xaxis = xaxis; plotinfo.yaxis = yaxis; @@ -57964,8 +60352,9 @@ plots.linkSubplots = function(newFullData, newFullLayout, oldFullData, oldFullLa // while we're at it, link overlaying axes to their main axes and // anchored axes to the axes they're anchored to var axList = axisIDs.list(mockGd, null, true); + var ax; for(i = 0; i < axList.length; i++) { - var ax = axList[i]; + ax = axList[i]; var mainAx = null; if(ax.overlaying) { @@ -57993,8 +60382,53 @@ plots.linkSubplots = function(newFullData, newFullLayout, oldFullData, oldFullLa null : axisIDs.getFromId(mockGd, ax.anchor); } + + // finally, we can find the main subplot for each axis + // (on which the ticks & labels are drawn) + for(i = 0; i < axList.length; i++) { + ax = axList[i]; + ax._counterAxes.sort(axisIDs.idSort); + ax._subplotsWith.sort(Lib.subplotSort); + ax._mainSubplot = findMainSubplot(ax, newFullLayout); + } }; +function findMainSubplot(ax, fullLayout) { + var mockGd = {_fullLayout: fullLayout}; + + var isX = ax._id.charAt(0) === 'x'; + var anchorAx = ax._mainAxis._anchorAxis; + var mainSubplotID = ''; + var nextBestMainSubplotID = ''; + var anchorID = ''; + + // First try the main ID with the anchor + if(anchorAx) { + anchorID = anchorAx._mainAxis._id; + mainSubplotID = isX ? (ax._id + anchorID) : (anchorID + ax._id); + } + + // Then look for a subplot with the counteraxis overlaying the anchor + // If that fails just use the first subplot including this axis + if(!mainSubplotID || !fullLayout._plots[mainSubplotID]) { + mainSubplotID = ''; + + var counterIDs = ax._counterAxes; + for(var j = 0; j < counterIDs.length; j++) { + var counterPart = counterIDs[j]; + var id = isX ? (ax._id + counterPart) : (counterPart + ax._id); + if(!nextBestMainSubplotID) nextBestMainSubplotID = id; + var counterAx = axisIDs.getFromId(mockGd, counterPart); + if(anchorID && counterAx.overlaying === anchorID) { + mainSubplotID = id; + break; + } + } + } + + return mainSubplotID || nextBestMainSubplotID; +} + // This function clears any trace attributes with valType: color and // no set dflt filed in the plot schema. This is needed because groupby (which // is the only transform for which this currently applies) supplies parent @@ -58091,6 +60525,8 @@ plots.supplyDataDefaults = function(dataIn, dataOut, layout, fullLayout) { fullTrace._expandedIndex = cnt; if(fullTrace.transforms && fullTrace.transforms.length) { + var sdInvisible = trace.visible !== false && fullTrace.visible === false; + var expandedTraces = applyTransforms(fullTrace, dataOut, layout, fullLayout); for(var j = 0; j < expandedTraces.length; j++) { @@ -58104,6 +60540,17 @@ plots.supplyDataDefaults = function(dataIn, dataOut, layout, fullLayout) { // to promote consistency between update calls uid: fullTrace.uid + j }; + + // If the first supplyDefaults created `visible: false`, + // clear it before running supplyDefaults a second time, + // because sometimes there are items we still want to coerce + // inside trace modules before determining that the trace is + // again `visible: false`, for example partial visibilities + // in `splom` traces. + if(sdInvisible && expandedTrace.visible === false) { + delete expandedTrace.visible; + } + plots.supplyTraceDefaults(expandedTrace, fullExpandedTrace, cnt, fullLayout, i); // relink private (i.e. underscore) keys expanded trace to full expanded trace so @@ -58249,9 +60696,12 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac coerce('type'); coerce('name', layout._traceWord + ' ' + traceInIndex); + coerce('uirevision', layout.uirevision); + // we want even invisible traces to make their would-be subplots visible // so coerce the subplot id(s) now no matter what var _module = plots.getModule(traceOut); + traceOut._module = _module; if(_module) { var basePlotModule = _module.basePlotModule; @@ -58285,6 +60735,18 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac } } + function coerceUnlessPruned(attr, dflt, cb) { + if(_module && (attr in _module.attributes) && _module.attributes[attr] === undefined) { + // Pruned + } else { + if(cb && typeof cb === 'function') { + cb(); + } else { + coerce(attr, dflt); + } + } + } + if(visible) { coerce('customdata'); coerce('ids'); @@ -58298,16 +60760,18 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac traceOut._dfltShowLegend = false; } - Registry.getComponentMethod( - 'fx', - 'supplyDefaults' - )(traceIn, traceOut, defaultColor, layout); + coerceUnlessPruned('hoverlabel', '', function() { + Registry.getComponentMethod( + 'fx', + 'supplyDefaults' + )(traceIn, traceOut, defaultColor, layout); + }); // TODO add per-base-plot-module trace defaults step if(_module) { _module.supplyDefaults(traceIn, traceOut, defaultColor, layout); - Lib.coerceHoverinfo(traceIn, traceOut, layout); + if(!traceOut.hovertemplate) Lib.coerceHoverinfo(traceIn, traceOut, layout); } if(!Registry.traceIs(traceOut, 'noOpacity')) coerce('opacity'); @@ -58360,15 +60824,15 @@ plots.supplyTransformDefaults = function(traceIn, traceOut, layout) { if(!Array.isArray(traceIn.transforms) && globalTransforms.length === 0) return; - var containerIn = traceIn.transforms || [], - transformList = globalTransforms.concat(containerIn), - containerOut = traceOut.transforms = []; + var containerIn = traceIn.transforms || []; + var transformList = globalTransforms.concat(containerIn); + var containerOut = traceOut.transforms = []; for(var i = 0; i < transformList.length; i++) { - var transformIn = transformList[i], - type = transformIn.type, - _module = transformsRegistry[type], - transformOut; + var transformIn = transformList[i]; + var type = transformIn.type; + var _module = transformsRegistry[type]; + var transformOut; /* * Supply defaults may run twice. First pass runs all supply defaults steps @@ -58379,8 +60843,8 @@ plots.supplyTransformDefaults = function(traceIn, traceOut, layout) { * function it could not have generated any new traces and the second stage * is unnecessary. We detect this case with the following variables. */ - var isFirstStage = !(transformIn._module && transformIn._module === _module), - doLaterStages = _module && typeof _module.transform === 'function'; + var isFirstStage = !(transformIn._module && transformIn._module === _module); + var doLaterStages = _module && typeof _module.transform === 'function'; if(!_module) Lib.warn('Unrecognized transform type ' + type + '.'); @@ -58400,12 +60864,12 @@ plots.supplyTransformDefaults = function(traceIn, traceOut, layout) { }; function applyTransforms(fullTrace, fullData, layout, fullLayout) { - var container = fullTrace.transforms, - dataOut = [fullTrace]; + var container = fullTrace.transforms; + var dataOut = [fullTrace]; for(var i = 0; i < container.length; i++) { - var transform = container[i], - _module = transformsRegistry[transform.type]; + var transform = container[i]; + var _module = transformsRegistry[transform.type]; if(_module && _module.transform) { dataOut = _module.transform(dataOut, { @@ -58436,14 +60900,25 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) { var globalFont = Lib.coerceFont(coerce, 'font'); - coerce('title', layoutOut._dfltTitle.plot); + coerce('title.text', layoutOut._dfltTitle.plot); - Lib.coerceFont(coerce, 'titlefont', { + Lib.coerceFont(coerce, 'title.font', { family: globalFont.family, size: Math.round(globalFont.size * 1.4), color: globalFont.color }); + coerce('title.xref'); + coerce('title.yref'); + coerce('title.x'); + coerce('title.y'); + coerce('title.xanchor'); + coerce('title.yanchor'); + coerce('title.pad.t'); + coerce('title.pad.r'); + coerce('title.pad.b'); + coerce('title.pad.l'); + // 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/ @@ -58476,6 +60951,25 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) { coerce('colorway'); coerce('datarevision'); + var uirevision = coerce('uirevision'); + coerce('editrevision', uirevision); + coerce('selectionrevision', uirevision); + + coerce('modebar.orientation'); + coerce('modebar.bgcolor', Color.addOpacity(layoutOut.paper_bgcolor, 0.5)); + var modebarDefaultColor = Color.contrast(Color.rgb(layoutOut.modebar.bgcolor)); + coerce('modebar.color', Color.addOpacity(modebarDefaultColor, 0.3)); + coerce('modebar.activecolor', Color.addOpacity(modebarDefaultColor, 0.7)); + coerce('modebar.uirevision', uirevision); + + coerce('meta'); + + // do not include defaults in fullLayout when users do not set transition + if(Lib.isPlainObject(layoutIn.transition)) { + coerce('transition.duration'); + coerce('transition.easing'); + coerce('transition.ordering'); + } Registry.getComponentMethod( 'calendars', @@ -58489,10 +60983,10 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) { }; plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) { - var context = gd._context || {}, - frameMargins = context.frameMargins, - newWidth, - newHeight; + var context = gd._context || {}; + var frameMargins = context.frameMargins; + var newWidth; + var newHeight; var isPlotDiv = Lib.isPlotDiv(gd); @@ -58508,21 +61002,6 @@ plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) { // just hide it document.body.style.overflow = 'hidden'; } - else if(isNumeric(frameMargins) && frameMargins > 0) { - var reservedMargins = calculateReservedMargins(gd._boundingBoxMargins), - reservedWidth = reservedMargins.left + reservedMargins.right, - reservedHeight = reservedMargins.bottom + reservedMargins.top, - factor = 1 - 2 * frameMargins; - - var gdBB = fullLayout._container && fullLayout._container.node ? - fullLayout._container.node().getBoundingClientRect() : { - width: fullLayout.width, - height: fullLayout.height - }; - - newWidth = Math.round(factor * (gdBB.width - reservedWidth)); - newHeight = Math.round(factor * (gdBB.height - reservedHeight)); - } else { // plotly.js - let the developers do what they want, either // provide height and width for the container div, @@ -58532,17 +61011,23 @@ plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) { newWidth = parseFloat(computedStyle.width) || parseFloat(computedStyle.maxWidth) || fullLayout.width; newHeight = parseFloat(computedStyle.height) || parseFloat(computedStyle.maxHeight) || fullLayout.height; + + if(isNumeric(frameMargins) && frameMargins > 0) { + var factor = 1 - 2 * frameMargins; + newWidth = Math.round(factor * newWidth); + newHeight = Math.round(factor * newHeight); + } } - var minWidth = plots.layoutAttributes.width.min, - minHeight = plots.layoutAttributes.height.min; + var minWidth = plots.layoutAttributes.width.min; + var minHeight = plots.layoutAttributes.height.min; if(newWidth < minWidth) newWidth = minWidth; if(newHeight < minHeight) newHeight = minHeight; var widthHasChanged = !layout.width && - (Math.abs(fullLayout.width - newWidth) > 1), - heightHasChanged = !layout.height && - (Math.abs(fullLayout.height - newHeight) > 1); + (Math.abs(fullLayout.width - newWidth) > 1); + var heightHasChanged = !layout.height && + (Math.abs(fullLayout.height - newHeight) > 1); if(heightHasChanged || widthHasChanged) { if(widthHasChanged) fullLayout.width = newWidth; @@ -58558,29 +61043,6 @@ plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) { plots.sanitizeMargins(fullLayout); }; -/** - * Reduce all reserved margin objects to a single required margin reservation. - * - * @param {Object} margins - * @returns {{left: number, right: number, bottom: number, top: number}} - */ -function calculateReservedMargins(margins) { - var resultingMargin = {left: 0, right: 0, bottom: 0, top: 0}, - marginName; - - if(margins) { - for(marginName in margins) { - if(margins.hasOwnProperty(marginName)) { - resultingMargin.left += margins[marginName].left || 0; - resultingMargin.right += margins[marginName].right || 0; - resultingMargin.bottom += margins[marginName].bottom || 0; - resultingMargin.top += margins[marginName].top || 0; - } - } - } - return resultingMargin; -} - plots.supplyLayoutModuleDefaults = function(layoutIn, layoutOut, fullData, transitionData) { var componentsRegistry = Registry.componentsRegistry; var basePlotModules = layoutOut._basePlotModules; @@ -58625,7 +61087,10 @@ plots.supplyLayoutModuleDefaults = function(layoutIn, layoutOut, fullData, trans } // trace module layout defaults - var modules = layoutOut._visibleModules; + // use _modules rather than _visibleModules so that even + // legendonly traces can include settings - eg barmode, which affects + // legend.traceorder default value. + var modules = layoutOut._modules; for(i = 0; i < modules.length; i++) { _module = modules[i]; @@ -58754,12 +61219,12 @@ plots.sanitizeMargins = function(fullLayout) { // polar doesn't do margins... if(!fullLayout || !fullLayout.margin) return; - var width = fullLayout.width, - height = fullLayout.height, - margin = fullLayout.margin, - plotWidth = width - (margin.l + margin.r), - plotHeight = height - (margin.t + margin.b), - correction; + var width = fullLayout.width; + var height = fullLayout.height; + var margin = fullLayout.margin; + var plotWidth = width - (margin.l + margin.r); + var plotHeight = height - (margin.t + margin.b); + var correction; // if margin.l + margin.r = 0 then plotWidth > 0 // as width >= 10 by supplyDefaults @@ -58786,7 +61251,20 @@ plots.allowAutoMargin = function(gd, id) { gd._fullLayout._pushmarginIds[id] = 1; }; -function setupAutoMargin(fullLayout) { +function initMargins(fullLayout) { + var margin = fullLayout.margin; + + if(!fullLayout._size) { + var gs = fullLayout._size = { + l: Math.round(margin.l), + r: Math.round(margin.r), + t: Math.round(margin.t), + b: Math.round(margin.b), + p: Math.round(margin.pad) + }; + gs.w = Math.round(fullLayout.width) - gs.l - gs.r; + gs.h = Math.round(fullLayout.height) - gs.t - gs.b; + } if(!fullLayout._pushmargin) fullLayout._pushmargin = {}; if(!fullLayout._pushmarginIds) fullLayout._pushmarginIds = {}; } @@ -58809,8 +61287,6 @@ function setupAutoMargin(fullLayout) { plots.autoMargin = function(gd, id, o) { var fullLayout = gd._fullLayout; - setupAutoMargin(fullLayout); - var pushMargin = fullLayout._pushmargin; var pushMarginIds = fullLayout._pushmarginIds; @@ -58854,18 +61330,19 @@ plots.autoMargin = function(gd, id, o) { plots.doAutoMargin = function(gd) { var fullLayout = gd._fullLayout; if(!fullLayout._size) fullLayout._size = {}; - setupAutoMargin(fullLayout); + initMargins(fullLayout); - var gs = fullLayout._size, - oldmargins = JSON.stringify(gs); + var gs = fullLayout._size; + var oldmargins = JSON.stringify(gs); + var margin = fullLayout.margin; // adjust margins for outside components // fullLayout.margin is the requested margin, // fullLayout._size has margins and plotsize after adjustment - var ml = Math.max(fullLayout.margin.l || 0, 0); - var mr = Math.max(fullLayout.margin.r || 0, 0); - var mt = Math.max(fullLayout.margin.t || 0, 0); - var mb = Math.max(fullLayout.margin.b || 0, 0); + var ml = margin.l; + var mr = margin.r; + var mt = margin.t; + var mb = margin.b; var pushMargin = fullLayout._pushmargin; var pushMarginIds = fullLayout._pushmarginIds; @@ -58888,23 +61365,23 @@ plots.doAutoMargin = function(gd) { for(var k1 in pushMargin) { - var pushleft = pushMargin[k1].l || {}, - pushbottom = pushMargin[k1].b || {}, - fl = pushleft.val, - pl = pushleft.size, - fb = pushbottom.val, - pb = pushbottom.size; + var pushleft = pushMargin[k1].l || {}; + var pushbottom = pushMargin[k1].b || {}; + var fl = pushleft.val; + var pl = pushleft.size; + var fb = pushbottom.val; + var pb = pushbottom.size; for(var k2 in pushMargin) { if(isNumeric(pl) && pushMargin[k2].r) { - var fr = pushMargin[k2].r.val, - pr = pushMargin[k2].r.size; + var fr = pushMargin[k2].r.val; + var pr = pushMargin[k2].r.size; if(fr > fl) { var newl = (pl * fr + - (pr - fullLayout.width) * fl) / (fr - fl), - newr = (pr * (1 - fl) + - (pl - fullLayout.width) * (1 - fr)) / (fr - fl); + (pr - fullLayout.width) * fl) / (fr - fl); + var newr = (pr * (1 - fl) + + (pl - fullLayout.width) * (1 - fr)) / (fr - fl); if(newl >= 0 && newr >= 0 && newl + newr > ml + mr) { ml = newl; mr = newr; @@ -58913,14 +61390,14 @@ plots.doAutoMargin = function(gd) { } if(isNumeric(pb) && pushMargin[k2].t) { - var ft = pushMargin[k2].t.val, - pt = pushMargin[k2].t.size; + var ft = pushMargin[k2].t.val; + var pt = pushMargin[k2].t.size; if(ft > fb) { var newb = (pb * ft + - (pt - fullLayout.height) * fb) / (ft - fb), - newt = (pt * (1 - fb) + - (pb - fullLayout.height) * (1 - ft)) / (ft - fb); + (pt - fullLayout.height) * fb) / (ft - fb); + var newt = (pt * (1 - fb) + + (pb - fullLayout.height) * (1 - ft)) / (ft - fb); if(newb >= 0 && newt >= 0 && newb + newt > mb + mt) { mb = newb; mt = newt; @@ -58935,7 +61412,7 @@ plots.doAutoMargin = function(gd) { gs.r = Math.round(mr); gs.t = Math.round(mt); gs.b = Math.round(mb); - gs.p = Math.round(fullLayout.margin.pad); + gs.p = Math.round(margin.pad); gs.w = Math.round(fullLayout.width) - gs.l - gs.r; gs.h = Math.round(fullLayout.height) - gs.t - gs.b; @@ -58982,16 +61459,17 @@ plots.graphJson = function(gd, dataonly, mode, output, useDefaults) { plots.supplyDefaults(gd); } - var data = (useDefaults) ? gd._fullData : gd.data, - layout = (useDefaults) ? gd._fullLayout : gd.layout, - frames = (gd._transitionData || {})._frames; + var data = (useDefaults) ? gd._fullData : gd.data; + var layout = (useDefaults) ? gd._fullLayout : gd.layout; + var frames = (gd._transitionData || {})._frames; function stripObj(d) { if(typeof d === 'function') { return null; } if(Lib.isPlainObject(d)) { - var o = {}, v, src; + var o = {}; + var v, src; for(v in d) { // remove private elements and functions // _ is for private, [ is a mistake ie [object Object] @@ -59324,10 +61802,9 @@ plots.extendLayout = function(destLayout, srcLayout) { }; /** - * Transition to a set of new data and layout properties + * Transition to a set of new data and layout properties from Plotly.animate * * @param {DOM element} gd - * the DOM element of the graph container div * @param {Object[]} data * an array of data objects following the normal Plotly data definition format * @param {Object} layout @@ -59340,17 +61817,15 @@ plots.extendLayout = function(destLayout, srcLayout) { * options for the transition */ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) { - var i, traceIdx; - - var dataLength = Array.isArray(data) ? data.length : 0; - var traceIndices = traces.slice(0, dataLength); - + var opts = {redraw: frameOpts.redraw}; var transitionedTraces = []; + var axEdits = []; - function prepareTransitions() { - var i; + opts.prepareFn = function() { + var dataLength = Array.isArray(data) ? data.length : 0; + var traceIndices = traces.slice(0, dataLength); - for(i = 0; i < traceIndices.length; i++) { + for(var i = 0; i < traceIndices.length; i++) { var traceIdx = traceIndices[i]; var trace = gd._fullData[traceIdx]; var module = trace._module; @@ -59396,8 +61871,213 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) plots.supplyDefaults(gd); plots.doCalcdata(gd); + var newLayout = Lib.expandObjectPaths(layout); + + if(newLayout) { + var subplots = gd._fullLayout._plots; + + for(var k in subplots) { + var plotinfo = subplots[k]; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; + var xr0 = xa.range.slice(); + var yr0 = ya.range.slice(); + + var xr1; + if(Array.isArray(newLayout[xa._name + '.range'])) { + xr1 = newLayout[xa._name + '.range'].slice(); + } else if(Array.isArray((newLayout[xa._name] || {}).range)) { + xr1 = newLayout[xa._name].range.slice(); + } + + var yr1; + if(Array.isArray(newLayout[ya._name + '.range'])) { + yr1 = newLayout[ya._name + '.range'].slice(); + } else if(Array.isArray((newLayout[ya._name] || {}).range)) { + yr1 = newLayout[ya._name].range.slice(); + } + + var editX; + if(xr0 && xr1 && (xr0[0] !== xr1[0] || xr0[1] !== xr1[1])) { + editX = {xr0: xr0, xr1: xr1}; + } + + var editY; + if(yr0 && yr1 && (yr0[0] !== yr1[0] || yr0[1] !== yr1[1])) { + editY = {yr0: yr0, yr1: yr1}; + } + + if(editX || editY) { + axEdits.push(Lib.extendFlat({plotinfo: plotinfo}, editX, editY)); + } + } + } + return Promise.resolve(); - } + }; + + opts.runFn = function(makeCallback) { + var traceTransitionOpts; + var basePlotModules = gd._fullLayout._basePlotModules; + var hasAxisTransition = axEdits.length; + var i; + + if(layout) { + for(i = 0; i < basePlotModules.length; i++) { + if(basePlotModules[i].transitionAxes) { + basePlotModules[i].transitionAxes(gd, axEdits, transitionOpts, makeCallback); + } + } + } + + // Here handle the exception that we refuse to animate scales and axes at the same + // time. In other words, if there's an axis transition, then set the data transition + // to instantaneous. + if(hasAxisTransition) { + traceTransitionOpts = Lib.extendFlat({}, transitionOpts); + traceTransitionOpts.duration = 0; + // This means do not transition traces, + // this happens on layout-only (e.g. axis range) animations + transitionedTraces = null; + } else { + traceTransitionOpts = transitionOpts; + } + + for(i = 0; i < basePlotModules.length; i++) { + // Note that we pass a callback to *create* the callback that must be invoked on completion. + // This is since not all traces know about transitions, so it greatly simplifies matters if + // the trace is responsible for creating a callback, if needed, and then executing it when + // the time is right. + basePlotModules[i].plot(gd, transitionedTraces, traceTransitionOpts, makeCallback); + } + }; + + return _transition(gd, transitionOpts, opts); +}; + +/** + * Transition to a set of new data and layout properties from Plotly.react + * + * @param {DOM element} gd + * @param {object} restyleFlags + * - anim {'all'|'some'} + * @param {object} relayoutFlags + * - anim {'all'|'some'} + * @param {object} oldFullLayout : old (pre Plotly.react) fullLayout + */ +plots.transitionFromReact = function(gd, restyleFlags, relayoutFlags, oldFullLayout) { + var fullLayout = gd._fullLayout; + var transitionOpts = fullLayout.transition; + var opts = {}; + var axEdits = []; + + opts.prepareFn = function() { + var subplots = fullLayout._plots; + + // no need to redraw at end of transition, + // if all changes are animatable + opts.redraw = false; + if(restyleFlags.anim === 'some') opts.redraw = true; + if(relayoutFlags.anim === 'some') opts.redraw = true; + + for(var k in subplots) { + var plotinfo = subplots[k]; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; + var xr0 = oldFullLayout[xa._name].range.slice(); + var yr0 = oldFullLayout[ya._name].range.slice(); + var xr1 = xa.range.slice(); + var yr1 = ya.range.slice(); + + xa.setScale(); + ya.setScale(); + + var editX; + if(xr0[0] !== xr1[0] || xr0[1] !== xr1[1]) { + editX = {xr0: xr0, xr1: xr1}; + } + + var editY; + if(yr0[0] !== yr1[0] || yr0[1] !== yr1[1]) { + editY = {yr0: yr0, yr1: yr1}; + } + + if(editX || editY) { + axEdits.push(Lib.extendFlat({plotinfo: plotinfo}, editX, editY)); + } + } + + return Promise.resolve(); + }; + + opts.runFn = function(makeCallback) { + var fullData = gd._fullData; + var fullLayout = gd._fullLayout; + var basePlotModules = fullLayout._basePlotModules; + + var axisTransitionOpts; + var traceTransitionOpts; + var transitionedTraces; + + var allTraceIndices = []; + for(var i = 0; i < fullData.length; i++) { + allTraceIndices.push(i); + } + + function transitionAxes() { + for(var j = 0; j < basePlotModules.length; j++) { + if(basePlotModules[j].transitionAxes) { + basePlotModules[j].transitionAxes(gd, axEdits, axisTransitionOpts, makeCallback); + } + } + } + + function transitionTraces() { + for(var j = 0; j < basePlotModules.length; j++) { + basePlotModules[j].plot(gd, transitionedTraces, traceTransitionOpts, makeCallback); + } + } + + if(axEdits.length && restyleFlags.anim) { + if(transitionOpts.ordering === 'traces first') { + axisTransitionOpts = Lib.extendFlat({}, transitionOpts, {duration: 0}); + transitionedTraces = allTraceIndices; + traceTransitionOpts = transitionOpts; + transitionTraces(); + setTimeout(transitionAxes, transitionOpts.duration); + } else { + axisTransitionOpts = transitionOpts; + transitionedTraces = null; + traceTransitionOpts = Lib.extendFlat({}, transitionOpts, {duration: 0}); + transitionAxes(); + transitionTraces(); + } + } else if(axEdits.length) { + axisTransitionOpts = transitionOpts; + transitionAxes(); + } else if(restyleFlags.anim) { + transitionedTraces = allTraceIndices; + traceTransitionOpts = transitionOpts; + transitionTraces(); + } + }; + + return _transition(gd, transitionOpts, opts); +}; + +/** + * trace/layout transition wrapper that works + * for transitions initiated by Plotly.animate and Plotly.react. + * + * @param {DOM element} gd + * @param {object} transitionOpts + * @param {object} opts + * - redraw {boolean} + * - prepareFn {function} *should return a Promise* + * - runFn {function} ran inside executeTransitions + */ +function _transition(gd, transitionOpts, opts) { + var aborted = false; function executeCallbacks(list) { var p = Promise.resolve(); @@ -59415,8 +62095,6 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) } } - var aborted = false; - function executeTransitions() { gd.emit('plotly_transitioning', []); @@ -59431,7 +62109,6 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) gd._transitioningWithDuration = true; } - // If another transition is triggered, this callback will be executed simply because it's // in the interruptCallbacks queue. If this transition completes, it will instead flush // that queue and forget about this callback. @@ -59439,7 +62116,7 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) aborted = true; }); - if(frameOpts.redraw) { + if(opts.redraw) { gd._transitionData._interruptCallbacks.push(function() { return Registry.call('redraw', gd); }); @@ -59465,44 +62142,10 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) }; } - var traceTransitionOpts; - var j; - var basePlotModules = gd._fullLayout._basePlotModules; - var hasAxisTransition = false; - - if(layout) { - for(j = 0; j < basePlotModules.length; j++) { - if(basePlotModules[j].transitionAxes) { - var newLayout = Lib.expandObjectPaths(layout); - hasAxisTransition = basePlotModules[j].transitionAxes(gd, newLayout, transitionOpts, makeCallback) || hasAxisTransition; - } - } - } - - // Here handle the exception that we refuse to animate scales and axes at the same - // time. In other words, if there's an axis transition, then set the data transition - // to instantaneous. - if(hasAxisTransition) { - traceTransitionOpts = Lib.extendFlat({}, transitionOpts); - traceTransitionOpts.duration = 0; - // This means do not transition traces, - // this happens on layout-only (e.g. axis range) animations - transitionedTraces = null; - } else { - traceTransitionOpts = transitionOpts; - } - - for(j = 0; j < basePlotModules.length; j++) { - // Note that we pass a callback to *create* the callback that must be invoked on completion. - // This is since not all traces know about transitions, so it greatly simplifies matters if - // the trace is responsible for creating a callback, if needed, and then executing it when - // the time is right. - basePlotModules[j].plot(gd, transitionedTraces, traceTransitionOpts, makeCallback); - } + opts.runFn(makeCallback); // If nothing else creates a callback, then this will trigger the completion in the next tick: setTimeout(makeCallback()); - }); } @@ -59515,7 +62158,7 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) flushCallbacks(gd._transitionData._interruptCallbacks); return Promise.resolve().then(function() { - if(frameOpts.redraw) { + if(opts.redraw) { return Registry.call('redraw', gd); } }).then(function() { @@ -59541,15 +62184,13 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) return executeCallbacks(gd._transitionData._interruptCallbacks); } - for(i = 0; i < traceIndices.length; i++) { - traceIdx = traceIndices[i]; - var contFull = gd._fullData[traceIdx]; - var module = contFull._module; - - if(!module) continue; - } - - var seq = [plots.previousPromises, interruptPreviousTransitions, prepareTransitions, plots.rehover, executeTransitions]; + var seq = [ + plots.previousPromises, + interruptPreviousTransitions, + opts.prepareFn, + plots.rehover, + executeTransitions + ]; var transitionStarting = Lib.syncOrAsync(seq, gd); @@ -59557,15 +62198,13 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) transitionStarting = Promise.resolve(); } - return transitionStarting.then(function() { - return gd; - }); -}; + return transitionStarting.then(function() { return gd; }); +} plots.doCalcdata = function(gd, traces) { - var axList = axisIDs.list(gd), - fullData = gd._fullData, - fullLayout = gd._fullLayout; + var axList = axisIDs.list(gd); + var fullData = gd._fullData; + var fullLayout = gd._fullLayout; var trace, _module, i, j; @@ -59618,7 +62257,7 @@ plots.doCalcdata = function(gd, traces) { ); } - clearAxesCalc(axList); + setupAxisCategories(axList, fullData); var hasCalcTransform = false; @@ -59656,7 +62295,7 @@ plots.doCalcdata = function(gd, traces) { } // clear stuff that should recomputed in 'regular' loop - if(hasCalcTransform) clearAxesCalc(axList); + if(hasCalcTransform) setupAxisCategories(axList, fullData); function calci(i, isContainer) { trace = fullData[i]; @@ -59714,9 +62353,13 @@ plots.doCalcdata = function(gd, traces) { Registry.getComponentMethod('errorbars', 'calc')(gd); }; -function clearAxesCalc(axList) { +function setupAxisCategories(axList, fullData) { for(var i = 0; i < axList.length; i++) { - axList[i].clearCalc(); + var ax = axList[i]; + ax.clearCalc(); + if(ax.type === 'multicategory') { + ax.setupMultiCategory(fullData); + } } } @@ -59780,8 +62423,8 @@ plots.generalUpdatePerTraceModule = function(gd, subplot, subplotCalcData, subpl // build up moduleName -> calcData hash for(i = 0; i < subplotCalcData.length; i++) { - var calcTraces = subplotCalcData[i], - trace = calcTraces[0].trace; + var calcTraces = subplotCalcData[i]; + var trace = calcTraces[0].trace; // skip over visible === false traces // as they don't have `_module` ref @@ -59796,8 +62439,8 @@ plots.generalUpdatePerTraceModule = function(gd, subplot, subplotCalcData, subpl // removed from the DOM. for(var moduleNameOld in traceHashOld) { if(!traceHash[moduleNameOld]) { - var fakeCalcTrace = traceHashOld[moduleNameOld][0], - fakeTrace = fakeCalcTrace[0].trace; + var fakeCalcTrace = traceHashOld[moduleNameOld][0]; + var fakeTrace = fakeCalcTrace[0].trace; fakeTrace.visible = false; traceHash[moduleNameOld] = [fakeCalcTrace]; @@ -59816,9 +62459,9 @@ plots.generalUpdatePerTraceModule = function(gd, subplot, subplotCalcData, subpl subplot.traceHash = traceHash; }; -},{"../components/color":50,"../constants/numerical":151,"../lib":169,"../plot_api/plot_schema":203,"../plot_api/plot_template":204,"../plots/cartesian/axis_ids":217,"../registry":259,"./animation_attributes":209,"./attributes":211,"./command":238,"./font_attributes":240,"./frame_attributes":241,"./layout_attributes":244,"./sort_modules":253,"d3":16,"fast-isnumeric":18}],247:[function(_dereq_,module,exports){ +},{"../components/color":51,"../constants/numerical":149,"../lib":168,"../plot_api/plot_schema":201,"../plot_api/plot_template":202,"../plots/cartesian/axis_ids":215,"../registry":257,"./animation_attributes":207,"./attributes":209,"./command":237,"./font_attributes":239,"./frame_attributes":240,"./layout_attributes":243,"d3":16,"fast-isnumeric":18}],246:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59860,9 +62503,9 @@ module.exports = { } }; -},{"../../../lib/extend":163,"../../../traces/scatter/attributes":366}],248:[function(_dereq_,module,exports){ +},{"../../../lib/extend":162,"../../../traces/scatter/attributes":367}],247:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59982,9 +62625,9 @@ module.exports = overrideAll({ } }, 'plot', 'nested'); -},{"../../../lib/extend":163,"../../../plot_api/edit_types":197,"../../cartesian/layout_attributes":226}],249:[function(_dereq_,module,exports){ +},{"../../../lib/extend":162,"../../../plot_api/edit_types":195,"../../cartesian/layout_attributes":225}],248:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59997,9 +62640,9 @@ var Polar = module.exports = _dereq_('./micropolar'); Polar.manager = _dereq_('./micropolar_manager'); -},{"./micropolar":250,"./micropolar_manager":251}],250:[function(_dereq_,module,exports){ +},{"./micropolar":249,"./micropolar_manager":250}],249:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -60215,8 +62858,8 @@ var µ = module.exports = { version: '0.2.2' }; centeringOffset[0] = Math.max(0, centeringOffset[0]); centeringOffset[1] = Math.max(0, centeringOffset[1]); svg.select('.outer-group').attr('transform', 'translate(' + centeringOffset + ')'); - if (axisConfig.title) { - var title = svg.select('g.title-group text').style(fontStyle).text(axisConfig.title); + if (axisConfig.title && axisConfig.title.text) { + var title = svg.select('g.title-group text').style(fontStyle).text(axisConfig.title.text); var titleBBox = title.node().getBBox(); title.attr({ x: chartCenter[0] - titleBBox.width / 2, @@ -61417,9 +64060,9 @@ var µ = module.exports = { version: '0.2.2' }; return exports; }; -},{"../../../constants/alignment":148,"../../../lib":169,"d3":16}],251:[function(_dereq_,module,exports){ +},{"../../../constants/alignment":146,"../../../lib":168,"d3":16}],250:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61488,24 +64131,24 @@ manager.framework = function(_gd) { }; manager.fillLayout = function(_gd) { - var container = d3.select(_gd).selectAll('.plot-container'), - paperDiv = container.selectAll('.svg-container'), - paper = _gd.framework && _gd.framework.svg && _gd.framework.svg(), - dflts = { - width: 800, - height: 600, - paper_bgcolor: Color.background, - _container: container, - _paperdiv: paperDiv, - _paper: paper - }; + var container = d3.select(_gd).selectAll('.plot-container'); + var paperDiv = container.selectAll('.svg-container'); + var paper = _gd.framework && _gd.framework.svg && _gd.framework.svg(); + var dflts = { + width: 800, + height: 600, + paper_bgcolor: Color.background, + _container: container, + _paperdiv: paperDiv, + _paper: paper + }; _gd._fullLayout = extendDeepAll(dflts, _gd.layout); }; -},{"../../../components/color":50,"../../../lib":169,"./micropolar":250,"./undo_manager":252,"d3":16}],252:[function(_dereq_,module,exports){ +},{"../../../components/color":51,"../../../lib":168,"./micropolar":249,"./undo_manager":251,"d3":16}],251:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61517,10 +64160,10 @@ manager.fillLayout = function(_gd) { // Modified from https://github.com/ArthurClemens/Javascript-Undo-Manager // Copyright (c) 2010-2013 Arthur Clemens, arthur@visiblearea.com module.exports = function UndoManager() { - var undoCommands = [], - index = -1, - isExecuting = false, - callback; + var undoCommands = []; + var index = -1; + var isExecuting = false; + var callback; function execute(command, action) { if(!command) return this; @@ -61569,36 +64212,9 @@ module.exports = function UndoManager() { }; }; -},{}],253:[function(_dereq_,module,exports){ +},{}],252:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - -// always plot splom before cartesian (i.e. scattergl traces) -function sortModules(a, b) { - if(a === 'splom') return -1; - if(b === 'splom') return 1; - return 0; -} - -function sortBasePlotModules(a, b) { - return sortModules(a.name, b.name); -} - -module.exports = { - sortBasePlotModules: sortBasePlotModules, - sortModules: sortModules -}; - -},{}],254:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61666,6 +64282,12 @@ module.exports = function handleSubplotDefaults(layoutIn, layoutOut, fullData, o subplotLayoutOut = Template.newContainer(layoutOut, id, baseId); + // All subplot containers get a `uirevision` inheriting from the base. + // Currently all subplots containers have some user interaction + // attributes, but if we ever add one that doesn't, we would need an + // option to skip this step. + coerce('uirevision', layoutOut.uirevision); + var dfltDomains = {}; dfltDomains[partition] = [i / idsLength, (i + 1) / idsLength]; handleDomainDefaults(subplotLayoutOut, layoutOut, coerce, dfltDomains); @@ -61675,9 +64297,9 @@ module.exports = function handleSubplotDefaults(layoutIn, layoutOut, fullData, o } }; -},{"../lib":169,"../plot_api/plot_template":204,"./domain":239}],255:[function(_dereq_,module,exports){ +},{"../lib":168,"../plot_api/plot_template":202,"./domain":238}],253:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61720,9 +64342,9 @@ exports.plot = function plotTernary(gd) { var ternaryIds = fullLayout._subplots[TERNARY]; for(var i = 0; i < ternaryIds.length; i++) { - var ternaryId = ternaryIds[i], - ternaryCalcData = getSubplotCalcData(calcData, TERNARY, ternaryId), - ternary = fullLayout[ternaryId]._subplot; + var ternaryId = ternaryIds[i]; + var ternaryCalcData = getSubplotCalcData(calcData, TERNARY, ternaryId); + var ternary = fullLayout[ternaryId]._subplot; // If ternary is not instantiated, create one! if(!ternary) { @@ -61759,9 +64381,9 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) } }; -},{"../../lib":169,"../../plots/get_data":242,"./layout_attributes":256,"./layout_defaults":257,"./ternary":258}],256:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/get_data":241,"./layout_attributes":254,"./layout_defaults":255,"./ternary":256}],254:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61779,7 +64401,6 @@ var extendFlat = _dereq_('../../lib/extend').extendFlat; var ternaryAxesAttrs = { title: axesAttrs.title, - titlefont: axesAttrs.titlefont, color: axesAttrs.color, // ticks tickmode: axesAttrs.tickmode, @@ -61820,10 +64441,14 @@ var ternaryAxesAttrs = { min: 0, + }, + _deprecated: { + title: axesAttrs._deprecated.title, + titlefont: axesAttrs._deprecated.titlefont } }; -module.exports = overrideAll({ +var attrs = module.exports = overrideAll({ domain: domainAttrs({name: 'ternary'}), bgcolor: { @@ -61844,9 +64469,24 @@ module.exports = overrideAll({ caxis: ternaryAxesAttrs }, 'plot', 'from-root'); -},{"../../components/color/attributes":49,"../../lib/extend":163,"../../plot_api/edit_types":197,"../cartesian/layout_attributes":226,"../domain":239}],257:[function(_dereq_,module,exports){ +// set uirevisions outside of `overrideAll` so we can get `editType: none` +attrs.uirevision = { + valType: 'any', + + editType: 'none', + +}; + +attrs.aaxis.uirevision = attrs.baxis.uirevision = attrs.caxis.uirevision = { + valType: 'any', + + editType: 'none', + +}; + +},{"../../components/color/attributes":50,"../../lib/extend":162,"../../plot_api/edit_types":195,"../cartesian/layout_attributes":225,"../domain":238}],255:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61893,15 +64533,15 @@ function handleTernaryDefaults(ternaryLayoutIn, ternaryLayoutOut, coerce, option containerOut = Template.newContainer(ternaryLayoutOut, axName); containerOut._name = axName; - handleAxisDefaults(containerIn, containerOut, options); + handleAxisDefaults(containerIn, containerOut, options, ternaryLayoutOut); } // if the min values contradict each other, set them all to default (0) // and delete *all* the inputs so the user doesn't get confused later by // changing one and having them all change. - var aaxis = ternaryLayoutOut.aaxis, - baxis = ternaryLayoutOut.baxis, - caxis = ternaryLayoutOut.caxis; + var aaxis = ternaryLayoutOut.aaxis; + var baxis = ternaryLayoutOut.baxis; + var caxis = ternaryLayoutOut.caxis; if(aaxis.min + baxis.min + caxis.min >= sum) { aaxis.min = 0; baxis.min = 0; @@ -61912,13 +64552,15 @@ function handleTernaryDefaults(ternaryLayoutIn, ternaryLayoutOut, coerce, option } } -function handleAxisDefaults(containerIn, containerOut, options) { +function handleAxisDefaults(containerIn, containerOut, options, ternaryLayoutOut) { var axAttrs = layoutAttributes[containerOut._name]; function coerce(attr, dflt) { return Lib.coerce(containerIn, containerOut, axAttrs, attr, dflt); } + coerce('uirevision', ternaryLayoutOut.uirevision); + containerOut.type = 'linear'; // no other types allowed for ternary var dfltColor = coerce('color'); @@ -61926,14 +64568,14 @@ function handleAxisDefaults(containerIn, containerOut, options) { // inherit from global font color in case that was provided. var dfltFontColor = (dfltColor !== axAttrs.color.dflt) ? dfltColor : options.font.color; - var axName = containerOut._name, - letterUpper = axName.charAt(0).toUpperCase(), - dfltTitle = 'Component ' + letterUpper; + var axName = containerOut._name; + var letterUpper = axName.charAt(0).toUpperCase(); + var dfltTitle = 'Component ' + letterUpper; - var title = coerce('title', dfltTitle); + var title = coerce('title.text', dfltTitle); containerOut._hovertitle = title === dfltTitle ? title : letterUpper; - Lib.coerceFont(coerce, 'titlefont', { + Lib.coerceFont(coerce, 'title.font', { family: options.font.family, size: Math.round(options.font.size * 1.2), color: dfltFontColor @@ -61974,9 +64616,9 @@ function handleAxisDefaults(containerIn, containerOut, options) { coerce('layer'); } -},{"../../components/color":50,"../../lib":169,"../../plot_api/plot_template":204,"../cartesian/line_grid_defaults":228,"../cartesian/tick_label_defaults":233,"../cartesian/tick_mark_defaults":234,"../cartesian/tick_value_defaults":235,"../subplot_defaults":254,"./layout_attributes":256}],258:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../../plot_api/plot_template":202,"../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":254}],256:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -62054,6 +64696,7 @@ proto.plot = function(ternaryCalcData, fullLayout) { proto.makeFramework = function(fullLayout) { var _this = this; + var gd = _this.graphDiv; var ternaryLayout = fullLayout[_this.id]; var clipId = _this.clipId = 'clip' + _this.layoutId + _this.id; @@ -62073,8 +64716,8 @@ proto.makeFramework = function(fullLayout) { _this.plotContainer = Lib.ensureSingle(_this.container, 'g', _this.id); _this.updateLayers(ternaryLayout); - Drawing.setClipUrl(_this.layers.backplot, clipId); - Drawing.setClipUrl(_this.layers.grids, clipId); + Drawing.setClipUrl(_this.layers.backplot, clipId, gd); + Drawing.setClipUrl(_this.layers.grids, clipId, gd); }; proto.updateLayers = function(ternaryLayout) { @@ -62135,9 +64778,6 @@ proto.updateLayers = function(ternaryLayout) { } else if(d === 'grids') { grids.forEach(function(d) { layers[d] = s.append('g').classed('grid ' + d, true); - - var fictID = (d === 'bgrid') ? 'x' : 'y'; - layers[d].append('g').classed(fictID, true); }); } }); @@ -62145,31 +64785,31 @@ proto.updateLayers = function(ternaryLayout) { toplevel.order(); }; -var w_over_h = Math.sqrt(4 / 3); +var whRatio = Math.sqrt(4 / 3); proto.adjustLayout = function(ternaryLayout, graphSize) { - var _this = this, - domain = ternaryLayout.domain, - xDomainCenter = (domain.x[0] + domain.x[1]) / 2, - yDomainCenter = (domain.y[0] + domain.y[1]) / 2, - xDomain = domain.x[1] - domain.x[0], - yDomain = domain.y[1] - domain.y[0], - wmax = xDomain * graphSize.w, - hmax = yDomain * graphSize.h, - sum = ternaryLayout.sum, - amin = ternaryLayout.aaxis.min, - bmin = ternaryLayout.baxis.min, - cmin = ternaryLayout.caxis.min; + var _this = this; + var domain = ternaryLayout.domain; + var xDomainCenter = (domain.x[0] + domain.x[1]) / 2; + var yDomainCenter = (domain.y[0] + domain.y[1]) / 2; + var xDomain = domain.x[1] - domain.x[0]; + var yDomain = domain.y[1] - domain.y[0]; + var wmax = xDomain * graphSize.w; + var hmax = yDomain * graphSize.h; + var sum = ternaryLayout.sum; + var amin = ternaryLayout.aaxis.min; + var bmin = ternaryLayout.baxis.min; + var cmin = ternaryLayout.caxis.min; var x0, y0, w, h, xDomainFinal, yDomainFinal; - if(wmax > w_over_h * hmax) { + if(wmax > whRatio * hmax) { h = hmax; - w = h * w_over_h; + w = h * whRatio; } else { w = wmax; - h = w / w_over_h; + h = w / whRatio; } xDomainFinal = xDomain * w / wmax; @@ -62227,23 +64867,16 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { // fictitious angles and domain, but then rotate and translate // it into place at the end var aaxis = _this.aaxis = extendFlat({}, ternaryLayout.aaxis, { - visible: true, range: [amin, sum - bmin - cmin], side: 'left', - _counterangle: 30, // tickangle = 'auto' means 0 anyway for a y axis, need to coerce to 0 here // so we can shift by 30. tickangle: (+ternaryLayout.aaxis.tickangle || 0) - 30, - domain: [yDomain0, yDomain0 + yDomainFinal * w_over_h], - _axislayer: _this.layers.aaxis, - _gridlayer: _this.layers.agrid, + domain: [yDomain0, yDomain0 + yDomainFinal * whRatio], anchor: 'free', position: 0, - _pos: 0, // _this.xaxis.domain[0] * graphSize.w, _id: 'y', - _length: w, - _gridpath: 'M0,0l' + h + ',-' + (w / 2), - automargin: false // don't use automargins routine for labels + _length: w }); setConvert(aaxis, _this.graphDiv._fullLayout); aaxis.setScale(); @@ -62251,45 +64884,28 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { // baxis goes across the bottom (backward). We can set it up as an x axis // without any enclosing transformation. var baxis = _this.baxis = extendFlat({}, ternaryLayout.baxis, { - visible: true, range: [sum - amin - cmin, bmin], side: 'bottom', - _counterangle: 30, domain: _this.xaxis.domain, - _axislayer: _this.layers.baxis, - _gridlayer: _this.layers.bgrid, - _counteraxis: _this.aaxis, anchor: 'free', position: 0, - _pos: 0, // (1 - yDomain0) * graphSize.h, _id: 'x', - _length: w, - _gridpath: 'M0,0l-' + (w / 2) + ',-' + h, - automargin: false // don't use automargins routine for labels + _length: w }); setConvert(baxis, _this.graphDiv._fullLayout); baxis.setScale(); - aaxis._counteraxis = baxis; // caxis goes down the right side. Set it up as a y axis, with // post-transformation similar to aaxis var caxis = _this.caxis = extendFlat({}, ternaryLayout.caxis, { - visible: true, range: [sum - amin - bmin, cmin], side: 'right', - _counterangle: 30, tickangle: (+ternaryLayout.caxis.tickangle || 0) + 30, - domain: [yDomain0, yDomain0 + yDomainFinal * w_over_h], - _axislayer: _this.layers.caxis, - _gridlayer: _this.layers.cgrid, - _counteraxis: _this.baxis, + domain: [yDomain0, yDomain0 + yDomainFinal * whRatio], anchor: 'free', position: 0, - _pos: 0, // _this.xaxis.domain[1] * graphSize.w, _id: 'y', - _length: w, - _gridpath: 'M0,0l-' + h + ',' + (w / 2), - automargin: false // don't use automargins routine for labels + _length: w }); setConvert(caxis, _this.graphDiv._fullLayout); caxis.setScale(); @@ -62327,10 +64943,6 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { _this.drawAxes(true); - // remove crispEdges - all the off-square angles in ternary plots - // make these counterproductive. - _this.plotContainer.selectAll('.crisp').classed('crisp', false); - _this.layers.aline.select('path') .attr('d', aaxis.showline ? 'M' + x0 + ',' + (y0 + h) + 'l' + (w / 2) + ',-' + h : 'M0,0') @@ -62353,7 +64965,8 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { Drawing.setClipUrl( _this.layers.frontplot, - _this._hasClipOnAxisFalse ? null : _this.clipId + _this._hasClipOnAxisFalse ? null : _this.clipId, + _this.graphDiv ); }; @@ -62365,80 +64978,122 @@ proto.drawAxes = function(doTitles) { var aaxis = _this.aaxis; var baxis = _this.baxis; var caxis = _this.caxis; - var newTickLayout; - newTickLayout = strTickLayout(aaxis); - if(_this.aTickLayout !== newTickLayout) { - layers.aaxis.selectAll('.ytick').remove(); - _this.aTickLayout = newTickLayout; - } - - newTickLayout = strTickLayout(baxis); - if(_this.bTickLayout !== newTickLayout) { - layers.baxis.selectAll('.xtick').remove(); - _this.bTickLayout = newTickLayout; - } - - newTickLayout = strTickLayout(caxis); - if(_this.cTickLayout !== newTickLayout) { - layers.caxis.selectAll('.ytick').remove(); - _this.cTickLayout = newTickLayout; - } - - // 3rd arg true below skips titles, so we can configure them - // correctly later on. - Axes.doTicksSingle(gd, aaxis, true); - Axes.doTicksSingle(gd, baxis, true); - Axes.doTicksSingle(gd, caxis, true); + _this.drawAx(aaxis); + _this.drawAx(baxis); + _this.drawAx(caxis); if(doTitles) { var apad = Math.max(aaxis.showticklabels ? aaxis.tickfont.size / 2 : 0, (caxis.showticklabels ? caxis.tickfont.size * 0.75 : 0) + (caxis.ticks === 'outside' ? caxis.ticklen * 0.87 : 0)); - _this.layers['a-title'] = Titles.draw(gd, 'a' + titlesuffix, { + var bpad = (baxis.showticklabels ? baxis.tickfont.size : 0) + + (baxis.ticks === 'outside' ? baxis.ticklen : 0) + 3; + + layers['a-title'] = Titles.draw(gd, 'a' + titlesuffix, { propContainer: aaxis, propName: _this.id + '.aaxis.title', placeholder: _(gd, 'Click to enter Component A title'), attributes: { x: _this.x0 + _this.w / 2, - y: _this.y0 - aaxis.titlefont.size / 3 - apad, + y: _this.y0 - aaxis.title.font.size / 3 - apad, 'text-anchor': 'middle' } }); - - - var bpad = (baxis.showticklabels ? baxis.tickfont.size : 0) + - (baxis.ticks === 'outside' ? baxis.ticklen : 0) + 3; - - _this.layers['b-title'] = Titles.draw(gd, 'b' + titlesuffix, { + layers['b-title'] = Titles.draw(gd, 'b' + titlesuffix, { propContainer: baxis, propName: _this.id + '.baxis.title', placeholder: _(gd, 'Click to enter Component B title'), attributes: { x: _this.x0 - bpad, - y: _this.y0 + _this.h + baxis.titlefont.size * 0.83 + bpad, + y: _this.y0 + _this.h + baxis.title.font.size * 0.83 + bpad, 'text-anchor': 'middle' } }); - - _this.layers['c-title'] = Titles.draw(gd, 'c' + titlesuffix, { + layers['c-title'] = Titles.draw(gd, 'c' + titlesuffix, { propContainer: caxis, propName: _this.id + '.caxis.title', placeholder: _(gd, 'Click to enter Component C title'), attributes: { x: _this.x0 + _this.w + bpad, - y: _this.y0 + _this.h + caxis.titlefont.size * 0.83 + bpad, + y: _this.y0 + _this.h + caxis.title.font.size * 0.83 + bpad, 'text-anchor': 'middle' } }); } }; +proto.drawAx = function(ax) { + var _this = this; + var gd = _this.graphDiv; + var axName = ax._name; + var axLetter = axName.charAt(0); + var axId = ax._id; + var axLayer = _this.layers[axName]; + var counterAngle = 30; + + var stashKey = axLetter + 'tickLayout'; + var newTickLayout = strTickLayout(ax); + if(_this[stashKey] !== newTickLayout) { + axLayer.selectAll('.' + axId + 'tick').remove(); + _this[stashKey] = newTickLayout; + } + + ax.setScale(); + + var vals = Axes.calcTicks(ax); + var valsClipped = Axes.clipEnds(ax, vals); + var transFn = Axes.makeTransFn(ax); + var tickSign = Axes.getTickSigns(ax)[2]; + + var caRad = Lib.deg2rad(counterAngle); + var pad = tickSign * (ax.linewidth || 1) / 2; + var len = tickSign * ax.ticklen; + var w = _this.w; + var h = _this.h; + + var tickPath = axLetter === 'b' ? + 'M0,' + pad + 'l' + (Math.sin(caRad) * len) + ',' + (Math.cos(caRad) * len) : + 'M' + pad + ',0l' + (Math.cos(caRad) * len) + ',' + (-Math.sin(caRad) * len); + + var gridPath = { + a: 'M0,0l' + h + ',-' + (w / 2), + b: 'M0,0l-' + (w / 2) + ',-' + h, + c: 'M0,0l-' + h + ',' + (w / 2) + }[axLetter]; + + Axes.drawTicks(gd, ax, { + vals: ax.ticks === 'inside' ? valsClipped : vals, + layer: axLayer, + path: tickPath, + transFn: transFn, + crisp: false + }); + + Axes.drawGrid(gd, ax, { + vals: valsClipped, + layer: _this.layers[axLetter + 'grid'], + path: gridPath, + transFn: transFn, + crisp: false + }); + + var labelFns = Axes.makeLabelFns(ax, 0, counterAngle); + + Axes.drawLabels(gd, ax, { + vals: vals, + layer: axLayer, + transFn: transFn, + labelXFn: labelFns.labelXFn, + labelYFn: labelFns.labelYFn, + labelAnchorFn: labelFns.labelAnchorFn + }); +}; + function strTickLayout(axLayout) { return axLayout.ticks + String(axLayout.ticklen) + String(axLayout.showticklabels); } - // hard coded paths for zoom corners // uses the same sizing as cartesian, length is MINZOOM/2, width is 3px var CLEN = constants.MINZOOM / 2 + 0.87; @@ -62458,10 +65113,10 @@ var STARTMARKER = 'm0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2Z'; var SHOWZOOMOUTTIP = true; proto.initInteractions = function() { - var _this = this, - dragger = _this.layers.plotbg.select('path').node(), - gd = _this.graphDiv, - zoomContainer = gd._fullLayout._zoomlayer; + var _this = this; + var dragger = _this.layers.plotbg.select('path').node(); + var gd = _this.graphDiv; + var zoomContainer = gd._fullLayout._zoomlayer; // use plotbg for the main interactions var dragOptions = { @@ -62504,18 +65159,22 @@ proto.initInteractions = function() { var x0, y0, mins0, span0, mins, lum, path0, dimmed, zb, corners; + function makeUpdate(_mins) { + var attrs = {}; + attrs[_this.id + '.aaxis.min'] = _mins.a; + attrs[_this.id + '.baxis.min'] = _mins.b; + attrs[_this.id + '.caxis.min'] = _mins.c; + return attrs; + } + function clickZoomPan(numClicks, evt) { var clickMode = gd._fullLayout.clickmode; removeZoombox(gd); if(numClicks === 2) { - var attrs = {}; - attrs[_this.id + '.aaxis.min'] = 0; - attrs[_this.id + '.baxis.min'] = 0; - attrs[_this.id + '.caxis.min'] = 0; gd.emit('plotly_doubleclick', null); - Registry.call('relayout', gd, attrs); + Registry.call('_guiRelayout', gd, makeUpdate({a: 0, b: 0, c: 0})); } if(clickMode.indexOf('select') > -1 && numClicks === 1) { @@ -62570,17 +65229,17 @@ proto.initInteractions = function() { function getCFrac(x, y) { return ((x - (_this.h - y) / Math.sqrt(3)) / _this.w); } function zoomMove(dx0, dy0) { - var x1 = x0 + dx0, - y1 = y0 + dy0, - afrac = Math.max(0, Math.min(1, getAFrac(x0, y0), getAFrac(x1, y1))), - bfrac = Math.max(0, Math.min(1, getBFrac(x0, y0), getBFrac(x1, y1))), - cfrac = Math.max(0, Math.min(1, getCFrac(x0, y0), getCFrac(x1, y1))), - xLeft = ((afrac / 2) + cfrac) * _this.w, - xRight = (1 - (afrac / 2) - bfrac) * _this.w, - xCenter = (xLeft + xRight) / 2, - xSpan = xRight - xLeft, - yBottom = (1 - afrac) * _this.h, - yTop = yBottom - xSpan / w_over_h; + var x1 = x0 + dx0; + var y1 = y0 + dy0; + var afrac = Math.max(0, Math.min(1, getAFrac(x0, y0), getAFrac(x1, y1))); + var bfrac = Math.max(0, Math.min(1, getBFrac(x0, y0), getBFrac(x1, y1))); + var cfrac = Math.max(0, Math.min(1, getCFrac(x0, y0), getCFrac(x1, y1))); + var xLeft = ((afrac / 2) + cfrac) * _this.w; + var xRight = (1 - (afrac / 2) - bfrac) * _this.w; + var xCenter = (xLeft + xRight) / 2; + var xSpan = xRight - xLeft; + var yBottom = (1 - afrac) * _this.h; + var yTop = yBottom - xSpan / whRatio; if(xSpan < constants.MINZOOM) { mins = mins0; @@ -62619,12 +65278,7 @@ proto.initInteractions = function() { if(mins === mins0) return; - var attrs = {}; - attrs[_this.id + '.aaxis.min'] = mins.a; - attrs[_this.id + '.baxis.min'] = mins.b; - attrs[_this.id + '.caxis.min'] = mins.c; - - Registry.call('relayout', gd, attrs); + Registry.call('_guiRelayout', gd, makeUpdate(mins)); if(SHOWZOOMOUTTIP && gd.data && gd._context.showTips) { Lib.notifier(_(gd, 'Double-click to zoom back out'), 'long'); @@ -62642,19 +65296,19 @@ proto.initInteractions = function() { } function plotDrag(dx, dy) { - var dxScaled = dx / _this.xaxis._m, - dyScaled = dy / _this.yaxis._m; + var dxScaled = dx / _this.xaxis._m; + var dyScaled = dy / _this.yaxis._m; mins = { a: mins0.a - dyScaled, b: mins0.b + (dxScaled + dyScaled) / 2, c: mins0.c - (dxScaled - dyScaled) / 2 }; - var minsorted = [mins.a, mins.b, mins.c].sort(), - minindices = { - a: minsorted.indexOf(mins.a), - b: minsorted.indexOf(mins.b), - c: minsorted.indexOf(mins.c) - }; + var minsorted = [mins.a, mins.b, mins.c].sort(); + var minindices = { + a: minsorted.indexOf(mins.a), + b: minsorted.indexOf(mins.b), + c: minsorted.indexOf(mins.c) + }; if(minsorted[0] < 0) { if(minsorted[1] + minsorted[0] / 2 < 0) { minsorted[2] += minsorted[0] + minsorted[1]; @@ -62688,7 +65342,6 @@ proto.initInteractions = function() { _this.caxis.range = [_this.sum - mins.a - mins.b, mins.c]; _this.drawAxes(false); - _this.plotContainer.selectAll('.crisp').classed('crisp', false); if(_this._hasClipOnAxisFalse) { _this.plotContainer @@ -62698,12 +65351,7 @@ proto.initInteractions = function() { } function dragDone() { - var attrs = {}; - attrs[_this.id + '.aaxis.min'] = mins.a; - attrs[_this.id + '.baxis.min'] = mins.b; - attrs[_this.id + '.caxis.min'] = mins.c; - - Registry.call('relayout', gd, attrs); + Registry.call('_guiRelayout', gd, makeUpdate(mins)); } // finally, set up hover and click @@ -62730,9 +65378,9 @@ function removeZoombox(gd) { .remove(); } -},{"../../components/color":50,"../../components/dragelement":72,"../../components/drawing":75,"../../components/fx":92,"../../components/titles":141,"../../lib":169,"../../lib/extend":163,"../../registry":259,"../cartesian/axes":214,"../cartesian/constants":219,"../cartesian/select":231,"../cartesian/set_convert":232,"../plots":246,"d3":16,"tinycolor2":33}],259:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/dragelement":69,"../../components/drawing":72,"../../components/fx":90,"../../components/titles":139,"../../lib":168,"../../lib/extend":162,"../../registry":257,"../cartesian/axes":212,"../cartesian/constants":218,"../cartesian/select":230,"../cartesian/set_convert":231,"../plots":245,"d3":16,"tinycolor2":34}],257:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -62764,6 +65412,7 @@ exports.layoutArrayRegexes = []; exports.traceLayoutAttributes = {}; exports.localeRegistry = {}; exports.apiMethodRegistry = {}; +exports.collectableSubplotTypes = null; /** * Top-level register routine, exported as Plotly.register @@ -62805,6 +65454,8 @@ exports.apiMethodRegistry = {}; * */ exports.register = function register(_modules) { + exports.collectableSubplotTypes = null; + if(!_modules) { throw new Error('No argument passed to Plotly.register.'); } else if(_modules && !Array.isArray(_modules)) { @@ -63172,9 +65823,9 @@ function getTraceType(traceType) { return traceType; } -},{"./lib/extend":163,"./lib/is_plain_object":171,"./lib/loggers":174,"./lib/noop":179,"./lib/push_unique":183,"./plots/attributes":211,"./plots/layout_attributes":244}],260:[function(_dereq_,module,exports){ +},{"./lib/extend":162,"./lib/is_plain_object":169,"./lib/loggers":172,"./lib/noop":177,"./lib/push_unique":181,"./plots/attributes":209,"./plots/layout_attributes":243}],258:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63199,7 +65850,7 @@ function cloneLayoutOverride(tileClass) { autosize: true, width: 150, height: 150, - title: '', + title: {text: ''}, showlegend: false, margin: {l: 5, r: 5, t: 5, b: 5, pad: 0}, annotations: [] @@ -63208,7 +65859,7 @@ function cloneLayoutOverride(tileClass) { case 'thumbnail': override = { - title: '', + title: {text: ''}, hidesources: true, showlegend: false, borderwidth: 0, @@ -63256,7 +65907,7 @@ module.exports = function clonePlot(graphObj, options) { for(i = 0; i < keys.length; i++) { if(keyIsAxis(keys[i])) { - newLayout[keys[i]].title = ''; + newLayout[keys[i]].title = {text: ''}; } } @@ -63284,7 +65935,7 @@ module.exports = function clonePlot(graphObj, options) { var axesImageOverride = {}; if(options.tileClass === 'thumbnail') { axesImageOverride = { - title: '', + title: {text: ''}, showaxeslabels: false, showticklabels: false, linetickenable: false @@ -63346,9 +65997,9 @@ module.exports = function clonePlot(graphObj, options) { return plotTile; }; -},{"../lib":169}],261:[function(_dereq_,module,exports){ +},{"../lib":168}],259:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63414,9 +66065,9 @@ function downloadImage(gd, opts) { module.exports = downloadImage; -},{"../lib":169,"../plot_api/to_image":207,"./filesaver":262}],262:[function(_dereq_,module,exports){ +},{"../lib":168,"../plot_api/to_image":205,"./filesaver":260}],260:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63486,9 +66137,9 @@ var fileSaver = function(url, name) { module.exports = fileSaver; -},{}],263:[function(_dereq_,module,exports){ +},{}],261:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63523,9 +66174,9 @@ exports.getRedrawFunc = function(gd) { }; }; -},{}],264:[function(_dereq_,module,exports){ +},{}],262:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63549,9 +66200,9 @@ var Snapshot = { module.exports = Snapshot; -},{"./cloneplot":260,"./download":261,"./helpers":263,"./svgtoimg":265,"./toimage":266,"./tosvg":267}],265:[function(_dereq_,module,exports){ +},{"./cloneplot":258,"./download":259,"./helpers":261,"./svgtoimg":263,"./toimage":264,"./tosvg":265}],263:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63665,9 +66316,9 @@ function svgToImg(opts) { module.exports = svgToImg; -},{"../lib":169,"events":15}],266:[function(_dereq_,module,exports){ +},{"../lib":168,"events":15}],264:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63744,9 +66395,9 @@ function toImage(gd, opts) { module.exports = toImage; -},{"../lib":169,"../registry":259,"./cloneplot":260,"./helpers":263,"./svgtoimg":265,"./tosvg":267,"events":15}],267:[function(_dereq_,module,exports){ +},{"../lib":168,"../registry":257,"./cloneplot":258,"./helpers":261,"./svgtoimg":263,"./tosvg":265,"events":15}],265:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63926,9 +66577,9 @@ module.exports = function toSVG(gd, format, scale) { return s; }; -},{"../components/color":50,"../components/drawing":75,"../constants/xmlns_namespaces":152,"../lib":169,"d3":16}],268:[function(_dereq_,module,exports){ +},{"../components/color":51,"../components/drawing":72,"../constants/xmlns_namespaces":150,"../lib":168,"d3":16}],266:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63961,9 +66612,9 @@ module.exports = function arraysToCalcdata(cd, trace) { } }; -},{"../../lib":169}],269:[function(_dereq_,module,exports){ +},{"../../lib":168}],267:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63973,15 +66624,18 @@ module.exports = function arraysToCalcdata(cd, trace) { 'use strict'; var scatterAttrs = _dereq_('../scatter/attributes'); +var hovertemplateAttrs = _dereq_('../../components/fx/hovertemplate_attributes'); var colorAttributes = _dereq_('../../components/colorscale/attributes'); var colorbarAttrs = _dereq_('../../components/colorbar/attributes'); var fontAttrs = _dereq_('../../plots/font_attributes'); +var constants = _dereq_('./constants.js'); var extendFlat = _dereq_('../../lib/extend').extendFlat; var textFontAttrs = fontAttrs({ editType: 'calc', arrayOk: true, + colorEditType: 'style', }); @@ -64023,6 +66677,9 @@ module.exports = { text: scatterAttrs.text, hovertext: scatterAttrs.hovertext, + hovertemplate: hovertemplateAttrs({}, { + keys: constants.eventDataKeys + }), textposition: { valType: 'enumerated', @@ -64130,9 +66787,9 @@ module.exports = { } }; -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../lib/extend":163,"../../plots/font_attributes":240,"../scatter/attributes":366}],270:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../components/fx/hovertemplate_attributes":89,"../../lib/extend":162,"../../plots/font_attributes":239,"../scatter/attributes":367,"./constants.js":269}],268:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -64142,7 +66799,7 @@ module.exports = { 'use strict'; var Axes = _dereq_('../../plots/cartesian/axes'); -var hasColorscale = _dereq_('../../components/colorscale/has_colorscale'); +var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale; var colorscaleCalc = _dereq_('../../components/colorscale/calc'); var arraysToCalcdata = _dereq_('./arrays_to_calcdata'); var calcSelection = _dereq_('../scatter/calc_selection'); @@ -64175,10 +66832,18 @@ module.exports = function calc(gd, trace) { // auto-z and autocolorscale if applicable if(hasColorscale(trace, 'marker')) { - colorscaleCalc(trace, trace.marker.color, 'marker', 'c'); + colorscaleCalc(gd, trace, { + vals: trace.marker.color, + containerStr: 'marker', + cLetter: 'c' + }); } if(hasColorscale(trace, 'marker.line')) { - colorscaleCalc(trace, trace.marker.line.color, 'marker.line', 'c'); + colorscaleCalc(gd, trace, { + vals: trace.marker.line.color, + containerStr: 'marker.line', + cLetter: 'c' + }); } arraysToCalcdata(cd, trace); @@ -64187,9 +66852,9 @@ module.exports = function calc(gd, trace) { return cd; }; -},{"../../components/colorscale/calc":58,"../../components/colorscale/has_colorscale":64,"../../plots/cartesian/axes":214,"../scatter/calc_selection":368,"./arrays_to_calcdata":268}],271:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"../../plots/cartesian/axes":212,"../scatter/calc_selection":369,"./arrays_to_calcdata":266}],269:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -64197,6 +66862,21 @@ module.exports = function calc(gd, trace) { */ +'use strict'; + +module.exports = { + eventDataKeys: [] +}; + +},{}],270:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); @@ -64215,15 +66895,15 @@ var Sieve = _dereq_('./sieve.js'); */ function crossTraceCalc(gd, plotinfo) { - var xa = plotinfo.xaxis, - ya = plotinfo.yaxis; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; - var fullTraces = gd._fullData, - calcTraces = gd.calcdata, - calcTracesHorizontal = [], - calcTracesVertical = [], - i; - for(i = 0; i < fullTraces.length; i++) { + var fullTraces = gd._fullData; + var calcTraces = gd.calcdata; + var calcTracesHorizontal = []; + var calcTracesVertical = []; + + for(var i = 0; i < fullTraces.length; i++) { var fullTrace = fullTraces[i]; if( fullTrace.visible === true && @@ -64233,8 +66913,7 @@ function crossTraceCalc(gd, plotinfo) { ) { if(fullTrace.orientation === 'h') { calcTracesHorizontal.push(calcTraces[i]); - } - else { + } else { calcTracesVertical.push(calcTraces[i]); } } @@ -64247,19 +66926,18 @@ function crossTraceCalc(gd, plotinfo) { function setGroupPositions(gd, pa, sa, calcTraces) { if(!calcTraces.length) return; - var barmode = gd._fullLayout.barmode, - overlay = (barmode === 'overlay'), - group = (barmode === 'group'), - excluded, - included, - i, calcTrace, fullTrace; + var barmode = gd._fullLayout.barmode; + var overlay = (barmode === 'overlay'); + var group = (barmode === 'group'); + var excluded; + var included; + var i, calcTrace, fullTrace; initBase(gd, pa, sa, calcTraces); if(overlay) { setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces); - } - else if(group) { + } else if(group) { // exclude from the group those traces for which the user set an offset excluded = []; included = []; @@ -64277,8 +66955,7 @@ function setGroupPositions(gd, pa, sa, calcTraces) { if(excluded.length) { setGroupPositionsInOverlayMode(gd, pa, sa, excluded); } - } - else { + } else { // exclude from the stack those traces for which the user set a base excluded = []; included = []; @@ -64316,9 +66993,14 @@ function initBase(gd, pa, sa, calcTraces) { // time. But included here for completeness. var scalendar = trace.orientation === 'h' ? trace.xcalendar : trace.ycalendar; + // 'base' on categorical axes makes no sense + var d2c = sa.type === 'category' || sa.type === 'multicategory' ? + function() { return null; } : + sa.d2c; + if(isArrayOrTypedArray(base)) { for(j = 0; j < Math.min(base.length, cd.length); j++) { - b = sa.d2c(base[j], 0, scalendar); + b = d2c(base[j], 0, scalendar); if(isNumeric(b)) { cd[j].b = +b; cd[j].hasB = 1; @@ -64329,7 +67011,7 @@ function initBase(gd, pa, sa, calcTraces) { cd[j].b = 0; } } else { - b = sa.d2c(base, 0, scalendar); + b = d2c(base, 0, scalendar); var hasBase = isNumeric(b); b = hasBase ? b : 0; for(j = 0; j < cd.length; j++) { @@ -64340,19 +67022,15 @@ function initBase(gd, pa, sa, calcTraces) { } } - function setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces) { - var barnorm = gd._fullLayout.barnorm, - separateNegativeValues = false, - dontMergeOverlappingData = !barnorm; + var barnorm = gd._fullLayout.barnorm; + var separateNegativeValues = false; + var dontMergeOverlappingData = !barnorm; // update position axis and set bar offsets and widths for(var i = 0; i < calcTraces.length; i++) { var calcTrace = calcTraces[i]; - - var sieve = new Sieve( - [calcTrace], separateNegativeValues, dontMergeOverlappingData - ); + var sieve = new Sieve([calcTrace], separateNegativeValues, dontMergeOverlappingData); // set bar offsets and widths, and update position axis setOffsetAndWidth(gd, pa, sieve); @@ -64365,22 +67043,18 @@ function setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces) { if(barnorm) { sieveBars(gd, sa, sieve); normalizeBars(gd, sa, sieve); - } - else { + } else { setBaseAndTop(gd, sa, sieve); } } } - function setGroupPositionsInGroupMode(gd, pa, sa, calcTraces) { - var fullLayout = gd._fullLayout, - barnorm = fullLayout.barnorm, - separateNegativeValues = false, - dontMergeOverlappingData = !barnorm, - sieve = new Sieve( - calcTraces, separateNegativeValues, dontMergeOverlappingData - ); + var fullLayout = gd._fullLayout; + var barnorm = fullLayout.barnorm; + var separateNegativeValues = false; + var dontMergeOverlappingData = !barnorm; + var sieve = new Sieve(calcTraces, separateNegativeValues, dontMergeOverlappingData); // set bar offsets and widths, and update position axis setOffsetAndWidthInGroupMode(gd, pa, sieve); @@ -64389,24 +67063,20 @@ function setGroupPositionsInGroupMode(gd, pa, sa, calcTraces) { if(barnorm) { sieveBars(gd, sa, sieve); normalizeBars(gd, sa, sieve); - } - else { + } else { setBaseAndTop(gd, sa, sieve); } } - function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) { - var fullLayout = gd._fullLayout, - barmode = fullLayout.barmode, - stack = (barmode === 'stack'), - relative = (barmode === 'relative'), - barnorm = gd._fullLayout.barnorm, - separateNegativeValues = relative, - dontMergeOverlappingData = !(barnorm || stack || relative), - sieve = new Sieve( - calcTraces, separateNegativeValues, dontMergeOverlappingData - ); + var fullLayout = gd._fullLayout; + var barmode = fullLayout.barmode; + var stack = barmode === 'stack'; + var relative = barmode === 'relative'; + var barnorm = fullLayout.barnorm; + var separateNegativeValues = relative; + var dontMergeOverlappingData = !(barnorm || stack || relative); + var sieve = new Sieve(calcTraces, separateNegativeValues, dontMergeOverlappingData); // set bar offsets and widths, and update position axis setOffsetAndWidth(gd, pa, sieve); @@ -64421,10 +67091,10 @@ function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) { for(var j = 0; j < calcTrace.length; j++) { var bar = calcTrace[j]; - if(bar.s === BADNUM) continue; - - var isOutmostBar = ((bar.b + bar.s) === sieve.get(bar.p, bar.s)); - if(isOutmostBar) bar._outmost = true; + if(bar.s !== BADNUM) { + var isOutmostBar = ((bar.b + bar.s) === sieve.get(bar.p, bar.s)); + if(isOutmostBar) bar._outmost = true; + } } } @@ -64433,30 +67103,26 @@ function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) { if(barnorm) normalizeBars(gd, sa, sieve); } - function setOffsetAndWidth(gd, pa, sieve) { - var fullLayout = gd._fullLayout, - bargap = fullLayout.bargap, - bargroupgap = fullLayout.bargroupgap || 0, - minDiff = sieve.minDiff, - calcTraces = sieve.traces, - i, calcTrace, calcTrace0, - t; + var fullLayout = gd._fullLayout; + var bargap = fullLayout.bargap; + var bargroupgap = fullLayout.bargroupgap || 0; + var minDiff = sieve.minDiff; + var calcTraces = sieve.traces; // set bar offsets and widths - var barGroupWidth = minDiff * (1 - bargap), - barWidthPlusGap = barGroupWidth, - barWidth = barWidthPlusGap * (1 - bargroupgap); + var barGroupWidth = minDiff * (1 - bargap); + var barWidthPlusGap = barGroupWidth; + var barWidth = barWidthPlusGap * (1 - bargroupgap); // computer bar group center and bar offset var offsetFromCenter = -barWidth / 2; - for(i = 0; i < calcTraces.length; i++) { - calcTrace = calcTraces[i]; - calcTrace0 = calcTrace[0]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; + var t = calcTrace[0].t; // store bar width and offset for this trace - t = calcTrace0.t; t.barwidth = barWidth; t.poffset = offsetFromCenter; t.bargroupwidth = barGroupWidth; @@ -64476,38 +67142,34 @@ function setOffsetAndWidth(gd, pa, sieve) { updatePositionAxis(gd, pa, sieve); } - function setOffsetAndWidthInGroupMode(gd, pa, sieve) { - var fullLayout = gd._fullLayout, - bargap = fullLayout.bargap, - bargroupgap = fullLayout.bargroupgap || 0, - positions = sieve.positions, - distinctPositions = sieve.distinctPositions, - minDiff = sieve.minDiff, - calcTraces = sieve.traces, - i, calcTrace, calcTrace0, - t; + var fullLayout = gd._fullLayout; + var bargap = fullLayout.bargap; + var bargroupgap = fullLayout.bargroupgap || 0; + var positions = sieve.positions; + var distinctPositions = sieve.distinctPositions; + var minDiff = sieve.minDiff; + var calcTraces = sieve.traces; // if there aren't any overlapping positions, // let them have full width even if mode is group var overlap = (positions.length !== distinctPositions.length); - var nTraces = calcTraces.length, - barGroupWidth = minDiff * (1 - bargap), - barWidthPlusGap = (overlap) ? barGroupWidth / nTraces : barGroupWidth, - barWidth = barWidthPlusGap * (1 - bargroupgap); + var nTraces = calcTraces.length; + var barGroupWidth = minDiff * (1 - bargap); + var barWidthPlusGap = (overlap) ? barGroupWidth / nTraces : barGroupWidth; + var barWidth = barWidthPlusGap * (1 - bargroupgap); - for(i = 0; i < nTraces; i++) { - calcTrace = calcTraces[i]; - calcTrace0 = calcTrace[0]; + for(var i = 0; i < nTraces; i++) { + var calcTrace = calcTraces[i]; + var t = calcTrace[0].t; // computer bar group center and bar offset - var offsetFromCenter = (overlap) ? - ((2 * i + 1 - nTraces) * barWidthPlusGap - barWidth) / 2 : - -barWidth / 2; + var offsetFromCenter = overlap ? + ((2 * i + 1 - nTraces) * barWidthPlusGap - barWidth) / 2 : + -barWidth / 2; // store bar width and offset for this trace - t = calcTrace0.t; t.barwidth = barWidth; t.poffset = offsetFromCenter; t.bargroupwidth = barGroupWidth; @@ -64527,26 +67189,22 @@ function setOffsetAndWidthInGroupMode(gd, pa, sieve) { updatePositionAxis(gd, pa, sieve, overlap); } - function applyAttributes(sieve) { - var calcTraces = sieve.traces, - i, calcTrace, calcTrace0, fullTrace, - j, - t; + var calcTraces = sieve.traces; + var i, j; for(i = 0; i < calcTraces.length; i++) { - calcTrace = calcTraces[i]; - calcTrace0 = calcTrace[0]; - fullTrace = calcTrace0.trace; - t = calcTrace0.t; - - var offset = fullTrace._offset || fullTrace.offset, - initialPoffset = t.poffset, - newPoffset; + var calcTrace = calcTraces[i]; + var calcTrace0 = calcTrace[0]; + var fullTrace = calcTrace0.trace; + var t = calcTrace0.t; + var offset = fullTrace._offset || fullTrace.offset; + var initialPoffset = t.poffset; + var newPoffset; if(isArrayOrTypedArray(offset)) { // if offset is an array, then clone it into t.poffset. - newPoffset = offset.slice(0, calcTrace.length); + newPoffset = Array.prototype.slice.call(offset, 0, calcTrace.length); // guard against non-numeric items for(j = 0; j < newPoffset.length; j++) { @@ -64562,17 +67220,16 @@ function applyAttributes(sieve) { } t.poffset = newPoffset; - } - else if(offset !== undefined) { + } else if(offset !== undefined) { t.poffset = offset; } - var width = fullTrace._width || fullTrace.width, - initialBarwidth = t.barwidth; + var width = fullTrace._width || fullTrace.width; + var initialBarwidth = t.barwidth; if(isArrayOrTypedArray(width)) { // if width is an array, then clone it into t.barwidth. - var newBarwidth = width.slice(0, calcTrace.length); + var newBarwidth = Array.prototype.slice.call(width, 0, calcTrace.length); // guard against non-numeric items for(j = 0; j < newBarwidth.length; j++) { @@ -64598,8 +67255,7 @@ function applyAttributes(sieve) { } t.poffset = newPoffset; } - } - else if(width !== undefined) { + } else if(width !== undefined) { t.barwidth = width; // if user didn't set offset, @@ -64611,234 +67267,217 @@ function applyAttributes(sieve) { } } - function setBarCenterAndWidth(gd, pa, sieve) { - var calcTraces = sieve.traces, - pLetter = getAxisLetter(pa); + var calcTraces = sieve.traces; + var pLetter = getAxisLetter(pa); for(var i = 0; i < calcTraces.length; i++) { - var calcTrace = calcTraces[i], - t = calcTrace[0].t, - poffset = t.poffset, - poffsetIsArray = Array.isArray(poffset), - barwidth = t.barwidth, - barwidthIsArray = Array.isArray(barwidth); + var calcTrace = calcTraces[i]; + var t = calcTrace[0].t; + var poffset = t.poffset; + var poffsetIsArray = Array.isArray(poffset); + var barwidth = t.barwidth; + var barwidthIsArray = Array.isArray(barwidth); for(var j = 0; j < calcTrace.length; j++) { var calcBar = calcTrace[j]; // store the actual bar width and position, for use by hover - var width = calcBar.w = (barwidthIsArray) ? barwidth[j] : barwidth; - calcBar[pLetter] = calcBar.p + - ((poffsetIsArray) ? poffset[j] : poffset) + - width / 2; - - + var width = calcBar.w = barwidthIsArray ? barwidth[j] : barwidth; + calcBar[pLetter] = calcBar.p + (poffsetIsArray ? poffset[j] : poffset) + width / 2; } } } - function updatePositionAxis(gd, pa, sieve, allowMinDtick) { - var calcTraces = sieve.traces, - distinctPositions = sieve.distinctPositions, - distinctPositions0 = distinctPositions[0], - minDiff = sieve.minDiff, - vpad = minDiff / 2; + var calcTraces = sieve.traces; + var minDiff = sieve.minDiff; + var vpad = minDiff / 2; - Axes.minDtick(pa, minDiff, distinctPositions0, allowMinDtick); - - // If the user set the bar width or the offset, - // then bars can be shifted away from their positions - // and widths can be larger than minDiff. - // - // Here, we compute pMin and pMax to expand the position axis, - // so that all bars are fully within the axis range. - var pMin = Math.min.apply(Math, distinctPositions) - vpad, - pMax = Math.max.apply(Math, distinctPositions) + vpad; + Axes.minDtick(pa, sieve.minDiff, sieve.distinctPositions[0], allowMinDtick); for(var i = 0; i < calcTraces.length; i++) { - var calcTrace = calcTraces[i], - calcTrace0 = calcTrace[0], - fullTrace = calcTrace0.trace; + var calcTrace = calcTraces[i]; + var calcTrace0 = calcTrace[0]; + var fullTrace = calcTrace0.trace; + var pts = []; + var bar, l, r, j; - if(fullTrace.width === undefined && fullTrace.offset === undefined) { - continue; + for(j = 0; j < calcTrace.length; j++) { + bar = calcTrace[j]; + l = bar.p - vpad; + r = bar.p + vpad; + pts.push(l, r); } - var t = calcTrace0.t, - poffset = t.poffset, - barwidth = t.barwidth, - poffsetIsArray = Array.isArray(poffset), - barwidthIsArray = Array.isArray(barwidth); + if(fullTrace.width || fullTrace.offset) { + var t = calcTrace0.t; + var poffset = t.poffset; + var barwidth = t.barwidth; + var poffsetIsArray = Array.isArray(poffset); + var barwidthIsArray = Array.isArray(barwidth); - for(var j = 0; j < calcTrace.length; j++) { - var calcBar = calcTrace[j], - calcBarOffset = (poffsetIsArray) ? poffset[j] : poffset, - calcBarWidth = (barwidthIsArray) ? barwidth[j] : barwidth, - p = calcBar.p, - l = p + calcBarOffset, + for(j = 0; j < calcTrace.length; j++) { + bar = calcTrace[j]; + var calcBarOffset = poffsetIsArray ? poffset[j] : poffset; + var calcBarWidth = barwidthIsArray ? barwidth[j] : barwidth; + l = bar.p + calcBarOffset; r = l + calcBarWidth; - - pMin = Math.min(pMin, l); - pMax = Math.max(pMax, r); - } - } - - var extremes = Axes.findExtremes(pa, [pMin, pMax], {padded: false}); - putExtremes(calcTraces, pa, extremes); -} - -function expandRange(range, newValue) { - if(isNumeric(range[0])) range[0] = Math.min(range[0], newValue); - else range[0] = newValue; - - if(isNumeric(range[1])) range[1] = Math.max(range[1], newValue); - else range[1] = newValue; -} - -function setBaseAndTop(gd, sa, sieve) { - // store these bar bases and tops in calcdata - // and make sure the size axis includes zero, - // along with the bases and tops of each bar. - var traces = sieve.traces, - sLetter = getAxisLetter(sa), - sRange = [null, null]; - - for(var i = 0; i < traces.length; i++) { - var trace = traces[i]; - - for(var j = 0; j < trace.length; j++) { - var bar = trace[j], - barBase = bar.b, - barTop = barBase + bar.s; - - bar[sLetter] = barTop; - - if(isNumeric(sa.c2l(barTop))) expandRange(sRange, barTop); - if(bar.hasB && isNumeric(sa.c2l(barBase))) expandRange(sRange, barBase); - } - } - - var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: true}); - putExtremes(traces, sa, extremes); -} - - -function stackBars(gd, sa, sieve) { - var fullLayout = gd._fullLayout, - barnorm = fullLayout.barnorm, - sLetter = getAxisLetter(sa), - traces = sieve.traces, - i, trace, - j, bar; - - var sRange = [null, null]; - - for(i = 0; i < traces.length; i++) { - trace = traces[i]; - - for(j = 0; j < trace.length; j++) { - bar = trace[j]; - - if(bar.s === BADNUM) continue; - - // stack current bar and get previous sum - var barBase = sieve.put(bar.p, bar.b + bar.s), - barTop = barBase + bar.b + bar.s; - - // store the bar base and top in each calcdata item - bar.b = barBase; - bar[sLetter] = barTop; - - if(!barnorm) { - if(isNumeric(sa.c2l(barTop))) expandRange(sRange, barTop); - if(bar.hasB && isNumeric(sa.c2l(barBase))) expandRange(sRange, barBase); + pts.push(l, r); } } - } - // if barnorm is set, let normalizeBars update the axis range - if(!barnorm) { - var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: true}); - putExtremes(traces, sa, extremes); + fullTrace._extremes[pa._id] = Axes.findExtremes(pa, pts, {padded: false}); } } +// store these bar bases and tops in calcdata +// and make sure the size axis includes zero, +// along with the bases and tops of each bar. +function setBaseAndTop(gd, sa, sieve) { + var calcTraces = sieve.traces; + var sLetter = getAxisLetter(sa); + + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; + var fullTrace = calcTrace[0].trace; + var pts = []; + var allBarBaseAboveZero = true; + + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; + var barBase = bar.b; + var barTop = barBase + bar.s; + + bar[sLetter] = barTop; + pts.push(barTop); + if(bar.hasB) pts.push(barBase); + + if(!bar.hasB || !(bar.b > 0 && bar.s > 0)) { + allBarBaseAboveZero = false; + } + } + + fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { + tozero: !allBarBaseAboveZero, + padded: true + }); + } +} + +function stackBars(gd, sa, sieve) { + var fullLayout = gd._fullLayout; + var barnorm = fullLayout.barnorm; + var sLetter = getAxisLetter(sa); + var calcTraces = sieve.traces; + + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; + var fullTrace = calcTrace[0].trace; + var pts = []; + + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; + + if(bar.s !== BADNUM) { + // stack current bar and get previous sum + var barBase = sieve.put(bar.p, bar.b + bar.s); + var barTop = barBase + bar.b + bar.s; + + // store the bar base and top in each calcdata item + bar.b = barBase; + bar[sLetter] = barTop; + + if(!barnorm) { + pts.push(barTop); + if(bar.hasB) pts.push(barBase); + } + } + } + + // if barnorm is set, let normalizeBars update the axis range + if(!barnorm) { + fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { + // N.B. we don't stack base with 'base', + // so set tozero:true always! + tozero: true, + padded: true + }); + } + } +} function sieveBars(gd, sa, sieve) { - var traces = sieve.traces; + var calcTraces = sieve.traces; - for(var i = 0; i < traces.length; i++) { - var trace = traces[i]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; - for(var j = 0; j < trace.length; j++) { - var bar = trace[j]; + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; if(bar.s !== BADNUM) sieve.put(bar.p, bar.b + bar.s); } } } - +// Note: +// +// normalizeBars requires that either sieveBars or stackBars has been +// previously invoked. function normalizeBars(gd, sa, sieve) { - // Note: - // - // normalizeBars requires that either sieveBars or stackBars has been - // previously invoked. + var fullLayout = gd._fullLayout; + var calcTraces = sieve.traces; + var sLetter = getAxisLetter(sa); + var sTop = fullLayout.barnorm === 'fraction' ? 1 : 100; + var sTiny = sTop / 1e9; // in case of rounding error in sum + var sMin = sa.l2c(sa.c2l(0)); + var sMax = fullLayout.barmode === 'stack' ? sTop : sMin; - var traces = sieve.traces, - sLetter = getAxisLetter(sa), - sTop = (gd._fullLayout.barnorm === 'fraction') ? 1 : 100, - sTiny = sTop / 1e9, // in case of rounding error in sum - sMin = sa.l2c(sa.c2l(0)), - sMax = (gd._fullLayout.barmode === 'stack') ? sTop : sMin, - sRange = [sMin, sMax], - padded = false; - - function maybeExpand(newValue) { - if(isNumeric(sa.c2l(newValue)) && - ((newValue < sMin - sTiny) || (newValue > sMax + sTiny) || !isNumeric(sMin)) - ) { - padded = true; - expandRange(sRange, newValue); - } + function needsPadding(v) { + return ( + isNumeric(sa.c2l(v)) && + ((v < sMin - sTiny) || (v > sMax + sTiny) || !isNumeric(sMin)) + ); } - for(var i = 0; i < traces.length; i++) { - var trace = traces[i]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; + var fullTrace = calcTrace[0].trace; + var pts = []; + var allBarBaseAboveZero = true; + var padded = false; - for(var j = 0; j < trace.length; j++) { - var bar = trace[j]; + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; - if(bar.s === BADNUM) continue; + if(bar.s !== BADNUM) { + var scale = Math.abs(sTop / sieve.get(bar.p, bar.s)); + bar.b *= scale; + bar.s *= scale; - var scale = Math.abs(sTop / sieve.get(bar.p, bar.s)); - bar.b *= scale; - bar.s *= scale; + var barBase = bar.b; + var barTop = barBase + bar.s; - var barBase = bar.b, - barTop = barBase + bar.s; - bar[sLetter] = barTop; + bar[sLetter] = barTop; + pts.push(barTop); + padded = padded || needsPadding(barTop); - maybeExpand(barTop); - if(bar.hasB) maybeExpand(barBase); + if(bar.hasB) { + pts.push(barBase); + padded = padded || needsPadding(barBase); + } + + if(!bar.hasB || !(bar.b > 0 && bar.s > 0)) { + allBarBaseAboveZero = false; + } + } } - } - // update range of size axis - var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: padded}); - putExtremes(traces, sa, extremes); -} - - -function getAxisLetter(ax) { - return ax._id.charAt(0); -} - -function putExtremes(cd, ax, extremes) { - for(var i = 0; i < cd.length; i++) { - cd[i][0].trace._extremes[ax._id] = extremes; + fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { + tozero: !allBarBaseAboveZero, + padded: padded + }); } } @@ -64848,12 +67487,13 @@ function putExtremes(cd, ax, extremes) { // run once per trace group (subplot & direction) and // the same mapping is attached to all calcdata traces function collectExtents(calcTraces, pa) { - var posLetter = pa._id.charAt(0); + var pLetter = getAxisLetter(pa); var extents = {}; + var i, j, cd; + var pMin = Infinity; var pMax = -Infinity; - var i, j, cd; for(i = 0; i < calcTraces.length; i++) { cd = calcTraces[i]; for(j = 0; j < cd.length; j++) { @@ -64873,20 +67513,19 @@ function collectExtents(calcTraces, pa) { return String(Math.round(roundFactor * (p - pMin))); }; - var poffset, poffsetIsArray; - for(i = 0; i < calcTraces.length; i++) { cd = calcTraces[i]; cd[0].t.extents = extents; - poffset = cd[0].t.poffset; - poffsetIsArray = Array.isArray(poffset); + + var poffset = cd[0].t.poffset; + var poffsetIsArray = Array.isArray(poffset); for(j = 0; j < cd.length; j++) { var di = cd[j]; - var p0 = di[posLetter] - di.w / 2; + var p0 = di[pLetter] - di.w / 2; if(isNumeric(p0)) { - var p1 = di[posLetter] + di.w / 2; + var p1 = di[pLetter] + di.w / 2; var pVal = round(di.p); if(extents[pVal]) { extents[pVal] = [Math.min(p0, extents[pVal][0]), Math.max(p1, extents[pVal][1])]; @@ -64895,7 +67534,7 @@ function collectExtents(calcTraces, pa) { } } - di.p0 = di.p + ((poffsetIsArray) ? poffset[j] : poffset); + di.p0 = di.p + (poffsetIsArray ? poffset[j] : poffset); di.p1 = di.p0 + di.w; di.s0 = di.b; di.s1 = di.s0 + di.s; @@ -64903,14 +67542,18 @@ function collectExtents(calcTraces, pa) { } } +function getAxisLetter(ax) { + return ax._id.charAt(0); +} + module.exports = { crossTraceCalc: crossTraceCalc, setGroupPositions: setGroupPositions }; -},{"../../constants/numerical":151,"../../lib":169,"../../plots/cartesian/axes":214,"../../registry":259,"./sieve.js":279,"fast-isnumeric":18}],272:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"../../plots/cartesian/axes":212,"../../registry":257,"./sieve.js":279,"fast-isnumeric":18}],271:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -64948,17 +67591,31 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('text'); coerce('hovertext'); + coerce('hovertemplate'); var textPosition = coerce('textposition'); - var hasBoth = Array.isArray(textPosition) || textPosition === 'auto', - hasInside = hasBoth || textPosition === 'inside', - hasOutside = hasBoth || textPosition === 'outside'; + var hasBoth = Array.isArray(textPosition) || textPosition === 'auto'; + var hasInside = hasBoth || textPosition === 'inside'; + var hasOutside = hasBoth || textPosition === 'outside'; if(hasInside || hasOutside) { var textFont = coerceFont(coerce, 'textfont', layout.font); - if(hasInside) coerceFont(coerce, 'insidetextfont', textFont); + + // Note that coercing `insidetextfont` is always needed – + // even if `textposition` is `outside` for each trace – since + // an outside label can become an inside one, for example because + // of a bar being stacked on top of it. + var insideTextFontDefault = Lib.extendFlat({}, textFont); + var isTraceTextfontColorSet = traceIn.textfont && traceIn.textfont.color; + var isColorInheritedFromLayoutFont = !isTraceTextfontColorSet; + if(isColorInheritedFromLayoutFont) { + delete insideTextFontDefault.color; + } + coerceFont(coerce, 'insidetextfont', insideTextFontDefault); + if(hasOutside) coerceFont(coerce, 'outsidetextfont', textFont); + coerce('constraintext'); coerce('selected.textfont.color'); coerce('unselected.textfont.color'); @@ -64967,17 +67624,87 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout handleStyleDefaults(traceIn, traceOut, coerce, defaultColor, layout); + var lineColor = (traceOut.marker.line || {}).color; + // override defaultColor for error bars with defaultLine var errorBarsSupplyDefaults = Registry.getComponentMethod('errorbars', 'supplyDefaults'); - errorBarsSupplyDefaults(traceIn, traceOut, Color.defaultLine, {axis: 'y'}); - errorBarsSupplyDefaults(traceIn, traceOut, Color.defaultLine, {axis: 'x', inherit: 'y'}); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'y'}); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'}); Lib.coerceSelectionMarkerOpacity(traceOut, coerce); }; -},{"../../components/color":50,"../../lib":169,"../../registry":259,"../bar/style_defaults":281,"../scatter/xy_defaults":392,"./attributes":269}],273:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../../registry":257,"../bar/style_defaults":281,"../scatter/xy_defaults":393,"./attributes":267}],272:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); +var tinycolor = _dereq_('tinycolor2'); + +exports.coerceString = function(attributeDefinition, value, defaultValue) { + if(typeof value === 'string') { + if(value || !attributeDefinition.noBlank) return value; + } else if(typeof value === 'number') { + if(!attributeDefinition.strict) return String(value); + } + + return (defaultValue !== undefined) ? + defaultValue : + attributeDefinition.dflt; +}; + +exports.coerceNumber = function(attributeDefinition, value, defaultValue) { + if(isNumeric(value)) { + value = +value; + + var min = attributeDefinition.min; + var max = attributeDefinition.max; + var isOutOfBounds = (min !== undefined && value < min) || + (max !== undefined && value > max); + + if(!isOutOfBounds) return value; + } + + return (defaultValue !== undefined) ? + defaultValue : + attributeDefinition.dflt; +}; + +exports.coerceColor = function(attributeDefinition, value, defaultValue) { + if(tinycolor(value).isValid()) return value; + + return (defaultValue !== undefined) ? + defaultValue : + attributeDefinition.dflt; +}; + +exports.coerceEnumerated = function(attributeDefinition, value, defaultValue) { + if(attributeDefinition.coerceNumber) value = +value; + + if(attributeDefinition.values.indexOf(value) !== -1) return value; + + return (defaultValue !== undefined) ? + defaultValue : + attributeDefinition.dflt; +}; + +exports.getValue = function(arrayOrScalar, index) { + var value; + if(!Array.isArray(arrayOrScalar)) value = arrayOrScalar; + else if(index < arrayOrScalar.length) value = arrayOrScalar[index]; + return value; +}; + +},{"fast-isnumeric":18,"tinycolor2":34}],273:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65115,6 +67842,7 @@ function hoverPoints(pointData, xval, yval, hovermode) { fillHoverText(di, trace, pointData); Registry.getComponentMethod('errorbars', 'hoverInfo')(di, trace, pointData); + pointData.hovertemplate = trace.hovertemplate; return [pointData]; } @@ -65132,9 +67860,9 @@ module.exports = { getTraceColor: getTraceColor }; -},{"../../components/color":50,"../../components/fx":92,"../../registry":259,"../scatter/fill_hover_text":374}],274:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":90,"../../registry":257,"../scatter/fill_hover_text":375}],274:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65170,9 +67898,9 @@ Bar.meta = { module.exports = Bar; -},{"../../plots/cartesian":225,"../scatter/marker_colorbar":384,"./arrays_to_calcdata":268,"./attributes":269,"./calc":270,"./cross_trace_calc":271,"./defaults":272,"./hover":273,"./layout_attributes":275,"./layout_defaults":276,"./plot":277,"./select":278,"./style":280}],275:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../scatter/marker_colorbar":385,"./arrays_to_calcdata":266,"./attributes":267,"./calc":268,"./cross_trace_calc":270,"./defaults":271,"./hover":273,"./layout_attributes":275,"./layout_defaults":276,"./plot":277,"./select":278,"./style":280}],275:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65220,7 +67948,7 @@ module.exports = { },{}],276:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65242,14 +67970,14 @@ module.exports = function(layoutIn, layoutOut, fullData) { return Lib.coerce(layoutIn, layoutOut, layoutAttributes, attr, dflt); } - var hasBars = false, - shouldBeGapless = false, - gappedAnyway = false, - usedSubplots = {}; + var hasBars = false; + var shouldBeGapless = false; + var gappedAnyway = false; + var usedSubplots = {}; for(var i = 0; i < fullData.length; i++) { var trace = fullData[i]; - if(Registry.traceIs(trace, 'bar')) hasBars = true; + if(Registry.traceIs(trace, 'bar') && trace.visible) hasBars = true; else continue; // if we have at least 2 grouped bar traces on the same subplot, @@ -65276,9 +68004,9 @@ module.exports = function(layoutIn, layoutOut, fullData) { coerce('bargroupgap'); }; -},{"../../lib":169,"../../plots/cartesian/axes":214,"../../registry":259,"./layout_attributes":275}],277:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"../../registry":257,"./layout_attributes":275}],277:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65290,7 +68018,6 @@ module.exports = function(layoutIn, layoutOut, fullData) { var d3 = _dereq_('d3'); var isNumeric = _dereq_('fast-isnumeric'); -var tinycolor = _dereq_('tinycolor2'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); @@ -65299,12 +68026,11 @@ var Color = _dereq_('../../components/color'); var Drawing = _dereq_('../../components/drawing'); var Registry = _dereq_('../../registry'); -var attributes = _dereq_('./attributes'), - attributeText = attributes.text, - attributeTextPosition = attributes.textposition, - attributeTextFont = attributes.textfont, - attributeInsideTextFont = attributes.insidetextfont, - attributeOutsideTextFont = attributes.outsidetextfont; +var attributes = _dereq_('./attributes'); +var attributeText = attributes.text; +var attributeTextPosition = attributes.textposition; +var helpers = _dereq_('./helpers'); +var style = _dereq_('./style'); // padding in pixels around text var TEXTPAD = 3; @@ -65365,8 +68091,8 @@ module.exports = function plot(gd, plotinfo, cdbar, barLayer) { } var lw = (di.mlw + 1 || trace.marker.line.width + 1 || - (di.trace ? di.trace.marker.line.width : 0) + 1) - 1, - offset = d3.round((lw / 2) % 1, 2); + (di.trace ? di.trace.marker.line.width : 0) + 1) - 1; + var offset = d3.round((lw / 2) % 1, 2); function roundWithLine(v) { // if there are explicit gaps, don't round, @@ -65392,9 +68118,8 @@ module.exports = function plot(gd, plotinfo, cdbar, barLayer) { // pixelation. if the bars ARE fully opaque and have // no line, expand to a full pixel to make sure we // can see them - var op = Color.opacity(di.mc || trace.marker.color), - fixpx = (op < 1 || lw > 0.01) ? - roundWithLine : expandToVisible; + var op = Color.opacity(di.mc || trace.marker.color); + var fixpx = (op < 1 || lw > 0.01) ? roundWithLine : expandToVisible; x0 = fixpx(x0, x1); x1 = fixpx(x1, x0); y0 = fixpx(y0, y1); @@ -65405,7 +68130,7 @@ module.exports = function plot(gd, plotinfo, cdbar, barLayer) { .style('vector-effect', 'non-scaling-stroke') .attr('d', 'M' + x0 + ',' + y0 + 'V' + y1 + 'H' + x1 + 'V' + y0 + 'Z') - .call(Drawing.setClipUrl, plotinfo.layerClipId); + .call(Drawing.setClipUrl, plotinfo.layerClipId, gd); appendBarText(gd, bar, cd, i, x0, x1, y0, y1); @@ -65417,11 +68142,11 @@ module.exports = function plot(gd, plotinfo, cdbar, barLayer) { // lastly, clip points groups of `cliponaxis !== false` traces // on `plotinfo._hasClipOnAxisFalse === true` subplots var hasClipOnAxisFalse = cd0.trace.cliponaxis === false; - Drawing.setClipUrl(plotGroup, hasClipOnAxisFalse ? null : plotinfo.layerClipId); + Drawing.setClipUrl(plotGroup, hasClipOnAxisFalse ? null : plotinfo.layerClipId, gd); }); // error bars are on the top - Registry.getComponentMethod('errorbars', 'plot')(bartraces, plotinfo); + Registry.getComponentMethod('errorbars', 'plot')(gd, bartraces, plotinfo); }; function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) { @@ -65445,8 +68170,8 @@ function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) { } // get trace attributes - var trace = calcTrace[0].trace, - orientation = trace.orientation; + var trace = calcTrace[0].trace; + var orientation = trace.orientation; var text = getText(trace, i); textPosition = getTextPosition(trace, i); @@ -65456,29 +68181,30 @@ function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) { return; } - var textFont = getTextFont(trace, i, gd._fullLayout.font), - insideTextFont = getInsideTextFont(trace, i, textFont), - outsideTextFont = getOutsideTextFont(trace, i, textFont); + var layoutFont = gd._fullLayout.font; + var barColor = style.getBarColor(calcTrace[i], trace); + var insideTextFont = style.getInsideTextFont(trace, i, layoutFont, barColor); + var outsideTextFont = style.getOutsideTextFont(trace, i, layoutFont); // compute text position - var barmode = gd._fullLayout.barmode, - inStackMode = (barmode === 'stack'), - inRelativeMode = (barmode === 'relative'), - inStackOrRelativeMode = inStackMode || inRelativeMode, + var barmode = gd._fullLayout.barmode; + var inStackMode = (barmode === 'stack'); + var inRelativeMode = (barmode === 'relative'); + var inStackOrRelativeMode = inStackMode || inRelativeMode; - calcBar = calcTrace[i], - isOutmostBar = !inStackOrRelativeMode || calcBar._outmost, + var calcBar = calcTrace[i]; + var isOutmostBar = !inStackOrRelativeMode || calcBar._outmost; - barWidth = Math.abs(x1 - x0) - 2 * TEXTPAD, // padding excluded - barHeight = Math.abs(y1 - y0) - 2 * TEXTPAD, // padding excluded + var barWidth = Math.abs(x1 - x0) - 2 * TEXTPAD; // padding excluded + var barHeight = Math.abs(y1 - y0) - 2 * TEXTPAD; // padding excluded - textSelection, - textBB, - textWidth, - textHeight; + var textSelection; + var textBB; + var textWidth; + var textHeight; if(textPosition === 'outside') { - if(!isOutmostBar) textPosition = 'inside'; + if(!isOutmostBar && !calcBar.hasB) textPosition = 'inside'; } if(textPosition === 'auto') { @@ -65491,14 +68217,13 @@ function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) { textWidth = textBB.width, textHeight = textBB.height; - var textHasSize = (textWidth > 0 && textHeight > 0), - fitsInside = - (textWidth <= barWidth && textHeight <= barHeight), - fitsInsideIfRotated = - (textWidth <= barHeight && textHeight <= barWidth), - fitsInsideIfShrunk = (orientation === 'h') ? - (barWidth >= textWidth * (barHeight / textHeight)) : - (barHeight >= textHeight * (barWidth / textWidth)); + var textHasSize = (textWidth > 0 && textHeight > 0); + var fitsInside = (textWidth <= barWidth && textHeight <= barHeight); + var fitsInsideIfRotated = (textWidth <= barHeight && textHeight <= barWidth); + var fitsInsideIfShrunk = (orientation === 'h') ? + (barWidth >= textWidth * (barHeight / textHeight)) : + (barHeight >= textHeight * (barWidth / textWidth)); + if(textHasSize && (fitsInside || fitsInsideIfRotated || fitsInsideIfShrunk)) { textPosition = 'inside'; @@ -65545,16 +68270,16 @@ function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) { function getTransformToMoveInsideBar(x0, x1, y0, y1, textBB, orientation, constrained) { // compute text and target positions - var textWidth = textBB.width, - textHeight = textBB.height, - textX = (textBB.left + textBB.right) / 2, - textY = (textBB.top + textBB.bottom) / 2, - barWidth = Math.abs(x1 - x0), - barHeight = Math.abs(y1 - y0), - targetWidth, - targetHeight, - targetX, - targetY; + var textWidth = textBB.width; + var textHeight = textBB.height; + var textX = (textBB.left + textBB.right) / 2; + var textY = (textBB.top + textBB.bottom) / 2; + var barWidth = Math.abs(x1 - x0); + var barHeight = Math.abs(y1 - y0); + var targetWidth; + var targetHeight; + var targetX; + var targetY; // apply text padding var textpad; @@ -65630,9 +68355,9 @@ function getTransformToMoveInsideBar(x0, x1, y0, y1, textBB, orientation, constr function getTransformToMoveOutsideBar(x0, x1, y0, y1, textBB, orientation, constrained) { var barWidth = (orientation === 'h') ? - Math.abs(y1 - y0) : - Math.abs(x1 - x0), - textpad; + Math.abs(y1 - y0) : + Math.abs(x1 - x0); + var textpad; // Keep the padding so the text doesn't sit right against // the bars, but don't factor it into barWidth @@ -65649,12 +68374,12 @@ function getTransformToMoveOutsideBar(x0, x1, y0, y1, textBB, orientation, const } // compute text and target positions - var textX = (textBB.left + textBB.right) / 2, - textY = (textBB.top + textBB.bottom) / 2, - targetWidth, - targetHeight, - targetX, - targetY; + var textX = (textBB.left + textBB.right) / 2; + var textY = (textBB.top + textBB.bottom) / 2; + var targetWidth; + var targetHeight; + var targetX; + var targetY; targetWidth = scale * textBB.width; targetHeight = scale * textBB.height; @@ -65686,9 +68411,9 @@ function getTransformToMoveOutsideBar(x0, x1, y0, y1, textBB, orientation, const } function getTransform(textX, textY, targetX, targetY, scale, rotate) { - var transformScale, - transformRotate, - transformTranslate; + var transformScale; + var transformRotate; + var transformTranslate; if(scale < 1) transformScale = 'scale(' + scale + ') '; else { @@ -65700,113 +68425,26 @@ function getTransform(textX, textY, targetX, targetY, scale, rotate) { 'rotate(' + rotate + ' ' + textX + ' ' + textY + ') ' : ''; // Note that scaling also affects the center of the text box - var translateX = (targetX - scale * textX), - translateY = (targetY - scale * textY); + var translateX = (targetX - scale * textX); + var translateY = (targetY - scale * textY); transformTranslate = 'translate(' + translateX + ' ' + translateY + ')'; return transformTranslate + transformScale + transformRotate; } function getText(trace, index) { - var value = getValue(trace.text, index); - return coerceString(attributeText, value); + var value = helpers.getValue(trace.text, index); + return helpers.coerceString(attributeText, value); } function getTextPosition(trace, index) { - var value = getValue(trace.textposition, index); - return coerceEnumerated(attributeTextPosition, value); + var value = helpers.getValue(trace.textposition, index); + return helpers.coerceEnumerated(attributeTextPosition, value); } -function getTextFont(trace, index, defaultValue) { - return getFontValue( - attributeTextFont, trace.textfont, index, defaultValue); -} - -function getInsideTextFont(trace, index, defaultValue) { - return getFontValue( - attributeInsideTextFont, trace.insidetextfont, index, defaultValue); -} - -function getOutsideTextFont(trace, index, defaultValue) { - return getFontValue( - attributeOutsideTextFont, trace.outsidetextfont, index, defaultValue); -} - -function getFontValue(attributeDefinition, attributeValue, index, defaultValue) { - attributeValue = attributeValue || {}; - - var familyValue = getValue(attributeValue.family, index), - sizeValue = getValue(attributeValue.size, index), - colorValue = getValue(attributeValue.color, index); - - return { - family: coerceString( - attributeDefinition.family, familyValue, defaultValue.family), - size: coerceNumber( - attributeDefinition.size, sizeValue, defaultValue.size), - color: coerceColor( - attributeDefinition.color, colorValue, defaultValue.color) - }; -} - -function getValue(arrayOrScalar, index) { - var value; - if(!Array.isArray(arrayOrScalar)) value = arrayOrScalar; - else if(index < arrayOrScalar.length) value = arrayOrScalar[index]; - return value; -} - -function coerceString(attributeDefinition, value, defaultValue) { - if(typeof value === 'string') { - if(value || !attributeDefinition.noBlank) return value; - } - else if(typeof value === 'number') { - if(!attributeDefinition.strict) return String(value); - } - - return (defaultValue !== undefined) ? - defaultValue : - attributeDefinition.dflt; -} - -function coerceEnumerated(attributeDefinition, value, defaultValue) { - if(attributeDefinition.coerceNumber) value = +value; - - if(attributeDefinition.values.indexOf(value) !== -1) return value; - - return (defaultValue !== undefined) ? - defaultValue : - attributeDefinition.dflt; -} - -function coerceNumber(attributeDefinition, value, defaultValue) { - if(isNumeric(value)) { - value = +value; - - var min = attributeDefinition.min, - max = attributeDefinition.max, - isOutOfBounds = (min !== undefined && value < min) || - (max !== undefined && value > max); - - if(!isOutOfBounds) return value; - } - - return (defaultValue !== undefined) ? - defaultValue : - attributeDefinition.dflt; -} - -function coerceColor(attributeDefinition, value, defaultValue) { - if(tinycolor(value).isValid()) return value; - - return (defaultValue !== undefined) ? - defaultValue : - attributeDefinition.dflt; -} - -},{"../../components/color":50,"../../components/drawing":75,"../../lib":169,"../../lib/svg_text_utils":191,"../../registry":259,"./attributes":269,"d3":16,"fast-isnumeric":18,"tinycolor2":33}],278:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../lib":168,"../../lib/svg_text_utils":189,"../../registry":257,"./attributes":267,"./helpers":272,"./style":280,"d3":16,"fast-isnumeric":18}],278:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65849,7 +68487,7 @@ module.exports = function selectPoints(searchInfo, selectionTester) { },{}],279:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65915,8 +68553,8 @@ function Sieve(traces, separateNegativeValues, dontMergeOverlappingData) { * @returns {number} Previous bin value */ Sieve.prototype.put = function put(position, value) { - var label = this.getLabel(position, value), - oldValue = this.bins[label] || 0; + var label = this.getLabel(position, value); + var oldValue = this.bins[label] || 0; this.bins[label] = oldValue + value; @@ -65949,16 +68587,16 @@ Sieve.prototype.get = function put(position, value) { * true; otherwise prefixed with '^') */ Sieve.prototype.getLabel = function getLabel(position, value) { - var prefix = (value < 0 && this.separateNegativeValues) ? 'v' : '^', - label = (this.dontMergeOverlappingData) ? - position : - Math.round(position / this.binWidth); + var prefix = (value < 0 && this.separateNegativeValues) ? 'v' : '^'; + var label = (this.dontMergeOverlappingData) ? + position : + Math.round(position / this.binWidth); return prefix + label; }; -},{"../../constants/numerical":151,"../../lib":169}],280:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168}],280:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65969,9 +68607,17 @@ Sieve.prototype.getLabel = function getLabel(position, value) { 'use strict'; var d3 = _dereq_('d3'); +var Color = _dereq_('../../components/color'); var Drawing = _dereq_('../../components/drawing'); +var Lib = _dereq_('../../lib'); var Registry = _dereq_('../../registry'); +var attributes = _dereq_('./attributes'); +var attributeTextFont = attributes.textfont; +var attributeInsideTextFont = attributes.insidetextfont; +var attributeOutsideTextFont = attributes.outsidetextfont; +var helpers = _dereq_('./helpers'); + function style(gd, cd) { var s = cd ? cd[0].node3 : d3.select(gd).selectAll('g.trace.bars'); var barcount = s.size(); @@ -66009,21 +68655,8 @@ function stylePoints(sel, trace, gd) { txs.each(function(d) { var tx = d3.select(this); - var textFont; - - if(tx.classed('bartext-inside')) { - textFont = trace.insidetextfont; - } else if(tx.classed('bartext-outside')) { - textFont = trace.outsidetextfont; - } - if(!textFont) textFont = trace.textfont; - - function cast(k) { - var cont = textFont[k]; - return Array.isArray(cont) ? cont[d.i] : cont; - } - - Drawing.font(tx, cast('family'), cast('size'), cast('color')); + var font = determineFont(tx, d, trace, gd); + Drawing.font(tx, font); }); } @@ -66032,32 +68665,122 @@ function styleOnSelect(gd, cd) { var trace = cd[0].trace; if(trace.selectedpoints) { - Drawing.selectedPointStyle(s.selectAll('path'), trace); - Drawing.selectedTextStyle(s.selectAll('text'), trace); + stylePointsInSelectionMode(s, trace, gd); } else { stylePoints(s, trace, gd); } } +function stylePointsInSelectionMode(s, trace, gd) { + Drawing.selectedPointStyle(s.selectAll('path'), trace); + styleTextInSelectionMode(s.selectAll('text'), trace, gd); +} + +function styleTextInSelectionMode(txs, trace, gd) { + txs.each(function(d) { + var tx = d3.select(this); + var font; + + if(d.selected) { + font = Lib.extendFlat({}, determineFont(tx, d, trace, gd)); + + var selectedFontColor = trace.selected.textfont && trace.selected.textfont.color; + if(selectedFontColor) { + font.color = selectedFontColor; + } + + Drawing.font(tx, font); + } else { + Drawing.selectedTextStyle(tx, trace); + } + }); +} + +function determineFont(tx, d, trace, gd) { + var layoutFont = gd._fullLayout.font; + var textFont = trace.textfont; + + if(tx.classed('bartext-inside')) { + var barColor = getBarColor(d, trace); + textFont = getInsideTextFont(trace, d.i, layoutFont, barColor); + } else if(tx.classed('bartext-outside')) { + textFont = getOutsideTextFont(trace, d.i, layoutFont); + } + + return textFont; +} + +function getTextFont(trace, index, defaultValue) { + return getFontValue( + attributeTextFont, trace.textfont, index, defaultValue); +} + +function getInsideTextFont(trace, index, layoutFont, barColor) { + var defaultFont = getTextFont(trace, index, layoutFont); + + var wouldFallBackToLayoutFont = + (trace._input.textfont === undefined || trace._input.textfont.color === undefined) || + (Array.isArray(trace.textfont.color) && trace.textfont.color[index] === undefined); + if(wouldFallBackToLayoutFont) { + defaultFont = { + color: Color.contrast(barColor), + family: defaultFont.family, + size: defaultFont.size + }; + } + + return getFontValue( + attributeInsideTextFont, trace.insidetextfont, index, defaultFont); +} + +function getOutsideTextFont(trace, index, layoutFont) { + var defaultFont = getTextFont(trace, index, layoutFont); + return getFontValue( + attributeOutsideTextFont, trace.outsidetextfont, index, defaultFont); +} + +function getFontValue(attributeDefinition, attributeValue, index, defaultValue) { + attributeValue = attributeValue || {}; + + var familyValue = helpers.getValue(attributeValue.family, index); + var sizeValue = helpers.getValue(attributeValue.size, index); + var colorValue = helpers.getValue(attributeValue.color, index); + + return { + family: helpers.coerceString( + attributeDefinition.family, familyValue, defaultValue.family), + size: helpers.coerceNumber( + attributeDefinition.size, sizeValue, defaultValue.size), + color: helpers.coerceColor( + attributeDefinition.color, colorValue, defaultValue.color) + }; +} + +function getBarColor(cd, trace) { + return cd.mc || trace.marker.color; +} + module.exports = { style: style, - styleOnSelect: styleOnSelect + styleOnSelect: styleOnSelect, + getInsideTextFont: getInsideTextFont, + getOutsideTextFont: getOutsideTextFont, + getBarColor: getBarColor }; -},{"../../components/drawing":75,"../../registry":259,"d3":16}],281:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../lib":168,"../../registry":257,"./attributes":267,"./helpers":272,"d3":16}],281:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Color = _dereq_('../../components/color'); -var hasColorscale = _dereq_('../../components/colorscale/has_colorscale'); +var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale; var colorscaleDefaults = _dereq_('../../components/colorscale/defaults'); module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, defaultColor, layout) { @@ -66083,9 +68806,9 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, default coerce('unselected.marker.color'); }; -},{"../../components/color":50,"../../components/colorscale/defaults":60,"../../components/colorscale/has_colorscale":64}],282:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62}],282:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66196,6 +68919,16 @@ module.exports = { editType: 'calc+clearAxisTypes', }, + + width: { + valType: 'number', + min: 0, + + dflt: 0, + editType: 'calc', + + }, + marker: { outliercolor: { valType: 'color', @@ -66264,7 +68997,6 @@ module.exports = { marker: scatterAttrs.unselected.marker, editType: 'style' }, - hoveron: { valType: 'flaglist', flags: ['boxes', 'points'], @@ -66275,9 +69007,9 @@ module.exports = { } }; -},{"../../components/color/attributes":49,"../../lib/extend":163,"../scatter/attributes":366}],283:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../lib/extend":162,"../scatter/attributes":367}],283:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66342,6 +69074,11 @@ module.exports = function calc(gd, trace) { } } + var cdi; + var ptFilterFn = (trace.boxpoints || trace.points) === 'all' ? + Lib.identity : + function(pt) { return (pt.v < cdi.lf || pt.v > cdi.uf); }; + // build calcdata trace items, one item per distinct position for(i = 0; i < pLen; i++) { if(ptsPerBin[i].length > 0) { @@ -66349,10 +69086,9 @@ module.exports = function calc(gd, trace) { var boxVals = pts.map(extractVal); var bvLen = boxVals.length; - var cdi = { - pos: posDistinct[i], - pts: pts - }; + cdi = {}; + cdi.pos = posDistinct[i]; + cdi.pts = pts; cdi.min = boxVals[0]; cdi.max = boxVals[bvLen - 1]; @@ -66388,13 +69124,14 @@ module.exports = function calc(gd, trace) { cdi.lo = 4 * cdi.q1 - 3 * cdi.q3; cdi.uo = 4 * cdi.q3 - 3 * cdi.q1; - // 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; + cdi.pts2 = pts.filter(ptFilterFn); + cd.push(cdi); } } @@ -66456,7 +69193,10 @@ function getPos(trace, posLetter, posAxis, val, num) { pos0 = num; } - var pos0c = posAxis.d2c(pos0, 0, trace[posLetter + 'calendar']); + var pos0c = posAxis.type === 'multicategory' ? + posAxis.r2c_just_indices(pos0) : + posAxis.d2c(pos0, 0, trace[posLetter + 'calendar']); + return val.map(function() { return pos0c; }); } @@ -66511,9 +69251,9 @@ function sortByVal(a, b) { return a.v - b.v; } function extractVal(o) { return o.v; } -},{"../../lib":169,"../../plots/cartesian/axes":214,"fast-isnumeric":18}],284:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"fast-isnumeric":18}],284:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66536,8 +69276,6 @@ function crossTraceCalc(gd, plotinfo) { var orientation = orientations[i]; var posAxis = orientation === 'h' ? ya : xa; var boxList = []; - var minPad = 0; - var maxPad = 0; // make list of boxes / candlesticks // For backward compatibility, candlesticks are treated as if they *are* box traces here @@ -66554,72 +69292,173 @@ function crossTraceCalc(gd, plotinfo) { trace.yaxis === ya._id ) { boxList.push(j); - - if(trace.boxpoints) { - minPad = Math.max(minPad, trace.jitter - trace.pointpos - 1); - maxPad = Math.max(maxPad, trace.jitter + trace.pointpos - 1); - } } } - setPositionOffset('box', gd, boxList, posAxis, [minPad, maxPad]); + setPositionOffset('box', gd, boxList, posAxis); } } -function setPositionOffset(traceType, gd, boxList, posAxis, pad) { +function setPositionOffset(traceType, gd, boxList, posAxis) { var calcdata = gd.calcdata; var fullLayout = gd._fullLayout; - var pointList = []; + var axId = posAxis._id; + var axLetter = axId.charAt(0); // N.B. reused in violin var numKey = traceType === 'violin' ? '_numViolins' : '_numBoxes'; var i, j, calcTrace; + var pointList = []; + var shownPts = 0; // make list of box points for(i = 0; i < boxList.length; i++) { calcTrace = calcdata[boxList[i]]; for(j = 0; j < calcTrace.length; j++) { pointList.push(calcTrace[j].pos); + shownPts += (calcTrace[j].pts2 || []).length; } } if(!pointList.length) return; // box plots - update dPos based on multiple traces - // and then use for posAxis autorange var boxdv = Lib.distinctVals(pointList); - var dPos = boxdv.minDiff / 2; - - // if there's no duplication of x points, - // disable 'group' mode by setting counter to 1 - if(pointList.length === boxdv.vals.length) { - fullLayout[numKey] = 1; - } + var dPos0 = boxdv.minDiff / 2; // check for forced minimum dtick Axes.minDtick(posAxis, boxdv.minDiff, boxdv.vals[0], true); - var gap = fullLayout[traceType + 'gap']; - var groupgap = fullLayout[traceType + 'groupgap']; - var padfactor = (1 - gap) * (1 - groupgap) * dPos / fullLayout[numKey]; - - // autoscale the x axis - including space for points if they're off the side - // TODO: this will overdo it if the outermost boxes don't have - // their points as far out as the other boxes - var extremes = Axes.findExtremes(posAxis, boxdv.vals, { - vpadminus: dPos + pad[0] * padfactor, - vpadplus: dPos + pad[1] * padfactor - }); + var num = fullLayout[numKey]; + var group = (fullLayout[traceType + 'mode'] === 'group' && num > 1); + var groupFraction = 1 - fullLayout[traceType + 'gap']; + var groupGapFraction = 1 - fullLayout[traceType + 'groupgap']; for(i = 0; i < boxList.length; i++) { calcTrace = calcdata[boxList[i]]; - // set the width of all boxes - calcTrace[0].t.dPos = dPos; - // link extremes to all boxes - calcTrace[0].trace._extremes[posAxis._id] = extremes; - } + var trace = calcTrace[0].trace; + var t = calcTrace[0].t; + var width = trace.width; + var side = trace.side; + + // position coordinate delta + var dPos; + // box half width; + var bdPos; + // box center offset + var bPos; + // half-width within which to accept hover for this box/violin + // always split the distance to the closest box/violin + var wHover; + + if(width) { + dPos = bdPos = wHover = width / 2; + bPos = 0; + } else { + dPos = dPos0; + bdPos = dPos * groupFraction * groupGapFraction / (group ? num : 1); + bPos = group ? 2 * dPos * (-0.5 + (t.num + 0.5) / num) * groupFraction : 0; + wHover = dPos * (group ? groupFraction / num : 1); + } + t.dPos = dPos; + t.bPos = bPos; + t.bdPos = bdPos; + t.wHover = wHover; + + // box/violin-only value-space push value + var pushplus; + var pushminus; + // edge of box/violin + var edge = bPos + bdPos; + var edgeplus; + var edgeminus; + + if(side === 'positive') { + pushplus = dPos * (width ? 1 : 0.5); + edgeplus = edge; + pushminus = edgeplus = bPos; + } else if(side === 'negative') { + pushplus = edgeplus = bPos; + pushminus = dPos * (width ? 1 : 0.5); + edgeminus = edge; + } else { + pushplus = pushminus = dPos; + edgeplus = edgeminus = edge; + } + + // value-space padding + var vpadplus; + var vpadminus; + // pixel-space padding + var ppadplus; + var ppadminus; + // do we add 5% of both sides (for points beyond box/violin) + var padded = false; + // does this trace show points? + var hasPts = (trace.boxpoints || trace.points) && (shownPts > 0); + + if(hasPts) { + var pointpos = trace.pointpos; + var jitter = trace.jitter; + var ms = trace.marker.size / 2; + + var pp = 0; + if((pointpos + jitter) >= 0) { + pp = edge * (pointpos + jitter); + if(pp > pushplus) { + // (++) beyond plus-value, use pp + padded = true; + ppadplus = ms; + vpadplus = pp; + } else if(pp > edgeplus) { + // (+), use push-value (it's bigger), but add px-pad + ppadplus = ms; + vpadplus = pushplus; + } + } + if(pp <= pushplus) { + // (->) fallback to push value + vpadplus = pushplus; + } + + var pm = 0; + if((pointpos - jitter) <= 0) { + pm = -edge * (pointpos - jitter); + if(pm > pushminus) { + // (--) beyond plus-value, use pp + padded = true; + ppadminus = ms; + vpadminus = pm; + } else if(pm > edgeminus) { + // (-), use push-value (it's bigger), but add px-pad + ppadminus = ms; + vpadminus = pushminus; + } + } + if(pm <= pushminus) { + // (<-) fallback to push value + vpadminus = pushminus; + } + } else { + vpadplus = pushplus; + vpadminus = pushminus; + } + + // calcdata[i][j] are in ascending order + var firstPos = calcTrace[0].pos; + var lastPos = calcTrace[calcTrace.length - 1].pos; + + trace._extremes[axId] = Axes.findExtremes(posAxis, [firstPos, lastPos], { + padded: padded, + vpadminus: vpadminus, + vpadplus: vpadplus, + // N.B. SVG px-space positive/negative + ppadminus: {x: ppadminus, y: ppadplus}[axLetter], + ppadplus: {x: ppadplus, y: ppadminus}[axLetter], + }); + } } module.exports = { @@ -66627,9 +69466,9 @@ module.exports = { setPositionOffset: setPositionOffset }; -},{"../../lib":169,"../../plots/cartesian/axes":214}],285:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212}],285:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66658,6 +69497,7 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { coerce('whiskerwidth'); coerce('boxmean'); + coerce('width'); var notched = coerce('notched', traceIn.notchwidth !== undefined); if(notched) coerce('notchwidth'); @@ -66675,16 +69515,15 @@ function handleSampleDefaults(traceIn, traceOut, coerce, layout) { if(y && y.length) { defaultOrientation = 'v'; if(hasX) { - len = Math.min(x.length, y.length); - } - else { + len = Math.min(Lib.minRowLength(x), Lib.minRowLength(y)); + } else { coerce('x0'); - len = y.length; + len = Lib.minRowLength(y); } } else if(hasX) { defaultOrientation = 'h'; coerce('y0'); - len = x.length; + len = Lib.minRowLength(x); } else { traceOut.visible = false; return; @@ -66745,9 +69584,9 @@ module.exports = { handlePointsDefaults: handlePointsDefaults }; -},{"../../components/color":50,"../../lib":169,"../../registry":259,"./attributes":282}],286:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../../registry":257,"./attributes":282}],286:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66773,7 +69612,7 @@ module.exports = function eventData(out, pt) { },{}],287:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67014,15 +69853,25 @@ function hoverOnPoints(pointData, xval, yval) { name: trace.name, x0: xc - rad, x1: xc + rad, - xLabelVal: pt.x, y0: yc - rad, y1: yc + rad, - yLabelVal: pt.y, spikeDistance: pointData.distance }); - var pLetter = trace.orientation === 'h' ? 'y' : 'x'; - var pa = trace.orientation === 'h' ? ya : xa; + + var pa; + if(trace.orientation === 'h') { + pa = ya; + closePtData.xLabelVal = pt.x; + closePtData.yLabelVal = di.pos; + } else { + pa = xa; + closePtData.xLabelVal = di.pos; + closePtData.yLabelVal = pt.y; + } + + var pLetter = pa._id.charAt(0); closePtData[pLetter + 'Spike'] = pa.c2p(di.pos, true); + fillHoverText(pt, trace, closePtData); return closePtData; @@ -67034,9 +69883,9 @@ module.exports = { hoverOnPoints: hoverOnPoints }; -},{"../../components/color":50,"../../components/fx":92,"../../lib":169,"../../plots/cartesian/axes":214,"../scatter/fill_hover_text":374}],288:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":90,"../../lib":168,"../../plots/cartesian/axes":212,"../scatter/fill_hover_text":375}],288:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67070,9 +69919,9 @@ Box.meta = { module.exports = Box; -},{"../../plots/cartesian":225,"./attributes":282,"./calc":283,"./cross_trace_calc":284,"./defaults":285,"./event_data":286,"./hover":287,"./layout_attributes":289,"./layout_defaults":290,"./plot":291,"./select":292,"./style":293}],289:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":282,"./calc":283,"./cross_trace_calc":284,"./defaults":285,"./event_data":286,"./hover":287,"./layout_attributes":289,"./layout_defaults":290,"./plot":291,"./select":292,"./style":293}],289:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67113,7 +69962,7 @@ module.exports = { },{}],290:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67154,9 +70003,9 @@ module.exports = { _supply: _supply }; -},{"../../lib":169,"../../registry":259,"./layout_attributes":289}],291:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"./layout_attributes":289}],291:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67175,12 +70024,8 @@ var JITTERCOUNT = 5; // points either side of this to include var JITTERSPREAD = 0.01; // fraction of IQR to count as "dense" function plot(gd, plotinfo, cdbox, boxLayer) { - var fullLayout = gd._fullLayout; var xa = plotinfo.xaxis; var ya = plotinfo.yaxis; - var numBoxes = fullLayout._numBoxes; - var groupFraction = (1 - fullLayout.boxgap); - var group = (fullLayout.boxmode === 'group' && numBoxes > 1); Lib.makeTraceGroups(boxLayer, cdbox, 'trace boxes').each(function(cd) { var plotGroup = d3.select(this); @@ -67188,12 +70033,9 @@ function plot(gd, plotinfo, cdbox, boxLayer) { var t = cd0.t; var trace = cd0.trace; if(!plotinfo.isRangePlot) cd0.node3 = plotGroup; - // box half width - var bdPos = t.dPos * groupFraction * (1 - fullLayout.boxgroupgap) / (group ? numBoxes : 1); - // box center offset - var bPos = group ? 2 * t.dPos * (-0.5 + (t.num + 0.5) / numBoxes) * groupFraction : 0; + // whisker width - var wdPos = bdPos * trace.whiskerwidth; + t.wdPos = t.bdPos * trace.whiskerwidth; if(trace.visible !== true || t.empty) { plotGroup.remove(); @@ -67210,14 +70052,6 @@ function plot(gd, plotinfo, cdbox, boxLayer) { valAxis = ya; } - // save the box size and box position for use by hover - t.bPos = bPos; - t.bdPos = bdPos; - t.wdPos = wdPos; - // half-width within which to accept hover for this box - // always split the distance to the closest box - t.wHover = t.dPos * (group ? groupFraction / numBoxes : 1); - plotBoxAndWhiskers(plotGroup, {pos: posAxis, val: valAxis}, trace, t); plotPoints(plotGroup, {x: xa, y: ya}, trace, t); plotBoxMean(plotGroup, {pos: posAxis, val: valAxis}, trace, t); @@ -67257,6 +70091,8 @@ function plotBoxAndWhiskers(sel, axes, trace, t) { paths.exit().remove(); paths.each(function(d) { + if(d.empty) return 'M0,0Z'; + var pos = d.pos; var posc = posAxis.c2p(pos + bPos, true) + bPosPxOffset; var pos0 = posAxis.c2p(pos + bPos - bdPos0, true) + bPosPxOffset; @@ -67347,10 +70183,7 @@ function plotPoints(sel, axes, trace, t) { var paths = gPoints.selectAll('path') .data(function(d) { var i; - - var pts = mode === 'all' ? - d.pts : - d.pts.filter(function(pt) { return (pt.v < d.lf || pt.v > d.uf); }); + var pts = d.pts2; // normally use IQR, but if this is 0 or too small, use max-min var typicalSpread = Math.max((d.max - d.min) / 10, d.q3 - d.q1); @@ -67494,9 +70327,9 @@ module.exports = { plotBoxMean: plotBoxMean }; -},{"../../components/drawing":75,"../../lib":169,"d3":16}],292:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":168,"d3":16}],292:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67545,7 +70378,7 @@ module.exports = function selectPoints(searchInfo, selectionTester) { },{}],293:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67578,14 +70411,15 @@ function style(gd, cd) { if(trace.type === 'candlestick') { allBoxes.each(function(boxData) { + if(boxData.empty) return; + var thisBox = d3.select(this); var container = trace[boxData.dir]; // dir = 'increasing' or 'decreasing' styleBox(thisBox, container.line.width, container.line.color, container.fillcolor); // TODO: custom selection style for candlesticks thisBox.style('opacity', trace.selectedpoints && !boxData.selected ? 0.3 : 1); }); - } - else { + } else { styleBox(allBoxes, lineWidth, trace.line.color, trace.fillcolor); el.selectAll('path.mean') .style({ @@ -67617,9 +70451,9 @@ module.exports = { styleOnSelect: styleOnSelect }; -},{"../../components/color":50,"../../components/drawing":75,"d3":16}],294:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"d3":16}],294:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67796,9 +70630,9 @@ module.exports = extendFlat({ { colorbar: colorbarAttrs } ); -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../components/drawing/attributes":74,"../../constants/filter_ops":149,"../../lib/extend":163,"../../plots/font_attributes":240,"../heatmap/attributes":316,"../scatter/attributes":366}],295:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../constants/filter_ops":147,"../../lib/extend":162,"../../plots/font_attributes":239,"../heatmap/attributes":316,"../scatter/attributes":367}],295:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67822,7 +70656,7 @@ module.exports = function calc(gd, trace) { },{"../heatmap/calc":317,"./set_contours":313}],296:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67889,7 +70723,7 @@ module.exports = function(pathinfo, operation, perimeter, trace) { },{}],297:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67938,9 +70772,9 @@ module.exports = function colorbar(gd, cd) { .options(trace.colorbar)(); }; -},{"../../components/colorbar/draw":55,"./end_plus":305,"./make_color_map":310}],298:[function(_dereq_,module,exports){ +},{"../../components/colorbar/draw":56,"./end_plus":305,"./make_color_map":310}],298:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68018,7 +70852,7 @@ module.exports = { },{}],299:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68111,9 +70945,9 @@ function handleConstraintValueDefaults(coerce, contours) { } } -},{"../../components/color":50,"../../constants/filter_ops":149,"./label_defaults":309,"fast-isnumeric":18}],300:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../constants/filter_ops":147,"./label_defaults":309,"fast-isnumeric":18}],300:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68190,9 +71024,9 @@ function makeInequalitySettings(operation) { }; } -},{"../../constants/filter_ops":149,"fast-isnumeric":18}],301:[function(_dereq_,module,exports){ +},{"../../constants/filter_ops":147,"fast-isnumeric":18}],301:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68221,7 +71055,7 @@ module.exports = function handleContourDefaults(traceIn, traceOut, coerce, coerc },{}],302:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68307,9 +71141,9 @@ function copyPathinfo(pi) { }); } -},{"../../lib":169}],303:[function(_dereq_,module,exports){ +},{"../../lib":168}],303:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68356,9 +71190,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout } }; -},{"../../lib":169,"../heatmap/xyz_defaults":331,"./attributes":294,"./constraint_defaults":299,"./contours_defaults":301,"./style_defaults":315}],304:[function(_dereq_,module,exports){ +},{"../../lib":168,"../heatmap/xyz_defaults":330,"./attributes":294,"./constraint_defaults":299,"./contours_defaults":301,"./style_defaults":315}],304:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68420,9 +71254,9 @@ module.exports = function emptyPathinfo(contours, plotinfo, cd0) { return pathinfo; }; -},{"../../lib":169,"./constraint_mapping":300,"./end_plus":305}],305:[function(_dereq_,module,exports){ +},{"../../lib":168,"./constraint_mapping":300,"./end_plus":305}],305:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68442,7 +71276,7 @@ module.exports = function endPlus(contours) { },{}],306:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68490,8 +71324,8 @@ function equalPts(pt1, pt2, xtol, ytol) { // distance in index units - uses the 3rd and 4th items in points function ptDist(pt1, pt2) { - var dx = pt1[2] - pt2[2], - dy = pt1[3] - pt2[3]; + var dx = pt1[2] - pt2[2]; + var dy = pt1[3] - pt2[3]; return Math.sqrt(dx * dx + dy * dy); } @@ -68533,8 +71367,8 @@ function makePath(pi, loc, edgeflag, xtol, ytol) { locStr = loc.join(','); var atEdge = (marchStep[0] && (loc[0] < 0 || loc[0] > n - 2)) || - (marchStep[1] && (loc[1] < 0 || loc[1] > m - 2)), - closedLoop = (locStr === startLocStr) && (marchStep.join(',') === startStepStr); + (marchStep[1] && (loc[1] < 0 || loc[1] > m - 2)); + var closedLoop = (locStr === startLocStr) && (marchStep.join(',') === startStepStr); // have we completed a loop, or reached an edge? if((closedLoop) || (edgeflag && atEdge)) break; @@ -68683,8 +71517,8 @@ function makePath(pi, loc, edgeflag, xtol, ytol) { // special function to get the marching step of the // first point in the path (leading to loc) function startStep(mi, edgeflag, loc) { - var dx = 0, - dy = 0; + var dx = 0; + var dy = 0; if(mi > 20 && edgeflag) { // these saddles start at +/- x if(mi === 208 || mi === 1114) { @@ -68719,11 +71553,11 @@ function startStep(mi, edgeflag, loc) { * points into a path, because those routines require length-2 points. */ function getInterpPx(pi, loc, step) { - var locx = loc[0] + Math.max(step[0], 0), - locy = loc[1] + Math.max(step[1], 0), - zxy = pi.z[locy][locx], - xa = pi.xaxis, - ya = pi.yaxis; + var locx = loc[0] + Math.max(step[0], 0); + var locy = loc[1] + Math.max(step[1], 0); + var zxy = pi.z[locy][locx]; + var xa = pi.xaxis; + var ya = pi.yaxis; if(step[1]) { var dx = (pi.level - zxy) / (pi.z[locy][locx + 1] - zxy); @@ -68740,9 +71574,9 @@ function getInterpPx(pi, loc, step) { } } -},{"../../lib":169,"./constants":298}],307:[function(_dereq_,module,exports){ +},{"../../lib":168,"./constants":298}],307:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68776,9 +71610,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return hoverData; }; -},{"../../components/color":50,"../heatmap/hover":323}],308:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../heatmap/hover":323}],308:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68808,9 +71642,9 @@ Contour.meta = { module.exports = Contour; -},{"../../plots/cartesian":225,"./attributes":294,"./calc":295,"./colorbar":297,"./defaults":303,"./hover":307,"./plot":312,"./style":314}],309:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":294,"./calc":295,"./colorbar":297,"./defaults":303,"./hover":307,"./plot":312,"./style":314}],309:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68838,9 +71672,9 @@ module.exports = function handleLabelDefaults(coerce, layout, lineColor, opts) { if(opts.hasHover !== false) coerce('zhoverformat'); }; -},{"../../lib":169}],310:[function(_dereq_,module,exports){ +},{"../../lib":168}],310:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68855,23 +71689,25 @@ var Colorscale = _dereq_('../../components/colorscale'); var endPlus = _dereq_('./end_plus'); module.exports = function makeColorMap(trace) { - var contours = trace.contours, - start = contours.start, - end = endPlus(contours), - cs = contours.size || 1, - nc = Math.floor((end - start) / cs) + 1, - extra = contours.coloring === 'lines' ? 0 : 1; + var contours = trace.contours; + var start = contours.start; + var end = endPlus(contours); + var cs = contours.size || 1; + var nc = Math.floor((end - start) / cs) + 1; + var extra = contours.coloring === 'lines' ? 0 : 1; if(!isFinite(cs)) { cs = 1; nc = 1; } - var scl = trace.colorscale, - len = scl.length; + var scl = trace.reversescale ? + Colorscale.flipScale(trace.colorscale) : + trace.colorscale; - var domain = new Array(len), - range = new Array(len); + var len = scl.length; + var domain = new Array(len); + var range = new Array(len); var si, i; @@ -68890,10 +71726,14 @@ module.exports = function makeColorMap(trace) { // do the contours extend beyond the colorscale? // if so, extend the colorscale with constants - var zRange = d3.extent([trace.zmin, trace.zmax, contours.start, - contours.start + cs * (nc - 1)]), - zmin = zRange[trace.zmin < trace.zmax ? 0 : 1], - zmax = zRange[trace.zmin < trace.zmax ? 1 : 0]; + var zRange = d3.extent([ + trace.zmin, + trace.zmax, + contours.start, + contours.start + cs * (nc - 1) + ]); + var zmin = zRange[trace.zmin < trace.zmax ? 0 : 1]; + var zmax = zRange[trace.zmin < trace.zmax ? 1 : 0]; if(zmin !== trace.zmin) { domain.splice(0, 0, zmin); @@ -68922,9 +71762,9 @@ module.exports = function makeColorMap(trace) { }); }; -},{"../../components/colorscale":65,"./end_plus":305,"d3":16}],311:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"./end_plus":305,"d3":16}],311:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68940,19 +71780,19 @@ var constants = _dereq_('./constants'); // at every intersection, rather than just following a path // TODO: shorten the inner loop to only the relevant levels module.exports = function makeCrossings(pathinfo) { - var z = pathinfo[0].z, - m = z.length, - n = z[0].length, // we already made sure z isn't ragged in interp2d - twoWide = m === 2 || n === 2, - xi, - yi, - startIndices, - ystartIndices, - label, - corners, - mi, - pi, - i; + var z = pathinfo[0].z; + var m = z.length; + var n = z[0].length; // we already made sure z isn't ragged in interp2d + var twoWide = m === 2 || n === 2; + var xi; + var yi; + var startIndices; + var ystartIndices; + var label; + var corners; + var mi; + var pi; + var i; for(yi = 0; yi < m - 1; yi++) { ystartIndices = []; @@ -69016,7 +71856,7 @@ function getMarchingIndex(val, corners) { },{"./constants":298}],312:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69046,7 +71886,6 @@ var costConstants = constants.LABELOPTIMIZER; exports.plot = function plot(gd, plotinfo, cdcontours, contourLayer) { var xa = plotinfo.xaxis; var ya = plotinfo.yaxis; - var fullLayout = gd._fullLayout; Lib.makeTraceGroups(contourLayer, cdcontours, 'contour').each(function(cd) { var plotGroup = d3.select(this); @@ -69074,16 +71913,16 @@ exports.plot = function plot(gd, plotinfo, cdcontours, contourLayer) { makeCrossings(pathinfo); findAllPaths(pathinfo); - var leftedge = xa.c2p(x[0], true), - rightedge = xa.c2p(x[x.length - 1], true), - bottomedge = ya.c2p(y[0], true), - topedge = ya.c2p(y[y.length - 1], true), - perimeter = [ - [leftedge, topedge], - [rightedge, topedge], - [rightedge, bottomedge], - [leftedge, bottomedge] - ]; + var leftedge = xa.c2p(x[0], true); + var rightedge = xa.c2p(x[x.length - 1], true); + var bottomedge = ya.c2p(y[0], true); + var topedge = ya.c2p(y[y.length - 1], true); + var perimeter = [ + [leftedge, topedge], + [rightedge, topedge], + [rightedge, bottomedge], + [leftedge, bottomedge] + ]; var fillPathinfo = pathinfo; if(contours.type === 'constraint') { @@ -69095,7 +71934,7 @@ exports.plot = function plot(gd, plotinfo, cdcontours, contourLayer) { makeBackground(plotGroup, perimeter, contours); makeFills(plotGroup, fillPathinfo, perimeter, contours); makeLinesAndLabels(plotGroup, pathinfo, gd, cd0, contours, perimeter); - clipGaps(plotGroup, plotinfo, fullLayout._clips, cd0, perimeter); + clipGaps(plotGroup, plotinfo, gd, cd0, perimeter); }); }; @@ -69147,16 +71986,16 @@ function initFullPath(pi, perimeter) { } function joinAllPaths(pi, perimeter) { - var fullpath = initFullPath(pi, perimeter), - i = 0, - startsleft = pi.edgepaths.map(function(v, i) { return i; }), - newloop = true, - endpt, - newendpt, - cnt, - nexti, - possiblei, - addpath; + var fullpath = initFullPath(pi, perimeter); + var i = 0; + var startsleft = pi.edgepaths.map(function(v, i) { return i; }); + var newloop = true; + var endpt; + var newendpt; + var cnt; + var nexti; + var possiblei; + var addpath; function istop(pt) { return Math.abs(pt[1] - perimeter[0][1]) < 0.01; } function isbottom(pt) { return Math.abs(pt[1] - perimeter[2][1]) < 0.01; } @@ -69247,8 +72086,7 @@ function makeLinesAndLabels(plotgroup, pathinfo, gd, cd0, contours, perimeter) { // In this case we'll remove the lines after making the labels. var linegroup = exports.createLines(lineContainer, showLines || showLabels, pathinfo); - var lineClip = exports.createLineClip(lineContainer, clipLinesForLabels, - gd._fullLayout._clips, cd0.trace.uid); + var lineClip = exports.createLineClip(lineContainer, clipLinesForLabels, gd, cd0.trace.uid); var labelGroup = plotgroup.selectAll('g.contourlabels') .data(showLabels ? [0] : []); @@ -69259,8 +72097,7 @@ function makeLinesAndLabels(plotgroup, pathinfo, gd, cd0, contours, perimeter) { .classed('contourlabels', true); if(showLabels) { - var labelClipPathData = [perimeter]; - + var labelClipPathData = []; var labelData = []; // invalidate the getTextLocation cache in case paths changed @@ -69272,20 +72109,47 @@ function makeLinesAndLabels(plotgroup, pathinfo, gd, cd0, contours, perimeter) { .attr('data-notex', 1) .call(Drawing.font, contours.labelfont); - var xLen = pathinfo[0].xaxis._length; - var yLen = pathinfo[0].yaxis._length; + var xa = pathinfo[0].xaxis; + var ya = pathinfo[0].yaxis; + var xLen = xa._length; + var yLen = ya._length; + var xRng = xa.range; + var yRng = ya.range; + var x0 = Math.max(perimeter[0][0], 0); + var x1 = Math.min(perimeter[2][0], xLen); + var y0 = Math.max(perimeter[0][1], 0); + var y1 = Math.min(perimeter[2][1], yLen); // visible bounds of the contour trace (and the midpoints, to // help with cost calculations) - var bounds = { - left: Math.max(perimeter[0][0], 0), - right: Math.min(perimeter[2][0], xLen), - top: Math.max(perimeter[0][1], 0), - bottom: Math.min(perimeter[2][1], yLen) - }; + var bounds = {}; + + if(xRng[0] < xRng[1]) { + bounds.left = x0; + bounds.right = x1; + } else { + bounds.left = x1; + bounds.right = x0; + } + + if(yRng[0] < yRng[1]) { + bounds.top = y0; + bounds.bottom = y1; + } else { + bounds.top = y1; + bounds.bottom = y0; + } + bounds.middle = (bounds.top + bounds.bottom) / 2; bounds.center = (bounds.left + bounds.right) / 2; + labelClipPathData.push([ + [bounds.left, bounds.top], + [bounds.right, bounds.top], + [bounds.right, bounds.bottom], + [bounds.left, bounds.bottom] + ]); + var plotDiagonal = Math.sqrt(xLen * xLen + yLen * yLen); // the path length to use to scale the number of labels to draw: @@ -69370,7 +72234,8 @@ exports.createLines = function(lineContainer, makeLines, pathinfo) { return linegroup; }; -exports.createLineClip = function(lineContainer, clipLinesForLabels, clips, uid) { +exports.createLineClip = function(lineContainer, clipLinesForLabels, gd, uid) { + var clips = gd._fullLayout._clips; var clipId = clipLinesForLabels ? ('clipline' + uid) : null; var lineClip = clips.selectAll('#' + clipId) @@ -69381,7 +72246,7 @@ exports.createLineClip = function(lineContainer, clipLinesForLabels, clips, uid) .classed('contourlineclip', true) .attr('id', clipId); - Drawing.setClipUrl(lineContainer, clipId); + Drawing.setClipUrl(lineContainer, clipId, gd); return lineClip; }; @@ -69612,7 +72477,8 @@ exports.drawLabels = function(labelGroup, labelData, gd, lineClip, labelClipPath } }; -function clipGaps(plotGroup, plotinfo, clips, cd0, perimeter) { +function clipGaps(plotGroup, plotinfo, gd, cd0, perimeter) { + var clips = gd._fullLayout._clips; var clipId = 'clip' + cd0.trace.uid; var clipPath = clips.selectAll('#' + clipId) @@ -69651,17 +72517,17 @@ function clipGaps(plotGroup, plotinfo, clips, cd0, perimeter) { } else clipId = null; - plotGroup.call(Drawing.setClipUrl, clipId); + Drawing.setClipUrl(plotGroup, clipId, gd); } function makeClipMask(cd0) { - var empties = cd0.trace._emptypoints, - z = [], - m = cd0.z.length, - n = cd0.z[0].length, - i, - row = [], - emptyPoint; + var empties = cd0.trace._emptypoints; + var z = []; + var m = cd0.z.length; + var n = cd0.z[0].length; + var i; + var row = []; + var emptyPoint; for(i = 0; i < n; i++) row.push(1); for(i = 0; i < m; i++) z.push(row.slice()); @@ -69674,9 +72540,9 @@ function makeClipMask(cd0) { return z; } -},{"../../components/drawing":75,"../../lib":169,"../../lib/svg_text_utils":191,"../../plots/cartesian/axes":214,"../../plots/cartesian/set_convert":232,"../heatmap/plot":328,"./close_boundaries":296,"./constants":298,"./convert_to_constraints":302,"./empty_pathinfo":304,"./find_all_paths":306,"./make_crossings":311,"d3":16}],313:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":168,"../../lib/svg_text_utils":189,"../../plots/cartesian/axes":212,"../../plots/cartesian/set_convert":231,"../heatmap/plot":327,"./close_boundaries":296,"./constants":298,"./convert_to_constraints":302,"./empty_pathinfo":304,"./find_all_paths":306,"./make_crossings":311,"d3":16}],313:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69732,9 +72598,9 @@ module.exports = function setContours(trace) { } else if(contours.type !== 'constraint') { // sanity checks on manually-supplied start/end/size - var start = contours.start, - end = contours.end, - inputContours = trace._input.contours; + var start = contours.start; + var end = contours.end; + var inputContours = trace._input.contours; if(start > end) { contours.start = inputContours.start = end; @@ -69778,9 +72644,9 @@ function autoContours(start, end, ncontours) { return dummyAx; } -},{"../../lib":169,"../../plots/cartesian/axes":214}],314:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212}],314:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69860,9 +72726,9 @@ module.exports = function style(gd) { heatmapStyle(gd); }; -},{"../../components/drawing":75,"../heatmap/style":329,"./make_color_map":310,"d3":16}],315:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../heatmap/style":328,"./make_color_map":310,"d3":16}],315:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69905,9 +72771,9 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, layout, handleLabelDefaults(coerce, layout, lineColor, opts); }; -},{"../../components/colorscale/defaults":60,"./label_defaults":309}],316:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"./label_defaults":309}],316:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69999,6 +72865,7 @@ module.exports = extendFlat({ editType: 'none', }, + transforms: undefined }, colorscaleAttrs('', { cLetter: 'z', @@ -70007,9 +72874,9 @@ module.exports = extendFlat({ { colorbar: colorbarAttrs } ); -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../lib/extend":163,"../scatter/attributes":366}],317:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../lib/extend":162,"../scatter/attributes":367}],317:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70026,7 +72893,6 @@ var Axes = _dereq_('../../plots/cartesian/axes'); var histogram2dCalc = _dereq_('../histogram2d/calc'); var colorscaleCalc = _dereq_('../../components/colorscale/calc'); var convertColumnData = _dereq_('./convert_column_xyz'); -var maxRowLength = _dereq_('./max_row_length'); var clean2dArray = _dereq_('./clean_2d_array'); var interp2d = _dereq_('./interp2d'); var findEmpties = _dereq_('./find_empties'); @@ -70036,21 +72902,21 @@ var makeBoundArray = _dereq_('./make_bound_array'); module.exports = function calc(gd, trace) { // prepare the raw data // run makeCalcdata on x and y even for heatmaps, in case of category mappings - var xa = Axes.getFromId(gd, trace.xaxis || 'x'), - ya = Axes.getFromId(gd, trace.yaxis || 'y'), - isContour = Registry.traceIs(trace, 'contour'), - isHist = Registry.traceIs(trace, 'histogram'), - isGL2D = Registry.traceIs(trace, 'gl2d'), - zsmooth = isContour ? 'best' : trace.zsmooth, - x, - x0, - dx, - y, - y0, - dy, - z, - i, - binned; + var xa = Axes.getFromId(gd, trace.xaxis || 'x'); + var ya = Axes.getFromId(gd, trace.yaxis || 'y'); + var isContour = Registry.traceIs(trace, 'contour'); + var isHist = Registry.traceIs(trace, 'histogram'); + var isGL2D = Registry.traceIs(trace, 'gl2d'); + var zsmooth = isContour ? 'best' : trace.zsmooth; + var x; + var x0; + var dx; + var y; + var y0; + var dy; + var z; + var i; + var binned; // cancel minimum tick spacings (only applies to bars and boxes) xa._minDtick = 0; @@ -70103,8 +72969,8 @@ module.exports = function calc(gd, trace) { } else if(!isHist) { if(x.length) { - var avgdx = (x[x.length - 1] - x[0]) / (x.length - 1), - maxErrX = Math.abs(avgdx / 100); + var avgdx = (x[x.length - 1] - x[0]) / (x.length - 1); + var maxErrX = Math.abs(avgdx / 100); for(i = 0; i < x.length - 1; i++) { if(Math.abs(x[i + 1] - x[i] - avgdx) > maxErrX) { noZsmooth('x scale is not linear'); @@ -70113,8 +72979,8 @@ module.exports = function calc(gd, trace) { } } if(y.length && zsmooth === 'fast') { - var avgdy = (y[y.length - 1] - y[0]) / (y.length - 1), - maxErrY = Math.abs(avgdy / 100); + var avgdy = (y[y.length - 1] - y[0]) / (y.length - 1); + var maxErrY = Math.abs(avgdy / 100); for(i = 0; i < y.length - 1; i++) { if(Math.abs(y[i + 1] - y[i] - avgdy) > maxErrY) { noZsmooth('y scale is not linear'); @@ -70126,7 +72992,7 @@ module.exports = function calc(gd, trace) { } // create arrays of brick boundaries, to be used by autorange and heatmap.plot - var xlen = maxRowLength(z); + var xlen = Lib.maxRowLength(z); var xIn = trace.xtype === 'scaled' ? '' : x; var xArray = makeBoundArray(trace, xIn, x0, dx, xlen, xa); var yIn = trace.ytype === 'scaled' ? '' : y; @@ -70156,7 +73022,11 @@ module.exports = function calc(gd, trace) { // auto-z and autocolorscale if applicable if(!isContour || trace.contours.type !== 'constraint') { - colorscaleCalc(trace, z, '', 'z'); + colorscaleCalc(gd, trace, { + vals: z, + containerStr: '', + cLetter: 'z' + }); } if(isContour && trace.contours && trace.contours.coloring === 'heatmap') { @@ -70172,9 +73042,9 @@ module.exports = function calc(gd, trace) { return [cd0]; }; -},{"../../components/colorscale/calc":58,"../../lib":169,"../../plots/cartesian/axes":214,"../../registry":259,"../histogram2d/calc":345,"./clean_2d_array":318,"./convert_column_xyz":320,"./find_empties":322,"./interp2d":325,"./make_bound_array":326,"./max_row_length":327}],318:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../lib":168,"../../plots/cartesian/axes":212,"../../registry":257,"../histogram2d/calc":345,"./clean_2d_array":318,"./convert_column_xyz":320,"./find_empties":322,"./interp2d":325,"./make_bound_array":326}],318:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70219,7 +73089,7 @@ module.exports = function clean2dArray(zOld, transpose) { },{"fast-isnumeric":18}],319:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70235,7 +73105,7 @@ module.exports = { },{}],320:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70250,43 +73120,36 @@ var BADNUM = _dereq_('../../constants/numerical').BADNUM; module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, arrayVarNames) { var colLen = trace._length; - var col1 = trace[var1Name].slice(0, colLen); - var col2 = trace[var2Name].slice(0, colLen); + var col1 = ax1.makeCalcdata(trace, var1Name); + var col2 = ax2.makeCalcdata(trace, var2Name); var textCol = trace.text; var hasColumnText = (textCol !== undefined && Lib.isArray1D(textCol)); - var col1Calendar = trace[var1Name + 'calendar']; - var col2Calendar = trace[var2Name + 'calendar']; + var i, j; - var i, j, arrayVar, newArray, arrayVarName; - - for(i = 0; i < colLen; i++) { - col1[i] = ax1.d2c(col1[i], 0, col1Calendar); - col2[i] = ax2.d2c(col2[i], 0, col2Calendar); - } - - var col1dv = Lib.distinctVals(col1), - col1vals = col1dv.vals, - col2dv = Lib.distinctVals(col2), - col2vals = col2dv.vals, - newArrays = []; + var col1dv = Lib.distinctVals(col1); + var col1vals = col1dv.vals; + var col2dv = Lib.distinctVals(col2); + var col2vals = col2dv.vals; + var newArrays = []; + var text; for(i = 0; i < arrayVarNames.length; i++) { newArrays[i] = Lib.init2dArray(col2vals.length, col1vals.length); } - var i1, i2, text; - - if(hasColumnText) text = Lib.init2dArray(col2vals.length, col1vals.length); + if(hasColumnText) { + text = Lib.init2dArray(col2vals.length, col1vals.length); + } for(i = 0; i < colLen; i++) { if(col1[i] !== BADNUM && col2[i] !== BADNUM) { - i1 = Lib.findBin(col1[i] + col1dv.minDiff / 2, col1vals); - i2 = Lib.findBin(col2[i] + col2dv.minDiff / 2, col2vals); + var i1 = Lib.findBin(col1[i] + col1dv.minDiff / 2, col1vals); + var i2 = Lib.findBin(col2[i] + col2dv.minDiff / 2, col2vals); for(j = 0; j < arrayVarNames.length; j++) { - arrayVarName = arrayVarNames[j]; - arrayVar = trace[arrayVarName]; - newArray = newArrays[j]; + var arrayVarName = arrayVarNames[j]; + var arrayVar = trace[arrayVarName]; + var newArray = newArrays[j]; newArray[i2][i1] = arrayVar[i]; } @@ -70302,9 +73165,9 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, if(hasColumnText) trace._text = text; }; -},{"../../constants/numerical":151,"../../lib":169}],321:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168}],321:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70342,9 +73205,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: '', cLetter: 'z'}); }; -},{"../../components/colorscale/defaults":60,"../../lib":169,"./attributes":316,"./style_defaults":330,"./xyz_defaults":331}],322:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../lib":168,"./attributes":316,"./style_defaults":329,"./xyz_defaults":330}],322:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70353,7 +73216,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout 'use strict'; -var maxRowLength = _dereq_('./max_row_length'); +var maxRowLength = _dereq_('../../lib').maxRowLength; /* Return a list of empty points in 2D array z * each empty point z[i][j] gives an array [i, j, neighborCount] @@ -70363,21 +73226,21 @@ var maxRowLength = _dereq_('./max_row_length'); * neighbors, and add a fractional neighborCount */ module.exports = function findEmpties(z) { - var empties = [], - neighborHash = {}, - noNeighborList = [], - nextRow = z[0], - row = [], - blank = [0, 0, 0], - rowLength = maxRowLength(z), - prevRow, - i, - j, - thisPt, - p, - neighborCount, - newNeighborHash, - foundNewNeighbors; + var empties = []; + var neighborHash = {}; + var noNeighborList = []; + var nextRow = z[0]; + var row = []; + var blank = [0, 0, 0]; + var rowLength = maxRowLength(z); + var prevRow; + var i; + var j; + var thisPt; + var p; + var neighborCount; + var newNeighborHash; + var foundNewNeighbors; for(i = 0; i < z.length; i++) { prevRow = row; @@ -70448,9 +73311,9 @@ module.exports = function findEmpties(z) { return empties.sort(function(a, b) { return b[2] - a[2]; }); }; -},{"./max_row_length":327}],323:[function(_dereq_,module,exports){ +},{"../../lib":168}],323:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70520,10 +73383,10 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay ny = Math.max(0, Math.min(y2.length - 2, Lib.findBin(yval, y2))); } - var x0 = xa.c2p(x[nx]), - x1 = xa.c2p(x[nx + 1]), - y0 = ya.c2p(y[ny]), - y1 = ya.c2p(y[ny + 1]); + var x0 = xa.c2p(x[nx]); + var x1 = xa.c2p(x[nx + 1]); + var y0 = ya.c2p(y[ny]); + var y1 = ya.c2p(y[ny + 1]); if(contour) { x1 = x0; @@ -70577,9 +73440,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay })]; }; -},{"../../components/fx":92,"../../lib":169,"../../plots/cartesian/axes":214}],324:[function(_dereq_,module,exports){ +},{"../../components/fx":90,"../../lib":168,"../../plots/cartesian/axes":212}],324:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70609,9 +73472,9 @@ Heatmap.meta = { module.exports = Heatmap; -},{"../../plots/cartesian":225,"./attributes":316,"./calc":317,"./colorbar":319,"./defaults":321,"./hover":323,"./plot":328,"./style":329}],325:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":316,"./calc":317,"./colorbar":319,"./defaults":321,"./hover":323,"./plot":327,"./style":328}],325:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70674,20 +73537,20 @@ module.exports = function interp2d(z, emptyPoints) { }; function iterateInterp2d(z, emptyPoints, overshoot) { - var maxFractionalChange = 0, - thisPt, - i, - j, - p, - q, - neighborShift, - neighborRow, - neighborVal, - neighborCount, - neighborSum, - initialVal, - minNeighbor, - maxNeighbor; + var maxFractionalChange = 0; + var thisPt; + var i; + var j; + var p; + var q; + var neighborShift; + var neighborRow; + var neighborVal; + var neighborCount; + var neighborSum; + var initialVal; + var minNeighbor; + var maxNeighbor; for(p = 0; p < emptyPoints.length; p++) { thisPt = emptyPoints[p]; @@ -70744,9 +73607,9 @@ function iterateInterp2d(z, emptyPoints, overshoot) { return maxFractionalChange; } -},{"../../lib":169}],326:[function(_dereq_,module,exports){ +},{"../../lib":168}],326:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70759,13 +73622,13 @@ var Registry = _dereq_('../../registry'); var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray; module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, ax) { - var arrayOut = [], - isContour = Registry.traceIs(trace, 'contour'), - isHist = Registry.traceIs(trace, 'histogram'), - isGL2D = Registry.traceIs(trace, 'gl2d'), - v0, - dv, - i; + var arrayOut = []; + var isContour = Registry.traceIs(trace, 'contour'); + var isHist = Registry.traceIs(trace, 'histogram'); + var isGL2D = Registry.traceIs(trace, 'gl2d'); + var v0; + var dv; + var i; var isArrayOfTwoItemsOrMore = isArrayOrTypedArray(arrayIn) && arrayIn.length > 1; @@ -70792,8 +73655,8 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, } if(len < numbricks) { - var lastPt = arrayOut[arrayOut.length - 1], - delta = lastPt - arrayOut[arrayOut.length - 2]; + var lastPt = arrayOut[arrayOut.length - 1]; + var delta = lastPt - arrayOut[arrayOut.length - 2]; for(i = len; i < numbricks; i++) { lastPt += delta; @@ -70814,10 +73677,15 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, var calendar = trace[ax._id.charAt(0) + 'calendar']; - if(isHist || ax.type === 'category') v0 = ax.r2c(v0In, 0, calendar) || 0; - else if(isArrayOrTypedArray(arrayIn) && arrayIn.length === 1) v0 = arrayIn[0]; - else if(v0In === undefined) v0 = 0; - else v0 = ax.d2c(v0In, 0, calendar); + if(isHist || ax.type === 'category' || ax.type === 'multicategory') { + v0 = ax.r2c(v0In, 0, calendar) || 0; + } else if(isArrayOrTypedArray(arrayIn) && arrayIn.length === 1) { + v0 = arrayIn[0]; + } else if(v0In === undefined) { + v0 = 0; + } else { + v0 = ax.d2c(v0In, 0, calendar); + } for(i = (isContour || isGL2D) ? 0 : -0.5; i < numbricks; i++) { arrayOut.push(v0 + dv * i); @@ -70827,31 +73695,9 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, return arrayOut; }; -},{"../../lib":169,"../../registry":259}],327:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],327:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - -module.exports = function maxRowLength(z) { - var len = 0; - - for(var i = 0; i < z.length; i++) { - len = Math.max(len, z[i].length); - } - - return len; -}; - -},{}],328:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70869,8 +73715,6 @@ var Lib = _dereq_('../../lib'); var Colorscale = _dereq_('../../components/colorscale'); var xmlnsNamespaces = _dereq_('../../constants/xmlns_namespaces'); -var maxRowLength = _dereq_('./max_row_length'); - module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { var xa = plotinfo.xaxis; var ya = plotinfo.yaxis; @@ -70890,7 +73734,7 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { // get z dims var m = z.length; - var n = maxRowLength(z); + var n = Lib.maxRowLength(z); var xrev = false; var yrev = false; @@ -70964,8 +73808,8 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { bottom = Math.min((1 + extra) * ya._length, bottom); } - var imageWidth = Math.round(right - left), - imageHeight = Math.round(bottom - top); + var imageWidth = Math.round(right - left); + var imageHeight = Math.round(bottom - top); // setup image nodes @@ -70995,11 +73839,7 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { var context = canvas.getContext('2d'); var sclFunc = Colorscale.makeColorScaleFunc( - Colorscale.extractScale( - trace.colorscale, - trace.zmin, - trace.zmax - ), + Colorscale.extractScale(trace, {cLetter: 'z'}), { noNumericCheck: true, returnArray: true } ); @@ -71060,12 +73900,12 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { var z00 = r0[xinterp.bin0]; if(z00 === undefined) return setColor(undefined, 1); - var z01 = r0[xinterp.bin1], - z10 = r1[xinterp.bin0], - z11 = r1[xinterp.bin1], - dx = (z01 - z00) || 0, - dy = (z10 - z00) || 0, - dxy; + var z01 = r0[xinterp.bin1]; + var z10 = r1[xinterp.bin0]; + var z11 = r1[xinterp.bin1]; + var dx = (z01 - z00) || 0; + var dy = (z10 - z00) || 0; + var dxy; // the bilinear interpolation term needs different calculations // for all the different permutations of missing data @@ -71087,13 +73927,12 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { } if(zsmooth) { // best or fast, works fastest with imageData - var pxIndex = 0, - pixels; + var pxIndex = 0; + var pixels; try { pixels = new Uint8Array(imageWidth * imageHeight * 4); - } - catch(e) { + } catch(e) { pixels = new Array(imageWidth * imageHeight * 4); } @@ -71141,10 +73980,9 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { var imageData = context.createImageData(imageWidth, imageHeight); try { imageData.data.set(pixels); - } - catch(e) { - var pxArray = imageData.data, - dlen = pxArray.length; + } catch(e) { + var pxArray = imageData.data; + var dlen = pxArray.length; for(j = 0; j < dlen; j ++) { pxArray[j] = pixels[j]; } @@ -71270,9 +74108,9 @@ function putColor(pixels, pxIndex, c) { pixels[pxIndex + 3] = Math.round(c[3] * 255); } -},{"../../components/colorscale":65,"../../constants/xmlns_namespaces":152,"../../lib":169,"../../registry":259,"./max_row_length":327,"d3":16,"tinycolor2":33}],329:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"../../constants/xmlns_namespaces":150,"../../lib":168,"../../registry":257,"d3":16,"tinycolor2":34}],328:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71291,9 +74129,9 @@ module.exports = function style(gd) { }); }; -},{"d3":16}],330:[function(_dereq_,module,exports){ +},{"d3":16}],329:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71314,16 +74152,15 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce) { coerce('zhoverformat'); }; -},{}],331:[function(_dereq_,module,exports){ +},{}],330:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); @@ -71343,10 +74180,13 @@ module.exports = function handleXYZDefaults(traceIn, traceOut, coerce, layout, x x = coerce(xName); y = coerce(yName); - // column z must be accompanied by xName and yName arrays - if(!(x && x.length && y && y.length)) return 0; + var xlen = Lib.minRowLength(x); + var ylen = Lib.minRowLength(y); - traceOut._length = Math.min(x.length, y.length, z.length); + // column z must be accompanied by xName and yName arrays + if(xlen === 0 || ylen === 0) return 0; + + traceOut._length = Math.min(xlen, ylen, z.length); } else { x = coordDefaults(xName, coerce); @@ -71367,10 +74207,8 @@ module.exports = function handleXYZDefaults(traceIn, traceOut, coerce, layout, x }; function coordDefaults(coordStr, coerce) { - var coord = coerce(coordStr), - coordType = coord ? - coerce(coordStr + 'type', 'array') : - 'scaled'; + var coord = coerce(coordStr); + var coordType = coord ? coerce(coordStr + 'type', 'array') : 'scaled'; if(coordType === 'scaled') { coerce(coordStr + '0'); @@ -71381,10 +74219,10 @@ function coordDefaults(coordStr, coerce) { } function isValidZ(z) { - var allRowsAreArrays = true, - oneRowIsFilled = false, - hasOneNumber = false, - zi; + var allRowsAreArrays = true; + var oneRowIsFilled = false; + var hasOneNumber = false; + var zi; /* * Without this step: @@ -71412,9 +74250,9 @@ function isValidZ(z) { return (allRowsAreArrays && oneRowIsFilled && hasOneNumber); } -},{"../../lib":169,"../../registry":259,"fast-isnumeric":18}],332:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"fast-isnumeric":18}],331:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71424,6 +74262,9 @@ function isValidZ(z) { 'use strict'; var barAttrs = _dereq_('../bar/attributes'); +var hovertemplateAttrs = _dereq_('../../components/fx/hovertemplate_attributes'); +var makeBinAttrs = _dereq_('./bin_attributes'); +var constants = _dereq_('./constants'); module.exports = { x: { @@ -71485,19 +74326,6 @@ module.exports = { }, editType: 'calc' }, - - autobinx: { - valType: 'boolean', - dflt: null, - - editType: 'calc', - impliedEdits: { - 'xbins.start': undefined, - 'xbins.end': undefined, - 'xbins.size': undefined - }, - - }, nbinsx: { valType: 'integer', min: 0, @@ -71506,20 +74334,8 @@ module.exports = { editType: 'calc', }, - xbins: makeBinsAttr('x'), + xbins: makeBinAttrs('x', true), - autobiny: { - valType: 'boolean', - dflt: null, - - editType: 'calc', - impliedEdits: { - 'ybins.start': undefined, - 'ybins.end': undefined, - 'ybins.size': undefined - }, - - }, nbinsy: { valType: 'integer', min: 0, @@ -71528,7 +74344,25 @@ module.exports = { editType: 'calc', }, - ybins: makeBinsAttr('y'), + ybins: makeBinAttrs('y', true), + autobinx: { + valType: 'boolean', + dflt: null, + + editType: 'calc', + + }, + autobiny: { + valType: 'boolean', + dflt: null, + + editType: 'calc', + + }, + + hovertemplate: hovertemplateAttrs({}, { + keys: constants.eventDataKeys + }), marker: barAttrs.marker, @@ -71540,45 +74374,9 @@ module.exports = { } }; -function makeBinsAttr(axLetter) { - var impliedEdits = {}; - impliedEdits['autobin' + axLetter] = false; - var impliedEditsInner = {}; - impliedEditsInner['^autobin' + axLetter] = false; - - return { - start: { - valType: 'any', // for date axes - dflt: null, - - editType: 'calc', - impliedEdits: impliedEditsInner, - - }, - end: { - valType: 'any', // for date axes - dflt: null, - - editType: 'calc', - impliedEdits: impliedEditsInner, - - }, - size: { - valType: 'any', // for date axes - dflt: null, - - editType: 'calc', - impliedEdits: impliedEditsInner, - - }, - editType: 'calc', - impliedEdits: impliedEdits - }; -} - -},{"../bar/attributes":269}],333:[function(_dereq_,module,exports){ +},{"../../components/fx/hovertemplate_attributes":89,"../bar/attributes":267,"./bin_attributes":333,"./constants":337}],332:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71590,8 +74388,8 @@ function makeBinsAttr(axLetter) { module.exports = function doAvg(size, counts) { - var nMax = size.length, - total = 0; + var nMax = size.length; + var total = 0; for(var i = 0; i < nMax; i++) { if(counts[i]) { size[i] /= counts[i]; @@ -71602,43 +74400,44 @@ module.exports = function doAvg(size, counts) { return total; }; -},{}],334:[function(_dereq_,module,exports){ +},{}],333:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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'; - -module.exports = function handleBinDefaults(traceIn, traceOut, coerce, binDirections) { - coerce('histnorm'); - - binDirections.forEach(function(binDirection) { - /* - * Because date axes have string values for start and end, - * and string options for size, we cannot validate these attributes - * now. We will do this during calc (immediately prior to binning) - * in ./clean_bins, and push the cleaned values back to _fullData. - */ - coerce(binDirection + 'bins.start'); - coerce(binDirection + 'bins.end'); - coerce(binDirection + 'bins.size'); - - var autobin = coerce('autobin' + binDirection); - if(autobin !== false) coerce('nbins' + binDirection); - }); - - return traceOut; +module.exports = function makeBinAttrs(axLetter, match) { + return { + start: { + valType: 'any', // for date axes + + editType: 'calc', + + }, + end: { + valType: 'any', // for date axes + + editType: 'calc', + + }, + size: { + valType: 'any', // for date axes + + editType: 'calc', + + }, + editType: 'calc' + }; }; -},{}],335:[function(_dereq_,module,exports){ +},{}],334:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71712,9 +74511,9 @@ module.exports = { } }; -},{"fast-isnumeric":18}],336:[function(_dereq_,module,exports){ +},{"fast-isnumeric":18}],335:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71890,9 +74689,9 @@ function dateParts(v, pa, calendar) { return parts; } -},{"../../constants/numerical":151,"../../plots/cartesian/axes":214}],337:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../plots/cartesian/axes":212}],336:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71911,8 +74710,6 @@ var arraysToCalcdata = _dereq_('../bar/arrays_to_calcdata'); var binFunctions = _dereq_('./bin_functions'); var normFunctions = _dereq_('./norm_functions'); var doAvg = _dereq_('./average'); -var cleanBins = _dereq_('./clean_bins'); -var oneMonth = _dereq_('../../constants/numerical').ONEAVGMONTH; var getBinSpanLabelRound = _dereq_('./bin_label_vals'); module.exports = function calc(gd, trace) { @@ -71931,8 +74728,6 @@ module.exports = function calc(gd, trace) { var cumulativeSpec = trace.cumulative; var i; - cleanBins(trace, pa, mainData); - var binsAndPos = calcAllAutoBins(gd, trace, pa, mainData); var binSpec = binsAndPos[0]; var pos0 = binsAndPos[1]; @@ -72110,8 +74905,26 @@ module.exports = function calc(gd, trace) { */ function calcAllAutoBins(gd, trace, pa, mainData, _overlayEdgeCase) { var binAttr = mainData + 'bins'; - var isOverlay = gd._fullLayout.barmode === 'overlay'; - var i, tracei, calendar, firstManual, pos0; + var fullLayout = gd._fullLayout; + var isOverlay = fullLayout.barmode === 'overlay'; + var i, traces, tracei, calendar, pos0, autoVals, cumulativeSpec; + + var cleanBound = (pa.type === 'date') ? + function(v) { return (v || v === 0) ? Lib.cleanDate(v, null, pa.calendar) : null; } : + function(v) { return isNumeric(v) ? Number(v) : null; }; + + function setBound(attr, bins, newBins) { + if(bins[attr + 'Found']) { + bins[attr] = cleanBound(bins[attr]); + if(bins[attr] === null) bins[attr] = newBins[attr]; + } + else { + autoVals[attr] = bins[attr] = newBins[attr]; + Lib.nestedProperty(traces[0], binAttr + '.' + attr).set(newBins[attr]); + } + } + + var binOpts = fullLayout._histogramBinOpts[trace._groupName]; // all but the first trace in this group has already been marked finished // clear this flag, so next time we run calc we will run autobin again @@ -72119,121 +74932,136 @@ function calcAllAutoBins(gd, trace, pa, mainData, _overlayEdgeCase) { delete trace._autoBinFinished; } else { - // must be the first trace in the group - do the autobinning on them all - - // find all grouped traces - in overlay mode each trace is independent - var traceGroup = isOverlay ? [trace] : getConnectedHistograms(gd, trace); - var autoBinnedTraces = []; - - var minSize = Infinity; - var minStart = Infinity; - var maxEnd = -Infinity; - - var autoBinAttr = 'autobin' + mainData; - - for(i = 0; i < traceGroup.length; i++) { - tracei = traceGroup[i]; - - // stash pos0 on the trace so we don't need to duplicate this - // in the main body of calc - pos0 = tracei._pos0 = pa.makeCalcdata(tracei, mainData); - var binSpec = tracei[binAttr]; - - if((tracei[autoBinAttr]) || !binSpec || - binSpec.start === null || binSpec.end === null) { - calendar = tracei[mainData + 'calendar']; - var cumulativeSpec = tracei.cumulative; - - binSpec = Axes.autoBin(pos0, pa, tracei['nbins' + mainData], false, calendar); - - // Edge case: single-valued histogram overlaying others - // Use them all together to calculate the bin size for the single-valued one - if(isOverlay && binSpec._dataSpan === 0 && pa.type !== 'category') { - // Several single-valued histograms! Stop infinite recursion, - // just return an extra flag that tells handleSingleValueOverlays - // to sort out this trace too - if(_overlayEdgeCase) return [binSpec, pos0, true]; - - binSpec = handleSingleValueOverlays(gd, trace, pa, mainData, binAttr); - } - - // adjust for CDF edge cases - if(cumulativeSpec.enabled && (cumulativeSpec.currentbin !== 'include')) { - if(cumulativeSpec.direction === 'decreasing') { - minStart = Math.min(minStart, pa.r2c(binSpec.start, 0, calendar) - binSpec.size); + traces = binOpts.traces; + var sizeFound = binOpts.sizeFound; + var allPos = []; + autoVals = traces[0]._autoBin = {}; + // Note: we're including `legendonly` traces here for autobin purposes, + // so that showing & hiding from the legend won't affect bins. + // But this complicates things a bit since those traces don't `calc`, + // hence `isFirstVisible`. + var isFirstVisible = true; + for(i = 0; i < traces.length; i++) { + tracei = traces[i]; + if(tracei.visible) { + pos0 = tracei._pos0 = pa.makeCalcdata(tracei, mainData); + allPos = Lib.concat(allPos, pos0); + delete tracei._autoBinFinished; + if(trace.visible === true) { + if(isFirstVisible) { + isFirstVisible = false; } else { - maxEnd = Math.max(maxEnd, pa.r2c(binSpec.end, 0, calendar) + binSpec.size); + delete tracei._autoBin; + tracei._autoBinFinished = 1; } } - - // note that it's possible to get here with an explicit autobin: false - // if the bins were not specified. mark this trace for followup - autoBinnedTraces.push(tracei); } - else if(!firstManual) { - // Remember the first manually set binSpec. We'll try to be extra - // accommodating of this one, so other bins line up with these. - // But if there's more than one manual bin set and they're mutually - // inconsistent, then there's not much we can do... - firstManual = { - size: binSpec.size, - start: pa.r2c(binSpec.start, 0, calendar), - end: pa.r2c(binSpec.end, 0, calendar) - }; + } + calendar = traces[0][mainData + 'calendar']; + var newBinSpec = Axes.autoBin( + allPos, pa, binOpts.nbins, false, calendar, sizeFound && binOpts.size); + + // Edge case: single-valued histogram overlaying others + // Use them all together to calculate the bin size for the single-valued one + if(isOverlay && newBinSpec._dataSpan === 0 && + pa.type !== 'category' && pa.type !== 'multicategory') { + // Several single-valued histograms! Stop infinite recursion, + // just return an extra flag that tells handleSingleValueOverlays + // to sort out this trace too + if(_overlayEdgeCase) return [newBinSpec, pos0, true]; + + newBinSpec = handleSingleValueOverlays(gd, trace, pa, mainData, binAttr); + } + + // adjust for CDF edge cases + cumulativeSpec = tracei.cumulative; + if(cumulativeSpec.enabled && (cumulativeSpec.currentbin !== 'include')) { + if(cumulativeSpec.direction === 'decreasing') { + newBinSpec.start = pa.c2r(Axes.tickIncrement( + pa.r2c(newBinSpec.start, 0, calendar), + newBinSpec.size, true, calendar + )); + } + else { + newBinSpec.end = pa.c2r(Axes.tickIncrement( + pa.r2c(newBinSpec.end, 0, calendar), + newBinSpec.size, false, calendar + )); } - - // Even non-autobinned traces get included here, so we get the greatest extent - // and minimum bin size of them all. - // But manually binned traces won't be adjusted, even if the auto values - // are inconsistent with the manual ones (or the manual ones are inconsistent - // with each other). - minSize = getMinSize(minSize, binSpec.size); - minStart = Math.min(minStart, pa.r2c(binSpec.start, 0, calendar)); - maxEnd = Math.max(maxEnd, pa.r2c(binSpec.end, 0, calendar)); - - // add the flag that lets us abort autobin on later traces - if(i) tracei._autoBinFinished = 1; } - // do what we can to match the auto bins to the first manual bins - // but only if sizes are all numeric - if(firstManual && isNumeric(firstManual.size) && isNumeric(minSize)) { - // first need to ensure the bin size is the same as or an integer fraction - // of the first manual bin - // allow the bin size to increase just under the autobin step size to match, - // (which is a factor of 2 or 2.5) otherwise shrink it - if(minSize > firstManual.size / 1.9) minSize = firstManual.size; - else minSize = firstManual.size / Math.ceil(firstManual.size / minSize); - - // now decrease minStart if needed to make the bin centers line up - var adjustedFirstStart = firstManual.start + (firstManual.size - minSize) / 2; - minStart = adjustedFirstStart - minSize * Math.ceil((adjustedFirstStart - minStart) / minSize); + binOpts.size = newBinSpec.size; + if(!sizeFound) { + autoVals.size = newBinSpec.size; + Lib.nestedProperty(traces[0], binAttr + '.size').set(newBinSpec.size); } - // now go back to the autobinned traces and update their bin specs with the final values - for(i = 0; i < autoBinnedTraces.length; i++) { - tracei = autoBinnedTraces[i]; - calendar = tracei[mainData + 'calendar']; - - tracei._input[binAttr] = tracei[binAttr] = { - start: pa.c2r(minStart, 0, calendar), - end: pa.c2r(maxEnd, 0, calendar), - size: minSize - }; - - // note that it's possible to get here with an explicit autobin: false - // if the bins were not specified. - // in that case this will remain in the trace, so that future updates - // which would change the autobinning will not do so. - tracei._input[autoBinAttr] = tracei[autoBinAttr]; - } + setBound('start', binOpts, newBinSpec); + setBound('end', binOpts, newBinSpec); } pos0 = trace._pos0; delete trace._pos0; - return [trace[binAttr], pos0]; + // Each trace can specify its own start/end, or if omitted + // we ensure they're beyond the bounds of this trace's data, + // and we need to make sure start is aligned with the main start + var traceInputBins = trace._input[binAttr] || {}; + var traceBinOptsCalc = Lib.extendFlat({}, binOpts); + var mainStart = binOpts.start; + var startIn = pa.r2l(traceInputBins.start); + var hasStart = startIn !== undefined; + if((binOpts.startFound || hasStart) && startIn !== pa.r2l(mainStart)) { + // We have an explicit start to reconcile across traces + // if this trace has an explicit start, shift it down to a bin edge + // if another trace had an explicit start, shift it down to a + // bin edge past our data + var traceStart = hasStart ? + startIn : + Lib.aggNums(Math.min, null, pos0); + + var dummyAx = { + type: (pa.type === 'category' || pa.type === 'multicategory') ? 'linear' : pa.type, + r2l: pa.r2l, + dtick: binOpts.size, + tick0: mainStart, + calendar: calendar, + range: ([traceStart, Axes.tickIncrement(traceStart, binOpts.size, false, calendar)]).map(pa.l2r) + }; + var newStart = Axes.tickFirst(dummyAx); + if(newStart > pa.r2l(traceStart)) { + newStart = Axes.tickIncrement(newStart, binOpts.size, true, calendar); + } + traceBinOptsCalc.start = pa.l2r(newStart); + if(!hasStart) Lib.nestedProperty(trace, binAttr + '.start').set(traceBinOptsCalc.start); + } + + var mainEnd = binOpts.end; + var endIn = pa.r2l(traceInputBins.end); + var hasEnd = endIn !== undefined; + if((binOpts.endFound || hasEnd) && endIn !== pa.r2l(mainEnd)) { + // Reconciling an explicit end is easier, as it doesn't need to + // match bin edges + var traceEnd = hasEnd ? + endIn : + Lib.aggNums(Math.max, null, pos0); + + traceBinOptsCalc.end = pa.l2r(traceEnd); + if(!hasEnd) Lib.nestedProperty(trace, binAttr + '.start').set(traceBinOptsCalc.end); + } + + // Backward compatibility for one-time autobinning. + // autobin: true is handled in cleanData, but autobin: false + // needs to be here where we have determined the values. + var autoBinAttr = 'autobin' + mainData; + if(trace._input[autoBinAttr] === false) { + trace._input[binAttr] = Lib.extendFlat({}, trace[binAttr] || {}); + delete trace._input[autoBinAttr]; + delete trace[autoBinAttr]; + } + + return [traceBinOptsCalc, pos0]; } /* @@ -72342,25 +75170,6 @@ function getConnectedHistograms(gd, trace) { } -/* - * getMinSize: find the smallest given that size can be a string code - * ie 'M6' for 6 months. ('L' wouldn't make sense to compare with numeric sizes) - */ -function getMinSize(size1, size2) { - if(size1 === Infinity) return size2; - var sizeNumeric1 = numericSize(size1); - var sizeNumeric2 = numericSize(size2); - return sizeNumeric2 < sizeNumeric1 ? size2 : size1; -} - -function numericSize(size) { - if(isNumeric(size)) return size; - if(typeof size === 'string' && size.charAt(0) === 'M') { - return oneMonth * +(size.substr(1)); - } - return Infinity; -} - function cdf(size, direction, currentBin) { var i, vi, prevSum; @@ -72413,9 +75222,9 @@ function cdf(size, direction, currentBin) { } } -},{"../../constants/numerical":151,"../../lib":169,"../../plots/cartesian/axes":214,"../bar/arrays_to_calcdata":268,"./average":333,"./bin_functions":335,"./bin_label_vals":336,"./clean_bins":338,"./norm_functions":343,"fast-isnumeric":18}],338:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"../bar/arrays_to_calcdata":266,"./average":332,"./bin_functions":334,"./bin_label_vals":335,"./norm_functions":343,"fast-isnumeric":18}],337:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72424,78 +75233,128 @@ function cdf(size, direction, currentBin) { 'use strict'; -var isNumeric = _dereq_('fast-isnumeric'); -var cleanDate = _dereq_('../../lib').cleanDate; -var constants = _dereq_('../../constants/numerical'); -var ONEDAY = constants.ONEDAY; -var BADNUM = constants.BADNUM; -/* - * cleanBins: validate attributes autobin[xy] and [xy]bins.(start, end, size) - * Mutates trace so all these attributes are valid. - * - * Normally this kind of thing would happen during supplyDefaults, but - * in this case we need to know the axis type, and axis type isn't set until - * after trace supplyDefaults are completed. So this gets called during the - * calc step, when data are inserted into bins. - */ -module.exports = function cleanBins(trace, ax, binDirection) { - var axType = ax.type, - binAttr = binDirection + 'bins', - bins = trace[binAttr]; +module.exports = { + eventDataKeys: ['binNumber'] +}; - if(!bins) bins = trace[binAttr] = {}; +},{}],338:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, 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. +*/ - var cleanBound = (axType === 'date') ? - function(v) { return (v || v === 0) ? cleanDate(v, BADNUM, bins.calendar) : null; } : - function(v) { return isNumeric(v) ? Number(v) : null; }; - bins.start = cleanBound(bins.start); - bins.end = cleanBound(bins.end); +'use strict'; - // logic for bin size is very similar to dtick (cartesian/tick_value_defaults) - // but without the extra string options for log axes - // ie the only strings we accept are M for months - var sizeDflt = (axType === 'date') ? ONEDAY : 1, - binSize = bins.size; +var Lib = _dereq_('../../lib'); +var nestedProperty = Lib.nestedProperty; - if(isNumeric(binSize)) { - bins.size = (binSize > 0) ? Number(binSize) : sizeDflt; +var attributes = _dereq_('./attributes'); + +var BINATTRS = { + x: [ + {aStr: 'xbins.start', name: 'start'}, + {aStr: 'xbins.end', name: 'end'}, + {aStr: 'xbins.size', name: 'size'}, + {aStr: 'nbinsx', name: 'nbins'} + ], + y: [ + {aStr: 'ybins.start', name: 'start'}, + {aStr: 'ybins.end', name: 'end'}, + {aStr: 'ybins.size', name: 'size'}, + {aStr: 'nbinsy', name: 'nbins'} + ] +}; + +// handle bin attrs and relink auto-determined values so fullData is complete +module.exports = function crossTraceDefaults(fullData, fullLayout) { + var allBinOpts = fullLayout._histogramBinOpts = {}; + var isOverlay = fullLayout.barmode === 'overlay'; + var i, j, traceOut, traceIn, binDirection, group, binOpts; + + function coerce(attr) { + return Lib.coerce(traceOut._input, traceOut, attributes, attr); } - else if(typeof binSize !== 'string') { - bins.size = sizeDflt; - } - else { - // date special case: "M" gives bins every (integer) n months - var prefix = binSize.charAt(0), - sizeNum = binSize.substr(1); - sizeNum = isNumeric(sizeNum) ? Number(sizeNum) : 0; - if((sizeNum <= 0) || !( - axType === 'date' && prefix === 'M' && sizeNum === Math.round(sizeNum) - )) { - bins.size = sizeDflt; + for(i = 0; i < fullData.length; i++) { + traceOut = fullData[i]; + if(traceOut.type !== 'histogram') continue; + + // TODO: this shouldn't be relinked as it's only used within calc + // https://github.com/plotly/plotly.js/issues/749 + delete traceOut._autoBinFinished; + + binDirection = traceOut.orientation === 'v' ? 'x' : 'y'; + // in overlay mode make a separate group for each trace + // otherwise collect all traces of the same subplot & orientation + group = isOverlay ? traceOut.uid : (traceOut.xaxis + traceOut.yaxis + binDirection); + traceOut._groupName = group; + + binOpts = allBinOpts[group]; + + if(binOpts) { + binOpts.traces.push(traceOut); + } + else { + binOpts = allBinOpts[group] = { + traces: [traceOut], + direction: binDirection + }; } } - var autoBinAttr = 'autobin' + binDirection; + for(group in allBinOpts) { + binOpts = allBinOpts[group]; + binDirection = binOpts.direction; + var attrs = BINATTRS[binDirection]; + for(j = 0; j < attrs.length; j++) { + var attrSpec = attrs[j]; + var attr = attrSpec.name; - if(typeof trace[autoBinAttr] !== 'boolean') { - trace[autoBinAttr] = trace._fullInput[autoBinAttr] = trace._input[autoBinAttr] = !( - (bins.start || bins.start === 0) && - (bins.end || bins.end === 0) - ); - } + // nbins(x|y) is moot if we have a size. This depends on + // nbins coming after size in binAttrs. + if(attr === 'nbins' && binOpts.sizeFound) continue; - if(!trace[autoBinAttr]) { - delete trace['nbins' + binDirection]; - delete trace._fullInput['nbins' + binDirection]; + var aStr = attrSpec.aStr; + for(i = 0; i < binOpts.traces.length; i++) { + traceOut = binOpts.traces[i]; + traceIn = traceOut._input; + if(nestedProperty(traceIn, aStr).get() !== undefined) { + binOpts[attr] = coerce(aStr); + binOpts[attr + 'Found'] = true; + break; + } + var autoVals = traceOut._autoBin; + if(autoVals && autoVals[attr]) { + // if this is the *first* autoval + nestedProperty(traceOut, aStr).set(autoVals[attr]); + } + } + // start and end we need to coerce anyway, after having collected the + // first of each into binOpts, in case a trace wants to restrict its + // data to a certain range + if(attr === 'start' || attr === 'end') { + for(; i < binOpts.traces.length; i++) { + traceOut = binOpts.traces[i]; + coerce(aStr, (traceOut._autoBin || {})[attr]); + } + } + + if(attr === 'nbins' && !binOpts.sizeFound && !binOpts.nbinsFound) { + traceOut = binOpts.traces[0]; + binOpts[attr] = coerce(aStr); + } + } } }; -},{"../../constants/numerical":151,"../../lib":169,"fast-isnumeric":18}],339:[function(_dereq_,module,exports){ +},{"../../lib":168,"./attributes":331}],339:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72509,7 +75368,6 @@ var Registry = _dereq_('../../registry'); var Lib = _dereq_('../../lib'); var Color = _dereq_('../../components/color'); -var handleBinDefaults = _dereq_('./bin_defaults'); var handleStyleDefaults = _dereq_('../bar/style_defaults'); var attributes = _dereq_('./attributes'); @@ -72533,7 +75391,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var sampleLetter = orientation === 'v' ? 'x' : 'y'; var aggLetter = orientation === 'v' ? 'y' : 'x'; - var len = (x && y) ? Math.min(x.length && y.length) : (traceOut[sampleLetter] || []).length; + var len = (x && y) ? + Math.min(Lib.minRowLength(x) && Lib.minRowLength(y)) : + Lib.minRowLength(traceOut[sampleLetter] || []); if(!len) { traceOut.visible = false; @@ -72547,22 +75407,29 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var hasAggregationData = traceOut[aggLetter]; if(hasAggregationData) coerce('histfunc'); + coerce('histnorm'); - handleBinDefaults(traceIn, traceOut, coerce, [sampleLetter]); + // Note: bin defaults are now handled in Histogram.crossTraceDefaults + // autobin(x|y) are only included here to appease Plotly.validate + coerce('autobin' + sampleLetter); + + coerce('hovertemplate'); handleStyleDefaults(traceIn, traceOut, coerce, defaultColor, layout); + Lib.coerceSelectionMarkerOpacity(traceOut, coerce); + + var lineColor = (traceOut.marker.line || {}).color; + // override defaultColor for error bars with defaultLine var errorBarsSupplyDefaults = Registry.getComponentMethod('errorbars', 'supplyDefaults'); - errorBarsSupplyDefaults(traceIn, traceOut, Color.defaultLine, {axis: 'y'}); - errorBarsSupplyDefaults(traceIn, traceOut, Color.defaultLine, {axis: 'x', inherit: 'y'}); - - Lib.coerceSelectionMarkerOpacity(traceOut, coerce); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'y'}); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'}); }; -},{"../../components/color":50,"../../lib":169,"../../registry":259,"../bar/style_defaults":281,"./attributes":332,"./bin_defaults":334}],340:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../../registry":257,"../bar/style_defaults":281,"./attributes":331}],340:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72608,7 +75475,7 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { },{}],341:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72636,12 +75503,14 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { pointData[posLetter + 'Label'] = hoverLabelText(pointData[posLetter + 'a'], di.ph0, di.ph1); } + if(trace.hovermplate) pointData.hovertemplate = trace.hovertemplate; + return pts; }; -},{"../../plots/cartesian/axes":214,"../bar/hover":273}],342:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":212,"../bar/hover":273}],342:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72670,6 +75539,7 @@ var Histogram = {}; Histogram.attributes = _dereq_('./attributes'); Histogram.layoutAttributes = _dereq_('../bar/layout_attributes'); Histogram.supplyDefaults = _dereq_('./defaults'); +Histogram.crossTraceDefaults = _dereq_('./cross_trace_defaults'); Histogram.supplyLayoutDefaults = _dereq_('../bar/layout_defaults'); Histogram.calc = _dereq_('./calc'); Histogram.crossTraceCalc = _dereq_('../bar/cross_trace_calc').crossTraceCalc; @@ -72692,9 +75562,9 @@ Histogram.meta = { module.exports = Histogram; -},{"../../plots/cartesian":225,"../bar/cross_trace_calc":271,"../bar/layout_attributes":275,"../bar/layout_defaults":276,"../bar/plot":277,"../bar/select":278,"../bar/style":280,"../scatter/marker_colorbar":384,"./attributes":332,"./calc":337,"./defaults":339,"./event_data":340,"./hover":341}],343:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../bar/cross_trace_calc":270,"../bar/layout_attributes":275,"../bar/layout_defaults":276,"../bar/plot":277,"../bar/select":278,"../bar/style":280,"../scatter/marker_colorbar":385,"./attributes":331,"./calc":336,"./cross_trace_defaults":338,"./defaults":339,"./event_data":340,"./hover":341}],343:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72707,8 +75577,8 @@ module.exports = Histogram; module.exports = { percent: function(size, total) { - var nMax = size.length, - norm = 100 / total; + var nMax = size.length; + var norm = 100 / total; for(var n = 0; n < nMax; n++) size[n] *= norm; }, probability: function(size, total) { @@ -72729,7 +75599,7 @@ module.exports = { },{}],344:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72739,6 +75609,7 @@ module.exports = { 'use strict'; var histogramAttrs = _dereq_('../histogram/attributes'); +var makeBinAttrs = _dereq_('../histogram/bin_attributes'); var heatmapAttrs = _dereq_('../heatmap/attributes'); var colorscaleAttrs = _dereq_('../../components/colorscale/attributes'); var colorbarAttrs = _dereq_('../../components/colorbar/attributes'); @@ -72766,12 +75637,12 @@ module.exports = extendFlat( histnorm: histogramAttrs.histnorm, histfunc: histogramAttrs.histfunc, - autobinx: histogramAttrs.autobinx, nbinsx: histogramAttrs.nbinsx, - xbins: histogramAttrs.xbins, - autobiny: histogramAttrs.autobiny, + xbins: makeBinAttrs('x'), nbinsy: histogramAttrs.nbinsy, - ybins: histogramAttrs.ybins, + ybins: makeBinAttrs('y'), + autobinx: histogramAttrs.autobinx, + autobiny: histogramAttrs.autobiny, xgap: heatmapAttrs.xgap, ygap: heatmapAttrs.ygap, @@ -72785,9 +75656,9 @@ module.exports = extendFlat( { colorbar: colorbarAttrs } ); -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../lib/extend":163,"../heatmap/attributes":316,"../histogram/attributes":332}],345:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../lib/extend":162,"../heatmap/attributes":316,"../histogram/attributes":331,"../histogram/bin_attributes":333}],345:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72803,7 +75674,6 @@ var Axes = _dereq_('../../plots/cartesian/axes'); var binFunctions = _dereq_('../histogram/bin_functions'); var normFunctions = _dereq_('../histogram/norm_functions'); var doAvg = _dereq_('../histogram/average'); -var cleanBins = _dereq_('../histogram/clean_bins'); var getBinSpanLabelRound = _dereq_('../histogram/bin_label_vals'); @@ -72826,8 +75696,8 @@ module.exports = function calc(gd, trace) { if(y.length > serieslen) y.splice(serieslen, y.length - serieslen); // calculate the bins - cleanAndAutobin(trace, 'x', x, xa, xr2c, xc2r, xcalendar); - cleanAndAutobin(trace, 'y', y, ya, yr2c, yc2r, ycalendar); + doAutoBin(trace, 'x', x, xa, xr2c, xc2r, xcalendar); + doAutoBin(trace, 'y', y, ya, yr2c, yc2r, ycalendar); // make the empty bin array & scale the map var z = []; @@ -72868,10 +75738,10 @@ module.exports = function calc(gd, trace) { } // decrease end a little in case of rounding errors - var binSpec = trace.xbins, - binStart = xr2c(binSpec.start), - binEnd = xr2c(binSpec.end) + - (binStart - Axes.tickIncrement(binStart, binSpec.size, false, xcalendar)) / 1e6; + var binSpec = trace.xbins; + var binStart = xr2c(binSpec.start); + var binEnd = xr2c(binSpec.end) + + (binStart - Axes.tickIncrement(binStart, binSpec.size, false, xcalendar)) / 1e6; for(i = binStart; i < binEnd; i = Axes.tickIncrement(i, binSpec.size, false, xcalendar)) { onecol.push(sizeinit); @@ -72970,31 +75840,49 @@ module.exports = function calc(gd, trace) { }; }; -function cleanAndAutobin(trace, axLetter, data, ax, r2c, c2r, calendar) { - var binSpecAttr = axLetter + 'bins'; - var autoBinAttr = 'autobin' + axLetter; - var binSpec = trace[binSpecAttr]; +function doAutoBin(trace, axLetter, data, ax, r2c, c2r, calendar) { + var binAttr = axLetter + 'bins'; + var binSpec = trace[binAttr]; + if(!binSpec) binSpec = trace[binAttr] = {}; + var inputBinSpec = trace._input[binAttr] || {}; + var autoBin = trace._autoBin = {}; - cleanBins(trace, ax, axLetter); + // clear out any previously added autobin info + if(!inputBinSpec.size) delete binSpec.size; + if(inputBinSpec.start === undefined) delete binSpec.start; + if(inputBinSpec.end === undefined) delete binSpec.end; - if(trace[autoBinAttr] || !binSpec || binSpec.start === null || binSpec.end === null) { - binSpec = Axes.autoBin(data, ax, trace['nbins' + axLetter], '2d', calendar); + var autoSize = !binSpec.size; + var autoStart = binSpec.start === undefined; + var autoEnd = binSpec.end === undefined; + + if(autoSize || autoStart || autoEnd) { + var newBinSpec = Axes.autoBin(data, ax, trace['nbins' + axLetter], '2d', calendar, binSpec.size); if(trace.type === 'histogram2dcontour') { - // the "true" last argument reverses the tick direction (which we can't + // the "true" 2nd argument reverses the tick direction (which we can't // just do with a minus sign because of month bins) - binSpec.start = c2r(Axes.tickIncrement( - r2c(binSpec.start), binSpec.size, true, calendar)); - binSpec.end = c2r(Axes.tickIncrement( - r2c(binSpec.end), binSpec.size, false, calendar)); + if(autoStart) { + newBinSpec.start = c2r(Axes.tickIncrement( + r2c(newBinSpec.start), newBinSpec.size, true, calendar)); + } + if(autoEnd) { + newBinSpec.end = c2r(Axes.tickIncrement( + r2c(newBinSpec.end), newBinSpec.size, false, calendar)); + } } + if(autoSize) binSpec.size = autoBin.size = newBinSpec.size; + if(autoStart) binSpec.start = autoBin.start = newBinSpec.start; + if(autoEnd) binSpec.end = autoBin.end = newBinSpec.end; + } - // copy bin info back to the source data. - trace._input[binSpecAttr] = trace[binSpecAttr] = binSpec; - // note that it's possible to get here with an explicit autobin: false - // if the bins were not specified. - // in that case this will remain in the trace, so that future updates - // which would change the autobinning will not do so. - trace._input[autoBinAttr] = trace[autoBinAttr]; + // Backward compatibility for one-time autobinning. + // autobin: true is handled in cleanData, but autobin: false + // needs to be here where we have determined the values. + var autoBinAttr = 'autobin' + axLetter; + if(trace._input[autoBinAttr] === false) { + trace._input[binAttr] = Lib.extendFlat({}, binSpec); + delete trace._input[autoBinAttr]; + delete trace[autoBinAttr]; } } @@ -73033,9 +75921,104 @@ function getRanges(edges, uniqueVals, gapLow, gapHigh, ax, calendar) { return out; } -},{"../../lib":169,"../../plots/cartesian/axes":214,"../histogram/average":333,"../histogram/bin_functions":335,"../histogram/bin_label_vals":336,"../histogram/clean_bins":338,"../histogram/norm_functions":343}],346:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"../histogram/average":332,"../histogram/bin_functions":334,"../histogram/bin_label_vals":335,"../histogram/norm_functions":343}],346:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); + +var BADNUM = _dereq_('../../constants/numerical').BADNUM; +var axisIds = _dereq_('../../plots/cartesian/axis_ids'); +var Lib = _dereq_('../../lib'); + +var attributes = _dereq_('./attributes'); + +var BINDIRECTIONS = ['x', 'y']; + +// Handle bin attrs and relink auto-determined values so fullData is complete +// does not have cross-trace coupling, but moved out here so we have axis types +// and relinked trace._autoBin +module.exports = function crossTraceDefaults(fullData, fullLayout) { + var i, j, traceOut, binDirection; + + function coerce(attr) { + return Lib.coerce(traceOut._input, traceOut, attributes, attr); + } + + for(i = 0; i < fullData.length; i++) { + traceOut = fullData[i]; + var type = traceOut.type; + if(type !== 'histogram2d' && type !== 'histogram2dcontour') continue; + + for(j = 0; j < BINDIRECTIONS.length; j++) { + binDirection = BINDIRECTIONS[j]; + var binAttr = binDirection + 'bins'; + var autoBins = (traceOut._autoBin || {})[binDirection] || {}; + coerce(binAttr + '.start', autoBins.start); + coerce(binAttr + '.end', autoBins.end); + coerce(binAttr + '.size', autoBins.size); + + cleanBins(traceOut, binDirection, fullLayout, autoBins); + + if(!(traceOut[binAttr] || {}).size) coerce('nbins' + binDirection); + } + } +}; + +function cleanBins(trace, binDirection, fullLayout, autoBins) { + var ax = fullLayout[axisIds.id2name(trace[binDirection + 'axis'])]; + var axType = ax.type; + var binAttr = binDirection + 'bins'; + var bins = trace[binAttr]; + var calendar = trace[binDirection + 'calendar']; + + if(!bins) bins = trace[binAttr] = {}; + + var cleanBound = (axType === 'date') ? + function(v, dflt) { return (v || v === 0) ? Lib.cleanDate(v, BADNUM, calendar) : dflt; } : + function(v, dflt) { return isNumeric(v) ? Number(v) : dflt; }; + + bins.start = cleanBound(bins.start, autoBins.start); + bins.end = cleanBound(bins.end, autoBins.end); + + // logic for bin size is very similar to dtick (cartesian/tick_value_defaults) + // but without the extra string options for log axes + // ie the only strings we accept are M for months + var sizeDflt = autoBins.size; + var binSize = bins.size; + + if(isNumeric(binSize)) { + bins.size = (binSize > 0) ? Number(binSize) : sizeDflt; + } + else if(typeof binSize !== 'string') { + bins.size = sizeDflt; + } + else { + // date special case: "M" gives bins every (integer) n months + var prefix = binSize.charAt(0); + var sizeNum = binSize.substr(1); + + sizeNum = isNumeric(sizeNum) ? Number(sizeNum) : 0; + if((sizeNum <= 0) || !( + axType === 'date' && prefix === 'M' && sizeNum === Math.round(sizeNum) + )) { + bins.size = sizeDflt; + } + } +} + +},{"../../constants/numerical":149,"../../lib":168,"../../plots/cartesian/axis_ids":215,"./attributes":344,"fast-isnumeric":18}],347:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73067,9 +76050,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout ); }; -},{"../../components/colorscale/defaults":60,"../../lib":169,"../heatmap/style_defaults":330,"./attributes":344,"./sample_defaults":349}],347:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../lib":168,"../heatmap/style_defaults":329,"./attributes":344,"./sample_defaults":350}],348:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73101,9 +76084,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return pts; }; -},{"../../plots/cartesian/axes":214,"../heatmap/hover":323}],348:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":212,"../heatmap/hover":323}],349:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73117,6 +76100,7 @@ var Histogram2D = {}; Histogram2D.attributes = _dereq_('./attributes'); Histogram2D.supplyDefaults = _dereq_('./defaults'); +Histogram2D.crossTraceDefaults = _dereq_('./cross_trace_defaults'); Histogram2D.calc = _dereq_('../heatmap/calc'); Histogram2D.plot = _dereq_('../heatmap/plot'); Histogram2D.layerName = 'heatmaplayer'; @@ -73136,35 +76120,35 @@ Histogram2D.meta = { module.exports = Histogram2D; -},{"../../plots/cartesian":225,"../heatmap/calc":317,"../heatmap/colorbar":319,"../heatmap/plot":328,"../heatmap/style":329,"../histogram/event_data":340,"./attributes":344,"./defaults":346,"./hover":347}],349:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../heatmap/calc":317,"../heatmap/colorbar":319,"../heatmap/plot":327,"../heatmap/style":328,"../histogram/event_data":340,"./attributes":344,"./cross_trace_defaults":346,"./defaults":347,"./hover":348}],350:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Registry = _dereq_('../../registry'); -var handleBinDefaults = _dereq_('../histogram/bin_defaults'); - +var Lib = _dereq_('../../lib'); module.exports = function handleSampleDefaults(traceIn, traceOut, coerce, layout) { var x = coerce('x'); var y = coerce('y'); + var xlen = Lib.minRowLength(x); + var ylen = Lib.minRowLength(y); // we could try to accept x0 and dx, etc... // but that's a pretty weird use case. // for now require both x and y explicitly specified. - if(!(x && x.length && y && y.length)) { + if(!xlen || !ylen) { traceOut.visible = false; return; } - traceOut._length = Math.min(x.length, y.length); + traceOut._length = Math.min(xlen, ylen); var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults'); handleCalendarDefaults(traceIn, traceOut, ['x', 'y'], layout); @@ -73173,14 +76157,17 @@ module.exports = function handleSampleDefaults(traceIn, traceOut, coerce, layout var hasAggregationData = coerce('z') || coerce('marker.color'); if(hasAggregationData) coerce('histfunc'); + coerce('histnorm'); - var binDirections = ['x', 'y']; - handleBinDefaults(traceIn, traceOut, coerce, binDirections); + // Note: bin defaults are now handled in Histogram2D.crossTraceDefaults + // autobin(x|y) are only included here to appease Plotly.validate + coerce('autobinx'); + coerce('autobiny'); }; -},{"../../registry":259,"../histogram/bin_defaults":334}],350:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],351:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73204,12 +76191,12 @@ module.exports = extendFlat({ histnorm: histogram2dAttrs.histnorm, histfunc: histogram2dAttrs.histfunc, - autobinx: histogram2dAttrs.autobinx, nbinsx: histogram2dAttrs.nbinsx, xbins: histogram2dAttrs.xbins, - autobiny: histogram2dAttrs.autobiny, nbinsy: histogram2dAttrs.nbinsy, ybins: histogram2dAttrs.ybins, + autobinx: histogram2dAttrs.autobinx, + autobiny: histogram2dAttrs.autobiny, autocontour: contourAttrs.autocontour, ncontours: contourAttrs.ncontours, @@ -73224,9 +76211,9 @@ module.exports = extendFlat({ { colorbar: colorbarAttrs } ); -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../lib/extend":163,"../contour/attributes":294,"../histogram2d/attributes":344}],351:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../lib/extend":162,"../contour/attributes":294,"../histogram2d/attributes":344}],352:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73260,9 +76247,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout handleStyleDefaults(traceIn, traceOut, coerce, layout); }; -},{"../../lib":169,"../contour/contours_defaults":301,"../contour/style_defaults":315,"../histogram2d/sample_defaults":349,"./attributes":350}],352:[function(_dereq_,module,exports){ +},{"../../lib":168,"../contour/contours_defaults":301,"../contour/style_defaults":315,"../histogram2d/sample_defaults":350,"./attributes":351}],353:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73276,6 +76263,7 @@ var Histogram2dContour = {}; Histogram2dContour.attributes = _dereq_('./attributes'); Histogram2dContour.supplyDefaults = _dereq_('./defaults'); +Histogram2dContour.crossTraceDefaults = _dereq_('../histogram2d/cross_trace_defaults'); Histogram2dContour.calc = _dereq_('../contour/calc'); Histogram2dContour.plot = _dereq_('../contour/plot').plot; Histogram2dContour.layerName = 'contourlayer'; @@ -73294,9 +76282,9 @@ Histogram2dContour.meta = { module.exports = Histogram2dContour; -},{"../../plots/cartesian":225,"../contour/calc":295,"../contour/colorbar":297,"../contour/hover":307,"../contour/plot":312,"../contour/style":314,"./attributes":350,"./defaults":351}],353:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../contour/calc":295,"../contour/colorbar":297,"../contour/hover":307,"../contour/plot":312,"../contour/style":314,"../histogram2d/cross_trace_defaults":346,"./attributes":351,"./defaults":352}],354:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73308,13 +76296,15 @@ module.exports = Histogram2dContour; var colorAttrs = _dereq_('../../components/color/attributes'); var fontAttrs = _dereq_('../../plots/font_attributes'); var plotAttrs = _dereq_('../../plots/attributes'); +var hovertemplateAttrs = _dereq_('../../components/fx/hovertemplate_attributes'); var domainAttrs = _dereq_('../../plots/domain').attributes; var extendFlat = _dereq_('../../lib/extend').extendFlat; var textFontAttrs = fontAttrs({ editType: 'calc', - colorEditType: 'style', + arrayOk: true, + colorEditType: 'plot', }); @@ -73414,6 +76404,9 @@ module.exports = { hoverinfo: extendFlat({}, plotAttrs.hoverinfo, { flags: ['label', 'text', 'value', 'percent', 'name'] }), + hovertemplate: hovertemplateAttrs({}, { + keys: ['label', 'color', 'value', 'percent', 'text'] + }), textposition: { valType: 'enumerated', @@ -73423,7 +76416,6 @@ module.exports = { editType: 'calc', }, - // TODO make those arrayOk? textfont: extendFlat({}, textFontAttrs, { }), @@ -73434,6 +76426,32 @@ module.exports = { }), + title: { + text: { + valType: 'string', + dflt: '', + + editType: 'calc', + + }, + font: extendFlat({}, textFontAttrs, { + + }), + position: { + valType: 'enumerated', + values: [ + 'top left', 'top center', 'top right', + 'middle center', + 'bottom left', 'bottom center', 'bottom right' + ], + + editType: 'calc', + + }, + + editType: 'calc' + }, + // position and shape domain: domainAttrs({name: 'pie', trace: true, editType: 'calc'}), @@ -73489,12 +76507,36 @@ module.exports = { arrayOk: true, editType: 'calc', + }, + + _deprecated: { + title: { + valType: 'string', + dflt: '', + + editType: 'calc', + + }, + titlefont: extendFlat({}, textFontAttrs, { + + }), + titleposition: { + valType: 'enumerated', + values: [ + 'top left', 'top center', 'top right', + 'middle center', + 'bottom left', 'bottom center', 'bottom right' + ], + + editType: 'calc', + + } } }; -},{"../../components/color/attributes":49,"../../lib/extend":163,"../../plots/attributes":211,"../../plots/domain":239,"../../plots/font_attributes":240}],354:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../components/fx/hovertemplate_attributes":89,"../../lib/extend":162,"../../plots/attributes":209,"../../plots/domain":238,"../../plots/font_attributes":239}],355:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73524,9 +76566,9 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) } }; -},{"../../plots/get_data":242,"../../registry":259}],355:[function(_dereq_,module,exports){ +},{"../../plots/get_data":241,"../../registry":257}],356:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73715,9 +76757,9 @@ function generateExtendedColors(colorList) { return pieColors; } -},{"../../components/color":50,"../../lib":169,"./helpers":358,"fast-isnumeric":18,"tinycolor2":33}],356:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"./helpers":359,"fast-isnumeric":18,"tinycolor2":34}],357:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73769,23 +76811,38 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var textData = coerce('text'); var textInfo = coerce('textinfo', Array.isArray(textData) ? 'text+percent' : 'percent'); coerce('hovertext'); + coerce('hovertemplate'); if(textInfo && textInfo !== 'none') { - var textPosition = coerce('textposition'), - hasBoth = Array.isArray(textPosition) || textPosition === 'auto', - hasInside = hasBoth || textPosition === 'inside', - hasOutside = hasBoth || textPosition === 'outside'; + var textPosition = coerce('textposition'); + var hasBoth = Array.isArray(textPosition) || textPosition === 'auto'; + var hasInside = hasBoth || textPosition === 'inside'; + var hasOutside = hasBoth || textPosition === 'outside'; if(hasInside || hasOutside) { var dfltFont = coerceFont(coerce, 'textfont', layout.font); - if(hasInside) coerceFont(coerce, 'insidetextfont', dfltFont); + if(hasInside) { + var insideTextFontDefault = Lib.extendFlat({}, dfltFont); + var isTraceTextfontColorSet = traceIn.textfont && traceIn.textfont.color; + var isColorInheritedFromLayoutFont = !isTraceTextfontColorSet; + if(isColorInheritedFromLayoutFont) { + delete insideTextFontDefault.color; + } + coerceFont(coerce, 'insidetextfont', insideTextFontDefault); + } if(hasOutside) coerceFont(coerce, 'outsidetextfont', dfltFont); } } handleDomainDefaults(traceOut, layout, coerce); - coerce('hole'); + var hole = coerce('hole'); + var title = coerce('title.text'); + if(title) { + var titlePosition = coerce('title.position', hole ? 'middle center' : 'top center'); + if(!hole && titlePosition === 'middle center') traceOut.title.position = 'top center'; + coerceFont(coerce, 'title.font', layout.font); + } coerce('sort'); coerce('direction'); @@ -73794,9 +76851,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('pull'); }; -},{"../../lib":169,"../../plots/domain":239,"./attributes":353}],357:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/domain":238,"./attributes":354}],358:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73821,6 +76878,8 @@ module.exports = function eventData(pt, trace) { label: pt.label, color: pt.color, value: pt.v, + percent: pt.percent, + text: pt.text, // pt.v (and pt.i below) for backward compatibility v: pt.v @@ -73837,9 +76896,9 @@ module.exports = function eventData(pt, trace) { return out; }; -},{"../../components/fx/helpers":89}],358:[function(_dereq_,module,exports){ +},{"../../components/fx/helpers":86}],359:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73879,9 +76938,9 @@ exports.castOption = function castOption(item, indices) { else if(item) return item; }; -},{"../../lib":169}],359:[function(_dereq_,module,exports){ +},{"../../lib":168}],360:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73915,9 +76974,9 @@ Pie.meta = { module.exports = Pie; -},{"./attributes":353,"./base_plot":354,"./calc":355,"./defaults":356,"./layout_attributes":360,"./layout_defaults":361,"./plot":362,"./style":363,"./style_one":364}],360:[function(_dereq_,module,exports){ +},{"./attributes":354,"./base_plot":355,"./calc":356,"./defaults":357,"./layout_attributes":361,"./layout_defaults":362,"./plot":363,"./style":364,"./style_one":365}],361:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73951,9 +77010,9 @@ module.exports = { } }; -},{}],361:[function(_dereq_,module,exports){ +},{}],362:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73975,9 +77034,9 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) { coerce('extendpiecolors'); }; -},{"../../lib":169,"./layout_attributes":360}],362:[function(_dereq_,module,exports){ +},{"../../lib":168,"./layout_attributes":361}],363:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74000,6 +77059,7 @@ var eventData = _dereq_('./event_data'); module.exports = function plot(gd, cdpie) { var fullLayout = gd._fullLayout; + prerenderTitles(cdpie, gd); scalePies(cdpie, fullLayout._size); var pieGroups = Lib.makeTraceGroups(fullLayout._pielayer, cdpie, 'trace').each(function(cd) { @@ -74076,20 +77136,25 @@ module.exports = function plot(gd, cdpie) { // in case we dragged over the pie from another subplot, // or if hover is turned off - if(hoverinfo !== 'none' && hoverinfo !== 'skip' && hoverinfo) { + if(trace2.hovertemplate || (hoverinfo !== 'none' && hoverinfo !== 'skip' && hoverinfo)) { var rInscribed = getInscribedRadiusFraction(pt, cd0); var hoverCenterX = cx + pt.pxmid[0] * (1 - rInscribed); var hoverCenterY = cy + pt.pxmid[1] * (1 - rInscribed); var separators = fullLayout.separators; var thisText = []; - if(hoverinfo.indexOf('label') !== -1) thisText.push(pt.label); - if(hoverinfo.indexOf('text') !== -1) { - var texti = helpers.castOption(trace2.hovertext || trace2.text, pt.pts); + if(hoverinfo && hoverinfo.indexOf('label') !== -1) thisText.push(pt.label); + pt.text = helpers.castOption(trace2.hovertext || trace2.text, pt.pts); + if(hoverinfo && hoverinfo.indexOf('text') !== -1) { + var texti = pt.text; if(texti) thisText.push(texti); } - if(hoverinfo.indexOf('value') !== -1) thisText.push(helpers.formatPieValue(pt.v, separators)); - if(hoverinfo.indexOf('percent') !== -1) thisText.push(helpers.formatPiePercent(pt.v / cd0.vTotal, separators)); + pt.value = pt.v; + pt.valueLabel = helpers.formatPieValue(pt.v, separators); + if(hoverinfo && hoverinfo.indexOf('value') !== -1) thisText.push(pt.valueLabel); + pt.percent = pt.v / cd0.vTotal; + pt.percentLabel = helpers.formatPiePercent(pt.percent, separators); + if(hoverinfo && hoverinfo.indexOf('percent') !== -1) thisText.push(pt.percentLabel); var hoverLabel = trace.hoverlabel; var hoverFont = hoverLabel.font; @@ -74099,13 +77164,18 @@ module.exports = function plot(gd, cdpie) { x1: hoverCenterX + rInscribed * cd0.r, y: hoverCenterY, text: thisText.join('
'), - name: hoverinfo.indexOf('name') !== -1 ? trace2.name : undefined, + name: (trace2.hovertemplate || hoverinfo.indexOf('name') !== -1) ? trace2.name : undefined, idealAlign: pt.pxmid[0] < 0 ? 'left' : 'right', color: helpers.castOption(hoverLabel.bgcolor, pt.pts) || pt.color, borderColor: helpers.castOption(hoverLabel.bordercolor, pt.pts), fontFamily: helpers.castOption(hoverFont.family, pt.pts), fontSize: helpers.castOption(hoverFont.size, pt.pts), - fontColor: helpers.castOption(hoverFont.color, pt.pts) + fontColor: helpers.castOption(hoverFont.color, pt.pts), + + trace: trace2, + hovertemplate: helpers.castOption(trace2.hovertemplate, pt.pts), + hovertemplateLabels: pt, + eventData: [eventData(pt, trace2)] }, { container: fullLayout2._hoverlayer.node(), outerContainer: fullLayout2._paper.node(), @@ -74241,7 +77311,8 @@ module.exports = function plot(gd, cdpie) { 'text-anchor': 'middle' }) .call(Drawing.font, textPosition === 'outside' ? - trace.outsidetextfont : trace.insidetextfont) + determineOutsideTextFont(trace, pt, gd._fullLayout.font) : + determineInsideTextFont(trace, pt, gd._fullLayout.font)) .call(svgTextUtils.convertToTspans, gd); // position the text relative to the slice @@ -74286,6 +77357,47 @@ module.exports = function plot(gd, cdpie) { }); }); + // add the title + var titleTextGroup = d3.select(this).selectAll('g.titletext') + .data(trace.title.text ? [0] : []); + + titleTextGroup.enter().append('g') + .classed('titletext', true); + titleTextGroup.exit().remove(); + + titleTextGroup.each(function() { + var titleText = Lib.ensureSingle(d3.select(this), 'text', '', function(s) { + // prohibit tex interpretation as above + s.attr('data-notex', 1); + }); + + var txt = fullLayout.meta ? + Lib.templateString(trace.title.text, {meta: fullLayout.meta}) : + trace.title.text; + + titleText.text(txt) + .attr({ + 'class': 'titletext', + transform: '', + 'text-anchor': 'middle', + }) + .call(Drawing.font, trace.title.font) + .call(svgTextUtils.convertToTspans, gd); + + var transform; + + if(trace.title.position === 'middle center') { + transform = positionTitleInside(cd0); + } else { + transform = positionTitleOutside(cd0, fullLayout._size); + } + + titleText.attr('transform', + 'translate(' + transform.x + ',' + transform.y + ')' + + (transform.scale < 1 ? ('scale(' + transform.scale + ')') : '') + + 'translate(' + transform.tx + ',' + transform.ty + ')'); + }); + // now make sure no labels overlap (at least within one pie) if(hasOutsideText) scootLabels(quadrants, trace); slices.each(function(pt) { @@ -74349,25 +77461,99 @@ module.exports = function plot(gd, cdpie) { }, 0); }; +function determineOutsideTextFont(trace, pt, layoutFont) { + var color = helpers.castOption(trace.outsidetextfont.color, pt.pts) || + helpers.castOption(trace.textfont.color, pt.pts) || + layoutFont.color; + + var family = helpers.castOption(trace.outsidetextfont.family, pt.pts) || + helpers.castOption(trace.textfont.family, pt.pts) || + layoutFont.family; + + var size = helpers.castOption(trace.outsidetextfont.size, pt.pts) || + helpers.castOption(trace.textfont.size, pt.pts) || + layoutFont.size; + + return { + color: color, + family: family, + size: size + }; +} + +function determineInsideTextFont(trace, pt, layoutFont) { + var customColor = helpers.castOption(trace.insidetextfont.color, pt.pts); + if(!customColor && trace._input.textfont) { + + // Why not simply using trace.textfont? Because if not set, it + // defaults to layout.font which has a default color. But if + // textfont.color and insidetextfont.color don't supply a value, + // a contrasting color shall be used. + customColor = helpers.castOption(trace._input.textfont.color, pt.pts); + } + + var family = helpers.castOption(trace.insidetextfont.family, pt.pts) || + helpers.castOption(trace.textfont.family, pt.pts) || + layoutFont.family; + + var size = helpers.castOption(trace.insidetextfont.size, pt.pts) || + helpers.castOption(trace.textfont.size, pt.pts) || + layoutFont.size; + + return { + color: customColor || Color.contrast(pt.color), + family: family, + size: size + }; +} + +function prerenderTitles(cdpie, gd) { + var fullLayout = gd._fullLayout; + + var cd0, trace; + // Determine the width and height of the title for each pie. + for(var i = 0; i < cdpie.length; i++) { + cd0 = cdpie[i][0]; + trace = cd0.trace; + + if(trace.title.text) { + var txt = fullLayout.meta ? + Lib.templateString(trace.title.text, {meta: fullLayout.meta}) : + trace.title.text; + + var dummyTitle = Drawing.tester.append('text') + .attr('data-notex', 1) + .text(txt) + .call(Drawing.font, trace.title.font) + .call(svgTextUtils.convertToTspans, gd); + var bBox = Drawing.bBox(dummyTitle.node(), true); + cd0.titleBox = { + width: bBox.width, + height: bBox.height, + }; + dummyTitle.remove(); + } + } +} 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 = Math.PI * Math.min(pt.v / cd0.vTotal, 0.5); var ring = 1 - cd0.trace.hole; - var rInscribed = getInscribedRadiusFraction(pt, cd0), + var rInscribed = getInscribedRadiusFraction(pt, cd0); - // 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 - transform = { - scale: rInscribed * cd0.r * 2 / textDiameter, + // 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 * cd0.r * 2 / textDiameter, - // and the center position and rotation in this case - rCenter: 1 - rInscribed, - rotate: 0 - }; + // and the center position and rotation in this case + rCenter: 1 - rInscribed, + rotate: 0 + }; if(transform.scale >= 1) return transform; @@ -74432,6 +77618,93 @@ function transformOutsideText(textBB, pt) { }; } +function positionTitleInside(cd0) { + var textDiameter = + Math.sqrt(cd0.titleBox.width * cd0.titleBox.width + cd0.titleBox.height * cd0.titleBox.height); + return { + x: cd0.cx, + y: cd0.cy, + scale: cd0.trace.hole * cd0.r * 2 / textDiameter, + tx: 0, + ty: - cd0.titleBox.height / 2 + cd0.trace.title.font.size + }; +} + +function positionTitleOutside(cd0, plotSize) { + var scaleX = 1; + var scaleY = 1; + var maxWidth, maxPull; + + var trace = cd0.trace; + // position of the baseline point of the text box in the plot, before scaling. + // we anchored the text in the middle, so the baseline is on the bottom middle + // of the first line of text. + var topMiddle = { + x: cd0.cx, + y: cd0.cy + }; + // relative translation of the text box after scaling + var translate = { + tx: 0, + ty: 0 + }; + + // we reason below as if the baseline is the top middle point of the text box. + // so we must add the font size to approximate the y-coord. of the top. + // note that this correction must happen after scaling. + translate.ty += trace.title.font.size; + maxPull = getMaxPull(trace); + + if(trace.title.position.indexOf('top') !== -1) { + topMiddle.y -= (1 + maxPull) * cd0.r; + translate.ty -= cd0.titleBox.height; + } + else if(trace.title.position.indexOf('bottom') !== -1) { + topMiddle.y += (1 + maxPull) * cd0.r; + } + + if(trace.title.position.indexOf('left') !== -1) { + // we start the text at the left edge of the pie + maxWidth = plotSize.w * (trace.domain.x[1] - trace.domain.x[0]) / 2 + cd0.r; + topMiddle.x -= (1 + maxPull) * cd0.r; + translate.tx += cd0.titleBox.width / 2; + } else if(trace.title.position.indexOf('center') !== -1) { + maxWidth = plotSize.w * (trace.domain.x[1] - trace.domain.x[0]); + } else if(trace.title.position.indexOf('right') !== -1) { + maxWidth = plotSize.w * (trace.domain.x[1] - trace.domain.x[0]) / 2 + cd0.r; + topMiddle.x += (1 + maxPull) * cd0.r; + translate.tx -= cd0.titleBox.width / 2; + } + scaleX = maxWidth / cd0.titleBox.width; + scaleY = getTitleSpace(cd0, plotSize) / cd0.titleBox.height; + return { + x: topMiddle.x, + y: topMiddle.y, + scale: Math.min(scaleX, scaleY), + tx: translate.tx, + ty: translate.ty + }; +} + +function getTitleSpace(cd0, plotSize) { + var trace = cd0.trace; + var pieBoxHeight = plotSize.h * (trace.domain.y[1] - trace.domain.y[0]); + // use at most half of the plot for the title + return Math.min(cd0.titleBox.height, pieBoxHeight / 2); +} + +function getMaxPull(trace) { + var maxPull = trace.pull; + var j; + if(Array.isArray(maxPull)) { + maxPull = 0; + for(j = 0; j < trace.pull.length; j++) { + if(trace.pull[j] > maxPull) maxPull = trace.pull[j]; + } + } + return maxPull; +} + function scootLabels(quadrants, trace) { var xHalf, yHalf, equatorFirst, farthestX, farthestY, xDiffSign, yDiffSign, thisQuad, oppositeQuad, @@ -74548,21 +77821,23 @@ function scalePies(cdpie, plotSize) { for(i = 0; i < cdpie.length; i++) { cd0 = cdpie[i][0]; trace = cd0.trace; + pieBoxWidth = plotSize.w * (trace.domain.x[1] - trace.domain.x[0]); pieBoxHeight = plotSize.h * (trace.domain.y[1] - trace.domain.y[0]); - - maxPull = trace.pull; - if(Array.isArray(maxPull)) { - maxPull = 0; - for(j = 0; j < trace.pull.length; j++) { - if(trace.pull[j] > maxPull) maxPull = trace.pull[j]; - } + // leave some space for the title, if it will be displayed outside + if(trace.title.text && trace.title.position !== 'middle center') { + pieBoxHeight -= getTitleSpace(cd0, plotSize); } + maxPull = getMaxPull(trace); + cd0.r = Math.min(pieBoxWidth, pieBoxHeight) / (2 + 2 * maxPull); cd0.cx = plotSize.l + plotSize.w * (trace.domain.x[1] + trace.domain.x[0]) / 2; - cd0.cy = plotSize.t + plotSize.h * (2 - trace.domain.y[1] - trace.domain.y[0]) / 2; + cd0.cy = plotSize.t + plotSize.h * (1 - trace.domain.y[0]) - pieBoxHeight / 2; + if(trace.title.text && trace.title.position.indexOf('bottom') !== -1) { + cd0.cy -= getTitleSpace(cd0, plotSize); + } if(trace.scalegroup && scaleGroups.indexOf(trace.scalegroup) === -1) { scaleGroups.push(trace.scalegroup); @@ -74639,9 +77914,9 @@ function setCoords(cd) { } } -},{"../../components/color":50,"../../components/drawing":75,"../../components/fx":92,"../../lib":169,"../../lib/svg_text_utils":191,"./event_data":357,"./helpers":358,"d3":16}],363:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../components/fx":90,"../../lib":168,"../../lib/svg_text_utils":189,"./event_data":358,"./helpers":359,"d3":16}],364:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74668,9 +77943,9 @@ module.exports = function style(gd) { }); }; -},{"./style_one":364,"d3":16}],364:[function(_dereq_,module,exports){ +},{"./style_one":365,"d3":16}],365:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74692,9 +77967,9 @@ module.exports = function styleOne(s, pt, trace) { .call(Color.stroke, lineColor); }; -},{"../../components/color":50,"./helpers":358}],365:[function(_dereq_,module,exports){ +},{"../../components/color":51,"./helpers":359}],366:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74744,9 +78019,9 @@ module.exports = function arraysToCalcdata(cd, trace) { } }; -},{"../../lib":169}],366:[function(_dereq_,module,exports){ +},{"../../lib":168}],367:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74755,6 +78030,7 @@ module.exports = function arraysToCalcdata(cd, trace) { 'use strict'; +var hovertemplateAttrs = _dereq_('../../components/fx/hovertemplate_attributes'); var colorAttributes = _dereq_('../../components/colorscale/attributes'); var colorbarAttrs = _dereq_('../../components/colorbar/attributes'); var fontAttrs = _dereq_('../../plots/font_attributes'); @@ -74768,6 +78044,7 @@ module.exports = { x: { valType: 'data_array', editType: 'calc+clearAxisTypes', + anim: true, }, x0: { @@ -74775,6 +78052,7 @@ module.exports = { dflt: 0, editType: 'calc+clearAxisTypes', + anim: true, }, dx: { @@ -74782,11 +78060,13 @@ module.exports = { dflt: 1, editType: 'calc', + anim: true, }, y: { valType: 'data_array', editType: 'calc+clearAxisTypes', + anim: true, }, y0: { @@ -74794,6 +78074,7 @@ module.exports = { dflt: 0, editType: 'calc+clearAxisTypes', + anim: true, }, dy: { @@ -74801,6 +78082,7 @@ module.exports = { dflt: 1, editType: 'calc', + anim: true, }, @@ -74866,11 +78148,15 @@ module.exports = { editType: 'style', }, + hovertemplate: hovertemplateAttrs({}, { + keys: constants.eventDataKeys + }), line: { color: { valType: 'color', editType: 'style', + anim: true, }, width: { @@ -74879,6 +78165,7 @@ module.exports = { dflt: 2, editType: 'style', + anim: true, }, shape: { @@ -74935,6 +78222,7 @@ module.exports = { valType: 'color', editType: 'style', + anim: true, }, marker: extendFlat({ @@ -74954,6 +78242,7 @@ module.exports = { arrayOk: true, editType: 'style', + anim: true, }, size: { @@ -74963,6 +78252,7 @@ module.exports = { arrayOk: true, editType: 'calc', + anim: true, }, maxdisplayed: { @@ -75006,11 +78296,12 @@ module.exports = { arrayOk: true, editType: 'style', + anim: true, }, editType: 'calc' }, - colorAttributes('marker.line') + colorAttributes('marker.line', {anim: true}) ), gradient: { type: { @@ -75033,7 +78324,7 @@ module.exports = { }, editType: 'calc' }, - colorAttributes('marker') + colorAttributes('marker', {anim: true}) ), selected: { marker: { @@ -75140,9 +78431,9 @@ module.exports = { } }; -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../components/drawing":75,"../../components/drawing/attributes":74,"../../lib/extend":163,"../../plots/font_attributes":240,"./constants":371}],367:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../components/drawing":72,"../../components/drawing/attributes":71,"../../components/fx/hovertemplate_attributes":89,"../../lib/extend":162,"../../plots/font_attributes":239,"./constants":371}],368:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75230,7 +78521,7 @@ function calc(gd, trace) { } arraysToCalcdata(cd, trace); - calcColorscale(trace); + calcColorscale(gd, trace); calcSelection(cd, trace); if(stackGroupOpts) { @@ -75430,9 +78721,9 @@ module.exports = { getStackOpts: getStackOpts }; -},{"../../constants/numerical":151,"../../lib":169,"../../plots/cartesian/axes":214,"./arrays_to_calcdata":365,"./calc_selection":368,"./colorscale_calc":370,"./subtypes":390,"fast-isnumeric":18}],368:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"../../plots/cartesian/axes":212,"./arrays_to_calcdata":366,"./calc_selection":369,"./colorscale_calc":370,"./subtypes":391,"fast-isnumeric":18}],369:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75449,81 +78740,52 @@ module.exports = function calcSelection(cd, trace) { } }; -},{"../../lib":169}],369:[function(_dereq_,module,exports){ +},{"../../lib":168}],370:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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'; - -// remove opacity for any trace that has a fill or is filled to -module.exports = function cleanData(fullData) { - for(var i = 0; i < fullData.length; i++) { - var tracei = fullData[i]; - if(tracei.type !== 'scatter') continue; - - var filli = tracei.fill; - if(filli === 'none' || filli === 'toself') continue; - - tracei.opacity = undefined; - - if(filli === 'tonexty' || filli === 'tonextx') { - for(var j = i - 1; j >= 0; j--) { - var tracej = fullData[j]; - - if((tracej.type === 'scatter') && - (tracej.xaxis === tracei.xaxis) && - (tracej.yaxis === tracei.yaxis)) { - tracej.opacity = undefined; - break; - } - } - } - } -}; - -},{}],370:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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 hasColorscale = _dereq_('../../components/colorscale/has_colorscale'); +var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale; var calcColorscale = _dereq_('../../components/colorscale/calc'); var subTypes = _dereq_('./subtypes'); - -module.exports = function calcMarkerColorscale(trace) { +module.exports = function calcMarkerColorscale(gd, trace) { if(subTypes.hasLines(trace) && hasColorscale(trace, 'line')) { - calcColorscale(trace, trace.line.color, 'line', 'c'); + calcColorscale(gd, trace, { + vals: trace.line.color, + containerStr: 'line', + cLetter: 'c' + }); } if(subTypes.hasMarkers(trace)) { if(hasColorscale(trace, 'marker')) { - calcColorscale(trace, trace.marker.color, 'marker', 'c'); + calcColorscale(gd, trace, { + vals: trace.marker.color, + containerStr: 'marker', + cLetter: 'c' + }); } if(hasColorscale(trace, 'marker.line')) { - calcColorscale(trace, trace.marker.line.color, 'marker.line', 'c'); + calcColorscale(gd, trace, { + vals: trace.marker.line.color, + containerStr: 'marker.line', + cLetter: 'c' + }); } } }; -},{"../../components/colorscale/calc":58,"../../components/colorscale/has_colorscale":64,"./subtypes":390}],371:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"./subtypes":391}],371:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75545,12 +78807,14 @@ module.exports = { // number of viewport sizes away from the visible region // at which we clip all lines to the perimeter - maxScreensAway: 20 + maxScreensAway: 20, + + eventDataKeys: [] }; },{}],372:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75731,9 +78995,48 @@ function getInterp(calcTrace, index, position, posAttr) { return pt0.s + (pt1.s - pt0.s) * (position - pt0[posAttr]) / (pt1[posAttr] - pt0[posAttr]); } -},{"./calc":367}],373:[function(_dereq_,module,exports){ +},{"./calc":368}],373:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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'; + + +// remove opacity for any trace that has a fill or is filled to +module.exports = function crossTraceDefaults(fullData) { + for(var i = 0; i < fullData.length; i++) { + var tracei = fullData[i]; + if(tracei.type !== 'scatter') continue; + + var filli = tracei.fill; + if(filli === 'none' || filli === 'toself') continue; + + tracei.opacity = undefined; + + if(filli === 'tonexty' || filli === 'tonextx') { + for(var j = i - 1; j >= 0; j--) { + var tracej = fullData[j]; + + if((tracej.type === 'scatter') && + (tracej.xaxis === tracei.xaxis) && + (tracej.yaxis === tracei.yaxis)) { + tracej.opacity = undefined; + break; + } + } + } + } +}; + +},{}],374:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75805,21 +79108,24 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(!subTypes.hasLines(traceOut)) handleLineShapeDefaults(traceIn, traceOut, coerce); } + var lineColor = (traceOut.line || {}).color; + var markerColor = (traceOut.marker || {}).color; + if(traceOut.fill === 'tonext' || traceOut.fill === 'toself') { dfltHoverOn.push('fills'); } coerce('hoveron', dfltHoverOn.join('+') || 'points'); - + if(traceOut.hoveron !== 'fills') coerce('hovertemplate'); var errorBarsSupplyDefaults = Registry.getComponentMethod('errorbars', 'supplyDefaults'); - errorBarsSupplyDefaults(traceIn, traceOut, defaultColor, {axis: 'y'}); - errorBarsSupplyDefaults(traceIn, traceOut, defaultColor, {axis: 'x', inherit: 'y'}); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || markerColor || defaultColor, {axis: 'y'}); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || markerColor || defaultColor, {axis: 'x', inherit: 'y'}); Lib.coerceSelectionMarkerOpacity(traceOut, coerce); }; -},{"../../lib":169,"../../registry":259,"./attributes":366,"./constants":371,"./fillcolor_defaults":375,"./line_defaults":379,"./line_shape_defaults":381,"./marker_defaults":385,"./stack_defaults":388,"./subtypes":390,"./text_defaults":391,"./xy_defaults":392}],374:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"./attributes":367,"./constants":371,"./fillcolor_defaults":376,"./line_defaults":380,"./line_shape_defaults":382,"./marker_defaults":386,"./stack_defaults":389,"./subtypes":391,"./text_defaults":392,"./xy_defaults":393}],375:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75860,9 +79166,9 @@ function isValid(v) { return v || v === 0; } -},{"../../lib":169}],375:[function(_dereq_,module,exports){ +},{"../../lib":168}],376:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75880,8 +79186,8 @@ module.exports = function fillColorDefaults(traceIn, traceOut, defaultColor, coe if(traceOut.marker) { // don't try to inherit a color array - var markerColor = traceOut.marker.color, - markerLineColor = (traceOut.marker.line || {}).color; + var markerColor = traceOut.marker.color; + var markerLineColor = (traceOut.marker.line || {}).color; if(markerColor && !isArrayOrTypedArray(markerColor)) { inheritColorFromMarker = markerColor; @@ -75898,9 +79204,9 @@ module.exports = function fillColorDefaults(traceIn, traceOut, defaultColor, coe )); }; -},{"../../components/color":50,"../../lib":169}],376:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168}],377:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75928,8 +79234,8 @@ module.exports = function getTraceColor(trace, di) { return trace.fill ? trace.fillcolor : ''; } else { - var mc = di.mcc || (trace.marker || {}).color, - mlc = di.mlcc || ((trace.marker || {}).line || {}).color; + var mc = di.mcc || (trace.marker || {}).color; + var mlc = di.mlcc || ((trace.marker || {}).line || {}).color; tc = (mc && Color.opacity(mc)) ? mc : (mlc && Color.opacity(mlc) && @@ -75951,9 +79257,9 @@ module.exports = function getTraceColor(trace, di) { } }; -},{"../../components/color":50,"./subtypes":390}],377:[function(_dereq_,module,exports){ +},{"../../components/color":51,"./subtypes":391}],378:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76047,7 +79353,8 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { y1: yc + rad, yLabelVal: yLabelVal, - spikeDistance: dxy(di) + spikeDistance: dxy(di), + hovertemplate: trace.hovertemplate }); fillHoverText(di, trace, pointData); @@ -76131,7 +79438,8 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { x1: xmax, y0: yAvg, y1: yAvg, - color: color + color: color, + hovertemplate: '%{name}' }); delete pointData.index; @@ -76146,9 +79454,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { } }; -},{"../../components/color":50,"../../components/fx":92,"../../lib":169,"../../registry":259,"./fill_hover_text":374,"./get_trace_color":376}],378:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":90,"../../lib":168,"../../registry":257,"./fill_hover_text":375,"./get_trace_color":377}],379:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76168,7 +79476,7 @@ Scatter.isBubble = subtypes.isBubble; Scatter.attributes = _dereq_('./attributes'); Scatter.supplyDefaults = _dereq_('./defaults'); -Scatter.cleanData = _dereq_('./clean_data'); +Scatter.crossTraceDefaults = _dereq_('./cross_trace_defaults'); Scatter.calc = _dereq_('./calc').calc; Scatter.crossTraceCalc = _dereq_('./cross_trace_calc'); Scatter.arraysToCalcdata = _dereq_('./arrays_to_calcdata'); @@ -76193,9 +79501,9 @@ Scatter.meta = { module.exports = Scatter; -},{"../../plots/cartesian":225,"./arrays_to_calcdata":365,"./attributes":366,"./calc":367,"./clean_data":369,"./cross_trace_calc":372,"./defaults":373,"./hover":377,"./marker_colorbar":384,"./plot":386,"./select":387,"./style":389,"./subtypes":390}],379:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./arrays_to_calcdata":366,"./attributes":367,"./calc":368,"./cross_trace_calc":372,"./cross_trace_defaults":373,"./defaults":374,"./hover":378,"./marker_colorbar":385,"./plot":387,"./select":388,"./style":390,"./subtypes":391}],380:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76205,7 +79513,7 @@ module.exports = Scatter; 'use strict'; var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray; -var hasColorscale = _dereq_('../../components/colorscale/has_colorscale'); +var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale; var colorscaleDefaults = _dereq_('../../components/colorscale/defaults'); module.exports = function lineDefaults(traceIn, traceOut, defaultColor, layout, coerce, opts) { @@ -76214,7 +79522,7 @@ module.exports = function lineDefaults(traceIn, traceOut, defaultColor, layout, coerce('line.color', defaultColor); if(hasColorscale(traceIn, 'line')) { - colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: 'line.', cLetter: 'c', noScale: true}); + colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: 'line.', cLetter: 'c'}); } else { var lineColorDflt = (isArrayOrTypedArray(markerColor) ? false : markerColor) || defaultColor; coerce('line.color', lineColorDflt); @@ -76224,9 +79532,9 @@ module.exports = function lineDefaults(traceIn, traceOut, defaultColor, layout, if(!(opts || {}).noDash) coerce('line.dash'); }; -},{"../../components/colorscale/defaults":60,"../../components/colorscale/has_colorscale":64,"../../lib":169}],380:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"../../lib":168}],381:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76689,9 +79997,9 @@ module.exports = function linePoints(d, opts) { return segments; }; -},{"../../constants/numerical":151,"../../lib":169,"./constants":371}],381:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"./constants":371}],382:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76708,9 +80016,9 @@ module.exports = function handleLineShapeDefaults(traceIn, traceOut, coerce) { if(shape === 'spline') coerce('line.smoothing'); }; -},{}],382:[function(_dereq_,module,exports){ +},{}],383:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76786,18 +80094,24 @@ module.exports = function linkTraces(gd, plotinfo, cdscatter) { } } + trace._ownfill = (trace.fill && ( + trace.fill.substr(0, 6) === 'tozero' || + trace.fill === 'toself' || + (trace.fill.substr(0, 2) === 'to' && !trace._prevtrace) + )); + prevtraces[group] = trace; } else { - trace._prevtrace = trace._nexttrace = null; + trace._prevtrace = trace._nexttrace = trace._ownfill = null; } } return cdscatterSorted; }; -},{}],383:[function(_dereq_,module,exports){ +},{}],384:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76813,17 +80127,17 @@ var isNumeric = _dereq_('fast-isnumeric'); // used in the drawing step for 'scatter' and 'scattegeo' and // in the convert step for 'scatter3d' module.exports = function makeBubbleSizeFn(trace) { - var marker = trace.marker, - sizeRef = marker.sizeref || 1, - sizeMin = marker.sizemin || 0; + var marker = trace.marker; + var sizeRef = marker.sizeref || 1; + var sizeMin = marker.sizemin || 0; // for bubble charts, allow scaling the provided value linearly // and by area or diameter. // Note this only applies to the array-value sizes var baseFn = (marker.sizemode === 'area') ? - function(v) { return Math.sqrt(v / sizeRef); } : - function(v) { return v / sizeRef; }; + function(v) { return Math.sqrt(v / sizeRef); } : + function(v) { return v / sizeRef; }; // TODO add support for position/negative bubbles? // TODO add 'sizeoffset' attribute? @@ -76837,9 +80151,9 @@ module.exports = function makeBubbleSizeFn(trace) { }; }; -},{"fast-isnumeric":18}],384:[function(_dereq_,module,exports){ +},{"fast-isnumeric":18}],385:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76855,20 +80169,19 @@ module.exports = { max: 'cmax' }; -},{}],385:[function(_dereq_,module,exports){ +},{}],386:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Color = _dereq_('../../components/color'); -var hasColorscale = _dereq_('../../components/colorscale/has_colorscale'); +var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale; var colorscaleDefaults = _dereq_('../../components/colorscale/defaults'); var subTypes = _dereq_('./subtypes'); @@ -76880,9 +80193,9 @@ var subTypes = _dereq_('./subtypes'); * noSelect: caller does not support selected/unselected attribute containers */ module.exports = function markerDefaults(traceIn, traceOut, defaultColor, layout, coerce, opts) { - var isBubble = subTypes.isBubble(traceIn), - lineColor = (traceIn.line || {}).color, - defaultMLC; + var isBubble = subTypes.isBubble(traceIn); + var lineColor = (traceIn.line || {}).color; + var defaultMLC; opts = opts || {}; @@ -76938,9 +80251,9 @@ module.exports = function markerDefaults(traceIn, traceOut, defaultColor, layout } }; -},{"../../components/color":50,"../../components/colorscale/defaults":60,"../../components/colorscale/has_colorscale":64,"./subtypes":390}],386:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"./subtypes":391}],387:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77029,24 +80342,15 @@ module.exports = function plot(gd, plotinfo, cdscatter, scatterLayer, transition function createFills(gd, traceJoin, plotinfo) { traceJoin.each(function(d) { var fills = ensureSingle(d3.select(this), 'g', 'fills'); - Drawing.setClipUrl(fills, plotinfo.layerClipId); + Drawing.setClipUrl(fills, plotinfo.layerClipId, gd); var trace = d[0].trace; var fillData = []; - if(trace.fill && (trace.fill.substr(0, 6) === 'tozero' || trace.fill === 'toself' || - (trace.fill.substr(0, 2) === 'to' && !trace._prevtrace)) - ) { - fillData = ['_ownFill']; - } - if(trace._nexttrace) { - // make the fill-to-next path now for the NEXT trace, so it shows - // behind both lines. - fillData.push('_nextFill'); - } + if(trace._ownfill) fillData.push('_ownFill'); + if(trace._nexttrace) fillData.push('_nextFill'); - var fillJoin = fills.selectAll('g') - .data(fillData, identity); + var fillJoin = fills.selectAll('g').data(fillData, identity); fillJoin.enter().append('g'); @@ -77077,8 +80381,8 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition return hasTransition ? selection.transition() : selection; } - var xa = plotinfo.xaxis, - ya = plotinfo.yaxis; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; var trace = cdscatter[0].trace; var line = trace.line; @@ -77090,7 +80394,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition var text = ensureSingle(tr, 'g', 'text'); // error bars are at the bottom - Registry.getComponentMethod('errorbars', 'plot')(errorBarGroup, plotinfo, transitionOpts); + Registry.getComponentMethod('errorbars', 'plot')(gd, errorBarGroup, plotinfo, transitionOpts); if(trace.visible !== true) return; @@ -77114,21 +80418,21 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition prevPolygons = prevtrace._polygons; } - var thispath, - thisrevpath, - // fullpath is all paths for this curve, joined together straight - // across gaps, for filling - fullpath = '', - // revpath is fullpath reversed, for fill-to-next - revpath = '', - // functions for converting a point array to a path - pathfn, revpathbase, revpathfn, - // variables used before and after the data join - pt0, lastSegment, pt1, thisPolygons; + var thispath; + var thisrevpath; + // fullpath is all paths for this curve, joined together straight + // across gaps, for filling + var fullpath = ''; + // revpath is fullpath reversed, for fill-to-next + var revpath = ''; + // functions for converting a point array to a path + var pathfn, revpathbase, revpathfn; + // variables used before and after the data join + var pt0, lastSegment, pt1, thisPolygons; // initialize line join data / method - var segments = [], - makeUpdate = Lib.noop; + var segments = []; + var makeUpdate = Lib.noop; ownFillEl3 = trace._ownFill; @@ -77245,7 +80549,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition .call(Drawing.lineGroupStyle) .each(makeUpdate(true)); - Drawing.setClipUrl(lineJoin, plotinfo.layerClipId); + Drawing.setClipUrl(lineJoin, plotinfo.layerClipId, gd); function clearFill(selection) { transition(selection).attr('d', 'M0,0Z'); @@ -77473,15 +80777,15 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition // on `plotinfo._hasClipOnAxisFalse === true` subplots var hasClipOnAxisFalse = trace.cliponaxis === false; var clipUrl = hasClipOnAxisFalse ? null : plotinfo.layerClipId; - Drawing.setClipUrl(points, clipUrl); - Drawing.setClipUrl(text, clipUrl); + Drawing.setClipUrl(points, clipUrl, gd); + Drawing.setClipUrl(text, clipUrl, gd); } function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) { - var xa = plotinfo.xaxis, - ya = plotinfo.yaxis, - xr = d3.extent(Lib.simpleMap(xa.range, xa.r2c)), - yr = d3.extent(Lib.simpleMap(ya.range, ya.r2c)); + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; + var xr = d3.extent(Lib.simpleMap(xa.range, xa.r2c)); + var yr = d3.extent(Lib.simpleMap(ya.range, ya.r2c)); var trace = cdscatter[0].trace; if(!subTypes.hasMarkers(trace)) return; @@ -77493,10 +80797,10 @@ function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) { if(mnum === 0) return; var cd = cdscatter.filter(function(v) { - return v.x >= xr[0] && v.x <= xr[1] && v.y >= yr[0] && v.y <= yr[1]; - }), - inc = Math.ceil(cd.length / mnum), - tnum = 0; + return v.x >= xr[0] && v.x <= xr[1] && v.y >= yr[0] && v.y <= yr[1]; + }); + var inc = Math.ceil(cd.length / mnum); + var tnum = 0; cdscatterAll.forEach(function(cdj, j) { var tracei = cdj[0].trace; if(subTypes.hasMarkers(tracei) && @@ -77519,9 +80823,9 @@ function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) { }); } -},{"../../components/drawing":75,"../../lib":169,"../../lib/polygon":182,"../../registry":259,"./line_points":380,"./link_traces":382,"./subtypes":390,"d3":16}],387:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":168,"../../lib/polygon":180,"../../registry":257,"./line_points":381,"./link_traces":383,"./subtypes":391,"d3":16}],388:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77534,15 +80838,15 @@ function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) { var subtypes = _dereq_('./subtypes'); module.exports = function selectPoints(searchInfo, selectionTester) { - var cd = searchInfo.cd, - xa = searchInfo.xaxis, - ya = searchInfo.yaxis, - selection = [], - trace = cd[0].trace, - i, - di, - x, - y; + var cd = searchInfo.cd; + var xa = searchInfo.xaxis; + var ya = searchInfo.yaxis; + var selection = []; + var trace = cd[0].trace; + var i; + var di; + var x; + var y; var hasOnlyLines = (!subtypes.hasMarkers(trace) && !subtypes.hasText(trace)); if(hasOnlyLines) return []; @@ -77574,9 +80878,9 @@ module.exports = function selectPoints(searchInfo, selectionTester) { return selection; }; -},{"./subtypes":390}],388:[function(_dereq_,module,exports){ +},{"./subtypes":391}],389:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77680,9 +80984,9 @@ module.exports = function handleStackDefaults(traceIn, traceOut, layout, coerce) } }; -},{}],389:[function(_dereq_,module,exports){ +},{}],390:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77752,9 +81056,9 @@ module.exports = { styleOnSelect: styleOnSelect }; -},{"../../components/drawing":75,"../../registry":259,"d3":16}],390:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../registry":257,"d3":16}],391:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77791,9 +81095,9 @@ module.exports = { } }; -},{"../../lib":169}],391:[function(_dereq_,module,exports){ +},{"../../lib":168}],392:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77821,43 +81125,41 @@ module.exports = function(traceIn, traceOut, layout, coerce, opts) { } }; -},{"../../lib":169}],392:[function(_dereq_,module,exports){ +},{"../../lib":168}],393:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Lib = _dereq_('../../lib'); var Registry = _dereq_('../../registry'); - module.exports = function handleXYDefaults(traceIn, traceOut, layout, coerce) { - var len, - x = coerce('x'), - y = coerce('y'); + var x = coerce('x'); + var y = coerce('y'); + var len; var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults'); handleCalendarDefaults(traceIn, traceOut, ['x', 'y'], layout); if(x) { + var xlen = Lib.minRowLength(x); if(y) { - len = Math.min(x.length, y.length); - } - else { - len = x.length; + len = Math.min(xlen, Lib.minRowLength(y)); + } else { + len = xlen; coerce('y0'); coerce('dy'); } - } - else { + } else { if(!y) return 0; - len = traceOut.y.length; + len = Lib.minRowLength(y); coerce('x0'); coerce('dx'); } @@ -77867,9 +81169,9 @@ module.exports = function handleXYDefaults(traceIn, traceOut, layout, coerce) { return len; }; -},{"../../registry":259}],393:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],394:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77878,6 +81180,7 @@ module.exports = function handleXYDefaults(traceIn, traceOut, layout, coerce) { 'use strict'; +var hovertemplateAttrs = _dereq_('../../components/fx/hovertemplate_attributes'); var scatterAttrs = _dereq_('../scatter/attributes'); var plotAttrs = _dereq_('../../plots/attributes'); var colorAttributes = _dereq_('../../components/colorscale/attributes'); @@ -77886,9 +81189,9 @@ var dash = _dereq_('../../components/drawing/attributes').dash; var extendFlat = _dereq_('../../lib/extend').extendFlat; -var scatterMarkerAttrs = scatterAttrs.marker, - scatterLineAttrs = scatterAttrs.line, - scatterMarkerLineAttrs = scatterMarkerAttrs.line; +var scatterMarkerAttrs = scatterAttrs.marker; +var scatterLineAttrs = scatterAttrs.line; +var scatterMarkerLineAttrs = scatterMarkerAttrs.line; module.exports = { a: { @@ -77968,11 +81271,12 @@ module.exports = { flags: ['a', 'b', 'c', 'text', 'name'] }), hoveron: scatterAttrs.hoveron, + hovertemplate: hovertemplateAttrs(), }; -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../components/drawing/attributes":74,"../../lib/extend":163,"../../plots/attributes":211,"../scatter/attributes":366}],394:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../components/fx/hovertemplate_attributes":89,"../../lib/extend":162,"../../plots/attributes":209,"../scatter/attributes":367}],395:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78045,16 +81349,16 @@ module.exports = function calc(gd, trace) { } calcMarkerSize(trace, serieslen); - calcColorscale(trace); + calcColorscale(gd, trace); arraysToCalcdata(cd, trace); calcSelection(cd, trace); return cd; }; -},{"../scatter/arrays_to_calcdata":365,"../scatter/calc":367,"../scatter/calc_selection":368,"../scatter/colorscale_calc":370,"fast-isnumeric":18}],395:[function(_dereq_,module,exports){ +},{"../scatter/arrays_to_calcdata":366,"../scatter/calc":368,"../scatter/calc_selection":369,"../scatter/colorscale_calc":370,"fast-isnumeric":18}],396:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78082,10 +81386,10 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } - var a = coerce('a'), - b = coerce('b'), - c = coerce('c'), - len; + var a = coerce('a'); + var b = coerce('b'); + var c = coerce('c'); + var len; // allow any one array to be missing, len is the minimum length of those // present. Note that after coerce data_array's are either Arrays (which @@ -78116,6 +81420,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('text'); coerce('hovertext'); + if(traceOut.hoveron !== 'fills') coerce('hovertemplate'); var defaultMode = len < constants.PTS_LINESONLY ? 'lines+markers' : 'lines'; coerce('mode', defaultMode); @@ -78156,9 +81461,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout Lib.coerceSelectionMarkerOpacity(traceOut, coerce); }; -},{"../../lib":169,"../scatter/constants":371,"../scatter/fillcolor_defaults":375,"../scatter/line_defaults":379,"../scatter/line_shape_defaults":381,"../scatter/marker_defaults":385,"../scatter/subtypes":390,"../scatter/text_defaults":391,"./attributes":393}],396:[function(_dereq_,module,exports){ +},{"../../lib":168,"../scatter/constants":371,"../scatter/fillcolor_defaults":376,"../scatter/line_defaults":380,"../scatter/line_shape_defaults":382,"../scatter/marker_defaults":386,"../scatter/subtypes":391,"../scatter/text_defaults":392,"./attributes":394}],397:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78188,9 +81493,9 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { return out; }; -},{}],397:[function(_dereq_,module,exports){ +},{}],398:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78221,10 +81526,10 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { // so easy and anyway we lost the information we would have needed to do // this inside scatterHover. if(newPointData.index === undefined) { - var yFracUp = 1 - (newPointData.y0 / pointData.ya._length), - xLen = pointData.xa._length, - xMin = xLen * yFracUp / 2, - xMax = xLen - xMin; + var yFracUp = 1 - (newPointData.y0 / pointData.ya._length); + var xLen = pointData.xa._length; + var xMin = xLen * yFracUp / 2; + var xMax = xLen - xMin; newPointData.x0 = Math.max(Math.min(newPointData.x0, xMax), xMin); newPointData.x1 = Math.max(Math.min(newPointData.x1, xMax), xMin); return scatterPointData; @@ -78243,26 +81548,25 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { var trace = newPointData.trace; var ternary = newPointData.subplot; var hoverinfo = cdi.hi || trace.hoverinfo; - var parts = hoverinfo.split('+'); var text = []; - function textPart(ax, val) { text.push(ax._hovertitle + ': ' + Axes.tickText(ax, val, 'hover').text); } - - if(parts.indexOf('all') !== -1) parts = ['a', 'b', 'c']; - if(parts.indexOf('a') !== -1) textPart(ternary.aaxis, cdi.a); - if(parts.indexOf('b') !== -1) textPart(ternary.baxis, cdi.b); - if(parts.indexOf('c') !== -1) textPart(ternary.caxis, cdi.c); - + if(!trace.hovertemplate) { + var parts = hoverinfo.split('+'); + if(parts.indexOf('all') !== -1) parts = ['a', 'b', 'c']; + if(parts.indexOf('a') !== -1) textPart(ternary.aaxis, cdi.a); + if(parts.indexOf('b') !== -1) textPart(ternary.baxis, cdi.b); + if(parts.indexOf('c') !== -1) textPart(ternary.caxis, cdi.c); + } newPointData.extraText = text.join('
'); - + newPointData.hovertemplate = trace.hovertemplate; return scatterPointData; }; -},{"../../plots/cartesian/axes":214,"../scatter/hover":377}],398:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":212,"../scatter/hover":378}],399:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78295,9 +81599,9 @@ ScatterTernary.meta = { module.exports = ScatterTernary; -},{"../../plots/ternary":255,"../scatter/marker_colorbar":384,"../scatter/select":387,"../scatter/style":389,"./attributes":393,"./calc":394,"./defaults":395,"./event_data":396,"./hover":397,"./plot":399}],399:[function(_dereq_,module,exports){ +},{"../../plots/ternary":253,"../scatter/marker_colorbar":385,"../scatter/select":388,"../scatter/style":390,"./attributes":394,"./calc":395,"./defaults":396,"./event_data":397,"./hover":398,"./plot":400}],400:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78328,9 +81632,9 @@ module.exports = function plot(gd, ternary, moduleCalcData) { scatterPlot(gd, plotinfo, moduleCalcData, scatterLayer); }; -},{"../scatter/plot":386}],400:[function(_dereq_,module,exports){ +},{"../scatter/plot":387}],401:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78423,6 +81727,11 @@ module.exports = { pointpos: extendFlat({}, boxAttrs.pointpos, { }), + + width: extendFlat({}, boxAttrs.width, { + + }), + marker: boxAttrs.marker, text: boxAttrs.text, @@ -78497,7 +81806,7 @@ module.exports = { values: ['both', 'positive', 'negative'], dflt: 'both', - editType: 'plot', + editType: 'calc', }, @@ -78515,9 +81824,9 @@ module.exports = { } }; -},{"../../lib/extend":163,"../box/attributes":282}],401:[function(_dereq_,module,exports){ +},{"../../lib/extend":162,"../box/attributes":282}],402:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78543,18 +81852,10 @@ module.exports = function calc(gd, trace) { trace[trace.orientation === 'h' ? 'xaxis' : 'yaxis'] ); - var violinScaleGroupStats = fullLayout._violinScaleGroupStats; - var scaleGroup = trace.scalegroup; - var groupStats = violinScaleGroupStats[scaleGroup]; - if(!groupStats) { - groupStats = violinScaleGroupStats[scaleGroup] = { - maxWidth: 0, - maxCount: 0 - }; - } - var spanMin = Infinity; var spanMax = -Infinity; + var maxKDE = 0; + var maxCount = 0; for(var i = 0; i < cd.length; i++) { var cdi = cd[i]; @@ -78579,12 +81880,11 @@ module.exports = function calc(gd, trace) { for(var k = 0, t = span[0]; t < (span[1] + step / 2); k++, t += step) { var v = kde(t); - groupStats.maxWidth = Math.max(groupStats.maxWidth, v); cdi.density[k] = {v: v, t: t}; + maxKDE = Math.max(maxKDE, v); } - groupStats.maxCount = Math.max(groupStats.maxCount, vals.length); - + maxCount = Math.max(maxCount, vals.length); spanMin = Math.min(spanMin, span[0]); spanMax = Math.max(spanMax, span[1]); } @@ -78592,6 +81892,24 @@ module.exports = function calc(gd, trace) { var extremes = Axes.findExtremes(valAxis, [spanMin, spanMax], {padded: true}); trace._extremes[valAxis._id] = extremes; + if(trace.width) { + cd[0].t.maxKDE = maxKDE; + } else { + var violinScaleGroupStats = fullLayout._violinScaleGroupStats; + var scaleGroup = trace.scalegroup; + var groupStats = violinScaleGroupStats[scaleGroup]; + + if(groupStats) { + groupStats.maxKDE = Math.max(groupStats.maxKDE, maxKDE); + groupStats.maxCount = Math.max(groupStats.maxCount, maxCount); + } else { + violinScaleGroupStats[scaleGroup] = { + maxKDE: maxKDE, + maxCount: maxCount + }; + } + } + cd[0].t.labels.kde = Lib._(gd, 'kde:'); return cd; @@ -78641,7 +81959,9 @@ function calcSpan(trace, cdi, valAxis, bandwidth) { function calcSpanItem(index) { var s = spanIn[index]; - var sc = valAxis.d2c(s, 0, trace[cdi.valLetter + 'calendar']); + var sc = valAxis.type === 'multicategory' ? + valAxis.r2c(s) : + valAxis.d2c(s, 0, trace[cdi.valLetter + 'calendar']); return sc === BADNUM ? spanLoose[index] : sc; } @@ -78664,9 +81984,9 @@ function calcSpan(trace, cdi, valAxis, bandwidth) { return spanOut; } -},{"../../constants/numerical":151,"../../lib":169,"../../plots/cartesian/axes":214,"../box/calc":283,"./helpers":404}],402:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"../../plots/cartesian/axes":212,"../box/calc":283,"./helpers":405}],403:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78687,8 +82007,6 @@ module.exports = function crossTraceCalc(gd, plotinfo) { var orientation = orientations[i]; var posAxis = orientation === 'h' ? ya : xa; var violinList = []; - var minPad = 0; - var maxPad = 0; for(var j = 0; j < calcdata.length; j++) { var cd = calcdata[j]; @@ -78702,21 +82020,16 @@ module.exports = function crossTraceCalc(gd, plotinfo) { trace.yaxis === ya._id ) { violinList.push(j); - - if(trace.points !== false) { - minPad = Math.max(minPad, trace.jitter - trace.pointpos - 1); - maxPad = Math.max(maxPad, trace.jitter + trace.pointpos - 1); - } } } - setPositionOffset('violin', gd, violinList, posAxis, [minPad, maxPad]); + setPositionOffset('violin', gd, violinList, posAxis); } }; -},{"../box/cross_trace_calc":284}],403:[function(_dereq_,module,exports){ +},{"../box/cross_trace_calc":284}],404:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78743,10 +82056,14 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(traceOut.visible === false) return; coerce('bandwidth'); - coerce('scalegroup', traceOut.name); - coerce('scalemode'); coerce('side'); + var width = coerce('width'); + if(!width) { + coerce('scalegroup', traceOut.name); + coerce('scalemode'); + } + var span = coerce('span'); var spanmodeDflt; if(Array.isArray(span)) spanmodeDflt = 'manual'; @@ -78771,9 +82088,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(!meanLineVisible) traceOut.meanline = {visible: false}; }; -},{"../../components/color":50,"../../lib":169,"../box/defaults":285,"./attributes":400}],404:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../box/defaults":285,"./attributes":401}],405:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78844,9 +82161,9 @@ exports.getKdeValue = function(calcItem, trace, valueDist) { exports.extractVal = function(o) { return o.v; }; -},{"../../lib":169}],405:[function(_dereq_,module,exports){ +},{"../../lib":168}],406:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78953,9 +82270,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return closeData; }; -},{"../../lib":169,"../../plots/cartesian/axes":214,"../box/hover":287,"./helpers":404}],406:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"../box/hover":287,"./helpers":405}],407:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78986,9 +82303,9 @@ module.exports = { } }; -},{"../../plots/cartesian":225,"../box/select":292,"../scatter/style":389,"./attributes":400,"./calc":401,"./cross_trace_calc":402,"./defaults":403,"./hover":405,"./layout_attributes":407,"./layout_defaults":408,"./plot":409,"./style":410}],407:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../box/select":292,"../scatter/style":390,"./attributes":401,"./calc":402,"./cross_trace_calc":403,"./defaults":404,"./hover":406,"./layout_attributes":408,"./layout_defaults":409,"./plot":410,"./style":411}],408:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79012,9 +82329,9 @@ module.exports = { }) }; -},{"../../lib":169,"../box/layout_attributes":289}],408:[function(_dereq_,module,exports){ +},{"../../lib":168,"../box/layout_attributes":289}],409:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79034,9 +82351,9 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { boxLayoutDefaults._supply(layoutIn, layoutOut, fullData, coerce, 'violin'); }; -},{"../../lib":169,"../box/layout_defaults":290,"./layout_attributes":407}],409:[function(_dereq_,module,exports){ +},{"../../lib":168,"../box/layout_defaults":290,"./layout_attributes":408}],410:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79076,28 +82393,19 @@ module.exports = function plot(gd, plotinfo, cdViolins, violinLayer) { var t = cd0.t; var trace = cd0.trace; if(!plotinfo.isRangePlot) cd0.node3 = plotGroup; - var numViolins = fullLayout._numViolins; - var group = (fullLayout.violinmode === 'group' && numViolins > 1); - var groupFraction = 1 - fullLayout.violingap; - // violin max half width - var bdPos = t.bdPos = t.dPos * groupFraction * (1 - fullLayout.violingroupgap) / (group ? numViolins : 1); - // violin center offset - var bPos = t.bPos = group ? 2 * t.dPos * (-0.5 + (t.num + 0.5) / numViolins) * groupFraction : 0; - // half-width within which to accept hover for this violin - // always split the distance to the closest violin - t.wHover = t.dPos * (group ? groupFraction / numViolins : 1); if(trace.visible !== true || t.empty) { plotGroup.remove(); return; } + var bPos = t.bPos; + var bdPos = t.bdPos; var valAxis = plotinfo[t.valLetter + 'axis']; var posAxis = plotinfo[t.posLetter + 'axis']; var hasBothSides = trace.side === 'both'; var hasPositiveSide = hasBothSides || trace.side === 'positive'; var hasNegativeSide = hasBothSides || trace.side === 'negative'; - var groupStats = fullLayout._violinScaleGroupStats[trace.scalegroup]; var violins = plotGroup.selectAll('path.violin').data(Lib.identity); @@ -79113,15 +82421,15 @@ module.exports = function plot(gd, plotinfo, cdViolins, violinLayer) { var len = density.length; var posCenter = d.pos + bPos; var posCenterPx = posAxis.c2p(posCenter); - var scale; - switch(trace.scalemode) { - case 'width': - scale = groupStats.maxWidth / bdPos; - break; - case 'count': - scale = (groupStats.maxWidth / bdPos) * (groupStats.maxCount / d.pts.length); - break; + var scale; + if(trace.width) { + scale = t.maxKDE / bdPos; + } else { + var groupStats = fullLayout._violinScaleGroupStats[trace.scalegroup]; + scale = trace.scalemode === 'count' ? + (groupStats.maxKDE / bdPos) * (groupStats.maxCount / d.pts.length) : + groupStats.maxKDE / bdPos; } var pathPos, pathNeg, path; @@ -79234,9 +82542,9 @@ module.exports = function plot(gd, plotinfo, cdViolins, violinLayer) { }); }; -},{"../../components/drawing":75,"../../lib":169,"../box/plot":291,"../scatter/line_points":380,"./helpers":404,"d3":16}],410:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":168,"../box/plot":291,"../scatter/line_points":381,"./helpers":405,"d3":16}],411:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79289,5 +82597,5 @@ module.exports = function style(gd, cd) { }); }; -},{"../../components/color":50,"../scatter/style":389,"d3":16}]},{},[11])(11) +},{"../../components/color":51,"../scatter/style":390,"d3":16}]},{},[11])(11) }); diff --git a/static/babybuddy/js/graph.9d17ed9a2576.js.gz b/static/babybuddy/js/graph.9d17ed9a2576.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..cb6f2e06b8b8fd92b87fd0b95e4aa9c964867e71 GIT binary patch literal 636016 zcmV(HJ8Qn$ENJ zv<+n*#j!(WGA9kQFue?CnEX7NhU+YxIT!0$m^%3~bY47rU@IK@q(0Q~DXSK#Bmf9Be z=Jm#H7-ykVfMjJ6qG%Fevcz_+s5Xnx;uwuRRXd>m+xeD>FXe&Oz-kI;tBCO8@J6(v#6Lh8R>3$A#71(-p-*T2<>7Y zay6re?l}57Z^z+!kuS&5;b9}G=SXvjfoLU#QE${gdB>*`@pm9z;fHs|us1&4JGcNY z%kngu<_F_@_Yj}w(FC}M*Qg(~+ecYCJ&L2rL1Rn>QUH-bkx%y=_+Rbk=FiS7x~v^L zwHaVa4IamNI-V!%yfqJ2QG9cJ@M;sTos(dl9Wo@6vRy@gX9)yg=jur z1?eJMAG_mCFq=i|1w7T7yd5W6Z!U6ZZE}(4KrCqRw=`kEJDw-gi%ddguLwK2$YT(d z<8`tQl}Z8T<>7VSnuXIO4XC?jnd4;w80=B9Jx!x*g9Wo?unAjfh?)>PP8m;Ui!f7* z!*He0j~K|@LQq(fKenBNxsx$4+raiU0s~}ppcw?I+i-?55BunCpJRIlA2KXZm z=Q%P=60LJUIJ^wkAkHS81th0EOM^um+^~j?S|In@;9R6xlEU!KgNr!F@+{?;r&!8z zfJ#}OVktXKlMIGEQcKG;OZgR$ODT%4HmFGqY?MVG)v`sRr3R?Wa*ZON)!Y%MKOZjYDc}wvvr9(^cu)4ejnJu_jfNz1lwg6vmqr9c~meLkv)?2Vyq`^cf zDl`iwk9itBtAYiy>?BC5CDh+skID9%TrL=4B#Y~ zo-fh_j2~q0Bz4?&Cv&il<7Q0H-Jx`Lhr-GJW%n*vre3Q>s_+|7TY0^G6@b2gnee

7MaO76kHhOR{%I999&q->YRyuS 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

tqASP_=PtFlARF1k;U+h7| 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�GT_|&`n3^AgGMm>nc=_>0$j@7NX}I5`kBxu) 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μ-TErFiqbpKtcN@Z-vk@-y zD4|nXwPQsOEu<}LP@3CFZ&Zm$!NX)fZV^9DD_a@m#}DzWq=v6GjJ^`65Xyu|qSMka z==w!DN3xO!Gs&xT5t&{i2nqtBBQmf_^-?8Q z()COK$hDq%U(ZeFdJV0B@n9Ius*7ZM-3>5fo3{h`lLH{|IqUgTj!&3GUK<{Snob_ zc|(jU-kh)Ca9_pX=o#ljX1f<@3Oz14-3@bW`@#y$Bf$IJ;N@X^X56sc2h2NQ#JZms z`Pe@(zRhv60VL(Y4FJxi!It`9$1fvYUiuN*h~2ruvIC0U`xlYT<+#l*fHm?#@4GvIq5$8(CFj-jBU7Y074PnGj#w*%4;TD&u{5?ZozddJuP`+=?4SwmhA%O?)!W zP_>gMicAKlgddUQfjBO{+oBj2R>ujXfOt3QTue1u4?xZrI{;gY>F9c~>j5+p!|*mL*gsG*_O2auc>bnAEDwz@Nm}v|KzokIT;&1?YEXWNDs}gZ(G98?}JUTf!{%~>n`s5Uw zyF>2h#jblr?I+{B`dH?$eI2k!P!Yzi6=Y=C5TmkOjA`0TtCE}La$XJh_9h^(t}vGP zjNmY*Yx!sJvD(Y4YL!)c-|zqC_d8A7@R!INz*K9%X*fCl9na8uWseD~gb6fS25-g3 znz5daz;GAwB*ZbC`xoBr#mI0QlJJO9Ba5oNrqE{Z1}{8RrrqR?W!kpCT~s|W$rC)7 zE4qNp1p!#VYuNp7S?= zkKJrv+pvgy?(mBb(K<$hB{wka&A6|>#I7Z7))Iqr79_mhL7>=tYe$xY`2F0($$eK||YEMEsMEJv;ES=_SR>?*Tj8OB<<<{*m*oaey0 z$;|I6+o8CrVn~>{C1IVAHvT=nynl5ajsC*M|JmIZ>M&oCkQ?rNHkQPNyw6iNr7A1RKI zES~qkvoM*l+d#5&@})InB_WgJEYtOLmuBxaa{)1p6DiY7kP(t-hcVO5Eo5v_<3vk1 zMzI;>)oGqBe%#z^)tfDPP4adr4msE-6CRL`Ym5qp;wMR)f~@yekB7CyG)A4Scb*82 zi*apZdAs#4Q5{k5Xzg?jpgMJ4b}AiC++qW}=eOTB9SxirgmA~jCS9@}C}H|#y+QJl z=Y?bAlq<$r!-{2MK(?9lZIFyqak1m4tw.^?(X3-N~Xn`%+K;o}| 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 z

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 z zYkGu%Qp$CRioC0CLoKAI)h$nC>`;e&iw>pPzbg`$z(jeiqf{KyJ-?u%4V2qnB~iK! zA_IWV#g_3>#^?wTm%;eYsAk~jBy~YwiUsjz+RBy8QZ5ylf1j>ALJ_(n*}VlVJM`aV za}4TR2;jEF==`H-(K#2;{rPuNrcX^#&VMI8+3MV$-|p1n>WMu~v%J%CH$#Y|&6oP7 z9U(=#D0{rC7UC`e2&w-rNZ5=N58f0@Ff**qlH*@~sg@=31WP?d*sN-sjVGgRM&*=J5~jk4OWq5LN^|(D$EA!*k$D%1ZM^6Sz2nSpAC-8 z5%Hl{v6dr#SdEgE+Igd7eG}VSZEn>YJ!Ca=8&}~jnk}`rkQi9Ic(DBf=$MH*g8bUl zK^N4vcnhDa64AKf{zEy%TkUklRVW(%)|}@z0JWqFy(}NALQf&T0l0o^(6FVuS&*9z zE^X5f9|oZuCZw&0w|!W}Bf7gsQ4Ri4lj5HzOINM=p@z(QMxCtE&+(&u@q|<3?OobT zN$rw`8s|k9ycNjp^F=!As$+&K7@(Si`N5YS-^FfU~#E27)+ZqA8IH40_LRMdjcs0QI z6|1?n_lMu#;_spUy@vF)O8YL_Q2I9+kjV9dVUUZ!qE|jccV6X21sPeO6JnwkF%Vn3863p z;^{=yT7z}HZeYAlhI@xP^s@D7n#{Flbef^E4I-Iil=Au#9M00qY6;$1Xn0Qy@f^Bs zyv&i`?GVW6ughYQC$oHBR9P{x+hCt}0UC^Sajoy-?$}EXlY5kQHm#~TrR{;CJ7@TM zFzmVL-qwF~l+-E8GGVW~^Q2F$@o5xZBV^HDabPp!P9TnozvWONk>v<`;^{inrVg`v zAR21(iSc82)L zbp2d=q~m?Qh~MWZg_g-e@#DbbnhN;}#Lim_NM|N3BM2uNeamt=^d`TKNqazghYHYL^sU;+=x$RDxi13w>?wkGk9_YG;e$s_5PUC;vn zT)N?wF;d-9`|Sn}erQSqL17?7Bbc5KK39nQnby8NRu5$Kq3%?3Kw?FsPcX*B=Osku zh95=)*Eww^wiJ94E8ZTB*9kz$8bNe^iYp5Rt#g!?2E^K^EoIP3lhebYhN%HZXb}5> zmlmsp0XQA)UqyTRgXJc&K^3c&)D}FRC@iuzMMC8#4)Xqv_bPJUhMHMC03{&nEIk3{wdj zy}%Pf7AQI>B^!Tc%Q?mK(ThJxrxV5N;||z~8_?B+ia5@7I7~Q{x|+98{4F|SBUFO< z3>XnOkKaRvSjBZky#C9-=#baMPpc!22x$mGM75B@_1Rch!{M-eA-{FRHneBKdagXjTpes9>O4slSU$pa>~Eb?7kwE~j++GY)fn zGQlo_hI>|k_xcJ97}ZeGK2oE`s_7;B2fdeKHT?~(Ixzcrg^*EIa#t+ znOK{MfE%j}%rrRM9n3Ib%a<6=s6fw3)!XZ|T(B`En1AnrfiR$XmW#N&S7TA>8P?B6 zEiR#cs~(>ftK=y_iva3vcWCk)z=$VFQ*Ee83kAHg;9V zO&yJA$+=od2s@>&(FzVjZ8r^ptDzdL4&xhvkMbN0piO>o4d2xmv{>koOEa^xsR*lM z+;`-ZTg?8I4Ht(OKreX&3zDd1x#~n+VlR~B#jT9I^w!oUk2Jil^_B&qob2#a27@n=J2*VwOou|N(1 zy+5wfVwz$A5Ev}I9|wxJn=CK^wJ1v0@(n1k+G_kkckeP?o6aF_REu?GTYdC;1W^7m zBNS8uZnmA~4%3RI0$C)+%4v>9oUOrNK%0Y9I^M20-eS+#72|JkctQSGHA8=G*=0)q!Ixucz6o&WEC5~K0sf+YIVA$DB z(CT%&ZLI@;J}^Ty`ZsqJ^&_|Irg3Yw03q99V{B6&;dwXI z2Z>>Q+XMgNh&#P*?HkQBFPWbG(EJ@THaP&elNq!Wn{%%n*DB9%i+0L}R$i9Jd=le_ z*PPo8N;?<%nAI0_u;lKv)=HE^_J6}nMZ*+OEihS;N}MTZid5mOYq-O`Ll8LvFslv0 zh_T>^{^{>{t&QXlk@_0_^Ua?kg;#6j{%npG7g6PVDtfDFe=z)PughoS(Ta1h^50-9RiOss zzbwk1tLx_|cIvL&@KtMH)B41V{C(a4H>(GM?~#-;bPAvUMaR zaRl+?i?y+f+ZO`DhH{+_V*%+!>K6JL)b4t81mzas`%VzbFx^&WBSO|<-8d^tJoJbM84j!A&t=$%3 zt{W;Er}NFD=bVvBvb27;jbzO!I)GAoA<&m4d#WZi9t)Y$LE>XFvUxDgDzX1O2)PQH zYjlc>*ZyZeVd{Pr}KNemf;yQ5<9B<;im8H2$iFse4zHs zYwku{ye{y0)mEMy%RYFm>*AV1Y^uX#Ype)%)yQEa)%hC*TbMXQI~5qtAd(Hg+iY<7 zM)+U*O-DM2ciYw!34-u}w4x)$96-0zIf@V|^2+IrFeNroIU+qYY0WF{>{%P_VdTzj z5C_8gDf&500%ZiLY5TfCj=sCG^}sP65WE#CFb1Q)5Qb71-{~z!S>wwN4Y*5f8x~7V zyVmWio#plAxSEb)w2G2!+gdXa&8ySIffW8z(Gre>mF(K zeQ3z6(!9(_7MgMcMX;3rB zfpOx-(%l8-Yj{;OT_Mp zH%JaNH;)Wo{kj4(^^8JPN8d4+?aiXX!ideoZwmGMSopd{+g5qr7(X3Zl1SJwgaK?W z3OFuKURM9BZlK7R+*;&OJ#|O-lq^L)q;RA;OCNY^T?~It#DPD(X_XE^e{A@2Dfz)* z!6O?f(CsFXX!anj#o z9Hho`xDoQEqMy9)+X?N1>6ZQrcoF<_DE>YWPQ(<$5Uukri@HXq3MLyn5zjokY)uBw zCI=|%O>W23xj5_6SWirb(;kYKi_$R?wcQ7UV=5xIg(!cre=1tAW8GYEC=2q`IWezn zH{wyRgz;98HEOcOt(?5ai0OKZ?26KmB7Pq@_FC4&D40g-H~#Izy|US0!c>4t3#Zq4 zk=G;*(-4e$2(HJij0L7k2vI2PShZ36II2DZx*Wwek|`T(pwukcAa%CQ*d~mfgo#a< z_#4g8;%RPQA<~px(e3;RBN4_ z?Ds*Ia7yN%EBv&pKG4@7$}0MvEG%gL+w^UcPOpIgA_8$W>nCr=Z$&`tWSXBX`hG>w z*xQMd54nUv@}x4pKkOukPzSJ6%JTpr77c121unyB=wmzqaM+{J?HMSy#W3oFJc;Nx zQSM1|_)1w^dlawrUv79K_bTl&>Y#THU7kW*b(HM04c&>C!C?!WR4Ks*cYDF_Hgg-m z5`N{di;x0ezX`rtP6N_iCe!1BREDqj`*&Qv3g8`(`~2z;opMa4Op@fX1{?djk=xYi zMpmxjVjA*GhzG0xqHQX)U$LU}e0`G%9ha>Ep6VOQBVI>y>0=OpZBqqG${H#HD~=6y zz{|3sG;kYu7B^I3q()9XJM0k_(H?l>{Z@31>j_rc>~bD#^phL|Pvk?zfNXz=AHJ z%c4X$EUm@EQ&`moGH3>rpj0;vI4)`TA4CVDek4LDPhKT?fuTF}v!{!0R;Fig(ax8P zcWdLZrQYg`bq@k`7}vZ(@)+GV4BQ!j6hSt@%h7cVUMe}@laoV;siAMs&kMv7OzPsi zH111CWso;43?v;Gh=2!8nXGg2EmAv-Y(q4)I$MGP3Tu`fxL9H*(}Cn9b-wWiO)@Hy z$05h9i%)vd0+X;n7)NRQvRH!h?g#NSU=YAVPQnqJig^G*?KU*s7jSdCA?`?h%qC%h zH^0Pp+eYVXOk0+h#z-@zFdtqAY2$_KnD$*$1tC>rVYW!=KWp&_~{U>eBj z4lkQ+38XO|If_)~+&!@xgR+KvS*=JUj$spYTYOmVEqvR7^^*@)a19QeH?94#xJ2>J z$eVNvlbqmIfV<+)u)$t3Fw<7Eg3&0p>ZVx%qiu@Wdqi;XWH!-DLel84zlO`o>)OaU zAUtNq&x({#;cNz+#pcxwwwwkPJ1ulKuzx@vZgs=V+GH%xwezwgA`kE>g4E!Z=~T zQ(9nr@fOF>v4fRjoGJrP1kqI0pGP9YT4z|>4C~a=z)5x@>OS@D`z8#VCNsG(?>`N` z1CMNQEasr3AU#T_#cyhYCsj4iic;O{!i^XDgUotX41}lzK9BY1vHN+VKTjI`TQsyK z9FSc+%IInyG^hq2X-|EPG^f5!jw0w|D*edu#{7)I8|ly^wQP8y;$raQ_VFrjG=iI? ziUX{RwA_REwwvCjSgnNEhLh7zR#)k?pRDn}nB`Ic;ENu=;v&}K3kR{eE&-+NR|O1% z_YHi<(B(qnCI&#mWquv$kgUXkzSZh$4D6UDWU*qvqzKAGJyj{bBfiRN0)U#P<9sTf zXlgDormx0pAUp$V8*wiHxhUCH@3u)k(}2x|jpe|#jB_116^#5d2AfjbL{&XqPPP3b zkcPC6uR_G5$DOCPoXP}w#CtYP^qUh9cM)h{U8;W;#l#4hVS~8f&+xbf=n6m|p;tIO zD2hosRnPG(Bl$B{1~(rZ9Owx^6&2-<03@JpW3L%28e)2;FvZR+!W&pUiJ?u!&S~CT z$F&1mWT39GJr3JCNWNPxEdH2ULY#DHhGJ6NGU8F5P8JlQR=?~J8A;B$o~W!y&lUeU z#Q@b5+O)5SDqwu`v?f3ZwMhURTkV`_rB?)OBIXnu8l~Wf%7k#gu+QOB#%NseW!5`zt<}Nom^V!Z}S#|PIM$d5Rd{NI_YZghGZ%*M8EEq)m4Dw2wl=>p5?rb;GPqGWD$*jaAzr9&t@P4Fb-Yd%gK2*Vn*wPn8G90cv*5S zfn7&S1){i_8n&oN(eRVDX=^veZMBSTE#uZ&CT+D$Y%LRKhMir5$niR6C$1*FKffK% z|HKpNqVj}?;{w56|VNg(>cu98t z-=+r68`LD;3T~gx+r)2Lz{)qZj9DUO%`@I@3O~PLD>}ar9hcYWBc62d6nBD}!2lJK zbr&>c3G)HuC7h`jSZUL9i;KrL!6H8gpev%qoDnSk(YT!OL*9YQ+c|jc^i7v`r^Q7M z1lu28j?+PR2K^^$Yv&e=P$u0MaBVw`39NW)gTU%bS73$f1>ap^8}1yCN$p3(RPagL z3_O79_M}`31Y%-Y;S&afVCwh)8p3|x8QtICSEN$?_j8vNyz=RWT?r;2EsuW4LUt*% z5Bdq^1(TE~BH|=F-F?rl=fcd=`EH-pI(iT|!j~ARS-)%WJ*MBp7{Q9-g2_ru7(YgI z!h9VE^XYC!Mi?`;b;YH6)tc+p#FBCbp?OBjaIMJEg$J~`>T|>m^y9oZ8{8(>Bh&amyCAK^ zr&{m$0zJKE_936ST zPjkcpj5i2NS)Mn$T6S*l)d?++n1@X-b_uOfbNI>X0L$Sf^C zx_5PTwjhv%Ir1!*X}L_NkzP{9kLe`$G2TBQRe`r{q26iGy};d47fMUuy!@tb`nSw) zvY&qZ>^C^9`k>|96GAj`JKE$nM|^xk-kZSrwW-PA1O{#TN763)LI3x5P8302M(zsX z^=W91@c0zLMw@Ar`h(+RHn6%0yeAt=v)8N1 zPamY?wn;+gYE77{m2>1sOy0at##J@V)3OuW2V_XS)vm=={?}~U*gm~X)hLItKJO0> zzWk(J7TfjTdAxlJ(@14DcO~e~7F`O;cw{!ZkXtNf(}Mmh`WO_y4W*(ps7{8z5dY0i z)c=s1C${GQs!N7=kK!YFqj5!y8@Xm*AmrMdRA;?M`R+j`u@)e$CztW5!$|IIvA|70 zZ-FPZ`xd)1I{4-Q->e6J;K0Rk;BIGRqF=$^`;u>(cx&pxlD6sF(;i3a<&ZnhxJtsoR_UCQXQ(t zWIBfG!}EOcbY5LP%Pg+yxc~#fUTDu}87;vC!bv(Pu|nf)lul_-1!?sSk0?^lKP%6Q z(mP?+f_}xFlsr}k8hJMFVj7m-o50Yca&V*y9asi zJxpja!{B6Bsv_0n?jo28)2WjSbWpt-C0DAlQL^xY&YAOStX=4f8fY&%OX4ugBKVDF zC-la#)Wn$5=udr~2tPN{7t?_L)aU&i`WV1j&o6UBBq4I&5Bgiz9KRE%SykhydJ50d zECWVII!b6qdam_E*D!cfU{Ean?gP@((Uu|_y(i5y(;p2sw790Y!H+=>sKX1S`a-fH zh@yGCV`>sDgoTl29)(d$xtVCyC$_dz_rTk-(deX@G6?rrkl5D~<85R&U$E~Y$$hgy zHvyM!9BDM-DRpzC|Lw=pvGtMpt10B86IYq{3ED^110q8}9^W8m0nG8J)8NRht`BXf z0M>!W#q=t_RMb(ikxMqaRF5Obwwt_LEN1m+Z?DEl!w6FOii}VPiqP(*dtZI^_0Y|m zmug>M6f?z3r;4LE--BO!f63=%K7FIf%$vMk6lAyfzaGDVhIgy8U2OP`xlTA!HFq00 zS7d%U#`dvaAYq=?&fnu{HQu{SYtk6o?`2ia(s`=x4#m>#nU?CoY%M}iz?96@ocyf% zMJ|JNt!B0O)rm`=I`m0rP_%eBIK2O$=a}&f2m4<>NbUl@0~MK7*HrQD{@}oifU$w0 zkham5n^3z)%@F=o2uD~n`v8YmHNh0+OJ9h1RoaVNt@_Z~NvmoN`#H3gJufbc1qKqW zFA;#;VK>OYcAztJnPZ+ye}C!x$sLuvzC$(cm_TiLnLPWyKNE6!n#`(dp1iNdVA-4H z^+Y|b_K^*oS6OA@e(^r`|ZBrc0WLX22gxv|oR<=Tm<1siA zE20P|j5rGlLp<;(xnsysUJqz>dl9_gY9ixtfZr(j(nUyC3TL^-yoJUx!{edLGICeh?@j*xcK&yWTFpBzIDMG3gKP z6XRLwWB^|BM-12tYQx?X6{Ob_Stmu&hwpCxEJnXZLi=bBSm4?)Od3FYY zI3sc_2u}Y7Pol;G90bKkf+b`&WdC=CN^`L4YZFsJ{TO(_h@;p#$B|iC$iee$z`rb& zTcMAhE=ZP5B94NSxTeG=agH2Dn_$NgQ8}doQO~TZwHz!i*HZl(C9Cu(@}7E5;*gWm z$g5ny!108%fxsEjA7>6?a-#cyja(K4 z+uXs&;y8)57!ZuaaSHL(He*PLa5X-Ngd}4zCtQOK#hkYfZ3CKB2bac(>vaaF6uf#v zSsYhoE%U^)5daWVL&gIo0zUOR2pLt(pml#KAUV%tkBE>*|hy!pm@ok>T17K59J zoW_<#bpX=_X_om29Ru4>^=27-+2e7A+mYNtw%Lv!X7l{4Sb-ttjhrV{r#qYjwezY~ zI2`ryX)q$4Sq{q#+b#P%SPxy+SroHsVc}>m#mx8Z(zu0xF%VSdWT}$+6slt1k-13M z%!FEeXR!3!4#57V*2F=x&GqbYQXf(8z;-JPifNUCs`=>ru=z{t{BY@Df=ubQ3F6Y> zEScirRJk2i^WpSCPKZ~%m=&%*IyLPe^mj&I4x=wOc|!tg@}=)bbANw`+{%}Ka4WHB zjeE(9bUn@!MU;{Y6l&MWWi?ya;;)L^bS;Jdg1OmN^-1^;NvPaUt`q%lQd%#lZ zSI^YtqW@M)+}%}#RsFt#|97}uz5cB5ltCeZ;{{2Hs{j>G$_8ns9S$fdX;`rq_FM?Ot6=L6jO@nghvlyaKIh_Rwz9`|7m%N0K)Y}F%t;?lXv;#qLxAw zGvZK!hdA*2N5RWcJa=P=*g8xTXmDu)x?K?J!&IraZBGqEjv#!_aK~uqcM}6puZab( z+PQe^lz++cS1C?s>k=;WS1ZR`tEx#dh^h3auicEiy5(?96~Mx*JMtMmwF#?EgUHS) zzG^DY^$Io&O~YQ6depG&p!|Jhzgl^?*f`z7N8Ytw&Kn!G0c4b>5Is3L( z@>rbM?0wPlX|M&=#`^^|QX6;P6ZPtrdyh?c%nWHe9^Up*gw&a+6?R8xJ0S-M!Zia+HMlxT8so;^-~Z~5`}Y&t3;wymr<@of2lQ%_-QXue zxzc}<&!cZAI1>;rM?0;8KnJj-DqU2GO5C0A()!Qz?H96=WdM+>w4fMlYwJcDcZ<`N z9~1>++pySVTGhGsua^or{QgQH-AL)H4&G&Nl(6rLqjq`}SO7x(->KIiHSKNznw*!V zO3&+UFvO%0OVAhp5|=|Ze?t_!NxJCDe#K3uoF-td0ee`K(tK0$r({1SY$ln!fKv(u z%4;{vI+A5(u6O=pMmpLn{g0w-O+x4m7r$wSh$BpS7}R1G=M7A{K7s6%A!BkXI0vmV$riN@GiV=Lh@Q zaD1YUfDQI5d$nq+E;XvV8Cm*OS|=CJ{hZOdb#8w81li>TpUkZGeZK<+W_lEkVeY1q zL#O0$Q^_m8&8AeUmu6}EIuQwsO4^SC>`LE>DicCp32M`WoPEq0F@IBOm_%D;u&ACE zt32x-_9Al(NDcrVK?Xzx#7iQmKp?ibe_Mw$z%oy?88y>*O`M@)PI`PtU>3Fg;F^Qg zv2$?@DV+@yDvO_nJ#f<_5rf(~9AdP!6b*VJipI<045DIAjwrTF9y0(^4#g-|7x_rC zMJP@S%(3p%}bDr;sGuAi9-2Md_^l9$hs?~$-S{;6ZR>MQuoPoM^C25%Y z96QxFaZ^;_R(wv7akmY;n$W6Pwy%*ZYh$2$zWL2^mI0QUwrfObX}357u*_bBtz^Cx zxo!#gGN3$Aei!HnaWcyyvvFPr7)8n7m5&m*L`RCZ<=3XkFu)gbw>L;&X=Gw06 zFs%jteJc|v4K8)?&DT*Is6Qapt?=6FAVy7EdL4)zwZ@O**(vc&Sjtu6kKzb@GAnsc zL<{If{Bj@}8iindI?=JXal{uE&L=}v-ws*|e0^+Ylw?2Wbu;}cPkUuk@c z5P+{Q+=9bgwDTEokG<3lV%~@W^CS+Cv9{5`JrWUbv_aHkr=M}~z{S@l1K!=$xrc{G zZ`2%-WmI=}jkS-5l&2{qE;#)Dt*S0j+{gaIfR#5205aNfIu$`UxNm3#L){%bIM@>E z?*9JJLfzfp$A}G~+0p&|Ll*<@{{DRdcz1sv5%Gcp11aB#6j}a(fXEwSw{$1(4@qhG z&1VeE_1w^|pLogT7HBhya_^|<1hH5%bXIoUHa&4*y3}?2i zOlOVM*me&`Cl{{V2e>02{2@kf%k46)_Ue~CPBYgar z&T4Yic9Vg_d|gfRIY_(!kn3v?kPBmafOXCcAMIXZaj8C^t*K@!7YU!4dUFlxOSQ4z zRkOV8@_ex3=ERuZV^+DC-#U1)Qq4xj9*o-4HpCW!yV!{Gih0nXaQGvs3!~8caC6Fn%q-F zDQnfzQ0iS;f2VfRagpJT9X00&O1#oAQO5=0RmeI_Pzzg$L6r(B`blFHoKu>`G`P_DV>EDr1Rc4B-)G zB9l9v9QY6i_D5Km`lYs@dl2H5N_rooCeNh!@_d6aaTHe>2iEt7)IuRVcp4UBFY!)b zyYAKptk{T)apI$2MD!=7Q#PxRej=Ez=Yq@s3!yA{Kwx|0bvdy=OWZBdt@fImNQ%d3wi?qk;BOaYsoDvC2ge` z`VUMbbwrPNE=gQZY1``UelO`V`b}{28bpiC z@i`u|gy|>3#>TITEgcbK4#Ke+M-_M|6XroO&ZpJ23okneI0x6X*~utvYbnU4`uA?^ zQp*P7Ai`Y0yTac+nJ~U44hOhQHOSZ10!Ryd?}B}=bLx{v$w4wQ&oqAJxo-m-lR+cA zRI4LD2YVj5$l5_R>7>*(d2wpB^IfbQObO0Yb`(5lUac4{U}sCpCaQxD3*IGt{DC+b%6n*@Nn)7Ex(<M#DFTfA(f5ymA6jr)&3v-x_2*Q9V_o<1wJtq;Fhn>Go?;s#k} zR;c&r9I!0$nTcvq@Ea>*liHV6EUF~Es){TzFK7^colT3$!Wka)87O=Evztf85AQRL zq$CKSsc5TLxA%6o^+zA);2EpmRDCC8JL+jMi1*3!MwYa`&IsKi{*9VQxucW>{crbL7?Lrg}VWx(@xlaF1 zb_n&Lj%E0Vj>Xln+ycOZo;2%eyJp0(O`)9aIz*%m=ZI71fXAU&T5)k?GE4&JkvLiB znG^Tze856yEmh}GW=wr50wMq>en}=+-ftaq20G`F-TSTdMGDe=_a3V&nQoHZlOw&k zx`=CxvYEuj2;TB2xGuEsxqIg|WtOa~>sEgxadxJSlHMq__e>qBE4FGNKC_iyR$T_u zE@4Mdd8Z(5#pV)l1#x}@+R)oD1~rr04M0!+Eql+Uw(7crHsLclyi&(H&Z~RDxxF2E z>q@=tM@wXB{f=T~jS}=Ici|4GEM6F~I(G!%ZRgwvM>Z zMeAd-XqGpdI9qt}^(M>9;^D)GjcocZo|TQSzT#P{Y<`i(cOeIXE|PUTZ?rzL)UK$v zXtr+Sw1_qDg?s61&lA-ulR%nUn z*PdQjJbHOEZm-*=mXbA-HXDw+>yzY^J;n5dP0TbBK77dW&*S$ONgjXo6@Ngo-Ccb3 z)vU$ao&nIiehbqtMA`*UL#WZib$sPL$@464HXcXobyj-Nl{p`9?_T2|IcVH#w2sPU zo?UrScb3iLhmGeizx(OgleaHkzJB}t%b#9+*Jww#2ygQcaew%cli={G5KAA`daiTGO(ulW62YuH;K@7%ip zE-T7BnU(jB?%Y9qo+VS@9$uq)uiJf4 z4!y=4Fr@|$(=tC=Wb3lCh*n8@b9nFNCSH5T(Ym_7uoEhkWkqx!p<(r z6h!54ovmZ7QiOSBd|h_t@hraJbpaG3!Hdz9?X@}$^c!D1P0;!Yl;Cd7_Y#*_J3 zTSrB|+g)T%Hk$pp%OV@Ct=7Wjpue6g*(qxhE6v7>lgU*3Vt7F-;_x4>RIfUmbv-cfu@X$LavE!dpp z(NrrcGz%sl@icnY1q)``X_VJXXt=pPBHNFiK6GHtj;{{`-w%$a(d_&z&%mZR%+ID# zGaL-s;-B9gwH)nqI#Ow5n`oAlHz4~0&oT!!&rsl*p5N^iUL3(J=NC*N?k-g9E|cvn zvMXP9jcLJc9SmG_K)TVy0SY)O4^ayq&0)#_)pnSyapvkw(`P`C4q@&)nTpNrek)eqmnf5RkBDUN*=xwgOKD=A1mU_R8iRso^ zzKYTsD!5Vb>={R*A^5qb-XB-kIJZ1CS@9*9!_I0bK|y^ z8ZFAWMq?PF40TtB^aS*edvoZwhyS%SN#0hb*jXgoRbofBkT^0oltMDJoXavnMhXJ| zk6bej;Hid!!~!*RWO*tzHF$Kou)u5fx$e2w(}eq39$FH9{f`8aVfr8B-inr z_(D&;Y&>T|>HRT9$1pEE|k<)XweX2XRM|bXs zND5={EC-8=@JIg6VQ{?>lbzUQ^?wWtdIPv!mm;H>T4 z>%J>GEE-BbUYET%Yy84$@ZzGo7(&5v&yr~u=zLt>r12}jw5em)X2_oi6i=bj?VUTf z?T-x=jA?)&G`T%(hrc1pV+KQIB1GeCoa9DOGK_}>q=-(v7B*=N+nG8K2RAGk06 zvIA=6eJ8+LA)*QBLo5S7+*cpZIhag+f&ECixkIP^%@p{4g z@d&Xdl9Y@<9wV2>sQ2NXMrLW05UnE^*z0Bh^?k2{KjVSlx<{pNS*3f+Y!$mlb`p-e z!%rF6(Rk>Eli_729FAakgFy$03ZomslMgfr`j_x;2}9Yt?9fw)11ibnGcpY?34n(P zhb8<=dm$$GJ@^HH{r3Tma;N{nTLnPN-Xujv>IX1R@c$s}3<2_cU;;n_=nT1lSuYIn zw*$YB)dAA=;LpelvCIg{3_OGYOw{QicMZKDO#6NS;{*+kJ;1UL!!;=TJ-|2(dP6|A ze;N1_Ky{4#*Ms5l2Ft)7y(dQNbp|D%gMAH0X#nj9e)t|x1O^Vml2G`(!J9>^IFG;- zfa%#ih}Kx`9K!+h6sUw<>QI+D*r)fM9ujj1ygh>99KsXIuZO)Wv7bOIpa51t_6GU^ zy~kw_s5a!Z@CGQaJsPq>XN2_!lTIILg3{p!{27ScK|0eD{isLGV5I;I$RG@8=r6~E z@#QF3cJQ||!mMGx2g8k$HlB2bIA}m^_~Q+s@&F_}#I8^R{y-C$*z;J5M>Tj8F#Ln@ z5;=DiG7bhY#jFwHF`~wSotK^dFa#bNb`X=^(C5V_;lv|u9|5ELogVNx=q2dz0G|lw z_n?`8wgaFWqywW5f=epx^)LxuOUlEh-eXaZ>XroP^VsJ@maV|o{W6?`=^(`^sy%2 z*je5|(Q!^NPd;lzWu4}Af#E*C^Wd3$sowk0`!V%?sP%rR^?uBH4}WAY`Sa)Z23?F| z7Nzl*=?t>kSnxkiJ%lC5F5`Ii&Y6_P1M~swqeqp-qP%#dTA{3k1>=&mOnB|3}k5Jjs%a`fHEL&l8 ztELyw&?o6I;4ZMFQyfiA7YmgI!^3`iBOH`5@f1vOlL>OKRby<`z>$aa&z$4PamCPY z-LUn;Pf}ax9KghX34Q^13HSsL(5oXEH(S8vgc4 zul2p*0E|AU+{d30n$7{flSvMyA-vEE=g9;3gC zEe698Smel1z2RjrgD#+}gPr&KLvIkK<3137aydZfwuf#2a7+kZLoh=+20%I>0vNe{ zu-?-S_$TN@!t*lh55ULxJZ9?6-{x5vm0xHMo&foWLm$Ws%rWss$SVPk-vqpI@cPDR zJ@cOwom&sa8iu0p`!jUk@&Awpb;ih%V9&yPe~ zd+-_T7Z14+T!lU`9n66sqo5nXF@W*tp+i3*&K_b^WzqpK;bbU40~Z9qR3nT<&@?!L zY?Nd`2T%a^#pn&P1oSK5f6Otj! z!V?U>L~P;mSYej(u5=+1CQrjQhDSbmL}@pz(Q{T5F& zsM&a!9xxYK{-d&FXYw3oJtB+_uPy$O#DP^c#wKtI=?zdq;ct%+osc>l@c*!chiVkl zun>v`%`OA>-{*1ID!WX+l%~U2LC{M(+~b|0wS=-T0%e0!3~Co7oj+3lxDy@Vwr(lZ)NOzAPVh*Tl63h?`c`H-v~ipCTYto+v*2n_JCBOY1k zhT=aU;uN-p&W+d){)5pU!n^L56zH3K|F`y zVH9#?y8gI?*#$-eSkK?p3ykq22SO7i20OR>)&j1S@$A;^(o@JSon<5c^8B^bj5=FSa#VT4&Gx`k6@Jqm>ME;1DEE4@ntX? zyCq;`O8^$E@XpARfF8>G7>(z#t2-lHf(y}Lpmhk*oe^7t3-vXMx?(02r*wUWYt9bntKi4Goh%@*w~iqv_J;z5oWbC_n??&@=PNg9^}t0+SO9 zf~rCP5o8?=71TSlic97kC^;Ag(oxVOPz_KXI^L(qA52Mr$7ljGh)=DHZIG6G-G zqm?7{%)I`Hh0Hu$sfCOYb{l5Tz^C;CoO4HgvTo2&K^=>x;E-6OM<}kF5LDaN_`i)1pT`oLE$13GE> z+fPzL#_MHLctv)R&teZxzIpJPZarV=EpT5KZkB=!JdOGE@sk(FPrOBv#yr)_v#j*k zv92t?@v?Xx zL&5ACC^#Mi1qc74U_AwK|1f~6p(4+19QJ&qN568&2v&e3TQ@h~AWH9UJec8YWhXgc z_ZdMSp=dn4@jySV%Xr@Q7SLHFz-$@iXK~vrGk|&HZQ{JZ3y`K|l&q8WnHM3b86cri zYf)ZBc}zIqBET$(0Hin1W)~~KkPfpE*$c0UV*vmf$GlRbMNQ4)C>4Vuvb?LLTxJ&~ zasrVaz_g*zEWN<a@a<%3wnqByNeo7{#ddt7Wz_y9DG~T;ywLIHqdz z49G`~;+7Z$G$OrN@K#Zo@WlTL|%z)?ZW^4#(P&R6?c~-HE zpc~VeQ!t(*C?I*HbuLFt3OwGPz<40nVY_yx1w+05;fZ(r^843+ee~*y_w?BN@zu+} zJpJy;cV6SsF}ye0-d~@-{^8|MuRSR7>d}kWzj!ad_a43Y#ryNq7vHtLCqMuA>dEmj zf_nMNd;0vxXHTC%^3xZOpZ)aR(-;5leG64zynGF!3vvx`U%#X_IkcxwjsYIle*Wau z;~ya9(YH^ZJ$?O4+x!0M>lXmo`ySvv@_u~u>h;sdKRtW&%KP!BS3kZ4CGhCQcL4dt z(-+^rf`*rXOEsfC&v2j(ep?D{)8&N1VFE-B**cuKRltNr!SzA z_vrEKr!QY1eICDj@%k0KwxPSPUPD!)4;KCF)8i*?@6oHL$4H#-U%h9sp!@4x

mrcl++@l963Jfq4KFE@MWeb3ckcavvjhS!62DF-SF4f!p+%c^(e zHEmDuzJVtohiDM9qp-=sYu-hP=)PsQ5g?em93R!dGAdqPt$)ljkel*`U5AFX+TJ~0 z?_Nustu>%MG$_zqU!*BN@v0Yl3{z1FWqr)Ly>mz8uA=K_XuhvOXF#?i5wMjP;NhXz z%G9Ix8Ri)n-fyGXIf&`J=+Fl4lC&gf0hkv2Zs2#X@91^9`b!m_QB=`Obzj4-uB_Ed ztp=fca(JrR6! zbf*LW$R#8Jc+U9th%+H)xw%oHD&a`T}=JPE$a=%r9c* zrk%y*p{Fiflq+rg7C#5TBYl;wFsg%S3`8K}Vu=rNp26&=pq-I8=QN+)yxn30M4I>Q5sFc_OjInf%_>w`!VRy_%4)9FyugQWT^Yc&7`~){VTUTM zJN4tXZXmJA(%m&&PNl!b94-P_;E3JuAn^agnbiTLnbrq*vq3)8bS%T1gWomq1|~LK z8vh#lpViafMxUY1TXA$QDO!vI%+Mvj3#2egvvusn(DHo=n{+;EcH*;aQv#QK0HYZA z3-vkPnv3WnB$zGcDPo5Fw1{AoX25F&jMXec-wpu-YDtOr%R)^+2bCubAfR08htr@G0a(Pjp zyMRImRMQ&+|AG7la*UZ(UnFy!BjXj}7GK9RaBisMFm8&uu-h+yuuV=MaIcE*!O21@ zC?3N!#z(vuvyZ3{vW!$LY~D+Ob`NDyetoOTHI!5y-8@bW1fV=uZ8%hP%Sl3(6a0LQ zxkui?K_Zl?gogLbnpoWezZxBV>Fy`qn0glM)mvWlpR&&yZk3+DzRK!*PJhEs=s&OU zPfP_3!zwM7c^vPe2L0`QGEI23e|pMjcp`mF0zHq`H?{OBw$UWoY|@*iR`#EX5KiQ7 zx6Els3wX^N77R*Uf-E1d0TXqFjJh4BSGDdPImnvs2O zqR9+io#m)!k4kjvV9q~7gRID4mOaOS0!BOWD!pqFctcx4I00;Y5m|K$`#sfegW7Gd zcDr8lo_By0$2@-~{! zg>~O7ab=-w6EC)8`=m+nhF0#p$~# z2$pUp{B7-gm#b$H`f!)t7AQ0dnxR5nm!U(HdC_H-%z@%~FCZ=Duq6-TP3BIE38n#^ z7PN2N^}eOcPX#1)=OH*eLiNeXvhC3=#>4<7jIPquY`)PlHAT(3L(}Cwt;9V(@RA4B z1l^S*_>Cj&P^Pi*;5~R1ccP+5&eq=lWa#`)>2yV&)~?ifGYU?i!{t%2Ijyxwct%*4 z#UvPf=3Wv^K88X>>KQ{Qb-}U~13J+>hrvRH$XUx2e%gDKnaUly}#VcC1WQb?D-nc%C ziNc7x2(i_ot+5Z+8^AOtN|}g?r@%KS;zem2uHULg0+>Hn@jc*;CXrb3CR{Cn|XS>od{o_6rXBTT z29kwA6=U&13&6vaR{{%TG!QH+ZOpw2Hehmj4K%-wOT0Fio9K|*(A)_d$URyn=z2f# z*bkciMI}-NOj)TY;*>1J*;U4#=UsKz7{LK)(BV9}o&l@J^S`ncjC*?dST4J;LD2J< z9w(itC(ro&V39!;(L@v^uECAn}GML-p|r31l`>-33Vzt$ZbRUI2{zrIbiy>;v!VWMG3Ggl!EnzX3;|`%6F*q8$7GGEbd}=SNMRpl@Qch z!NE1|g7OlIlI=}GC>C=MeKU0)hKP(=!XTkY>dCQErJMGxj55(`(R?wM*^gzBKHv>9-n z-r%$D+j&py&)Do&gg zc~#c57JjXaixz5j_;?Zq=5L39#Tb-_N^{^EG(KxuMa$JqH>}?2IQAUj#t>b5@40)4 zNMm{_IMt+JmOFcCMFvbZX&JK^VZg!z76)wHQb%RBUi(Eyi`3Y7pRBRx|nlU`v7Ck|T%#R+9x` zCl~JK!OD=h*icf`sjIgt*hguq?U!&VS-pg|@KjkVQ#v;J!deX`8{BTdTEbuq%7{s? zHm((kSPl}j+J-$0me#5)7BS{BB;*s6)|QQz6@{VmQdP3|Qm3DYnL8wRcynOCH(9j;cD9yA=q-a4QU=LoO7> zGKN3Fkfcmh>Xy8=Xbmq}>k%hDC=M|KC@mL#>&jPJv)r8h#(f7zZW~;EMZB^ESYt62 zwINxfqcuicVaF+jN@kfFEMUB6PrrZZ(HD~3^C;EXZ!+BjGy3?mBk;6M2`k4kwIZHE z(_gI7_tIAN>%#hX9IBJId2%WjT;og41+?Xw*H4Wp$%LVY*e?z1!8U@$H^T{kjDoB3 zhV`V9Sy22^3x?mRf?*Fz1~hb`y0$GtWwbrLX%S$k_heJoPQlbM*@=KyYU~gcBgcba z+veKn%DF31Pv5(_+CZWxE@WG7QjW!LY1M>2yzc5w+2xoytFR7K)@pbaqbLhum}v2h zFh@H_OLWh8Ke|&HKn*E}P#Fe^xx+=g7-*QE~9tz@sT1hYPxcYrff& z9hATzKzWsQa69^C%odJ;augc;H)fVMTiU)*+ft|R1u|TXXd$Jyy>oo@4!i)YLDPXc zg1oOi+0I*vVqmuDGVY zK@6*jIA+c*4n7i?Wj1ds#VFSzkxa@wJo z?dPzdH1Lf)enmDUEtH57Q?Q$eFdYOU43ekkX%g_M!A?xg_<%uUtBkALJfH+~free(f2rTK!&Z`QxY<&0hFO62W zz;BV_s=qwpCcZ!4ppRWQ8ZDd9=9W}09ehj6TU~vUn21r78Ew5dH2kRK$IkJ@l><;$ zFH>9j#qmDXUmOzv>U0&=$H&L?Y1Z%JSsJm=&su1+iW;?8qZT}!oJVRPwxgzxJ=FtRWHZolLSk z5eGLdP#S=3l+vKo2<^Prjfz>!&dJia%U632kQvRW?M*FFj==Jnf<@a2(31r77GL=D zLwfPyxN1^q5c4E&~9o;gR&=~*d`v2bXCn5PiZ~PtIsvUnY z;$t&r^XV+m_GbTBE|`5$PN*!%RK!Q*%us!|%;sQMv3c(k#oHKeWJx#qno#PN+Cwj4k~D&pci$qPZYVmv}}G;59{!Qz&+c z5!6eQ8Rp4uc3^a45w3rn*tpq&zDmcN$YNmJ(%xS3yeFB~)1>GCjbl+W}NJIzIPbwOga zFcd3Dn5;D?D%n?o>2ah*bKb&2Vp;<(F_b{DyjUz!*94KE#t-zH37RX%A@>$zAh}mO zu%;68WZc(Y2(zcJnC(_-8w3uuJJfL57F#npV`+!x5@E{Z(R!Y(nrP*$Ivwv<#lWR> z)j+2Lz|*$*sysO}JCWI?%l8$Lc|kn9C)5hT3gY3~Zd}-IFi)1VEC*0H*ADb`15r?} zZz8e`7$ltZk|y{C@k~Rb>u0Am94xJk&w2R)2fXG!-!%m!lM*q zzV)^5_y$+MskF9=Ew?0!Rcy#IEnxIkwzMY;Y;BRdR@5dWoIu{GW%*DEBRYn+NN;Uh zmDt)iFUDFItN;ZL@lRW>r_o)P0y)MBCW;)6>8|BxRsB^seFLSoR+cZo?}eVX^~Fou zhJHtGFae^?8QSc?Y8wLZ&Qu_s&YHG9Dp3$?t{mc83c;#o0+Ntc79`RB3HatpyRNoL z6{}#Z^heV|%uDdd$(z&he0^E0jPepszGWNy8*jGW{A0|lSekAnxwF+o3-yj+J5YyO zJy|ya(1cSRYT{0omltjigAMWNm(SMlQ zSp~Lb=uZTx#gJp7^$vP^-r{EFuKHis*4G(@a-FKzL4j*S52~@|s9ZzS=iVRDu{+0Z z2fnHKTyf4Bept4NRwS-d(rRX+%o1DMR7=!dXNwT^HEvWy#x4m`MhYJ3By}EFzv7lQ zh6+Y(RhCXcq3Hs|HcnaL3swes5xV?5+K6K`$Pui9em52?qk70M`~YG+iDt{DY>N6+ zS-FO`aBW%7J+iS^TO>)Db(4ZAHP%wg+ytR7k8o6kp3RPS9W)496+J5u#FK&qjy8T9 zOkF9vkekJbxS2$Shc6(>9T>AYi1*N>5(lNtnWi$0Hcknlfi$iSx9?C_M+G#;4#2T( z08qN|mOZ|G+h~hCx)~R;-dy{BgXw85Cag`t$IGZV6m{U)bqh0EAGY_!Fg@WF<6;(V zVk&sL?w6!sJ zSV|IWZkf~~Q8kq6v2a>T++O0HzgTN@Y};B(L){W=mnEe}H2I+DjxW4xt4*m|rnk0G zzNl{w9Wj9V&MowBJD&YmG*W^o$`_zy6A7o%pAE7Kzn2 z#@hj5e<)5h-8v93aIZzd-4x`rEt}1twY?P(Uq=HD8c0glL1OY$hwVcLObsY5&hjH` z+91_6g%aBQ1kXsYh;oixG_LWM9PJ|u8|`C)vKs4}KRCd0Mk^x0)d~qjv(6w9K<(=t zty}Y?u>d_S>!R5_@8fM-Q4%kI&c$~&#Oq)90$ZM?>BZ*AJY5PnqZjv@tR5chna3Ob zt`=G%z$ElDv_pHc8w@aTFneGkjp%WR$ju57D979xTJKTm@;uQ|jWJ;^=xFBy3AuxV zQ%d{`+X^S9ewdf&a0^q?-`@N=zOhWJwxPgxt(C~>Lj#C6o;O9)3@KrzX*(=hb`V)j zF5Jqf980a1XYCbQdu{K8ch)hOvjKLdnR%Q ze~G1D#$YE@mg95DPce;^ji?PIVB3ea(=uXH?dtZXK!FoQH_R^NLiOe7hMy|_cHg|`t8ORe> z#JaNWlm{{i536zU%WGQvscx&R1_j;F7#RCF-4=fxCv2)CZtmxR>|GnCPfk7-|9s~+ z98KK7p#>RSX8dKmo@e>-&1#yd5E34f&|}+lxu+H&5~>7}xt?OTf8tLUKco4mZ2GNk znf-)!#XXJ+^hFL>ws87fA2VRXEV24Aj~9traW&P5PPPpde8G^YRLAAH0}WYuf32uf z?U~9nLz+BFWx}Tg(Z*FgJx|I;+iR=}`kQ^gpXcl+!#^(@YK5cd9Rva z5vo9I=Pwt{Mi;-K%6YHRQ1en^EfVn}>}V13AD!7&SJtTuXL&wupQvo_W9RzieuC=i z4GJEpQg&Rw%MUD}X;w{b+gB>pMu|hyVAf9j^R3$?L(~PX*=;wDw7q%0nDwRQM9jFt z<+k>Qk!=HRvyA>36zx(9G~~tmw>MmVt1AKK^#PX3{Gi{rVv4{AIZvcVTlRvcSQJ+^ zGe}6cZj^Jfy}a?9K8Rs*vo+M_HC7tttoP(w6VJ5OPYE>KHedEzL>fVvVVOK;_kd0fxIh=yi zNMEwTbK;_ybcuG1nYp@tsU5Dy<^M}|Hb#(4XL8B|<&Qt#u_MruCq-4f0Mp2K&An9O zn5Jw)$+KCE0cv}Np}FZcq%NE1>FSLZ6)()*)VB7W(8&Cf;ZK@c{C~{MBBzLKVN49m zST|E;R*FI?nqa}fH_fj0_WYkD*+*%g!yL%lMl^cu_8#^Lp=dnI%SE*Hu zKIlQP1>U)rn#k%6_>Op&i%b^j;v-zJ@Bh(hGH?x(ubwGD_#%pk~p#bkTu%Rtbk~}A(mkGZCPI_ zGMeWRdo1b{9}B)JDX(APw=W$hA3pF;3^W7^4SmG74wP(=fnj;LR)!Rj6ZNgtX*O!C zN-aHDcGseyeke}x-S*9Ztk|||Ix1?R%F#@*%5>wZ9kv?gtk!i3j;_Q3!F0&LWVDBD1d%kHb;*%AyY2mO8PGLea_b@k+J z{SH7wQ_GQRZCB|I{xBtms|CeghGKvTPUdX=7Px3qHe-A`?p6zM)=G`7+doNg_7{{# z>;s#hEi1B;#rW;tjk~K-DK913o6!wUcT4hGli1&pA&qhPU3pS($<3C09#|JYFUu8j zVPjdAo5KeWuCA`SSG{hQpFIdBlgWc?%x@g&Raihx-T+oyo*lZXhraJWfXoI9d=sEU ztx=wwChPOV`sOiPK*0KrfS==0&!Gr2{LyDrx5ZEDxz&3(#c94?=!srSxql_NqYSE4H4MG~s7d@2gij^sr z5a`>XCDu|4m`mHsjMOtaeZq=q`%3AmphId|E|4E;UAk2Sb*a9nEb|@rDec~Mt(kX> z5J;MWKCjiVZxZ90hO`?#>)Q#|A{Grp-{m7~hCVz!ir%HZ1I0+woEeuYHQ7+G>y%Vs z3@cVjyQ3>yzv3c6vgW~kb`3l(jT9EMdVDdOqFuX^uPge#aW9`grWpY?TU} z^t;Ha?#u)LFTfsXT1$ESqH7nuZru=I0Jg)ZAE8>fk2BiPT-uNednnCK%3B~+u`Kps zqMh)+cdt`ji#h$;a+R?U_S zE9K!J)2VRXgZ1^STO!=$)yJU>I-8Zo$zd^-ZSfF zO83gdUBrZ^T~ex?$DKV`BqNn!`l;w$e}eD>se(`+=qIsDtNZ$JWC4KS%xT$a~6 z@UR5t|N4g(t{0y*oXZ9^ENE?MCYGfO7ljPs)z)S60iXafxEJL4);YKikuKZoRfYCK zO}64}BGWtCGJ-^h*KtghD(q3Ws>fNAtNblf9B-s%mJ{CRzB9>oG@N>Wy9&3^15IpE zWv@X*vKuVIF79@Zp=9GD=XMq54_k*_*u7v?^=8a%&>PzJC6>fz&ILib)O@SD!uY6I z>({iaxnr^mWy`1NBUNw4xC_~&vSxUp54KY{+G!i}+6*PhYw&F(t@`g7?+Z^(h_u84 zlVPh>bK^x#oCj|?-TP`(brRUMaz{}U>mmqi(!5(UX^N_0OHMRuY`8`j$m~?=)F)Y- zYjyE@YG~svUyrFEw!hP+TwDE0ZDhm8*=hrWIj5U~MNkOMMa&eAFKz8~dtj0Viaz_y zMvNlvq1_oA+EQ06gvpN{U|E;D#4d_vf-3#{dY_4k*E%pd7$h!I|3>4P?fBJg)!mcE?EBAv;$!@925sfI)JWB6h+EcJxYH)3qjd*F zIjOkA_%0kY-V!?$xghH$kG98Ld5r&`ne@qe9p^v1e*WwW5nhM457~|Ow-8;H+d*>t zR`$9Q7TM~Y;qizpcbN4&Y(=Y$^{YQriZ%NfzskWPTW->eX>g~{tm9-WSAL$u`rL%| zB^KkmC2Z25V4F1VM8Z$6p4vxaR9SW|S*%v!5#PEGlIZa4df#|8-`fz*jyszN3AGqu zjh9N5i~y%TH0BpvTrKQ~O`E=`n(XapB6Or#AAxVl_@TfTy*zr{uD_FY5$9#qUYW*V zM0_e|vr4sFJ2=eWDg_MHZwbgYF%ZbtWQ#pMRcUckh}oxGHtV?UpI20EhbXc_#{N^b zhAjli-h4ubCn&AOOLF{}a*&I{^#hLU=#^Q6PG#2JJg@B_aBS!yufBS<;m12x2voc5 z&faC?pSJYxmhC*)bwa9OUtJ%!r-d#PCI6 zNkhaucTRB%3ykq5smEHalFa;A`W8a2T!g$UNNHhNy()l_OERS54xLSFu3h#tE@b^M zbUczB^O^#rK@sg*C&CpYTJ#ZBs|igA>PE=5UrlFloBUgcj(^B?FWNhqI6?nfNeBN% zTg@O8{OcF)zFWL0)HQe?jrLgKU8bU3Nm`BxO#%?&RsF@)VF_Y~Lbq0L4floCh z`_Eco*;vl`wX^i>i#ATWUf9*EW7ue}@+;C26i1 zQ`RN+f^Oi%!S6n6Gf>X_=**`?MP&3*ZI+fX$ivzqyBvr`l3GK+Quf;s>@>JJA9Kie zEk>3N8uVtVqHV{HVc)S~m~R(;cX05(XLr5t+J4M+YN8{>uV1ZLl`tg$K0v|0vmWo< zQoL<*yJ_Nm@x8=+Xlk|*@3A#l9GBr=e>As+?~oX}3&kbozr%KNeH_{S=xY`~76Zl^ z-RpGN?%7Y=Von7RB3feji=siJjc>=vG{w&oP?oNq&By{{5&T-SVHq(*_uf@57E87$ z2E39+Cp`O%L!@zlN~r`@pzdRtyEPX3N#n?ei(QMPAyf_85Z^R+u7nzRI=WaBKd^gl zeE72}8s@!C^0S}xO}B3}V9iLA`>A|J^?nyW5p#FCm&{}+-<92Pn?^M5Cn}5ROtnL1&x;o0E)IOcQWu(Ok&26fc-MHz#&Qfhl+9{x_4+jV9 zBiE+^*1P0yt)})QTe}V=%gnZ;YR&0nS;~1pxmsI0@Tr{#t@pLuMU4ZbTUxUR#>!Uf zXxo_AkficcnBv|&d5~yHpJNL0l zS=SC!*DH~rKAz#+?6DVH z-4SOW#GzSd3tIcr40i-A0>2zKd#%Ha!Ld%}RQ8Oh>+I}}ua3LuwDXm8@s{Ykpf&v0{e#9; zHCt*;`$5C)(R}Ve47=A<?@WhcJ$+9e?yjQp8TzQS~*b0#QMN%`~kUcrEa~`>{4;5tLw(dmAD8Fw>Z&D z69uMnk(ztVw+=HwJHgMDSB84aU~e@W6Ym?P^1fj_;2p|=^bYl0e&;GAN@*%cqFaR4R3)eG#+ znW4e7&N+^x0ksC6_y&p@yW64z<-jTFsocR=xq;8*+{|&go_@34k^CwkhpU2F6@SCL z&QIXv3_gF*j%igd*V7QF``Bfz<*`;xLoq2l^WH zAP)7x6sTWS*0fH6weWu2MwwmAmMB1~mit0bR-CZG&kycboVC1P1vQ~N$f}NX$b%`a zLLMj&qfLG*7wæ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

  • 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

    `$6fBa^BGg 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

    aoOct?lt=AmLIlNcz5(0sNxmkK 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

    %wGD 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� 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%0A0tjtNW%GDEF-` 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 z z%9GiGk&5j+mQA2vz^Mcc&UnPD0@;^VNkc~ATcoq}SvI2H-m{QABXU49y>KBn-6%MA zW$rY3W2bzz&x-ppo0m~)uN7!%rBJQC;Bveswi~F1DKsVH` z9^|h1q&{?`e)Kn-Fo``pm7Y!>pPu#s%4p@*L{Q`5QA#V1sPaBzHOJ4c!Ai(b`H}OX z-rYyBq0RS=;Bj2D?GNhV<+3`5I|%#et3{sKAJGuC$#4T}$!R6{+FTTH0eA_2l1t>1 zS5TI5*&b8uw)yF;VO}c-2*z zL*WQU>y~-J4`pE%i7f_42T7?!sg~19=-+`Tg6AhDjS$^q;-x-1wE+y8b4crQQ+@PU zowt*p#XdE%_oCRKM(-Av4HA~T5Zi`fR$QaAu71N~7*Fm_xATxE$-JRE4u-_x=pTH1 zceN5P(0H<7B8u6iVUh|1S(qeVxa}BBTsM8pYU6gP+Sf~Bas|$Ij0%&u88kr8x6g_r zS?>Z|H2L*%j5en3;@ITfg=7yvbie%NcWD)De6bF!s5D}hky@~EzC=SKK<$Mbthb~3 ziR=(1X$`e{XhW7U84<1T4n`O1Az>m{u zS)FT04ISbvv{q}92=fB$vTY#(25bW-m|sHpOlj0R`@XkZG(B7~6@0MPm?ImnjgorY zB5r@?`N;QkVyKETq2%ec%MYemplsZlg57;rg!ez7(c}&W)t9a{C@Y_sh4>Wl0kG3$C%-=h1+n1zdv!pR7Qup01A#%o?^%^42_@bh z6u^5=gU;xmz78**fnKw2C@DSSy*b?G_e#x{yLUe^4^gU=qFBpMextr}EWN^O9klBngjsq#T*^MK+pga%05dXrp0QiK{L}*luq8sWH9l^iU@|QTgbccm+OO z)hR0FNQ2P!F3bFkgps0*+{jFsvFkIsN_y925cm+JX%9jmIN0Go{#An=%A2lS7cZ81 z*AHfRATLLgnJaZ{6RUp%<$9jo+-611G3+)SwZNjq0R$R1P;WX_$3=QWqoYHCnIJ5% z+ECP&#EQ_}QksddvC%{*i>BI$;O4hFuWRHR44V}#K8)I|?rSb3qoWuGtipSb@c|a_ zEgxm(FK!4LD&lq*WxK~<*7YBos(40HeK;cew_a6U_ES?||HS6`pBDA>bMwB?8pX}$GDYUv4Kf4U|v|e3LT~~ARIQ|B6wBZq;|M8ES zCG1qOw*~(7?G-HPKq2!aIMSCw2O|VaypzP#?t*geRhD1^`thRFx^hLgT<8?}vuj>8 z1JjIdWx!R^?B4*LbExIJ>95w3b9QuX7H7+jMoYCHod&*Q%!t#zeVsR*POn61f8qTN zg{|C7$AQt&uOyq2?lAd-i!07y=2Zg)YqcJgqjm;8asQ34FrEWH-e9e>6Ei1N8FdvLYUl{*Eo6@hPLja z>hM#KgJH^{_Rl=h(2&9ARo_rh7`PVipb7DC3^t4b>cKdl^KBU@Sn&AIoTJ>m=d`o# z=j?{lV#|g*4r>0mqvmZ;(^fri7z;&)IKwZiL&1-jZ?&ssleBa5x{6U=SuMQPt=|>< zPacc5L=$7CgP*=D%mkcBfzt$pLs2p+WS9clA74^VVZTM*E73R6!{~!hY}ePIjD8CJ zso(Kq?>lZ!=

    -1l1TYVMilJ+%`|24nKN*tFM0y0m~e(2OjxzaKyiT_^-$ji@AO! zob6eS6yLuhQycJKV%7P#?1HF<$Hv_u_Ovxl!M)g9u#tD-5dG@Ik!f24yh;SQZg3Nh z&+=7;xo@k#0`$3F*3E<+iKXTjmV0K0kXdr%?!@%@xdCq1PB1=VVDP409?n;B<36Wp z`d|$bI^rsy#w;eLBEdWk0oF7x$=BNj!%aG+Eh2zW8uE zo6TsaGa^JwHy>#Di%=Tz-LF8JdME_;5fIi)h{?R~c~VIsEaQ$MJWI(kA%DfC?Y+d8 z(4&9FOQ?4k$-=y=+OMnihq8EEvj&<-l`YThyK)U!im77r;+i^2N~pcv9}$MU5Y@}4 z*EjmwR15j~c2{)>OJY&~1!E9Y&rckIaKxWbJs{o3{|7#0D}2hE@4tNg^{cnN z_N(u{4dGfB#Kx3um9HHb?r1WLsyJ2TA4~YLEEj^_%GghmC7Y(RL z@Nr?_*SUoVf2Ly(==8R(~)Aqh#n_r^&sBL&>DDze^&rJDV5LxFH;KJ++BdA(E(>+^j#319%Vl;BG zdD-@o9+6QMzVfzGGP^J-@DFPCNLmgSH1O@Kw_k~^j1B^E0VaZJ^M zSORcGlRaaa6vzkHb+v-e$#rSL&Hy+-$G@&?*$^!cQw>KlQ&j3c`o1r1sspplNHR4T z8t^P`r8HdD?hl^<#qKjeq>aDHCjZ;nnq7?_i9}-@oq3MTAdrET&hItbtn>$u*LqC% z4}lZ@|I@qdgiq~fIu3*zu0+N$k51!LK{ndZp&+eb#QsUJitC(s%BG;pc$=D3N8fm1 zn3eCp_Gr)@$5r!>9{UAj9wcWJiXC-&t(#9AZXaa_e7Sn%{66iG=Srnq@WKh4T3R{{ z^LV7sv|SjEi$c$;V(Vd6c&C^rGJHGxa+Zyj<$1X-;0rl2ZW)DaM`O;}Aaov^wvP~L zU^}4-P?V9x)?dAD-*>)3&@pldR zTWI9sA&{)FaehL#HN8-(E~?cl{U^YnDD=xeXHs z0+(8O!f$6oTvotj`MlF?E5|j!aLoodE)yLh6sw2>S~$gWMJH<(zEK3%0nRIcXihU) zTN$byb<-SH;#gPoOfB$d``3?7QQ)G{&XJz>42+ zl4)tgI(&MCphO?t`h_0vJWscsrQ5M^!*7K(We{*wW+Pz>a10}z#R1RwXEf-&eiXj` zG3DCjt(^yGJ=q;_nm91_;%0|?x*O(aEiY@#3O%IJgjmNpPFP_6{9i&~jwNP$a@@cp z;+vda+>BS#?8@iL#5xTNp8n5A$e+U1GX=Tv+vDuB&nlmuP{8vtK|yiXjE( z)&fL3<#L*xTyfOU6>T*9|Kn4bK_@2uM+d&)VfPeoIuuW<^V@$_tqu%3Pu1SwDQfW8 zQ&t=04y%0o#e=*^T;@Somn)wy>v_I>0dv?B*RT4KI*mHgNi0+ucK~NUSI?-fVd})y z@tap0VoKiR>-IN917%a>YnFW~gfg`B_>ktlIvWLTux49Zc=R}UB^qsg=f2fA1bj^b z@vt5jUv%Vsq-ss8Zu!wFPj50rX&J+x1$tTZAf3mP`VnoZw+e8SVhfHNvAVmZhAf^M zYFjSEP*oAf2I97;aR(t{rGfz{+ReJIH`r&? z4KxEJ1(auJ)dINY%iGjMtcg?yW|K#m{`#Kn>L9dPJ&e7me*f@c%4Ec-a|7MW%=}9I z|Mqtu-T#WjV>IUaU;biaUec%M-yaT{_~PLW85)~^)`4|@pMgDk_=`t2|7V@DOza_||UVJ1n^B*xUFN(;>CB?mKee(AC-IF9WD z0Q@8ylmbwXA3vXDIcJdKbku*(sn~rhtJh22w7=l;-*!;|HiY@R_SdxG3|;H#0^>``;Yllf6cg+f$!p_zs_&BY$2$S zM$=)EFq z$G?5Z^4IVFCA|_ICqbUL3N-VeOjCMc!DxwXB*@80u9LT@B78j1lF>q6&ETxr~2v&DSk{_LTK$73+i zjzR|;NNx3HtFsKSB_D_GZkm1m@L>c>$f>ZPvDQ<_W?^%Y*m!Fxjf;K?mF+ zi_WI#av1)pDvHwY()ST4s+PD4oP*c2Y3pmVtaQQ@Z=fJSy_uFePQl6FGfi-MU~TQm z6IIg>;>@3OK4E`!eY|-#QsUFUYMQzkkG_+6Gzl0KAv8DLmYNKtsIEvpVl=(kXfhcZ zg5*x&Gk`V@GDR=TyfK?7e(RA?^a}nJdu%=?8J;n#_o{-VT}mZ2A0Zb!Ej_Rs>RK*H zOy1c3nz7wOPZWJ5wus5DS@!osZ?n5)KHipZNJAu};T&%-Bjby9rZYKVQq288!tGkc zSwZ*}XEM10+Wg8-C1Z{A%ff*T|JjFj#lbO!f+~(_B)Y_B+9>39JRHm;|Us_Icii=rOo2?Gghj03j)Jyc8 zZ9B-(oN)LwsIr)Ozha0^+Mn_)=!G4!9BPs8c=xm@gqIm1&0BN!{Y8QzP)ACuV<$q!2Vt7l%fB;0OM*~k=8NKMZYnwN$V?|Z4s8LO{|`=_)I93(x_W(SF3B!H zPJy+6M{wXBWAAWN67My$P0{Jqd!fxntPx9b7F<1nwr)#dnx1*E>?|&=+smeWLtnDQ zWol~Cy2BbnybF2<5A(h~#3UV}kwbg2k38_a0GF+&~P5-Nxqp3J9e^MLte8KDT zNlnOx;&S~a?!4piz#;*wRI+B}mTbEA>fCv5ibxUA-VB8eV;V#W-yUT>B4iPKJd!JN zG|3LL|G0AlfJzu7+KRhF#yL38&sndQtIfr^T>t`*4{br*HR2QFTDKf!B+*{zbh87y9y$mmigAV6~$5KMt`kD{z@nmKS zKizEdhP^$q`s|EOj@SIt;1cqcQLWXHciT_(BHu^|3AI5N^PnUwfscWvF#mn-n3*%`|_}Dni*Ncm~LB@9&32`aJakn@0>UVzhLO zc0-rhkOw>(c?T-5f}cCw9QyglyWN>cU$lH>;0;scVYS+H znf%GC4w^__-q&)5vz>ccq_1557@thgFe|1$Q=}|`0iOY_`5CdA&v2PM`uE>YhKQOz z9JA=3Wz3t>jZR-uEk5{MOnk=+XK31ZTR&UYmqjQ`IG#9hg0a$D&@WY~u&f2qeTK&f zESizPUeN+R@Bw{LkL0Z8Hc_!9(R|^Fl>9Zj78AP-Gr#VyO=`^_V5Tv`lgFoKfV0sA zI;YS4w~z3f2b!3VJEL)r=5I**Gb>lcG)Oe^i>93^dO0+d_#Z#L8h8?DSO*!pRp>~ILaXQaA?^V(`mQE!%giR{wLw$_AHfp$t`{?)i=GS_LO*tN+chcL^H z7w_1*d~_HgzCee~F=`}C*Y^A9NSkHf!|5QHYPL<4XQiM)XJcq9C0Vddw?L=WL{&R# z37R?usbX;98#eTzBz+;Ji^-aD3HzBv%gV+gfk8(q8C0YvXtdXu`Um`%@c$E?CTa$* z7gf207L_%ioG+$yO_*lE+(Og9+8;INL4T*u78HAmrd=XGQyQ+8dRZx-7WV#tbE(15MmxvO+7XW+9!o6jhWEEhWfm_5tszy=r?17G{BwopQ_xYpa zu3J7cF!biY1Is%yE8>FKOy4qK?KSWXEj*zselk4+2+@OzW3zYBb&)n>1zU z7-J;nbd|3~$vMVcY5x;*Vowh|$NEwe0A-_*F__^Z<5gxXhZc4p_JQ)|LO=(FLC-GN zUA5#=tD2$Xbsg2Pbcp4rw}z)GV5-a+7>M|Wia9P+)*PskxAYnr+Hx6(Y#uFD)TVuq zvT3&DYgqv$cqF-GQw8QJrj*{EAv;~wSFEPQ&>ruL6eq!o#V|=@jtUGWWU1gP=y}{ zDzIDTJa2~Tv6ZK#bF%E$b?!U1HZK4~$;p9-o*m5&^9VoG4HOhwj~@k6`WXv6uQ-Di zohUENPcHAvZobm8%Ucl_I=aEv!cd#TyG5FU&Ah%bCR+O}!EWq8B419Q+IU2OAtG3&Tr=_7HpLi3dWSot4)Dl%;Zm zXMXAP1|%qTRla;m{PUaYujR}3Ii1vj^A2?-2+_joGjmedF!%pW;&+FToB%Xmz~<(oQMnuGu!_iPmz z+ay}|YxfyHgzhC_W#jh}*1qsQ>`(eN(Z}Rim%oGFn*G;(Fp)dezt^?aeS)sQ$!-G+~GSB$`kg8J;T6r@Pyg-qWynv=!haofSH?)8noA5L_|@8hDXEyn`eAx4b7^jjW%FrsS!=~q#2(?d?)TU^x_uHil_y$t4Fh& z*-b#)_S8g8ij8J{=E5x} z$xF)9x}|QQNGWF~K58U+?uM>gv`oU`Hk|iLR13tn-5N}`oKya8E`jx!{BpV#zBbv~ zR0c9|N45+0GZZs2ab2wgw!&Efsoa;h1#-dMlF9qfMo}06EGiJH7lzBtdtn*AL}xGR zm@?jZZ_3rCyH%*IukmqXk0a0p03kE~<9!%-@(Tm(#apGN$E!o*6jgAxhSm)RZ=c?j zsnK|^ekPs`sa_BmdgqD7T;|R22Su-qL>+zumy&!Pg)c3o8beN)=K@Ufv**ddAKFRU zVj?Z0AqB@LczDKhYthtg>!aqyoh*2Vy+K>AHu0cUgisbp%Nj7XwWKI83o#a-G>C&3 z#~S_xf9UGJmQ6iL^~`O)(I)#}=ROE}qq2qkU}U5Q-isuNL3k0pEQysj90YEfD9>5_ z`_ntE{hg~ayLqge_b2Y@1~m0JHN<}1XrLQ-nOqWm3HJt#uK?=R%#jj13RZgCBJ*c{ zj~4iNdTV};J=Mz890=Z)kl=*cV)&)n7EBsXhy5fQ_Y@(MSzPS+Am%U7x6fDDK?Nfm zx)%?u6ElsMsh+PSs{r6T4B58S8(y}@&4XKB(5WvV8YbNBZW}Kq5CFX+&u-d3Ls{e} zdbHbpb~A}K_>aS7ZzmQCRhuhLv8^<<8KFBe237pP zeaV5^NM1S~+A{_w$%H@w33c5ybkB-0scgh>-6BcEb!k)cT6*>_`K_1xaSCzHRNjVR zt7V`B(9!{{9PJZ>nQCoHldSh>>>VbPIPtZ26xxioPoDVaPr{!&`jmd*B$f6eGyQ?l zhfRHzcZyi=Jhj0Z8nCH7v{>n9)9a{|$4koUE!C(pqN%Sw=nHzXWP1pD!3mvEM0?i> z!~LzZvt`cKAY}Pj;gnv&p+R{nR;e<9+iP}Jx1FFCAjKtXTHpNlAMtTe`WBaPKFXe1 z#24t=UO($R4z#v`9vU{#e!nmCwt1OSP{*e?C-i`FXLe;^X0p zkGE8O3;!Q>D@)bwf84E(_?J4GQM|y zrZAWbXneKg+iQu(g7=NR6dgY}c)&-a>&=ixk>A?vMkZd#`~ISajzDxep(PKpi0I$N zvw?je1a!}&TyPHlHxPgUSuZ#VGYI?6i!!>{r1Z8MI=|tzP%OBb^P3qB>kURV4)0vp zsaP3lGO#rzo4OVfoaK@ysG2FVlfyvn)^YzUJ7uDG&5pe`gR8AKb|61UX5Ya7Kr+uM zadeWp!UO>BxLDBQH~}c3p3d6`9;BZe`UVRo+5^7cgL6^4xk--_vMk3@%7KTX%YNq4 z4xBs;88(!mHKcz8AUhSxLoL{BET-IX9Cd06>Am6kQ>B6wnO5OLWiTOJb@%u%a456jYhOOLnc=iGAN^3GH@i8KvD-I(dJ3oGj@LLLqJ9$2gASYDhdI;4HxvTAINBYC9E&b zB_w;3`;NGX_Usni-`Iq6O0F0xSgqjKnbUDHVK1#mGxoT+WQlFce``B<`*=nhDm`hgv-G6Z4L;CN~vUnaq%W|F2$42fi#)3OTFCGb3}_OJUcur0Djxj=6`?!x%lQT_os_S6 z)`IqXQ+KJBf{f{POz(Xy3|-o)6tn6!yMRRJ^lnTmJI$&nS2oQD)w!&^&}P%t2|dNj zM`5M`(`wh;rdy?{1Z5*GOtRD9m!JBE<4=QL;v*y+aS{w6Otg3xCqwXvhGwcqC7c9+ z$FHOcy3p?YoG!k>OXv?v#R&|!w!dUMn$T}zI3svKcg@($!Nh%K8c$wNkZ&X}uS34j z+^`5Fz{z3R(d*LrKS@Y{aT$D3tzk#UiQ%Oa32Ky#L&eO@T1_R3T#gfQ_Jli%c-`dU zmV4QO%$4AR~YurK%@)1}oZ`Cb^YBgC2bx zAJ?<0m1Eog)FH+x;<~&l`>5$z!IR+%Q>+^SOWQ`o&8d_r!BUJlN zTY&vlp^Ll}2^&a$i%eiM(T>cF+%31nORxCs*U^~D3)%rRWm2|{5=*r%dd7WnFyTFB zGxRt(bIt}nn`yls{8&zY=yG$)?};t^goCyZzkf68Iozp(g2qavobmc>m7>?ka9JzD zf5ptGH1dLjb{I}3>f zCF;0|UE-B>1?tV1w=CO|J<-s^s*`YadwI8UIY5t1Ob62lr{6Fc(hQX%j+(VN%-HBd z+$qLHvA6)z-N0HtP6{YOk!_NG+dgf0m%-!Y+3#opMaSCEiTrzN?AB7EM;cl&Nelsr zn}WwFqH!}l$>t>KemLGDJG<|YnkV}gSPAv0ea(gjl%}ohV1z_KW2hLv;vpQxmN)0 zSg$7s;SQA<3@3hIl4j*v*EGVgvzsz`7t+N6JoeR`L<=%Kaqq2x^A$I%bQEh9cm$mj0)j$wpk`g&AW^ zr>@+55oK63m(7{G_J{ACe%3@U8G#(VhmTdY!bU#1f6MeOt}-M(~-14~+H?W7OftdW19=Mm_1s`7GXzVnG!3czU1({B9G zsn@l%<5yDUA4NoJmu2j`*WNJF~<*fg~d9wNJ0Vh9TQ0b*EZOlXDdE^Q+T!INf~` z52GRiKdqRf4qpCB7XPH`g&|Y&;*ZPz{NU^nb92J8!v}eS7sxW{jDh-T&k!H^OZtbV zpIeHKim3ndrPFD{@PgbGoDHj&n{}|B;^{mE0PO61dAP{eS2@xeIN+2|XlPv@UYB!x z+1~ANznD0Bymfurm+Q0oYdC&U>3jEjv1?~Fdxhzg!t_wro1O2(L?jJvc$rfKo7b-h}~Jr9)$=u!SYq!P;t_)byZci!pj`#b&e1A5Du zOy#_OqR)`WiXh<8!Ei`O910RvP*0zMxEOC#t9tR_k3|rOY!MWW0!PpAy@H{HJ(#Fo zHwA@`+#8njm2HMP2J|MI4U$u#y+aVsDTU?%sZDx#9?tnPVA zK`3nM)yrZm^EJ(2z#QGgU~#wm)w_-BVHnsyVSpYxr@`=|VxEpYVsvER=(nVh^Ed>; zUj_c)U<$k~naTyfwG~5vap9S+!_dj2o?tf;p)c-;>b&f{!`g#hvu17h-{by!vj(^F z-tY2Di}%AwON(W-F<7Q%a+l>*xt#X$3Z4PH!UZVhjCrv3gT=D@Xs%wP*ZT%-x}U$; zGn4t<`^>y}Im<`_-k6~Y#N~y?BndFt_Dll5%Ko$de6Wucb@gifl!o?#0Sv6J_*b~C zx;?L|o;H*#n&o`*BwAs*Pzv9LIjnWtuXVe-mRljN%5xADO(}PGOk^m**vz=wRJ*Z9 zzXZ?=oEQQzh&pBKUzH8f0vo7q#2HmW(pHe8O{;^<$3Ny^c6Y#k0lq4}>ZBUkrWug#>@CiuvZK^`*dP^<5x3Lk!28=>hp{uy}R zHFQ6F!HI3Jv8apEd}wPlxR?`zaJIai&1O(9gOvOxVB;(rj_o)XMUR8Y6C{3EQ(gAk zcIMaqnys^&vbo4N>|4XoJE{}anB1ZkYF`(A&8}K}cmUqcyhq$>jj$@3)TtRM53lVI zC&L2?TA^`TXH8j-vM<7DdIXe)ej8gikF+<5 zRDf>-pk3bYRVS6Zv*D^6Q=p61BTxKFb=yCXpKYdu*d|9n)XW72@F=Q6I89+j?Ns$ zpW_vq9Vl*8)K7X$rc>iCR-T>FMx63mnB-+*!_wxsEuK+>BTxwR=4D0OWxgzD$rYEj zkRVVygO)VLcTy2xQwfVn&wKL zG7R$6SNQV4FI#rms}O;-tdV2`!R;M;c!}3A;@ZWfSm6&?)!q;n<^rNEE)Np_2rKR) zMsPI27QUHPpDO$kKJ`0r#;;d1y3xZ|gRmPTr{_>q zMMjhi{jk3Xn#N_etk0_jSOC7zrs`fE#ikg@$Rmq$g6j*?j_b>BS@jggTqy8{>PGIy zYL8awRh$0dE8;xpx?Hh?46MO^%j_JUNur#5NmBV(yg+D>sZJ-^^H*Mv+}q4=?`8G@ z>JLe?O~NtFvL?x6*J6@V1YT9f7PU0BUhc9Kvv3YdR)Zd~w0sB$Pnf3<G zUEw#8B3Rx$F9GzA{8~{E5%#*5;(M&lu_mFnafCD2w|>i}42&_R35oAAznZb%{D2Bq zj_{$|%czv3RA@cquw94(2$x}z@m4rq^|E69;hC?Z56sJThx~^2Bdio4U1Ht6jHS9d z;7m-7nK82{KYH9RKI1^1_=J|gus{dm-*rCk+nT%6JNpe8_?Mi7!z2b!DM?hR(Fv&; zZYx>B$QOpR=(G#D0aw`lP7%RbWYB>X|co_56t z^u`7tv7m*%hSL%l4Xj~Jh|&zZu?t{@Hz~s z=y$rLUJRgP!4(!6nIDJ;zsjFXXhTixh@Dsczl-&c|D)cHqFwb__P*~OeVkO;rZ-lw ziqrmtPeJQj_E>NVv66NpA^+L9nvuK=d8%m_bwejN5T0UDT^*(3$8DYJK>(tyPD8%u z&;mL$hL8k3V71;!hwPGl*+JH&Q*xHb#2Nz?Bqkx4rh)GV3W$fUr6f|=v>N>=>A0WN zIW=5(=-k>;(VcfG@CVDbk_$8#{WTuCuzD519X`r?tk4DOSW@JLXh zj(Xy($61}YLCVw9^!I#p&z3tI>fW($B9v8={Q`M=wFkH?pTE)D^(3x~AhJji&=bl0 zDBchg!p<-@!?r0+av}20R(%?pb6J_=IskI8`{{=E^8mqFaWZ9p=|?5srPwTEiT3)9 zjMA>`ZNKcTD|^?2`*^ypRt%n=Qh@mRL}~%oGiA2E*YRDP|>QOgk~_2 zz8a#lmUBH#O|yW6)#0i>)@v*fTeOW4au*mU2=h#m^iUh|3xtcP2H$s`3nNB3bqaf7 z2ir+UC~qPKUhE!bTi6y)7BncZ0LgV@I5Nw3xVBM6>t%n(8=AlNptSt z$(eJn_n1Ccc%M0RrMFC^7m^TsWmx$mr!@GePwX}|!zR8~x;Y-+*1@t3?d^a3&K26( zy?;rd$x~akDPaX2MKLV9r=vgH|3q`*mi*HvrpzHo?L9Grx?s+aJ-i*@E1 zW8X>grmD%Vp&dS)dw42Z+~K+TX)=s2Usa6huz_F98qIMu;kD83hBgpQV_K?xU~J}6 zKi2%5^{{Mh@VzyY{M-xQeeGk5qzw|s2g86OVM#?487SVS%L^F<_87kpfKq#HY=KB= z-QMtgkOvCCgz|JW>icXlQsSZK%OSbP1;|FxXfk#l)|RFmh)A#7xG6YtX}&Cu_(YKG z<>G@$7Nxp-cr8>N`vKWRJnQlrvlKVT(16x8Qyp5G@*KVv5{mi-n@-NuP=$U zZR}tcEe%Ig!9pM)qc~*-#GPLRt>VLQC!kfT?a(Uh`v)3w*ftEGQVn3+*<&SNR%);w zKB;`NlT#|Gr0dgdd%}fJCqr=F`hLpem<$iq(duVUxa_B4!VIWm`n`PIjQC5Of|EGd zHbV(&8-%qOn#EKbQ};O^0U;QNh$JZ8+$jRE;HgG+5NT|(XlEYwcL-Ik$5dJS*YwSX6SRrNCv4m!l4MlaIhaS!kEToiT(uNPAG{} zE%oY#3c-8Zh;3cJ+T@F>yB#qko{&Rr9_>%GbgjwqzijJe&WKQb>NWlZ>b_~T-9mlr zMkzjWUb2*B^`TVFRcPooL1f}dJx54)EqDWZ1xl-Fl64&9y?gP)p=nG6=}N5E>$+O^ zlQ!7RR|*Q=hD(jos}u+d%-kD20xFWYdeh1vFs`qqObdh@lcRF{j48 zUje?*8GaPY{{uq{(u!TL83K!=&&rBzjqGZf&*z*ETfw>D4}HyP$NAu>xfDAv`lZ;a zg7z5W1O6QC7um}*sy+35EX0YLQ&CB>b2bLVnOW~EUw-Drv{bF*)2Hf_3!6Q2KmZU> z&)!O+Xo%-#6Vh$j%|c*~GLXYzSp`VKeL4hei2 zxbe{$V}cb-;^KU{M3!~8+C(Ccp6iK4oPVi4%Dj0bFFjSt-pLBt^sX;ihPcKqfqNFh z9oTK?@pG?j?1WKa1GjjC3Vx?4Vw#go@Hhx%ql&-zBG|rSst2a^UQWzOn_)ce!f4c=k>ZRlF(*4-xNhN*qTx zi>C2qFQxb{9Ed}D!zYAe^EeyAB^^-L6`kJM3r-TZ$=eoB4JvO~1)O2)x5-&fi$a1! z%&2MaB3ea(c$3~Z_i-Y43&HqBCh|)LQSmrz)B{>{dBaRv#-;Dlai1~pB)XUl=63})A4$~Qr+N5LWW0|>%HOHnhJMoi!^^@PAgK31TB(8c} z$9)t&k#jfe$FUc&rdJ}Z zbn-@#UD}EzkR7h`W<4H#ziw!@&ezpn%fe^vu<2Oei9bHe5L|J*lj9B8E>1=pObi`X z!6&5zSi37da_VPqaWKTUSgLe(-cpOH}7P*-e|)mE8(_=(uWMFNtU+0q58h2~I~ll$qCR z*jQNXU80R9GJ@N)NlShtZk!18J`v&2H96LSs%5r{I^Ie=~ znGuew#pM#HR9&}ej~+b0OwN|K58mfjIRw8=_n;};4V)&g%EPneWmOzX_Ybro)83af zx%4Tfp>rDBC01g^ZBmo+&+L8s0D%n;{@3Tf%cc%kcaJY(nU+IsO60{sx;YKJ8EH1S z(Shfw4bIlEsEiz8=GRXn=El!VtBE#Z%-%}@ZDH_7BsSK(fdN^XMv18I*#kgx!qc&D zpU5XnVyfnXu_;-~#!n>&+H5)Sycu{t)Xse1`6e$0-r!Tksnz#c+x^W(4Vhz&{#r`X zw{~ndvT5v7GX5rx+<1yN`KD~%&CexZIDYHkYDd!q{_STel-qc@s-kS`%SPQlf_KK> zq4xr(BSPF-^{hGA+l(;+bnd#yF=F?S2()mSPGuiV(l?TA;3NADOedq^3wLYh^8GYjg+ZkdUOGc?VgXWPW-3v~qG4fN1uw=zc^)1r9REx1s7p#U0 z=;sg6yoC}4z<-;ovhYYOU*d-C%J0HgoL`=?hO71Ym-UV5Wg6wYl1gT}qxMO-IqT?< ziXU@$X1XQ2BypX2-65Mtzp<{~giVS22NHx4K|Y4c#haDLWB$DO^2;c6(8+unU)Osv zTi3LhUmTQ%Dv(71$PHi|v>fbx zAqZ{~>}~9EK^u}z&}>U^X!22PVCBeav%*Dn6@bMVvxV@vYkQ=lqB+zoTuqEwCuso6 zwV*peg*R}1xhsJoHHtUb{fNr4NA(xxMA942mSR-+Bj?G)Dv~*|>ndL&X(?xqLNe!4u`yvUwBE2hEIJLe7p@~%PAcjFY9+`P zp#2z5F-{E-y@pGYgWuy-K+|QyUC$BVTh?H!@gd#tK8935pAX9;8a6jdGcfaXYH$U#~LcfGT zmStr)A;)zK@D_cDl)?1MFdo_wJanBu)P5g&EV(o)kWdE}L@wya=y+XG5Ky8}SRLm5 zSJ!Kc-{Yz$-9)2LQQqo_>F2~%Kb3d10UsXkY(}6m2HKIA`!!@3v~)}QcE6@*5r*2q zt9~PQ+q^2G)(5n*V%*qYD{CzX>Fg@zerH)VnIp6Rb{oo(r&k;XIWjFyfnyZfcJTh0 z!GYeEs?(uG$H_cMY6DZ_#%=vG;7-V?qtf|49H?7UGNxO;LAX38>GMLGv4w2ooSwcn zL;k*Sc8`9!6Z>c&4}#{gGFjk<{28NS1NxjHnAw$8ppx8pKL=(`-gb&(32D(~_+%s; zdvByuK=^}5a3ie3&q#0XfNY2?d2*ph+P`%tqd(uNBAI>~usCPsAk@L|2XzuK&Ms-J3u4!2 zUY=f;hD}ua-UAOFLNUBPDzVVnFU}}5)WXh^{bWIR$xqJNC2@+tVIWmtQGIL=0__BQfgwoRP648y^ew@J+tun86L` z_RL{s!(ag_EoME?NKT^Gu=771ajm*eFS<+K6cr4^U9M=9z&NCS1BAklPcXQDl0k=J z{BS7TBh`=%&i^hyi#t{|CDF^GT!vT+yW1MR$dn+kI-6y_UUO#Eh7KJgQm_{V;%VOM z;{-W5$AC=Ck4;$hJNw=RSvzq~Hl9@l%js)>DgUSF@V?!C7XUiVE{CO)+QH;5T! znG-(Ut#>U+A-cT3HZR%Y-hVs}ybxNo5hb`HFNUe@@gT!U+T3CYV4cY0%4&)*^QoZ0 zvOhW-_IYFijyUbBK03iR_WaZNo)x-UK{2;Mpa9#=ljv&iRv(iH^PMl8r8sSjHU*~c zM^$?>GtI)9`ys;lEews@FGHi1JE(_E7V7i^V49wr32dJ=yyeUZT+~K~YFrWwo}6P) zy`M8FoCw!3=9potv^Bf*Ofj)4JuD;7ra?@obKVfs*4X%#WuIlnooo_Tv1T@Fs4|s0 zS7{zNK{g70=4hSHutZN-Rl%)rWBWt)&}wJep(=(o=LC&HQX>O!jBXnx$LY-hEr7U#r<&tLed>d5g03 zE9`m&pAjrtZ$RDd0d@Ua^WC-Pi5&sd+|A(7=F zyR!)_Yehn>CeazgGmS&+A^Wk#z__l7&2)(g3xaV0@0HgT4s%fb1_5XQdEVm;4vc%(1BMW^_n=FO=cP3 ziNV_+nJPEa?Dj~6UJ^lsyo8n3~*?ys^y+*sa*^*A>WM+q0iP4EPpmS|M4DHF?jBvO2JQ!ZO^ z!!F>8-8tdje&@}}@^8(lKop&Hf1970)~L>r@&2<737#=Ce->A>wRjiVqsK_0b^FDH zZP|JVY}x;`i~;1_u$D>huPvM2yT}>MH*pPnJM}nG*qi`cK%~EV13TO4U3xdW=a%g! zS@=0jb<>MB5{}yqAj}w>ETZS(o-t|seK}{7hEI7fpr7Au%h%*`Dh@F<$0^ur+7Rp7 z<_6&*(5B?%rtEt{gtEDzURim>5*1P-rdpC6Q8~v9&7)|Ps`PW+2MM9rjVx5pNH8jhdwM>U=7qIzAG5*>cS>468KYKX)-6X4-A*zMNJMOnI=N7uK1!Y)l z6LW6D&m$D%HI^RepFlgBeIXBz@J}C+;--;WO{!KiRO^4TDOT>@&WWu zqSoBh>O+FtZJA7&usq6szRKzUaUn>AlB@{P-d*39wXww;SG*Z4J~zd0=dSpCuy|*S zcdmG+#SgZmHs~EL!fXuy4*AEU+DJGfsT}r2?H$fZS1LzY=Y`b)&`yN`{iW1wJGYj;f^`_FspB?wyS<;&CN1yYd{-u>}5{zOO zfzExJ?ED{dAy7=@3V*MaqA@t-G ziO~+#L?boGzi8@}6IY(W&_2Rt+gEd^oSO#QF!?@{X-xKRC6*8)I2O;#9`0M1$k8;5 z#6eY$V~#4#lYZXhn~T0@3YQC0#zR%k3dyEiTsE!4`(#UQ+boP5A1wt5T?dSDHb2zJ zAEPvX*)gJ8h9%kvX01!X&SI3w!q;|rV~{c4O^k+}8={ew4a06sjZPd|QU{Nr-5hHbRm=Tyt?ug=U>(}+!yY+Wp=`1m^nmvNt~uGh=#)X zRYyQwrE!n`#(y!swfsqIHoD7B;CJ@KmO9N|R7;byVAN(G%1viA*jnhw7z6k_A@d3@ zt5xvv!fX&)weEcNcUGQT*9t0k;}sJYo}X}z;^p#C(!>S&bKr791U}-~m7s$Qz!1*` z52flRQ(0wRb1k^tbUVI10p2D*z|(Y5-%ni!b%*a{=p zB&_XkI!;f4&xH41ZQaw~8={-CPvcZSZR(H3Guo@x)Vkg05+9$v$*Ov+`sZqpH{Q4*dk0yN`xxv`@aRC69;w`pR)O9;@4tNoc2Gkb`Cq$EM`JEJs)4K3ppcNm-;i`&ESVTyK@m-_migTO| z?|~#TRxwFo7uT$#n`T#2?3m-en2Ad-X_s)mNamO}$1;<-J;_rQ-{CaD38hu1*$JNH z*@`YMXyxfZIZ=C_4F5DGIhffxxjKy|ET%yJzmw5B#0i~@P9;_8tF!SH`~;h)-S{C* z5?F`BM?=hMKa1cN=?17yb^U=qm8SOrlc`DX&gv3(w&j~mQ`3B4ChK*X`d;jF`A~aj z3=NZdP9CnbpUwF?BnDpYb+B6^_UE5y-9CQHrH-jr|9h%Z zn}nlE9;FICeU{1RsG6#8>aF?w^)5B~J(#iByT0lnD_4jH-oLmE0wzhoo3ZJ3FiD3H zHR30W9Sw3|C8NcELk$y)#Z}o)r@NgDssCvKuF9s%pbHo7yENj4VH{($rd8c`>ZAuh zm1dnU!L~J=S-fso?1kS5JEix(<-gt#k5Te>cq3o6kMS7p!e7@U`i(y;eAHnxX+7SF z4z$1+A$JA?t_ni>gy-4vo>wV8qVNgeDq4NEk%(sw3kS;z(G+q7vO`Vf3u6X4Co6jB zs|M)mjJ+C&wUS$ORYs}2X{HQ|NrN@U9E2=%$7x#hoHOo3G2l6(`EAi`%`Dq!zt|)V z@thO=fC@&h_kQD$g%j;WCqH<{!OiQl>fDbt5pXeye>aPVR2 zKjrPkwhDNEoOIiEBO7wst~Z?e*%S*ySljE0*vE0bVX);y8lZ2XmC4&${RkQUoiU@p zuqaE@dinM)*Fd9raJlZ-Zg~{8cVB?r>0;pIjz@i)mZmY*c{-ti@$Hqk`*a(+2|AIy z%$!K9U)(E4jdCHZvRk{}FeHf{=8pgBmzvYed^q;t=lKHF58Nz?UEA`7)G9;q94B40 z>Sgh*lpFV^!bpSZL8;+DYr78_ni0R@C;lvHBi<|>q?PpFnp}fA=q+5-%d?Cp6=%26 z@K&s1lWfVX1LT=oF(wH6uwO#%D2JNl3{oT&T@p8p%m7Epf_-Aq!45E0Tjya99!N+d zK^PLs`$=?>ru5-q>H5xEIPM{fu`KfxmU>Boe!TyPc5Gt&k9H3{1#$jbg63vT z+15*m=9L=?mxw~vc{kK7`=&%#w|8eL%i0Pi20ud{*nG`uJar%02slzzwy`_6@r>q* zUo*|x`|GJevNHS%Zb!XIsDJS@=e;woW;C{~SH&ddDb8XgL|i6 z@SW%tk2LmNM{4tPtT0hUrdTQ7ovO{eP#OvDRPN3{FKnJ_nVQ}Ap?42!qKTs7#7^cH zhy{_>{HL=reG81&y74>*S)xA6t0fqOSyzkRbUZ;`k`cX<>`H>|)dFQ~fmqTYatvSt zh`TV0w$j{X>?f;?JI}aAAzt?zHtlgxqI3e(NQhCKTIRX})zN^N)yJWSHfg4`OFC4S zHJGZ_)H`tal0=hB#IZ>Lsu3iRcSX?;m=)&4$%tBzSaTjpC-9Y(9p9sg4cEe)O=Sbf zyT|-)-Hz0G7NH4i4P2og?RD9}s~naDon(&=I2-fCS@2>Ck%)i>Ge%VS72-7k2<_2W zIP1BYcOh**$+#!6@XObn5ZNQY6WhB-52ucZzVq^*83CU+lq9pumz6R<_DiUXM79Gj z1!p{_HyyGHBRz*!_u?Jx=z4|Baq5zyF^$O-aOeY(nhcHBVX67tQPHMW=X5dKrX?ut z&(9>nEO>fVSGeNO5DCl|^`<>K2t0NC@35+h;A5N;RZsa)X)ZMxPRh>naaiQrbTMf? z20VJ|pK%6&RgX9^<{U*}ed?KNvk;&xOjNnZ-u9ea=B-$5B#_s=phJrN*LYz5+VoaI zzoOoZCzD9qZ@+4pv?$9^owO+@v}Cmr!^Ai!GR@)!hg2fAToHj*81mP4Q?I>|snzA= zbeporKj_VzplbnTi+EJ@?N=BuJb){$ZEz1AXKi~4!*kgHZL@9);Jui|q_gm^WmBip zulNHyNiZ~#=oU=dJ~^}fE=Y_6{O;}~$wP}F6SieJG?7v@tKwb#N{>rC*w1$)8eO#^rkWF6*_^woDq9;|FxXw-M@eS(Y6fm8!6>N?PEeIy);> zsYaq7$8Ih9 z&8>UWLOTNhYaq>QrnaW*6pFb@o&uchth6SI^P10^76o|%3FEig_U zc50ZqfxXVVi#C~i4*jJL#n?5=p} z&?l1A5N9;$V`hl9@$w0W)!qyZwe(8{=70Wv90NAx@b2Tc66@pdIM3epk0dZXVbY|v zYkrR7rk;7}M78B1s=DVFpLjg)LCkXwk57)-UE>PQNH|Gon}Z{ZTmby)NmrD(gOj8- zTRR0wg-!01m)^_5z6b7-H)(cR->1bT#=vS8ax(iBPu`!V%`>L7l~00!QndgubC1p0 zn;mIm*Ht=>>rC}SCLbxm?ltSl1gBKihqD1I!{iX$_a`IAT)?f*!g925zX{T@^y*qi z`D6hrWEf6RAyDF0xAHDfWBCk%G^m?iEt5+wp2SZ4WVD?@6Un37#i@KtdX zhhsT+V=<{c0>IAposobf`Xxx))lWNfa(ZV)D*g}QCdS)EbOV~*=8Tp2D&J*mWYAnH z%BU1{q^tQgQ%P=Y4373@KH7++u9vU}E!J=NTQ*$bGfYwpZMsrLsLlo(fB;=9o`9lR zbZ9WpR^TgsN)4K2>sOo3HC}JTxyR_{MP?Vf==DX3jU=7~2zbgib=w^}Ey5(#hkL!X zBUj9$eD^RFQsHuJ%2!X__e`U1BiAC)rWH5GVO+x31`s*oX;`=ZMds=6vLgc#qxkv0 zep)q(Et}RKPQ9jm1PwR9QqFFp4-NwmHVyO*rQ2rhIM%vU#|J~Ktv|ADjIH~MVyF7n zmh})vpg%e>4J69@sQ-&{7AB(!K(i&XiB484QPvu|*qTqz^!=*6Z`+2=qw0*jyeQdjYoWzOal^jv z2A+DpEPEcAv_()uR7Gku;Y}Eh-)xnf^SFrm3of!<>`N~W+CVWC0B-0YQ#^5>M8(Eu z7J54~t}#3(5izB;&_jh~_k?0f=+vt=SPPp+x6Gm}E*moSe;4frY)+o33v~^wl^$VIxIi2f)of7UEfne{oaw9BcLfI2|#m0z`e1d!cdj?** z5=H$?D|_h;wtMjTfYyc`DQ`$J>PnkLVhkVim?41zYM?!{f25ibQrtUn&A{7)-j2Tp z*T)P;_E?Iw7u8t@kBu#H_M7y_oGs}#8~&7doF6ete`Eu?6FzO`HIBRNiE&j*PWBM* z7iVS<5dTM0#DnzL8G@OvjSCdfMN0Un3!1=E!m2nKDp;SY1}X3a z5*#{DIPkvDl>Gp6Lq(?pN%Hx+1VXMDOeFz}9$Cgl@|VkM@c|*#ynO*J$vK3~A$4m8 z8TXPi0vH{MiZ080vXkq`e5$+X(a36EonPVxH}VhX1n?Va<4)9%VlFxFZ{36uCr8&} zk7W&om06*g8ioSOwx)Nm^Bb{d31&54*CNolOBi|!LHz*dDsc&hS!E^`37mv13p3L$ z$#_^K zVD>3la>T36?3C1UxLur>_=L*bN~tpuqjxXyFBse~+K6=SowEy>=Jf`Qu5o;~)Gum-U$E3R4qVX3>X^hC+1jnGFc|s$dG(G_xAalNDM< zrIx#F?X9?XyzbT=W7Q^agTubRitqc6`U!yJL;%SwzYxr8y`FliH**8(sdzU9js!23 zdB=K`NEdv(PfLyody>jgZdl`0NtK|Zgto)G9aJNIkc_IUT6;s*M%8f0PKjeq#>;cd zy!0fqDe~Gq)N@IT^WBiWIX!>fmg8x=x&0%L1CD?-ItL=zP2RSFZnUPmlAS2;i=iV> znwn^oYJF9Ikjq(*aF`ee*Q+uiMgn=aGzJsafho)A?r+t3W#LXyHgHXR zp7n`nnj(zoblb%nirc?qYGfVT;EVYac{4DJZ@>l>u~=8q2oP&zbL~jv3%LL~Z-Alz z?O4dw_)Om2fG#6(Z5L{tZi4io_fm;ZgLGazA)y*%&zz%ssE|ZW zGsq_HDGGh8^y2xM?HU2prKP{)IiQWh&hm2rTh!`3U<{tnQP&F&$v51;>P4oC5t3t7 zrilv=X@6K1E=NPf<{WKSax1F>g`V$Lp?INf`)UPJ+}^Mh)fb-3Y%an>Al_A$R9$3n42at$MH0T8mZlSh#!}pZIdmkM>;e5QsdLK)* z@wa|~faKkV>cB{C>Lu*dY5Q`d)@{qbz?QEG%yk>+=?F%8%MO_)4F1L&rztrB>NKGj zK216nyfJ}w!WFl->&2_)DgGJL5cTLh@S^$RdPoS_f6T`~v>yE)w;L3cf(9B-pV(UG z+yEm58Bv{mBX$)Dqw&Nlh_tFy4vhB8=R{}p6K0WVkO2L;H0G1eG?5{FCAqoF6}s1k3>7A7#B^|< zw%mQ@E3qbSid>NG!c7`11LE*vzSbBwoTp2@EWBwRdnPFZK&4(U2Itx<@Fa`OS8QrW z+O&&uxuGwm4l1b0Tl*SD=@rb8bgVs~t+E7QG_N;AuIo}*sBtAMl8xv;C+2KZYP7qr zC0SptzN~LbPkk1>{cr8VrElW1o--{YON@*Gs;NVkrw_R+n610kd8GAPmTGTMhMDt-0~uqWY6`o zhJ)pzsY&eGK%^O~_B@lc#{KD|Qe2G&5e=S^beSfv8DPP>pNT9Zs)B{2gXa9u3|&{c z48bA{sNW~pAtKS8rJkeIwGokQ@5<<5)tOV_-~KI&B0#IjKxn5KfW!xTTcPJ7 z)prBfmL7Q5*gNaltM^v`Go>C??Ar*B1ke?Py*C^pHbao_Q}eDOUZQN}+atFD!MtoB zU)Q>rygN&T3ywh*me-g-D1#;_9)m6KVh-=TOizX8BWCpzG*eJ>;OKSfhVZ_hX{f!N z>s`wA`J_2c&7`S6G?Q}hi*;cD%>Bf)0q>((lNYq}G0^E=zZ*7%M`+?Vk=;8%cr`1J|Ogl5k)RXFbk@TPXJ%>IA!-o3w#+(;Dt zU!S5qdy*z?vh}b%4{AJf{F;e(?XiDjXS0cpuF@o1QjaM%!=@}Tj_$YGFK|BDtp^?j zG|+6yo@{=1_MD8x22cPBg+ifF4{O=(?~#+PmVVk?2`#kvE^Ww8fgqCzzCiB;bRJY} zaRKy{s`O5&Dqj_6)e;$-p)mo1-m=A&O)DC3KMz;ca8gyvDP~R5$;|z$tDY$!Mdt*^ zA;o-4Ceza9Bd3~HIO!h-BYl#Jiv!=(lLGLRjyWK4YHt(=^Jy?_v*?EttgFEM#8K0`8RAu97x>foy}d`+S#;RuGU-nqIjxBpX|DL^Q^=c^4o`< zdK}_aHMQE|$b6!3e&LV?5t=ZYxi$I(oZHR4-+WOPPZ-@R2S;NGa9}6g!D%RXrm5>B zM)SBlJ!RrlW)MO?g-r$m8u7@~vM*NnKXozH#we`{56a3ONY!O6+~YQIy6(IRuSIt> z?nD<9G{@<(p^D%=FHO2zd21tSn!%^>*j*N$Kum`{snwb1IVRs|4_cl=izNuiCETlL)mb?) zmjCLl6}DZE^=a1bjW0`e-&MT3myOAk-h=N3K3Ls z!l^&RrGRHmUlo6*e+8d(uUeC-f0=L(5!iXw{K)!+sT*mpIKy>a6gU=7rsSaDRDbH! zhmROho||=-vCVlzJpJ$%4LLiiLdCRtiq~^`mwU=PN*9^u5DG%AGUdJ^Nwt@rUZaC8 z!c6(Q_bTjJj{N-o{{wGXhH>ZRRV{YX}Y7($3X7vJN{0j)~19c##GE0c(N8Iu_7D@xr@yB`jx68t*4!dgJ z?`RYu+fnGp`EjQ(7KmlaUyJ~Jgz^m%iI2d)_pqt;8xge!)sJhkbhSpb1&{F83gE`IUd&H1FVTArU2jg$H2FR#ggDAX0$neTlhKB{SSfH@^XZy#+{Fk@ zRRyXh5rwCL|89Nxi9~a_-O!w2Z491rv$Nwo3x&gkae9LjH(4Ro_dE$gReFK6^dRgM z%Y4SJM{kNH?fX}nUpNmhihj%=$Q|erMSpNT*3EkfhAn$Nn_3FY%;&>qO`lC$20gwk z0m|hyX$cR9$F1CJ;`S);5 zdz#`;&h+eI&*J`Ea_9;thf;(_7sfvZulB5PaioMZkl zs1qbZV1*|TQfhUVoeqS2rykO^H*jiVQc++u-b0Bp`bQrH`}7VUb+BgLh8+s0_Mzd~ z>sOg0%~;w&k}T&AiTd6`76DGP>?(B8!Skg!5Ts!yY>*Ss_GoFu z*v1(KhO)&erS<$zMqSSZ-1k|Ue_vrorj3lK!SCdJSroq+eEcHIb|+eXuXpK5?u*gG zy#W`nVQsxT=Um_?A;HPqBAJSwFQXG))=*>rE2^oocz}D}wE3wJZwgeRpRkrPRQHuE{C|Vk04MLYA)jX;IC+ zm%iSghCgjf0Uy@eyeVt(xR7?F|VDr(#9U~fReyIdvh3p;N$*ePa` zn-G!xDPJnEmUQ>kAorn&`U4^iIm`HGKp3P(%P_?$KJ5yKpn3M?PhDk>IhG zr8~#jFI743r3ub+NAV6t3noq1a+G++=+4BK1HtZ;RSS=0)!uLwZOFJBiDF_9F>qp4 zGO9T6&MIO5XAdFF%H0Jb*6RjveKD?Poj_8}PC%Km~PGE~^xx)M5NGVE$ zjI6k`PpZgSn5}NuGGC1DfB7Zxo3DQp{3gV3&^#c*ZR~N=VC|aO+?IWibrXo(%W_&g zCX>NtV{;}V1)LxofNnF4{y2#5pA`m+D z2;ZPK<64^BcgQKyItXHT6ROw4V;$v{K{BuAPstpe3f$1V=ChNYus*M@(7JTgkbY-s z`;0j&cRC1fI(G*S9Kh%cFw4hq`Tp$S5i}YO%sIMS9DYGULQamRewE7t26mL51E9a7 zhIxj1Rm?t#5?OkDiy^@^G(HqgbK?!;qJ$QEx9Ccp7_rW%_%>LrFHcX)>o{PQTy;yx zK;a8ab2dNQ5m!ldTFt2y+f4!(^ShDY zjzUc6ve!2gkiU>1G3;>QL1Pox&tiO#OiyPZZ0>bLy{>=%%e~LB3NETpn`KUP z<$=Fg6cm@qM56-HV#h}Kl(=Gn<5OAoWL8byW85El2}3K|Vrjo^%egxd7lkC-hPFV^ zOvq;k$H;M>NdV|5e+C2@sPfHMx=M?j1-In`mQcU>t=@KB9AHO$;I3 z%MP-GlurHs``;P*yo*;9)wJj3!8k3?0%^dH1ZOg=QL&2wTSz@MZ85lD`JoUW>9wXVdCcTkYQZeg9|2>v9pOE5YWt8)tU)Y0oLRvJ>-c%fTI6LMm%-8&*nh? zoJdg)7BI!8XErT>c=)ibVT6|#9AP%Ycl@5%zw}hbwq3zQ?oj?($CpML#kVSUzwsUq z-KB0u+b8+~^1ED>vuuJvGylED_|l?-ep5KmMAmF*k?h*r-893J&{aa`$@1bX$o{j_ zYWdv34+d5ZTi7MNJ5$zWMGcj?Sb2awRm8&4^PXbK&nSi+*}+9p89SrziC_0Hk>~GP zp+_@;-NdE@v6FhXKoo{f7NX+V^y z7(@SUlYO$wFfEzsoM8sd3iM%@HvSC6?=9LtSy9S#GMI=%TTg6n~QM!>P$MLmbMtFy1`=vVNK%7BQ6x;;=Y-qFbQD9nGNodcjgmBw{rh6Qc{SNO7SPV zDyQTaAU<8>7`Gcv|I<~lfG%7ES#Vy^JuOsuMaIv~@8fE_}C+gOV);zB`g^y*^ zpSrB8#0#tX#!R9)(1@hq@jjKF*~l7N z>^N)_NOk(eIURt;0&u z{Mj57w3yb<=hL@n$UzV8f>AUIRn9(OCwAwcgH~|*qZUxjfn3(bn`QN(1mb_DnTTkw z=s+?Vm*)j4gt+7#JMc~IapQj%3>d75QjfDa_U|_gZ6waIOUQA#GxH3eGz{tPPl?DuBpO8=XMrT?bPb=!eHb%ENwmx$1ss*hZG8KPZ|;&#%@W z0MsVXJJInT9JkQv!Li*6ri{q~!meCBACej_up+2NooEv^V{v3|)`j#cLQ85lCjwD|mf zOxINSYmn@9kZuFq`;jw`hUZ;mmn3L6Yd}A1Rb(bPFBg z^I#g<7cB1*n5G&O+f!omUO(#W_8z@VC`RTN-y)dni`l$>l%B6vi_z}x)zwvYbw8_? zXS)Y`dwaW3BTXi=yoM@bWZ$K*ano()^qm4Y| zg7mv@clj?LmX@P5xNmpQ{3?8hA@0`JDU7&=qd(ST6RuiZ2XLU;*(E@=6>y6{HU3A9 zVEHKB6CGM0O=#?I-_qTxs%EQl(Ke!0xze%QpnL`L3)E8oG;;N{Tc>DCRLzUDmA^V2DLTspo&B2K@pkzYdo!9fQthKNgzR22hd@KzH*aw? z!M9utfu+aLe6r=&EayJM^2ki2HH*B|qW4X_-xQ07Xzrgn;PEqi0YsXd<`?B`9caV_ zgUAg1+U&Z}>;pITus+YH)m4h8WjfqnTqk=A3Xp(*;&1$$zVF-b_-At5T^FE4iZnr{ zF-67!hcf={j}*8pE@9+76K=e0&^<^uzMV5CeA+aG2ngb6GX0XnItC`-LGmfmVY&Sb zjlp`+a5Ws4256A}MyIhJqTy(Riuf2&)=xtSiS0c$`KuQom7u9D%1CLa=Lu3fGk2_S zrSu`I4bCq5C}cPhd1bN9low0jgx3qz%9*ZapBiO{R;m+N<#qmW_uD2R0i5 z#Yl|IW40p_M-7JIENBVUiHzH!j6AOe>};G33d0<^7Hnu29vy?3q_sbxnf5aYG2XuY z3DlS|jeHI=Xlguls=Ly+d_)_4%AHKY^o@569G;gD6h; z2cf_Ts%GunWdSLZ^c?tX>>9#myVJbe>Dm-(H@_!fuMt^+NZZ-U^rguLn0!Y~ir(oc zBp4r10YQChmC>zyzIjO{k@HGLhcmfc*63Q5QqZLHyj*s;DiCD2NWMNj#Z(cvk3y`Y z7u{SDMq#(r-Q)m%^aO+ZzR8J3$zH!tY+>N^Wmrrvws~Vb#u)&E_IJ29d47pDya)Dq zvqHZe!u}=*`^Rm!L#fy4cc2Y#@j^Suwj)JjNL<0j>rs?F4wHkuTRe4Ip6_$WfC8YaA;sCU zoT4aO|7SSHjx{?hr%y?uugy_I0C*56*C~mgKx&;_pX^k7@@S%Gf!@QAf=6_c5!zq@ zS(l`Nx8LScQkS7lLyjSSMKh|24P)U=gT7>9BAdp4U7~3w2khy!E^Y&x29=(MGdg)- z&`eu9Tg{VGb!yEmkKCgzHISx$_qJpCxLH9Wh7{J41k^(Osr6{GK_M|6)_nCCo!B-# zxybhhxF;vSqn8Zlgb*HcZL1vLgCE+rUd}rn^`0o8z%QUHdcBeRs&6(H{ec$X@OMo5 zq<$$e8N%zVB3V`|eNKd@B5)DakF<_SuoET3rd@Vx7{b|i>TIE-WGf44)LLUJluFV5 zEjD3(Y9%-E!#JZ6r&^o%%G$qtJ~^+JDY=)!0TSe2?WfjW^hk=7OyiBF@m7K|Ix89C zy8toyT96NESwuL3j^@>pMu**qH1RJydjqRIJ`$SZV|}w}F<9nHjvmZsf_(D{+vw~& zQmnO8p600Oc$Rn3O5U_Ro%`ZR_&G$3P}dkD4QQFce<|;`KG#22H+J`_*A*eo05nMm z#nd>nbC*v1Yd}&OeN+ozi!SnCFl0y4)ik1nlext_1>GU{8n$}2H>|xyZ+CiK`fHeEY&ggo zc$0@A4>7*z0h!2*Dezv_vbK8P;xIG2MA1X%dcW~N_mYhuzqdD@aE0K}a(%F^1i6Xe z{Y%a#P`*phO1!X41vwmj)CBFH{}ChRcbG2tQE(X$TxJ2smqBCAl~pL_5Z~pSsK&$H z`i%qMDJ}x9u-kGu#hN)aWrMvP#!Zv+sk&RXOd{T#kM(w|xYsdRUCJjKkS~7(B@CM9 zJ@t-?GoY7L;NL6=c<@xrn!dPRK=W^tgRl0;ES7$LmwdB_B&zz^|9Z~{4rEJt(_LXh zjH{;rKT5E*fQ*2L0Dc60^n>HR{kh|duNUQXItxAPZ`!XMC#&;j?I_-pq51~4eFxdL zL1=my1fmQZ+bVPk*dWArq&!_)oeX)cpU7o;FVpK{?^aS0`IR;Z%yn6+r6Ecmd zRZp@yaf9bf@a?8mDvcO5;FkC2zm1_o2%+bB{iAsy_td?f&7Uj%<4@F9^pQO^;p(=r z_n{5YO{uan{l3D!f)Y>zIZiau^&|U^jX`;X3a`Xg{@T7y) zMfn8fgQ%57r=eK`6=AK?sioA2JnE#|i~tgL;7Q0lyc3X81t=-I)UMetJ&s^y4imT7 zaN&)--<=mEX1L`I_s7o}zkxPhB!~kV@N|sa;0{M*@n$x;3+n-+H|80)2~Pq*au3BJ9SSw!?k= zs?qVCqNCZ5{)ynn{piX~U4yg#``<@;0LQ*v*&vxd>2Jq%B{*w~7nnf5*T0QRE1RkN zN>tZ)J)lNlFM_BQjpt<$*QUPXifkyVTD{5V#jMTlP*~Ra0|{6}jkEKQ55cP(&Y*LaD>Z)G|^`2mN48KLXBlt)B7%*pEnjs6j*iN`&ZW3EN-g zQ9l@ak!mSAfTC@!tIadU*|J!tVZfa{AY%JpTn&LAr5Dv@O_H{`91?cAXp%LC3B+Ti zEz_pia4md=-``Yq&wrrrXQays^Co}2+SWzuT8GMWD3l3t~CP80o#>I9kTNsA_46UlEjd z)l(hEwrB3?`v-%>pG?1XoQfr}wnlg1IN8!n`u&XVh(|aWw(E4Qod#5}?-#&_dsHdS+R9I6#}v1IkHt7S|m2UIFi2-Kh@z^*&7m^D4g z!?dT}kVx50XhvPrEb5J`!;vb3j&MD-BraI}@gM(4_5)$WW~~O8sE`;c2q0O74A)}| zjshvq^7p@2)1|nY#2jM>M*DE=kPufeo=M{&e3OtNPzmdFUe9{l#GF+_+;o8PF`&B| zY(D7rw-%I;tEhy8@o|XY$jo>sa!q_Z%Vz!k<9>K-ZNa0=B}9)h(=lD@BOJnU`@E3M zVdyB63IHIJ4se9d=Vctyc+A%0xD)VM1}6l|`gDe@`)AyqE$9Vip{&o5Z3x@*t)TD$ zb3{YYt`PLMu{8$)HsD||)csSV0k>gK2KrMuJcQft%l7o()2?>aJhasZk#D(_lt+_w z?0P`w9sZ}^tzSC+08{}!|Rv3N$B(iofEhRHCve_b}CrO{u7(cDC33zAc} zI2cLmdq1P=d3JSPPR`xu;y|cp(aZ_T!iM|y1Q1G1O-|@&-rFDH8e1nOKd-89iL8b%{ zIxjBmF#eQr0tlHrJe&)nnJA*s3oiNLjyNB6A0}&t?c>@_-i)EJmS+?=MJH-EJA_-i zi6pM$?*9PV*5!Ix_a|K%%ESpu-%s4%fwx^(L+@6n=(gN$a{$Lsz!u%?lP4z^R2Mw?b21c#S01%|=DOI`%T`Ub~9xv5mzV2PSRVD8I%gfw+XPyb!s zgXO)$w*zaw(tFT2G*H{zpoY^D8 zhP%jV+BRO1B~RwMbLm57t@H3AjE6_Kc_O}-A(ZI+e@z-_bUJ+Sa1ag<{Z=IrO#?VF z2|1f2PdnB#T#wcBOq)lJ;c|eug!v>-t_}af@Ujg@Hq7Jy93C9Q;a?3|k@-=S)Ycjp zPjWN9t*vZ>l&$MTs2>v=4S94q`w+^nD;z?g*1r{nzmq)Y+i+|)FK%X#>$4 zl8~jWjGaSwy*6Zp4hDJ5dlIoay-@&GLg|hhsrnJ$<)2f8=v1BcKRif$VKRr)mC@2N(HG#1a!tvvi$3Nr8C;3uBAVK^@r@VE1kh%MVfjGu zw|mrPK>zJ~21>;lrY`gn;E|s4ykKC(8O(rY^yWpfi?6xvJ+vfG*D537$ zKtngK*vbh7+Yr@;C-`ShnF2eZivqpCg=;A+0^4!dykGuP@V8Q?c!i7|y5x_}1E5Bx zlQ+SR3z)s|sWPveiu2&cROnMV5h$+OBgUz-N;>_4T&H4QUoH!sLdh=ChkQ1`)RJ)4 zXdH>4!dUFby)$Y7av3rc%9p%Q+AtEEdc>m_Pj%OBGO4d>%O&3Ufi&>1JwcXocBpFN zJU2cc8qgdrDMe-N&r}p`R!$%^^uVzy4}sI3Dm6U>w+~iw2X3?`a@@bvXhGtzxqpBA z`X`R7+oL}@he>(5=E@#AU|JLdnPf;#zh0;Lkxt5i$H;L20i14_T4bXD4ISj7 zQPWa9jd`p=g}z7Lj!mUb)NXq3l(Cs~B15(<8%`4+nhEW6ZT1a#ecJob7yc4H9W+fd z3`m&IwZEasC!MHH0-y|4|?{|*3kK#ISAH5;fWRe@2e_+ON+n%kSR z#+3e9mhStdLMctZvuj=bzvS1o{`zP6m0xN#a9N@qpIK@JVQYTC#)yAbc6|SZGOeO1 zlxER5aaVtkkle_X_1~7Oo|^PsJ^OolqUy_^-NmDC-p171vewy4V*KQCUjFT}s8#lD zSbHHDUoM=~*!rq~d=cmfxFB;Bo%{$2zQwQb$Gv;5WH;lQzzf}c)>s1f4mAk>%|U%W zf?CJ-?s-|5VQ^G{`GG_|@d^-nCYDv9r7(TDY4SVlBZk*@e)oF(OEFoYPm9g)=dB5~ z@;I7yB0MCc%NwZv|5l&koeS093)H8>_Lpe zR+3*mh}eldNhqPPGT)QUvLzfP(6yN~rVTBDu$6(k3NXONao!7=l9Zelo|}{rj-5(J z5~>zq2Pgsc4}CdI4LU4ybM4#CCvX>vPOGhdV`;;Vb&os@TWP2d_p4a}XZA*H2$J3o za}HJgI=FDh&|I3<%Fauri!^8G5^3!KKe)~pTVqY}fj8A`O}Zn&0f56#FK0zB_||lk z$X5PSW+Ki*{qV&{u>RFc&rvfaFA&qbKG$;SN3qM{_R>@oPU*GiD0w)*D5>ImMXy{3 zgXCdyEN{%l&QZMcnVG5wxSr3r8eYUa|E9m1t0suJ@j4#9hapN64dvBK!m}nFp{IZI zEu#?d>dm;H70zY$gg=95*C2ay3#oOE#XEOS?5yeKK9qA&sI*k|j(N~+g2%phb5kCu zE3!LQKbGAp6D* zrYsxhOaEPXkSt!r?12#hhLH7|E?)4WhE0RcTj#(QnZTu5s_gY!lCZz47MnUaAZ8{$^Z+sX===mwL+ zO?mUP%L0AHJaN+qO`0?$91WF!_f!NCf5+em(dM9^A@dFvW4e-lEHKsWNpjjStq>&1 zgZ_LZ!sl7Fobu`Cd!>NP0#ZP}e2P`dIo>mRVlDdp!;Qq($OwR-vg?8RWBsYoD{sPS zqwG3UEIMX8u-N3kxu|GB{>g_mUzl=qxKS5ranQ9y=-I?d8-}8E-@g^?=0=UbY=n?z zH=@E-=bec4-EBzLa=0(H%^wxqzaf9SWMn$oywOM&GV?o1aXTG%bQs${TEM*!V^Br} z5sDtPn9(8wcq{D7?Q(1x$v41LI(yQT7)+^o3-qbrEn%IX0o_Hw#|t=BFiW2kP-%e# zsvI*Zp3+eunI}E*OYkP3QaP{D8;`)G8(Vck4hIm8F!F0P)Pxq5qMcj+B z$xrrI?_%S<_53V3BLqv#+f4%73dgXB)4#R^|CCYsn{K;ta_b>k@}-|NkRun?@h6T5 zZ`1UQ^O;6v;oWv*pTKeLYAGPM9D)fX`6)wCKsFBHHd2f_<8}7u770MxpavqlEK3qH zbdU%?{X7A8l6mtNPT;Lf=C!`6Rl;DifQd*pu$-W5jbZ2?cb9X9?uZ*{xhV3~bPIr+ z;gxfc6@LCqa-Pu+07JLe+klS{X4d(YJB6Ryili|qkyo~pka+ux4|Ebgi=pse>SEmC zOuo&gH>{;4<87y9kd`REh#JW-c@xi;^2uEa8~;un#}Cs_8UWttam^Oj=~lxCpP=1_ zViey;kwKwr#BrzL1dh#HqC-LI)NA0R?AEI`Eb}|pNdy8(R-<*Bk(@XBk;Wr$z0B91 zww-yE6a00Cl{!RzC1AIT`kHbV8}-#9Jf7RBf45R`C1}K*;|d>k3KQFyAm73^&ymK| ztqZ<_7#7&L%SR#uq8{!zI_$Qfw%!u9RW*-EA(hysh&kIG!_p|Ww^{LXuO%Yu2DOkN zgLwFz$gw+0Ry!LaHQYpUXf^eW3lF0)WTKsoUpHGyBdSK}DuUg0D=0Lv>IAA4eb=Mp zI+{;u-5q^5{g5;9=XLZwx!&4mSGenT_te!+y3yC=en%M7b}#HU580>YrFetqr~jn< zc^p6^QxA=$)dTcn$a@o+f$t?rkLIp(XwW^hy^4DB7@7R+jbe7v{PIDgz_?YBQ;zR7 z#Ls%81qCOZ!eAeh3>a_l!pD8HhQI6?;!U(y{R{}P%TbqK^N7XfV|}g zlm57+2d+F1p;q%c^{L*FBKBxHuBN^}r#RL^US0C&3YFWv7I3va*z5JT@zT=HQY{8A zs-fJEy?z70t+!~m)l_SR&(PaU&$yG_dVU7NKWBnSjN435dBELzdaC_DXL8LK+Xk!L zX6|}>-+J;Iz&~g9^oFw4{D=>BHAOQGd^urD8?=qqU?xL~v<1uLSJwg6g>5lo!SFtmp~Ui<-I?g`e@0X~b6{HWPAWicZrz)lqk$)E%9h z_{OE-`J=q;fRtX&eP`0Dq}PwzD>{&FVXcVsv{s1dS@9FODR#GEG?tpR9(LF5GW8Xg zKA9jV`UA(S^Jc08w7c~w-0G^FUsmKR;k0ne9+A9~d~eccs7yGtg!9XbG4PpW6o=sU zd#=ambn?C1TvZy$S>0uXDc6WF_hN)oykBNZYOPG7L9VG{`8Tqcs)&RV9Ri}%I6(ifhW>4? zMW?2yE~~@qh->o`5vNWX!w-dmh(a4vUyQX7e&mrUo%lHse9Fp^S&G>#l+CN`Rfosn z4IdcZ=j^M|minfq^w%3ShNz)Ag&R?H)F9jQd{O);40Nq>1@}IBx1&{Hz^1zX+hxAw z7lub%3-;^%X66Kf!<>U{VdA=3Yk)drfV+4*H-GOdtJ02Te$g;e#uj;h@f7SgHYufJ zK#5XdZG0GSJI{|eX+o4#I%Sh$O>?;*YX&W=a639{w&GDSMo50+VQh)bJiAQl7 zLju2L9=_?e8TZI4LLmEt*;2ayje$ z8&PUY2FIX3q?JdWo1048mTH&?3S`9J-<%#|&r@v(ZUgt3leYUt&_bpo_G^y99_4U% zi{lp3p~u=S5-nQ>PWiI<=V9AK+|#jV0Sv^L`<(_Fuw~eQMJt^2%Ko;S&!d*uQ{PQM zsK)4J!mbH^p)EM`spK}fI43q>F)WhBL}n-nDc>8`s5dQLwd8Zz+)o>_IQuWEH?|s&N~j(m zPq-8B=7IOpA<8i6D12d+>#{k8vWVP-3I`i3DDpwWb)YD|?9Qr+>@yoU~887~boVNXsDFa4wNp zBQsx+`L=8gFS8C?!&FDU%x;F#^zghjj!rnC z;DG4TYQTd);qvpqVcgaQIWf(5%)|(tS(nF6^b9}Nx~q()4!U_ z_L&Z)<2UN&La(jLo5mm0m?e4jPVZPW;s`3)j*=yEU$WOnYe~4|l2V+RviT7T(I0NE z1x*FO{_GBdZ^hn7#6f;5VCawI!g|JEwg<%`g98hXimhPr4O;_IhGW}7;4XFhtw*2@ za5W6^dlL|ih*Cz)&~O^zG&%r8M#<_F4aKvXAs7u10b3(M^W6;F_5U^FCaNH|bgd>U z6taNQj3SaEIv85vj^QpUSl%+@bqGgdXx1jHjTh6y4bVSEGiEL``}|x_(2Q!Cwz*1j z8(^{G$-2fEftm115@`(VE3s_FlWev#i4MZesIz;vaeSC`$V7&;p^-ID$1BP5vWPdh z2|Ieq!CUO+%OY<~Smc2Sw?a!`zmdrN5cG~Uqy&iDPz5{MGWjKs(2nPkL~g5>t(ul4 zw8IT#CYRz7FUF=tH#6H5cg2p1>C30CmQ_~<32wuf*RNbw7ipT#hFO6^^oD)Y3gYw|8$1gr!te8U%cKW4^?|SZe#! zh4&zRGMWSMZi8hH%&n08`19?H$DegyJpS~3@%VG^i^rd7Up)RiOZG|o;_+wO7mq*l zzIgn3_QfrcjL$`^>fxlG&Pgc~eYU{h<>}&l&xkh_bCCS}lmVH| zFNyhTLah!zv14{Zi*&8uQX|cRw(Ma{nEu6#8l6U@d3gXEWIb|VZMvYhRJ@5G(9FO4 zxF!Z&rg4XX#o{-$ME&3q^0szXmp?h)Y?NPPTvf9opNHKdf~_94K$};~i+q+Ie!>VX zA0kJ%PUDkpf?vNk+-#~M8U@Db;6E_K&9ma{(ax;+Q?_a(Gl@jrrfeUS5+Yrps&{FO z;AZ$AI7ZWu`qd_eQEjUQwI=IWgg}|72~2Ui+5}0>qZwgDSqQ=j3CCn@W*o{7*&5xE zn;r3pk9gAdLi_}i?(~n3$xAl#l5)hZv`R&zN6vq2T(UTqHk9CH&~2d^H)(H|igimR zpNFt8`Kva-tj8Ve%UsJHo3MP`QrTV;x{d!+>u;E@sNQk5qD5%3H}NM*r968iHE=in zQ?G2X@xAwE@bQZ*+vWcc5=_0y=c{@*pOt5GG?D#cwEy7ifvqwt$MEUPZw6mX@8cgg z$Ag21`=cZKZVN21_}j^V-+u?Hv;N1O-Me>p?k1Qeir7tZu(y9Og#Ua!NZ!!v@gR9I zpJY(y@obh*of;FV7RwLC6h1@2yK@jm6z`j$nh<_s8ml=l>;$xiGEhgqJZ9acVGfZQG>X=8cxeP zM|JqTxEfCKMS`U%W}riV>p^VokjZJK)zOiCrD<)@gb6+Qy740O1%V)_ELiG#%R zn&*6Xa+1Tfu@ZYz-_aQHQZDSXS&yM~rLsR>^ zyQ6uv>SYsD^$(GB`>Ax9k(S476rtmS^^@-%#vT$Da74HAH% zxa=|cliXFXS0`7M#OvAj8P`ouVd>{)^F4%wa=QyBI$!45XNK|!zn{Cdg6vcrv+lkctZ&^ zds%)c;$djSY`UxxjnDzw>pMPu;r_`{tBwr)<7&h+cOonT*roa|gEsbW8gs0R74CWR zF^^4=6UF8$N)TJtjVK+O^SH$7=8kTXXe05L;$9~Kp4Lo;Y1kB?dm8X~#2TaUbX?iB z7w!+|8!qbPCAcg)b_xLNEWlJ=zw$)Z?3D?d14NutM3qa~hrz&7ovjt{%?1M#%b z$DRN+J)N0zE79cMS_uK>e24*S-CpD9K(5bvHN%le=eVrmtej7@A-$ko-E77YKW)F zQ0--eWYN-_^bs|Ch?@He14tAEOtX%^|F<%mLsJgyXQv@58)?)LRh=Zx)9Pt;0ZTfq zDfE{mNR`(#8H(7LW&QlRm;mo1?+?${3|)%HlvUD~gs}<6hoOF8^b-zS>ja$2Iu)~0kpWR&&|*doAFF3-*pJ`{$a?$*d4Ywwm}Mds+L;fM1A@JKHw>( zf8#+QiVh{D4RQw`NHkh+>_;@AW8Y3FMnvvq#G^*kk5*|AVZ%p0ZlDi6o4%QshDC>X ze>-GukbO3x014(Zp#et{M#H@=(SVS)M8gERSPLE+d@4-e!~G!i^Su6JgVapu8ET7< zKhWB1^>fkQ>f59j*;4&OH|p<7*9n7@Q2dr}j4Vp!n*k`&7$RwSuwHOrT&oadBELVQ@OCebOtlB1@DZ=h-Zw_n*4IV~)QX(DRCL zRrm5iGS;LGdni|ii3r(dn%6`O6~@5|`;M@`2TQf%cK0N&$#OT;tq$@cM@2y-pbq`p zCwNV*o61z*fIbR+9GKcpE%n2ptp~pe+6pOjn~GbZvVB)vER?yTtU(5f`J&`MR;rS2 zbPn5pRy-pkj%RGgP`f%=6U;@KIiQF|*iG&xKL86z@T93P(GnriRgzT&J7ET&$JlF) zv&@sT@VYX`v3?n7WopfbWHMoPd3y*1A3jEoL4XpHUo z8uns7B2vMt7d_bkB`k-8W4ttw8dO!ajb2}_yjC!yvOb3fwklo*pHbivtZ6EcQj#(m z4Y02%ARAVbhD(dfI6(l_0)v)(#6M{zN4k`LB^(cyN-d&n9s4b*#=pQ0pqj8Ct5OA^ zzfO~CnWXD}^hU^F!>Autl1UE=Z7#6e|j@Lu{*G#8x z>c4ya?DdGZA7dZf`7K^GbSA~HyIj>42nUdue zU?*q!a%xmV01w;0fN4zU=_<@qXDe1T^V2YyL<4-$~z>g3@1V30iA{ZjwBKS+wzBkDqy0gR@4-}Rr3_L za)l8Uv<*vzPmieZ*ls{o&2C9s+2dcTru)^_HrrQMv>z}S1?E%}QDG>gvYt|QqBrA_ zn8C4(B2yddvC@dk0^k^=2<1F6B71}pnCspl{PV4yGW@)E&wo-V6;_VQ zW1+tQ5mlX&O727%AI@g=?4-+}x8xK=kvmf1qG|G|oF4am^qFPlauMVUZR*-9>nB>H zFYpirKHU?00|W6eG03MudIbkuvVc>2rb43R$Pg`#<_M#U8uSh@`Sm>v zE-F5X8HQx2UURW$O?D*)AV*ERNUdL^n_veWxT2;eq2Lv|+nAjA#pqz~0V;C&%!Qx# zzab&~;cr$5f2a0{BPFYiV~inSS1FeMG@ngWHVDs{f*9W})I34?E2SVeULzLLCulHK zEPpP}NN3@Jp({Wp>!|y{^Phiu{PUkF43`=m3{Jljsq_x2k{UHKA9^L=I_hVtC`&dk zr$1Np)@}iaA~jG6M}L#!?5W0m(Y-mHWMlIYcdz|$gnu5JtLBG%rjn1S0h{biJ9@W| zEH1dDfKy%PWC5J(`Zr=eyle4+t}Lt3quK2QQ@l7*qq>d@I_YN2A@ zw7~prUIacW5<955Lwb5v15Jtp3$h=C=gjWNR6aHnbe{iV}T#;Pm64YfCVQF(*rsNO{#YG7UfA~FN*;19)e zSxyT!bq&aiB%!0wLWwdkLbzxm4Q79skwsZkR@~)sXlW~|-WAn678Bq-PINu8Gt211 zz?PwtU!$Bn|8_+9SX(Y4GUAOCZO|34$$N~y;KJf>T%8TpM`D)b)NiYEg+cO><-IQl z$wfIICHpu1f$3t;hp+5-rYj1GYs=_^Z3hx&?Kj15wgv{j^lRWZTcZI$w1%U=FNIIG zTp1*}HLh&F2IIr!*Ae)3orz^dx5TZzSQe+{b*MI%*#4U}{aU&uyP}3*a*4oMqo!XA zTOuRF-Rwiu-v`D}4u4_L!rZCrmMFODxnOl(UDo^>D}eijcErsM!QX6+e10}-&^djS zQ2a64uYN7eSW<_pQW4ju|r!fxmQH>RkerKHc!Jv?I;`D=fkQDCpRaK>l zb4?MQ9J|)^yPP)*SfpsEm&K`|?iPGrjpT{e`>3)*>pL-`hbkKr#?X-2?ISQi9=bho zgQkx=;-XPsUUbBY*N3n$3uA?U=jh`!YMg6aIBqMPgbP7-TFu;XlLkKjfK+_gwveMh@Ygo8) z%4hp7)ViydY=KrAbw$6>FbE{NqDFfXe91+(B3f<46l{XE21Z6EXwX5{8UXn`|G@Sg zY7A_Jl3Bu4*~xqaXH+l{xd;S%v#bit{N;>+5GAb9`ya1IaN>V$a? znsWv0b+N3_K5a@ybV<2lGYS|Na_j1lyT2;63k>mW_<|MD59n-Gje!$m1HMEdo1Wx# zp-iYm51BL4AE1REZO;xJEz}j-c#s*d!1rQ$BXfXZw>p)&cX~9#pFnxzB6^32=VXfF`dr9e^3+eq@2^9cyM$M`Y2; znZK(mGum1Ti*8WHzB$3%7Lwt`$%&PNsh?}F6Gd67YLHSOlU|69e9vdQ!<0rcjTExR zFm)Mm_)6Dhfj>IT;i(<2m!C-q-y>g2AIN8WEl}ZYQL|In0u&RQjWl~-?)`3%e5i$Q zhHmu#ezX6(zJ#W2fN|3hL}dz~Oly@mR;&xM3$3985U)@UzhqJUw8G=Y&H%*dDLN1f z#(+V8NwtbZ=zjl^RGsekdG(iKS%q52%b()^F1yf6D73z*VV+z>dd!qPJK~xx=?ffs z%Z%HTwO{H{m-V$*E1=jw71#YxHAicKwH}0Oxf%(q_K>Risu+AleGq?#B^}$>zgcs* zSdgJrIbTnF1)TYKU=%Pv7iVR?^6cq|f|jbJi=GY3PgHcElf&C+|DG-LEB5(~H<)rA z-K3_#Cn|AJSYZWKPE>#rH=xm$@3YwO4SC2ky?cxf4As=pk>DY3UbUC`nN7mpI^Q#u zs#Z7s;kvcO>9x_OqKwr3=uTpk8PsA~EZ$PwhZbyNF`&lQ)hmI2zn(vxmE=IYp}A9C z*;t}KY1i&WWo@CU0+&VGni@p-=7OZ{ztl-4t(~;wfLoERf%S2xt%9jU8-j^){Ylg+ z=Ot!|Hn2s}MgG3{K?lZg>uBNfat^1&>T(VY9GTQrp&U7?r$ddd$at(AFVMP@( zSll1z*IpZiMs2L$jKkNoVv{=bSt5Ewew3;Z)!I7K4mM}WN?AH$b-0=xy)l#VEKb{u@uZUAgpLatzet#qh!8TywCqF?wQ%(yqE!ii9ph6< zm&x%=sMX1NUc<&+yq=?4;|C1TU;{O@o2BY`wA!X3%B-GBH#sVg(WQh+U8_0zM7C+w zoON7})Np(gxwi2)Qw)ulMgG2NK_)P9xtPL^d`U~`Dvi|s=4$yA?}RE?m{V+>UUH?26kvak$Qa`xqn*N{Nq$X^&`ae5NA?>FmYmPT6B!JNim` za5Af4w?ykOu=cI^sl;k+sbK+W?{T5|nc`ol!#Hs_ss5mMr-h-d89i9yGr=4#)rSqh zjlLJ!AWB)kg){b8uUHUeSE++5&g;u%@wUW^-;?!=X;1D(tXdCvNN;e(25K4ui+1PE zTl?v$DT!!0#kaLrdxO2dnA@W`Z&Ev1GY@u~pI3>Fe@+o$y3bA^^!BsVKtAhi?a_d< z5uU-?k2F3v$I>=1Gqqc7c&Q{kO9zHroNd|4O{ks{kuj}qq&EQj!D>3 z;5RiR^CHp4?rb@vz_HYIZ=1tTc5Crp&dD#Bl&k_%TFP-9&zax~a+x0BLyCri)#!mo z*I1pyy@_>e`I7HotITo`<*UU5J4#X1=1aG-Fd3imJ2ayd|0X=8nhW{w1nND4V5p>V z1->M*o1YWO+jh+%fb6q(PKhh}GHhg{pYiScF|X?54*g7S-_OLn-n;$m1Z$rzVRZ?~ z{m!_}$Cy?5*T-%5em)Ji-TP_9EoaUGQT{_QGyBbT2N0qC&N5v$waPY%iQ2Q>4wAPN zR6r_aX(zD32L4I2)_+Xs54}rt2N(+;Bbgcgd?veOE5fLw*LxJ)lAaB^(^RAJHL`@84TArR3OS&(Syh?9cncwKA*YBPu zLq0@M`Dq%_dy~1GVyp%7TA%4?G(I5Ial&atI|VO#v;bN12W<5sy+{_9bkj>N@^}Qd6YRV)pwtXOeXe}uvBho0~hYH)HIkku`+sLb^`!Othi*5jq+jODM zi}nsSNF-6<%(u`uLr=*6pg2K?-Zyl`CtL^+6I?TWLoD>Gvzx*=CN(~7W`pEtR>aeC zvU>51o>vtPh|AzxDuyf>VZ@Td_JITk!El3%ydfWA-)C@?L8Pa|Cmi$D399!`@aj*` zjrHG_tKNfTH@V+80+zfQMg=T+ON_``;#rqtvv_tM8Gp9buG#JVDY0e3EB(%{;gXF@ zqJQllqu2d`ZMcp!TssZd&4#K+WWyFXFh|jGqZeCw?NnYnm9Ox5^^xh|u0>aNC5-L3 z);dt@T)g&>L7Iy@_$D5AE&|v!rYPc#EL3mYtTzeO6DB2Qxv%#I$r}E5HAv0}da^&1 z^BnHzYw^p9P=uH7EFIn@9LODuw29v=m0#f(sHqz{0nFX(Ojz~GX^h~mVAcJ`J7WE5 zjLvFN3j=5ER4%K+93~mqIkcefja@ykTd;8G9q4Yj{ zIA;jr%0`2@-jlaDg1vS=5u)S=Lc9FHR0sdHmm;(vxLnXdZ6jrsI+6~axhWjn^dwp# zlS?Rk2-IF+tn*q9QW<_V%vSYtzBLF!8-`JGl(Wg#0bqj2bBIG5(B2sG1{hKy()h8@ zdPZKdR(~BFI&e5dv-Z74ZBtqFdxDR%a16*O-u7vzC$OMz-dcMm{q&u?IMv1rvx+R= zEGz3bt3Od>G)g%qnfEkcWYu$KIn8o3qf_cZP91|#kca;M_l>IGhN|uds*Wwx@y4p( zhN^}JFtJc48=y`s)QJOiM>wuKA+mYX+=@gsMUI&wCtavFd{ou}K${kM0GE|#F0D>rm zZX;Nxm6L^0E@8L`V38DwD#@8g7D{a-?QF#kGlANTTU+3`m*z6+*5n(4bSGBC%19?& z+Yu4!DOihgRlL9F7}yx=AW9B@xvJ9SqJY^adl)zkE_Aet7P)8`L*eeo#03A^BRiZO z_iCsj#ntEKDcP{y-?R5V;Wyd47ZQQ&nBaD@hli#dwAqrHiUyXRyv=1L5V^Im59RXb zXfQpKXfkFA)+2{RE6dF%=V->1VyG>FcM2;=@esw}Pv9$lKs3pNz>t1S@YD=JeBtM> zQF7&t882xgz8B8$W^@k!O9w;zvq$oauu8-g=j?SOe(fTos|pR#Q7W*-HS7v3=^>r9GWHnZLr zO|t4h`{RzZKXz%~42S$I1@rq1+e3=azyu;!EiJZfxi92yu-oJOSKb)ojvHefJgRxS zNR$Izj@j?Ryh7QHGp(+aT^O0EwH}%BxP&EG4c*NFjW5a>X@z+dA{v$4ER!yqW%4PT zWlWnTeD10Iqh0n&%MmmQ9zpm1IY-c><2IaZ-iG7Pv<(BN)c)r_rH1yH`sbZela8Bl z5m-Mjt=NGH2TMm$d=xH8B!4b8{-t*RgmLTmr!-&3RW%6ZUkQoJj z4G+n8X0Z%aDMul(cHp<3b5NUe%fl<+Y3oWPl zuH!*MN0A~W52SHErcl;Nk=JPBj-tMaql^{nLK*(%tQXIxXRwck{7j0@Q>Ujx<^Q3y18A_LY;{z`e1?J+YHDMs^A@(z^m0NwyAyYz z0m#=Y{xDF6hM_$`?{*&F@R<=ZOm&x1VSBtJt*r;sEW*6i;ViooW_|T)S-mfGzb5z( z1q=VTy*;N{y;{%E*NU19iC@8pd$uWkGLlxhxK4u`yCW*bw?>6J(z?xjeEXS?x19N; z7_MESyl2HsMUrT2-P&F?!8=cCKGGLyF~vvkc>I> zhE@#XKFx4*PTtqbDEDltPCv)+BT{kPwc^C7s8Q{+1+ys^`BYnmT;$h1D+O4mW?)BF zt#19(fy*b(rJr){Ou_&r0RVTCz3i)p2%|5AMFEA}f7s9lmI{?LsRL?O%n8WXUlEYT zx;Ntfq6ZJ5fmkP@E6wqc670@*z6MsicxvNld&)^&<0p!sr}-puNAnax;R)OZ_y}}f z&8DQ5;bE}L8r+}wk@{c87MzzO2<+x^8g`<%ag{u4*bVQ1e=Ri-oZ9-Ub1F#P1@o5%0|fI5|nA$}cX z59ta?0D#s$+&^d4sQU0QJJ768-L|NJ!5(B^iu*U0sN?Zo@*sO?TSCpje)e!SbU+Br znrPeCN?022&t|-OxI=He(cunnKi;7p@V4W9_xg<;@L<1Vdx5246HVKVJleGD8U=cTa z7A?i}Y@jX}`Rj$A@<)*$jr`t6dTMgGZgLk&X*55r{Nn*%&h$CuSu@IKz3b*Vx0dB= z^E~UPZ)dl|P$w9N;fJ|M4_&}TX$7?MU+UjK`v&@GI7Et2pe=lb%Rl5L@a$QUtcw-; zp&p*qAg0Fz2eyXmT^nrz#rNDC{ zz#Eush7u~OaI3WM4B?`jKZBo1BXK$zJ%?*zxR+Cm=GCE3q~4%og##Kc(LbOyIM#jz zKMq@~Pf)<2`t;XdpwXLr-ri;kB9Q6g8T@Eg$C5WdR{>gzc|#aPg{Hp9=iO&cad@HN zSDZP149^@!N)r!wf{2JCJ%>}>4ks#-3Hk8E$g_zt8+E0*HUl}?frJ|OVR0;RrH=u| zqJw{GK#2MU0vMWrBV&gz)AHg1!z})NJkVlXBl4tJnBM&If~0W(Q+!zYst~G*gKh3= zD)P29E1MAXxVpwXY;HIR(-&d$Amj^}>*Ojohm9LReH73oU?{$0H(Y6?{&>s!leYSR zjN+oi^OT}folL7sVAO;Y``|1a=vYpy<|i+HL}QAHyEt-Z-4A8}1H7440107QT)#f; zX)5g}-zCF+%s=JgcHhUX6V|5(E6x2nr@+AF^41sLA>eIBS$v@INHj=)L_b_J3DJ#^ z2IRTkHzIo&0&Zc09{u9DpFF9q6>k9<0y9ZIL6>v5#{e>5d_Uu+6@8ND2!lnpCIulw z17KTeZ7Tg)R$5hyLz#Y|-g5*RqO?)axxke^#-pIGfEToI6g2&}$a9ARBcT!5uf#-> zhzG-vYiGHwKVuIp9jL4qxAL)pK}=W@MEuK3fC<-SM;}d$OW48KD|z~ognFT>V_84h zdzm^n{nT&x7vXZq9MQ(Xv10959k%ve*>%ZuuUecF?hYtt(fABq^$8cT`N6DUh zECr{CPouPSlF6$R=QH4Ss6hQs;TO?6QjzULxmwH~BFyQUDlQ_1p4^P({brSFkx$Ci zy88-PN9CQa@{rF>VP8J}0WK81YmhL6OA1;F_tuFvRy^+?Dt0VeK8d#MUE95Tjz-7m zbZWhA@Avx#^i>e_(-3F`JKPFv^XNeFy*EXHYP#O@PmJq*@*6~d*=z3|XT4AUgIKio zitcfcUfx;`K{( z8+rtb!t+-QnmR(;a*n%53 z*?h3?Ci4RsMIHWtV_u=V>dMimJJxl_s3vc(JJEF~noM+Em)&hb1afjVIZ||>EN;}| z+-tJlKct3Qj9_tXoCj5NT;f36mn}V^sL^3rLguqlCmHCqZGKuu9&KhO>bLv3yWCn3bCVPOgOfZB*K)%WD`)53d&beHY$!+go zFSd_54OX4dFy8&`dNE?C8_qC(!$Czz&-GVsyTOqvZQVyxY+%X0djY8|e`a7V|0N$O8)*+xO=7qw5W7$9z5t;3%^fB;$#X*lHq=uGXMBt3CxlwV6as5kQAsZ7=3PO;rP_$~? z#jnZN1Gm8RI&pnqPA=SWP1m-r6+zdkZevgl^yt%TXdpF^V-KyK8QDEkJs?tu!)qwo z4Ba*%)Zy&0X|-I@l#X~q4b(nS|4xoGtkLs?EGWZVRFk6hs3y=x@xt)?(Zf1Wd)$v6 z*MZuTe(blVJ9b4_g}VX_jM# z(9rJ%l*L;P$AmNqx7gph#ooqYZj$F1jwPrpKW--xS$BNgP9U=GuA%K|ND`p!Py z;3L%&>WAsIc-0n42xN`IrQ@@BP;KKy6`aaJb1uW_wHf~q7A-jDt(~#lUgenNirBp8 z!dTdzQId(;I6aCe#)dkM8z#Fhh(=RGjuXwC8z3fKL0G=tu+=gyHQGg`D;;$6b#Y9I z1Geo>w) z!)*8eSE8+Jf_;i^&zN68g@vK?G!#{ZMAIF|e1KkEl+Phxfmm%CV+}K9mpuG@(-k4!4VJFlEqpdb?RuYewb7zA6X2%la zJ@;kJF$`?n_tcndtW@~6<84shh)Rh*$bPAZTA_~Dmg%xuI3HmkmxC;>a~J*tozoqK zv!r}6`syHD1DOJpJ`9weUVkzACe(~=SiczUKiH3DS&AeP*Qs+bLD4r}?jtmIf$#f% zP9&qn!$Q9i;~jG(?KetHh8ryAd64%b{Cx1`;EU;f9NORuoBQXB(f#|BHR+q*YG(46 z74A$wNj0qHj0<#5oOwkGS+5d)HCb~m>+?U(%fDR~&3agNa!G}{dRf1j!P)nkqWCpi zl=aC1%TGAWpKkS>D2x+8G#lxJMQU#2ye@EIV!619Hg?@q+`8S%)-2xKGM>xZ$*d&D z+(@Owzn>Mw0%;~#Srr0kMT!|yrapc3S2(hsf-rejEz3~ZJ4!YRGSspCtdrk})K{{V z5hP<3EQ^R#P^ns%%Y6OR#*KCdA?g5>;<_mG5+IJN2Ri%j~qK`BOtSLUCRo0};SK1<%Gea0C0|FEIzZJ#L=5{~p zNm1JuHL8JW02c+^4;4DGZ~Be)rf?yxYIJNvBUdEcVLbuKDDStUg=u43yl^Wj%96L| z+7>xa4u;e637~USpC6_qlLv9Yd9hHoWEAA=g}+?WIZ0`X;Y>h4 z!ylh8tl`r?fY_hBIJK1{!1Z}TS+`Y4K;mU~q-sux0L*o@CfT$Ax$|rMl8RwFHU#x4)R;gBu7PCYv-kIAE1x{>*Tb`OkoHC9GMWNRjkQ3lbB)n4? zpZQvo0|lpop=f+?Br1uEJozgKmyF84>hgL~Oh_qiGsa0>Y`lX#-gcnMBG!1 z4#CRvc>)CW$G4lghf*7Cvr~+621`^W`|+ces<5s?rDC zvZ{fQ7jvcywfdL~9u-srPS6}yHNot*bfubCw>e*lzrUP(61S83gq z08K!$zsw6~=hD>gd#UW44ixii?S$)mN=KFn#5=Ov_!Bx(Qct{>msH_)z%3tW!Y8Uj z7VyXtUxpu=@S_6y5!OF;Ae_!SjZbmr=CD31C0oZ*b%pq`Sc%#i=B19(I+0?&BXKux z5dZjxW}Q@#IHd!E*dclb1K9$Q)P>1{2ZJEs%9c+bhJmXGMU1F{-=YW;7@&ib_>MpbHg8g^;UX&|%J+9XGkly1~eF;zl68$CS2M&nR2`S0NEYrBE zW<@@~aWJp0NDaK>@CF8^$@8j<(2t~nbK((8EK ziL%dWqg%n2)P9AcapnZ`sp=2m7<~j>GbSpnBR?PqH^L3Q(>k=T*hTN6xENz#nNxns zg`I#;0+?+zNdHE+K!d_zGVUu<2ROvf`UdVaI$XRA&#SpojSkcl>*VOz=T_##eqn4n zY?vxe4l6_slCDg}Basr=D#Gwh1oQTaFaP+5sT)f8YbwU1G^T4+2}CoZ9NJZ@fIOs; zKsoTrz@a3FOx687)by`IBtZ@dGYRj~EQyD&+YGE- z#A#~6S%eK8X=+5c93k=Mi2FN6I^;TH&7Y!HM+lnsvYfS`AC(vG1zgt5vP|iD;i_9> zU3KHF#g*5#cNzAa)Wezui(abB)q>P(7THK9u_z1b#$dXp6e`Bp0LO(aIjiwmj8y=p zDjEknh}>|kK>w)Ox`%F~0|MQA3U1yiJ%NOn2yjm&W$DA*UUN8Vpg!7P%ta;p*;XYT zx2=LdE$K8QCe`t=rzz zskyhe44@Zo*G%84rJ>j3Uxb}WfFnyZ$9S>;b|mWqdp>Shi3eZQ+MB6yM_0-*6jT@( z=|2YkFiQ-*B!=u5HK0Lf!G_lSdYYlum%jDY^ySQ>L&_A*F|7qAp&t!d*3j+r)j=7tTic((- z!$N_Pb01N1bB-83tE%^x3l5a1;o;K>TO`sL*&K&bCz+=Xes;o}Hfmw%p#ftt^7BXm zttYjH*2`B3NGoU*bc))^^VMomk9K#@;1IqXBa(L6seKn(5kDh+^e&vfa68;R*gL>0 z9HzpU7k8AU2(VObbf)&w%zGVm3BY8sXnj!~BvEK4l2(98dfQquNHRVQF-V`WHF%3| z8Ru}wIqdb#^b}@u*##4RKuh53@>0;L`tVB z5%C2`O_SWbqm`tqQRY($MJlcl<`6a(V&*aHlpdu?_YdR3oT=_Z4;#_ao&B6+0DgDldUTD#J!R& zsq*Z09kj<1n#1C;jS~5yZY8@aj6F5kELxW zQX)9=0;ifmp=N7bk+qE+5}wWBG1ZwDv;%~V0>wT!AqzT}N!FCWv>1SfA;onu0Sce` zK$I0YHI4Oa^QdOOz`@!}leF(6=#FDLX?CZTcKb0D38V-Wf=w-$+_gaNDn(v%fjkoP zEGF(aG9FiZ8lnE5b&&IlUoJL+G9C64SryQBwLRylpOY>AZeK1l~jG!w^FC2fo^+hw&nuc z-or;N6mYHqXrn4C5md7y{#U#`no51Yj%j7p5L#eXMuAs_wTnYkx>j-A_E! z11?ZbXp)!(j2F7r>mk4)Kj8uSmMylDySVoIvEwLv$7#?H)u&{XE>yGN_IT2y?o<`K zh|bwrpuiWA;{f!I3Q5I02)k!oD9Vh`9Rh!B@BXy0AtSzF776{}Ed9~T@%9^oayyh< zF)ICAaj(lAhV{n)28$Ia!PJ`f8o#nbM1G-<(|~%?ZxT~ccDpz!6Zt^{>`{5VDZr(J z-Ypbx<~}4&Bva=t-wIlvLL7j{O5(TN*N63wev<$o`s0 z=$+RkqD7Lo^#8#%(Yl7fim0Mj{sU!0D<`HRUfR@Gy_^oT2Cob@YqZMgBVEGzJ7z?2 ztEe~1W;=rx*MwGd2bY~-=lIJNd<_z* z!_`oGcs5zubKU`UUTg1)%%VOy zS)E^Aj6I8E<0Bu8#B#Z+Ftd!Gm)-a^VQkP*vi~p;J@33g3WyYvL-Z&~1JPY6btQ;o z^QlVo-K?VXfPb8gl81w2N&j8Zf5-ISMGlSkZkjFg`Mlx>!g@sZZt=J;$~L-zNA_#Ve6iBLyD0_PLC?Uo{^RfT$Fal7=|HGW5Ge(bjb|_r z>BGK?63*F)F0{Kbu}bMcLwg#zV~^ra!?kUooET}F>Kpx=YNnoh=}-f7j>}oOTI=&k zH_lF%Fb=dbrZ91huW-Ng%!1f!>f}o+pH#CcS{_OmX!Yk*FzFdh zm6=G;s8weS#j?rX(eXfo?>kiuJW=`M&A@gw2(nCt-pukt0aiuTlY`We_E1p#C~QPD z9NJZVJ0Si55S$8!eluo&vK@aB4f#W}M>BF3LoCa|Ax0}n7BANy$m>16b&HK^%Ix4o zsj%JEXd}1CN4|FPrG9bRk+*kobH|EpxAl^?mff~=2M=B8O=m}{)-k6(!}p>zera#u zfH>ed=U6n05>H}GG8P-ZqSv-5m>aax+CX*k4s+N)mQx_dTB(@52#fMcodGL;Uo4f- zseW~CY%FC{n4OkfGbHat#lb=mWoZ1J#WB$jcei!p_e~{<4~7RPTaxh;%Y9$U$^K z*1F}21AQ42rnA|7?Viz;2YoxKeF6tK-`C0M0d7gGvnkSZQ=dB z9p2x&!4oEOVqSwL#dsRlM!WSb+x

    &QCgqT!Kur1gDr*-|sXhe`41B62r#?*^WuW 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

    |kpR3z)D0LPyw9#*1V@#f z70TyHSwp-EP-0de0d{d1}4%DmJn|gNHd^7wUw3 z^w8gzk}VXi9B*aW+_Te9vLOb0(M5!g?-ojeTav z|JY#3o5fQq_r)Y9t1>(J*!+g7aQoCoc<$CiG~TIWZ%^V#t$^p}_3Q9wBm5zU@QnP4 zX(c!(6$Ym!7OG=>L`fiIPyL!hESHmu>UELRS)n*iY{rh`NsJMlPt+9%^ODY(Q3d`( zQhwErfUUtXdyvie%3F(3bh7xMj}f}ztcA2&I6}%OC30QBq`j!78&GWC`|-;}eCMx; zM$?fxZ$%#dAkrX^uHS*KjO8shq1=dXvk8L@7@ZEe7jLu=<7;;FdfmKMqZhu->vQv} z+;jzbyY;C=N$bQ&d_(nRL-bb4hGwdP0i^yQf#1QwsnKq?LG-kvBAPn{KQxN=|Db*I z4mS&pQ*^-_2i#G{v7BJ)##PM~q;#-gunirLVY-+>%L|qN?sw%rG;+ynYS48or{d-u z3C62PTpNJtvOt}6S8WQhQce~{B&upzKjm?GK$uf1eUjWs2uqvLuo~*DnA68;M}2Dt zfe|FKHbK4AqwXhJ_I2dn8CC<;#XA0$n6sL^|KVnPLZQ408+?mG>i+DIzn_)YT%G(( z{rQ&qj;-YwEg#Ap~Ryr;Na@ z21;hPug22_dI@90S&}|1CintdZ+l~Uz>jD?^d-aHPj*e^d&&MyrBGW4G41es5=@Wn zpW|jYF~I?`BT7b2BoDc5nrAzQ5?`-7w^h>my7UHCex7RSdoVB_5*k~9$xfmN$dV@xJ{5@=5UJq&p#X?;xJt;0UB@8gHGNV}^wJOm+dJlbd!~PTNx#>#3!^->7ZtS6 zSt%Ky>aSVbY`=m4!m%be)M!d5auXg9yl~11Yu}CICdQK6G5pw!hjHV98J@W+AO?TX zEE?L!2RPP~wPxP-pM=60O9Vr|%p1XOl{FlE!}+rSIQa4>(oPCff}+uER!~~z$x10k zr;c5R!Ve`>wAC@oiE+Hte#iLCh;OV6duZ@1{bHne&KsPHCQ%@nU{I{tp20COJrC%b zGoNos>XmMFib+geYj{qz*#sD64+5<=~RusLXSqP<`dh%O=%b7@Cn;iA0_0Dqb@UHxB*0s*?H~6G{e= z6LBio1qkQD#9&hGVYem1rza>nX0gHAR=nX32ir@y!?8Xvr92trvTcykqxlwtf8ZK- zylKQ5Vsw*-ig4^|JDPN)_FW_mjOyhBd+ymoV)M4+KxXk>$M`mHI$c{gkPpE~igq#3 zAGh;#)z{v7x*+d8_l4bN56mF{>AOnLK-0DgN8+0M${>&%OTXN-vjj^fP#wkwifqC1 zGRKPyZkyPtqK9T!%{Z8}*<`R9iwRlB5Wh7mD4aZVGG4q_yMgbo+rYu`addnbOYW3j zR~*|!vl{bNdS~vP#GeJ^(A}krtacP%dmF2cO%yR^ejw>1H);cUJn^W*f15=iM`xR< zxipuf>l$!uVzRHt@=m`kR64`6Vvg)KKc{3u_d97X+?kpOMwIUN=_amHy?k722OiD~ zpiZ|`eQvvjPGZMn9Ha^Hi6wXML>q&E4>oCJoO_wFu5+)-`c6feWfBU;zTzM-L5-K< zS_w6GFO@1&c3X)|%yBnJPNL_W!f~V))UiN2P3}ZQ3GTFEHB-yG4)jAiQub2F4c2d$ z&9})6qk=wxtNOegzP{$(xsg0D_=NYm;3e#XYlsjprj*QF!&!+6`6!Q7?^5ixE*oiw zKNuqT>Zxm(tz`l{5f!`m$*rlWFHu;`3vf~ZQ&XOz-*0vadr4b^mow=ErW{<2vPTyk zWwSGKB!oxRf$om5FoHtg0P*fnBu|!uCDSJ*yZKI^WJ@CY%PBr$Qys0cX>nb#L&C?S#zOF4g}-Vs?o;;InUaVL2L`#Z;IGGq{^Q)mELGi6+F zhmNVh^Lt>L_dQaplxS85S$DG85ng!qu1hemx#5*ycL(bVtO)zNqBxbhj~1_LzJW646XX{j&~npe}B!(6j`TOLX_Ar1L4Y11L?kx(bU z7PG2jbJkT85r5pP0J$8cY;(VM&5>ocSp5lNV!yK<75|Sopp!%qm%*L zuten!;-T#*G@-!~wt&p?;S`IZB=h}dob>soM1)qk!u4ie;Yw6N)Dlfh@F_-1=GwF` zpd(^iHCV>|P6oo;EcE$CUC!KB*kJWS`MhbXY`sl3ZISD24|i+4g*~3pH4YcE8D?ET z%#?-!1L4eyi?UkOK+eXo-Kln;GKE+;wtCi{Z|i+|(y%`REhD>tO;kq2MqQ(*jy-0$ zw!@oj{tp^#`rjdK_+9A3ng{?aCewQj1E&B(L}nh2ZKBq~y4RYWHRJNG$x1}~6x#;KM+Li^c)cf)p<&aA+sL&}pzB_g$xV%%pQ zXj5BEw52g=;)8Cc?3&ZvdAB?e)1WkNYR^Xcr+}Cv$H7gc5BHCLuO~5-6TFlWroE(J zeAF(9-tR*&8j zO2JI=hSP2}dg1GZFwRyd#Ur9LsedPEB7Fuf2-T9BZx}ocJHN|g*hYP&{rDO8`;Pc1 zRBc$W-EIuoVmjm+e{*brkYsxIhk#1{H=_Ytn&9iek948RPJkry65h`2o@vSL`-~?1 zR*P?I_=an9?bkiG8j);0 zrPwk`0y}38P=BRzo>rqHG<8J1W{iosBVNIosKyox~gn_&FzDLaDN0 zWOd==`Kc1YTI&vjH&{4E&zc|q_Ius4@ zX7+7sf?-_CL7tk)Q8Qj0cc+KVH~4APIw~&Ni}C4k>E3i}##`r-qkL(&R%IMLSl6^> z)k0-gv`KYR2Wm0 z^3zGP)iUhrXA_Xp2}GsHmI{JO<4y%qS?6u2OIM`NtShljwHVqH#^2a3bIrO{fm^zE zlc`@aM6MQ}Yv8GGEwQE2pjnWxdB5bP-Y{W^iz#azj|@FIhSAN-?xkmr9d55)bbk@f zet`3iz!@#_BgHS|`3BI2i?bTwBLqKgvYc^%kSVsCz1MNSqJ+C6ws_zF-al?f?0T-6 zg7-zM$6BZT<7--7;vn$cpxS(UHThwHrLVB`)GP!LO7q-33BRbawJKXjFO?1Xaokv& z1Mj&Lk2N?5Uj^}ZgLtZ#7qH*)a*}NqSy#kZg_n1+l!=cDFYdt$H)Jf}=D@o9?`>e+ zZ_AU0=(rqmmZCmy4im4zw~KzOg4$y^kiY%?At$$Q%C@##!CQu~;qbBKbIkG3P#AL_ zP!5QoY!=Vb=A}_v6Lr2`pdw$_%e?*LiIPh{UBGFjs{E2;TaQQtV7PG092PJ+DOTH| zBr1{96EmzTxJWfJ*`q)cq!DHen3D*)VNv1>an^Ehc7IM{^>T+g3UAxwTKoVbv-|RM zC}CsBYMF)G%|kc-8+ErOB6_ttD##e(TB4Zs1M^6v6Qg|%lGcR|8m@7m*x7%_gw=n` ziJ$ektly&ZzYl5hYdJ|M@r5RFcsvUPnn!cs@d8_s2Hj;4Bpwo@xQJ1D#2L5D5CW#h zln6>iuBzCUJS?ZvMahy+IdRmcqB_5n)%)67p@2mch*eZBEHfndkn&H=`l&LwwDg+l z;#1oROKfUtM^U&ry;?T?R)EDcF^0xV>J`VMXVppF)rtTFDQdcgMEanSd^XL%Hm#Ny z9zQ}4V;fg@H%gzZT^O$L8P2VQ<6z(<6s5~IX}}c#CKa@|RD?kR@pFex!V)l{qR$Gz zsg92)#r(X=(-sv&%ozUPC9%4*4VYs+r6zYp^E$~JPFvPmwXWVNKFsT0PR@awm>cYb z-cnkVn1C}#KILpmsXsC8P00yNzU2sGydL9o1C9!MGWrJh=V0gi0B0mmH&haCl~oC00yLAPGtP6LGtx7puR zpR3Qm?cR28!#*a9Toh|jkgX&e4vQ(rcAlYt7LF8@y<)h&d2+j&-G;v^(m>Zo_Fa+9 zMyn(nU1qBq;99j4ww%KKV1I$lJ)uaktgTbV1wOXRtVX>NkcSe5U?{Kw?oNw`O)EIM z?Fma=RqK(0_}I>?QDM!w>=z#pDaX&+PyA=hH99Xc^l+!Q*3JB9l@y2{XkA6@a8 zY@KD(E>J}1KiXEagfXv*8fAQ^qpUtpRLUdZX)(YqjJc0#Tw%MYBw0wKn7ef6uI@%A z*KA1+5&=i_;*1U6sA3d))Eg`R#UihEb4~Xs_Bt(luqc%w*j$Q1kbL4KeDWYrPNRx z9!fzKW^J6!vK+6^IPF9?a0Vwu##Epnl96Px+zD+H3@={J?cyRTFk?kR<0PZ35$yu> z(FsSCJu;8QmrYZhHkHKL4L@SNk(u5$0UxhFOpgZ~(4mtvkKZqy_fka%T)tbtep!ky z`I78iaH7P^74al`4Xg>eX&Sg}XyB^3fy>4Q%BE9Wf(9<54YaIMCYdVBjlcx9vevQ4 zjOYT2W@t#(lbdZT%^Rj!ceX#IKiaSyX@>U}P1=1znlD!_%arCzdI8K5eQ8Uci#00s z{1nADu%zK?s#oM!`T#K8s^$Nn61D2Mj5=0G_s-}#w(BzZ%Ik8`WE;xCqtFSfK+bH!oPc}KL!%eKRsh}G zgZ)W4Ay2a5Yay3;`YLp% zChXz|=BSo?)-bl)9?qM22N3`$IH3itx?Z)Ld4f&VO3kyP!?0k;%D^rKx>xZENW3+1 zxZ~>!>GiR+ljiK8sZB|NvQ(nxtR6}RLQB-Nk$bJQV3xSx$4#`sO=N1b7FtLY!qLSUu$wwyIY6oS%5v9G* z8I=94P&(s)y%Hn^ue6vqv(`5#O7C$?t(jYi;R$EO88D-xqOOg_0&aS@-fr#PpHsnV z+=+8J91ZMFc>CT>;#YNE)+>(VuCtL)6Er_dE1j$wI$pakiI7l!J(0esql!8sqC zOnMu|qcnAoC#O}b-Goq@jvbi~$F9{_Q^SP}XguTvHy#d2HxQ(a6|$F+h8;zKZMIig z;!>Bmj2Dp6BH&bDF|5i)pN@xZec(Ym51qtl9wgogKKu|Xv?Wk>)2#0nLbHK0NW3*5`D=qTw?Wc(YjAMyBNEYm^xleS*#Q=9;&#xNbUOtvLbB%Liw1c9 z`Z6q5`-%-wNNSrcEL(xcOQ>r6fY>uHBK(D<>j=o(3&U*T&5B06#V96dGJ2mApz<5!uW*Y!p)wn@{@P_QFV65Li!C{7 z+3%<&yEtp9B&(>xr0Z^x<8Pzcdioy(cwSw8Tb#kYAD@1$s_}EQ^~Nh0b)%qpWV%Px zE1-!F$ivPOHLtZmruOeTWXfAUK&C$VXiakKh~5cbaUSmddp&ya)-`@WZPuPpZ`~se z7R@L=9pF>2kMYZ0@kN&Z7~f;>@ZlcW57C_CBejxN7%I|wM0M}J7gX0Hx=m-M@^TqC zRsbX19|KsEWO9|!3YDK11st$P$|`T^M|iH@sL9we<8K7Nr>Ml8%p;9_tM;8`(|Gfsbtgcs$0cB zen$=9;pp9`rDezMUnd* zSZ_8*nfYds1XggIE=Ku-;_GZmm(l&t-Dl6@Q-v@REziM2%|M^>6NYOUkYv2U7jvuRQk z-wWg{vfb8X2}04aTG5f5^D0Z2wGX9b(6T11;ks!{Xk--vD^Wh8(MZ*ADO#$^X-D~L z4|9rk_XA5+bJVs1GqAU}fseDmbe7(GZ_m>FKptTEfj$R~SB(7Zx(#ShppC1cZ_Q<1 z?wgZylZ`#x zbDzt>#t|kI7#}DR4Jp~$hhC!go;E*h%FrGSVEBRQe#vg$NZ8s0JppocpazKA;N@5# z@w#pt_MP39pTjhdiqw?CyDeQ4NwCyvdst4G3A4ylCxN1-t+Ot@hk-&KD8))(WdUzC zUr9WOqf1eQ(>BJNEG9XWZMB`FwmTeUHBjA@ThemX8y3y7oCB6wfo|7n_}Q5-)IyZa zK@fr&^TP#As!Nk)F=p3?nQ%rWo}|h0bZ>Q$1r=_-A^Zm~P#PH3Q=fcD?mrzoUUkmpCX(9u!vD(7etVcAaJMf{c7kP2^}bUwbBt{ zhN@;gq52$cHDcfsfJ_{kFaU3kTJApCm4z1`;{Xl>jV%n)5t(1Nlm89yWXRzK&{c;u zLI1U!pQH0gdJ!8gFUgxRV#b>zr{ZnR8BZr#c204XDVn9S9tIA(s$M6<85{+xh6za0 zAmtuSX-^03jU?Hl@3Bl`w3PMG2%rB898c}bzmL`r7i%Zpi*)*;`jIcV=|v~G7&Z?c z*^VpArW_A(On`(33!a4;SwZ5VIV<4C5<|h97#S;1;Z9M)j%^$_W2$z6k)NSapWRRP zVRZ#FJ&4srhU}`raMQ$74?|a|Xx1fJZsNyS*+~IxRt?=5trB(fw{j9FI;K0CGTx0Z z6&R%gpiZh;7{dJ``3(94J)s^Bi*iK0;Kx%~Q8RdMZzM~|DdM3CY;Cv3Q*Ou{Rny#= z*xWdO9G|T(RhvuWxoL88=mdVIEVYcHcHkQ!+AB^suIVm7&k5@hKSH}q)7%mefee|5{I4$Uh(x z(dyt&VzOF4($7Br{DuJf_ALSYSF9>%%P3Vc17P6iUjhsM!)#=4oM=H&%<%Q&+&}vG z`tcxRyC=M-(x{+?Y}xS`!~Z0^{1j`a5&TpW+am`S#7a(IlTQBvxV=y4N}hl-#)2j`Sc2Bnn<| z3T38B%SbJJwL!hm6$(nfk77nmL*r$F9SYHy(nrOE#mb&MM;+x8 zhE8L_WF_$T%33B0Z%k?00sf~mucWLOrrX8b+1c@uf;bCSW}GQ8_{O-Z=M3~gygsNw zrvrIeF??qymaf~}yq1`+8igLa31+ZXg7Xg39wlclmXyUImx#V8=!PUPtq{{{OH9^v zRBrH&^ZLO9_t{H6j<2{Cc3U;aUGW0=ejvxQ?QdWm=p}H9i${_Pf&)v`LAp>>4)Jnc z)U3sDwg^({;dwE9t!|>Hcv)hYK%~32+0hY3?MmaJ>$b#aD0xZ%fhPDT52|JAU?(wu z+V-wFX6}&25|UVQRy&;*>|9Q-&jx&x)z7v2jj7=?7P<&z@FsHY!co;Rf8xR}i}Now zKe~sTzwpD_N*a1+nTldHnj?o}bSalh<^mj0wo&SIX4%^0WJ5(r(iS z)r39Ko_0(wqY>%Rzb`v*Thy^H!|4XYaW$ol*X-g(pD06 zACnFI6oa%|r&-GDZ(zJIY?)kiOS<-fQ-u?MY+K^76J63xv^ZRVKBq8PLyc}ki8fQA zttgOMn`W=}G!tj{XfH_Ky2V8MqI^GiuEPhJ`-S9o`3(j_QlYhq{P23`q9|$DVJA=* z7d@%w=PfJXia>;G-n7s7dhz3n>In>n;t1iqOx=rQCtw6Tw%zG&dyOafJL_9O8P<1= zY0o?B*-p5gSeRv6LAq%5yB+gYyH@L(TVzvWI7^cRt(cT@?xnBP$M#M4pbPUieeA>c zQE@s~S8{kF%PCgsaN^c6_j?p2ovxU+LvHe&6Wr-~1PU zw-+KxfvK)T%vC$XOZhKtn19U`rGh0VH$HJhyB~e(&k0o3*TZmtcJC9r@6_#%O$cr<0eBTY4qnd`aq0j z>?935DWDeiI{4iArIjwyVBg$7q%Z`d6FxIy&&pmHgGsn7yVB*&I7o8%%%z z0tokCNX8M|#nH41L-~}(&YljFbD}n7?ut_tZBFj9>POS9J5Jw%fbNQbY5P! zM^SKi9xd~$IT{5KCLMYYXcC*aC)rtsasFha77mk!)*WoGbIOS>N;FBCSEg?fF2`YV zHnK5S*Wot2lN0KV481%WwjOsCn9VyJ4Bs1_i^eiKGxnOx<3t2?Lc|g#C@9sYqkx^O z6dgXPmhO<_z%lJrOK;bqRDWxGBaZNYxA1@W;Qy|b)4}YhNE`e>Js0(x{@N{%Uqhbs0)8=#C#Ub!}OM2}_dY>!zYZ&ZD8Xk(?cS25{R3?oM|N zCc`l`JrezQ2UJ0Loz>NRM*%uESHqn*!{k+g@BJ~+HE`&-jTNXNvcu_B!4}3k|DU() z)SzSJpr`z3z5LtpSyM2Fx{+!WLl;j2@Wu3|{RFd&GZY(8#j6@a-c`%4Zj>}09 zOuPv+Te_fR;PmwL0lFWczbyuNcSjC285b(&Ied&d!lhVaL#fZOIc?9o*r_(Y=l-0D zWdeQ^Dx||4sCfli3m|2lw*RCRd+m^$D$>EN!M(dpS(U=j3-I~Veq*4GAckFjfcRo* zCp))npom+8g9D1j@yYubPHs)AMG=WHt&40nJbz4q4vZ`9i=v*pfet8Zk%e{A7Eurc z@huhxL45WCA=JW_=tu;*FNMUwZI_J9?&$G`qe3EdvH@?EpWWnW@9O+HNGU` zTKJvl;m4tij@MZbh?lkCgNy&sc4w=oXUMt;B ziMj|X_J2_U`ZdjF**JMa*N`h6D~mn_|8dT67!@>wUyR5K)PieFCshT+V{(-o)djwq z7vB|UWJOP>WqlmQ{rHru04ReGtgh*(RM`Zwxed`~(#cbQGB(+cAj4n=I@pGetbs~` zY*L|H4t<}fMyc=d9^@5zc+Jj=r#90N#VOyS53FAsW9cAKk?ufEepRX;dzST~1(a&% zvG_QW$9=SQnuOuv?V6xB{NvDmiKC?xCiX#;Y^oRo4>WwT0$qwULH*u^6)9rnp@_98 z>Nv2)M*pKJ@tM4}+qN@&*bqQFrdQE%T8?_hCa@m*Vev@$Z876#6OXtBItrv6 zS3J?g%Yin(#YE&6%54yHI+U=OVd-E_M+MoIYe+#n6DacwylK`(NTQzA5EHY~$F8cr z;Hc@<&}OXAuZQL7Dd1ulAu{p4n_+-T)LStEwwja8+<;DP8snOBA~Ki8CaG1f$P zOunL$(y*Z7O88!d--tfZ2R?dh`{~)NxG1YdjilYc?d?$2-RZ2FS122Sbu@S4axLcR z)RT}4{*<#;sNS9xb4u+I6cBD`qg)Fh&1f7El4F$Z^!$<1-|pLzcVag&{goLEHL711 z^JKV~%`ohN=`@j)EIBJN#Kbj6JV}h{Hb&x5g#+*-s^}P6$1Rqy&Hts^_`e5X4jh?Y$PN9A37^6%e+b+=#Jv&bUK3@|5BxLfo@}1 z(NYT~%i6LVWFfM)Qp86VkqL1tXo;A(=v)6l|Lgb~_*PA<6i~+}SF8p`kJ2VBSYl7F z=5|tA`wLRm{zEud>t&U$%)r~vcj4)euz){~C^zZh4 z*$Q4{KI#1{?5G!Z^!JO+X~iiNcm$&$3>}NRn(p|p;y7zF$2%N|sC{R7+l@x3bB4`o znY0<6hcI|#rbJq!w0)g0l4wFl3?jBu`v%lHT#5=&)9Q#UY%(#jago=-Y!1=oUvkA~ zDlBhWlyprY*J)S=bX(zQNH_s1j&+-F5-@?r5^Yx2(?|JPL03UOL^1R3WL{>YGOLxr zV20+{^YXMD!fUM5WTztYLAaXCV4)9jg;IC{FOs6CRY^m~aOwE1+#z__KTG0a+t!5m z3MC}#Vtz#nd?1ECh^Q9Gd%RGP$^)oA&!)vLoWeQfD#ailcC=d|%dA<*Iuax^3?~{y z6RnAeu8kwAuPT0mbE*|rq>)OFOaiX6An3{VF-=qko3!@S?rZ9j2h5x=mLoYH9DhjU zWnV^sOuBd(0fxr$Iqf^Z?Dmhj&1Jo5jOWXZL#&JvJP*aC4N$71mMFiqcFZ|Z#b$`v zUWjF5wV4t0#-DH_{vf1p^xF7=jQ|s15Yd2xXm`V`o~N&4x7?vZp|BmjK8|@{Ca%(Z zNGh?(mmlmr&Sh_kHQ{%B?PMpIq z{E6IrZgO8OSLGcqhs;JXVu)vUE!W}hP;0w=*jOG-XClRQBq>=u5Cl7$H$o=X(+#_m(TWW*~J8hK0}CvU5W*0^5T^FYTj7W#2^e z!>z$5Q^u`PqH%B~TEe;p-b9!kg?> zR;fz6)HWOi*QhAcU~Zai_#3{S40HuuXxWfcdtz3hmL<`y<%!oRo2U}Xb96-2Ka5nk zb@vF*@83si?OSw|n6#FcjY0uvj@$dH38NDo(g#{h8o_Rq9y7A+Zw)@)0O@WxfTv8E zpX|SnN;KsMgo^|dAk__NAKmm#hCaoLM20<5oYEZUUyZVPJh26TN0!|Hx~+Xe%SSgr zc0sMI!w?#Gs#ijwp_PBwc=E2|$<9z)_L9u~ggnMeTXu)^`WPS)U)BwI)t0||1-*C; z*<`gvCc5qFSp5NYU>41IEz02WT~&n4+(0bV^vzYrU21H(|Hdn=#PpZ20bipe5oqbV z&6L-@d*keVlWIOZFYcG%y#!%qKnm-lbp=aXtVRVkZqkk2t2jVSNrVm>Mh zbt_-gQ#!@OOEPN-b39szw`lzsCgmn=XT5l<&Kuk3C84`!(_WR#UHlnoC}~EgRehb> zclW*O_itRi@Tk1es=AVMzrh&cdwq@O(+`KP?UAM)~3(8zYTNIqxTaeTy!tRoh{_o$1 zpm>bj`1C;%Pk&wCfM&ieHH=QchQZ(2Gz&Zf`<=IK+`6%YOXx_Am%|#H_bOVizWB>N z>O;#Z=t&5otq{|!nqegi8!HHe5L;A1e<^`{(|Lb7%Fae*Jr~1?ujsG`7Otp8lDCje zB#1le^Ln1ZpENfU_N|Rq@LPkA97hHwj413qpx5D@|JLB(W0nLTyst8nEwg`aWqbTm zS?j&LNlI=^7O7}9KxYnpVY4w-6CJ?VaA<$ z4;I^g_k2Dctq~6+mqE%I)?^6%%vz1T<5J;e5H{FU!sOq6OIk~*iCnEMv@(TOvJg3T z936|$1>FbT`5XMu-(2<8hA=G(IVG)=I#X2>#z0t#D4wc5%17tC zwcx8(gNn*lwQ8zr6|HL7RMoN-MDho8@I_TcsX@Pl`Jq&nN+)J2Y&*lqUf0hmleOH` z)Ul%sWjkWA9`SS^x3@8zb*p=*zWTPZgyLDHY-qKSs|k&wN@&GCy*7Ud`>LP;(Y zte!6C#TXVJoW1muMqRHiH`#+X^4Py%z%k>IX;gWvO|m}=12S8452rv4bUnp?9$=UN zufJrRRV{JRb2-?9(-imt=*heR{DK##DrOdEXqrGSV&Q#)BsOAsI~gIwL=5mBm+ALv z8DdtlQZ&ZN?Q0;&2UtUJ^LLYe46?}d^2DF1D%0UUx5EN;uE6VgUR-$a9fLEH*Y>oW z)$`<+1sa5T32v~|FMWlWljB&-CSxWjA`=}_K?$45hP>dINZrcnot$nM>Z z^l?;O!qP{(+r<<&!D%r;kCsYHAFWgWC|pR%__zc#HIEj)*+50c0K`8~c!Qg-p8lxmdkaJd(F z{_}FKIR+c&bwnyWoRt6y{1uvHY8ig=VRD+;y4vBos$jG~k~4l_1|>2#4)lS9?n93^ zb(!@ub@G3IdiQ_B9cprl3BBQ5d5jwZSr6(-(G}}TeX#KmX){dbJ!l!0 z+2h4j{{n|a6SW&n6lx?ZyNDywcL{TcVLTu{R{^H!V8!#)M1oI;xobv<;#D+gwHsu58mx@N z{L(id@G}Z=U?C3T^`I6;*8{(!Fr@ubw&ko0Q?|}I-qB2F;PwCa|0e(c{{u*pfqWgs zIyyBlya(xkih?dIs5r|8UN%1Ax$RhS`m5m19Y4icqJt3x*D&?{=*=AFvKUWMhe1pE z>iAH|eSnTUo?yb@Il5OQ={Z~^e?_QYFhIUA4*4w}Y1Km>3kZ zeRs&_9q!6IoatWWw7<+S+wG*F@P3&2s+egG8q;2@!esn@UMSq`&;sa&*}OPIY0D|) z>m}zND2jMeN`5|9CCD>ZJBu*e4yyx*Ark9Vk}lhAC;Zbkw?7zh5t_taN6U#T){xFD zj39a&H3-_lRTe(=EWxlf-AP)#R{pB0E8`^6^jS&M5%xI76J@C=#=&& z^#a}KYZ`ATMBMfb_>WpB5zo-n4K~MF>)6B~l6C1&MAoh>td1DQ`XRLEML90k)fx5z zhF*yBd9$^fhLDgp>>>pRt06jXL%wiR?fL!?`^YNK$lT}*u&v{^AJ2;}PewW_d{C&4 z!@v&O2m~+~o)fcdL|3e3aPwCluan}EO}bMA#I*D}32EqjJ&If^$(gXkqi%_RcA<6| z;ER0?iwOga)O`u+K`_~81a!OPiz7z%%8u=VP3F~I7d0#|Fq`I){Z3Wy0Nd#ex#z_z1=ms=cV-eIPfKy&W|h#05~=@;q|d2 zW4W@n;f|0t#w%Hx$NTRK4o8Oygj}@8Hs% zY*OP8fRNTx2n=J>Bb_UUv#PEs_vx2fqhhjB%kWfMibyII{p9IWOg`;cfGYD*g{Nww ztFqPWf^xWtgk>p*ED6Pi3#Jtqz@bC?2A;}-1drdA^;{5h5#jGy=7mP0_u2B9lT=BI zzu+KEQ1yxnf)uH6p&gQYLk$e^YbTZZSCnde`1&%N<&;DK8hcWX(B#J{L%DNcMNzn& ztY)Y6VwK#6_qU0uRv})_VSTI%SEA=~Q^XR|V`<W~21=V$f@mNKUewX53osCTt(fyL5rsP@7yqsO!6Eak3`)z5#>OEn<;nhFALa z&?^JIB4`gZcE+fM%Yuwoz7)$DX=8XA!=tX*yrhjtj^AjVCmUE|@O^sJHjl`WMZ%G( z3$>4t-gp@AY=`lxF*cbsaw|+QnWv|x@RZUzL4UT69xHJ#JJKEGW*tkPHxb~^$4RY4 z{-p`;G|R6;Pq$KH)8Ggqc|`5SrZ`My_>|1gBmoD8%<5PJ0U#<9ZBZRrStk=U$~P_6fR($L z;#HAVvBnT$yco^P>8LQV(zqN40)b1-qAqmAGCI64?KSBccEkzQq##zUYX^E@D&wkx zjh{cAAhV)XqX;HnOo8#qbg&gYi5(3M6=q1JTjXlrO31_iWQALU#Mk87k6cuxGzcVi za7T^S9k)mXbaJ@-KsqHe>6r)zl)D=T3;sWZ;f4N{nE;31YF^_$D>G(ix79 zXbT)tN<$)6JOvbxZL&KEuHNvqCBkdk5CqL76o@PabV4Oxx}T&d%ZKl63?)OqRRMfK z6S@}}A(6KdmJGXkvfzu(l3gGPm=T_I3{%`&yvlHPH5bvE6%-?aLhNY`7$AJ{^x@M1 z^R$;Gu-0gAmRFP}ih-dS#SHVXD?W!+A?MjeA+k-CraItTlxhQi5&{ZwL4~)Ir+ZU* zL8>jmDZ+Td^e&Vn8%7;oU}&`4cBDHF^mOC__Z?t2P{Qv;&QQKtaEL=Pyu>Y-!GPO= zaqtmK)zzjR@W;UfWc;-qM3iH0z~t#4wCpL+Kd4>U><#W-E(YGS@(=gV(n0vjGalUf znn_p6yYK6ja+96kc5!&F>1Iyw)-=;8O~(C+azEY@vM}r9YuxgVKw&^V zT8BL^>be+x?wOSU#wbNMs$*-}GV7b^ zZ?EOu@VJVVqh|=Bgh!ee@6);HlNo%c&X`^!P}YRo*Uzo2H?fG4s>{68jIWp-o?cv1 zUn=E|h^VnP5|dW;km)|7pu_c{h_GRozmGk(WRF^SGln&JEa;ZAk%gSYhR_fr9o;M2 z@4RYig%M5&Lj2I>CoyiyD28a(L!i{^HpJNWH&J*KF+zAf$xVj@Pks}dQwF2(i@W#p z+Lp2kKOK><6?jynL6?B2`wgKmi=mS*T-6PM+>s_s`tDV`aXq*zEOBXdOmk5ffKJ6w zNw13$^?L1a=V-x9yxcBYVsXKsq#8PQnruZ-$K!a!P*7B-#?SghiyUChg~VaI0mwaK zoMBexAHf8*8%ST{Y7&i?o$}3}n$b9iu_qbZDl*EJ(NQ+xY?`VNrG^YZb;!3URn7s+ zyzoaW8b?NXNtrqy_PX>LAWfy1#5D!La#-1c_uOgZAP3R6oksR$5Pf@%C^h~i zYJF0ePxk39_3^(FIY=j@;sVANL)WGh?r2I(o=j0XV4u9FlLsgcoK@3eHeYez-y(;u zpy*`?J$Su4uXcGS7(q#ulxLG_RwS1w4$MfRc$w7<4+F)6RI=P;R%A80O{fH?D9*!m zG{(8-UJe)ayc*jkn_hIy5i#%D*0%9%70+aVFP`nm(n2d+vi-sSV<`oU?+u&YTKP~b zhFVD|ER`uFtoa~BnFLrVfRzPUWnPeQl#+`CB%j>-ms9k!*eWUqhRnT0pPtP{3Jko)Fal%CrrdIEMm@p1xv1qM<}-rf zO6^uHwipjr#1U(Z4pQ6H8tx4=Mpe9SCfdFP|FP9QWXAV`-6}{UqQ@F;dRh^Y)aTVD zr!Oz+xz3rwWznX-D{#x=ESOem7Om~@szl3AT_&%JS_`pN-ECPpkVf)a?K&f810K`h z)N?=Wq!=@kctc~t=rfm1$nJVtzAoICqEc8i4~r2sX5Kxq`U-8U zGaMFEDnkI5bSj8^cIV~koK+n*jB_bts+Xv~MH7PV$ulw?!1f;+`$)>}sfJHy$myb* zi%1(#-TAq{TLlb_u}&iu-01RH!y-XTw41Q*Oq!Pw^9I$Sua-cDVbD<7MJ5HPnUdqw ziOqtC?`mDLAkj6QlH!l=8cvkkE9&nJx)xp!H@1D7c5mC}>rT&AVD_C8Q|zx+N5=VM zHd@~!zqRNQI?X1i{M=RhTEFVsSKGBT7~h+;2AyL?OVAVcdabx-bOLT8Qg;yofM2eh zmpR3N|IvB13N)+JhEM~sxCHS42p3*Vf-uTKtaZ~^Ke)+G`?$$YFQyHF7-CTy;=Q}@ zdUxfRk6c!oy_)Ilb}Qh^P#3|<>`6A8RhP)Gp})?huu7UblPxt1?8(UohH?bVPT;^M zo%9U-A@~>aB(Rd(xFw_CddF?e=SJ3-b2!6Vq*KRy-1QpBXd=g)kLEdotU=>yF!SZg zJkzyzkQ!&Dm=z-0jla^#lLMg#q&5H%x{22Mk=TP0i=gdnZk#J3_a zC#lq^ZAmR#rE%pX_krHjWo>j0Sg)A4g^@djO4nz^zV`EYNGXd%h7d>FYUwkpOqIMk zMNbRER)~}$l4Dd?tviwR?17(bQ0}3RV<7*S9Y0ZDq{2z z`pdT1AGSq4uk`Ohi(OY+$9^;)?W>ATacY&rBd%Dz&XtPOadDy$WppcRX^p;Ryh6)j zYmXgjpd_x*DYkQQ+Hz$B5eES-wZ=0b<3&JlZU$&H-6Zo6BsVzU*!8?T%4p8Yi5X%i zLX2^}vx-xZd`M?6@)r;&aZ7*`AB~Nm-WaWwAxSB`J zn}dNZW;0Df>pXTP#Q1F(lHzqyOv%}rPHduX7_5R0ZH^B^@qh z4k)luTt|Qd+A4t8NR8|OxHM&3!O&U>=AR}GS`rPQeDTwCX@#kTlfJF^+sgeGikyi_ zS~g$X@cYd5)i~gr+H6Q!K0{fY0W@s7YA7YP2krq{kAG(9VZo6~_V7VZkg!)@{muuKJwhjyTC4Ebk-Bq20Hr)O1d6 z+Py=&c~Pku0PvcJPimd_wQZK8e_40lOVfB_Rc3IPn^u#Y^ZiujdfOFDdPDC2miim5&dZaKuMWwASl z4uotJtTNPqt6d3>NPT8B+q?+P>p(tq>{q2`88}bQcc;95yjj+z)8(zfr~94jJEb?P znr{sb?y)<;C-18%0W+)=2mwRYZfE0JbLjc41WNRsJNP zbaKTt&>DnGi5=^fp$||-0B{LwMC8EJ>z8bl z5on3eZ_tGjchM6nv(dW6OcVzlDhn2t*zcHu=7N&J1dQFc z#Tlmm;%~fW@Zs008b7BjiN{>$xS%m&GD*ZNAfaqaWoew(dZ0}EcO&L__zIU4J{-`4 zx7P3jk~EQcZvPX)WTy#VeT=VYhVkhhJ_TD6zkDjb2$Y{90j5Ud17=NEQ;Uz(N?LLF zbU^g;)Ax~nHl3WxeBwqKdf4%{V+}7N$(_`fx5@2vmQCMraOXv@ra% z_r9_P+j|jivMjs-pI~J+FZujV84P_s_!rr2qmwjWf3%;8@xzvaob!xNW_&LMCpto) zjF>0m5{pO;>fea2oF(c2ucTU50{=>xzSzT(X@;hUkO4Ep28I#I9w`%1m?14(7_gRPUKsC?^d?VD8+bDb7N2M=X~$b1EyZ8=mq z3dxvqRMfS8Mv!`%&FVt?k+rGbe}DYq#iQ@PeEP$8FQD$bhbYETnzo{(;0a{PrN@Az zIvDPu5T&0#`~J}v50O%Jdws%iit*i4s1J-|4aF#c2Zm+1mE%0z5<3^UJttBa29t;7 z&T((DRWZ9+K9+064-?^RNSNTn+31>xHC{lDuXIOMbPZ92d7ZXb00CVfYuc+qpI`zA z-H6X@v`Y%qpS@<6%&!r&PWAYh0pqJqqAb0;s2;R2I)}M0^~OQ?S~V*_P}i#zXWG*M z4)dN?Ah;jcnzScFbh#>ro>VxPcsF|R%ldn?rNRB)Cg2H-#(|n1YMB#y0ySgj+31v` zSh(@klue$BTXEZ)pWD&-G4W6Kl9Z?Cb366}Cq$I0eOOQ!nu_B{I1S+XHJW{>(zGSr z?RD?M;g!z2fF6FJzdKZ_>uLw>9mr^KP`7f1k97P}hvHFnvFuMe&$|jiHz?W%Iw%_I z)j48WAhFj|(VZ1zxB{e6GsdV(ppynj#T}2eW`n6+b9SHRG(lG}-|%?ep5_EVSB{dm zMw5MG?Oy)Ms!WbZrSi-mnZ;A#WW|C<>*n26>*K^Rs#EsLdivxCJ+GHR02bTS}@zgb21PhBT=r~nmuVZE^RV3y3AH^o=rz3o6#9nh>B^gd<>j&+HhKKF|%jf zwY%r(s0+43nUerI__H(DQO-q{~tfgk`l>RiIg-e7l1g%vV`+ zL1@Pl%zJXv2KZqdB7FmT3hWdweM7TEaE^gd zMzQN6a;U&I(vk*lXcw81+^kPS|7Cyixo;f(yzs=l?VOtsBd|UM&QZtM#K-<|gN?0^ zrWr>VoI9JJlf`&3Qb#c`zG(|zcZvJ&QdH;EjUB9m;S+zOEafCay4>w=i%-Qx5V#jn7COsdH)1_=X3 zbr*Q!>UAMY;bkFh4M$mBx9pupR=X_cP^&#@YIIo}dfzZugVwMMqYbh)-sLQ|61efrGCyaN+fHbQYN(sp!x+G0mw!3nR87{9MZc99nmi*n z@-CMlgo*t~=;Fbor^DvhHa@N_J}qYF*|f%f*5}n?lqYBrzEuGZq!8= zM;(pzCM#s7&fM}Uv!*V~)@$5+g%byPzpqm|Q3l|L4#(^qv{0;fZXB#m4g4lFBdQ^vN12Jzudb`F2IWQo9)UGjmpko{M zO}J}Zu!RTK4g+^bZvILPvEjx~Vrjb2FFkQIy|?k)1J(rzFX_aSvtokA1S*0trG+huoPC%-jVI z_K|amya@cZDZQbeaH6Z_*`6%>DzpsG51r&mB=|Q5OWw`?tgEA-*c&ok@oBO?$G*sm zxxy1%&Ck}{uyqAKis&_43L!M4Cx{4|8XszrD!w6Wl2vG3mSPTPkz+O}ZKC)I2W?N|{r|M)+@=PN>aYSOCqFuC8n zf?bAioJJ5>-raE-rX`)Prg-&xKAjb=S3#O9uXJL!Q325Jb&{O3m*QPCl7Sik4I&ru z?WAAqej1jj>GQYcxSU7INR?e!mbHanQE2ko%T*)t()_ysa}(DHD}DwF$J*6Y#&fpt zx0nGxg1F<$heJH!2p(o|)WJbflM-`Mso_cB-Ut&pz{}EzGUTY_y0K;nYag%Y{diUq ze;92JIGfa~A)$$%CVgJ7%R<&zDd&xAXx>$r_$0;-zI~I31oY$`PaF+fo#3V9j@~Rdcq~HTS9JMsQe^M9)6Z^laUrn9y@LNrq0f zb$zz=@Z8~Vhij3sn>LS=8EAa&D3aG$`f6wG2)uF^yG@!bNzCmeEm4kN_DGF7WeP{l zxnrqUyDfAEn^tci?lN9h5~@u}EBoy=^Wtm?mBC12Xl_op)y>FC3>_b^z4eX@-WZZ; z*feFkaXZ<^k@cH|9y{%|IsQ;)SB^#$W2?1nk?aaxM#_mz7}SDw*dpJ{owwWbe6;Hg zb9@*DxL}8)*j};=&MK+oD107Iqh&|!c1QtXZQ??jI$SBNP6{_4;VmeUdqdl%C{@-9 z22TWy6?qA!?l_%Un>K3;36}Mq<2aYtmcu3pa_T<39*tMU)+1guAP)P6H=oZ7X&3I8fT)6h#$0^(YEUSKvC27dej? zx#Jf3HV!tTm?z>h7 zH0T1}!MHe*WFDk%r zA*xQ(5lRoQHU(e(L;GcJwX*f`yY14A$I*^Mt=ym-4HrXif>9JQ&&o-i9xdS#aNJ2I z3zR}r&En1V3|@w_PoqxzH3=Q&wvWSDiPi<7yR+zR#vORggl%wDCqzj5c}RXw9P^yGte& za}Bj^j8GY~$r&}^CD2^$ISLF60{*E|V&dhAlRkP|i;L;O;kyz$BeVoA%0;$pg?pW4 z92}UG3yW&kgJY9q!x}wKpon(iYO8)nCAeqnR?Zlj;%*5n&7QU(P`hB z$gh#so2nmZBn!SEzns# z7;Awz~mDv523Bb~Ot>PhKKt=bx3WbyV1#(ql<-J!i5m!E znE+Wh%civlEWRjM!#Ko)5UJFyHwkh?f3wBBLgo#qQoMqbsv03f;)gLpsrt35#T=1k zkv{@}df@R?E!70PS7kF)x)@KEP6Hrr$SuGq!>gaFSVVd9qdrY^$@pl%L0X(SL7#Xu z`ggrBQ2m=vNvs9D`g{}0wZXgG0A6H3OWHAGI5U?)yhI=`4eESznbyXRIG|#PXretfe(r$a>XfC+f3 z?SNF364^8H#h+wvpq!M8hONQH-s#3TuP&+P=I(?PxQPm1b3z*1LwOHw)*zb2ciJLq z4Ki*6%inpo;Ppsp!921c9G$eO;&xCopXp75ft>r~EIJmg);k>tOz2F?>bF_>$2w)J z$7Z(md&y9?*R)@C@xE8l^>+X@t+`9tWECCU-aFlfTeB^#7}0W$Z`{qYJBoSpqNMvw zx|S9-E^J!0cl70{-e&!hFlcklO0c(e&C$B>5;mZJ1uYrF75JP;^`;ND^5CAP7 zpea4HL|Kf`;gC3<@$ltx8$c6m3763TiKd6&{mr9}tm^6pDSMuoC*+MCi|D$qtgJkK z`MB5l>N{Z=pq{)airIIu%)KY{<6ieGmgy8F6OViQov$6Bb0_UyZjxG}nHw_yIZNmxSPZoti02dUEXR}WzuvcJ%*m^XapmhIFgO#FiY(2)r?Ex7ONp!zT4rQeH^9RVlXuhu5Ao z7SZbuPGo7A>v)mBAnu zRcKI61#ZFlBDqZ0Kd1sWSQ8Vpn{+w2s+&{h#IZ*o#@f?b&v%(Lk}wVg_*8Z>7y~KP zi=xBCT@?m2cjo(zo%voa(Z9AcXXjpTuB9^|T9%LVI@?XTo%FqKyJBVUUkt_$C7to2 zjTv;}|Kft2pZ(kCpySN}I_-4-^>g6D=YR9Xa-8@uc&?rt_fyhg34>FO+#D5u6VF{9 z6jLs!(8Yw&*GaE79sV?4dF(2DyqLpRsF}hP6Q-Z5R0VUZpyE zql*dMxtSWm%|1M!KK&i-n4L(ee})SkOwJJ+Hga^iVFSi3Az&TvR$ zF2{~bjG4?7q|QTyY_rv~&{SsA-<)2U#g%JaR~7@mrP*`y#>L}jY}p2VvTzwK;vxD} z)NOm@SD~b=7*$mbPCsTDgvR>n+*0`T^73a~!7Vv3>%ZgmxnGY_o7KI#NQ8?%M`o;E zNt{_vzNkbvZbd9Fb}JHgKTZWo5@T0LOMS^HobGt2$eLM21^E`sS11SmxfL+IX|dv_ z?wc!-=EYU8c``dxZ>Y0su4qs8$7+N@7HoJn#}lhwSuK5V8+dB&HcCG5Xguyc;b=jM zHo#k}O&?skf={qEk?=1uFj|R)4g%=RCW%1&U(VnWHJ&p7;{?sWanoi9C|-A_6XeE%Af3RzwszdY4>U`aY%_#b5Gw(&=&^Oef>{^ZA3CLiR%wmNP$ zI}${?zKQebY`AU?^K%##0zi%vM1YK=QF@(Bik-4cGtt=P>`i%_Xt~_SH}%JZ)3v=da$q`*8f> z=*5fI$5Pr2Ys^b7y9{f^Yxk}A2pa)D;x zKS?;2I(0HO>;d*PBfev zpDYqTQ{vJ;4P?03*-1UP*bK(MxqY3 zH4LVPO<~h#4uTH(kvg}4*`MZ?ML`2qq7{ho3Y3%4z7Qa(ui)XW*Yzktc-tl;wsQ79 zBC;-sbk1PS#^c!yOvZQyox!7vA7ORzlRNH{x6j`nAANvvciMK~zzC$1)g&~{bX}Ir zHPx*OHO=-~+KIw}N82#&Z8aOVBX3UL_J9o8F2Hl&&cB*F4D60opr8v8&PLb_dNYn+G;#EIcbING7drwITws6_UwtRqir)Qndh+JvAGDF3kP!)8iA)g@ zh8Tg6=8M@HVOwnc-QyQO9zTEg;nXo`2^7Z;kt`R3U%+@4=`C7>k4>4Qw?DqVS4}3| z0LQy$io81?17|UmE5TG5?uH-Uz2|zLG~IB+Fdu5wQx)$(EsY8+PjYcOC8pemqc_K| zkAFUX{qpGf>AUy51fo*C*-R(v8#h9xJ+r&E07a~-yBP0p}>6sD%}7-ru0aX=Y%7_gr>%gjsHzEr={2KViU)Aw-8pI*E_e(~4mxLrI$++v2$FyE~ZaqtX3 zHwJkoG98EL(=S{K`lds@abUG(q^4bYWWft8bChGAI032%NE9f#EIvcS-d#d4U}VlD zK%fA3*2dB#+Q@t=t-G z6)uH|EJXBNDcthj_)R_1J;ltTC}D&WwWiqiE?&Q0`<8^Wp+fk>UG;YBiG|~Ll?mu3 zto!Wy6=Kb3=b*c1yZV>E=(AQAK7KC#g6O!}T4rDfx#mGB$S&LIG5bwSkCmP%Z$Z;Z zF|ST$?ONC^%Yd?ynmaR2y0JSkPB{UpSNG4JI4pGVSjUk&hC_)#6yMDLRaM`@~$*-%FUj4v^k_sMgi<_CcYDGMR!mg&S)b#t)bBcWAVj+2Q ze_wDKA;mvw8@Xyo)S(IiAJKdZlW?Av(J78CTQP)$K%`^HMYcKJWzpRdUy`vMS@kveT=>e7t=Jl&RQ%F!YP6(V2`o#!mh@S(&V=*cEI`*cPRX_Ts=$Sb>w=Lve~^Xw{|LR62Tt{W!t1cM#L!+4G! z>?jx^dp*4#dJnWdX00tRUN!L^bzzvr^u-NCP9*4OMF3p7q;FgCvcPJGKMO|150ULO zAuR4JbyPW?MfDx^C;OZDENtns%5Xx00eVzmfMj3MSkM{iGpD;qGNYb50>`b|>5Vj! z|0BBMklZuBUro2CaLb*0JhoHB%ilOJAIFE|(?4nmys=u7c&<2HoX)dgM;zcBcR$_H zL3vL}cq79V2lQkd)1919;IAb{^&;C+4vd9VS_M(t+1rge1Y~@hEM}3)hwLu zM#{`|aje=@G&EqH79OwU%u2bh5;m*zr&)7QIESbAK9V{9w;K?{eITWq-ZS00@9x|v z7#<%_hr#>=Ltt}H(hT1$oV)I}W>NnTCRx@iq5vB8p$>5Z>>NcM#Be$s#yY)}PU5&& zv&+j?^ux-KHpF@v=$a5h4mg~YLMM&~D^#rxjpmDL)B!bEicfJK*}f>7kw<}69%!&B-&kJzDTaq*~)fZ z>(b<6;t)boK=d>hYr`%@lxPJycEK7lgA~)s$(C|Sy1m^px)0JPt?8~Uv?U+UxQb=nW2f!L>$Rp?TXDkd9H`)HBGKo^oVga!&suFE)8 z4Xvx$W(}{pTyI2t~R-@LJb5pf6BjtS)^=*A>^6cfr29pu`|x8Rya zakeeT*?O1@i6o%vHYqP!m zp)jZp8@=ne0cwB;n+^7LRxQgzM!XY}2O((sO}v=aYx;CEH#-HkA{`n#0SuauUZ(U0 z*Zhy2=2mTEl#r7t9~$cMlFWuwjN3kLn3z@@nQYJUB(=kCMSn~DYLyIt-HwxKyi63C zhCN3if6>gx>_WZ&$!kb$RvfNhD>Mq_)b1y96SBfsio*(gI143OTb_-%?^aY9^dxP! z&}f3O-8Y0kaWZrCCD^@n|8w+H##n{g}V;|izG|4iWw zCi8>Bz9XSWGzDrOE%3h46qR-(;kl&C1Sw4llm>%6*C<#t@JO)Pts9xCayv@0F=W_9 z`@TNHnoVcB7~*SrwIJ6=xCu6Rjo3P1$8M;i;yic%==021#h<6T+X3L2ymkuTsPjOgn|aZX74WOT&Tpif32p<+9#rR8k__?tR(}wD*9v z6xBO}n$D#Ikq~ssEs}b|13btc;K4kV7zAeMJ(2fClFaL8=a|>djZlA87U0Yh;nGS1 zG|oS<^ZQ?{?^7i|Z|$A_{>wjt)=t(#e4XDqMo+eE(UQkCn6lh(c?HBqmlmhglEQ@W z87@hW=Rz@y#^C050TL_2BRCK6kZ{B`SYZPSeO!FK0k+#Dc$a|kfMfnqzCbg!%lx;h z#&tDzo9j}0l`VDe(^R7ng9%6z$;Z9zwArewVM0wkf;wc^jC4Q;RWhEzZs&uRE{KIF zB@^hyr8gqWjXY5XqRrJB3hvs%#Tn}^lU-vK)|wo`i8TV97uGW9wjm@DvSB&8KgtfS zQDMOqK4ABe=N));IOpu%i+bm|LfPmmC8XtXZ+{wkt?so{|5+Wp+_MJ*|sRSz5 zsUnvOpflAIx)Z+oQ^Zre5|qSGP4k<0KKJ7g$W@qd`u!bW%V}ydnJ+DKp;xm>-XSa_ z84TMYThEv2G#(2%a3(?P#VHo*#=-#40;ZeizHv$+M0^@&8I2Tq7O;{M$r zHVFx_eK$m^z|lX)i+RE^SK2DH!UcajWj|mGzX30spKM#I;4|0yCtITRJjOLd>9djw zL*v)U0_Aqmd~I@5te&2#rxoKb%bn#;V&6?f%l{QVTJSwbW_V;|vC0_oo>YqSnGiQC zm|YxVEZX2NeWlKo9v!N0dXI2ip+fIWa_%Oprq+d~awl9pzBgzI(&7rE&fx%4zQ-k` zzjh##V|!}ejl`GxT(ZM~(_<6*;6<20fj-P5z55b`5+WDJDRgC#UZZf|csr6t+ciX6 z%t-c*C~kL!YH0viPlQ@TK zmLFu@FANT6^1pIfNm|9 zV{+6)tz0r)VimAmwbSA_&Wr{UbLk@xC5y!jV+lh?DsEZd-Q9h{ONA?9K{(I~dr>F( z+SQVM{U-}m!9tPWVv%*i&l{K_^aO>;Kx&Z*Ezx>88#kjI{_8M8)1`+v{dzVKNS;EL zBL4npwcv`WXRYuYqcxM8D-4?LhaxTIjkWtLicQ%AucuJtXUKxlKN#h>)mGx}oD*^< zAp`{G5x{~FZ=OmmMJlxvUO2mX%GYvM6~<0a6G5P<{DmNPXgq^UP)9MAnb@d?_e;%L zjbPZN0X;K?I)G()@A@BM!?ivoIV^43GWW9%yNBK=SoC|M;zjfL>2hc1plmRul_Mxi zHV5KTuQh88vRC7Xc8zs4F0LN`xd|zJQv{K;-cqQjB@%Mpt*EE4Ytg zu2T1P>i+pbVc^-Xi)9@u+Q!;;un_!}H;T4kW@*Q`s<@Fa$ML9)vgq~yutc*9DAM`} z%hP3lT`K(3aKVF(~9ihXoeRb+SLG8 zgs$^f@%R#wp(;|bq(>3AwxGf?zssuc#ej1!8X|!~s@dGq)iJ_>P=12;1z%&EZ{ZN{SJn#+i^(@8v zQ5?xk9%5Lyr*KvK z-r$nz^p2O_Id^Sx*^45D_u*=oSZn|~rWRpfnNAXCdy2auJDZ!!o**WX#Cjirq)Hms z;L*zHsI9>706VqfE3dPpUy_lFK4ZcwcOf@Cu)y5*Tl)8icFLbJ&nPY(f;KvPZh*I1w! z06$HML_d=YQ@7n>6HHCSu_ruxFd1r7Z#iV8{D4~52#>e0=j|a}h9RreRT3*4M$V3E zhc;2?Jiz^s=?5CRA**2dJ-XT9%jp%oWUgl8;ma6b8JMAk5eJd$)ItJbJUOOnGEYVb zvog<=F|Aks2sm?C6quGS{dd0^O_Q7X61$HN1NbMt9yRG@gZbsVAo|!evXa#PXhlCDRD z7Q|n=jh3#Ao|uEx5?z&U(Cz|XV^hTTfuoSl7VHxdE5ZbM$?rjrJ&JWbj@^i^eb2j~ zJNkm2i)V_yrMG0*PqnKI|CpUYHnlmi3J=TJ?nEHEy1Y%+`-=&^PA{tRoSlnyN~YR9 zTZcLq+o65#yGX&_m@n(8Fge5lq|twi88|%i{#v0=g@f7jPD!vb|2&1 z!%+E0*yLx!Oz+=&rYmQA|2!P0{Vw>mY}Sh<++Re`&3>cJw!`zVwl1uorzwfUi{2OZ$|P-0=Mtm@X+k;Ql4+M+#=| zy<)vxgZ&^YD;TiCaAw0{^j}E!)rQ>-+z*R*jK+4swt4FRTlSj?8clR){t%6dTcqan zO{g1M-pq;(6?dL)?5r-EBbHls05?E`WF32mjThQ_ikkr*) z>NMRg*-;#b52~OyZ@0K#nXlV#IE)T{IVh(dB}BDszs=2wzsH`FYp*M8H$vsarmKbz z@aC@Fv||{5qT-T;OEYc-B zf#+~wNxw&aPRP>$!9H8h*TBur*XLytgaCu0nGl2G5p|sr)Ry{=XJCn4rXfo6mnNiv z(^m&dlJ%p{;<~b!d4%G5db~2;_SHd5QK}+D;uda)ajjS)o2+t!JzL zI4PUua-BwTwm+8hJmx9q&-%v_Rz*rwOyM*0S5dms-aPS!Z*oUmj9*Z=U)Wf=B9ojB zMNw14;3_Wy1N=yIJgw@galuTCu>o!XKGKz?3Y0_#7Bq9%sOa5YX-WxaP#D@%9N5R* z-GfcNlzRcC9%hMEf1&F_D)3o-E@5uNh3-PP_#?Sz$`;HcC+fB6O?zkrca?Yb?;v(4 zHdkE^%)vuQVSxUbzdq|QR-UWkOxnimw%ANS%cga!NaP#tq!#X9R=<(c4?1^hIl^*= ze5;DFrV-vz)XjzzTO<-kuy6ftv1hqHPGVLE%}AYO6=PLOCtp$5_EdB2gDqEKLbq3d zOJK5sh6DYh55s;=~B%jIkm=*MdAb|P1u=xpl5 zoy+bS9gRTgH{dRl)S|jj3!Q_K(gvA7Ty|YmRs;W+H@hp#Qf2y!_PZGZFFwrAS@%q) zLoc;@XP&N;F|d-e1#IDX$;Nqv6SGXwV}D^3Ku`=z{vU*pnMA+M$ROYjD(IP`K$fAL zz)OVIG>pY;3zEI&9WDnK6hhlGd^4OI+a=quUl>m&mu4#)JZyTDYOlbX26uw8JH$rx z05pP#s>?i8fYiY$&C~Oq!1hOvy;waZc&?!1j7@@-MU3~JtlgZ}0u_ju9w0CiSuqHGr^yIvxCSPbt$S3D$nA8nSP{LoBVw9G{_!+*3U?cqhEBM| z*Tk$`nVJXke2f+DyN!>D^Rbw%mIN%jU>rgP8@}6BWm{y(CgsOPon$6duF4WYkg**L z%9Cjoep`mQo(%-O@pE^)+_&po>*ulHIsSJo>@?OKg0X0U%%92f*m{IyS|9Er)Dl&w z>sKLM@X#vCWa?hK1VE{hi$o-O&g=CKz6{q5);6uV$7mh0mS3o@CSBm3elh22 zu=m_{Fqf(WPc>z#ctFz-^G!pf4yn%SA(o8L4y$SaJP)~=2Q?OLC1bvn&jU8VgQG&{ z2O&hrf@Lh;3h11|AVXhn?6n8LqRZ&OuV&ZD;wL5}VSmIc%(20a^2*jyC%WE$poT>K`5L35IY5E<70cPUyRSa8TD83_9WZq}ZejXk3rOv8Jh-Zxt;6G4 zHVR?mZE!f1MTUnHtfd=dt;|yOin$6RUYT5M&|LG3j#B=<^Vt&;K>^~VHKHRyjY?2VQ=Ce$Pr*K7Bh%$Sw zyzas6-F;H#iAv$pyWc(G`<`bTKT!O1>4LhCAM}B2Q!=)LZm3=3or=G{qO1Jj8WG9XWFXRp`Bup19&@Q}y{4geJ(YXVnO;{%}!P-B>FH8GiV_8%f zI5uFgSt%dhJ#yuK3#_^@&w>A^e1S!Eb8&|pP_;X+b?BIEJzkfzPFgTZ54B3EysP+w z&;vFqG$g4SB!i*Q(+p&+MNTvTV%1y2RL==aqsI;Fz?|$GBCuybiPz? z>3exY14VnTk+Tilg>;u<#SHof9KC*R;`}b7*%VF{X^T@-&0t7SRH$&M<79mmuQJqk zpppckAB-=9zNw7Q$ri`LO~|sJbVC^{t(vfD$jFBvD#&(}9q`!UiahWT8u{IecRhSK zzyors6iibLWQ>j|gaL`zk~ozK^d9@jgV@At>HZl{a3^+}i{2_RD$vzX`xy$}2)|k< z!zM?gH9^29F~$|eFbTJ?Z^)Q09*xMLP3g~RUyjso!dCmaM*yAXg&&S0=6R~E zLH&%*Z*4XaR82QRHL{D>Lu=J)=Z5DGzg8n%<4C7G(sf$m2Vd42hjMEagve_%2VU{& zz8dv;}3b#+KS%d%PsUPW$b`dV~+3i`Lo}aDLbGZ1` zpQIByZ|S{QZ>$iNSZ8i z(gqR3bQ-jRblviBQt`r`q`}IZ#R}O%l-hDB&<5gi&XkJ3QEIKIDG$6oN}6m|TEdm~ z6HVbabXHgilCNs^>k5_qSFtkc$vBAjY)(&{_!siPRP~|R zwyuq^nW}12vEXsVn|$ZQ+Sq8yKAY2FtJSKi0wbKIY~I1@eGGpwRmjNNbQ`C?t~^C< z;=EB+VLn?C#8}y&Xo^}@2A>bu9(ND4_`B1Q%HSSmh-qtEMoSB9#u$au%d1Iqiw)Fo z$gMG+^wZHwqdl`_m!2Qm1N0etPQ1kwLmWiuXgX5{D2PIB(7aqm#5w?+)F#o2e7j*4 zP{cljsq0~$tL1Xu+XIfXb(4Nd=gBaQTeHPz4}a}xT5zGpfCUVaxU$UBwrKtI61X^G zyr7RKz@W^LrJPbOin_+oFVQd=q>~sektP_cT*go!!iQKO5g!Z@Fhn>h707|#MI&iEG@yI6eC$-OFSnLt@dz|Ew4Z)E- z#a?NbipY!uBi4P>*~hu=bc&U8T~76j6o`~>wc*s)X@7;w(f;b|@!KE?zd; z+#+CJ(dqsv85WY^dm&W4P(diGTA-Mv_09$oHe zon#x8fqQ7SW?D*?&lMQu#&VGNLLpcBMkGJ^dRD61>!YEI?kb=R z`LBX04jb7yV4qfDmph5Mn}~2HuSxHQjPkH`VLvF27Zq^0+61TiBf9w-)q}F#kv%jz z=te7XEOZ7#pU`8MepLSG!~IqUZ~wuPeDA$Tf`cK&Y#2J;gwnLffK0l{Yn8NiKj-Rm z?zK{;pK-GZwA%Y2^SbaMNT_0c43V2fYaTSi!}t{`nt)$v(`M4GIBlz9&y^m6rXTu2 z$f*>;@dNo4*3HbqdXR;HDyS70wZa6e41st31GFDu4M@F81rmBmC=g$Y1gF&@Qa2K0 zZ9RGWZULgPd$6e?N1cK{f(<$P79X8-+ikWgri44^gJBS}Ns#LTRnWzo!EGV8U5Ttr zxG;uL6@7po^qWW+;zwDTuE}&bU>Hg)f}eNoy5|Inu{(q+r)*U7vNo2pxt}xN*up$n zq?2Sxr=}Qp{!9z#!_iXraIVk{7d77CgUjA2bCrv8h;Ek&M&%k8rG=O3bmhw{zmJX&8M}=p%5NzNNaO6ry~%)@DUdmwf6IcTE=6Wd8 z{@~|$+?BD|6*?*-L8!kS(}zM|>W>1h+uB2ys(Iw}v99;#Draf~n3$d<_8I<|rHrIXG3;-I0U$EVZ_EA@)_6b}g} z#>cBmGhlk_^QGvZfQ(j%(RwP>K19?`#5Y$8={75pV$33U&Dpy{Av$_Jd@m^+7NgFG`;_w-*tA?IUY zuIqdM^JWi-+-oTa5WQ4pT;hvX1f~twfrs{35w_vX`yEDlH{O_%8y?;`^IjmfB!^-3N-p2TkYDvbQB;!2cZKO3kc9CKN~R>C@Z!%^L_ zm(Sobp>Wj!mE2~8L5h)v2TrvK1p1NQnf$3?PCBlF*^V&HI5L*!Lj^(fHg#YsD{6B^ zM6}B5QRld_rhVBZE>Ke2J;v7+-BNWG3pOtYLrI{`%#blS;(Hi&?3shCcTU57GIX-A(;41j$;SfE2OX4Jxy1_eIF{St z0p7#IbgNJcdj!y*2L&q36T=f7Alvf(g+h;Y?hle3rR0^VJqlKB*pnME( zM#fKRl+d($;}SxR2_F^@J|U%ITytpxsnJfINOt^+P1%S>nbXiUjHLr?YnZLjkfjIi zBvGM)jzQbLQ6&YU>nw)m{tLF#93z0>LV!E6s3(X_XkX$*ysJvAE7`Qm&hgyVbp>V2 zoNL&vt1AkU0s_a;g9MHe9fZ8vrb~E~m8+9N;w5(eX?U)I1xEnQ?*PIf&7ExK9u|)F#<_rHVP=%F%cQ?HWMkUUUY=aTgGOV zsxJx}3mH6lY#cohcw-l>5w537k%pJt+K*GqcZpZ4u?xxx5e~3jau( z>5Y;lnz6iA08y~f21FHk$MN1CT%ni9&~?upC-Fj;dX9zazVc8F_9c055F6G-XBI zZdntZKok4`ENcTx;6&Te-Pu*(K|&$2#RTR=eSjVS6Q_P~{SDWMK&7d88MY)nNlj52 zy((ESetD6`qZ!9&w!zA12W|64+Tk6t&HZn;kK?45}j~hf{?p{t=gi0hceoHxJba()=e8X z=@7YBztIL;w#a3CbMm&L6}BE+8%E6>P5NVyq+`Dqdtx6pnq@XVP7jX$-Uu|Uqf!gD z-Sni?lSClpiEV{4#UJ1@k+-5+9ou`mLgmj?a|!EZ4Ru^EBcZGMaiE;%s_GuRTVCsm z>jeB~dLmma@C%!t$I|*jcGVmqpZk&BLJFhaC6+02dW0_%%`Ez%y9!+XvjD@>1JX7w zDy9Snhmummyfy@Zu^qp&W|)El7S@6iVmCFTX5RzoWTI&hDi-;wZIhI0n(COj@zudW$`yRxB*gRC^E)61@H zA=3zGxqupklv+%E+{PR|{q7`%0ghAnC&0g}tk>i`u$x?7!XHYrzl$sqG`6es{e{;G z32W}X{G9#48$c|6XyJ>UC|~+e-iIu{7(sFQi(iLXCa#-Vw)`Nd*les?Wh0fbyj z>2<*{cGCP(K&6H7zU2NF!dxxP8tx+s_c&?s3ys?kSF`~(m~$Pi<#U7j#9b~}`kL(Y z*5gdA*ePBKXYW)Hu-(t+NsnQn;zdAjbCC`qIX6Isg$&5E;o6{|737S^<3J{zfja}) zeyF)5qo}}nII=6wE&+i{$uxZkzP<=as+DGpC`I{7QB&S`2>(U@m39;N zk6c(cgHmr5?6GL*ykJ~mn5~BUw{1odHWf})1 zr?+*nWX~GDM#?jhSB#tKu1MOn>6$;QDg*To$BS=AXGqtL7Cu@JeBs=kd*cfEj&tAM zL(n5`*(J+~o$PgK<7nTvn3cpL^6o;3u=Mq88BdARYz{9KC0H^N)E{PRA(qCUb=$&p zHiSFWWw&%_2a6*EIeYY9O9e?r)1%s1Uegr*LM&~iH2xtm^I)JoWiTv)we+GoJiNJczOZp6k^V%ADA zUW-CG!CMsKpTGNX8f_z5gfE~()%L2NCBLr7gmS68JTkVf9M5K-qN{j( zNwG%eFl~Aq@owp2^JcOMEcS(P?$lT~N&KW3|K=%to9=Af6$lJBj`ChT!<1nNNu{l+M8}00^9lh~W zZa=|nkR}{I)87Yf6f;&&%(6NqqT0jsROHN!#x9)(b83?f-U6_4Jj3`XBAg)&0;1J# ze@D7sU&D!W)QadDRhODXSgSR@{p(1Mg~AbD8df7$AFg%O9<)RZca$f!A-EOn$1l{6 z-1dVNqp}~&8bI?obtJbP0sg`5hv@>wnAs_rTh$SBbMth3A9V;ZkNWgILfNP@=iV#g z!f}u4@rxgi6|Jgw@YdvN3564`NB!j&`qBt27@7+4qRGReDe;cq-qG71U+V^WkEwr4 z_kuZT93_<%w01Xl&~=)^6p8(eA9IS?Bldlla_+b}yOeXs!?%DY6-Sl!o#wJ+N>}E04FkGN68;!jRRSJ8s=+!rZxHgmo9b zc`?CNYdr14rvA+{J}k+*w_H_GB24-zEa6*JloiwyfyveUNRQnb;>*S z&hIs8McnR5Gsa%z-E&mIF5HR0#z1O~8M@k5K)ZGy+bg6&Ja9urhW5H1 zwuX7}$(&OeJR*j)RF?5fu?i1amd){M1X2St6h2h)|J(!S;r*})0!-dwwv3la9ap*D z`L<2HXL`HGWBciZT#h5mu{M9v-e}Z{;`>1FA0lIPHW%F3rKdw`8Gm8}wVLpYC}R$t z16={dYpO+u3v$IS6h|M>pjWmh$CsK+)zgAIf+Yv6)P{eh1B@&#bkn+%4JltX57}ze zl`zsuNPSB>PtvwZJ9TjdizRrFn$}bY+hGa?MhG1BEIK1at%s`nGSCXd>PARj zv}R&&i%wJrzOu8M%(HYnn>MgG`bOzE>V5@rlqE6tQFja14=&m9m~e4nJt)f1GF>EN zuX%M*w_D$NMsXUus~7!t*DS)6XQ-=pzZ+|!Vp7RxGE?t)AcB6_ST{>v%mNga5cj-- z{MDndFj*+2o6cy8ni0Nk@h>;JNsr;nU~{~Qvro9GJnK+nHv%)a7198^@MmXopPiS1 zpq1vTf-R9{N&rlRiEx3g>Eb1HZSK-DgI!Y4Cm3QREJO@hbKM%O357V_zOR`x_k!pl z{2^m#+LL}kn25^rz{ZFs-xD|f0+tEKV4xHchrvEdMaYubjaMgwF=E3au7SAGbVL^@ z$;_$Nk$CwgD&MUND+AdT+S!mq6V@@^_u)<8ox%$GvXntFjCN!WQ!Fcb#CaDq3XsTM9MlVYea#^4GlQNvzZ@~-HOcZAj8yqHDd@M#=4 zjq8{SAjPdBhATq09_rd!L$n+T=2P(!jd{sS1YoPHa-x^ICJqmVFfWVDHK3JdNEHNMKtmGTa=aX)MuK5t;dZvb;%Dd?=!*u;O9*Y(H9jNzZI9U-g9<4yzkZ^Td?Gh^w}Y_f;38Wv%HU@a99X*p zbKJ$3<9JyQ7HNh;E%hoRDnfldXK6wae4R5AjL_?J#{s0KS8sunF4&Des<0a+&J498 ze4kJlmq|QbA;iQk%{DGG4Gu%$?K!<9>HLQ1uWBN^UF@dQ(4PBO08l`$zn-@ME*TSN zdgJkNsyAPuaV-kBTjB01ERw$L{L8PQbTZo`xf)yIqDyo-)vCd{&5%pc2dd$LB z)<}~muM_k&rncz(J6W+ZplkIBS{L;m)&iSnYhRzsu@(8z zo$ID+WWW4`#eAOesj9_$2l_9)(x)7~dcOKI?2I3F<}<>|sE6(c^kOQB)Fttc+mD3ve^$ z5Y$C4Va{zcXw)VTj20a@o^`a>s(i9HDNQ%xN|dMowS*R@iUhYr1;Q#y%;T%=T{h0l zz%w&78YTk=OchW8-e!xZZ za&9?SvU8?f8}Pt3*4tNa=ifL01-!_SjJ{3~5CDGM*6bbVE{wBq#tgyiv%ul3`$xxY zD0PY|sBVA^JnntnMpEmZa@0+JMt9iWH844D+cc zI8?55F-j_eLvhb)Ag5Oe$3`_`^l(U7PDf_hWIPBEcOi{uf^pk(-pJ!qmO`PH;(}tD z3rSQmOqVJhrFtTT&jJ62BO_b6YdZ7aTEo#wCnWwphWgNoX{|(G+}@pzZ?bN0sHt6E z6)ncl)-~MFtKs_ob>-Dn<;9xv@Bs4-1I*jyRTT!fp;yEFesyhGTl7D8Uy$i6dN+n^ z?$2i9B%X@GNacG>+PxYduo-!Xp$3!bYJ&cwF!H8MUL|M`r`D=zX6Jl!A9e`(7Lg3_ zV^-3o{6DWtw|rfFR;MoGj8K%&RTm#-xLoId>>>(-(f_M^2O12w$2x>Ub0WCYB%M0H zLrqg`?UFt6?`!&&?7}pbPN)lbxdLP3ccE6RZj<=bVw+}-o$I!aT$gQJ@?Rn-73o}{ z+zY$f>KV(KelwSE&%1{2wi=b3m3s?6?maP9Yn!fp$oq{nfMcSJ@7#U*T;w=_L;IQ^ z!QXtbkKp&oD1|S1k-1r@l>3;4J>1ZY-_00RX|#wZ-QjZ}2flK}rtT57C@_eDLZutU zt$|DrVGFM&Q{`zGh+RLR^owaRK%+CUx~t6!0kj3bqGtL^e94%rvz1j&ZTSkrc+N-%+Q zNCB`N^FB7Ena6B>6rpXuu^-1sQ!8b^428)A7AjiPOE$-dl?=&XqiAcKd(;!d-8aG= z4JmW9>$EeejAB|zy6#Cf4chQ+?LA=AJ0YKbt$R;Yo2FR#?>$4Q$Ww@^?{zGjxqNln)m2vv)RIgPO4;2qj znTR#YBliV@(v_ox-cQjY3Q3XSug-xn8&YzU%gjzi#<`*De2?b<6F# z<#ye2yKcYSbKUZP%ewi2?NkgiVyy{EtiM23#d=3IiQ%yj`S`A8SXX3#6i?j3CzR!U z#}unbK12+qrgU+ut}RJXf-B?OU<1->Y##m12(5bfony}YzN z0gRGYx0hpkD1Sw{sc}pM`Y6z$SffLaV&sN3^Fo+*nhZZ;PFn64eQB-XMLbEeGvq4M z;kkYk(A}rf>d5x+%oOd`O$B*H1;{hyvI2?CIBYuxsECI^SzV+N@6&Bh^4kivgnLAQ z80ON)Uyh+FQhQh?AS3XPK9{&m+^Qr7>^A&dM^l3QM(3Mz6}ekQ9Y z1Xog_xA<+7RGYQiqJr7B1~cupR{Y`_;3;xZ^KCB~>Q>oTdORQr2-U8UhKBT-#lx#B zg)>|ePbUuye2qgynx-o=A3O(iKcD#!3JOMBcE6QUB{cSNTy3pD3(bSt#-CP+ zjPN7*-fC7KKRhu;L_$!63CizQioNjjHzZK~_DfZHr`cQ7+N6$L5*fDLG@Eh?N!cod zY|gXq-IxUw>cuC_dlqQ0F(peg`gerxxBTa9JnT-B8wz><@xXhCQT_iQJ(3F)&g4#Y zACe5toUxia@D0Rwu6+tt=&FJVV78_0qTL975eMoz@0&sHFN zV``5Ot5pRs5G_JcdtJ?h9Db0r-%@CHP1)U}3xxYyqHo`QiS(^Nvv_Su?^#11X2ll3 zS)~v0x~At5C#~E5Vzq3WbZ0*ty?FcAHz8G)Le1Dy8!$#+2hLr6iImB6V?<$%5q1^Y z?YxaA6pduj<-h21|2baZFW;7wgXF3gha^-gy`xjlbj{}qvV~%wk6)W3tO|5xf$pXP z_^N^7m@e3G6>Nc<@mN(1;=0cM$iZ#^9@>?Kt85LoXPxJYEiDWQG1D~9T03`#6DrgV z6*8re2-!(*BFW=NpR*8QBFhsLBC;K(pRm%cVRukhUz!omsu`PO`a16FLS0>`D++bJ zLQbH8ac6j~5GxSvHH9tsGhDdTu#hg{PoTsq;t`a=C_b5!-Yu=D>sHjY6?F?0=~>KV zsBLfdoQ+-v8e}TsxuKmiO_!QC)BP}S1wBHSF%ff>!r4o^jALsb#m?Ss=;$b)(b@yH z2^%xhPQeqR=nr{!@m8>33$o*m>K%n2NvEcw9lfroluIu!5w^j0)7K_+i?wu3E!{vZ zT~&)8Bu8=r;br|8mOjeNxbkdg>&k01eH9L+68Jz4CPjb6sPQskz|vV8BmFifcBS(tyAncxvJNkQ|K%THcb9d3dlB}LahzJ*LgcnoDE7xW z=~%ljw_VTXyUHKi!Djrin`FWl@VrLKsPYAxv0diBRW*hC z1`cLARQ64UCEM&$WTQbmGBp)WF8YOBbKvx%ZdL~-4|r>^i>c$I@j#C!>x6E6jkL16 z*7W&2-PPL$-g4r%Qmk1ABwKC4mF0JNuY8_Ui7zsA%@;c)gmX_0eBLL~o;-#4u|rg? z`=v_e9%8!(6A-=UlNdwyvL&`e)((-fm4NOd z-PvNuxGSpb2-|`p5!6kh?Hx;dXJZN>)WUiYdS)gXq6V619ibvWT_@w5gGo`47Pm*Q zj($Ft1IifBCLY574191rb_YzLF6E@xHB1SjpGp)`UG=LtyCP^Tku-a&5?`}{o?C9c zd{3CBhC`<5PS?$f(CRSWhj9(`$>RL&5L8C>2qE` zZ^h`FLTCo3>#a@A!ViYqve%I6G30~+9(YruChj0OlS--o&wo1RRUWTsW-Z9Cvt*Zq zdR4HCg?T|y02O2#2v-{LEb2r(6cg_R75}Q>&ch3;slx6)te~2;@`B#;#{{kuLoPFs zP_QLLBj&3G%IJY_m`!U-LuD>^f#&QI+91=4vWntN^i2dM3)^?3S{(26b7$wEtiZ>I z7T^|c9X0gB8bg5L%F<<1fokLN*r$O5!ucb*33E)Olcu_?7REchBBL%g@J7AvWxOD> zw2d?D?)mSduPW_i1bH~4>xkZ2!HcQPBqsP-V=xn9bFjL`y@MyaWLi||*HL1Ab8`h; zL*1*TXz}JzOAkh|Kr#a!&#-vrA{-=$n?oC53bgME5u)wJKxgk^I>ZClPau2Zkit1( zum`%!7F6@-DUr(g?ry=7lkSK@@w2(NdPw9s?^)YR`e>6n=iXi~(9^oNfv|(TiGae> zz1TSGo(D)=q2SJE7KB0^i~Dm5?i30Vz-YUO9kP+Edb{V0r|zu7)@fbsXJ{54CFdXY7 z2HsiMLCm#t4%BX@JkIPEEMmhmU$Q11j-;eiB_+x%nh{`hrtlFF{h!|l(BEN_!8?Ws zw_&->I0ww++84g=0@h_QmM}`E(8~64Tkl3O{BsaFFUT^>i|&_;bpCQ(DH^(5|BF1? zDu7(jqmyC?WOZVwIK$i09=nlT$pp)db4TV>_S3D76d?)@bV)V>6y$z3d*tr5SnXJRWHRw<25i1kb zc7cb$uLf>ikKj-9>H_Wapxyr1NfVOnv67VXp7$!ZWZ`5tQ}i-`F2ES3goTOlcGz5 zB6g{i3zub8w~GEF;!F4Z+<(>PW=J^?Dd!rKcZZYDCAj@`y(pW zV`%^yv$dO%jtEhQ`Ld;(j#`xOigmXkG2<+8@N3G;YvTJRw>1ex0r|JB;ZEt!VZEp8 zb0MkX7|1q_7-;EMi)C|8&(Eg0lh$$5xU7gxR@~>@oG=tzqs<3(>cFd4WXdrUwO((jBQK>Y~inTDI89Y)U8lu zIEglab04xsR;Jr7$}td1*MVlU1%x_DMd%J+Qj9rZ6>k{}<@Z2)(?24{ss!MWe1pw$ zk)fk|49scPBe!JxTV$H9CNEVrn8*Cw5*F@uyzlxSWvr7^3ahCw#A%VxSsXi~{ROxf zF19Y;5*8)eLfwl2A^1;m)!{(tQzO2No&t`JERut%O>S z(Vj9t&fic)|LzH%0O-^!tU*Txw=HG!^i%R8T;zjHlOF3m$7_Av>0xkjL6Lfn%X$v! zGVu7CrVS>xhisnBW^VaFJrc>F-xb)hfs zqE!&jB>qAWAve~Y#o49P_~c7ftZ%dyI(d6~{QjrYSMQHMyn6Q<(M>wZZkJ^(Z;wxY zeD%Y-_a9!JygdDY8|7@bL;BR{O#cfE?rul@!EYO3OS8Z(!=LXknAjDJq7E0wOQU6e zeua0ufU045f0Ad8lPsfqjmkA)@|NisRW+YbdY>+9nX;oEVKApH8<%SeoWo=ut>!d! zrUvFx;tU-hRlx)0yN@4cM%BMaP2VAK&K%GBh=pMKr`Aes}~WVG%TGH-Il`e z#?~%jMM?40YVEO-2=CY|gUL&NUBztJG#lexPm^++EM~i~mgzN>h<l zlhu+$>DY@_bd+VQiHdPJUL^4l1FxCN$ZsVXHeqFG=73coI*Q;E3`B=U8G~fLj7Ef- z#DmA=|26#l|F$Z-ZUdZVrrl#QVws}+DyYGr9q!n{Xe$?-RGfJ3ovBcWz?EVQ`?w7g zzpeMKGZ+1YgzNBwV@l65L_apw@y?LDC5vE*hpPcQ&}#^E>DAcUU|J$^O~jl?(QD{% zn%Gn%l(Ej~7-VlAXPMXo7!VMt4sKkIoP^V8P6T(8Ut6qiIVtIqZRIAZE%f2gu`*TR zXpCLZb}_pVM+C>FCS`$hRsCg_AMgegxp2X|=d5HFun8tEE~z=GW47f?8x-)e64itw znxYv{Y~9>>U@$Lu$zX?RqVUzq(e!3IxE4nJ<5+&8V=A(*9t^vZq$PIoopu`^u%VTG z>R(ue2?_6q>c#V7iQn_yYIqjU_v)|gD!u~8vr)Zfpyf~n{r{2C2j5W9uPb-akm0m83pB>99{n2^cm0DM+dRG(C zF}Nzyc>orzvGCr?9Dx*gVCxvRG03)yeUncS(ElQN44Zx4soLYYK(^i8Svfz`ZO%%-Cr8b%b1 z;Yy7ojFB!}g5!8TMzyWs#2s7Qo-9W8#cWxud2XzMIc$Q<1b#JODTb1~83loim#Xd2 zbOu~ETm+Ywz>7}t{7dHA2|_`9A@AU+&1BjXtFQ09pdsbealHh!?aXRh~0YU7VA~JG$i|CLr_GjQ*fEWz z=M5uZy@!3fTdg}3+z`qTq#a1;7ERXu#iuP*zN2hx&usaV*$mK|Gt(_;bQGMIVKOGw zimGF`s*Y~eI`9I>?pCgcY7ZE6>cPQ17LAK+d?ei6n_sIYCOe&`5?aA!iKGNsRJi!! z#Sk?FJ-@af3A3P{0i!et%^u!a;e#FZG`p!S@A%%9@rSbqREU-;jS367-^3+^5jx?r z^?|9$64eJff!pCC9kzgnT^udz=-w0nJaHf(v08nn9J+T3T!sWh(pq!}b-wixghT_7 zcqrPM+CA_NR3wp`G8Cy;Ew=AJF{qH=1>Naku+yG&1dmae;6IDnu;{x$M(%UQ++zb> z*ujO{b^x_Pe6cR)+a>ts2M+QevB+O$pp+`6)$#8Xtf&FJGjcv+;_l&S>7m{+9S0x`9K8?HOb~<*J!K%xQIBY2p z8|cKG6SuUY0-t~c$4a5rv$|};ZM=3hDa0oq4E^T_Hbhn7W#+~w_oCjDZ-wxvsPL+A zV{W+a4<)`6CH@oD4inW*6ZTd3kf*I%_93BTyjNVZgrN`9N#<0DN`l)0h$W_!VwRgZ zSR~g){16(ylj1!$FPBZGO9-kpnIoV&{HH%#E@zXbc|NONpT2wXu1601KqD(Ug-hu2QqItRojwGrpyJ8e~&Vf@! zpQgbKs!XTxl0)rKPWiDR>%L4!E0`gSbOD1+Qu0J5W84%k0TeJoN9#HMTxBbYnxQ{8 zO-HzTw`N$$Su_}@Y(A4tP=38c-R_zK1U+g0H@2Fgu_fYkzR43AeS~2Z&@O=;2Qex<2_i_)Al?wdOhR#-vdX#$kA-nS(4GT!%!q7t z8jcQ7aH#AIji<%sWsx!VgKYRbCYQ1f0IC0)O{H$;&gp^^yu<4aa~y&0JT0nWRNksi z?Cu_vsCl^X_cV}#eg|j<0$N~}gJ6?b>L4^BSk&{xVM67)`F`ZD9rEE6ENDF9|HzlHdJA*Yui#fP%G;4wyM_9T&RHSLNlAGCLkvsQ^ z3dfY9TsRrT6aWe;Bg07OEEYy;<25NL)(nY!DD&|DP$Oq{*q4;<;#F@xhK7=Dx zgVs%^Y^Ru!{CPYRcYz2C^{6y}j|w)vKn~dn_rv@cO9oId5TZurwYbYwY?I@Oh6*Lp z7p8AU<4@W|D%|i&Q`Sc4EEZeMML9g$CFiuHRau(zHiG+-7+>6we@lnNzY0fL9@s9A z*%gISkynWvIhRrW+Erb4`LiWFA9(jq;eDHJc^ih4V7nj}w?JGh#L?lcp?41{Ch(xc z9`U&McbAtRcpITe$d2jzLw0$Uea3Hvm~W)ZLGYlj*Qj!MM^PZW zvw{mU7lv11x~w-^Y|U5S=-BJN6BOO#S)#C@o+xp89cO=Qsy|*Ggw9NP&?{9OO$QDF z39s*<8gw&C`uhm(z;QbS@o!p zex-MAVXjn6TkU4Y*$HKzzSV0SJJ!jc4aP6w=Z!GQ*ZBm_%|KdS1-e^|mM4$x%vrmZwd~;)&PR{nVTV;%_>B z(bQ~QKizQdW4zClr;9d+8?S({%re-PEIdv$Pw&bH)Ahg_u*#H0$@fvo_x>PY2+JcR zH;Ofk{8b=Q!RK(JvS3x;|1hjbZ}SDM?4txM~H>HZKG&<(LPg|Tm5v}E}9`zHg|8RE}ETX zk{Dhr&{C(+QplR%wnIJYxIGHx>lE^Z>f&R(8gvuaR z3f0I9R#F4!tz%}D*Dmok)Ug-sZ!|m#_q=3;?T3v}_OH!7Q@wm(|4Q1GBe!QDShMU8 zme?uu$lLlp3Bc?-n(VX?iy0akBJN4o9b>nI-o|S%llNSydphzrskqWvdYJ$li9I*W1xol^8%J z*jk0QKBJk!aV^My%C7qL%h}?mHRIXPjG+TuDVBMk43>olB%*8}*+v5%ZJ^Uf zG!wW_hz^aCh4M;a`=UJBju*)`DvxiFrjL?k;TcCD9}A@m?&lF*lO)K}7$}6~0Lg`| zy8e;SuT-@4QS5Oe#EHl(c`yss@>(bmFUK=jc&fVyh^gy5wW>ePpWFOfpGD59NLk)* zDWjr#Bb0iU_vscUO6S?P3x*mpwmEhP{Kc_I>?dpNz@Iz!h%%!0Ytf-ROnlZP==7wc zCXpnhC?i~_=Nq}MYX27_y2ZW2_O7(w9|d!-E2o!poUM6^iBOkJv6|+!nbWnN=5=_Q z*Y}_1>ZuM-H*HuBRdbe>+>p*ScHNBX+^1dcGG0jaTz#Rv(kL0XCR<26J}A_-+G5m? z>lo5-(E2z_r}bL1Ms5*}T1hAoSqqXNHJ3Z)kT%th-O;D8Svp(JK=9um5#HGu4E_sW zALL}S<%wrqy*q!~GXh>w^(c^kRFS_Q$ltHXPp+TWqvy)H+Zc7%aT#b8v_Lt6b%6hl z+@F2(v*GATN5j^|)kJ6s>h70+{*!!N^v?sY;CMCh3hFOjL39~Y-AA?UYgAsKbzNFH1*P1L zI9Cn=N7)=Y_8uQMy{I+?a#XW>DbSrjldSRXNk+?Ui&W-4!B4u$>mHj3yZXHz83{Yz zYHMH>KJ~5^$z`pl73j+uvK@bY|60xL9=yrK?A~cd3>B6^nMK=29YRv2Q`VHVR5-aT z`VF5^J&l~&M=*PQmG-=+DKZ%RaK*<|5C6o!?zWteX#ALCE|T;{{G4-9c78~w%#=x< z554@XS$?0gxT;Kv9ql(jyckz4B4W9=ialj=395-4W1ar1H0 zIMg3&l1tLNoZc-<-!Evv_fgf{eWGwYH$;DZ-23`T^YJDhFAP~-3K{MAY&OGzf|`$q z`&g*?*!sU=gjn(%{O(WBLE$-A6%HDCePHbLMzbDf@J;e%t*c4o^Ja|iT(8YwMbjmM z@0m#-h9jFqL-y-xsUimsC!!sBd0}xO_uGH^>blXG9uj0)-d9$*q(e=sFEtw>TWahI z@qiG%i!}LcK#%eoR`$>zi$v8sR7fGH`Ox)|hgrs8n7|SeP;ESolFLh&7^~*j9mA>} z(^B<47vH@=+%nKXt>JhP?{~gfT99VSv{aG=lojr#*_2c6;|BZykK&Cx_d&7So6#B{ zY4GaDf1KSc_p#m+lo@3_^e-?iwY37U%T-ElQu3OJqt%Q=aID*+oad1Z*Q6n^ZT>)v z_LFJr)`1mT+wM~5WMmebl&d7i-f;%cZ8%8=JOlBfC-ZokGFUK=mChmmMS4ajW@3Gf z{!hk@4gSvQKYC1sK^g01L}j?pU=t$JPfPnZIQ8j!>9sW1v!$x5OEwxq7bY-bezuQ`8n6es^JD% zVYjk77m;4hJ^lKyT!gL_O0!#7XB8I0^hw2R;M~tVg^5!V1z3ovf^$Hdxz_M(wrj*? z4r?+3lW78NO;ox(fPqHZp(|!c(oQ{y5J&|jy8OG?Qxe8)Jbn+i-q9jCV%k6s22CjRXzimf-ov3rZc~N&>-aD{5_H)C)VWO?1qhmw!Fi5f z7AM?uNrg)zwZL@nFfI(&b=}mX6N)8ML0RN@bC*L~XCKcSAw`3?zQwq@fnjV0psW|B z2W}58Ba zLJY;|7fe(wAxVbmQl+EC@D6Hp7f0(f!;hKB$XkPd=l{wEw%CCh15oLipx9uX6M-nE zY@{sG#aC4UqFUni3HLOi&4%)A(E*ZjXFZJbgBlHr@w1xHO~j#ofcv3;;&tuZ>o+}~ zFULz9B^NH6fRZW2{!ZZm^I84HUd{0e<6h4fvwn=W;`Au54Pno!KSfHUKZ~KL5!3>M z+dK+>k*y|Vbbg)4fh6Q6J?s^H1N8X%vl&_v)LgL~cgMT=oL*J;%*m>INEN3lazS~I zf-~;Uy7I?Prz4(a^Xoh`3@7^^I-0?1f%g0T^mh*j{ljrA$=dvh&hg~~;#_~kXv#`B zyDMHTXE4kX`c~XT+)?DwAGD*>3E{0CLx#+s(%Kq2khLfnO08!fip@|i;LtbbLH`|@ zDKsgPP)xB@$qXnfo|+TGp(l;dc}Ciwb--CIpP~kpfR5oWq`q}{XE)ph%Kx1Ul;3NC z@_Q^${`m`(|GO3_4=qq`7HASLJ|zorbMgn3$^u^`)Fxej;@Vf!Koss2c4b{|DPWN zp6vhk7vi2&QvMQZNcBo{9~ba2<9Gu5`(LE=yh4sWoE=?{>bP@I9=7tLtWDpJ6=_O2 zA=c!oR=)akbA*%}a9Q0)$pQDq3;hl;n@CF{^>fh3pPk$-*gVG$aHvdn)OOo;J8VZk zD3~Wh%~%6^+wo3qmo6`%vbL1j zL`Z3du;f^jdW8LW@ChrrKtOf!HV{?q`BGsywJ13j>}64e9L$Vd<~_3#v+0{mDlS7P zy#(Lkth^%w)x{oJeXcG~JZeelyMls%cdmQ(pZuv-tyZg+O6Q1D_pGf15QnrG`DhtL zkEiDn1yQYsvMkeY;%qeuR;I3}WPuypM-{$~4rQ`0J-5>4>w=^ii?W!vfXku!jMvR| z2x3cqz4M3Fc83*Tk2Vj>zk>f=!&8^9yIh+_NH4$tjD=&>s4l9;8PqZ8IVem)c$Les z1aw7Dqw6xaFdgpWI@;Ck9(-1Z0#Q5e?!Qd&`p;zo=JY>xnT*+3i5ltaFZQB>nRu=Z zFstzQ)r`esZ4ES=Cch*U8%0*pdiVDD=;t4QIX-%Cvb~v2l^H}K-Js=TP=4kh9_b$uN$1S;ELB>sjSMLH?04lsQAV-jQ#|kMX=0 zUCnNQNn6<9(u9hN

    ~qno~V0dZl)~K!qDKwa-G8(>@K?&fEO+s%Lw0Zshz93m)U} zdK}Diuw225lWJD%_6kn`)UNn;S=Frn5q9=nG>^IT9P!R@E)k?%X5=Twoe4+7*{Os2 zla6z*1#aflUjxm~-s6C=pN+d7$6_}?=KR>Hi##|H$T8;)1c1RHYw(a;EwAABIPNE7 z83Ns`Z}h*{|GObh`zTq$~7~XyW5uC?UZzP z%ixeKCgc-;lMq}11z`B3_8py5+$$crvv_An4CR5c6qgDEn>UNnWeo_}G@d}WR~XHf zqY2}gA7P{hqChI%A{K3J83$(NMo*C@GBN;6RYV6kmD6ZnA!XA+&7wLYP5uAuy=!+H zH+UB9B@btWWjiW22G4=Rq2^YFy?I&nHqXOgR>i0ya><#>RecQ8dH3x9tqPBcNB=bOJ!Kq|2TrHXj>W5Rj%F>BDA~@4NhW7Dt zU`Aj>cFW=#%QvPk`O&!v7(nIv3^)NS2q+CB!wcW_E6*E?*-7uldUi6l z?bsshU=ZuC6rZhFLffqp`Ah%IZe-bs?mU~UJGK7c$ z8n@&E-r>VIMRmh>-9)qZ892xF_`1E@A!o3|d;;$4c(p57!AWqCZN+lKluwH5Iq8T| zWnHYN!mcOlg=n~Qrk-D#P4Ft%0Oh5M@P=IwMwdaXie8_!+39L8hF%ZM!97SY0VD1; zlE~U?EbaP5FT{l)uFCe3wTS7TC|%o}Zpz4oNZN3$1%cT%c;tP$z9^E1mkmqBho2-> zh*8^5g^&;g3KDcBVoSI=b>bS4XyNMIdk0jtAH3i4!BMQckr;Q95}q06zlC4MbUHBU zH0h!-VnS*j=9-femYB_x=+8U1pQjCCsKki3l+4FxH|R z*x{@gUpUDh(PU;GR+%|-SQrd}mW&GaB4w!;lM%s1no{i)`Z~OV2ubKpBH_r&LNPv& zSG7^vUq~H*;#>TP}#~RmI=c|v>-Q*sXQ95ozzlE7mFz|jI?!J z;)Yklc+i`cvlKa}fw}6hP<#McfkU7L(VoxYd{I23k|%U9K6Kbmu7--$&dYDnJVtj^ zz&jlK92bcev{wJV24Q%<%Cd>KY7?TC2u|Qr%@0)H0eTUB8%SKWjJq`%p@)Yx6Ew2g zB<+KYPgxuo8fP5lEK*+$4>z=mUjo8yIP)Pf$eQ4KmC9)0J$OiDFvO`$W@}((;onaI zRF`0BFulF-M*eoUbrP!j`C+hL-VK2XFyNaI>B~N=LoP9+ak(lMUSySHzU&lwp?f_w z)3fN>wt(q^?L3zN>w9+dZI7T_uNulT)C*O-*@e{IC!e+)?W^~-o*;FEu20v`V?bT`w?>%Vay_8;C|s?qAq3&BuFXbKt08tlcuRT8?5)9hovx)E$yWNnnjj zW45m!-jdfDies?QR7!@fTwpaY!^+Y-W^iAQi1g6CN|T4X!>W4ZG!t>f>l()=6FT!S z>15)sK}td>%nTb}lOh-~kLn0!*$hQns(WZ}a@HVEv4rC|E6a3Q4LoGNipn#=Te?Ev z>KP0zg_NhqOrra2s5UiM`<2EJ%$?@C26yJ!z z5eosMCa+h;Ya^AI@j$YACcEa3djM}`!HcvG)haz(jLuA8l3`{$ za<`l7;I}^JeN^@`R9fVJh*ux}BJ`mtlzSd`L5BgZCBShiK6F_W^g#-ELVkEa$;dY! zzvp6^E-qgeXK(huf^jMFOX&zBDf>>8*@LFyKUyF%@wJ!M^dT@)#GYI{g@s5Y6>`fU2n@BQ8zpxs*9~;r+KjMKAHyD@+0BUo ztiH}%0A?)P20i=C%Z~0~1La;V$Yw3&=Imo7Dhf8((`AaH<3(l0=_%P0PukP@gmtip z+CYGx0zy(>yXLk2s=Lg|0rD(fu-}LN+u^Ai-iZZ53Q)eq5&#T$z{o+N`efDZctaaK zyT+X}h7$mO;+l^Pa4P^?Lr^wbtk}9ulv8Eu8waDX7gz8wpD)&{pRk%u_$Kh@HYC+< zrE%d^3D>w-p?i%Fl(f$QnLjcR?CKQfCRnpaq+(y$Ci5e<7tdi|=PD_JhhGDUz$8A= z4HL*rWJb$CX1M2i--Da?Eft1kt=2sXVOjz^frJff-r^;i8mKgFPx=wdl$gkXFfkm` zgpu`~@|Li+4V5qV1kybVWUdxunJuQUdfkKMiM0D)2YqC!l+ngpM$abXY_^*fYO|$! zB<~9%B!>1PB~efEdB>+~&*vnTYYCM#3))VstU}p z&t8T;ZwN~sH4G(?nXk0VkCE5MI=^0IO^H`M_4b%b1!lI|HBt+@qftg@v#V6(Kpj@* zTny5(1g=9_X@}XT+&wQTXVr39EXgnoXN3#nj+d!;nV&6->r&)-6n}7Yx|ZmnlSxnC z>r%`ak3L@;{hcIZsiR@zsx-jKgKdLk%hIDQcVZUN7)Dg|pR@OO6{K z`tu@%A}&OFRpiL^v1$-_#X$3!llnWaYdf)m!;zLy>+4|f-wUd;{!!WyidhxHfl*z$*RcI{Ou{_@`{iNpYQz zgziu;$KjasN_Lu*S311kD6L(ydR(Zs@_{_T^k#(gUKC7uB3SmXn; zF;22FU%J`F1rNA*Cg*07ehZt7rS`@pHlcVb%Y0Gzi{JGT5q#ja4o*2Ys^ZRC04x=F^4WNV1k9$!87fWo8w{oUr`FWqiaiLmVVER)5W ztb4ees5Gs$kv>*2Paq#s3=rJn+?@`ZtR!>+ai_61< z#pO_h7c>G|w^`C~mZ)Wq)eClKlZrb~IB%_lA=1$%0#IK!SkJ+N^eXy}iPgG^+>MPD zjS%Q1CCR71(B9Sc;oEesPwIDPPIqTwc667zNP(AWd@^!_bnQizpElLvvD2>iq05au z@NQA|hN1G!4bYozMI_!6!(bqjI}G(h=!roNbJJZJ_hGAFlKY?C~J%1KM_ zIu4C50L~Z$c2tenY&lf^y7Y($c3h)m*T@_#Gwl;$%A>kDGR{(Z8jMs&$+Vq8tw^9^jO~~Oh?R) z^%CG?p_2>EGV72-13G6pcS2ih&e~B-r8#ltN6jLd`OxDG9sQ-+Old-vq~JJStvY!@ zumti!2l6!t4PIq9t%2`~vZJcJpS(t@I!!A)mEWYLml78yh?$C#$B8xpknu~a^IkFp zN$IM7aL zG0piPfF%VxC9+KkZ5+id$#CdQ#TGmuPo6|d4XFGTUVj!Ho+Kyq25%rr5dd0vkxO0FrcSWD%g z+L-n^R@s`|&`|?F61HZa?v;tVPs~{-T7h>+w1)TJ`Q{=rVs9Hnw7Tw?bdkm_-ygJ? zXE9FLQ40`V%znK_^g^`+?b@N%SF&XW#=I!7Oha?g%~x1PGo3bldihcEYE>+pVi@H1 z^|GX#yA2TEARQJ42F)jAdcm86eG^yNbXuCCCN$`;IHr7F*#s4N7<7xYzS?}SS4GiO z)U$qJ%cM?Z{rK8s&ib^Wyrsjx#u+!W404F0Tzd?I(h02{BE~o0KI2FYM9eaV5zWTl zZlg+t(Zb|#?KPoA9lF)mh$7tOy=|+0s%{pmvoX*5##ZT(CEsqzxSRLUAA51@;t&Yrl^9qeSqlALrLZzp!Et;aInoh@2h4p045v_=x*?R*7`GB4))hGBPXIF~IY zS~j7RVvO_@&Ot0c>J|Z&07*12uB~KntIgIkcPq1eNtgIwFM_v-wAI^nPv$8Jn9AZZPYb%xx7kxJnrqc{xNzFI78&+_zv2nzEYMgtJg zy`$g=Q8}@sVqJ|d9Rd)!k+>2~l_`#FPHiJtyV_v&W=jds@4$R1W}QS>rq;KFguSbGoFWK%=Yp5Y|S z$@gYN&mJW8Y3|!;qIXXt8HtQwdzv_JT8D09OLDRBmL+~had9pRn+;TJf*dhVDJa~e zGR>Dxv+0O41y_e8Ja>2TAQst0#P}>aNK^35k2K=QtA9JG>-ckR{!4>5SgQ=*0-A%Yj z?aMCBcIrxT%u48p*+F^m(bbK%K$xMdPNvd{%{b+oD7Y~39JZOQr>oqkmK4Xu`Mo^F zlX@Ev)B18XkyA@b>s`X6oTlmH$0iCWTvflKnw4n1W)TkR7bjb5JIiG{NzfBS5Vmx> z!AXr-0fIp$4XUk&E{n$<&WG%lnl2D54xccT=Rv)h~D2{j(7st@KoPUQ&Wf7hEQe~VKaIxwo`-gn z*l(LeV>pJrJ(nT*8JQ=dLaoDM^v6I)CXgjpxGY_>K0UH|-A;;{uF=6qWib&!VNQk9Xr^(TM^s@Tb{jC`W9&LN5#Em_!n>ha7@Dkq$9r(pGq%OG|M+9`yt2<>;cdt8 zLO@TWI71Mt0bHy(p^%&xrz9S!EXu}1>mt9(L>4CcXwo{FvN4$Gfqc%gr1Qh49lEwZ zm3XW{((SzHFa~q-Es*%gC6$cll8%Q2dC`8dPPA9UT%*Ot*F$y*KT>H^=rOI5k%+8G zn40<_pQ0uma%yq>)4}dVn;u1)nvga%j&1#=Kh6`LMZ(_0L9&t%u9po)J2LmYZ?ZuF z5{_L9!$u?`*ZJ`!R_N;<_W1P=en6+6oCh}Y0S#tya}ImGNRARGcj_;3F#%o>0GX(j zi?0ZvS1430v#VF@nNS7`h*-Yw)9E>R@uJRN|8xZ0V^y?VHE&D$FJ8K3^yd7GTA3{iI@^4PKR&jm8GJFE|XibHkGi4Nu|%ykeS3 zikS+QWP8Pih(r-gOO1;m2o00;TOCQD!eK2s;chckzJxok@GY0mAcw8Th97&{q@T8B zc*&0tJqR%y3KBx=w!sDvlaL*y(KFGTdG+H0lrnH*)3eEl4kOiX28&|R?HxBSTzzG3 zvuE|?dC;^xxBaSGysLdvOTA=1>Q?!b!V>q5`IY+j8uR#I)y2=@y~(O`Z}jltL;UTf z@4=^!%u|=(1|NTlk6p4Id_?g4bUyI-69C&#F6HwNG4<0eGC$cgN0PoXmi}pA8%X;* zRbk=!C{#!&Rx;)5r{Dhg_aD61{K&-!n0zrKSB}pW;xl^3lTCF>LIM6kF~(gn)RU2& z_y~md!+J%jQmqrMXnac_=rZHMj9B!e$-!M^vaYCzk+*X(4-?mmoDG-$vp->9InW91#H)OYz&OrPKExZ3=8tS9+BPPG zLV*is#&mft7c_*Eh`Ka_5M zAt40*AaO(&STNq#u?mBoei*SHip5ruLSfMHRuYNrVk>Ftl7y>k=BDE0T`s3+u9EH* z`W|1g?<&S+*%O5MOBk;?E_>jd@3`{radMN4+M(-mTL9Zu*K!bCkN}1XOpj&qW4N-u+&E+##Vl=WOP37@pouA)~?SZX%9yRYsG@8FT z>_ihmhkt?>Ow~NwIHAZ{QQ)!e)U>csJ34Eho;TXr8*K2w$|@=&ff%KV&p7ObdLT<~ zY-1+W~C2r0bTi8UUwMy6Z!gWAOdy`3!~ zOxk0T#;OIkonD)Oew?`a3_gzE2sf=xq#-H;vj52W{~-g0bJDd2M35s;HHjd|5c#b- zusA{-dh9@)!0PsKp-=6p^JZB-y|@5sMmwWZ2;y?u4Lr3dUGLzko|}}L76EHiEH**z z4HNY?&j;aAwKgD8D&xcj)Z8txbfRv@?hu#-kZpxz{*VSQ^0{+wpf+DalUKe_yJb(Q z+nMaCPbkfHHb9PjDNT8xrq@sYL}{GP-pzZ3hlrEUFM%0YS?GHv*8;CNr&|C__yL{x zmM<6SIA2xWaASJMHKxSB`0kA!9X9Fu%w2nLboA&8tKai4GI;m-kaT;N{-b*C$SCq$ zyN3@c2m2?79|TtuFg48=IC)>;aqbqlZHtw4uEazdly8G&8I{IR<>#7h&Xlx(nABVMV4Tt$Erak z4Jy~5N*yt~Fjo;hbg%%Rh*vegsk1k(-EN#kYn=S?q`j)zn2;RMJb z%A_~xdW-rb$R@pSoKQ%$Oe6KzVfid5-y{qDQ7kGrc z(g(ITBcGRlev%tBBZnSCROknxzRuDvzS~}Npk4I*I8ciW>e5ogq0`C?J609g^Uf5x z6*(vmk`C=k2Q@(cunO6(f>hAxPDqmy0QuA-GSS_$3t( zBRL8a#Ux$KI-D)16`8l@=xJVNtDj5`za9w$l+KC@kpLJVw=$4YBivYSrkEqHUeBJ_9Vo%R4lao&n0K7z+`YJ zBdMXWC}b(+M&V;gdxY{qA@RfKpeJS`j8e|JFLZoU@#`t)pq@Ed`2)XK8qc zmt(3MdO(TPmak1K|9jL;>#w-n{@z4s{I&^hs7tKIn4rXH9q^?*EXP%fwdG3*mrOA@bga^v=BV&hYxX_1Feogm4?C@bRWV& z45tA6J8=pRKS)lYjy#N53)CvjS0m?;pz>~qJY_w*zHj-J0ytR8`G6tRgNEiTN}BZa z@D~b^qViiz zr{d~P^v^&3p(E{fUN7iMe-RLG!X348X7-);I(-mGxC`faKX|MrahH$qu;#`SzCZa8 z)r=%Z8zPS!T6m+{mjQQ29kX;bOBc~@{3_CkC@|%JkM)ZvoT+USpfhw3*$E7Jn)*gk zsec6*<1-L-qgLSqeh+MqYZ$vI-CK5La2UQB1q(dbIGR?~URHf4CI2z1g&a?jCmE5m zN&1=`XFEX{*(6^{8{#(ow@z{8p7YHZ4n=D=is;^Un8WsYcykHn6YH(#ZT~i9Ip%C5SF z^tetfftwsM=Nluy#H!Mz_2`4u82=M$4mXw!*1K@a3c|YUuEm7CP2Z)iusRF@0QxX z$;SzoVB+kV3%mG#1hM6CtHF&HJj9Yh^{0NBz~9g_jD3quacb+x-1CBMdrcsIuYstx zgV@BXCReeCn`kZN-;nT_Qp#%L3Rtw???^-ZewE)ZQYHD8b(Y^tQDp(rZLg}VR#eLS z3iR%_62U_Oo-^ZBX2L9+^o>W~GUIPL{_^tMmm`dUk&>W981j`Q9V!=?twZ!Urk2cN z!MXM*#0yU06O+$$2IMiDdi&VY=N8%b>0U`i=T7 zINXifv8ACGy5iKEpxs$H`395RQm@&fP;&|9^Ic0Y->JrNqy$DNHJ-V2p__V*Wv?Bl z6W-LzCD%eJOa{?NS*bId<1$)TYSU0j*@Qrw?(FEplR75fpIeko)`Pg+;)}}FM$Y}( z$eV^D#2DX>``j~^njas{u0fkv%k-4IOaR z<{J$IK_DN6&>mo8t_Qv6S7E5#HwrJRSnX{OC#n{lcsG2g{uTI8Me*Se-Y(gkk{CLj zWV>oW2)cn6-w=1>GNa8mJzwXnGLylEaY8cch6%`gH@8|@ZfY0BL0yvC;G;ivM#!oW zAyKILqlSwW;bP@*v5MnjWpJ?)T&y$<1cA6%F)mgb7hM_dIhEm7`cJ-J@xrltS$4fc z(`R0+5BS{=*|A>Dlo3Gs!vd)UNEHJ4y;f}Y|FW9fzu{fAi4@&7JS_gh<@&lJQK-tz zb$Gv1Tt)<5Rfi`chQKo)jZQKY;B8~N<5jSKtJT2vUjJTuy{Tm-v}cd7u>QKz-2cC) zixmO_jSn zYOdBzkvcQ`Y=+OOw))-Yu739)C$rP0`rYsFYT2!&zJH6k`=ZEC>G0;K zgsm#Mqk9eud>k)Gs=I$gS;BgCB;8*8JDBP34KuA8X6l~9o;T05(lf2Xnf~51Q}3rc z1uh_qAN3Ip_l2RUR~A=C#OsOA`nH#;E4~Ty2vzlQD>H6I*9t?ZVM`Smx3c4!US`}X zZ%DjDnJJ}gc%)jmT(W* zq^@C0H*8w!OWk?QK0>!3>DgS`jXy&%O@i)C|46yh=IDIW>9|SuJ5hreWkobmih-nf zvq;3gUmNiq>L4~0BXmm_hR~b&!2#$Tp~G6B_w=GmA_*psCgTFQj`gw=Nij|((~+gP zM+MN6ba}BxMiEZZRkkc84?blXaf!_&!7k^@?$k;KQED-)V?$*VFvaS+Ov?NMvpJ5_ zHB0c6&w@Ci-d;Q54)(K)SJ{$hcUrz8RPZ zzp{u}_lU0!v_dZNu0`}H_KWBUKacnRNu@7tQTF2fmb`ekau;n`HtIy+*d=(gG%*mb z$owIK)s+^kyrK=1lh*O%&dNgK^s&1t!`=}#+A+`omJ>)0LDZxqACd@B}niuyBtbxV?HIbvl^Nk1BfT@g>$2;u0$1C4%t4~}rq9c#;QVRKq&hStko@>rz#Ama0unKZm{>bu+ZnFAjN_jR!T z&H|u*Ic1*OkW{2<*<=*Jic&>;zh9YG-tOaF!LU9_wVZi5K5Q+KhgC#Mth_Se7 zv%WTZ>c3ySbl=RULP1+3x_S_`{>VGRymNGQ?nm;wsOn?i;3Dn3zGNCSFNW&Hcyd?| z!d6;p;^9zYn;Z^Ay>l|xaom+|QJEIiY4|~d4Q*OWF!g}+J_G^gVE-H%uG%%Mwt^z9 zjRRFFQ129p?O`&U`Xgp6KL21(y$#7b`nDFCd-UyXV{@U$tz&DU&$u4zYBs7CA`8tU zVXdZlEwmMyd%>;JuomEovxo6P4R;xk+I%|6n3~pa4NKp$C_$xxhd=vI&TR) zg%-8Y)1yhy;$6Z|X>Yd%pdL+rNEdzx>ZuRJk1gFH!1Uvz1OiPY$}_^0Xl~?FFB0@KqEdh5CGXz?V)c&wi;8C1(&`WHGv(hybXN!YE=P@d^xe1B?j7G z0rR`Vs;pr{lCxrU2{S~vl~rY8GHYKuN%^nH=<6k9^s+MkGx96e@<2Kd>fZlVi5FQ5 z?70+TopkY{?(6EBIb{t=UB*Ssd%wz3%JTn5dm2ZBPJeVL(X{!g$L%OK_Ewo4#gb%m z4>MIaAAEfK?2jI>nm|}j0T@5PHof1Y!w)|0_Gr=?d3!X8M!%A96YD6iKE&8tCS^J# zQ`Xi5-ByuTVnhBT@=6TKCPcROo?l2fWh5TewDTiUBhje3p^Hb2#G;ypel%(=64f-* zv8Z7js$ClAQyhsx4F;^#fK}6g(x_?}P{*JmSV7p4htvc0M#hw1Wzf(*H&LU}R(_*t zKF@*%_((9p4^^!pg$`GJhfq}$jVa<{TG2f!lPQmF%z{P{$&xk zvqivP-B$C!H-haAaLf*xLvaTqg8}hQY3l!{mc7AT{JO?L=licQ+ zf~QuCdGy6+-W#J|JoF!na&vf8CxrO;lL%=G)R&Jab={+fAF3=)OTMEt84y$)JHZK!cDKQXw;4=ygVS~Peph)fo>GkE%-!;t*?@H<;LuH;2hrZU zCpxo#v(SI*JZG$b-IBn}ZG$5vUagjT?Lhphmv2Yx$K94dO`n=wGpJqX6U@og_FXl6 zYW%Pn`bQu38$S5(U;S-u+2LB-7-T?V_TFg=-ObIAB~?k|>FwwwX7S}~SvLE5SS`KG zvLw40b?C?CYPBdw2M5>J*Mn?7o2zP3p@6k`y~r^OQ+^I}!_m8R17{nOx8R<>DyCQyG{vMd$*L%lefX<_D|(hq z;NP1``o+M`#aRQ~fum{MaN=v+1;R-LrS-SD~uRCym zw(#9@k}XX&3mc-wWUE*;MDsTeg)*)KR~3yJ?UJ6}=MMgkJd@F*!d z<7qLbni(2YxgL+RjPmIa0IbkKbuqG>ayX5zF_+O8{yAS3GyaHy0^q@d%M|ZWxI(Y; z67IRdxHv#IVIO|3G1i!F$o=8ra39caA8S^F45mOF>`G}IfuXOu&dZFo7!+{to}D&d zOtrSR-SlO_1$^#wBK9AC8XgMo$z6}dVm+Py(~syKDe@MFcu(*0$ro*AwTRGGT?oc)w%f$tN;?-H1vb|L4cwHW}wfyr6ZM|eH*Ew@FEv7fERi+|&UC{rrE z5)+J>EropP>CUt3XK)hP0bhQ+kN}cmI&tsh$BUX%-DN6M?|MxJud%Gu#~&y4r}FXY z>*1lm@TOp4)So&S&V!2PfwhzwoR><>p9J(J6~EM-0rc;7F1TtMV8Jq*0khie#Vfk| zNP|c6C|WC(&gr8M^_=GAk6g%JpE|$9y*a3o4)Em?N%DmLZZN73B25_vh)dNttnzLj z9$9<*Eh@otIL>sDEkh4+en>Fwxnir;4oQ@+IN1>gbu)M1odZdR6#3Hb6-C|xg5w{x zgkU0y8qoYx=Ov|Fl8+-P6-%zwt%*^PQ1jfL9VAhc!E5&*7~zL>LF?e1HF`5k7b<7Q zbc!fTPM$B!#Q#)zh_8OBr&eV_*)~^$Xc5|cjLt}W)#v5u3k)o=8)VWLu$opA4ZET) z9$Kw@b5yb3o>;k4hRfl`uShM?ReN@rJOC*76K_`aM0&-J?+ugBood`Y#{f0Tm zrg2;lH(+0%iwI(l4a4#?crXk&h=8a0q}$sHjVoNIlZmNLEfZuoKt`WV7niA*$IlJ} z$aF#0(%ij1;*~XVO%_o z4Bf9d&iy#dJoS+!k=?6akNnp1`8vn~g#aF0)%sq+d=6uMTz)GGrN{0=wM0`1`LY=3 zExNqbIj-<9xyPMO&w^0-uFNCBWrML^7(ZSdbaJU0F(%ZhQ2^OlKVeMJ&CkE(FLonD zimUVY))f&!a)3c_iniDk%5sP}eR4g^*+<-|XNc7U*zBMcj7v$aF%>bf zs=XD%MsV0UsRGZn-X|Xc0jyVB##Bn!ul9z&X(a#pD*Ij|q6OuZDJjn6#NWN(2rO2E zD_OGO@nRK8;_1RY2iupOE07BbG9FQQbJ_)qmY}v>+LpMn(6lBw_EtfqM-R~e|L9s? z5E$w+m0AA`mSR6i2Uo|m$Tm)4KAx^8tXnD9Gi1O3$wjANm^4mCOI{vbkT7TWwuC{>5925#hke35t=CR*A1M6BU>>(!W^^k zaxrj`teG8olAHi~3q2gwYPRzghMjs*`yx9FLVNG9-aPK&l zN|C_y>=gN&^TREf8qEfWoy~;Uc^l+DYK7+?xIVY`yJ)Gb+O$_p zs;Hvzk8rk43fxtJ)eslyg%q>El;wUGY$BQPaT~eBGY*1d;)r7O)+3O_iRG4o5G3h2 zrp7}O2MhqE!@5RG9VTQGes<0AogPLVG`9!oR z+{FBH??F%@lK&qhf2sp)B$(^8x}CIRNUCbU3PRJ$V;KGMFS0o)lfR=5*@Rw|UDe3T zlSOVs=i)g{>0DWM3hJ_qCoKBJXpKpX+(2gYhIr z(X3!%>1%8b0e?~NRHv3V@r1H**mZ!E{K7Fb4sT8ZJoz{MQZ^zo9iw1(Js&*SHt9Nd zbmI!p6Maa1+G34231!(c@5&54>DL!Cs)wAMQHA+@Rc6!kWQzJQ)^9-vQfmM~0Sv<` z7>g`jnac6bSx!z9e6CSD=#*>Gb4Rm#k(aB6#A@`O1t0+V|Gawno$S88sq0>VDq8=c`7c5j=DH zON^`~ee$Otsy=yJX~5k=6c&UlKAY&=+MaltEt&V_z_Cxs94v;BX*3>TE~#x0se~W1bD<=6pZgi z*Xi3~qmb-$W1s?Ox;U(xda$T}b9I~YK8B|bk5>IC!W9;xt#uI#Ul=!{8WdEPcG_b- z8(dw22qxxnKHTh&>0$v4DIM1zU~_W{`1_T$y=^w@^Nlk~4_bg=bT-i1AB$Bsf^T}8 ziPp!ZHv=jP6cG6anl)CqTSQk`JZBBE;t>pA~Bo}w5>5XwEtfCSPrI&Oe$m!F@* zq~TOP{pmRg+ZP3agK;h}?><$_m{zLc0xsukAX^CQRe^*bRvwe8=a?8hE9adRWqzOK zB`n~i&w1f7Z93pmI=*z51$u)Bv)012*>CSIRuOYOtCW-$WDN-PBYCKqnxLc}R#hr+ zy}3m>5?!crQG=02UP^cO?p&O0A&hm?O zu`c(V)&@;HhC>1JKcocQ1Ks~IJ;_;%VX}CdQJ+pG?6l5UNp60&PA2qQtXIy;vC79% zLSQ92OVTgk+1Te`1FRxJH6uD@Cn@+G!x{RhXRC)6Njd>Zk%u!nOBr^SuEv*CQS;JU zf|47s6Kcz;>=M~{3|Ut(e;A&1c_hgyA24r&^I--w_c zc_;yWhFa0?RdPQW9+J}GCzy7Q*wlUKxMB zPM;h;_+JNoR|M5dJ&!Wid_8-`GtTV5{zp7WI{()39Rq#qNpwZnuCmK|TzTs-JpAvv z5dISQ7A?I5fvrmt#YrY$Gi8+Ee2$yi^?II|hPp3O9XkD&z-iKc(b}TJ1VTG8>4$CM z1nUt39P$+r(?jc%bEQ2PovT{8dbtpRLOHCNr`>#&&0=5Ye;l@Q-aqj*3_u-way0=k z{qaW=14$I^iw~8ev0p6dsL{K3H$4}&+%*S>Ys)68cn=mXUWXm|@zaJ$NvBAfIJ6^0 zaz@w`9|&7~DqT~0BJV=Opl;>8lXa^l2(ej;>HBL*JzOpi`~KxT*5oyb?J`O{&j!Bn zy~puMOX`dReD_*UFvyU>u~0$I3z~qJ*FGg`vGEjn>NJHaI&~~M zYLtO_7&H$syj6$SKMDZyAvC?J~V)7lY;w6K-R= zY_pt}R~P7>_V-mjE#n!4pv7xcQ@>tg8<*R1OK=SNTSN;dgw+z7kERM{Tjbf!E?+Jq z1aLcLmpb=7KP^lwq0?zYgMUX8k}+Ij7(Vfk{Iq)>i5`<#^$n-j8)WJD(mDB#C!ri? zMu9;l4<-1FeB67!D=8P0QDtPTJ%}=BaGe2$iEmzQ`rinrN5 zy`ARp&lByXLSIe-Ot&K~(T0d_k;u$ak-d(dxb5RFYs~s1-h{Pf^#lB<6plbyQ((_W!v~;m~q!zmwWn zCnu-<66-gAdDu@jUp+o-Y)eg{K~vknze^1FVy_b4;V_~{f0DN$i&aD2 zbmglb_gZV&EwlslFKW@4wc@r)x6)ER-Bc1T*b@-g-4b|1)cp}DV!bXYzL#u3(C)CY zKmlJ>jk@&XXgq;47g)b?DK}MXZm|G;_!gU4J~1YyVS9c4*T#+}=UCUY@7!M8fBt#=ZdkH>n_6 zxk49a0AIHGc;fwsjse_9;{HnV=>&lpi+P}90dVcO)#yXLjD7)}hwp7=th(<-WZ(=a z-irK4d1yi{8k$DI8WUnQ6RdO7k*+c5t^%?)wPBH9sui3ekz%6-FfIEDTv1HSS7@a` zOBrDDEC!g!x2>}##gZ|JMt)9Es6H~R(lmz&!=heXkaIWrS<+PE^A)a&Ts1h=2TdL! z&Wbg0Y71!8y5`?qiCR8Ff;8nMZEj?+(-aX5{9vXE5lV)g=6zG?;oyO)hwprdPU5;GYB zb>wn29XCzG*9F`5y{7dycC$jYd> zV66s~CkGl`*wQZS(LGtuW)**E8%WlDz^qU){=J<^!9~FbZC#n!notbHHPCZ=>pa^G zd}zpUT^84Z#dLz7v_Zzw=F?@CPT&K8KXp}W$bidsX!`T$Td7Hoa!dv+T!LcD+p2lq z8VkaCcANJ!$o_R=0%w#tK_&hY<7Oo4Q2*yOiv!k5&OaNw+-S!BsGl4*a0)k#XG(oL zc|oB!i?<-`%=dsCzsRy~+`k@BO0tH-rDzV{N*735i2NIE9jVdMIWrsO`V5IpzX=#q zX1+gA;|IqY;hmpv|1RfXhJI(k^YU%J@SnGxVyemgd|r;1`59Ts;EJ(7e@-X)x_k!v zCX6A9NKG5!5uk5~>;4V7kWKO+(TvXhq&tL*%?-Lcyx$RCrQr>44{w*azPA1<9Pgxw zvWGj?6fhYEsu`D%mQRR-^&%#P62k~y&<$dc0t7laIAkvzxnu|J z&_QTVr%$K(#e9_1WyB7q*dtG6(yDgaVTn&!(@oAuaCRYSJmhHOk*|B9#r|_f;h*2^ zGzc~I2Wkh7xcMxd<Z|;ZYzs_ODc%C&mL(vN{UJEI}OjvV}8@gMj4V`f7;;dA)r09WBCeuGZOkmSAECa4{@QE$*tYL9l5qSxZ*~-o*Q;)JwQ9QN|7#>! z?+e>F5SaO(0Lqom)2Uewv!=~ASh&xkdFgCBDtF%PU3a`~*JC^1pm*9L(&%H-wzzU# z|D9K-+fE&JnDrKIS)5_pj>g}hzNt;S!$LO+yyzuPx-qot7Rwde68A}EHAtSHYq{Js z$yZqTwF&q&sp-&Rep*?b1uKh4jDufjFF_ISyJ?0&%DPZ&3AlqZXo5aV7iYyrRDx&d zEH}RxBrlf<(9_FwQHq(S qP^t8al>(@&(P>2-&q?Bl&7x7O)4GUp3 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 diff --git a/static/babybuddy/js/graph.js b/static/babybuddy/js/graph.js index eae015be..6e74d25a 100644 --- a/static/babybuddy/js/graph.js +++ b/static/babybuddy/js/graph.js @@ -1,6 +1,6 @@ /** -* plotly.js (cartesian) v1.41.3 -* Copyright 2012-2018, Plotly, Inc. +* plotly.js (cartesian) v1.44.4 +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * Licensed under the MIT license */ @@ -38,21 +38,23 @@ var rules = { "X .cursor-n-resize": "cursor:n-resize;", "X .cursor-ne-resize": "cursor:ne-resize;", "X .cursor-grab": "cursor:-webkit-grab;cursor:grab;", - "X .modebar": "position:absolute;top:2px;right:2px;z-index:1001;background:rgba(255,255,255,0.7);", - "X .modebar--hover": "opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;", - "X:hover .modebar--hover": "opacity:1;", + "X .modebar": "position:absolute;top:2px;right:2px;z-index:1001;", + "X .ease-bg": "-webkit-transition:background-color 0.3s ease 0s;-moz-transition:background-color 0.3s ease 0s;-ms-transition:background-color 0.3s ease 0s;-o-transition:background-color 0.3s ease 0s;transition:background-color 0.3s ease 0s;", + "X .modebar--hover>:not(.watermark)": "opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;", + "X:hover .modebar--hover .modebar-group": "opacity:1;", "X .modebar-group": "float:left;display:inline-block;box-sizing:border-box;margin-left:8px;position:relative;vertical-align:middle;white-space:nowrap;", - "X .modebar-group:first-child": "margin-left:0px;", - "X .modebar-btn": "position:relative;font-size:16px;padding:3px 4px;cursor:pointer;line-height:normal;box-sizing:border-box;", + "X .modebar-btn": "position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;", "X .modebar-btn svg": "position:relative;top:2px;", - "X .modebar-btn path": "fill:rgba(0,31,95,0.3);", - "X .modebar-btn.active path,X .modebar-btn:hover path": "fill:rgba(0,22,72,0.5);", - "X .modebar-btn.modebar-btn--logo": "padding:3px 1px;", - "X .modebar-btn.modebar-btn--logo path": "fill:#447adb !important;", + "X .modebar.vertical": "display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;", + "X .modebar.vertical svg": "top:-1px;", + "X .modebar.vertical .modebar-group": "display:block;float:none;margin-left:0px;margin-bottom:8px;", + "X .modebar.vertical .modebar-group .modebar-btn": "display:block;text-align:center;", "X [data-title]:before,X [data-title]:after": "position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;", "X [data-title]:hover:before,X [data-title]:hover:after": "display:block;opacity:1;", "X [data-title]:before": "content:'';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;", "X [data-title]:after": "content:attr(data-title);background:#69738a;color:white;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;", + "X .vertical [data-title]:before,X .vertical [data-title]:after": "top:0%;right:200%;", + "X .vertical [data-title]:before": "border:6px solid transparent;border-left-color:#69738a;margin-top:8px;margin-right:-30px;", "X .select-outline": "fill:none;stroke-width:1;shape-rendering:crispEdges;", "X .select-outline-1": "stroke:white;", "X .select-outline-2": "stroke:black;stroke-dasharray:2px 2px;", @@ -70,7 +72,7 @@ for(var selector in rules) { Lib.addStyleRule(fullSelector, rules[selector]); } -},{"../src/lib":169}],2:[function(_dereq_,module,exports){ +},{"../src/lib":168}],2:[function(_dereq_,module,exports){ 'use strict'; module.exports = { @@ -105,13 +107,13 @@ module.exports = { 'transform': 'matrix(1 0 0 -1 0 850)' }, 'zoom_plus': { - 'width': 1000, + 'width': 875, 'height': 1000, 'path': 'm1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z', 'transform': 'matrix(1 0 0 -1 0 850)' }, 'zoom_minus': { - 'width': 1000, + 'width': 875, 'height': 1000, 'path': 'm0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z', 'transform': 'matrix(1 0 0 -1 0 850)' @@ -193,12 +195,16 @@ module.exports = { 'height': 1000, 'path': 'M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z', 'transform': 'matrix(1.5 0 0 -1.5 0 850)' + }, + 'newplotlylogo': { + 'name': 'newplotlylogo', + 'svg': 'plotly-logomark' } }; },{}],3:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -211,7 +217,7 @@ module.exports = _dereq_('../src/traces/bar'); },{"../src/traces/bar":274}],4:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -224,7 +230,7 @@ module.exports = _dereq_('../src/traces/box'); },{"../src/traces/box":288}],5:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -237,7 +243,7 @@ module.exports = _dereq_('../src/traces/contour'); },{"../src/traces/contour":308}],6:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -248,9 +254,9 @@ module.exports = _dereq_('../src/traces/contour'); module.exports = _dereq_('../src/core'); -},{"../src/core":153}],7:[function(_dereq_,module,exports){ +},{"../src/core":151}],7:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -263,7 +269,7 @@ module.exports = _dereq_('../src/traces/heatmap'); },{"../src/traces/heatmap":324}],8:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -276,7 +282,7 @@ module.exports = _dereq_('../src/traces/histogram'); },{"../src/traces/histogram":342}],9:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -287,9 +293,9 @@ module.exports = _dereq_('../src/traces/histogram'); module.exports = _dereq_('../src/traces/histogram2d'); -},{"../src/traces/histogram2d":348}],10:[function(_dereq_,module,exports){ +},{"../src/traces/histogram2d":349}],10:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -300,9 +306,9 @@ module.exports = _dereq_('../src/traces/histogram2d'); module.exports = _dereq_('../src/traces/histogram2dcontour'); -},{"../src/traces/histogram2dcontour":352}],11:[function(_dereq_,module,exports){ +},{"../src/traces/histogram2dcontour":353}],11:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -330,7 +336,7 @@ module.exports = Plotly; },{"./bar":3,"./box":4,"./contour":5,"./core":6,"./heatmap":7,"./histogram":8,"./histogram2d":9,"./histogram2dcontour":10,"./pie":12,"./scatterternary":13,"./violin":14}],12:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -341,9 +347,9 @@ module.exports = Plotly; module.exports = _dereq_('../src/traces/pie'); -},{"../src/traces/pie":359}],13:[function(_dereq_,module,exports){ +},{"../src/traces/pie":360}],13:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -354,9 +360,9 @@ module.exports = _dereq_('../src/traces/pie'); module.exports = _dereq_('../src/traces/scatterternary'); -},{"../src/traces/scatterternary":398}],14:[function(_dereq_,module,exports){ +},{"../src/traces/scatterternary":399}],14:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -367,7 +373,7 @@ module.exports = _dereq_('../src/traces/scatterternary'); module.exports = _dereq_('../src/traces/violin'); -},{"../src/traces/violin":406}],15:[function(_dereq_,module,exports){ +},{"../src/traces/violin":407}],15:[function(_dereq_,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -11604,7 +11610,7 @@ return Promise; }))); }).call(this,_dereq_('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":32}],18:[function(_dereq_,module,exports){ +},{"_process":33}],18:[function(_dereq_,module,exports){ /** * inspired by is-number * but significantly simplified and sped up by ignoring number and string constructors @@ -11615,38 +11621,7 @@ return Promise; 'use strict'; -/** - * Is this string all whitespace? - * This solution kind of makes my brain hurt, but it's significantly faster - * than !str.trim() or any other solution I could find. - * - * whitespace codes from: http://en.wikipedia.org/wiki/Whitespace_character - * and verified with: - * - * for(var i = 0; i < 65536; i++) { - * var s = String.fromCharCode(i); - * if(+s===0 && !s.trim()) console.log(i, s); - * } - * - * which counts a couple of these as *not* whitespace, but finds nothing else - * that *is* whitespace. Note that charCodeAt stops at 16 bits, but it appears - * that there are no whitespace characters above this, and code points above - * this do not map onto white space characters. - */ -function allBlankCharCodes(str){ - var l = str.length, - a; - for(var i = 0; i < l; i++) { - a = str.charCodeAt(i); - if((a < 9 || a > 13) && (a !== 32) && (a !== 133) && (a !== 160) && - (a !== 5760) && (a !== 6158) && (a < 8192 || a > 8205) && - (a !== 8232) && (a !== 8233) && (a !== 8239) && (a !== 8287) && - (a !== 8288) && (a !== 12288) && (a !== 65279)) { - return false; - } - } - return true; -} +var allBlankCharCodes = _dereq_('is-string-blank'); module.exports = function(n) { var type = typeof n; @@ -11661,7 +11636,7 @@ module.exports = function(n) { return n - n < 1; }; -},{}],19:[function(_dereq_,module,exports){ +},{"is-string-blank":23}],19:[function(_dereq_,module,exports){ module.exports = fromQuat; /** @@ -11755,6 +11730,43 @@ module.exports = isBrowser && detect() },{"is-browser":22}],22:[function(_dereq_,module,exports){ module.exports = true; },{}],23:[function(_dereq_,module,exports){ +'use strict'; + +/** + * Is this string all whitespace? + * This solution kind of makes my brain hurt, but it's significantly faster + * than !str.trim() or any other solution I could find. + * + * whitespace codes from: http://en.wikipedia.org/wiki/Whitespace_character + * and verified with: + * + * for(var i = 0; i < 65536; i++) { + * var s = String.fromCharCode(i); + * if(+s===0 && !s.trim()) console.log(i, s); + * } + * + * which counts a couple of these as *not* whitespace, but finds nothing else + * that *is* whitespace. Note that charCodeAt stops at 16 bits, but it appears + * that there are no whitespace characters above this, and code points above + * this do not map onto white space characters. + */ + +module.exports = function(str){ + var l = str.length, + a; + for(var i = 0; i < l; i++) { + a = str.charCodeAt(i); + if((a < 9 || a > 13) && (a !== 32) && (a !== 133) && (a !== 160) && + (a !== 5760) && (a !== 6158) && (a < 8192 || a > 8205) && + (a !== 8232) && (a !== 8233) && (a !== 8239) && (a !== 8287) && + (a !== 8288) && (a !== 12288) && (a !== 65279)) { + return false; + } + } + return true; +} + +},{}],24:[function(_dereq_,module,exports){ var rootPosition = { left: 0, top: 0 } module.exports = mouseEventOffset @@ -11781,7 +11793,7 @@ function getBoundingClientOffset (element) { } } -},{}],24:[function(_dereq_,module,exports){ +},{}],25:[function(_dereq_,module,exports){ /* * @copyright 2016 Sean Connelly (@voidqk), http://syntheti.cc * @license MIT @@ -11909,7 +11921,7 @@ if (typeof window === 'object') module.exports = PolyBool; -},{"./lib/build-log":25,"./lib/epsilon":26,"./lib/geojson":27,"./lib/intersecter":28,"./lib/segment-chainer":30,"./lib/segment-selector":31}],25:[function(_dereq_,module,exports){ +},{"./lib/build-log":26,"./lib/epsilon":27,"./lib/geojson":28,"./lib/intersecter":29,"./lib/segment-chainer":31,"./lib/segment-selector":32}],26:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -12024,7 +12036,7 @@ function BuildLog(){ module.exports = BuildLog; -},{}],26:[function(_dereq_,module,exports){ +},{}],27:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -12196,7 +12208,7 @@ function Epsilon(eps){ module.exports = Epsilon; -},{}],27:[function(_dereq_,module,exports){ +},{}],28:[function(_dereq_,module,exports){ // (c) Copyright 2017, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -12386,7 +12398,7 @@ var GeoJSON = { module.exports = GeoJSON; -},{}],28:[function(_dereq_,module,exports){ +},{}],29:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -12893,7 +12905,7 @@ function Intersecter(selfIntersection, eps, buildLog){ module.exports = Intersecter; -},{"./linked-list":29}],29:[function(_dereq_,module,exports){ +},{"./linked-list":30}],30:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -12976,7 +12988,7 @@ var LinkedList = { module.exports = LinkedList; -},{}],30:[function(_dereq_,module,exports){ +},{}],31:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -13230,7 +13242,7 @@ function SegmentChainer(segments, eps, buildLog){ module.exports = SegmentChainer; -},{}],31:[function(_dereq_,module,exports){ +},{}],32:[function(_dereq_,module,exports){ // (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc // MIT License // Project Home: https://github.com/voidqk/polybooljs @@ -13398,7 +13410,7 @@ var SegmentSelector = { module.exports = SegmentSelector; -},{}],32:[function(_dereq_,module,exports){ +},{}],33:[function(_dereq_,module,exports){ // shim for using process in browser var process = module.exports = {}; @@ -13584,7 +13596,7 @@ process.chdir = function (dir) { }; process.umask = function() { return 0; }; -},{}],33:[function(_dereq_,module,exports){ +},{}],34:[function(_dereq_,module,exports){ // TinyColor v1.4.1 // https://github.com/bgrins/TinyColor // Brian Grinstead, MIT License @@ -14781,9 +14793,9 @@ else { })(Math); -},{}],34:[function(_dereq_,module,exports){ +},{}],35:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -14852,9 +14864,9 @@ module.exports = [ } ]; -},{}],35:[function(_dereq_,module,exports){ +},{}],36:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15207,9 +15219,9 @@ module.exports = templatedArray('annotation', { } }); -},{"../../plot_api/plot_template":204,"../../plots/cartesian/constants":219,"../../plots/font_attributes":240,"./arrow_paths":34}],36:[function(_dereq_,module,exports){ +},{"../../plot_api/plot_template":202,"../../plots/cartesian/constants":218,"../../plots/font_attributes":239,"./arrow_paths":35}],37:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15296,9 +15308,9 @@ function calcAxisExpansion(ann, ax) { ann._extremes[axId] = extremes; } -},{"../../lib":169,"../../plots/cartesian/axes":214,"./draw":41}],37:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"./draw":42}],38:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15381,11 +15393,11 @@ function onClick(gd, hoverData) { * } */ function getToggleSets(gd, hoverData) { - var annotations = gd._fullLayout.annotations, - onSet = [], - offSet = [], - explicitOffSet = [], - hoverLen = (hoverData || []).length; + var annotations = gd._fullLayout.annotations; + var onSet = []; + var offSet = []; + var explicitOffSet = []; + var hoverLen = (hoverData || []).length; var i, j, anni, showMode, pointj, xa, ya, toggleType; @@ -15435,9 +15447,9 @@ function clickData2r(d, ax) { return ax.type === 'log' ? ax.l2r(d) : ax.d2r(d); } -},{"../../lib":169,"../../plot_api/plot_template":204,"../../registry":259}],38:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../registry":257}],39:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15515,9 +15527,9 @@ module.exports = function handleAnnotationCommonDefaults(annIn, annOut, fullLayo coerce('captureevents', !!hoverText); }; -},{"../../lib":169,"../color":50}],39:[function(_dereq_,module,exports){ +},{"../../lib":168,"../color":51}],40:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15546,19 +15558,19 @@ var toLogRange = _dereq_('../../lib/to_log_range'); module.exports = function convertCoords(gd, ax, newType, doExtra) { ax = ax || {}; - var toLog = (newType === 'log') && (ax.type === 'linear'), - fromLog = (newType === 'linear') && (ax.type === 'log'); + var toLog = (newType === 'log') && (ax.type === 'linear'); + var fromLog = (newType === 'linear') && (ax.type === 'log'); if(!(toLog || fromLog)) return; - var annotations = gd._fullLayout.annotations, - axLetter = ax._id.charAt(0), - ann, - attrPrefix; + var annotations = gd._fullLayout.annotations; + var axLetter = ax._id.charAt(0); + var ann; + var attrPrefix; function convert(attr) { - var currentVal = ann[attr], - newVal = null; + var currentVal = ann[attr]; + var newVal = null; if(toLog) newVal = toLogRange(currentVal, ax.range); else newVal = Math.pow(10, currentVal); @@ -15578,9 +15590,9 @@ module.exports = function convertCoords(gd, ax, newType, doExtra) { } }; -},{"../../lib/to_log_range":193,"fast-isnumeric":18}],40:[function(_dereq_,module,exports){ +},{"../../lib/to_log_range":191,"fast-isnumeric":18}],41:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15620,9 +15632,10 @@ function handleAnnotationDefaults(annIn, annOut, fullLayout) { var showArrow = annOut.showarrow; // positioning - var axLetters = ['x', 'y'], - arrowPosDflt = [-10, -30], - gdMock = {_fullLayout: fullLayout}; + var axLetters = ['x', 'y']; + var arrowPosDflt = [-10, -30]; + var gdMock = {_fullLayout: fullLayout}; + for(var i = 0; i < 2; i++) { var axLetter = axLetters[i]; @@ -15638,9 +15651,9 @@ function handleAnnotationDefaults(annIn, annOut, fullLayout) { Axes.coercePosition(annOut, gdMock, coerce, axRef, axLetter, 0.5); if(showArrow) { - var arrowPosAttr = 'a' + axLetter, - // axref, ayref - aaxRef = Axes.coerceRef(annIn, annOut, gdMock, arrowPosAttr, 'pixel'); + var arrowPosAttr = 'a' + axLetter; + // axref, ayref + var aaxRef = Axes.coerceRef(annIn, annOut, gdMock, arrowPosAttr, 'pixel'); // for now the arrow can only be on the same axis or specified as pixels // TODO: sometime it might be interesting to allow it to be on *any* axis @@ -15684,9 +15697,9 @@ function handleAnnotationDefaults(annIn, annOut, fullLayout) { } } -},{"../../lib":169,"../../plots/array_container_defaults":210,"../../plots/cartesian/axes":214,"./attributes":35,"./common_defaults":38}],41:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"../../plots/cartesian/axes":212,"./attributes":36,"./common_defaults":39}],42:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15754,6 +15767,9 @@ function drawOne(gd, index) { var xa = Axes.getFromId(gd, options.xref); var ya = Axes.getFromId(gd, options.yref); + if(xa) xa.setScale(); + if(ya) ya.setScale(); + drawRaw(gd, options, index, false, xa, ya); } @@ -15804,8 +15820,8 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { // calculated pixel positions // x & y each will get text, head, and tail as appropriate - var annPosPx = {x: {}, y: {}}, - textangle = +options.textangle || 0; + var annPosPx = {x: {}, y: {}}; + var textangle = +options.textangle || 0; // create the components // made a single group to contain all, so opacity can work right @@ -15872,9 +15888,9 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { }); } - var borderwidth = options.borderwidth, - borderpad = options.borderpad, - borderfull = borderwidth + borderpad; + var borderwidth = options.borderwidth; + var borderpad = options.borderpad; + var borderfull = borderwidth + borderpad; var annTextBG = annTextGroupInner.append('rect') .attr('class', 'bg') @@ -15896,9 +15912,13 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { var font = options.font; + var text = fullLayout.meta ? + Lib.templateString(options.text, {meta: fullLayout.meta}) : + options.text; + var annText = annTextGroupInner.append('text') .classed('annotation-text', true) - .text(options.text); + .text(text); function textLayout(s) { s.call(Drawing.font, font) @@ -15957,24 +15977,24 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { var letters = ['x', 'y']; for(var i = 0; i < letters.length; i++) { - var axLetter = letters[i], - axRef = options[axLetter + 'ref'] || axLetter, - tailRef = options['a' + axLetter + 'ref'], - ax = {x: xa, y: ya}[axLetter], - dimAngle = (textangle + (axLetter === 'x' ? 0 : -90)) * Math.PI / 180, - // note that these two can be either positive or negative - annSizeFromWidth = outerWidth * Math.cos(dimAngle), - annSizeFromHeight = outerHeight * Math.sin(dimAngle), - // but this one is the positive total size - annSize = Math.abs(annSizeFromWidth) + Math.abs(annSizeFromHeight), - anchor = options[axLetter + 'anchor'], - overallShift = options[axLetter + 'shift'] * (axLetter === 'x' ? 1 : -1), - posPx = annPosPx[axLetter], - basePx, - textPadShift, - alignPosition, - autoAlignFraction, - textShift; + var axLetter = letters[i]; + var axRef = options[axLetter + 'ref'] || axLetter; + var tailRef = options['a' + axLetter + 'ref']; + var ax = {x: xa, y: ya}[axLetter]; + var dimAngle = (textangle + (axLetter === 'x' ? 0 : -90)) * Math.PI / 180; + // note that these two can be either positive or negative + var annSizeFromWidth = outerWidth * Math.cos(dimAngle); + var annSizeFromHeight = outerHeight * Math.sin(dimAngle); + // but this one is the positive total size + var annSize = Math.abs(annSizeFromWidth) + Math.abs(annSizeFromHeight); + var anchor = options[axLetter + 'anchor']; + var overallShift = options[axLetter + 'shift'] * (axLetter === 'x' ? 1 : -1); + var posPx = annPosPx[axLetter]; + var basePx; + var textPadShift; + var alignPosition; + var autoAlignFraction; + var textShift; /* * calculate the *primary* pixel position @@ -16040,8 +16060,8 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { posPx.head = Lib.constrain(posPx.head, 1, maxPx - 1); } if(tailRef === 'pixel') { - var shiftPlus = -Math.max(posPx.tail - 3, posPx.text), - shiftMinus = Math.min(posPx.tail + 3, posPx.text) - maxPx; + var shiftPlus = -Math.max(posPx.tail - 3, posPx.text); + var shiftMinus = Math.min(posPx.tail + 3, posPx.text) - maxPx; if(shiftPlus > 0) { posPx.tail += shiftPlus; posPx.text += shiftPlus; @@ -16098,14 +16118,14 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { x: borderfull + xShift - 1, y: borderfull + yShift }) - .call(Drawing.setClipUrl, isSizeConstrained ? annClipID : null); + .call(Drawing.setClipUrl, isSizeConstrained ? annClipID : null, gd); } else { var texty = borderfull + yShift - anntextBB.top; var textx = borderfull + xShift - anntextBB.left; annText.call(svgTextUtils.positionText, textx, texty) - .call(Drawing.setClipUrl, isSizeConstrained ? annClipID : null); + .call(Drawing.setClipUrl, isSizeConstrained ? annClipID : null, gd); } annTextClip.select('rect').call(Drawing.setRect, borderfull, borderfull, @@ -16138,32 +16158,32 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { .selectAll('.annotation-arrow-g') .remove(); - var headX = annPosPx.x.head, - headY = annPosPx.y.head, - tailX = annPosPx.x.tail + dx, - tailY = annPosPx.y.tail + dy, - textX = annPosPx.x.text + dx, - textY = annPosPx.y.text + dy, + var headX = annPosPx.x.head; + var headY = annPosPx.y.head; + var tailX = annPosPx.x.tail + dx; + var tailY = annPosPx.y.tail + dy; + var textX = annPosPx.x.text + dx; + var textY = annPosPx.y.text + dy; - // find the edge of the text box, where we'll start the arrow: - // create transform matrix to rotate the text box corners - transform = Lib.rotationXYMatrix(textangle, textX, textY), - applyTransform = Lib.apply2DTransform(transform), - applyTransform2 = Lib.apply2DTransform2(transform), + // find the edge of the text box, where we'll start the arrow: + // create transform matrix to rotate the text box corners + var transform = Lib.rotationXYMatrix(textangle, textX, textY); + var applyTransform = Lib.apply2DTransform(transform); + var applyTransform2 = Lib.apply2DTransform2(transform); - // calculate and transform bounding box - width = +annTextBG.attr('width'), - height = +annTextBG.attr('height'), - xLeft = textX - 0.5 * width, - xRight = xLeft + width, - yTop = textY - 0.5 * height, - yBottom = yTop + height, - edges = [ - [xLeft, yTop, xLeft, yBottom], - [xLeft, yBottom, xRight, yBottom], - [xRight, yBottom, xRight, yTop], - [xRight, yTop, xLeft, yTop] - ].map(applyTransform2); + // calculate and transform bounding box + var width = +annTextBG.attr('width'); + var height = +annTextBG.attr('height'); + var xLeft = textX - 0.5 * width; + var xRight = xLeft + width; + var yTop = textY - 0.5 * height; + var yBottom = yTop + height; + var edges = [ + [xLeft, yTop, xLeft, yBottom], + [xLeft, yBottom, xRight, yBottom], + [xRight, yBottom, xRight, yTop], + [xRight, yTop, xLeft, yTop] + ].map(applyTransform2); // Remove the line if it ends inside the box. Use ray // casting for rotated boxes: see which edges intersect a @@ -16187,9 +16207,9 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { } }); - var strokewidth = options.arrowwidth, - arrowColor = options.arrowcolor, - arrowSide = options.arrowside; + var strokewidth = options.arrowwidth; + var arrowColor = options.arrowcolor; + var arrowSide = options.arrowside; var arrowGroup = annGroup.append('g') .style({opacity: Color.opacity(arrowColor)}) @@ -16244,9 +16264,9 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { } }, moveFn: function(dx, dy) { - var annxy0 = applyTransform(annx0, anny0), - xcenter = annxy0[0] + dx, - ycenter = annxy0[1] + dy; + var annxy0 = applyTransform(annx0, anny0); + var xcenter = annxy0[0] + dx; + var ycenter = annxy0[1] + dy; annTextGroupInner.call(Drawing.setTranslate, xcenter, ycenter); modifyItem('x', xa ? @@ -16271,7 +16291,7 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { }); }, doneFn: function() { - Registry.call('relayout', gd, getUpdateObj()); + Registry.call('_guiRelayout', gd, getUpdateObj()); var notesBox = document.querySelector('.js-notes-box-panel'); if(notesBox) notesBox.redraw(notesBox.selectedObj); } @@ -16316,9 +16336,8 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { xUpdate = xa.p2r(xa.r2p(options.x) + dx); } else { - var widthFraction = options._xsize / gs.w, - xLeft = options.x + (options._xshift - options.xshift) / gs.w - - widthFraction / 2; + var widthFraction = options._xsize / gs.w; + var xLeft = options.x + (options._xshift - options.xshift) / gs.w - widthFraction / 2; xUpdate = dragElement.align(xLeft + dx / gs.w, widthFraction, 0, 1, options.xanchor); @@ -16327,9 +16346,8 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { if(ya) { yUpdate = ya.p2r(ya.r2p(options.y) + dy); } else { - var heightFraction = options._ysize / gs.h, - yBottom = options.y - (options._yshift + options.yshift) / gs.h - - heightFraction / 2; + var heightFraction = options._ysize / gs.h; + var yBottom = options.y - (options._yshift + options.yshift) / gs.h - heightFraction / 2; yUpdate = dragElement.align(yBottom - dy / gs.h, heightFraction, 0, 1, options.yanchor); @@ -16354,7 +16372,7 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { }, doneFn: function() { setCursor(annTextGroupInner); - Registry.call('relayout', gd, getUpdateObj()); + Registry.call('_guiRelayout', gd, getUpdateObj()); var notesBox = document.querySelector('.js-notes-box-panel'); if(notesBox) notesBox.redraw(notesBox.selectedObj); } @@ -16367,6 +16385,7 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { .call(textLayout) .on('edit', function(_text) { options.text = _text; + this.call(textLayout); modifyItem('text', _text); @@ -16378,15 +16397,15 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { modifyBase(ya._name + '.autorange', true); } - Registry.call('relayout', gd, getUpdateObj()); + Registry.call('_guiRelayout', gd, getUpdateObj()); }); } else annText.call(textLayout); } -},{"../../lib":169,"../../lib/setcursor":189,"../../lib/svg_text_utils":191,"../../plot_api/plot_template":204,"../../plots/cartesian/axes":214,"../../plots/plots":246,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"../fx":92,"./draw_arrow_head":42,"d3":16}],42:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../lib/setcursor":187,"../../lib/svg_text_utils":189,"../../plot_api/plot_template":202,"../../plots/cartesian/axes":212,"../../plots/plots":245,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"../fx":90,"./draw_arrow_head":43,"d3":16}],43:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16456,8 +16475,8 @@ module.exports = function drawArrowHead(el3, ends, options) { hideLine(); return; } - var backOffX = backOff * Math.cos(startRot), - backOffY = backOff * Math.sin(startRot); + var backOffX = backOff * Math.cos(startRot); + var backOffY = backOff * Math.sin(startRot); end.x += backOffX; end.y += backOffY; @@ -16470,8 +16489,8 @@ module.exports = function drawArrowHead(el3, ends, options) { hideLine(); return; } - var startBackOffX = startBackOff * Math.cos(startRot), - startbackOffY = startBackOff * Math.sin(startRot); + var startBackOffX = startBackOff * Math.cos(startRot); + var startbackOffY = startBackOff * Math.sin(startRot); start.x -= startBackOffX; start.y -= startbackOffY; @@ -16480,12 +16499,12 @@ module.exports = function drawArrowHead(el3, ends, options) { } } else if(el.nodeName === 'path') { - var pathlen = el.getTotalLength(), - // using dash to hide the backOff region of the path. - // if we ever allow dash for the arrow we'll have to - // do better than this hack... maybe just manually - // combine the two - dashArray = ''; + var pathlen = el.getTotalLength(); + // using dash to hide the backOff region of the path. + // if we ever allow dash for the arrow we'll have to + // do better than this hack... maybe just manually + // combine the two + var dashArray = ''; if(pathlen < backOff + startBackOff) { hideLine(); @@ -16538,9 +16557,9 @@ module.exports = function drawArrowHead(el3, ends, options) { if(doEnd) drawhead(headStyle, end, endRot, scale); }; -},{"../color":50,"./arrow_paths":34,"d3":16}],43:[function(_dereq_,module,exports){ +},{"../color":51,"./arrow_paths":35,"d3":16}],44:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16572,9 +16591,9 @@ module.exports = { convertCoords: _dereq_('./convert_coords') }; -},{"../../plots/cartesian/include_components":224,"./attributes":35,"./calc_autorange":36,"./click":37,"./convert_coords":39,"./defaults":40,"./draw":41}],44:[function(_dereq_,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-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16660,9 +16679,9 @@ module.exports = overrideAll(templatedArray('annotation', { // zref: 'z' }), 'calc', 'from-root'); -},{"../../plot_api/edit_types":197,"../../plot_api/plot_template":204,"../annotations/attributes":35}],45:[function(_dereq_,module,exports){ +},{"../../plot_api/edit_types":195,"../../plot_api/plot_template":202,"../annotations/attributes":36}],46:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16725,9 +16744,9 @@ function mockAnnAxes(ann, scene) { }; } -},{"../../lib":169,"../../plots/cartesian/axes":214}],46:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212}],47:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16801,9 +16820,9 @@ function handleAnnotationDefaults(annIn, annOut, sceneLayout, opts) { } } -},{"../../lib":169,"../../plots/array_container_defaults":210,"../../plots/cartesian/axes":214,"../annotations/common_defaults":38,"./attributes":44}],47:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"../../plots/cartesian/axes":212,"../annotations/common_defaults":39,"./attributes":45}],48:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16853,9 +16872,9 @@ module.exports = function draw(scene) { } }; -},{"../../plots/gl3d/project":243,"../annotations/draw":41}],48:[function(_dereq_,module,exports){ +},{"../../plots/gl3d/project":242,"../annotations/draw":42}],49:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16901,9 +16920,9 @@ function includeGL3D(layoutIn, layoutOut) { } } -},{"../../lib":169,"../../registry":259,"./attributes":44,"./convert":45,"./defaults":46,"./draw":47}],49:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"./attributes":45,"./convert":46,"./defaults":47,"./draw":48}],50:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16941,9 +16960,9 @@ exports.borderLine = '#BEC8D9'; // gives back exactly lightLine if the other colors are defaults. exports.lightFraction = 100 * (0xe - 0x4) / (0xf - 0x4); -},{}],50:[function(_dereq_,module,exports){ +},{}],51:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16991,17 +17010,17 @@ color.combine = function(front, back) { var fc = tinycolor(front).toRgb(); if(fc.a === 1) return tinycolor(front).toRgbString(); - var bc = tinycolor(back || background).toRgb(), - bcflat = bc.a === 1 ? bc : { - r: 255 * (1 - bc.a) + bc.r * bc.a, - g: 255 * (1 - bc.a) + bc.g * bc.a, - b: 255 * (1 - bc.a) + bc.b * bc.a - }, - fcflat = { - r: bcflat.r * (1 - fc.a) + fc.r * fc.a, - g: bcflat.g * (1 - fc.a) + fc.g * fc.a, - b: bcflat.b * (1 - fc.a) + fc.b * fc.a - }; + var bc = tinycolor(back || background).toRgb(); + var bcflat = bc.a === 1 ? bc : { + r: 255 * (1 - bc.a) + bc.r * bc.a, + g: 255 * (1 - bc.a) + bc.g * bc.a, + b: 255 * (1 - bc.a) + bc.b * bc.a + }; + var fcflat = { + r: bcflat.r * (1 - fc.a) + fc.r * fc.a, + g: bcflat.g * (1 - fc.a) + fc.g * fc.a, + b: bcflat.b * (1 - fc.a) + fc.b * fc.a + }; return tinycolor(fcflat).toRgbString(); }; @@ -17043,11 +17062,8 @@ color.fill = function(s, c) { color.clean = function(container) { if(!container || typeof container !== 'object') return; - var keys = Object.keys(container), - i, - j, - key, - val; + var keys = Object.keys(container); + var i, j, key, val; for(i = 0; i < keys.length; i++) { key = keys[i]; @@ -17086,8 +17102,8 @@ function cleanOne(val) { var match = valTrim.match(/^rgba?\s*\(([^()]*)\)$/); if(!match) return val; - var parts = match[1].trim().split(/\s*[\s,]\s*/), - rgba = valTrim.charAt(3) === 'a' && parts.length === 4; + var parts = match[1].trim().split(/\s*[\s,]\s*/); + var rgba = valTrim.charAt(3) === 'a' && parts.length === 4; if(!rgba && parts.length !== 3) return val; for(var i = 0; i < parts.length; i++) { @@ -17112,9 +17128,9 @@ function cleanOne(val) { return 'rgb(' + rgbStr + ')'; } -},{"./attributes":49,"fast-isnumeric":18,"tinycolor2":33}],51:[function(_dereq_,module,exports){ +},{"./attributes":50,"fast-isnumeric":18,"tinycolor2":34}],52:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17255,35 +17271,55 @@ module.exports = overrideAll({ exponentformat: axesAttrs.exponentformat, showexponent: axesAttrs.showexponent, title: { - valType: 'string', - - + text: { + valType: 'string', + + + }, + font: fontAttrs({ + + }), + side: { + valType: 'enumerated', + values: ['right', 'top', 'bottom'], + + dflt: 'top', + + } }, - titlefont: fontAttrs({ - - }), - titleside: { - valType: 'enumerated', - values: ['right', 'top', 'bottom'], - - dflt: 'top', - + + _deprecated: { + title: { + valType: 'string', + + + }, + titlefont: fontAttrs({ + + }), + titleside: { + valType: 'enumerated', + values: ['right', 'top', 'bottom'], + + dflt: 'top', + + } } }, 'colorbars', 'from-root'); -},{"../../lib/extend":163,"../../plot_api/edit_types":197,"../../plots/cartesian/layout_attributes":226,"../../plots/font_attributes":240}],52:[function(_dereq_,module,exports){ +},{"../../lib/extend":162,"../../plot_api/edit_types":195,"../../plots/cartesian/layout_attributes":225,"../../plots/font_attributes":239}],53:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 drawColorbar = _dereq_('./draw'); +var flipScale = _dereq_('../colorscale/helpers').flipScale; /** * connectColorbar: create a colorbar from a trace, using its module to @@ -17315,22 +17351,33 @@ module.exports = function connectColorbar(gd, cd, moduleOpts) { var trace = cd[0].trace; var cbId = 'cb' + trace.uid; - var containerName = moduleOpts.container; - var container = containerName ? trace[containerName] : trace; + moduleOpts = Array.isArray(moduleOpts) ? moduleOpts : [moduleOpts]; - gd._fullLayout._infolayer.selectAll('.' + cbId).remove(); - if(!container || !container.showscale) return; + for(var i = 0; i < moduleOpts.length; i++) { + var containerName = moduleOpts[i].container; - var cb = cd[0].t.cb = drawColorbar(gd, cbId); + var container = containerName ? trace[containerName] : trace; - cb.fillgradient(container.colorscale) - .zrange([container[moduleOpts.min], container[moduleOpts.max]]) - .options(container.colorbar)(); + gd._fullLayout._infolayer.selectAll('.' + cbId).remove(); + if(!container || !container.showscale) continue; + + var cb = cd[0].t.cb = drawColorbar(gd, cbId); + + var scl = container.reversescale ? + flipScale(container.colorscale) : + container.colorscale; + + cb.fillgradient(scl) + .zrange([container[moduleOpts[i].min], container[moduleOpts[i].max]]) + .options(container.colorbar)(); + + return; + } }; -},{"./draw":55}],53:[function(_dereq_,module,exports){ +},{"../colorscale/helpers":62,"./draw":56}],54:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17356,9 +17403,9 @@ module.exports = { } }; -},{}],54:[function(_dereq_,module,exports){ +},{}],55:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17377,10 +17424,9 @@ var handleTickLabelDefaults = _dereq_('../../plots/cartesian/tick_label_defaults var attributes = _dereq_('./attributes'); - module.exports = function colorbarDefaults(containerIn, containerOut, layout) { - var colorbarOut = Template.newContainer(containerOut, 'colorbar'), - colorbarIn = containerIn.colorbar || {}; + var colorbarOut = Template.newContainer(containerOut, 'colorbar'); + var colorbarIn = containerIn.colorbar || {}; function coerce(attr, dflt) { return Lib.coerce(colorbarIn, colorbarOut, attributes, attr, dflt); @@ -17418,14 +17464,14 @@ module.exports = function colorbarDefaults(containerIn, containerOut, layout) { handleTickLabelDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts); handleTickMarkDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts); - coerce('title', layout._dfltTitle.colorbar); - Lib.coerceFont(coerce, 'titlefont', layout.font); - coerce('titleside'); + coerce('title.text', layout._dfltTitle.colorbar); + Lib.coerceFont(coerce, 'title.font', layout.font); + coerce('title.side'); }; -},{"../../lib":169,"../../plot_api/plot_template":204,"../../plots/cartesian/tick_label_defaults":233,"../../plots/cartesian/tick_mark_defaults":234,"../../plots/cartesian/tick_value_defaults":235,"./attributes":51}],55:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../plots/cartesian/tick_label_defaults":232,"../../plots/cartesian/tick_mark_defaults":233,"../../plots/cartesian/tick_value_defaults":234,"./attributes":52}],56:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17490,8 +17536,8 @@ module.exports = function draw(gd, id) { opts.zrange = null; function component() { - var fullLayout = gd._fullLayout, - gs = fullLayout._size; + var fullLayout = gd._fullLayout; + var gs = fullLayout._size; if((typeof opts.fillcolor !== 'function') && (typeof opts.line.color !== 'function') && !opts.fillgradient) { @@ -17509,10 +17555,10 @@ module.exports = function draw(gd, id) { var l; var i; - var l0 = opts.levels.end + opts.levels.size / 100, - ls = opts.levels.size, - zr0 = (1.001 * zrange[0] - 0.001 * zrange[1]), - zr1 = (1.001 * zrange[1] - 0.001 * zrange[0]); + var l0 = opts.levels.end + opts.levels.size / 100; + var ls = opts.levels.size; + var zr0 = (1.001 * zrange[0] - 0.001 * zrange[1]); + var zr1 = (1.001 * zrange[1] - 0.001 * zrange[0]); for(i = 0; i < 1e5; i++) { l = opts.levels.start + i * ls; if(ls > 0 ? (l >= l0) : (l <= l0)) break; @@ -17560,71 +17606,70 @@ module.exports = function draw(gd, id) { // when the colorbar itself is pushing the margins. // but then the fractional size is calculated based on the // actual graph size, so that the axes will size correctly. - var plotHeight = gs.h, - plotWidth = gs.w, - thickPx = Math.round(opts.thickness * - (opts.thicknessmode === 'fraction' ? plotWidth : 1)), - thickFrac = thickPx / gs.w, - lenPx = Math.round(opts.len * - (opts.lenmode === 'fraction' ? plotHeight : 1)), - lenFrac = lenPx / gs.h, - xpadFrac = opts.xpad / gs.w, - yExtraPx = (opts.borderwidth + opts.outlinewidth) / 2, - ypadFrac = opts.ypad / gs.h, + var plotHeight = gs.h; + var plotWidth = gs.w; + var thickPx = Math.round(opts.thickness * (opts.thicknessmode === 'fraction' ? plotWidth : 1)); + var thickFrac = thickPx / gs.w; + var lenPx = Math.round(opts.len * (opts.lenmode === 'fraction' ? plotHeight : 1)); + var lenFrac = lenPx / gs.h; + var xpadFrac = opts.xpad / gs.w; + var yExtraPx = (opts.borderwidth + opts.outlinewidth) / 2; + var ypadFrac = opts.ypad / gs.h; - // x positioning: do it initially just for left anchor, - // then fix at the end (since we don't know the width yet) - xLeft = Math.round(opts.x * gs.w + opts.xpad), - // for dragging... this is getting a little muddled... - xLeftFrac = opts.x - thickFrac * - ({middle: 0.5, right: 1}[opts.xanchor]||0), + // x positioning: do it initially just for left anchor, + // then fix at the end (since we don't know the width yet) + var xLeft = Math.round(opts.x * gs.w + opts.xpad); + // for dragging... this is getting a little muddled... + var xLeftFrac = opts.x - thickFrac * ({middle: 0.5, right: 1}[opts.xanchor]||0); - // y positioning we can do correctly from the start - yBottomFrac = opts.y + lenFrac * - (({top: -0.5, bottom: 0.5}[opts.yanchor] || 0) - 0.5), - yBottomPx = Math.round(gs.h * (1 - yBottomFrac)), - yTopPx = yBottomPx - lenPx, - titleEl, - cbAxisIn = { - type: 'linear', - range: zrange, - tickmode: opts.tickmode, - nticks: opts.nticks, - tick0: opts.tick0, - dtick: opts.dtick, - tickvals: opts.tickvals, - ticktext: opts.ticktext, - ticks: opts.ticks, - ticklen: opts.ticklen, - tickwidth: opts.tickwidth, - tickcolor: opts.tickcolor, - showticklabels: opts.showticklabels, - tickfont: opts.tickfont, - tickangle: opts.tickangle, - tickformat: opts.tickformat, - exponentformat: opts.exponentformat, - separatethousands: opts.separatethousands, - showexponent: opts.showexponent, - showtickprefix: opts.showtickprefix, - tickprefix: opts.tickprefix, - showticksuffix: opts.showticksuffix, - ticksuffix: opts.ticksuffix, - title: opts.title, - titlefont: opts.titlefont, - showline: true, - anchor: 'free', - position: 1 - }, - cbAxisOut = { - type: 'linear', - _id: 'y' + id - }, - axisOptions = { - letter: 'y', - font: fullLayout.font, - noHover: true, - calendar: fullLayout.calendar // not really necessary (yet?) - }; + // y positioning we can do correctly from the start + var yBottomFrac = opts.y + lenFrac * (({top: -0.5, bottom: 0.5}[opts.yanchor] || 0) - 0.5); + var yBottomPx = Math.round(gs.h * (1 - yBottomFrac)); + var yTopPx = yBottomPx - lenPx; + + var titleEl; + + var cbAxisIn = { + type: 'linear', + range: zrange, + tickmode: opts.tickmode, + nticks: opts.nticks, + tick0: opts.tick0, + dtick: opts.dtick, + tickvals: opts.tickvals, + ticktext: opts.ticktext, + ticks: opts.ticks, + ticklen: opts.ticklen, + tickwidth: opts.tickwidth, + tickcolor: opts.tickcolor, + showticklabels: opts.showticklabels, + tickfont: opts.tickfont, + tickangle: opts.tickangle, + tickformat: opts.tickformat, + exponentformat: opts.exponentformat, + separatethousands: opts.separatethousands, + showexponent: opts.showexponent, + showtickprefix: opts.showtickprefix, + tickprefix: opts.tickprefix, + showticksuffix: opts.showticksuffix, + ticksuffix: opts.ticksuffix, + title: opts.title, + showline: true, + anchor: 'free', + side: 'right', + position: 1 + }; + var cbAxisOut = { + type: 'linear', + _id: 'y' + id + }; + var axisOptions = { + letter: 'y', + font: fullLayout.font, + noHover: true, + noTickson: true, + calendar: fullLayout.calendar // not really necessary (yet?) + }; // Coerce w.r.t. Axes layoutAttributes: // re-use axes.js logic without updating _fullData @@ -17643,11 +17688,11 @@ module.exports = function draw(gd, id) { // save for other callers to access this axis component.axis = cbAxisOut; - if(['top', 'bottom'].indexOf(opts.titleside) !== -1) { - cbAxisOut.titleside = opts.titleside; + if(['top', 'bottom'].indexOf(opts.title.side) !== -1) { + cbAxisOut.title.side = opts.title.side; cbAxisOut.titlex = opts.x + xpadFrac; cbAxisOut.titley = yBottomFrac + - (opts.titleside === 'top' ? lenFrac - ypadFrac : ypadFrac); + (opts.title.side === 'top' ? lenFrac - ypadFrac : ypadFrac); } if(opts.line.color && opts.tickmode === 'auto') { @@ -17655,10 +17700,8 @@ module.exports = function draw(gd, id) { cbAxisOut.tick0 = opts.levels.start; var dtick = opts.levels.size; // expand if too many contours, so we don't get too many ticks - var autoNtick = Lib.constrain( - (yBottomPx - yTopPx) / 50, 4, 15) + 1, - dtFactor = (zrange[1] - zrange[0]) / - ((opts.nticks || autoNtick) * dtick); + var autoNtick = Lib.constrain((yBottomPx - yTopPx) / 50, 4, 15) + 1; + var dtFactor = (zrange[1] - zrange[0]) / ((opts.nticks || autoNtick) * dtick); if(dtFactor > 1) { var dtexp = Math.pow(10, Math.floor( Math.log(dtFactor) / Math.LN10)); @@ -17707,17 +17750,18 @@ module.exports = function draw(gd, id) { Math.round(gs.l) + ',-' + Math.round(gs.t) + ')'); - cbAxisOut._axislayer = container.select('.cbaxis'); + var axisLayer = container.select('.cbaxis'); + var titleHeight = 0; - if(['top', 'bottom'].indexOf(opts.titleside) !== -1) { + if(['top', 'bottom'].indexOf(opts.title.side) !== -1) { // draw the title so we know how much room it needs // when we squish the axis. This one only applies to // top or bottom titles, not right side. - var x = gs.l + (opts.x + xpadFrac) * gs.w, - fontSize = cbAxisOut.titlefont.size, - y; + var x = gs.l + (opts.x + xpadFrac) * gs.w; + var fontSize = cbAxisOut.title.font.size; + var y; - if(opts.titleside === 'top') { + if(opts.title.side === 'top') { y = (1 - (yBottomFrac + lenFrac - ypadFrac)) * gs.h + gs.t + 3 + fontSize * 0.75; } @@ -17731,16 +17775,15 @@ module.exports = function draw(gd, id) { } function drawAxis() { - if(['top', 'bottom'].indexOf(opts.titleside) !== -1) { + if(['top', 'bottom'].indexOf(opts.title.side) !== -1) { // squish the axis top to make room for the title - var titleGroup = container.select('.cbtitle'), - titleText = titleGroup.select('text'), - titleTrans = - [-opts.outlinewidth / 2, opts.outlinewidth / 2], - mathJaxNode = titleGroup - .select('.h' + cbAxisOut._id + 'title-math-group') - .node(), - lineSize = 15.6; + var titleGroup = container.select('.cbtitle'); + var titleText = titleGroup.select('text'); + var titleTrans = [-opts.outlinewidth / 2, opts.outlinewidth / 2]; + var mathJaxNode = titleGroup + .select('.h' + cbAxisOut._id + 'title-math-group') + .node(); + var lineSize = 15.6; if(titleText.node()) { lineSize = parseInt(titleText.node().style.fontSize, 10) * LINE_SPACING; @@ -17762,7 +17805,7 @@ module.exports = function draw(gd, id) { // TODO: configurable titleHeight += 5; - if(opts.titleside === 'top') { + if(opts.title.side === 'top') { cbAxisOut.domain[1] -= titleHeight / gs.h; titleTrans[1] *= -1; } @@ -17783,8 +17826,7 @@ module.exports = function draw(gd, id) { .attr('transform', 'translate(0,' + Math.round(gs.h * (1 - cbAxisOut.domain[1])) + ')'); - cbAxisOut._axislayer.attr('transform', 'translate(0,' + - Math.round(-gs.t) + ')'); + axisLayer.attr('transform', 'translate(0,' + Math.round(-gs.t) + ')'); var fills = container.select('.cbfills') .selectAll('rect.cbfill') @@ -17851,12 +17893,7 @@ module.exports = function draw(gd, id) { }); // force full redraw of labels and ticks - cbAxisOut._axislayer.selectAll('g.' + cbAxisOut._id + 'tick,path') - .remove(); - - cbAxisOut._pos = xLeft + thickPx + - (opts.outlinewidth||0) / 2 - (opts.ticks === 'outside' ? 1 : 0); - cbAxisOut.side = 'right'; + axisLayer.selectAll('g.' + cbAxisOut._id + 'tick,path').remove(); // separate out axis and title drawing, // so we don't need such complicated logic in Titles.draw @@ -17864,15 +17901,37 @@ module.exports = function draw(gd, id) { // this title call only handles side=right return Lib.syncOrAsync([ function() { - return Axes.doTicksSingle(gd, cbAxisOut, true); + var shift = xLeft + thickPx + + (opts.outlinewidth || 0) / 2 - (opts.ticks === 'outside' ? 1 : 0); + + var vals = Axes.calcTicks(cbAxisOut); + var transFn = Axes.makeTransFn(cbAxisOut); + var labelFns = Axes.makeLabelFns(cbAxisOut, shift); + var tickSign = Axes.getTickSigns(cbAxisOut)[2]; + + Axes.drawTicks(gd, cbAxisOut, { + vals: cbAxisOut.ticks === 'inside' ? Axes.clipEnds(cbAxisOut, vals) : vals, + layer: axisLayer, + path: Axes.makeTickPath(cbAxisOut, shift, tickSign), + transFn: transFn + }); + + return Axes.drawLabels(gd, cbAxisOut, { + vals: vals, + layer: axisLayer, + transFn: transFn, + labelXFn: labelFns.labelXFn, + labelYFn: labelFns.labelYFn, + labelAnchorFn: labelFns.labelAnchorFn + }); }, function() { - if(['top', 'bottom'].indexOf(opts.titleside) === -1) { - var fontSize = cbAxisOut.titlefont.size, - y = cbAxisOut._offset + cbAxisOut._length / 2, - x = gs.l + (cbAxisOut.position || 0) * gs.w + ((cbAxisOut.side === 'right') ? - 10 + fontSize * ((cbAxisOut.showticklabels ? 1 : 0.5)) : - -10 - fontSize * ((cbAxisOut.showticklabels ? 0.5 : 0))); + if(['top', 'bottom'].indexOf(opts.title.side) === -1) { + var fontSize = cbAxisOut.title.font.size; + var y = cbAxisOut._offset + cbAxisOut._length / 2; + var x = gs.l + (cbAxisOut.position || 0) * gs.w + ((cbAxisOut.side === 'right') ? + 10 + fontSize * ((cbAxisOut.showticklabels ? 1 : 0.5)) : + -10 - fontSize * ((cbAxisOut.showticklabels ? 0.5 : 0))); // the 'h' + is a hack to get around the fact that // convertToTspans rotates any 'y...' class by 90 degrees. @@ -17880,7 +17939,7 @@ module.exports = function draw(gd, id) { drawTitle('h' + cbAxisOut._id + 'title', { avoid: { selection: d3.select(gd).selectAll('g.' + cbAxisOut._id + 'tick'), - side: opts.titleside, + side: opts.title.side, offsetLeft: gs.l, offsetTop: 0, maxShift: fullLayout.width @@ -17893,15 +17952,10 @@ module.exports = function draw(gd, id) { } function drawTitle(titleClass, titleOpts) { - var trace = getTrace(); - var propName = 'colorbar.title'; - var containerName = trace._module.colorbar.container; - if(containerName) propName = containerName + '.' + propName; - var dfltTitleOpts = { propContainer: cbAxisOut, - propName: propName, - traceIndex: trace.index, + propName: getPropName('title'), + traceIndex: getTrace().index, placeholder: fullLayout._dfltTitle.colorbar, containerGroup: container.select('.cbtitle') }; @@ -17925,19 +17979,19 @@ module.exports = function draw(gd, id) { // TODO: why are we redrawing multiple times now with this? // I guess autoMargin doesn't like being post-promise? var innerWidth = thickPx + opts.outlinewidth / 2 + - Drawing.bBox(cbAxisOut._axislayer.node()).width; + Drawing.bBox(axisLayer.node()).width; titleEl = titleCont.select('text'); if(titleEl.node() && !titleEl.classed(cn.jsPlaceholder)) { var mathJaxNode = titleCont .select('.h' + cbAxisOut._id + 'title-math-group') - .node(), - titleWidth; + .node(); + var titleWidth; if(mathJaxNode && - ['top', 'bottom'].indexOf(opts.titleside) !== -1) { + ['top', 'bottom'].indexOf(opts.title.side) !== -1) { titleWidth = Drawing.bBox(mathJaxNode).width; } else { - // note: the formula below works for all titlesides, + // note: the formula below works for all title sides, // (except for top/bottom mathjax, above) // but the weird gs.l is because the titleunshift // transform gets removed by Drawing.bBox @@ -17949,8 +18003,8 @@ module.exports = function draw(gd, id) { } var outerwidth = 2 * opts.xpad + innerWidth + - opts.borderwidth + opts.outlinewidth / 2, - outerheight = yBottomPx - yTopPx; + opts.borderwidth + opts.outlinewidth / 2; + var outerheight = yBottomPx - yTopPx; container.select('.cbbg').attr({ x: xLeft - opts.xpad - @@ -17966,7 +18020,7 @@ module.exports = function draw(gd, id) { container.selectAll('.cboutline').attr({ x: xLeft, y: yTopPx + opts.ypad + - (opts.titleside === 'top' ? titleHeight : 0), + (opts.title.side === 'top' ? titleHeight : 0), width: Math.max(thickPx, 2), height: Math.max(outerheight - 2 * opts.ypad - titleHeight, 2) }) @@ -18053,11 +18107,10 @@ module.exports = function draw(gd, id) { setCursor(container); if(xf !== undefined && yf !== undefined) { - Registry.call('restyle', - gd, - {'colorbar.x': xf, 'colorbar.y': yf}, - getTrace().index - ); + var update = {}; + update[getPropName('x')] = xf; + update[getPropName('y')] = yf; + Registry.call('_guiRestyle', gd, update, getTrace().index); } } }); @@ -18066,15 +18119,21 @@ module.exports = function draw(gd, id) { } function getTrace() { - var idNum = id.substr(2), - i, - trace; - for(i = 0; i < gd._fullData.length; i++) { - trace = gd._fullData[i]; + var idNum = id.substr(2); + for(var i = 0; i < gd._fullData.length; i++) { + var trace = gd._fullData[i]; if(trace.uid === idNum) return trace; } } + function getPropName(suffix) { + var trace = getTrace(); + var propName = 'colorbar.'; + var containerName = trace._module.colorbar.container; + if(containerName) propName = containerName + '.' + propName; + return propName + suffix; + } + // setter/getters for every item defined in opts Object.keys(opts).forEach(function(name) { component[name] = function(v) { @@ -18108,9 +18167,9 @@ module.exports = function draw(gd, id) { return component; }; -},{"../../constants/alignment":148,"../../lib":169,"../../lib/extend":163,"../../lib/setcursor":189,"../../lib/svg_text_utils":191,"../../plots/cartesian/axes":214,"../../plots/cartesian/axis_defaults":216,"../../plots/cartesian/layout_attributes":226,"../../plots/cartesian/position_defaults":229,"../../plots/plots":246,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"../titles":141,"./attributes":51,"./constants":53,"d3":16,"tinycolor2":33}],56:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../lib":168,"../../lib/extend":162,"../../lib/setcursor":187,"../../lib/svg_text_utils":189,"../../plots/cartesian/axes":212,"../../plots/cartesian/axis_defaults":214,"../../plots/cartesian/layout_attributes":225,"../../plots/cartesian/position_defaults":228,"../../plots/plots":245,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"../titles":139,"./attributes":52,"./constants":54,"d3":16,"tinycolor2":34}],57:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18127,9 +18186,9 @@ module.exports = function hasColorbar(container) { return Lib.isPlainObject(container.colorbar); }; -},{"../../lib":169}],57:[function(_dereq_,module,exports){ +},{"../../lib":168}],58:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18138,7 +18197,7 @@ module.exports = function hasColorbar(container) { 'use strict'; -var palettes = _dereq_('./scales.js'); +var palettes = _dereq_('./scales.js').scales; var paletteStr = Object.keys(palettes); function code(s) { @@ -18184,6 +18243,8 @@ function code(s) { * most of these attributes already require a recalc, but the ones that do not * have editType *style* or *plot* unless you override (presumably with *calc*) * + * - anim {boolean) (dflt: undefined): is 'color' animatable? + * * @return {object} */ module.exports = function colorScaleAttrs(context, opts) { @@ -18233,6 +18294,10 @@ module.exports = function colorScaleAttrs(context, opts) { editType: editTypeOverride || 'style', }; + + if(opts.anim) { + attrs.color.anim = true; + } } attrs[auto] = { @@ -18285,7 +18350,7 @@ module.exports = function colorScaleAttrs(context, opts) { valType: 'boolean', dflt: false, - editType: 'calc', + editType: 'plot', }; @@ -18302,58 +18367,28 @@ module.exports = function colorScaleAttrs(context, opts) { return attrs; }; -},{"./scales.js":69}],58:[function(_dereq_,module,exports){ +},{"./scales.js":66}],59:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Lib = _dereq_('../../lib'); -var scales = _dereq_('./scales'); -var flipScale = _dereq_('./flip_scale'); +module.exports = function calc(gd, trace, opts) { + var fullLayout = gd._fullLayout; + var vals = opts.vals; + var containerStr = opts.containerStr; + var cLetter = opts.cLetter; - -module.exports = function calc(trace, vals, containerStr, cLetter) { - var container = trace; - var inputContainer = trace._input; - var fullInputContainer = trace._fullInput; - - // set by traces with groupby transforms - var updateStyle = trace.updateStyle; - - function doUpdate(attr, inputVal, fullVal) { - if(fullVal === undefined) fullVal = inputVal; - - if(updateStyle) { - updateStyle(trace._input, containerStr ? (containerStr + '.' + attr) : attr, inputVal); - } - else { - inputContainer[attr] = inputVal; - } - - container[attr] = fullVal; - if(fullInputContainer && (trace !== trace._fullInput)) { - if(updateStyle) { - updateStyle(trace._fullInput, containerStr ? (containerStr + '.' + attr) : attr, fullVal); - } - else { - fullInputContainer[attr] = fullVal; - } - } - } - - if(containerStr) { - container = Lib.nestedProperty(container, containerStr).get(); - inputContainer = Lib.nestedProperty(inputContainer, containerStr).get(); - fullInputContainer = Lib.nestedProperty(fullInputContainer, containerStr).get() || {}; - } + var container = containerStr ? + Lib.nestedProperty(trace, containerStr).get() : + trace; var autoAttr = cLetter + 'auto'; var minAttr = cLetter + 'min'; @@ -18376,39 +18411,21 @@ module.exports = function calc(trace, vals, containerStr, cLetter) { max += 0.5; } - doUpdate(minAttr, min); - doUpdate(maxAttr, max); - - /* - * If auto was explicitly false but min or max was missing, - * we filled in the missing piece here but later the trace does - * not look auto. - * Otherwise make sure the trace still looks auto as far as later - * changes are concerned. - */ - doUpdate(autoAttr, (auto !== false || (min === undefined && max === undefined))); + container['_' + minAttr] = container[minAttr] = min; + container['_' + maxAttr] = container[maxAttr] = max; if(container.autocolorscale) { - if(min * max < 0) scl = scales.RdBu; - else if(min >= 0) scl = scales.Reds; - else scl = scales.Blues; + if(min * max < 0) scl = fullLayout.colorscale.diverging; + else if(min >= 0) scl = fullLayout.colorscale.sequential; + else scl = fullLayout.colorscale.sequentialminus; - // reversescale is handled at the containerOut level - doUpdate('colorscale', scl, container.reversescale ? flipScale(scl) : scl); - - // We pushed a colorscale back to input, which will change the default autocolorscale next time - // to avoid spurious redraws from Plotly.react, update resulting autocolorscale now - // This is a conscious decision so that changing the data later does not unexpectedly - // give you a new colorscale - if(!inputContainer.autocolorscale) { - doUpdate('autocolorscale', false); - } + container._colorscale = container.colorscale = scl; } }; -},{"../../lib":169,"./flip_scale":62,"./scales":69}],59:[function(_dereq_,module,exports){ +},{"../../lib":168}],60:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18417,47 +18434,102 @@ module.exports = function calc(trace, vals, containerStr, cLetter) { 'use strict'; -var scales = _dereq_('./scales'); +var Lib = _dereq_('../../lib'); +var hasColorscale = _dereq_('./helpers').hasColorscale; +module.exports = function crossTraceDefaults(fullData) { + function replace(cont, k) { + var val = cont['_' + k]; + if(val !== undefined) { + cont[k] = val; + } + } -module.exports = scales.RdBu; + function relinkColorAtts(trace, cAttrs) { + var cont = cAttrs.container ? + Lib.nestedProperty(trace, cAttrs.container).get() : + trace; -},{"./scales":69}],60:[function(_dereq_,module,exports){ + if(cont) { + var isAuto = cont.zauto || cont.cauto; + var minAttr = cAttrs.min; + var maxAttr = cAttrs.max; + + if(isAuto || cont[minAttr] === undefined) { + replace(cont, minAttr); + } + if(isAuto || cont[maxAttr] === undefined) { + replace(cont, maxAttr); + } + if(cont.autocolorscale) { + replace(cont, 'colorscale'); + } + } + } + + for(var i = 0; i < fullData.length; i++) { + var trace = fullData[i]; + var _module = trace._module; + + if(_module.colorbar) { + relinkColorAtts(trace, _module.colorbar); + } + + // TODO could generalize _module.colorscale and use it here? + + if(hasColorscale(trace, 'marker.line')) { + relinkColorAtts(trace, { + container: 'marker.line', + min: 'cmin', + max: 'cmax' + }); + } + + if(hasColorscale(trace, 'line')) { + relinkColorAtts(trace, { + container: 'line', + min: 'cmin', + max: 'cmax' + }); + } + } +}; + +},{"../../lib":168,"./helpers":62}],61:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); var Lib = _dereq_('../../lib'); - var hasColorbar = _dereq_('../colorbar/has_colorbar'); var colorbarDefaults = _dereq_('../colorbar/defaults'); -var isValidScale = _dereq_('./is_valid_scale'); -var flipScale = _dereq_('./flip_scale'); +var isValidScale = _dereq_('./scales').isValid; + +function npMaybe(cont, prefix) { + var containerStr = prefix.slice(0, prefix.length - 1); + return prefix ? + Lib.nestedProperty(cont, containerStr).get() || {} : + cont; +} module.exports = function colorScaleDefaults(traceIn, traceOut, layout, coerce, opts) { - var prefix = opts.prefix, - cLetter = opts.cLetter, - containerStr = prefix.slice(0, prefix.length - 1), - containerIn = prefix ? - Lib.nestedProperty(traceIn, containerStr).get() || {} : - traceIn, - containerOut = prefix ? - Lib.nestedProperty(traceOut, containerStr).get() || {} : - traceOut, - minIn = containerIn[cLetter + 'min'], - maxIn = containerIn[cLetter + 'max'], - sclIn = containerIn.colorscale; + var prefix = opts.prefix; + var cLetter = opts.cLetter; + var containerIn = npMaybe(traceIn, prefix); + var containerOut = npMaybe(traceOut, prefix); + var template = npMaybe(traceOut._template || {}, prefix) || {}; + var minIn = containerIn[cLetter + 'min']; + var maxIn = containerIn[cLetter + 'max']; var validMinMax = isNumeric(minIn) && isNumeric(maxIn) && (minIn < maxIn); coerce(prefix + cLetter + 'auto', !validMinMax); coerce(prefix + cLetter + 'min'); @@ -18465,19 +18537,17 @@ module.exports = function colorScaleDefaults(traceIn, traceOut, layout, coerce, // handles both the trace case (autocolorscale is false by default) and // the marker and marker.line case (autocolorscale is true by default) + var sclIn = containerIn.colorscale; + var sclTemplate = template.colorscale; var autoColorscaleDflt; if(sclIn !== undefined) autoColorscaleDflt = !isValidScale(sclIn); + if(sclTemplate !== undefined) autoColorscaleDflt = !isValidScale(sclTemplate); coerce(prefix + 'autocolorscale', autoColorscaleDflt); - var sclOut = coerce(prefix + 'colorscale'); - // reversescale is handled at the containerOut level - var reverseScale = coerce(prefix + 'reversescale'); - if(reverseScale) containerOut.colorscale = flipScale(sclOut); + coerce(prefix + 'colorscale'); + coerce(prefix + 'reversescale'); - // ... until Scatter.colorbar can handle marker line colorbars - if(prefix === 'marker.line.') return; - - if(!opts.noScale) { + if(!opts.noScale && prefix !== 'marker.line.') { // handles both the trace case where the dflt is listed in attributes and // the marker case where the dflt is determined by hasColorbar var showScaleDflt; @@ -18488,111 +18558,9 @@ module.exports = function colorScaleDefaults(traceIn, traceOut, layout, coerce, } }; -},{"../../lib":169,"../colorbar/defaults":54,"../colorbar/has_colorbar":56,"./flip_scale":62,"./is_valid_scale":66,"fast-isnumeric":18}],61:[function(_dereq_,module,exports){ +},{"../../lib":168,"../colorbar/defaults":55,"../colorbar/has_colorbar":57,"./scales":66,"fast-isnumeric":18}],62:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - -/** - * Extract colorscale into numeric domain and color range. - * - * @param {array} scl colorscale array of arrays - * @param {number} cmin minimum color value (used to clamp scale) - * @param {number} cmax maximum color value (used to clamp scale) - */ -module.exports = function extractScale(scl, cmin, cmax) { - var N = scl.length, - domain = new Array(N), - range = new Array(N); - - for(var i = 0; i < N; i++) { - var si = scl[i]; - - domain[i] = cmin + si[0] * (cmax - cmin); - range[i] = si[1]; - } - - return { - domain: domain, - range: range - }; -}; - -},{}],62:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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'; - -module.exports = function flipScale(scl) { - var N = scl.length, - sclNew = new Array(N), - si; - - for(var i = N - 1, j = 0; i >= 0; i--, j++) { - si = scl[i]; - sclNew[j] = [1 - si[0], si[1]]; - } - - return sclNew; -}; - -},{}],63:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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 scales = _dereq_('./scales'); -var defaultScale = _dereq_('./default_scale'); -var isValidScaleArray = _dereq_('./is_valid_scale_array'); - - -module.exports = function getScale(scl, dflt) { - if(!dflt) dflt = defaultScale; - if(!scl) return dflt; - - function parseScale() { - try { - scl = scales[scl] || JSON.parse(scl); - } - catch(e) { - scl = dflt; - } - } - - if(typeof scl === 'string') { - parseScale(); - // occasionally scl is double-JSON encoded... - if(typeof scl === 'string') parseScale(); - } - - if(!isValidScaleArray(scl)) return dflt; - return scl; -}; - -},{"./default_scale":59,"./is_valid_scale_array":67,"./scales":69}],64:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18601,11 +18569,16 @@ module.exports = function getScale(scl, dflt) { 'use strict'; +var d3 = _dereq_('d3'); +var tinycolor = _dereq_('tinycolor2'); var isNumeric = _dereq_('fast-isnumeric'); -var Lib = _dereq_('../../lib'); -var isValidScale = _dereq_('./is_valid_scale'); -module.exports = function hasColorscale(trace, containerStr) { +var Lib = _dereq_('../../lib'); +var Color = _dereq_('../color'); + +var isValidScale = _dereq_('./scales').isValid; + +function hasColorscale(trace, containerStr) { var container = containerStr ? Lib.nestedProperty(trace, containerStr).get() || {} : trace; @@ -18630,117 +18603,61 @@ module.exports = function hasColorscale(trace, containerStr) { Lib.isPlainObject(container.colorbar) ) ); -}; +} -},{"../../lib":169,"./is_valid_scale":66,"fast-isnumeric":18}],65:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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. -*/ + * Extract colorscale into numeric domain and color range. + * + * @param {object} cont colorscale container (e.g. trace, marker) + * - colorscale {array of arrays} + * - cmin/zmin {number} + * - cmax/zmax {number} + * - reversescale {boolean} + * @param {object} opts + * - cLetter {string} 'c' (for cmin/cmax) or 'z' (for zmin/zmax) + * + * @return {object} + * - domain {array} + * - range {array} + */ +function extractScale(cont, opts) { + var cLetter = opts.cLetter; + var scl = cont.reversescale ? + flipScale(cont.colorscale) : + cont.colorscale; -'use strict'; + // minimum color value (used to clamp scale) + var cmin = cont[cLetter + 'min']; + // maximum color value (used to clamp scale) + var cmax = cont[cLetter + 'max']; -exports.scales = _dereq_('./scales'); + var N = scl.length; + var domain = new Array(N); + var range = new Array(N); -exports.defaultScale = _dereq_('./default_scale'); - -exports.attributes = _dereq_('./attributes'); - -exports.handleDefaults = _dereq_('./defaults'); - -exports.calc = _dereq_('./calc'); - -exports.hasColorscale = _dereq_('./has_colorscale'); - -exports.isValidScale = _dereq_('./is_valid_scale'); - -exports.getScale = _dereq_('./get_scale'); - -exports.flipScale = _dereq_('./flip_scale'); - -exports.extractScale = _dereq_('./extract_scale'); - -exports.makeColorScaleFunc = _dereq_('./make_color_scale_func'); - -},{"./attributes":57,"./calc":58,"./default_scale":59,"./defaults":60,"./extract_scale":61,"./flip_scale":62,"./get_scale":63,"./has_colorscale":64,"./is_valid_scale":66,"./make_color_scale_func":68,"./scales":69}],66:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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 scales = _dereq_('./scales'); -var isValidScaleArray = _dereq_('./is_valid_scale_array'); - - -module.exports = function isValidScale(scl) { - if(scales[scl] !== undefined) return true; - else return isValidScaleArray(scl); -}; - -},{"./is_valid_scale_array":67,"./scales":69}],67:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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 tinycolor = _dereq_('tinycolor2'); - - -module.exports = function isValidScaleArray(scl) { - var highestVal = 0; - - if(!Array.isArray(scl) || scl.length < 2) return false; - - if(!scl[0] || !scl[scl.length - 1]) return false; - - if(+scl[0][0] !== 0 || +scl[scl.length - 1][0] !== 1) return false; - - for(var i = 0; i < scl.length; i++) { + for(var i = 0; i < N; i++) { var si = scl[i]; - - if(si.length !== 2 || +si[0] < highestVal || !tinycolor(si[1]).isValid()) { - return false; - } - - highestVal = +si[0]; + domain[i] = cmin + si[0] * (cmax - cmin); + range[i] = si[1]; } - return true; -}; + return { + domain: domain, + range: range + }; +} -},{"tinycolor2":33}],68:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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. -*/ +function flipScale(scl) { + var N = scl.length; + var sclNew = new Array(N); - -'use strict'; - -var d3 = _dereq_('d3'); -var tinycolor = _dereq_('tinycolor2'); -var isNumeric = _dereq_('fast-isnumeric'); - -var Color = _dereq_('../color'); + for(var i = N - 1, j = 0; i >= 0; i--, j++) { + var si = scl[i]; + sclNew[j] = [1 - si[0], si[1]]; + } + return sclNew; +} /** * General colorscale function generator. @@ -18755,13 +18672,13 @@ var Color = _dereq_('../color'); * * @return {function} */ -module.exports = function makeColorScaleFunc(specs, opts) { +function makeColorScaleFunc(specs, opts) { opts = opts || {}; - var domain = specs.domain, - range = specs.range, - N = range.length, - _range = new Array(N); + var domain = specs.domain; + var range = specs.range; + var N = range.length; + var _range = new Array(N); for(var i = 0; i < N; i++) { var rgba = tinycolor(range[i]).toRgb(); @@ -18773,9 +18690,9 @@ module.exports = function makeColorScaleFunc(specs, opts) { .range(_range) .clamp(true); - var noNumericCheck = opts.noNumericCheck, - returnArray = opts.returnArray, - sclFunc; + var noNumericCheck = opts.noNumericCheck; + var returnArray = opts.returnArray; + var sclFunc; if(noNumericCheck && returnArray) { sclFunc = _sclFunc; @@ -18807,7 +18724,7 @@ module.exports = function makeColorScaleFunc(specs, opts) { sclFunc.range = function() { return range; }; return sclFunc; -}; +} function colorArray2rbga(colorArray) { var colorObj = { @@ -18820,9 +18737,16 @@ function colorArray2rbga(colorArray) { return tinycolor(colorObj).toRgbString(); } -},{"../color":50,"d3":16,"fast-isnumeric":18,"tinycolor2":33}],69:[function(_dereq_,module,exports){ +module.exports = { + hasColorscale: hasColorscale, + extractScale: extractScale, + flipScale: flipScale, + makeColorScaleFunc: makeColorScaleFunc +}; + +},{"../../lib":168,"../color":51,"./scales":66,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],63:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18831,8 +18755,116 @@ function colorArray2rbga(colorArray) { 'use strict'; +var scales = _dereq_('./scales'); +var helpers = _dereq_('./helpers'); module.exports = { + moduleType: 'component', + name: 'colorscale', + + attributes: _dereq_('./attributes'), + layoutAttributes: _dereq_('./layout_attributes'), + + supplyLayoutDefaults: _dereq_('./layout_defaults'), + handleDefaults: _dereq_('./defaults'), + crossTraceDefaults: _dereq_('./cross_trace_defaults'), + + calc: _dereq_('./calc'), + + // ./scales.js is required in lib/coerce.js ; + // it needs to be a seperate module to avoid circular a dependency + scales: scales.scales, + defaultScale: scales.defaultScale, + getScale: scales.get, + isValidScale: scales.isValid, + + hasColorscale: helpers.hasColorscale, + flipScale: helpers.flipScale, + extractScale: helpers.extractScale, + makeColorScaleFunc: helpers.makeColorScaleFunc +}; + +},{"./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. +* 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 scales = _dereq_('./scales').scales; + +var msg = 'Note that `autocolorscale` must be true for this attribute to work.'; + +module.exports = { + editType: 'calc', + sequential: { + valType: 'colorscale', + dflt: scales.Reds, + + editType: 'calc', + + }, + sequentialminus: { + valType: 'colorscale', + dflt: scales.Blues, + + editType: 'calc', + + }, + diverging: { + valType: 'colorscale', + dflt: scales.RdBu, + + editType: 'calc', + + } +}; + +},{"./scales":66}],65:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, 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 Lib = _dereq_('../../lib'); +var colorscaleAttrs = _dereq_('./layout_attributes'); +var Template = _dereq_('../../plot_api/plot_template'); + +module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) { + var colorscaleIn = layoutIn.colorscale; + var colorscaleOut = Template.newContainer(layoutOut, 'colorscale'); + function coerce(attr, dflt) { + return Lib.coerce(colorscaleIn, colorscaleOut, colorscaleAttrs, attr, dflt); + } + + coerce('sequential'); + coerce('sequentialminus'); + coerce('diverging'); +}; + +},{"../../lib":168,"../../plot_api/plot_template":202,"./layout_attributes":64}],66:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, 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 tinycolor = _dereq_('tinycolor2'); + +var scales = { 'Greys': [ [0, 'rgb(0,0,0)'], [1, 'rgb(255,255,255)'] ], @@ -18963,9 +18995,69 @@ module.exports = { ] }; -},{}],70:[function(_dereq_,module,exports){ +var defaultScale = scales.RdBu; + +function getScale(scl, dflt) { + if(!dflt) dflt = defaultScale; + if(!scl) return dflt; + + function parseScale() { + try { + scl = scales[scl] || JSON.parse(scl); + } catch(e) { + scl = dflt; + } + } + + if(typeof scl === 'string') { + parseScale(); + // occasionally scl is double-JSON encoded... + if(typeof scl === 'string') parseScale(); + } + + if(!isValidScaleArray(scl)) return dflt; + return scl; +} + + +function isValidScaleArray(scl) { + var highestVal = 0; + + if(!Array.isArray(scl) || scl.length < 2) return false; + + if(!scl[0] || !scl[scl.length - 1]) return false; + + if(+scl[0][0] !== 0 || +scl[scl.length - 1][0] !== 1) return false; + + for(var i = 0; i < scl.length; i++) { + var si = scl[i]; + + if(si.length !== 2 || +si[0] < highestVal || !tinycolor(si[1]).isValid()) { + return false; + } + + highestVal = +si[0]; + } + + return true; +} + +function isValidScale(scl) { + if(scales[scl] !== undefined) return true; + else return isValidScaleArray(scl); +} + +module.exports = { + scales: scales, + defaultScale: defaultScale, + + get: getScale, + isValid: isValidScale +}; + +},{"tinycolor2":34}],67:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18981,9 +19073,9 @@ module.exports = { // based on where you are, and return the fraction corresponding to // that position on the object module.exports = function align(v, dv, v0, v1, anchor) { - var vmin = (v - v0) / (v1 - v0), - vmax = vmin + dv / (v1 - v0), - vc = (vmin + vmax) / 2; + var vmin = (v - v0) / (v1 - v0); + var vmax = vmin + dv / (v1 - v0); + var vc = (vmin + vmax) / 2; // explicitly specified anchor if(anchor === 'left' || anchor === 'bottom') return vmin; @@ -18996,9 +19088,9 @@ module.exports = function align(v, dv, v0, v1, anchor) { return vc; }; -},{}],71:[function(_dereq_,module,exports){ +},{}],68:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19034,9 +19126,9 @@ module.exports = function getCursor(x, y, xanchor, yanchor) { return cursorset[y][x]; }; -},{"../../lib":169}],72:[function(_dereq_,module,exports){ +},{"../../lib":168}],69:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19161,8 +19253,6 @@ dragElement.init = function init(options) { var clampFn = options.clampFn || _clampFn; function onStart(e) { - e.preventDefault(); - // make dragging and dragged into properties of gd // so that others can look at and modify them gd._dragged = false; @@ -19204,11 +19294,15 @@ dragElement.init = function init(options) { document.documentElement.style.cursor = window.getComputedStyle(element).cursor; } - document.addEventListener('mousemove', onMove); document.addEventListener('mouseup', onDone); - document.addEventListener('touchmove', onMove); document.addEventListener('touchend', onDone); + if(options.dragmode !== false) { + e.preventDefault(); + document.addEventListener('mousemove', onMove); + document.addEventListener('touchmove', onMove); + } + return; } @@ -19232,12 +19326,14 @@ dragElement.init = function init(options) { } function onDone(e) { - document.removeEventListener('mousemove', onMove); - document.removeEventListener('mouseup', onDone); - document.removeEventListener('touchmove', onMove); - document.removeEventListener('touchend', onDone); + if(options.dragmode !== false) { + e.preventDefault(); + document.removeEventListener('mousemove', onMove); + document.removeEventListener('touchmove', onMove); + } - e.preventDefault(); + document.removeEventListener('mouseup', onDone); + document.removeEventListener('touchend', onDone); if(hasHover) { Lib.removeElement(dragCover); @@ -19331,9 +19427,9 @@ function pointerOffset(e) { ); } -},{"../../constants/interactions":150,"../../lib":169,"../../plots/cartesian/constants":219,"../../registry":259,"./align":70,"./cursor":71,"./unhover":73,"has-hover":20,"has-passive-events":21,"mouse-event-offset":23}],73:[function(_dereq_,module,exports){ +},{"../../constants/interactions":148,"../../lib":168,"../../plots/cartesian/constants":218,"../../registry":257,"./align":67,"./cursor":68,"./unhover":70,"has-hover":20,"has-passive-events":21,"mouse-event-offset":24}],70:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19389,9 +19485,9 @@ unhover.raw = function unhoverRaw(gd, evt) { } }; -},{"../../lib/events":162,"../../lib/get_graph_div":167,"../../lib/throttle":192,"../fx/constants":87}],74:[function(_dereq_,module,exports){ +},{"../../lib/events":161,"../../lib/get_graph_div":166,"../../lib/throttle":190,"../fx/constants":84}],71:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19414,9 +19510,9 @@ exports.dash = { }; -},{}],75:[function(_dereq_,module,exports){ +},{}],72:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19550,9 +19646,9 @@ drawing.crispRound = function(gd, lineWidth, dflt) { drawing.singleLineStyle = function(d, s, lw, lc, ld) { s.style('fill', 'none'); - var line = (((d || [])[0] || {}).trace || {}).line || {}, - lw1 = lw || line.width||0, - dash = ld || line.dash || ''; + var line = (((d || [])[0] || {}).trace || {}).line || {}; + var lw1 = lw || line.width||0; + var dash = ld || line.dash || ''; Color.stroke(s, lc || line.color); drawing.dashLine(s, dash, lw1); @@ -19561,9 +19657,9 @@ drawing.singleLineStyle = function(d, s, lw, lc, ld) { drawing.lineGroupStyle = function(s, lw, lc, ld) { s.style('fill', 'none') .each(function(d) { - var line = (((d || [])[0] || {}).trace || {}).line || {}, - lw1 = lw || line.width||0, - dash = ld || line.dash || ''; + var line = (((d || [])[0] || {}).trace || {}).line || {}; + var lw1 = lw || line.width||0; + var dash = ld || line.dash || ''; d3.select(this) .call(Color.stroke, lc || line.color) @@ -19615,13 +19711,11 @@ drawing.fillGroupStyle = function(s) { s.style('stroke-width', 0) .each(function(d) { var shape = d3.select(this); - try { + // N.B. 'd' won't be a calcdata item when + // fill !== 'none' on a segment-less and marker-less trace + if(d[0].trace) { shape.call(Color.fill, d[0].trace.fillcolor); } - catch(e) { - Lib.error(e, s); - shape.remove(); - } }); }; @@ -19654,9 +19748,10 @@ Object.keys(SYMBOLDEFS).forEach(function(k) { drawing.symbolNoFill[symDef.n] = true; } }); -var MAXSYMBOL = drawing.symbolNames.length, - // add a dot in the middle of the symbol - DOTPATH = 'M0,0.5L0.5,0L0,-0.5L-0.5,0Z'; + +var MAXSYMBOL = drawing.symbolNames.length; +// add a dot in the middle of the symbol +var DOTPATH = 'M0,0.5L0.5,0L0,-0.5L-0.5,0Z'; drawing.symbolNumber = function(v) { if(typeof v === 'string') { @@ -20062,7 +20157,7 @@ drawing.tryColorscale = function(marker, prefix) { if(scl && Lib.isArrayOrTypedArray(colorArray)) { return Colorscale.makeColorScaleFunc( - Colorscale.extractScale(scl, cont.cmin, cont.cmax) + Colorscale.extractScale(cont, {cLetter: 'c'}) ); } } @@ -20160,8 +20255,9 @@ drawing.selectedTextStyle = function(s, trace) { var CatmullRomExp = 0.5; drawing.smoothopen = function(pts, smoothness) { if(pts.length < 3) { return 'M' + pts.join('L');} - var path = 'M' + pts[0], - tangents = [], i; + var path = 'M' + pts[0]; + var tangents = []; + var i; for(i = 1; i < pts.length - 1; i++) { tangents.push(makeTangent(pts[i - 1], pts[i], pts[i + 1], smoothness)); } @@ -20175,11 +20271,10 @@ drawing.smoothopen = function(pts, smoothness) { drawing.smoothclosed = function(pts, smoothness) { if(pts.length < 3) { return 'M' + pts.join('L') + 'Z'; } - var path = 'M' + pts[0], - pLast = pts.length - 1, - tangents = [makeTangent(pts[pLast], - pts[0], pts[1], smoothness)], - i; + var path = 'M' + pts[0]; + var pLast = pts.length - 1; + var tangents = [makeTangent(pts[pLast], pts[0], pts[1], smoothness)]; + var i; for(i = 1; i < pLast; i++) { tangents.push(makeTangent(pts[i - 1], pts[i], pts[i + 1], smoothness)); } @@ -20195,16 +20290,16 @@ drawing.smoothclosed = function(pts, smoothness) { }; function makeTangent(prevpt, thispt, nextpt, smoothness) { - var d1x = prevpt[0] - thispt[0], - d1y = prevpt[1] - thispt[1], - d2x = nextpt[0] - thispt[0], - d2y = nextpt[1] - thispt[1], - d1a = Math.pow(d1x * d1x + d1y * d1y, CatmullRomExp / 2), - d2a = Math.pow(d2x * d2x + d2y * d2y, CatmullRomExp / 2), - numx = (d2a * d2a * d1x - d1a * d1a * d2x) * smoothness, - numy = (d2a * d2a * d1y - d1a * d1a * d2y) * smoothness, - denom1 = 3 * d2a * (d1a + d2a), - denom2 = 3 * d1a * (d1a + d2a); + var d1x = prevpt[0] - thispt[0]; + var d1y = prevpt[1] - thispt[1]; + var d2x = nextpt[0] - thispt[0]; + var d2y = nextpt[1] - thispt[1]; + var d1a = Math.pow(d1x * d1x + d1y * d1y, CatmullRomExp / 2); + var d2a = Math.pow(d2x * d2x + d2y * d2y, CatmullRomExp / 2); + var numx = (d2a * d2a * d1x - d1a * d1a * d2x) * smoothness; + var numy = (d2a * d2a * d1y - d1a * d1a * d2y) * smoothness; + var denom1 = 3 * d2a * (d1a + d2a); + var denom2 = 3 * d1a * (d1a + d2a); return [ [ d3.round(thispt[0] + (denom1 && numx / denom1), 2), @@ -20423,40 +20518,36 @@ function nodeHash(node) { node.getAttribute('style'); } -/* - * make a robust clipPath url from a local id - * note! We'd better not be exporting from a page - * with a or the svg will not be portable! +/** + * Set clipPath URL in a way that work for all situations. + * + * In details, graphs on pages with HTML tags need to prepend + * the clip path ids with the page's base url EXCEPT during toImage exports. + * + * @param {d3 selection} s : node to add clip-path attribute + * @param {string} localId : local clip-path (w/o base url) id + * @param {DOM element || object} gd + * - context._baseUrl {string} + * - context._exportedPlot {boolean} */ -drawing.setClipUrl = function(s, localId) { +drawing.setClipUrl = function(s, localId, gd) { if(!localId) { s.attr('clip-path', null); return; } - if(drawing.baseUrl === undefined) { - var base = d3.select('base'); + var context = gd._context; + var baseUrl = context._exportedPlot ? '' : (context._baseUrl || ''); - // Stash base url once and for all! - // We may have to stash this elsewhere when - // we'll try to support for child windows - // more info -> https://github.com/plotly/plotly.js/issues/702 - if(base.size() && base.attr('href')) { - drawing.baseUrl = window.location.href.split('#')[0]; - } else { - drawing.baseUrl = ''; - } - } - - s.attr('clip-path', 'url(' + drawing.baseUrl + '#' + localId + ')'); + s.attr('clip-path', 'url(' + baseUrl + '#' + localId + ')'); }; drawing.getTranslate = function(element) { // Note the separator [^\d] between x and y in this regex // We generally use ',' but IE will convert it to ' ' - var re = /.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/, - getter = element.attr ? 'attr' : 'getAttribute', - transform = element[getter]('transform') || ''; + var re = /.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/; + var getter = element.attr ? 'attr' : 'getAttribute'; + var transform = element[getter]('transform') || ''; var translate = transform.replace(re, function(match, p1, p2) { return [p1, p2].join(' '); @@ -20470,11 +20561,10 @@ drawing.getTranslate = function(element) { }; drawing.setTranslate = function(element, x, y) { - - var re = /(\btranslate\(.*?\);?)/, - getter = element.attr ? 'attr' : 'getAttribute', - setter = element.attr ? 'attr' : 'setAttribute', - transform = element[getter]('transform') || ''; + var re = /(\btranslate\(.*?\);?)/; + var getter = element.attr ? 'attr' : 'getAttribute'; + var setter = element.attr ? 'attr' : 'setAttribute'; + var transform = element[getter]('transform') || ''; x = x || 0; y = y || 0; @@ -20489,10 +20579,9 @@ drawing.setTranslate = function(element, x, y) { }; drawing.getScale = function(element) { - - var re = /.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/, - getter = element.attr ? 'attr' : 'getAttribute', - transform = element[getter]('transform') || ''; + var re = /.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/; + var getter = element.attr ? 'attr' : 'getAttribute'; + var transform = element[getter]('transform') || ''; var translate = transform.replace(re, function(match, p1, p2) { return [p1, p2].join(' '); @@ -20506,11 +20595,10 @@ drawing.getScale = function(element) { }; drawing.setScale = function(element, x, y) { - - var re = /(\bscale\(.*?\);?)/, - getter = element.attr ? 'attr' : 'getAttribute', - setter = element.attr ? 'attr' : 'setAttribute', - transform = element[getter]('transform') || ''; + var re = /(\bscale\(.*?\);?)/; + var getter = element.attr ? 'attr' : 'getAttribute'; + var setter = element.attr ? 'attr' : 'setAttribute'; + var transform = element[getter]('transform') || ''; x = x || 1; y = y || 1; @@ -20580,9 +20668,9 @@ drawing.setTextPointsScale = function(selection, xScale, yScale) { }); }; -},{"../../constants/alignment":148,"../../constants/interactions":150,"../../constants/xmlns_namespaces":152,"../../lib":169,"../../lib/svg_text_utils":191,"../../registry":259,"../../traces/scatter/make_bubble_size_func":383,"../../traces/scatter/subtypes":390,"../color":50,"../colorscale":65,"./symbol_defs":76,"d3":16,"fast-isnumeric":18,"tinycolor2":33}],76:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../constants/interactions":148,"../../constants/xmlns_namespaces":150,"../../lib":168,"../../lib/svg_text_utils":189,"../../registry":257,"../../traces/scatter/make_bubble_size_func":384,"../../traces/scatter/subtypes":391,"../color":51,"../colorscale":63,"./symbol_defs":73,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],73:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -20628,8 +20716,8 @@ module.exports = { cross: { n: 3, f: function(r) { - var rc = d3.round(r * 0.4, 2), - rc2 = d3.round(r * 1.2, 2); + var rc = d3.round(r * 0.4, 2); + var rc2 = d3.round(r * 1.2, 2); return 'M' + rc2 + ',' + rc + 'H' + rc + 'V' + rc2 + 'H-' + rc + 'V' + rc + 'H-' + rc2 + 'V-' + rc + 'H-' + rc + 'V-' + rc2 + 'H' + rc + 'V-' + rc + 'H' + rc2 + 'Z'; @@ -20638,90 +20726,90 @@ module.exports = { x: { n: 4, f: function(r) { - var rx = d3.round(r * 0.8 / Math.sqrt(2), 2), - ne = 'l' + rx + ',' + rx, - se = 'l' + rx + ',-' + rx, - sw = 'l-' + rx + ',-' + rx, - nw = 'l-' + rx + ',' + rx; + var rx = d3.round(r * 0.8 / Math.sqrt(2), 2); + var ne = 'l' + rx + ',' + rx; + var se = 'l' + rx + ',-' + rx; + var sw = 'l-' + rx + ',-' + rx; + var nw = 'l-' + rx + ',' + rx; return 'M0,' + rx + ne + se + sw + se + sw + nw + sw + nw + ne + nw + ne + 'Z'; } }, 'triangle-up': { n: 5, f: function(r) { - var rt = d3.round(r * 2 / Math.sqrt(3), 2), - r2 = d3.round(r / 2, 2), - rs = d3.round(r, 2); + var rt = d3.round(r * 2 / Math.sqrt(3), 2); + var r2 = d3.round(r / 2, 2); + var rs = d3.round(r, 2); return 'M-' + rt + ',' + r2 + 'H' + rt + 'L0,-' + rs + 'Z'; } }, 'triangle-down': { n: 6, f: function(r) { - var rt = d3.round(r * 2 / Math.sqrt(3), 2), - r2 = d3.round(r / 2, 2), - rs = d3.round(r, 2); + var rt = d3.round(r * 2 / Math.sqrt(3), 2); + var r2 = d3.round(r / 2, 2); + var rs = d3.round(r, 2); return 'M-' + rt + ',-' + r2 + 'H' + rt + 'L0,' + rs + 'Z'; } }, 'triangle-left': { n: 7, f: function(r) { - var rt = d3.round(r * 2 / Math.sqrt(3), 2), - r2 = d3.round(r / 2, 2), - rs = d3.round(r, 2); + var rt = d3.round(r * 2 / Math.sqrt(3), 2); + var r2 = d3.round(r / 2, 2); + var rs = d3.round(r, 2); return 'M' + r2 + ',-' + rt + 'V' + rt + 'L-' + rs + ',0Z'; } }, 'triangle-right': { n: 8, f: function(r) { - var rt = d3.round(r * 2 / Math.sqrt(3), 2), - r2 = d3.round(r / 2, 2), - rs = d3.round(r, 2); + var rt = d3.round(r * 2 / Math.sqrt(3), 2); + var r2 = d3.round(r / 2, 2); + var rs = d3.round(r, 2); return 'M-' + r2 + ',-' + rt + 'V' + rt + 'L' + rs + ',0Z'; } }, 'triangle-ne': { n: 9, f: function(r) { - var r1 = d3.round(r * 0.6, 2), - r2 = d3.round(r * 1.2, 2); + var r1 = d3.round(r * 0.6, 2); + var r2 = d3.round(r * 1.2, 2); return 'M-' + r2 + ',-' + r1 + 'H' + r1 + 'V' + r2 + 'Z'; } }, 'triangle-se': { n: 10, f: function(r) { - var r1 = d3.round(r * 0.6, 2), - r2 = d3.round(r * 1.2, 2); + var r1 = d3.round(r * 0.6, 2); + var r2 = d3.round(r * 1.2, 2); return 'M' + r1 + ',-' + r2 + 'V' + r1 + 'H-' + r2 + 'Z'; } }, 'triangle-sw': { n: 11, f: function(r) { - var r1 = d3.round(r * 0.6, 2), - r2 = d3.round(r * 1.2, 2); + var r1 = d3.round(r * 0.6, 2); + var r2 = d3.round(r * 1.2, 2); return 'M' + r2 + ',' + r1 + 'H-' + r1 + 'V-' + r2 + 'Z'; } }, 'triangle-nw': { n: 12, f: function(r) { - var r1 = d3.round(r * 0.6, 2), - r2 = d3.round(r * 1.2, 2); + var r1 = d3.round(r * 0.6, 2); + var r2 = d3.round(r * 1.2, 2); return 'M-' + r1 + ',' + r2 + 'V-' + r1 + 'H' + r2 + 'Z'; } }, pentagon: { n: 13, f: function(r) { - var x1 = d3.round(r * 0.951, 2), - x2 = d3.round(r * 0.588, 2), - y0 = d3.round(-r, 2), - y1 = d3.round(r * -0.309, 2), - y2 = d3.round(r * 0.809, 2); + var x1 = d3.round(r * 0.951, 2); + var x2 = d3.round(r * 0.588, 2); + var y0 = d3.round(-r, 2); + var y1 = d3.round(r * -0.309, 2); + var y2 = d3.round(r * 0.809, 2); return 'M' + x1 + ',' + y1 + 'L' + x2 + ',' + y2 + 'H-' + x2 + 'L-' + x1 + ',' + y1 + 'L0,' + y0 + 'Z'; } @@ -20729,9 +20817,9 @@ module.exports = { hexagon: { n: 14, f: function(r) { - var y0 = d3.round(r, 2), - y1 = d3.round(r / 2, 2), - x = d3.round(r * Math.sqrt(3) / 2, 2); + var y0 = d3.round(r, 2); + var y1 = d3.round(r / 2, 2); + var x = d3.round(r * Math.sqrt(3) / 2, 2); return 'M' + x + ',-' + y1 + 'V' + y1 + 'L0,' + y0 + 'L-' + x + ',' + y1 + 'V-' + y1 + 'L0,-' + y0 + 'Z'; } @@ -20739,9 +20827,9 @@ module.exports = { hexagon2: { n: 15, f: function(r) { - var x0 = d3.round(r, 2), - x1 = d3.round(r / 2, 2), - y = d3.round(r * Math.sqrt(3) / 2, 2); + var x0 = d3.round(r, 2); + var x1 = d3.round(r / 2, 2); + var y = d3.round(r * Math.sqrt(3) / 2, 2); return 'M-' + x1 + ',' + y + 'H' + x1 + 'L' + x0 + ',0L' + x1 + ',-' + y + 'H-' + x1 + 'L-' + x0 + ',0Z'; } @@ -20749,8 +20837,8 @@ module.exports = { octagon: { n: 16, f: function(r) { - var a = d3.round(r * 0.924, 2), - b = d3.round(r * 0.383, 2); + var a = d3.round(r * 0.924, 2); + var b = d3.round(r * 0.383, 2); return 'M-' + b + ',-' + a + 'H' + b + 'L' + a + ',-' + b + 'V' + b + 'L' + b + ',' + a + 'H-' + b + 'L-' + a + ',' + b + 'V-' + b + 'Z'; } @@ -20758,16 +20846,16 @@ module.exports = { star: { n: 17, f: function(r) { - var rs = r * 1.4, - x1 = d3.round(rs * 0.225, 2), - x2 = d3.round(rs * 0.951, 2), - x3 = d3.round(rs * 0.363, 2), - x4 = d3.round(rs * 0.588, 2), - y0 = d3.round(-rs, 2), - y1 = d3.round(rs * -0.309, 2), - y3 = d3.round(rs * 0.118, 2), - y4 = d3.round(rs * 0.809, 2), - y5 = d3.round(rs * 0.382, 2); + var rs = r * 1.4; + var x1 = d3.round(rs * 0.225, 2); + var x2 = d3.round(rs * 0.951, 2); + var x3 = d3.round(rs * 0.363, 2); + var x4 = d3.round(rs * 0.588, 2); + var y0 = d3.round(-rs, 2); + var y1 = d3.round(rs * -0.309, 2); + var y3 = d3.round(rs * 0.118, 2); + var y4 = d3.round(rs * 0.809, 2); + var y5 = d3.round(rs * 0.382, 2); return 'M' + x1 + ',' + y1 + 'H' + x2 + 'L' + x3 + ',' + y3 + 'L' + x4 + ',' + y4 + 'L0,' + y5 + 'L-' + x4 + ',' + y4 + 'L-' + x3 + ',' + y3 + 'L-' + x2 + ',' + y1 + 'H-' + x1 + @@ -20777,9 +20865,9 @@ module.exports = { hexagram: { n: 18, f: function(r) { - var y = d3.round(r * 0.66, 2), - x1 = d3.round(r * 0.38, 2), - x2 = d3.round(r * 0.76, 2); + var y = d3.round(r * 0.66, 2); + var x1 = d3.round(r * 0.38, 2); + var x2 = d3.round(r * 0.76, 2); return 'M-' + x2 + ',0l-' + x1 + ',-' + y + 'h' + x2 + 'l' + x1 + ',-' + y + 'l' + x1 + ',' + y + 'h' + x2 + 'l-' + x1 + ',' + y + 'l' + x1 + ',' + y + 'h-' + x2 + @@ -20789,11 +20877,11 @@ module.exports = { 'star-triangle-up': { n: 19, f: function(r) { - var x = d3.round(r * Math.sqrt(3) * 0.8, 2), - y1 = d3.round(r * 0.8, 2), - y2 = d3.round(r * 1.6, 2), - rc = d3.round(r * 4, 2), - aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; + var x = d3.round(r * Math.sqrt(3) * 0.8, 2); + var y1 = d3.round(r * 0.8, 2); + var y2 = d3.round(r * 1.6, 2); + var rc = d3.round(r * 4, 2); + var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; return 'M-' + x + ',' + y1 + aPart + x + ',' + y1 + aPart + '0,-' + y2 + aPart + '-' + x + ',' + y1 + 'Z'; } @@ -20801,11 +20889,11 @@ module.exports = { 'star-triangle-down': { n: 20, f: function(r) { - var x = d3.round(r * Math.sqrt(3) * 0.8, 2), - y1 = d3.round(r * 0.8, 2), - y2 = d3.round(r * 1.6, 2), - rc = d3.round(r * 4, 2), - aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; + var x = d3.round(r * Math.sqrt(3) * 0.8, 2); + var y1 = d3.round(r * 0.8, 2); + var y2 = d3.round(r * 1.6, 2); + var rc = d3.round(r * 4, 2); + var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; return 'M' + x + ',-' + y1 + aPart + '-' + x + ',-' + y1 + aPart + '0,' + y2 + aPart + x + ',-' + y1 + 'Z'; } @@ -20813,9 +20901,9 @@ module.exports = { 'star-square': { n: 21, f: function(r) { - var rp = d3.round(r * 1.1, 2), - rc = d3.round(r * 2, 2), - aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; + var rp = d3.round(r * 1.1, 2); + var rc = d3.round(r * 2, 2); + var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; return 'M-' + rp + ',-' + rp + aPart + '-' + rp + ',' + rp + aPart + rp + ',' + rp + aPart + rp + ',-' + rp + aPart + '-' + rp + ',-' + rp + 'Z'; @@ -20824,9 +20912,9 @@ module.exports = { 'star-diamond': { n: 22, f: function(r) { - var rp = d3.round(r * 1.4, 2), - rc = d3.round(r * 1.9, 2), - aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; + var rp = d3.round(r * 1.4, 2); + var rc = d3.round(r * 1.9, 2); + var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 '; return 'M-' + rp + ',0' + aPart + '0,' + rp + aPart + rp + ',0' + aPart + '0,-' + rp + aPart + '-' + rp + ',0' + 'Z'; @@ -20835,16 +20923,16 @@ module.exports = { 'diamond-tall': { n: 23, f: function(r) { - var x = d3.round(r * 0.7, 2), - y = d3.round(r * 1.4, 2); + var x = d3.round(r * 0.7, 2); + var y = d3.round(r * 1.4, 2); return 'M0,' + y + 'L' + x + ',0L0,-' + y + 'L-' + x + ',0Z'; } }, 'diamond-wide': { n: 24, f: function(r) { - var x = d3.round(r * 1.4, 2), - y = d3.round(r * 0.7, 2); + var x = d3.round(r * 1.4, 2); + var y = d3.round(r * 0.7, 2); return 'M0,' + y + 'L' + x + ',0L0,-' + y + 'L-' + x + ',0Z'; } }, @@ -20878,8 +20966,8 @@ module.exports = { 'circle-x': { n: 28, f: function(r) { - var rs = d3.round(r, 2), - rc = d3.round(r / Math.sqrt(2), 2); + var rs = d3.round(r, 2); + var rc = d3.round(r / Math.sqrt(2), 2); return 'M' + rc + ',' + rc + 'L-' + rc + ',-' + rc + 'M' + rc + ',-' + rc + 'L-' + rc + ',' + rc + 'M' + rs + ',0A' + rs + ',' + rs + ' 0 1,1 0,-' + rs + @@ -20922,8 +21010,8 @@ module.exports = { 'diamond-x': { n: 32, f: function(r) { - var rd = d3.round(r * 1.3, 2), - r2 = d3.round(r * 0.65, 2); + var rd = d3.round(r * 1.3, 2); + var r2 = d3.round(r * 0.65, 2); return 'M' + rd + ',0L0,' + rd + 'L-' + rd + ',0L0,-' + rd + 'Z' + 'M-' + r2 + ',-' + r2 + 'L' + r2 + ',' + r2 + 'M-' + r2 + ',' + r2 + 'L' + r2 + ',-' + r2; @@ -20968,8 +21056,8 @@ module.exports = { hash: { n: 36, f: function(r) { - var r1 = d3.round(r / 2, 2), - r2 = d3.round(r, 2); + var r1 = d3.round(r / 2, 2); + var r2 = d3.round(r, 2); return 'M' + r1 + ',' + r2 + 'V-' + r2 + 'm-' + r2 + ',0V' + r2 + 'M' + r2 + ',' + r1 + 'H-' + r2 + @@ -20981,9 +21069,9 @@ module.exports = { 'y-up': { n: 37, f: function(r) { - var x = d3.round(r * 1.2, 2), - y0 = d3.round(r * 1.6, 2), - y1 = d3.round(r * 0.8, 2); + var x = d3.round(r * 1.2, 2); + var y0 = d3.round(r * 1.6, 2); + var y1 = d3.round(r * 0.8, 2); return 'M-' + x + ',' + y1 + 'L0,0M' + x + ',' + y1 + 'L0,0M0,-' + y0 + 'L0,0'; }, needLine: true, @@ -20993,9 +21081,9 @@ module.exports = { 'y-down': { n: 38, f: function(r) { - var x = d3.round(r * 1.2, 2), - y0 = d3.round(r * 1.6, 2), - y1 = d3.round(r * 0.8, 2); + var x = d3.round(r * 1.2, 2); + var y0 = d3.round(r * 1.6, 2); + var y1 = d3.round(r * 0.8, 2); return 'M-' + x + ',-' + y1 + 'L0,0M' + x + ',-' + y1 + 'L0,0M0,' + y0 + 'L0,0'; }, needLine: true, @@ -21005,9 +21093,9 @@ module.exports = { 'y-left': { n: 39, f: function(r) { - var y = d3.round(r * 1.2, 2), - x0 = d3.round(r * 1.6, 2), - x1 = d3.round(r * 0.8, 2); + var y = d3.round(r * 1.2, 2); + var x0 = d3.round(r * 1.6, 2); + var x1 = d3.round(r * 0.8, 2); return 'M' + x1 + ',' + y + 'L0,0M' + x1 + ',-' + y + 'L0,0M-' + x0 + ',0L0,0'; }, needLine: true, @@ -21017,9 +21105,9 @@ module.exports = { 'y-right': { n: 40, f: function(r) { - var y = d3.round(r * 1.2, 2), - x0 = d3.round(r * 1.6, 2), - x1 = d3.round(r * 0.8, 2); + var y = d3.round(r * 1.2, 2); + var x0 = d3.round(r * 1.6, 2); + var x1 = d3.round(r * 0.8, 2); return 'M-' + x1 + ',' + y + 'L0,0M-' + x1 + ',-' + y + 'L0,0M' + x0 + ',0L0,0'; }, needLine: true, @@ -21068,9 +21156,9 @@ module.exports = { } }; -},{"d3":16}],77:[function(_dereq_,module,exports){ +},{"d3":16}],74:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21183,26 +21271,25 @@ module.exports = { } }; -},{}],78:[function(_dereq_,module,exports){ +},{}],75:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); var Registry = _dereq_('../../registry'); var Axes = _dereq_('../../plots/cartesian/axes'); +var Lib = _dereq_('../../lib'); var makeComputeError = _dereq_('./compute_error'); - module.exports = function calc(gd) { var calcdata = gd.calcdata; @@ -21220,9 +21307,9 @@ module.exports = function calc(gd) { }; function calcOneAxis(calcTrace, trace, axis, coord) { - var opts = trace['error_' + coord] || {}, - isVisible = (opts.visible && ['linear', 'log'].indexOf(axis.type) !== -1), - vals = []; + var opts = trace['error_' + coord] || {}; + var isVisible = (opts.visible && ['linear', 'log'].indexOf(axis.type) !== -1); + var vals = []; if(!isVisible) return; @@ -21253,21 +21340,26 @@ function calcOneAxis(calcTrace, trace, axis, coord) { var errors = computeError(calcCoord, iIn); if(isNumeric(errors[0]) && isNumeric(errors[1])) { - var shoe = calcPt[coord + 's'] = calcCoord - errors[0], - hat = calcPt[coord + 'h'] = calcCoord + errors[1]; + var shoe = calcPt[coord + 's'] = calcCoord - errors[0]; + var hat = calcPt[coord + 'h'] = calcCoord + errors[1]; vals.push(shoe, hat); } } - var extremes = Axes.findExtremes(axis, vals, {padded: true}); var axId = axis._id; - trace._extremes[axId].min = trace._extremes[axId].min.concat(extremes.min); - trace._extremes[axId].max = trace._extremes[axId].max.concat(extremes.max); + var baseExtremes = trace._extremes[axId]; + var extremes = Axes.findExtremes( + axis, + vals, + Lib.extendFlat({tozero: baseExtremes.opts.tozero}, {padded: true}) + ); + baseExtremes.min = baseExtremes.min.concat(extremes.min); + baseExtremes.max = baseExtremes.max.concat(extremes.max); } -},{"../../plots/cartesian/axes":214,"../../registry":259,"./compute_error":79,"fast-isnumeric":18}],79:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"../../registry":257,"./compute_error":76,"fast-isnumeric":18}],76:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21294,8 +21386,8 @@ function calcOneAxis(calcTrace, trace, axis, coord) { * - error[1] : " " " " positive " */ module.exports = function makeComputeError(opts) { - var type = opts.type, - symmetric = opts.symmetric; + var type = opts.type; + var symmetric = opts.symmetric; if(type === 'data') { var array = opts.array || []; @@ -21322,8 +21414,8 @@ module.exports = function makeComputeError(opts) { } } else { - var computeErrorValue = makeComputeErrorValue(type, opts.value), - computeErrorValueMinus = makeComputeErrorValue(type, opts.valueminus); + var computeErrorValue = makeComputeErrorValue(type, opts.value); + var computeErrorValueMinus = makeComputeErrorValue(type, opts.valueminus); if(symmetric || opts.valueminus === undefined) { return function computeError(dataPt) { @@ -21369,9 +21461,9 @@ function makeComputeErrorValue(type, value) { } } -},{}],80:[function(_dereq_,module,exports){ +},{}],77:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21408,8 +21500,8 @@ module.exports = function(traceIn, traceOut, defaultColor, opts) { if(visible === false) return; - var type = coerce('type', 'array' in containerIn ? 'data' : 'percent'), - symmetric = true; + var type = coerce('type', 'array' in containerIn ? 'data' : 'percent'); + var symmetric = true; if(type !== 'sqrt') { symmetric = coerce('symmetric', @@ -21445,9 +21537,9 @@ module.exports = function(traceIn, traceOut, defaultColor, opts) { } }; -},{"../../lib":169,"../../plot_api/plot_template":204,"../../registry":259,"./attributes":77,"fast-isnumeric":18}],81:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../registry":257,"./attributes":74,"fast-isnumeric":18}],78:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21514,9 +21606,9 @@ function hoverInfo(calcPoint, trace, hoverPoint) { } } -},{"../../lib":169,"../../plot_api/edit_types":197,"./attributes":77,"./calc":78,"./compute_error":79,"./defaults":80,"./plot":82,"./style":83}],82:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/edit_types":195,"./attributes":74,"./calc":75,"./compute_error":76,"./defaults":77,"./plot":79,"./style":80}],79:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21532,7 +21624,7 @@ var isNumeric = _dereq_('fast-isnumeric'); var Drawing = _dereq_('../drawing'); var subTypes = _dereq_('../../traces/scatter/subtypes'); -module.exports = function plot(traces, plotinfo, transitionOpts) { +module.exports = function plot(gd, traces, plotinfo, transitionOpts) { var isNew; var xa = plotinfo.xaxis; @@ -21541,13 +21633,13 @@ module.exports = function plot(traces, plotinfo, transitionOpts) { var hasAnimation = transitionOpts && transitionOpts.duration > 0; traces.each(function(d) { - var trace = d[0].trace, - // || {} is in case the trace (specifically scatterternary) - // doesn't support error bars at all, but does go through - // the scatter.plot mechanics, which calls ErrorBars.plot - // internally - xObj = trace.error_x || {}, - yObj = trace.error_y || {}; + var trace = d[0].trace; + // || {} is in case the trace (specifically scatterternary) + // doesn't support error bars at all, but does go through + // the scatter.plot mechanics, which calls ErrorBars.plot + // internally + var xObj = trace.error_x || {}; + var yObj = trace.error_y || {}; var keyFunc; @@ -21583,7 +21675,7 @@ module.exports = function plot(traces, plotinfo, transitionOpts) { .style('opacity', 1); } - Drawing.setClipUrl(errorbars, plotinfo.layerClipId); + Drawing.setClipUrl(errorbars, plotinfo.layerClipId, gd); errorbars.each(function(d) { var errorbar = d3.select(this); @@ -21688,9 +21780,9 @@ function errorCoords(d, xa, ya) { return out; } -},{"../../traces/scatter/subtypes":390,"../drawing":75,"d3":16,"fast-isnumeric":18}],83:[function(_dereq_,module,exports){ +},{"../../traces/scatter/subtypes":391,"../drawing":72,"d3":16,"fast-isnumeric":18}],80:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21707,9 +21799,9 @@ var Color = _dereq_('../color'); module.exports = function style(traces) { traces.each(function(d) { - var trace = d[0].trace, - yObj = trace.error_y || {}, - xObj = trace.error_x || {}; + var trace = d[0].trace; + var yObj = trace.error_y || {}; + var xObj = trace.error_x || {}; var s = d3.select(this); @@ -21725,9 +21817,9 @@ module.exports = function style(traces) { }); }; -},{"../color":50,"d3":16}],84:[function(_dereq_,module,exports){ +},{"../color":51,"d3":16}],81:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21771,9 +21863,9 @@ module.exports = { } }; -},{"../../plots/font_attributes":240}],85:[function(_dereq_,module,exports){ +},{"../../plots/font_attributes":239}],82:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21808,6 +21900,8 @@ module.exports = function calc(gd) { fillFn(trace.hoverinfo, cd, 'hi', makeCoerceHoverInfo(trace)); + if(trace.hovertemplate) fillFn(trace.hovertemplate, cd, 'ht'); + if(!trace.hoverlabel) continue; fillFn(trace.hoverlabel.bgcolor, cd, 'hbg'); @@ -21827,9 +21921,9 @@ function paste(traceAttr, cd, cdAttr, fn) { } } -},{"../../lib":169,"../../registry":259}],86:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],83:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21865,9 +21959,9 @@ module.exports = function click(gd, evt, subplot) { } }; -},{"../../registry":259,"./hover":90}],87:[function(_dereq_,module,exports){ +},{"../../registry":257,"./hover":87}],84:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21897,9 +21991,9 @@ module.exports = { HOVERID: '-hover' }; -},{}],88:[function(_dereq_,module,exports){ +},{}],85:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21920,9 +22014,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout handleHoverLabelDefaults(traceIn, traceOut, coerce, layout.hoverlabel); }; -},{"../../lib":169,"./attributes":84,"./hoverlabel_defaults":91}],89:[function(_dereq_,module,exports){ +},{"../../lib":168,"./attributes":81,"./hoverlabel_defaults":88}],86:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22018,8 +22112,8 @@ exports.inbox = function inbox(v0, v1, passVal) { exports.quadrature = function quadrature(dx, dy) { return function(di) { - var x = dx(di), - y = dy(di); + var x = dx(di); + var y = dy(di); return Math.sqrt(x * x + y * y); }; }; @@ -22163,9 +22257,9 @@ function getPointData(val, pointNumber) { } } -},{"../../lib":169}],90:[function(_dereq_,module,exports){ +},{"../../lib":168}],87:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22292,13 +22386,17 @@ exports.loneHover = function loneHover(hoverItem, opts) { fontColor: hoverItem.fontColor, // filler to make createHoverText happy - trace: { + trace: hoverItem.trace || { index: 0, hoverinfo: '' }, xa: {_offset: 0}, ya: {_offset: 0}, - index: 0 + index: 0, + + hovertemplate: hoverItem.hovertemplate || false, + eventData: hoverItem.eventData || false, + hovertemplateLabels: hoverItem.hovertemplateLabels || false, }; var container3 = d3.select(opts.container); @@ -22312,13 +22410,90 @@ exports.loneHover = function loneHover(hoverItem, opts) { container: container3, outerContainer: outerContainer3 }; - var hoverLabel = createHoverText([pointData], fullOpts, opts.gd); alignHoverText(hoverLabel, fullOpts.rotateLabels); return hoverLabel.node(); }; +exports.multiHovers = function multiHovers(hoverItems, opts) { + + if(!Array.isArray(hoverItems)) { + hoverItems = [hoverItems]; + } + + var pointsData = hoverItems.map(function(hoverItem) { + return { + color: hoverItem.color || Color.defaultLine, + x0: hoverItem.x0 || hoverItem.x || 0, + x1: hoverItem.x1 || hoverItem.x || 0, + y0: hoverItem.y0 || hoverItem.y || 0, + y1: hoverItem.y1 || hoverItem.y || 0, + xLabel: hoverItem.xLabel, + yLabel: hoverItem.yLabel, + zLabel: hoverItem.zLabel, + text: hoverItem.text, + name: hoverItem.name, + idealAlign: hoverItem.idealAlign, + + // optional extra bits of styling + borderColor: hoverItem.borderColor, + fontFamily: hoverItem.fontFamily, + fontSize: hoverItem.fontSize, + fontColor: hoverItem.fontColor, + + // filler to make createHoverText happy + trace: hoverItem.trace || { + index: 0, + hoverinfo: '' + }, + xa: {_offset: 0}, + ya: {_offset: 0}, + index: 0, + + hovertemplate: hoverItem.hovertemplate || false, + eventData: hoverItem.eventData || false, + hovertemplateLabels: hoverItem.hovertemplateLabels || false, + }; + }); + + + var container3 = d3.select(opts.container); + var outerContainer3 = opts.outerContainer ? d3.select(opts.outerContainer) : container3; + + var fullOpts = { + hovermode: 'closest', + rotateLabels: false, + bgColor: opts.bgColor || Color.background, + container: container3, + outerContainer: outerContainer3 + }; + + var hoverLabel = createHoverText(pointsData, fullOpts, opts.gd); + + // Fix vertical overlap + var tooltipSpacing = 5; + var lastBottomY = 0; + hoverLabel + .sort(function(a, b) {return a.y0 - b.y0;}) + .each(function(d) { + var topY = d.y0 - d.by / 2; + + if((topY - tooltipSpacing) < lastBottomY) { + d.offset = (lastBottomY - topY) + tooltipSpacing; + } else { + d.offset = 0; + } + + lastBottomY = topY + d.by + d.offset; + }); + + + alignHoverText(hoverLabel, fullOpts.rotateLabels); + + return hoverLabel.node(); +}; + // The actual implementation is here: function _hover(gd, evt, subplot, noHoverEvent) { if(!subplot) subplot = 'xy'; @@ -22414,12 +22589,14 @@ function _hover(gd, evt, subplot, noHoverEvent) { // user specified an array of points to highlight hovermode = 'array'; for(itemnum = 0; itemnum < evt.length; itemnum++) { - cd = gd.calcdata[evt[itemnum].curveNumber||0]; - trace = cd[0].trace; - if(cd[0].trace.hoverinfo !== 'skip') { - searchData.push(cd); - if(trace.orientation === 'h') { - hasOneHorizontalTrace = true; + cd = gd.calcdata[evt[itemnum].curveNumber || 0]; + if(cd) { + trace = cd[0].trace; + if(cd[0].trace.hoverinfo !== 'skip') { + searchData.push(cd); + if(trace.orientation === 'h') { + hasOneHorizontalTrace = true; + } } } } @@ -22562,6 +22739,10 @@ function _hover(gd, evt, subplot, noHoverEvent) { if(fullLayout[subplotId]) { pointData.subplot = fullLayout[subplotId]._subplot; } + // add ref to splom scene + if(fullLayout._splomScenes && fullLayout._splomScenes[trace.uid]) { + pointData.scene = fullLayout._splomScenes[trace.uid]; + } closedataPreviousLength = hoverData.length; @@ -22698,11 +22879,11 @@ function _hover(gd, evt, subplot, noHoverEvent) { outerContainer: fullLayout._paperdiv, event: evt }; - var oldspikepoints = gd._spikepoints, - newspikepoints = { - vLinePoint: spikePoints.vLinePoint, - hLinePoint: spikePoints.hLinePoint - }; + var oldspikepoints = gd._spikepoints; + var newspikepoints = { + vLinePoint: spikePoints.vLinePoint, + hLinePoint: spikePoints.hLinePoint + }; gd._spikepoints = newspikepoints; // Now if it is not restricted by spikedistance option, set the points to draw the spikelines @@ -22749,7 +22930,14 @@ function _hover(gd, evt, subplot, noHoverEvent) { // other people and send it to the event for(itemnum = 0; itemnum < hoverData.length; itemnum++) { var pt = hoverData[itemnum]; - newhoverdata.push(helpers.makeEventData(pt, pt.trace, pt.cd)); + var eventData = helpers.makeEventData(pt, pt.trace, pt.cd); + + var ht = false; + if(pt.cd[pt.index] && pt.cd[pt.index].ht) ht = pt.cd[pt.index].ht; + hoverData[itemnum].hovertemplate = ht || pt.trace.hovertemplate || false; + hoverData[itemnum].eventData = [eventData]; + + newhoverdata.push(eventData); } gd._hoverdata = newhoverdata; @@ -22807,6 +22995,8 @@ function _hover(gd, evt, subplot, noHoverEvent) { }); } +var EXTRA_STRING_REGEX = /([\s\S]*)<\/extra>/; + function createHoverText(hoverData, opts, gd) { var hovermode = opts.hovermode; var rotateLabels = opts.rotateLabels; @@ -22850,11 +23040,13 @@ function createHoverText(hoverData, opts, gd) { if(allHaveZ && hoverData[i].zLabel === undefined) allHaveZ = false; traceHoverinfo = hoverData[i].hoverinfo || hoverData[i].trace.hoverinfo; - var parts = Array.isArray(traceHoverinfo) ? traceHoverinfo : traceHoverinfo.split('+'); - if(parts.indexOf('all') === -1 && - parts.indexOf(hovermode) === -1) { - showCommonLabel = false; - break; + if(traceHoverinfo) { + var parts = Array.isArray(traceHoverinfo) ? traceHoverinfo : traceHoverinfo.split('+'); + if(parts.indexOf('all') === -1 && + parts.indexOf(hovermode) === -1) { + showCommonLabel = false; + break; + } } } @@ -22993,15 +23185,10 @@ function createHoverText(hoverData, opts, gd) { if(d.nameOverride !== undefined) d.name = d.nameOverride; if(d.name) { - // strip out our pseudo-html elements from d.name (if it exists at all) - name = svgTextUtils.plainText(d.name || ''); - - var nameLength = Math.round(d.nameLength); - - if(nameLength > -1 && name.length > nameLength) { - if(nameLength > 3) name = name.substr(0, nameLength - 3) + '...'; - else name = name.substr(0, nameLength); - } + name = svgTextUtils.plainText(d.name || '', { + len: d.nameLength, + allowedTags: ['br', 'sub', 'sup', 'b', 'i', 'em'] + }); } if(d.zLabel !== undefined) { @@ -23030,13 +23217,27 @@ function createHoverText(hoverData, opts, gd) { if(d.extraText !== undefined) text += (text ? '
    ' : '') + d.extraText; // if 'text' is empty at this point, + // and hovertemplate is not defined, // put 'name' in main label and don't show secondary label - if(text === '') { + if(text === '' && !d.hovertemplate) { // if 'name' is also empty, remove entire label if(name === '') g.remove(); text = name; } + // hovertemplate + var hovertemplate = d.hovertemplate || false; + var hovertemplateLabels = d.hovertemplateLabels || d; + var eventData = d.eventData[0] || {}; + if(hovertemplate) { + text = Lib.hovertemplateString(hovertemplate, hovertemplateLabels, eventData); + + text = text.replace(EXTRA_STRING_REGEX, function(match, extra) { + name = extra; // Assign name for secondary text label + return ''; // Remove from main text label + }); + } + // main label var tx = g.select('text.nums') .call(Drawing.font, @@ -23050,6 +23251,7 @@ function createHoverText(hoverData, opts, gd) { var tx2 = g.select('text.name'); var tx2width = 0; + var tx2height = 0; // secondary label for non-empty 'name' if(name && name !== text) { @@ -23061,18 +23263,20 @@ function createHoverText(hoverData, opts, gd) { .attr('data-notex', 1) .call(svgTextUtils.positionText, 0, 0) .call(svgTextUtils.convertToTspans, gd); - tx2width = tx2.node().getBoundingClientRect().width + 2 * HOVERTEXTPAD; - } - else { + + var t2bb = tx2.node().getBoundingClientRect(); + tx2width = t2bb.width + 2 * HOVERTEXTPAD; + tx2height = t2bb.height + 2 * HOVERTEXTPAD; + } else { tx2.remove(); g.select('rect').remove(); } - g.select('path') - .style({ - fill: numsColor, - stroke: contrastColor - }); + g.select('path').style({ + fill: numsColor, + stroke: contrastColor + }); + var tbb = tx.node().getBoundingClientRect(); var htx = d.xa._offset + (d.x0 + d.x1) / 2; var hty = d.ya._offset + (d.y0 + d.y1) / 2; @@ -23083,7 +23287,7 @@ function createHoverText(hoverData, opts, gd) { d.ty0 = outerTop - tbb.top; d.bx = tbb.width + 2 * HOVERTEXTPAD; - d.by = tbb.height + 2 * HOVERTEXTPAD; + d.by = Math.max(tbb.height + 2 * HOVERTEXTPAD, tx2height); d.anchor = 'start'; d.txwidth = tbb.width; d.tx2width = tx2width; @@ -23137,7 +23341,6 @@ function createHoverText(hoverData, opts, gd) { // information then. function hoverAvoidOverlaps(hoverData, ax, fullLayout) { var nummoves = 0; - var axSign = 1; // make groups of touching points @@ -23383,7 +23586,7 @@ function cleanPoint(d, hovermode) { fill('fontColor', 'htc', 'hoverlabel.font.color'); fill('nameLength', 'hnl', 'hoverlabel.namelength'); - d.posref = hovermode === 'y' ? + d.posref = (hovermode === 'y' || (hovermode === 'closest' && trace.orientation === 'h')) ? (d.xa._offset + (d.x0 + d.x1) / 2) : (d.ya._offset + (d.y0 + d.y1) / 2); @@ -23435,7 +23638,7 @@ function cleanPoint(d, hovermode) { var infomode = d.hoverinfo || d.trace.hoverinfo; - if(infomode !== 'all') { + if(infomode && infomode !== 'all') { infomode = Array.isArray(infomode) ? infomode : infomode.split('+'); if(infomode.indexOf('x') === -1) d.xLabel = undefined; if(infomode.indexOf('y') === -1) d.yLabel = undefined; @@ -23621,8 +23824,11 @@ function hoverChanged(gd, evt, oldhoverdata) { for(var i = oldhoverdata.length - 1; i >= 0; i--) { var oldPt = oldhoverdata[i]; var newPt = gd._hoverdata[i]; + if(oldPt.curveNumber !== newPt.curveNumber || - String(oldPt.pointNumber) !== String(newPt.pointNumber)) { + String(oldPt.pointNumber) !== String(newPt.pointNumber) || + String(oldPt.pointNumbers) !== String(newPt.pointNumbers) + ) { return true; } } @@ -23638,9 +23844,9 @@ function spikesChanged(gd, oldspikepoints) { return false; } -},{"../../lib":169,"../../lib/events":162,"../../lib/override_cursor":181,"../../lib/svg_text_utils":191,"../../plots/cartesian/axes":214,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"./constants":87,"./helpers":89,"d3":16,"fast-isnumeric":18,"tinycolor2":33}],91:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../lib/events":161,"../../lib/override_cursor":179,"../../lib/svg_text_utils":189,"../../plots/cartesian/axes":212,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"./constants":84,"./helpers":86,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],88:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -23660,9 +23866,51 @@ module.exports = function handleHoverLabelDefaults(contIn, contOut, coerce, opts Lib.coerceFont(coerce, 'hoverlabel.font', opts.font); }; -},{"../../lib":169}],92:[function(_dereq_,module,exports){ +},{"../../lib":168}],89:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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'; + +module.exports = function(opts, extra) { + opts = opts || {}; + extra = extra || {}; + + var descPart = extra.description ? ' ' + extra.description : ''; + var keys = extra.keys || []; + if(keys.length > 0) { + var quotedKeys = []; + for(var i = 0; i < keys.length; i++) { + quotedKeys[i] = '`' + keys[i] + '`'; + } + descPart = descPart + 'Finally, the template string has access to '; + if(keys.length === 1) { + descPart = 'variable ' + quotedKeys[0]; + } else { + descPart = 'variables ' + quotedKeys.slice(0, -1).join(', ') + ' and ' + quotedKeys.slice(-1) + '.'; + } + } + + var hovertemplate = { + valType: 'string', + + dflt: '', + arrayOk: true, + editType: 'none', + + }; + + return hovertemplate; +}; + +},{}],90:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -23676,6 +23924,7 @@ var Lib = _dereq_('../../lib'); var dragElement = _dereq_('../dragelement'); var helpers = _dereq_('./helpers'); var layoutAttributes = _dereq_('./layout_attributes'); +var hoverModule = _dereq_('./hover'); module.exports = { moduleType: 'component', @@ -23704,10 +23953,11 @@ module.exports = { castHoverOption: castHoverOption, castHoverinfo: castHoverinfo, - hover: _dereq_('./hover').hover, + hover: hoverModule.hover, unhover: dragElement.unhover, - loneHover: _dereq_('./hover').loneHover, + loneHover: hoverModule.loneHover, + multiHovers: hoverModule.multiHovers, loneUnhover: loneUnhover, click: _dereq_('./click') @@ -23738,9 +23988,9 @@ function castHoverinfo(trace, fullLayout, ptNumber) { return Lib.castOption(trace, ptNumber, 'hoverinfo', _coerce); } -},{"../../lib":169,"../dragelement":72,"./attributes":84,"./calc":85,"./click":86,"./constants":87,"./defaults":88,"./helpers":89,"./hover":90,"./layout_attributes":93,"./layout_defaults":94,"./layout_global_defaults":95,"d3":16}],93:[function(_dereq_,module,exports){ +},{"../../lib":168,"../dragelement":69,"./attributes":81,"./calc":82,"./click":83,"./constants":84,"./defaults":85,"./helpers":86,"./hover":87,"./layout_attributes":91,"./layout_defaults":92,"./layout_global_defaults":93,"d3":16}],91:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -23771,7 +24021,7 @@ module.exports = { dragmode: { valType: 'enumerated', - values: ['zoom', 'pan', 'select', 'lasso', 'orbit', 'turntable'], + values: ['zoom', 'pan', 'select', 'lasso', 'orbit', 'turntable', false], dflt: 'zoom', editType: 'modebar', @@ -23833,9 +24083,9 @@ module.exports = { } }; -},{"../../plots/font_attributes":240,"./constants":87}],94:[function(_dereq_,module,exports){ +},{"../../plots/font_attributes":239,"./constants":84}],92:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -23906,9 +24156,9 @@ function isHoriz(fullData) { return out; } -},{"../../lib":169,"./layout_attributes":93}],95:[function(_dereq_,module,exports){ +},{"../../lib":168,"./layout_attributes":91}],93:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -23929,9 +24179,9 @@ module.exports = function supplyLayoutGlobalDefaults(layoutIn, layoutOut) { handleHoverLabelDefaults(layoutIn, layoutOut, coerce); }; -},{"../../lib":169,"./hoverlabel_defaults":91,"./layout_attributes":93}],96:[function(_dereq_,module,exports){ +},{"../../lib":168,"./hoverlabel_defaults":88,"./layout_attributes":91}],94:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24314,9 +24564,9 @@ module.exports = { contentDefaults: contentDefaults }; -},{"../../lib":169,"../../lib/regex":185,"../../plot_api/plot_template":204,"../../plots/cartesian/constants":219,"../../plots/domain":239}],97:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../lib/regex":183,"../../plot_api/plot_template":202,"../../plots/cartesian/constants":218,"../../plots/domain":238}],95:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24449,9 +24699,9 @@ module.exports = templatedArray('image', { editType: 'arraydraw' }); -},{"../../plot_api/plot_template":204,"../../plots/cartesian/constants":219}],98:[function(_dereq_,module,exports){ +},{"../../plot_api/plot_template":202,"../../plots/cartesian/constants":218}],96:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24485,25 +24735,25 @@ var toLogRange = _dereq_('../../lib/to_log_range'); module.exports = function convertCoords(gd, ax, newType, doExtra) { ax = ax || {}; - var toLog = (newType === 'log') && (ax.type === 'linear'), - fromLog = (newType === 'linear') && (ax.type === 'log'); + var toLog = (newType === 'log') && (ax.type === 'linear'); + var fromLog = (newType === 'linear') && (ax.type === 'log'); if(!(toLog || fromLog)) return; - var images = gd._fullLayout.images, - axLetter = ax._id.charAt(0), - image, - attrPrefix; + var images = gd._fullLayout.images; + var axLetter = ax._id.charAt(0); + var image; + var attrPrefix; for(var i = 0; i < images.length; i++) { image = images[i]; attrPrefix = 'images[' + i + '].'; if(image[axLetter + 'ref'] === ax._id) { - var currentPos = image[axLetter], - currentSize = image['size' + axLetter], - newPos = null, - newSize = null; + var currentPos = image[axLetter]; + var currentSize = image['size' + axLetter]; + var newPos = null; + var newSize = null; if(toLog) { newPos = toLogRange(currentPos, ax.range); @@ -24532,9 +24782,9 @@ module.exports = function convertCoords(gd, ax, newType, doExtra) { } }; -},{"../../lib/to_log_range":193,"fast-isnumeric":18}],99:[function(_dereq_,module,exports){ +},{"../../lib/to_log_range":191,"fast-isnumeric":18}],97:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24579,13 +24829,18 @@ function imageDefaults(imageIn, imageOut, fullLayout) { coerce('sizing'); coerce('opacity'); - var gdMock = { _fullLayout: fullLayout }, - axLetters = ['x', 'y']; + var gdMock = { _fullLayout: fullLayout }; + var axLetters = ['x', 'y']; for(var i = 0; i < 2; i++) { // 'paper' is the fallback axref - var axLetter = axLetters[i], - axRef = Axes.coerceRef(imageIn, imageOut, gdMock, axLetter, 'paper'); + var axLetter = axLetters[i]; + var axRef = Axes.coerceRef(imageIn, imageOut, gdMock, axLetter, 'paper'); + + if(axRef !== 'paper') { + var ax = Axes.getFromId(gdMock, axRef); + ax._imgIndices.push(imageOut._index); + } Axes.coercePosition(imageOut, gdMock, coerce, axRef, axLetter, 0); } @@ -24593,9 +24848,9 @@ function imageDefaults(imageIn, imageOut, fullLayout) { return imageOut; } -},{"../../lib":169,"../../plots/array_container_defaults":210,"../../plots/cartesian/axes":214,"./attributes":97}],100:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"../../plots/cartesian/axes":212,"./attributes":95}],98:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24610,12 +24865,12 @@ var Axes = _dereq_('../../plots/cartesian/axes'); var xmlnsNamespaces = _dereq_('../../constants/xmlns_namespaces'); module.exports = function draw(gd) { - var fullLayout = gd._fullLayout, - imageDataAbove = [], - imageDataSubplot = {}, - imageDataBelow = [], - subplot, - i; + var fullLayout = gd._fullLayout; + var imageDataAbove = []; + var imageDataSubplot = {}; + var imageDataBelow = []; + var subplot; + var i; // Sort into top, subplot, and bottom layers for(i = 0; i < fullLayout.images.length; i++) { @@ -24720,23 +24975,22 @@ module.exports = function draw(gd) { var thisImage = d3.select(this); // Axes if specified - var xa = Axes.getFromId(gd, d.xref), - ya = Axes.getFromId(gd, d.yref); + var xa = Axes.getFromId(gd, d.xref); + var ya = Axes.getFromId(gd, d.yref); - var size = fullLayout._size, - width = xa ? Math.abs(xa.l2p(d.sizex) - xa.l2p(0)) : d.sizex * size.w, - height = ya ? Math.abs(ya.l2p(d.sizey) - ya.l2p(0)) : d.sizey * size.h; + var size = fullLayout._size; + var width = xa ? Math.abs(xa.l2p(d.sizex) - xa.l2p(0)) : d.sizex * size.w; + var height = ya ? Math.abs(ya.l2p(d.sizey) - ya.l2p(0)) : d.sizey * size.h; // Offsets for anchor positioning - var xOffset = width * anchors.x[d.xanchor].offset, - yOffset = height * anchors.y[d.yanchor].offset; + var xOffset = width * anchors.x[d.xanchor].offset; + var yOffset = height * anchors.y[d.yanchor].offset; var sizing = anchors.x[d.xanchor].sizing + anchors.y[d.yanchor].sizing; // Final positions - var xPos = (xa ? xa.r2p(d.x) + xa._offset : d.x * size.w + size.l) + xOffset, - yPos = (ya ? ya.r2p(d.y) + ya._offset : size.h - d.y * size.h + size.t) + yOffset; - + var xPos = (xa ? xa.r2p(d.x) + xa._offset : d.x * size.w + size.l) + xOffset; + var yPos = (ya ? ya.r2p(d.y) + ya._offset : size.h - d.y * size.h + size.t) + yOffset; // Construct the proper aspectRatio attribute switch(d.sizing) { @@ -24760,20 +25014,21 @@ module.exports = function draw(gd) { // Set proper clipping on images - var xId = xa ? xa._id : '', - yId = ya ? ya._id : '', - clipAxes = xId + yId; + var xId = xa ? xa._id : ''; + var yId = ya ? ya._id : ''; + var clipAxes = xId + yId; - thisImage.call(Drawing.setClipUrl, clipAxes ? - ('clip' + fullLayout._uid + clipAxes) : - null + Drawing.setClipUrl( + thisImage, + clipAxes ? ('clip' + fullLayout._uid + clipAxes) : null, + gd ); } var imagesBelow = fullLayout._imageLowerLayer.selectAll('image') - .data(imageDataBelow), - imagesAbove = fullLayout._imageUpperLayer.selectAll('image') - .data(imageDataAbove); + .data(imageDataBelow); + var imagesAbove = fullLayout._imageUpperLayer.selectAll('image') + .data(imageDataAbove); imagesBelow.enter().append('image'); imagesAbove.enter().append('image'); @@ -24814,9 +25069,9 @@ module.exports = function draw(gd) { } }; -},{"../../constants/xmlns_namespaces":152,"../../plots/cartesian/axes":214,"../drawing":75,"d3":16}],101:[function(_dereq_,module,exports){ +},{"../../constants/xmlns_namespaces":150,"../../plots/cartesian/axes":212,"../drawing":72,"d3":16}],99:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24838,58 +25093,9 @@ module.exports = { convertCoords: _dereq_('./convert_coords') }; -},{"../../plots/cartesian/include_components":224,"./attributes":97,"./convert_coords":98,"./defaults":99,"./draw":100}],102:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/include_components":223,"./attributes":95,"./convert_coords":96,"./defaults":97,"./draw":98}],100:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - - -/** - * Determine the position anchor property of x/y xanchor/yanchor components. - * - * - values < 1/3 align the low side at that fraction, - * - values [1/3, 2/3] align the center at that fraction, - * - values > 2/3 align the right at that fraction. - */ - -exports.isRightAnchor = function isRightAnchor(opts) { - return ( - opts.xanchor === 'right' || - (opts.xanchor === 'auto' && opts.x >= 2 / 3) - ); -}; - -exports.isCenterAnchor = function isCenterAnchor(opts) { - return ( - opts.xanchor === 'center' || - (opts.xanchor === 'auto' && opts.x > 1 / 3 && opts.x < 2 / 3) - ); -}; - -exports.isBottomAnchor = function isBottomAnchor(opts) { - return ( - opts.yanchor === 'bottom' || - (opts.yanchor === 'auto' && opts.y <= 1 / 3) - ); -}; - -exports.isMiddleAnchor = function isMiddleAnchor(opts) { - return ( - opts.yanchor === 'middle' || - (opts.yanchor === 'auto' && opts.y > 1 / 3 && opts.y < 2 / 3) - ); -}; - -},{}],103:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24985,13 +25191,27 @@ module.exports = { editType: 'legend', + }, + uirevision: { + valType: 'any', + + editType: 'none', + + }, + valign: { + valType: 'enumerated', + values: ['top', 'middle', 'bottom'], + dflt: 'middle', + + editType: 'legend', + }, editType: 'legend' }; -},{"../../plots/font_attributes":240,"../color/attributes":49}],104:[function(_dereq_,module,exports){ +},{"../../plots/font_attributes":239,"../color/attributes":50}],101:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25008,9 +25228,9 @@ module.exports = { textOffsetX: 40 }; -},{}],105:[function(_dereq_,module,exports){ +},{}],102:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25077,7 +25297,7 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { basePlotLayoutAttributes, 'showlegend', legendReallyHasATrace && legendTraceCount > 1); - if(showLegend === false) return; + if(showLegend === false && !containerIn.uirevision) return; var containerOut = Template.newContainer(layoutOut, 'legend'); @@ -25085,6 +25305,10 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { return Lib.coerce(containerIn, containerOut, attributes, attr, dflt); } + coerce('uirevision', layoutOut.uirevision); + + if(showLegend === false) return; + coerce('bgcolor', layoutOut.paper_bgcolor); coerce('bordercolor'); coerce('borderwidth'); @@ -25093,7 +25317,7 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { coerce('orientation'); if(containerOut.orientation === 'h') { var xaxis = layoutIn.xaxis; - if(xaxis && xaxis.rangeslider && xaxis.rangeslider.visible) { + if(Registry.getComponentMethod('rangeslider', 'isVisible')(xaxis)) { defaultX = 0; defaultXAnchor = 'left'; defaultY = 1.1; @@ -25114,12 +25338,13 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { coerce('xanchor', defaultXAnchor); coerce('y', defaultY); coerce('yanchor', defaultYAnchor); + coerce('valign'); Lib.noneOrAll(containerIn, containerOut, ['x', 'y']); }; -},{"../../lib":169,"../../plot_api/plot_template":204,"../../plots/layout_attributes":244,"../../registry":259,"./attributes":103,"./helpers":109}],106:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../plots/layout_attributes":243,"../../registry":257,"./attributes":100,"./helpers":106}],103:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25150,7 +25375,6 @@ var FROM_BR = alignmentConstants.FROM_BR; var getLegendData = _dereq_('./get_legend_data'); var style = _dereq_('./style'); var helpers = _dereq_('./helpers'); -var anchorUtils = _dereq_('./anchor_utils'); var DBLCLICKDELAY = interactConstants.DBLCLICKDELAY; @@ -25229,20 +25453,20 @@ module.exports = function draw(gd) { traces.enter().append('g').attr('class', 'traces'); traces.exit().remove(); - traces.call(style, gd) - .style('opacity', function(d) { - var trace = d[0].trace; - if(Registry.traceIs(trace, 'pie')) { - return hiddenSlices.indexOf(d[0].label) !== -1 ? 0.5 : 1; - } else { - return trace.visible === 'legendonly' ? 0.5 : 1; - } - }) - .each(function() { - d3.select(this) - .call(drawTexts, gd, maxLength) - .call(setupTraceToggle, gd); - }); + traces.style('opacity', function(d) { + var trace = d[0].trace; + if(Registry.traceIs(trace, 'pie')) { + return hiddenSlices.indexOf(d[0].label) !== -1 ? 0.5 : 1; + } else { + return trace.visible === 'legendonly' ? 0.5 : 1; + } + }) + .each(function() { + d3.select(this) + .call(drawTexts, gd, maxLength) + .call(setupTraceToggle, gd); + }) + .call(style, gd); Lib.syncOrAsync([Plots.previousPromises, function() { @@ -25252,10 +25476,10 @@ module.exports = function draw(gd) { } // Position and size the legend - var lxMin = 0, - lxMax = fullLayout.width, - lyMin = 0, - lyMax = fullLayout.height; + var lxMin = 0; + var lxMax = fullLayout.width; + var lyMin = 0; + var lyMax = fullLayout.height; computeLegendDimensions(gd, groups, traces); @@ -25270,27 +25494,27 @@ module.exports = function draw(gd) { // Scroll section must be executed after repositionLegend. // It requires the legend width, height, x and y to position the scrollbox // and these values are mutated in repositionLegend. - var gs = fullLayout._size, - lx = gs.l + gs.w * opts.x, - ly = gs.t + gs.h * (1 - opts.y); + var gs = fullLayout._size; + var lx = gs.l + gs.w * opts.x; + var ly = gs.t + gs.h * (1 - opts.y); - if(anchorUtils.isRightAnchor(opts)) { + if(Lib.isRightAnchor(opts)) { lx -= opts._width; } - else if(anchorUtils.isCenterAnchor(opts)) { + else if(Lib.isCenterAnchor(opts)) { lx -= opts._width / 2; } - if(anchorUtils.isBottomAnchor(opts)) { + if(Lib.isBottomAnchor(opts)) { ly -= opts._height; } - else if(anchorUtils.isMiddleAnchor(opts)) { + else if(Lib.isMiddleAnchor(opts)) { ly -= opts._height / 2; } // Make sure the legend left and right sides are visible - var legendWidth = opts._width, - legendWidthMax = gs.w; + var legendWidth = opts._width; + var legendWidthMax = gs.w; if(legendWidth > legendWidthMax) { lx = gs.l; @@ -25305,8 +25529,8 @@ module.exports = function draw(gd) { // Make sure the legend top and bottom are visible // (legends with a scroll bar are not allowed to stretch beyond the extended // margins) - var legendHeight = opts._height, - legendHeightMax = gs.h; + var legendHeight = opts._height; + var legendHeightMax = gs.h; if(legendHeight > legendHeightMax) { ly = gs.t; @@ -25344,7 +25568,7 @@ module.exports = function draw(gd) { y: opts.borderwidth }); - Drawing.setClipUrl(scrollBox, clipId); + Drawing.setClipUrl(scrollBox, clipId, gd); Drawing.setRect(scrollBar, 0, 0, 0, 0); delete opts._scrollY; @@ -25382,7 +25606,7 @@ module.exports = function draw(gd) { y: opts.borderwidth + scrollBoxY }); - Drawing.setClipUrl(scrollBox, clipId); + Drawing.setClipUrl(scrollBox, clipId, gd); scrollHandler(scrollBoxY, scrollBarHeight, scrollRatio); @@ -25449,8 +25673,8 @@ module.exports = function draw(gd) { y0 = transform.y; }, moveFn: function(dx, dy) { - var newX = x0 + dx, - newY = y0 + dy; + var newX = x0 + dx; + var newY = y0 + dy; Drawing.setTranslate(legend, newX, newY); @@ -25459,7 +25683,7 @@ module.exports = function draw(gd) { }, doneFn: function() { if(xf !== undefined && yf !== undefined) { - Registry.call('relayout', gd, {'legend.x': xf, 'legend.y': yf}); + Registry.call('_guiRelayout', gd, {'legend.x': xf, 'legend.y': yf}); } }, clickFn: function(numClicks, e) { @@ -25566,7 +25790,7 @@ function drawTexts(g, gd, maxLength) { update.name = newName; } - return Registry.call('restyle', gd, update, traceIndex); + return Registry.call('_guiRestyle', gd, update, traceIndex); }); } else { textLayout(textEl); @@ -25589,8 +25813,8 @@ function ensureLength(str, maxLength) { } function setupTraceToggle(g, gd) { - var newMouseDownTime, - numClicks = 1; + var newMouseDownTime; + var numClicks = 1; var traceToggle = Lib.ensureSingle(g, 'rect', 'legendtoggle', function(s) { s.style('cursor', 'pointer') @@ -25643,8 +25867,7 @@ function computeTextDimensions(g, gd) { width = mathjaxBB.width; Drawing.setTranslate(mathjaxGroup, 0, (height / 4)); - } - else { + } else { var text = g.select('.legendtext'); var textLines = svgTextUtils.lineCount(text); var textNode = text.node(); @@ -25658,9 +25881,8 @@ function computeTextDimensions(g, gd) { svgTextUtils.positionText(text, constants.textOffsetX, textY); } - height = Math.max(height, 16) + 3; - - legendItem.height = height; + legendItem.lineHeight = lineHeight; + legendItem.height = Math.max(height, 16) + 3; legendItem.width = width; } @@ -25683,9 +25905,9 @@ function computeLegendDimensions(gd, groups, traces) { } traces.each(function(d) { - var legendItem = d[0], - textHeight = legendItem.height, - textWidth = legendItem.width; + var legendItem = d[0]; + var textHeight = legendItem.height; + var textWidth = legendItem.width; Drawing.setTranslate(this, borderwidth, @@ -25705,8 +25927,8 @@ function computeLegendDimensions(gd, groups, traces) { extraWidth = 40; } else if(isGrouped) { - var groupXOffsets = [opts._width], - groupData = groups.data(); + var groupXOffsets = [opts._width]; + var groupData = groups.data(); for(var i = 0, n = groupData.length; i < n; i++) { var textWidths = groupData[i].map(function(legendItemArray) { @@ -25725,13 +25947,13 @@ function computeLegendDimensions(gd, groups, traces) { }); groups.each(function() { - var group = d3.select(this), - groupTraces = group.selectAll('g.traces'), - groupHeight = 0; + var group = d3.select(this); + var groupTraces = group.selectAll('g.traces'); + var groupHeight = 0; groupTraces.each(function(d) { - var legendItem = d[0], - textHeight = legendItem.height; + var legendItem = d[0]; + var textHeight = legendItem.height; Drawing.setTranslate(this, 0, @@ -25747,13 +25969,12 @@ function computeLegendDimensions(gd, groups, traces) { opts._width += borderwidth * 2; } else { - var rowHeight = 0, - maxTraceHeight = 0, - maxTraceWidth = 0, - offsetX = 0, - fullTracesWidth = 0, - traceGap = opts.tracegroupgap || 5, - oneRowLegend; + var rowHeight = 0; + var maxTraceHeight = 0; + var maxTraceWidth = 0; + var offsetX = 0; + var fullTracesWidth = 0; + var traceGap = opts.tracegroupgap || 5; // calculate largest width for traces and use for width of all legend items traces.each(function(d) { @@ -25762,15 +25983,16 @@ function computeLegendDimensions(gd, groups, traces) { }); // check if legend fits in one row - oneRowLegend = fullLayout._size.w > borderwidth + fullTracesWidth - traceGap; + var oneRowLegend = fullLayout._size.w > borderwidth + fullTracesWidth - traceGap; + traces.each(function(d) { - var legendItem = d[0], - traceWidth = oneRowLegend ? 40 + d[0].width : maxTraceWidth; + var legendItem = d[0]; + var traceWidth = oneRowLegend ? 40 + d[0].width : maxTraceWidth; if((borderwidth + offsetX + traceGap + traceWidth) > fullLayout._size.w) { offsetX = 0; - rowHeight = rowHeight + maxTraceHeight; - opts._height = opts._height + maxTraceHeight; + rowHeight += maxTraceHeight; + opts._height += maxTraceHeight; // reset for next row maxTraceHeight = 0; } @@ -25780,16 +26002,20 @@ function computeLegendDimensions(gd, groups, traces) { (5 + borderwidth + legendItem.height / 2) + rowHeight); opts._width += traceGap + traceWidth; - opts._height = Math.max(opts._height, legendItem.height); // keep track of tallest trace in group offsetX += traceGap + traceWidth; maxTraceHeight = Math.max(legendItem.height, maxTraceHeight); }); + if(oneRowLegend) { + opts._height = maxTraceHeight; + } else { + opts._height += maxTraceHeight; + } + opts._width += borderwidth * 2; opts._height += 10 + borderwidth * 2; - } // make sure we're only getting full pixels @@ -25815,22 +26041,22 @@ function computeLegendDimensions(gd, groups, traces) { } function expandMargin(gd) { - var fullLayout = gd._fullLayout, - opts = fullLayout.legend; + var fullLayout = gd._fullLayout; + var opts = fullLayout.legend; var xanchor = 'left'; - if(anchorUtils.isRightAnchor(opts)) { + if(Lib.isRightAnchor(opts)) { xanchor = 'right'; } - else if(anchorUtils.isCenterAnchor(opts)) { + else if(Lib.isCenterAnchor(opts)) { xanchor = 'center'; } var yanchor = 'top'; - if(anchorUtils.isBottomAnchor(opts)) { + if(Lib.isBottomAnchor(opts)) { yanchor = 'bottom'; } - else if(anchorUtils.isMiddleAnchor(opts)) { + else if(Lib.isMiddleAnchor(opts)) { yanchor = 'middle'; } @@ -25846,14 +26072,14 @@ function expandMargin(gd) { } function expandHorizontalMargin(gd) { - var fullLayout = gd._fullLayout, - opts = fullLayout.legend; + var fullLayout = gd._fullLayout; + var opts = fullLayout.legend; var xanchor = 'left'; - if(anchorUtils.isRightAnchor(opts)) { + if(Lib.isRightAnchor(opts)) { xanchor = 'right'; } - else if(anchorUtils.isCenterAnchor(opts)) { + else if(Lib.isCenterAnchor(opts)) { xanchor = 'center'; } @@ -25868,9 +26094,9 @@ function expandHorizontalMargin(gd) { }); } -},{"../../constants/alignment":148,"../../constants/interactions":150,"../../lib":169,"../../lib/events":162,"../../lib/svg_text_utils":191,"../../plots/plots":246,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"./anchor_utils":102,"./constants":104,"./get_legend_data":107,"./handle_click":108,"./helpers":109,"./style":111,"d3":16}],107:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../constants/interactions":148,"../../lib":168,"../../lib/events":161,"../../lib/svg_text_utils":189,"../../plots/plots":245,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"./constants":101,"./get_legend_data":104,"./handle_click":105,"./helpers":106,"./style":108,"d3":16}],104:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25885,12 +26111,11 @@ var helpers = _dereq_('./helpers'); module.exports = function getLegendData(calcdata, opts) { - var lgroupToTraces = {}, - lgroups = [], - hasOneNonBlankGroup = false, - slicesShown = {}, - lgroupi = 0; - + var lgroupToTraces = {}; + var lgroups = []; + var hasOneNonBlankGroup = false; + var slicesShown = {}; + var lgroupi = 0; var i, j; function addOneItem(legendGroup, legendItem) { @@ -25946,9 +26171,9 @@ module.exports = function getLegendData(calcdata, opts) { if(!lgroups.length) return []; // rearrange lgroupToTraces into a d3-friendly array of arrays - var lgroupsLength = lgroups.length, - ltraces, - legendData; + var lgroupsLength = lgroups.length; + var ltraces; + var legendData; if(hasOneNonBlankGroup && helpers.isGrouped(opts)) { legendData = new Array(lgroupsLength); @@ -25974,9 +26199,9 @@ module.exports = function getLegendData(calcdata, opts) { return legendData; }; -},{"../../registry":259,"./helpers":109}],108:[function(_dereq_,module,exports){ +},{"../../registry":257,"./helpers":106}],105:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26070,8 +26295,8 @@ module.exports = function handleClick(g, gd, numClicks) { } if(Registry.traceIs(fullTrace, 'pie')) { - var thisLabel = legendItem.label, - thisLabelIndex = hiddenSlices.indexOf(thisLabel); + var thisLabel = legendItem.label; + var thisLabelIndex = hiddenSlices.indexOf(thisLabel); if(numClicks === 1) { if(thisLabelIndex === -1) hiddenSlices.push(thisLabel); @@ -26088,7 +26313,7 @@ module.exports = function handleClick(g, gd, numClicks) { } } - Registry.call('relayout', gd, 'hiddenlabels', hiddenSlices); + Registry.call('_guiRelayout', gd, 'hiddenlabels', hiddenSlices); } else { var hasLegendgroup = legendgroup && legendgroup.length; var traceIndicesInGroup = []; @@ -26194,13 +26419,13 @@ module.exports = function handleClick(g, gd, numClicks) { } } - Registry.call('restyle', gd, attrUpdate, attrIndices); + Registry.call('_guiRestyle', gd, attrUpdate, attrIndices); } }; -},{"../../lib":169,"../../registry":259}],109:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],106:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26222,9 +26447,9 @@ exports.isReversed = function isReversed(legendLayout) { return (legendLayout.traceorder || '').indexOf('reversed') !== -1; }; -},{}],110:[function(_dereq_,module,exports){ +},{}],107:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26246,9 +26471,9 @@ module.exports = { style: _dereq_('./style') }; -},{"./attributes":103,"./defaults":105,"./draw":106,"./style":111}],111:[function(_dereq_,module,exports){ +},{"./attributes":100,"./defaults":102,"./draw":103,"./style":108}],108:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26274,6 +26499,19 @@ module.exports = function style(s, gd) { var layers = Lib.ensureSingle(traceGroup, 'g', 'layers'); layers.style('opacity', d[0].trace.opacity); + // Marker vertical alignment + var valign = gd._fullLayout.legend.valign; + var lineHeight = d[0].lineHeight; + var height = d[0].height; + + if(valign === 'middle' || !lineHeight || !height) { + layers.attr('transform', null); + } else { + var factor = {top: 1, bottom: -1}[valign]; + var markerOffsetY = factor * (0.5 * (lineHeight - height + 3)); + layers.attr('transform', 'translate(0,' + markerOffsetY + ')'); + } + var fill = layers .selectAll('g.legendfill') .data([d]); @@ -26397,7 +26635,7 @@ module.exports = function style(s, gd) { function boundVal(attrIn, arrayToValFn, bounds) { var valIn = Lib.nestedProperty(trace, attrIn).get(); - var valToBound = (Array.isArray(valIn) && arrayToValFn) ? + var valToBound = (Lib.isArrayOrTypedArray(valIn) && arrayToValFn) ? arrayToValFn(valIn) : valIn; @@ -26478,20 +26716,22 @@ module.exports = function style(s, gd) { } function styleBars(d) { - var trace = d[0].trace, - marker = trace.marker || {}, - markerLine = marker.line || {}, - barpath = d3.select(this).select('g.legendpoints') - .selectAll('path.legendbar') - .data(Registry.traceIs(trace, 'bar') ? [d] : []); + var trace = d[0].trace; + var marker = trace.marker || {}; + var markerLine = marker.line || {}; + + var barpath = d3.select(this).select('g.legendpoints') + .selectAll('path.legendbar') + .data(Registry.traceIs(trace, 'bar') ? [d] : []); barpath.enter().append('path').classed('legendbar', true) .attr('d', 'M6,6H-6V-6H6Z') .attr('transform', 'translate(20,0)'); barpath.exit().remove(); + barpath.each(function(d) { - var p = d3.select(this), - d0 = d[0], - w = (d0.mlw + 1 || markerLine.width + 1) - 1; + var p = d3.select(this); + var d0 = d[0]; + var w = (d0.mlw + 1 || markerLine.width + 1) - 1; p.style('stroke-width', w + 'px') .call(Color.fill, d0.mc || marker.color); @@ -26503,18 +26743,20 @@ module.exports = function style(s, gd) { } function styleBoxes(d) { - var trace = d[0].trace, - pts = d3.select(this).select('g.legendpoints') - .selectAll('path.legendbox') - .data(Registry.traceIs(trace, 'box-violin') && trace.visible ? [d] : []); + var trace = d[0].trace; + + var pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legendbox') + .data(Registry.traceIs(trace, 'box-violin') && trace.visible ? [d] : []); pts.enter().append('path').classed('legendbox', true) // if we want the median bar, prepend M6,0H-6 .attr('d', 'M6,6H-6V-6H6Z') .attr('transform', 'translate(20,0)'); pts.exit().remove(); + pts.each(function() { - var w = trace.line.width, - p = d3.select(this); + var w = trace.line.width; + var p = d3.select(this); p.style('stroke-width', w + 'px') .call(Color.fill, trace.fillcolor); @@ -26526,10 +26768,11 @@ module.exports = function style(s, gd) { } function styleCandles(d) { - var trace = d[0].trace, - pts = d3.select(this).select('g.legendpoints') - .selectAll('path.legendcandle') - .data(trace.type === 'candlestick' && trace.visible ? [d, d] : []); + var trace = d[0].trace; + + var pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legendcandle') + .data(trace.type === 'candlestick' && trace.visible ? [d, d] : []); pts.enter().append('path').classed('legendcandle', true) .attr('d', function(_, i) { if(i) return 'M-15,0H-8M-8,6V-6H8Z'; // increasing @@ -26538,10 +26781,11 @@ module.exports = function style(s, gd) { .attr('transform', 'translate(20,0)') .style('stroke-miterlimit', 1); pts.exit().remove(); + pts.each(function(_, i) { var container = trace[i ? 'increasing' : 'decreasing']; - var w = container.line.width, - p = d3.select(this); + var w = container.line.width; + var p = d3.select(this); p.style('stroke-width', w + 'px') .call(Color.fill, container.fillcolor); @@ -26553,10 +26797,11 @@ module.exports = function style(s, gd) { } function styleOHLC(d) { - var trace = d[0].trace, - pts = d3.select(this).select('g.legendpoints') - .selectAll('path.legendohlc') - .data(trace.type === 'ohlc' && trace.visible ? [d, d] : []); + var trace = d[0].trace; + + var pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legendohlc') + .data(trace.type === 'ohlc' && trace.visible ? [d, d] : []); pts.enter().append('path').classed('legendohlc', true) .attr('d', function(_, i) { if(i) return 'M-15,0H0M-8,-6V0'; // increasing @@ -26565,10 +26810,11 @@ module.exports = function style(s, gd) { .attr('transform', 'translate(20,0)') .style('stroke-miterlimit', 1); pts.exit().remove(); + pts.each(function(_, i) { var container = trace[i ? 'increasing' : 'decreasing']; - var w = container.line.width, - p = d3.select(this); + var w = container.line.width; + var p = d3.select(this); p.style('fill', 'none') .call(Drawing.dashLine, container.line.dash, w); @@ -26580,10 +26826,11 @@ module.exports = function style(s, gd) { } function stylePies(d) { - var trace = d[0].trace, - pts = d3.select(this).select('g.legendpoints') - .selectAll('path.legendpie') - .data(Registry.traceIs(trace, 'pie') && trace.visible ? [d] : []); + var trace = d[0].trace; + + var pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legendpie') + .data(Registry.traceIs(trace, 'pie') && trace.visible ? [d] : []); pts.enter().append('path').classed('legendpie', true) .attr('d', 'M6,6H-6V-6H6Z') .attr('transform', 'translate(20,0)'); @@ -26593,9 +26840,9 @@ module.exports = function style(s, gd) { } }; -},{"../../lib":169,"../../registry":259,"../../traces/pie/style_one":364,"../../traces/scatter/subtypes":390,"../color":50,"../drawing":75,"d3":16}],112:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"../../traces/pie/style_one":365,"../../traces/scatter/subtypes":391,"../color":51,"../drawing":72,"d3":16}],109:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26793,10 +27040,9 @@ function handleCartesian(gd, ev) { var ax, i; if(astr === 'zoom') { - var mag = (val === 'in') ? 0.5 : 2, - r0 = (1 + mag) / 2, - r1 = (1 - mag) / 2; - + var mag = (val === 'in') ? 0.5 : 2; + var r0 = (1 + mag) / 2; + var r1 = (1 - mag) / 2; var axName; for(i = 0; i < axList.length; i++) { @@ -26857,7 +27103,7 @@ function handleCartesian(gd, ev) { aobj[astr] = val; } - Registry.call('relayout', gd, aobj); + Registry.call('_guiRelayout', gd, aobj); } modeBarButtons.zoom3d = { @@ -26913,7 +27159,7 @@ function handleDrag3d(gd, ev) { var val2d = (val === 'pan') ? val : 'zoom'; layoutUpdate.dragmode = val2d; - Registry.call('relayout', gd, layoutUpdate); + Registry.call('_guiRelayout', gd, layoutUpdate); } modeBarButtons.resetCameraDefault3d = { @@ -26940,9 +27186,9 @@ function handleCamera3d(gd, ev) { var aobj = {}; for(var i = 0; i < sceneIds.length; i++) { - var sceneId = sceneIds[i], - key = sceneId + '.camera', - scene = fullLayout[sceneId]._scene; + var sceneId = sceneIds[i]; + var key = sceneId + '.camera'; + var scene = fullLayout[sceneId]._scene; if(attr === 'resetDefault') { aobj[key] = null; @@ -26952,7 +27198,7 @@ function handleCamera3d(gd, ev) { } } - Registry.call('relayout', gd, aobj); + Registry.call('_guiRelayout', gd, aobj); } modeBarButtons.hoverClosest3d = { @@ -26966,54 +27212,48 @@ modeBarButtons.hoverClosest3d = { click: handleHover3d }; -function handleHover3d(gd, ev) { +function getNextHover3d(gd, ev) { var button = ev.currentTarget; - var val = button._previousVal || false; - var layout = gd.layout; + var val = button._previousVal; var fullLayout = gd._fullLayout; var sceneIds = fullLayout._subplots.gl3d; var axes = ['xaxis', 'yaxis', 'zaxis']; - var spikeAttrs = ['showspikes', 'spikesides', 'spikethickness', 'spikecolor']; // initialize 'current spike' object to be stored in the DOM var currentSpikes = {}; - var axisSpikes = {}; var layoutUpdate = {}; if(val) { - layoutUpdate = Lib.extendDeep(layout, val); + layoutUpdate = val; button._previousVal = null; } else { - layoutUpdate = { - 'allaxes.showspikes': false - }; - for(var i = 0; i < sceneIds.length; i++) { - var sceneId = sceneIds[i], - sceneLayout = fullLayout[sceneId], - sceneSpikes = currentSpikes[sceneId] = {}; + var sceneId = sceneIds[i]; + var sceneLayout = fullLayout[sceneId]; - sceneSpikes.hovermode = sceneLayout.hovermode; - layoutUpdate[sceneId + '.hovermode'] = false; + var hovermodeAStr = sceneId + '.hovermode'; + currentSpikes[hovermodeAStr] = sceneLayout.hovermode; + layoutUpdate[hovermodeAStr] = false; // copy all the current spike attrs for(var j = 0; j < 3; j++) { var axis = axes[j]; - axisSpikes = sceneSpikes[axis] = {}; - - for(var k = 0; k < spikeAttrs.length; k++) { - var spikeAttr = spikeAttrs[k]; - axisSpikes[spikeAttr] = sceneLayout[axis][spikeAttr]; - } + var spikeAStr = sceneId + '.' + axis + '.showspikes'; + layoutUpdate[spikeAStr] = false; + currentSpikes[spikeAStr] = sceneLayout[axis].showspikes; } } - button._previousVal = Lib.extendDeep({}, currentSpikes); + button._previousVal = currentSpikes; } + return layoutUpdate; +} - Registry.call('relayout', gd, layoutUpdate); +function handleHover3d(gd, ev) { + var layoutUpdate = getNextHover3d(gd, ev); + Registry.call('_guiRelayout', gd, layoutUpdate); } modeBarButtons.zoomInGeo = { @@ -27069,7 +27309,7 @@ function handleGeo(gd, ev) { var scale = geoLayout.projection.scale; var newScale = (val === 'in') ? 2 * scale : 0.5 * scale; - Registry.call('relayout', gd, id + '.projection.scale', newScale); + Registry.call('_guiRelayout', gd, id + '.projection.scale', newScale); } else if(attr === 'reset') { resetView(gd, 'geo'); } @@ -27097,18 +27337,20 @@ modeBarButtons.hoverClosestPie = { click: toggleHover }; -function toggleHover(gd) { +function getNextHover(gd) { var fullLayout = gd._fullLayout; - var onHoverVal; + if(fullLayout.hovermode) return false; + if(fullLayout._has('cartesian')) { - onHoverVal = fullLayout._isHoriz ? 'y' : 'x'; + return fullLayout._isHoriz ? 'y' : 'x'; } - else onHoverVal = 'closest'; + return 'closest'; +} - var newHover = gd._fullLayout.hovermode ? false : onHoverVal; - - Registry.call('relayout', gd, 'hovermode', newHover); +function toggleHover(gd) { + var newHover = getNextHover(gd); + Registry.call('_guiRelayout', gd, 'hovermode', newHover); } // buttons when more then one plot types are present @@ -27122,12 +27364,10 @@ modeBarButtons.toggleHover = { icon: Icons.tooltip_basic, gravity: 'ne', click: function(gd, ev) { - toggleHover(gd); + var layoutUpdate = getNextHover3d(gd, ev); + layoutUpdate.hovermode = getNextHover(gd); - // the 3d hovermode update must come - // last so that layout.hovermode update does not - // override scene?.hovermode?.layout. - handleHover3d(gd, ev); + Registry.call('_guiRelayout', gd, layoutUpdate); } }; @@ -27163,7 +27403,7 @@ modeBarButtons.toggleSpikelines = { var aobj = setSpikelineVisibility(gd); - Registry.call('relayout', gd, aobj); + Registry.call('_guiRelayout', gd, aobj); } }; @@ -27210,12 +27450,12 @@ function resetView(gd, subplotType) { } } - Registry.call('relayout', gd, aObj); + Registry.call('_guiRelayout', gd, aObj); } -},{"../../../build/ploticon":2,"../../lib":169,"../../plots/cartesian/axis_ids":217,"../../plots/plots":246,"../../registry":259}],113:[function(_dereq_,module,exports){ +},{"../../../build/ploticon":2,"../../lib":168,"../../plots/cartesian/axis_ids":215,"../../plots/plots":245,"../../registry":257}],110:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27227,9 +27467,9 @@ function resetView(gd, subplotType) { exports.manage = _dereq_('./manage'); -},{"./manage":114}],114:[function(_dereq_,module,exports){ +},{"./manage":111}],111:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27255,11 +27495,11 @@ var modeBarButtons = _dereq_('./buttons'); * */ module.exports = function manageModeBar(gd) { - var fullLayout = gd._fullLayout, - context = gd._context, - modeBar = fullLayout._modeBar; + var fullLayout = gd._fullLayout; + var context = gd._context; + var modeBar = fullLayout._modeBar; - if(!context.displayModeBar) { + if(!context.displayModeBar && !context.watermark) { if(modeBar) { modeBar.destroy(); delete fullLayout._modeBar; @@ -27287,11 +27527,15 @@ module.exports = function manageModeBar(gd) { if(Array.isArray(customButtons) && customButtons.length) { buttonGroups = fillCustomButton(customButtons); } + else if(!context.displayModeBar && context.watermark) { + buttonGroups = []; + } else { buttonGroups = getButtonGroups( gd, context.modeBarButtonsToRemove, - context.modeBarButtonsToAdd + context.modeBarButtonsToAdd, + context.showSendToCloud ); } @@ -27300,7 +27544,7 @@ module.exports = function manageModeBar(gd) { }; // logic behind which buttons are displayed by default -function getButtonGroups(gd, buttonsToRemove, buttonsToAdd) { +function getButtonGroups(gd, buttonsToRemove, buttonsToAdd, showSendToCloud) { var fullLayout = gd._fullLayout; var fullData = gd._fullData; @@ -27331,7 +27575,9 @@ function getButtonGroups(gd, buttonsToRemove, buttonsToAdd) { } // buttons common to all plot types - addGroup(['toImage', 'sendDataToCloud']); + var commonGroup = ['toImage']; + if(showSendToCloud) commonGroup.push('sendDataToCloud'); + addGroup(commonGroup); var zoomGroup = []; var hoverGroup = []; @@ -27482,9 +27728,9 @@ function fillCustomButton(customButtons) { return customButtons; } -},{"../../plots/cartesian/axis_ids":217,"../../registry":259,"../../traces/scatter/subtypes":390,"./buttons":112,"./modebar":115}],115:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axis_ids":215,"../../registry":257,"../../traces/scatter/subtypes":391,"./buttons":109,"./modebar":112}],112:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27499,7 +27745,7 @@ var isNumeric = _dereq_('fast-isnumeric'); var Lib = _dereq_('../../lib'); var Icons = _dereq_('../../../build/ploticon'); - +var Parser = new DOMParser(); /** * UI controller for interactive plots @@ -27531,11 +27777,28 @@ proto.update = function(graphInfo, buttons) { this.graphInfo = graphInfo; var context = this.graphInfo._context; + var fullLayout = this.graphInfo._fullLayout; + var modeBarId = 'modebar-' + fullLayout._uid; - if(context.displayModeBar === 'hover') { - this.element.className = 'modebar modebar--hover'; + this.element.setAttribute('id', modeBarId); + this._uid = modeBarId; + + this.element.className = 'modebar'; + if(context.displayModeBar === 'hover') this.element.className += ' modebar--hover ease-bg'; + + if(fullLayout.modebar.orientation === 'v') { + this.element.className += ' vertical'; + buttons = buttons.reverse(); } - else this.element.className = 'modebar'; + + var style = fullLayout.modebar; + var bgSelector = context.displayModeBar === 'hover' ? '.js-plotly-plot .plotly:hover ' : ''; + + Lib.deleteRelatedStyleRule(modeBarId); + Lib.addRelatedStyleRule(modeBarId, bgSelector + '#' + modeBarId, 'background-color: ' + style.bgcolor); + Lib.addRelatedStyleRule(modeBarId, '#' + modeBarId + ' .modebar-btn .icon path', 'fill: ' + style.color); + Lib.addRelatedStyleRule(modeBarId, '#' + modeBarId + ' .modebar-btn:hover .icon path', 'fill: ' + style.activecolor); + Lib.addRelatedStyleRule(modeBarId, '#' + modeBarId + ' .modebar-btn.active .icon path', 'fill: ' + style.activecolor); // if buttons or logo have changed, redraw modebar interior var needsNewButtons = !this.hasButtons(buttons); @@ -27549,8 +27812,18 @@ proto.update = function(graphInfo, buttons) { this.updateButtons(buttons); - if(context.displaylogo) { - this.element.appendChild(this.getLogo()); + if(context.watermark || context.displaylogo) { + var logoGroup = this.getLogo(); + if(context.watermark) { + logoGroup.className = logoGroup.className + ' watermark'; + } + + if(fullLayout.modebar.orientation === 'v') { + this.element.insertBefore(logoGroup, this.element.childNodes[0]); + } else { + this.element.appendChild(logoGroup); + } + this.hasLogo = true; } } @@ -27594,7 +27867,6 @@ proto.updateButtons = function(buttons) { proto.createGroup = function() { var group = document.createElement('div'); group.className = 'modebar-group'; - return group; }; @@ -27604,8 +27876,8 @@ proto.createGroup = function() { * @Return {HTMLelement} */ proto.createButton = function(config) { - var _this = this, - button = document.createElement('a'); + var _this = this; + var button = document.createElement('a'); button.setAttribute('rel', 'tooltip'); button.className = 'modebar-btn'; @@ -27658,31 +27930,42 @@ proto.createButton = function(config) { * @Param {object} thisIcon * @Param {number} thisIcon.width * @Param {string} thisIcon.path + * @Param {string} thisIcon.color * @Return {HTMLelement} */ proto.createIcon = function(thisIcon) { var iconHeight = isNumeric(thisIcon.height) ? - Number(thisIcon.height) : - thisIcon.ascent - thisIcon.descent, - svgNS = 'http://www.w3.org/2000/svg', - icon = document.createElementNS(svgNS, 'svg'), - path = document.createElementNS(svgNS, 'path'); + Number(thisIcon.height) : + thisIcon.ascent - thisIcon.descent; + var svgNS = 'http://www.w3.org/2000/svg'; + var icon; + + if(thisIcon.path) { + icon = document.createElementNS(svgNS, 'svg'); + icon.setAttribute('viewBox', [0, 0, thisIcon.width, iconHeight].join(' ')); + icon.setAttribute('class', 'icon'); + + var path = document.createElementNS(svgNS, 'path'); + path.setAttribute('d', thisIcon.path); + + if(thisIcon.transform) { + path.setAttribute('transform', thisIcon.transform); + } + else if(thisIcon.ascent !== undefined) { + // Legacy icon transform calculation + path.setAttribute('transform', 'matrix(1 0 0 -1 0 ' + thisIcon.ascent + ')'); + } + + icon.appendChild(path); + } + + if(thisIcon.svg) { + var svgDoc = Parser.parseFromString(thisIcon.svg, 'application/xml'); + icon = svgDoc.childNodes[0]; + } icon.setAttribute('height', '1em'); - icon.setAttribute('width', (thisIcon.width / iconHeight) + 'em'); - icon.setAttribute('viewBox', [0, 0, thisIcon.width, iconHeight].join(' ')); - - path.setAttribute('d', thisIcon.path); - - if(thisIcon.transform) { - path.setAttribute('transform', thisIcon.transform); - } - else if(thisIcon.ascent !== undefined) { - // Legacy icon transform calculation - path.setAttribute('transform', 'matrix(1 0 0 -1 0 ' + thisIcon.ascent + ')'); - } - - icon.appendChild(path); + icon.setAttribute('width', '1em'); return icon; }; @@ -27693,16 +27976,16 @@ proto.createIcon = function(thisIcon) { * @Return {HTMLelement} */ proto.updateActiveButton = function(buttonClicked) { - var fullLayout = this.graphInfo._fullLayout, - dataAttrClicked = (buttonClicked !== undefined) ? - buttonClicked.getAttribute('data-attr') : - null; + var fullLayout = this.graphInfo._fullLayout; + var dataAttrClicked = (buttonClicked !== undefined) ? + buttonClicked.getAttribute('data-attr') : + null; this.buttonElements.forEach(function(button) { - var thisval = button.getAttribute('data-val') || true, - dataAttr = button.getAttribute('data-attr'), - isToggleButton = (button.getAttribute('data-toggle') === 'true'), - button3 = d3.select(button); + var thisval = button.getAttribute('data-val') || true; + var dataAttr = button.getAttribute('data-attr'); + var isToggleButton = (button.getAttribute('data-toggle') === 'true'); + var button3 = d3.select(button); // Use 'data-toggle' and 'buttonClicked' to toggle buttons // that have no one-to-one equivalent in fullLayout @@ -27749,15 +28032,15 @@ proto.hasButtons = function(buttons) { * @return {HTMLDivElement} The logo image wrapped in a group */ proto.getLogo = function() { - var group = this.createGroup(), - a = document.createElement('a'); + var group = this.createGroup(); + var a = document.createElement('a'); a.href = 'https://plot.ly/'; a.target = '_blank'; a.setAttribute('data-title', Lib._(this.graphInfo, 'Produced with Plotly')); a.className = 'modebar-btn plotlyjsicon modebar-btn--logo'; - a.appendChild(this.createIcon(Icons.plotlylogo)); + a.appendChild(this.createIcon(Icons.newplotlylogo)); group.appendChild(a); return group; @@ -27773,6 +28056,7 @@ proto.removeAllButtons = function() { proto.destroy = function() { Lib.removeElement(this.container.querySelector('.modebar')); + Lib.deleteRelatedStyleRule(this._uid); }; function createModeBar(gd, buttons) { @@ -27795,9 +28079,9 @@ function createModeBar(gd, buttons) { module.exports = createModeBar; -},{"../../../build/ploticon":2,"../../lib":169,"d3":16,"fast-isnumeric":18}],116:[function(_dereq_,module,exports){ +},{"../../../build/ploticon":2,"../../lib":168,"d3":16,"fast-isnumeric":18}],113:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27931,9 +28215,9 @@ module.exports = { editType: 'plot' }; -},{"../../plot_api/plot_template":204,"../../plots/font_attributes":240,"../color/attributes":49}],117:[function(_dereq_,module,exports){ +},{"../../plot_api/plot_template":202,"../../plots/font_attributes":239,"../color/attributes":50}],114:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27960,9 +28244,9 @@ module.exports = { darkAmount: 10 }; -},{}],118:[function(_dereq_,module,exports){ +},{}],115:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28053,9 +28337,9 @@ function getPosDflt(containerOut, layout, counterAxes) { return [containerOut.domain[0], posY + constants.yPad]; } -},{"../../lib":169,"../../plot_api/plot_template":204,"../../plots/array_container_defaults":210,"../color":50,"./attributes":116,"./constants":117}],119:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../plots/array_container_defaults":208,"../color":51,"./attributes":113,"./constants":114}],116:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28073,7 +28357,6 @@ var Drawing = _dereq_('../drawing'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); var axisIds = _dereq_('../../plots/cartesian/axis_ids'); -var anchorUtils = _dereq_('../legend/anchor_utils'); var alignmentConstants = _dereq_('../../constants/alignment'); var LINE_SPACING = alignmentConstants.LINE_SPACING; @@ -28101,9 +28384,9 @@ module.exports = function draw(gd) { }); selectors.each(function(d) { - var selector = d3.select(this), - axisLayout = d, - selectorLayout = axisLayout.rangeselector; + var selector = d3.select(this); + var axisLayout = d; + var selectorLayout = axisLayout.rangeselector; var buttons = selector.selectAll('g.button') .data(Lib.filterVisible(selectorLayout.buttons)); @@ -28125,7 +28408,7 @@ module.exports = function draw(gd) { button.on('click', function() { if(gd._dragged) return; - Registry.call('relayout', gd, update); + Registry.call('_guiRelayout', gd, update); }); button.on('mouseover', function() { @@ -28274,21 +28557,21 @@ function reposition(gd, buttons, opts, axName, selector) { var ly = graphSize.t + graphSize.h * (1 - opts.y); var xanchor = 'left'; - if(anchorUtils.isRightAnchor(opts)) { + if(Lib.isRightAnchor(opts)) { lx -= width; xanchor = 'right'; } - if(anchorUtils.isCenterAnchor(opts)) { + if(Lib.isCenterAnchor(opts)) { lx -= width / 2; xanchor = 'center'; } var yanchor = 'top'; - if(anchorUtils.isBottomAnchor(opts)) { + if(Lib.isBottomAnchor(opts)) { ly -= height; yanchor = 'bottom'; } - if(anchorUtils.isMiddleAnchor(opts)) { + if(Lib.isMiddleAnchor(opts)) { ly -= height / 2; yanchor = 'middle'; } @@ -28310,9 +28593,9 @@ function reposition(gd, buttons, opts, axName, selector) { selector.attr('transform', 'translate(' + lx + ',' + ly + ')'); } -},{"../../constants/alignment":148,"../../lib":169,"../../lib/svg_text_utils":191,"../../plots/cartesian/axis_ids":217,"../../plots/plots":246,"../../registry":259,"../color":50,"../drawing":75,"../legend/anchor_utils":102,"./constants":117,"./get_update_object":120,"d3":16}],120:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../lib":168,"../../lib/svg_text_utils":189,"../../plots/cartesian/axis_ids":215,"../../plots/plots":245,"../../registry":257,"../color":51,"../drawing":72,"./constants":114,"./get_update_object":117,"d3":16}],117:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28344,10 +28627,8 @@ module.exports = function getUpdateObject(axisLayout, buttonLayout) { function getXRange(axisLayout, buttonLayout) { var currentRange = axisLayout.range; var base = new Date(axisLayout.r2l(currentRange[1])); - - var step = buttonLayout.step, - count = buttonLayout.count; - + var step = buttonLayout.step; + var count = buttonLayout.count; var range0; switch(buttonLayout.stepmode) { @@ -28367,9 +28648,9 @@ function getXRange(axisLayout, buttonLayout) { return [range0, range1]; } -},{"d3":16}],121:[function(_dereq_,module,exports){ +},{"d3":16}],118:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28394,9 +28675,9 @@ module.exports = { draw: _dereq_('./draw') }; -},{"./attributes":116,"./defaults":118,"./draw":119}],122:[function(_dereq_,module,exports){ +},{"./attributes":113,"./defaults":115,"./draw":116}],119:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28468,9 +28749,9 @@ module.exports = { editType: 'calc' }; -},{"../color/attributes":49}],123:[function(_dereq_,module,exports){ +},{"../color/attributes":50}],120:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28502,9 +28783,9 @@ module.exports = function calcAutorange(gd) { } }; -},{"../../plots/cartesian/autorange":213,"../../plots/cartesian/axis_ids":217,"./constants":124}],124:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/autorange":211,"../../plots/cartesian/axis_ids":215,"./constants":121}],121:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28558,9 +28839,9 @@ module.exports = { extraPad: 15 }; -},{}],125:[function(_dereq_,module,exports){ +},{}],122:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28644,9 +28925,9 @@ module.exports = function handleDefaults(layoutIn, layoutOut, axName) { containerOut._input = containerIn; }; -},{"../../lib":169,"../../plot_api/plot_template":204,"../../plots/cartesian/axis_ids":217,"./attributes":122,"./oppaxis_attributes":128}],126:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plot_api/plot_template":202,"../../plots/cartesian/axis_ids":215,"./attributes":119,"./oppaxis_attributes":126}],123:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28666,7 +28947,7 @@ var Color = _dereq_('../color'); var Titles = _dereq_('../titles'); var Cartesian = _dereq_('../../plots/cartesian'); -var Axes = _dereq_('../../plots/cartesian/axes'); +var axisIDs = _dereq_('../../plots/cartesian/axis_ids'); var dragElement = _dereq_('../dragelement'); var setCursor = _dereq_('../../lib/setcursor'); @@ -28674,8 +28955,13 @@ var setCursor = _dereq_('../../lib/setcursor'); var constants = _dereq_('./constants'); module.exports = function(gd) { - var fullLayout = gd._fullLayout, - rangeSliderData = makeRangeSliderData(fullLayout); + var fullLayout = gd._fullLayout; + var rangeSliderData = fullLayout._rangeSliderData; + for(var i = 0; i < rangeSliderData.length; i++) { + var opts = rangeSliderData[i][constants.name]; + // fullLayout._uid may not exist when we call makeData + opts._clipId = opts._id + '-' + fullLayout._uid; + } /* * @@ -28702,10 +28988,6 @@ module.exports = function(gd) { .selectAll('g.' + constants.containerClassName) .data(rangeSliderData, keyFunction); - rangeSliders.enter().append('g') - .classed(constants.containerClassName, true) - .attr('pointer-events', 'all'); - // remove exiting sliders and their corresponding clip paths rangeSliders.exit().each(function(axisOpts) { var opts = axisOpts[constants.name]; @@ -28715,48 +28997,51 @@ module.exports = function(gd) { // return early if no range slider is visible if(rangeSliderData.length === 0) return; + rangeSliders.enter().append('g') + .classed(constants.containerClassName, true) + .attr('pointer-events', 'all'); + // for all present range sliders rangeSliders.each(function(axisOpts) { - var rangeSlider = d3.select(this), - opts = axisOpts[constants.name], - oppAxisOpts = fullLayout[Axes.id2name(axisOpts.anchor)], - oppAxisRangeOpts = opts[Axes.id2name(axisOpts.anchor)]; + var rangeSlider = d3.select(this); + var opts = axisOpts[constants.name]; + var oppAxisOpts = fullLayout[axisIDs.id2name(axisOpts.anchor)]; + var oppAxisRangeOpts = opts[axisIDs.id2name(axisOpts.anchor)]; // update range // Expand slider range to the axis range - // TODO: what if the ranges are reversed? if(opts.range) { - var outRange = opts.range; - var axRange = axisOpts.range; + var rng = Lib.simpleMap(opts.range, axisOpts.r2l); + var axRng = Lib.simpleMap(axisOpts.range, axisOpts.r2l); + var newRng; - outRange[0] = axisOpts.l2r(Math.min(axisOpts.r2l(outRange[0]), axisOpts.r2l(axRange[0]))); - outRange[1] = axisOpts.l2r(Math.max(axisOpts.r2l(outRange[1]), axisOpts.r2l(axRange[1]))); - opts._input.range = outRange.slice(); + if(axRng[0] < axRng[1]) { + newRng = [ + Math.min(rng[0], axRng[0]), + Math.max(rng[1], axRng[1]) + ]; + } else { + newRng = [ + Math.max(rng[0], axRng[0]), + Math.min(rng[1], axRng[1]) + ]; + } + + opts.range = opts._input.range = Lib.simpleMap(newRng, axisOpts.l2r); } axisOpts.cleanRange('rangeslider.range'); - // update range slider dimensions var margin = fullLayout.margin; var graphSize = fullLayout._size; var domain = axisOpts.domain; - var tickHeight = (axisOpts._boundingBox || {}).height || 0; + var tickHeight = opts._tickHeight; - var oppBottom = Infinity; - var subplotData = Axes.getSubplots(gd, axisOpts); - for(var i = 0; i < subplotData.length; i++) { - var oppAxis = Axes.getFromId(gd, subplotData[i].substr(subplotData[i].indexOf('y'))); - oppBottom = Math.min(oppBottom, oppAxis.domain[0]); - } - - opts._id = constants.name + axisOpts._id; - opts._clipId = opts._id + '-' + fullLayout._uid; + var oppBottom = opts._oppBottom; opts._width = graphSize.w * (domain[1] - domain[0]); - opts._height = (fullLayout.height - margin.b - margin.t) * opts.thickness; - opts._offsetShift = Math.floor(opts.borderwidth / 2); var x = Math.round(margin.l + (graphSize.w * domain[0])); @@ -28770,9 +29055,9 @@ module.exports = function(gd) { // update data <--> pixel coordinate conversion methods - var range0 = axisOpts.r2l(opts.range[0]), - range1 = axisOpts.r2l(opts.range[1]), - dist = range1 - range0; + var range0 = axisOpts.r2l(opts.range[0]); + var range1 = axisOpts.r2l(opts.range[1]); + var dist = range1 - range0; opts.p2d = function(v) { return (v / opts._width) * dist + range0; @@ -28785,9 +29070,9 @@ module.exports = function(gd) { opts._rl = [range0, range1]; if(oppAxisRangeOpts.rangemode !== 'match') { - var range0OppAxis = oppAxisOpts.r2l(oppAxisRangeOpts.range[0]), - range1OppAxis = oppAxisOpts.r2l(oppAxisRangeOpts.range[1]), - distOppAxis = range1OppAxis - range0OppAxis; + var range0OppAxis = oppAxisOpts.r2l(oppAxisRangeOpts.range[0]); + var range1OppAxis = oppAxisOpts.r2l(oppAxisRangeOpts.range[1]); + var distOppAxis = range1OppAxis - range0OppAxis; opts.d2pOppAxis = function(v) { return (v - range0OppAxis) / distOppAxis * opts._height; @@ -28819,53 +29104,26 @@ module.exports = function(gd) { placeholder: fullLayout._dfltTitle.x, attributes: { x: axisOpts._offset + axisOpts._length / 2, - y: y + opts._height + opts._offsetShift + 10 + 1.5 * axisOpts.titlefont.size, + y: y + opts._height + opts._offsetShift + 10 + 1.5 * axisOpts.title.font.size, 'text-anchor': 'middle' } }); } - - // update margins - Plots.autoMargin(gd, opts._id, { - x: domain[0], - y: oppBottom, - l: 0, - r: 0, - t: 0, - b: opts._height + margin.b + tickHeight, - pad: constants.extraPad + opts._offsetShift * 2 - }); }); }; -function makeRangeSliderData(fullLayout) { - var axes = Axes.list({ _fullLayout: fullLayout }, 'x', true), - name = constants.name, - out = []; - - if(fullLayout._has('gl2d')) return out; - - for(var i = 0; i < axes.length; i++) { - var ax = axes[i]; - - if(ax[name] && ax[name].visible) out.push(ax); - } - - return out; -} - function setupDragElement(rangeSlider, gd, axisOpts, opts) { - var slideBox = rangeSlider.select('rect.' + constants.slideBoxClassName).node(), - grabAreaMin = rangeSlider.select('rect.' + constants.grabAreaMinClassName).node(), - grabAreaMax = rangeSlider.select('rect.' + constants.grabAreaMaxClassName).node(); + var slideBox = rangeSlider.select('rect.' + constants.slideBoxClassName).node(); + var grabAreaMin = rangeSlider.select('rect.' + constants.grabAreaMinClassName).node(); + var grabAreaMax = rangeSlider.select('rect.' + constants.grabAreaMaxClassName).node(); rangeSlider.on('mousedown', function() { - var event = d3.event, - target = event.target, - startX = event.clientX, - offsetX = startX - rangeSlider.node().getBoundingClientRect().left, - minVal = opts.d2p(axisOpts._rl[0]), - maxVal = opts.d2p(axisOpts._rl[1]); + var event = d3.event; + var target = event.target; + var startX = event.clientX; + var offsetX = startX - rangeSlider.node().getBoundingClientRect().left; + var minVal = opts.d2p(axisOpts._rl[0]); + var maxVal = opts.d2p(axisOpts._rl[1]); var dragCover = dragElement.coverSlip(); @@ -28929,11 +29187,11 @@ function setDataRange(rangeSlider, gd, axisOpts, opts) { return axisOpts.l2r(Lib.constrain(v, opts._rl[0], opts._rl[1])); } - var dataMin = clamp(opts.p2d(opts._pixelMin)), - dataMax = clamp(opts.p2d(opts._pixelMax)); + var dataMin = clamp(opts.p2d(opts._pixelMin)); + var dataMax = clamp(opts.p2d(opts._pixelMax)); window.requestAnimationFrame(function() { - Registry.call('relayout', gd, axisOpts._name + '.range', [dataMin, dataMax]); + Registry.call('_guiRelayout', gd, axisOpts._name + '.range', [dataMin, dataMax]); }); } @@ -28952,8 +29210,8 @@ function setPixelRange(rangeSlider, gd, axisOpts, opts, oppAxisOpts, oppAxisRang return Lib.constrain(v, -hw2, opts._width + hw2); } - var pixelMin = clamp(opts.d2p(axisOpts._rl[0])), - pixelMax = clamp(opts.d2p(axisOpts._rl[1])); + var pixelMin = clamp(opts.d2p(axisOpts._rl[0])); + var pixelMax = clamp(opts.d2p(axisOpts._rl[1])); rangeSlider.select('rect.' + constants.slideBoxClassName) .attr('x', pixelMin) @@ -28967,8 +29225,8 @@ function setPixelRange(rangeSlider, gd, axisOpts, opts, oppAxisOpts, oppAxisRang .attr('width', opts._width - pixelMax); if(oppAxisRangeOpts.rangemode !== 'match') { - var pixelMinOppAxis = opts._height - clampOppAxis(opts.d2pOppAxis(oppAxisOpts._rl[1])), - pixelMaxOppAxis = opts._height - clampOppAxis(opts.d2pOppAxis(oppAxisOpts._rl[0])); + var pixelMinOppAxis = opts._height - clampOppAxis(opts.d2pOppAxis(oppAxisOpts._rl[1])); + var pixelMaxOppAxis = opts._height - clampOppAxis(opts.d2pOppAxis(oppAxisOpts._rl[0])); rangeSlider.select('rect.' + constants.maskMinOppAxisClassName) .attr('x', pixelMin) @@ -28990,8 +29248,8 @@ function setPixelRange(rangeSlider, gd, axisOpts, opts, oppAxisOpts, oppAxisRang // https://github.com/plotly/plotly.js/pull/1409 var offset = 0.5; - var xMin = Math.round(clampHandle(pixelMin - hw2)) - offset, - xMax = Math.round(clampHandle(pixelMax - hw2)) + offset; + var xMin = Math.round(clampHandle(pixelMin - hw2)) - offset; + var xMax = Math.round(clampHandle(pixelMax - hw2)) + offset; rangeSlider.select('g.' + constants.grabberMinClassName) .attr('transform', 'translate(' + xMin + ',' + offset + ')'); @@ -29010,8 +29268,8 @@ function drawBg(rangeSlider, gd, axisOpts, opts) { }); var borderCorrect = (opts.borderwidth % 2) === 0 ? - opts.borderwidth : - opts.borderwidth - 1; + opts.borderwidth : + opts.borderwidth - 1; var offsetShift = -opts._offsetShift; var lw = Drawing.crispRound(gd, opts.borderwidth); @@ -29040,15 +29298,14 @@ function addClipPath(rangeSlider, gd, axisOpts, opts) { } function drawRangePlot(rangeSlider, gd, axisOpts, opts) { - var subplotData = Axes.getSubplots(gd, axisOpts), - calcData = gd.calcdata; + var calcData = gd.calcdata; var rangePlots = rangeSlider.selectAll('g.' + constants.rangePlotClassName) - .data(subplotData, Lib.identity); + .data(axisOpts._subplotsWith, Lib.identity); rangePlots.enter().append('g') .attr('class', function(id) { return constants.rangePlotClassName + ' ' + id; }) - .call(Drawing.setClipUrl, opts._clipId); + .call(Drawing.setClipUrl, opts._clipId, gd); rangePlots.order(); @@ -29057,12 +29314,12 @@ function drawRangePlot(rangeSlider, gd, axisOpts, opts) { var mainplotinfo; rangePlots.each(function(id, i) { - var plotgroup = d3.select(this), - isMainPlot = (i === 0); + var plotgroup = d3.select(this); + var isMainPlot = (i === 0); - var oppAxisOpts = Axes.getFromId(gd, id, 'y'), - oppAxisName = oppAxisOpts._name, - oppAxisRangeOpts = opts[oppAxisName]; + var oppAxisOpts = axisIDs.getFromId(gd, id, 'y'); + var oppAxisName = oppAxisOpts._name; + var oppAxisRangeOpts = opts[oppAxisName]; var mockFigure = { data: [], @@ -29092,6 +29349,11 @@ function drawRangePlot(rangeSlider, gd, axisOpts, opts) { var xa = mockFigure._fullLayout.xaxis; var ya = mockFigure._fullLayout[oppAxisName]; + xa.clearCalc(); + xa.setScale(); + ya.clearCalc(); + ya.setScale(); + var plotinfo = { id: id, plotgroup: plotgroup, @@ -29114,8 +29376,8 @@ function filterRangePlotCalcData(calcData, subplotId) { var out = []; for(var i = 0; i < calcData.length; i++) { - var calcTrace = calcData[i], - trace = calcTrace[0].trace; + var calcTrace = calcData[i]; + var trace = calcTrace[0].trace; if(trace.xaxis + trace.yaxis === subplotId) { out.push(calcTrace); @@ -29244,9 +29506,79 @@ function drawGrabbers(rangeSlider, gd, axisOpts, opts) { grabAreaMax.attr('height', opts._height); } -},{"../../lib":169,"../../lib/setcursor":189,"../../plots/cartesian":225,"../../plots/cartesian/axes":214,"../../plots/plots":246,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"../titles":141,"./constants":124,"d3":16}],127:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../lib/setcursor":187,"../../plots/cartesian":224,"../../plots/cartesian/axis_ids":215,"../../plots/plots":245,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"../titles":139,"./constants":121,"d3":16}],124:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 axisIDs = _dereq_('../../plots/cartesian/axis_ids'); +var constants = _dereq_('./constants'); +var name = constants.name; + +function isVisible(ax) { + var rangeSlider = ax && ax[name]; + return rangeSlider && rangeSlider.visible; +} +exports.isVisible = isVisible; + +exports.makeData = function(fullLayout) { + var axes = axisIDs.list({ _fullLayout: fullLayout }, 'x', true); + var margin = fullLayout.margin; + var rangeSliderData = []; + + if(!fullLayout._has('gl2d')) { + for(var i = 0; i < axes.length; i++) { + var ax = axes[i]; + + if(isVisible(ax)) { + rangeSliderData.push(ax); + + var opts = ax[name]; + opts._id = name + ax._id; + opts._height = (fullLayout.height - margin.b - margin.t) * opts.thickness; + opts._offsetShift = Math.floor(opts.borderwidth / 2); + } + } + } + + fullLayout._rangeSliderData = rangeSliderData; +}; + +exports.autoMarginOpts = function(gd, ax) { + var opts = ax[name]; + + var oppBottom = Infinity; + var counterAxes = ax._counterAxes; + for(var j = 0; j < counterAxes.length; j++) { + var counterId = counterAxes[j]; + var oppAxis = axisIDs.getFromId(gd, counterId); + oppBottom = Math.min(oppBottom, oppAxis.domain[0]); + } + opts._oppBottom = oppBottom; + + var tickHeight = (ax.side === 'bottom' && ax._boundingBox.height) || 0; + opts._tickHeight = tickHeight; + + return { + x: 0, + y: oppBottom, + l: 0, + r: 0, + t: 0, + b: opts._height + gd._fullLayout.margin.b + tickHeight, + pad: constants.extraPad + opts._offsetShift * 2 + }; +}; + +},{"../../plots/cartesian/axis_ids":215,"./constants":121}],125:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29258,6 +29590,7 @@ function drawGrabbers(rangeSlider, gd, axisOpts, opts) { var Lib = _dereq_('../../lib'); var attrs = _dereq_('./attributes'); var oppAxisAttrs = _dereq_('./oppaxis_attributes'); +var helpers = _dereq_('./helpers'); module.exports = { moduleType: 'component', @@ -29276,12 +29609,15 @@ module.exports = { layoutAttributes: _dereq_('./attributes'), handleDefaults: _dereq_('./defaults'), calcAutorange: _dereq_('./calc_autorange'), - draw: _dereq_('./draw') + draw: _dereq_('./draw'), + isVisible: helpers.isVisible, + makeData: helpers.makeData, + autoMarginOpts: helpers.autoMarginOpts }; -},{"../../lib":169,"./attributes":122,"./calc_autorange":123,"./defaults":125,"./draw":126,"./oppaxis_attributes":128}],128:[function(_dereq_,module,exports){ +},{"../../lib":168,"./attributes":119,"./calc_autorange":120,"./defaults":122,"./draw":123,"./helpers":124,"./oppaxis_attributes":126}],126:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29317,9 +29653,9 @@ module.exports = { editType: 'calc' }; -},{}],129:[function(_dereq_,module,exports){ +},{}],127:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29453,16 +29789,15 @@ module.exports = templatedArray('shape', { editType: 'arraydraw' }); -},{"../../lib/extend":163,"../../plot_api/plot_template":204,"../../traces/scatter/attributes":366,"../annotations/attributes":35,"../drawing/attributes":74}],130:[function(_dereq_,module,exports){ +},{"../../lib/extend":162,"../../plot_api/plot_template":202,"../../traces/scatter/attributes":367,"../annotations/attributes":36,"../drawing/attributes":71}],128:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Lib = _dereq_('../../lib'); @@ -29473,8 +29808,8 @@ var helpers = _dereq_('./helpers'); module.exports = function calcAutorange(gd) { - var fullLayout = gd._fullLayout, - shapeList = Lib.filterVisible(fullLayout.shapes); + var fullLayout = gd._fullLayout; + var shapeList = Lib.filterVisible(fullLayout.shapes); if(!shapeList.length || !gd._fullData.length) return; @@ -29485,8 +29820,8 @@ module.exports = function calcAutorange(gd) { var ax, bounds; if(shape.xref !== 'paper') { - var vx0 = shape.xsizemode === 'pixel' ? shape.xanchor : shape.x0, - vx1 = shape.xsizemode === 'pixel' ? shape.xanchor : shape.x1; + var vx0 = shape.xsizemode === 'pixel' ? shape.xanchor : shape.x0; + var vx1 = shape.xsizemode === 'pixel' ? shape.xanchor : shape.x1; ax = Axes.getFromId(gd, shape.xref); bounds = shapeBounds(ax, vx0, vx1, shape.path, constants.paramIsX); @@ -29496,8 +29831,8 @@ module.exports = function calcAutorange(gd) { } if(shape.yref !== 'paper') { - var vy0 = shape.ysizemode === 'pixel' ? shape.yanchor : shape.y0, - vy1 = shape.ysizemode === 'pixel' ? shape.yanchor : shape.y1; + var vy0 = shape.ysizemode === 'pixel' ? shape.yanchor : shape.y0; + var vy1 = shape.ysizemode === 'pixel' ? shape.yanchor : shape.y1; ax = Axes.getFromId(gd, shape.yref); bounds = shapeBounds(ax, vy0, vy1, shape.path, constants.paramIsY); @@ -29517,17 +29852,17 @@ function calcYPaddingOptions(shape) { } function calcPaddingOptions(lineWidth, sizeMode, v0, v1, path, isYAxis) { - var ppad = lineWidth / 2, - axisDirectionReverted = isYAxis; + var ppad = lineWidth / 2; + var axisDirectionReverted = isYAxis; if(sizeMode === 'pixel') { var coords = path ? - helpers.extractPathCoords(path, isYAxis ? constants.paramIsY : constants.paramIsX) : - [v0, v1]; - var maxValue = Lib.aggNums(Math.max, null, coords), - minValue = Lib.aggNums(Math.min, null, coords), - beforePad = minValue < 0 ? Math.abs(minValue) + ppad : ppad, - afterPad = maxValue > 0 ? maxValue + ppad : ppad; + helpers.extractPathCoords(path, isYAxis ? constants.paramIsY : constants.paramIsX) : + [v0, v1]; + var maxValue = Lib.aggNums(Math.max, null, coords); + var minValue = Lib.aggNums(Math.min, null, coords); + var beforePad = minValue < 0 ? Math.abs(minValue) + ppad : ppad; + var afterPad = maxValue > 0 ? maxValue + ppad : ppad; return { ppad: ppad, @@ -29540,19 +29875,19 @@ function calcPaddingOptions(lineWidth, sizeMode, v0, v1, path, isYAxis) { } function shapeBounds(ax, v0, v1, path, paramsToUse) { - var convertVal = (ax.type === 'category') ? ax.r2c : ax.d2c; + var convertVal = (ax.type === 'category' || ax.type === 'multicategory') ? ax.r2c : ax.d2c; if(v0 !== undefined) return [convertVal(v0), convertVal(v1)]; if(!path) return; - var min = Infinity, - max = -Infinity, - segments = path.match(constants.segmentRE), - i, - segment, - drawnParam, - params, - val; + var min = Infinity; + var max = -Infinity; + var segments = path.match(constants.segmentRE); + var i; + var segment; + var drawnParam; + var params; + var val; if(ax.type === 'date') convertVal = helpers.decodeDate(convertVal); @@ -29571,9 +29906,9 @@ function shapeBounds(ax, v0, v1, path, paramsToUse) { if(max >= min) return [min, max]; } -},{"../../lib":169,"../../plots/cartesian/axes":214,"./constants":131,"./helpers":134}],131:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"./constants":129,"./helpers":132}],129:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29635,9 +29970,9 @@ module.exports = { } }; -},{}],132:[function(_dereq_,module,exports){ +},{}],130:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29678,21 +30013,21 @@ function handleShapeDefaults(shapeIn, shapeOut, fullLayout) { coerce('line.width'); coerce('line.dash'); - var dfltType = shapeIn.path ? 'path' : 'rect', - shapeType = coerce('type', dfltType), - xSizeMode = coerce('xsizemode'), - ySizeMode = coerce('ysizemode'); + var dfltType = shapeIn.path ? 'path' : 'rect'; + var shapeType = coerce('type', dfltType); + var xSizeMode = coerce('xsizemode'); + var ySizeMode = coerce('ysizemode'); // positioning var axLetters = ['x', 'y']; for(var i = 0; i < 2; i++) { - var axLetter = axLetters[i], - attrAnchor = axLetter + 'anchor', - sizeMode = axLetter === 'x' ? xSizeMode : ySizeMode, - gdMock = {_fullLayout: fullLayout}, - ax, - pos2r, - r2pos; + var axLetter = axLetters[i]; + var attrAnchor = axLetter + 'anchor'; + var sizeMode = axLetter === 'x' ? xSizeMode : ySizeMode; + var gdMock = {_fullLayout: fullLayout}; + var ax; + var pos2r; + var r2pos; // xref, yref var axRef = Axes.coerceRef(shapeIn, shapeOut, gdMock, axLetter, '', 'paper'); @@ -29709,17 +30044,17 @@ function handleShapeDefaults(shapeIn, shapeOut, fullLayout) { // Coerce x0, x1, y0, y1 if(shapeType !== 'path') { - var dflt0 = 0.25, - dflt1 = 0.75; + var dflt0 = 0.25; + var dflt1 = 0.75; // hack until V2.0 when log has regular range behavior - make it look like other // ranges to send to coerce, then put it back after // this is all to give reasonable default position behavior on log axes, which is // a pretty unimportant edge case so we could just ignore this. - var attr0 = axLetter + '0', - attr1 = axLetter + '1', - in0 = shapeIn[attr0], - in1 = shapeIn[attr1]; + var attr0 = axLetter + '0'; + var attr1 = axLetter + '1'; + var in0 = shapeIn[attr0]; + var in1 = shapeIn[attr1]; shapeIn[attr0] = pos2r(shapeIn[attr0], true); shapeIn[attr1] = pos2r(shapeIn[attr1], true); @@ -29760,9 +30095,9 @@ function handleShapeDefaults(shapeIn, shapeOut, fullLayout) { } } -},{"../../lib":169,"../../plots/array_container_defaults":210,"../../plots/cartesian/axes":214,"./attributes":129,"./helpers":134}],133:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"../../plots/cartesian/axes":212,"./attributes":127,"./helpers":132}],131:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29857,12 +30192,11 @@ function drawOne(gd, index) { function drawShape(shapeLayer) { var attrs = { - 'data-index': index, - 'fill-rule': 'evenodd', - d: getPathString(gd, options) - }, - lineColor = options.line.width ? - options.line.color : 'rgba(0,0,0,0)'; + 'data-index': index, + 'fill-rule': 'evenodd', + d: getPathString(gd, options) + }; + var lineColor = options.line.width ? options.line.color : 'rgba(0,0,0,0)'; var path = shapeLayer.append('path') .attr(attrs) @@ -29883,9 +30217,10 @@ function setClipPath(shapePath, gd, shapeOptions) { // spans two subplots. See https://github.com/plotly/plotly.js/issues/1452 var clipAxes = (shapeOptions.xref + shapeOptions.yref).replace(/paper/g, ''); - shapePath.call(Drawing.setClipUrl, clipAxes ? - ('clip' + gd._fullLayout._uid + clipAxes) : - null + Drawing.setClipUrl( + shapePath, + clipAxes ? 'clip' + gd._fullLayout._uid + clipAxes : null, + gd ); } @@ -29906,22 +30241,22 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { var pathIn; // setup conversion functions - var xa = Axes.getFromId(gd, shapeOptions.xref), - ya = Axes.getFromId(gd, shapeOptions.yref), - x2p = helpers.getDataToPixel(gd, xa), - y2p = helpers.getDataToPixel(gd, ya, true), - p2x = helpers.getPixelToData(gd, xa), - p2y = helpers.getPixelToData(gd, ya, true); + var xa = Axes.getFromId(gd, shapeOptions.xref); + var ya = Axes.getFromId(gd, shapeOptions.yref); + var x2p = helpers.getDataToPixel(gd, xa); + var y2p = helpers.getDataToPixel(gd, ya, true); + var p2x = helpers.getPixelToData(gd, xa); + var p2y = helpers.getPixelToData(gd, ya, true); var sensoryElement = obtainSensoryElement(); var dragOptions = { - element: sensoryElement.node(), - gd: gd, - prepFn: startDrag, - doneFn: endDrag, - clickFn: abortDrag - }, - dragMode; + element: sensoryElement.node(), + gd: gd, + prepFn: startDrag, + doneFn: endDrag, + clickFn: abortDrag + }; + var dragMode; dragElement.init(dragOptions); @@ -29932,8 +30267,8 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { } function createLineDragHandles() { - var minSensoryWidth = 10, - sensoryWidth = Math.max(shapeOptions.line.width, minSensoryWidth); + var minSensoryWidth = 10; + var sensoryWidth = Math.max(shapeOptions.line.width, minSensoryWidth); // Helper shapes group // Note that by setting the `data-index` attr, it is ensured that @@ -29994,13 +30329,13 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { // choose 'move' or 'resize' // based on initial position of cursor within the drag element - var w = dragBBox.right - dragBBox.left, - h = dragBBox.bottom - dragBBox.top, - x = evt.clientX - dragBBox.left, - y = evt.clientY - dragBBox.top, - cursor = (!isPath && w > MINWIDTH && h > MINHEIGHT && !evt.shiftKey) ? - dragElement.getCursor(x / w, 1 - y / h) : - 'move'; + var w = dragBBox.right - dragBBox.left; + var h = dragBBox.bottom - dragBBox.top; + var x = evt.clientX - dragBBox.left; + var y = evt.clientY - dragBBox.top; + var cursor = (!isPath && w > MINWIDTH && h > MINHEIGHT && !evt.shiftKey) ? + dragElement.getCursor(x / w, 1 - y / h) : + 'move'; setCursor(shapePath, cursor); @@ -30069,7 +30404,7 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { // Don't rely on clipPath being activated during re-layout setClipPath(shapePath, gd, shapeOptions); - Registry.call('relayout', gd, editHelpers.getUpdateObj()); + Registry.call('_guiRelayout', gd, editHelpers.getUpdateObj()); } function abortDrag() { @@ -30078,9 +30413,9 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { function moveShape(dx, dy) { if(shapeOptions.type === 'path') { - var noOp = function(coord) { return coord; }, - moveX = noOp, - moveY = noOp; + var noOp = function(coord) { return coord; }; + var moveX = noOp; + var moveY = noOp; if(xPixelSized) { modifyItem('xanchor', shapeOptions.xanchor = p2x(xAnchor + dx)); @@ -30121,9 +30456,9 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { function resizeShape(dx, dy) { if(isPath) { // TODO: implement path resize, don't forget to update dragMode code - var noOp = function(coord) { return coord; }, - moveX = noOp, - moveY = noOp; + var noOp = function(coord) { return coord; }; + var moveX = noOp; + var moveY = noOp; if(xPixelSized) { modifyItem('xanchor', shapeOptions.xanchor = p2x(xAnchor + dx)); @@ -30155,10 +30490,10 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { } } else { - var newN = (~dragMode.indexOf('n')) ? n0 + dy : n0, - newS = (~dragMode.indexOf('s')) ? s0 + dy : s0, - newW = (~dragMode.indexOf('w')) ? w0 + dx : w0, - newE = (~dragMode.indexOf('e')) ? e0 + dx : e0; + var newN = (~dragMode.indexOf('n')) ? n0 + dy : n0; + var newS = (~dragMode.indexOf('s')) ? s0 + dy : s0; + var newW = (~dragMode.indexOf('w')) ? w0 + dx : w0; + var newE = (~dragMode.indexOf('e')) ? e0 + dx : e0; // Do things in opposing direction for y-axis. // Hint: for data-sized shapes the reversal of axis direction is done in p2y. @@ -30247,29 +30582,30 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { } function deactivateClipPathTemporarily(shapePath, shapeOptions, gd) { - var xref = shapeOptions.xref, - yref = shapeOptions.yref, - xa = Axes.getFromId(gd, xref), - ya = Axes.getFromId(gd, yref); + var xref = shapeOptions.xref; + var yref = shapeOptions.yref; + var xa = Axes.getFromId(gd, xref); + var ya = Axes.getFromId(gd, yref); var clipAxes = ''; if(xref !== 'paper' && !xa.autorange) clipAxes += xref; if(yref !== 'paper' && !ya.autorange) clipAxes += yref; - shapePath.call(Drawing.setClipUrl, clipAxes ? - 'clip' + gd._fullLayout._uid + clipAxes : - null + Drawing.setClipUrl( + shapePath, + clipAxes ? 'clip' + gd._fullLayout._uid + clipAxes : null, + gd ); } } function getPathString(gd, options) { - var type = options.type, - xa = Axes.getFromId(gd, options.xref), - ya = Axes.getFromId(gd, options.yref), - gs = gd._fullLayout._size, - x2r, x2p, y2r, y2p, - x0, x1, y0, y1; + var type = options.type; + var xa = Axes.getFromId(gd, options.xref); + var ya = Axes.getFromId(gd, options.yref); + var gs = gd._fullLayout._size; + var x2r, x2p, y2r, y2p; + var x0, x1, y0, y1; if(xa) { x2r = helpers.shapePositionToRange(xa); @@ -30315,33 +30651,33 @@ function getPathString(gd, options) { if(type === 'line') return 'M' + x0 + ',' + y0 + 'L' + x1 + ',' + y1; if(type === 'rect') return 'M' + x0 + ',' + y0 + 'H' + x1 + 'V' + y1 + 'H' + x0 + 'Z'; + // circle - var cx = (x0 + x1) / 2, - cy = (y0 + y1) / 2, - rx = Math.abs(cx - x0), - ry = Math.abs(cy - y0), - rArc = 'A' + rx + ',' + ry, - rightPt = (cx + rx) + ',' + cy, - topPt = cx + ',' + (cy - ry); + var cx = (x0 + x1) / 2; + var cy = (y0 + y1) / 2; + var rx = Math.abs(cx - x0); + var ry = Math.abs(cy - y0); + var rArc = 'A' + rx + ',' + ry; + var rightPt = (cx + rx) + ',' + cy; + var topPt = cx + ',' + (cy - ry); return 'M' + rightPt + rArc + ' 0 1,1 ' + topPt + rArc + ' 0 0,1 ' + rightPt + 'Z'; } function convertPath(options, x2p, y2p) { - var pathIn = options.path, - xSizemode = options.xsizemode, - ySizemode = options.ysizemode, - xAnchor = options.xanchor, - yAnchor = options.yanchor; - + var pathIn = options.path; + var xSizemode = options.xsizemode; + var ySizemode = options.ysizemode; + var xAnchor = options.xanchor; + var yAnchor = options.yanchor; return pathIn.replace(constants.segmentRE, function(segment) { - var paramNumber = 0, - segmentType = segment.charAt(0), - xParams = constants.paramIsX[segmentType], - yParams = constants.paramIsY[segmentType], - nParams = constants.numParams[segmentType]; + var paramNumber = 0; + var segmentType = segment.charAt(0); + var xParams = constants.paramIsX[segmentType]; + var yParams = constants.paramIsY[segmentType]; + var nParams = constants.numParams[segmentType]; var paramString = segment.substr(1).replace(constants.paramRE, function(param) { if(xParams[paramNumber]) { @@ -30369,11 +30705,11 @@ function convertPath(options, x2p, y2p) { function movePath(pathIn, moveX, moveY) { return pathIn.replace(constants.segmentRE, function(segment) { - var paramNumber = 0, - segmentType = segment.charAt(0), - xParams = constants.paramIsX[segmentType], - yParams = constants.paramIsY[segmentType], - nParams = constants.numParams[segmentType]; + var paramNumber = 0; + var segmentType = segment.charAt(0); + var xParams = constants.paramIsX[segmentType]; + var yParams = constants.paramIsY[segmentType]; + var nParams = constants.numParams[segmentType]; var paramString = segment.substr(1).replace(constants.paramRE, function(param) { if(paramNumber >= nParams) return param; @@ -30390,9 +30726,9 @@ function movePath(pathIn, moveX, moveY) { }); } -},{"../../lib":169,"../../lib/setcursor":189,"../../plot_api/plot_template":204,"../../plots/cartesian/axes":214,"../../registry":259,"../color":50,"../dragelement":72,"../drawing":75,"./constants":131,"./helpers":134}],134:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../lib/setcursor":187,"../../plot_api/plot_template":202,"../../plots/cartesian/axes":212,"../../registry":257,"../color":51,"../dragelement":69,"../drawing":72,"./constants":129,"./helpers":132}],132:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30452,8 +30788,8 @@ exports.extractPathCoords = function(path, paramsToUse) { }; exports.getDataToPixel = function(gd, axis, isVertical) { - var gs = gd._fullLayout._size, - dataToPixel; + var gs = gd._fullLayout._size; + var dataToPixel; if(axis) { var d2r = exports.shapePositionToRange(axis); @@ -30475,8 +30811,8 @@ exports.getDataToPixel = function(gd, axis, isVertical) { }; exports.getPixelToData = function(gd, axis, isVertical) { - var gs = gd._fullLayout._size, - pixelToData; + var gs = gd._fullLayout._size; + var pixelToData; if(axis) { var r2d = exports.rangeToShapePosition(axis); @@ -30515,9 +30851,9 @@ exports.roundPositionForSharpStrokeRendering = function(pos, strokeWidth) { return strokeWidthIsOdd ? posValAsInt + 0.5 : posValAsInt; }; -},{"../../lib":169,"./constants":131}],135:[function(_dereq_,module,exports){ +},{"../../lib":168,"./constants":129}],133:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30542,9 +30878,9 @@ module.exports = { drawOne: drawModule.drawOne }; -},{"../../plots/cartesian/include_components":224,"./attributes":129,"./calc_autorange":130,"./defaults":132,"./draw":133}],136:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/include_components":223,"./attributes":127,"./calc_autorange":128,"./defaults":130,"./draw":131}],134:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30644,7 +30980,7 @@ module.exports = overrideAll(templatedArray('slider', { }, - pad: extendDeepAll({}, padAttrs, { + pad: extendDeepAll(padAttrs({editType: 'arraydraw'}), { }, {t: {dflt: 20}}), xanchor: { @@ -30785,9 +31121,9 @@ module.exports = overrideAll(templatedArray('slider', { } }), 'arraydraw', 'from-root'); -},{"../../lib/extend":163,"../../plot_api/edit_types":197,"../../plot_api/plot_template":204,"../../plots/animation_attributes":209,"../../plots/font_attributes":240,"../../plots/pad_attributes":245,"./constants":137}],137:[function(_dereq_,module,exports){ +},{"../../lib/extend":162,"../../plot_api/edit_types":195,"../../plot_api/plot_template":202,"../../plots/animation_attributes":207,"../../plots/font_attributes":239,"../../plots/pad_attributes":244,"./constants":135}],135:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30879,9 +31215,9 @@ module.exports = { currentValueInset: 0, }; -},{}],138:[function(_dereq_,module,exports){ +},{}],136:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30996,9 +31332,9 @@ function stepDefaults(valueIn, valueOut) { } } -},{"../../lib":169,"../../plots/array_container_defaults":210,"./attributes":136,"./constants":137}],139:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"./attributes":134,"./constants":135}],137:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31014,7 +31350,6 @@ var Color = _dereq_('../color'); var Drawing = _dereq_('../drawing'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); -var anchorUtils = _dereq_('../legend/anchor_utils'); var arrayEditor = _dereq_('../../plot_api/plot_template').arrayEditor; var constants = _dereq_('./constants'); @@ -31024,8 +31359,8 @@ var FROM_TL = alignmentConstants.FROM_TL; var FROM_BR = alignmentConstants.FROM_BR; module.exports = function draw(gd) { - var fullLayout = gd._fullLayout, - sliderData = makeSliderData(fullLayout, gd); + var fullLayout = gd._fullLayout; + var sliderData = makeSliderData(fullLayout, gd); // draw a container for *all* sliders: var sliders = fullLayout._infolayer @@ -31103,8 +31438,8 @@ function autoMarginId(sliderOpts) { // This really only just filters by visibility: function makeSliderData(fullLayout, gd) { - var contOpts = fullLayout[constants.name], - sliderData = []; + var contOpts = fullLayout[constants.name]; + var sliderData = []; for(var i = 0; i < contOpts.length; i++) { var item = contOpts[i]; @@ -31206,21 +31541,21 @@ function findDimensions(gd, sliderOpts) { dims.height = dims.currentValueTotalHeight + constants.tickOffset + sliderOpts.ticklen + constants.labelOffset + dims.labelHeight + sliderOpts.pad.t + sliderOpts.pad.b; var xanchor = 'left'; - if(anchorUtils.isRightAnchor(sliderOpts)) { + if(Lib.isRightAnchor(sliderOpts)) { dims.lx -= dims.outerLength; xanchor = 'right'; } - if(anchorUtils.isCenterAnchor(sliderOpts)) { + if(Lib.isCenterAnchor(sliderOpts)) { dims.lx -= dims.outerLength / 2; xanchor = 'center'; } var yanchor = 'top'; - if(anchorUtils.isBottomAnchor(sliderOpts)) { + if(Lib.isBottomAnchor(sliderOpts)) { dims.ly -= dims.height; yanchor = 'bottom'; } - if(anchorUtils.isMiddleAnchor(sliderOpts)) { + if(Lib.isMiddleAnchor(sliderOpts)) { dims.ly -= dims.height / 2; yanchor = 'middle'; } @@ -31627,9 +31962,9 @@ function drawRail(sliderGroup, sliderOpts) { ); } -},{"../../constants/alignment":148,"../../lib":169,"../../lib/svg_text_utils":191,"../../plot_api/plot_template":204,"../../plots/plots":246,"../color":50,"../drawing":75,"../legend/anchor_utils":102,"./constants":137,"d3":16}],140:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../lib":168,"../../lib/svg_text_utils":189,"../../plot_api/plot_template":202,"../../plots/plots":245,"../color":51,"../drawing":72,"./constants":135,"d3":16}],138:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31650,9 +31985,9 @@ module.exports = { draw: _dereq_('./draw') }; -},{"./attributes":136,"./constants":137,"./defaults":138,"./draw":139}],141:[function(_dereq_,module,exports){ +},{"./attributes":134,"./constants":135,"./defaults":136,"./draw":137}],139:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31720,19 +32055,21 @@ function draw(gd, titleClass, options) { var group = options.containerGroup; var fullLayout = gd._fullLayout; - var titlefont = cont.titlefont || {}; - var font = titlefont.family; - var fontSize = titlefont.size; - var fontColor = titlefont.color; var opacity = 1; var isplaceholder = false; - var txt = (cont.title || '').trim(); + var title = cont.title; + var txt = (title && title.text ? title.text : '').trim(); + + var font = title && title.font ? title.font : {}; + var fontFamily = font.family; + var fontSize = font.size; + var fontColor = font.color; // only make this title editable if we positively identify its property // as one that has editing enabled. var editAttr; - if(prop === 'title') editAttr = 'titleText'; + if(prop === 'title.text') editAttr = 'titleText'; else if(prop.indexOf('axis') !== -1) editAttr = 'axisTitleText'; else if(prop.indexOf('colorbar' !== -1)) editAttr = 'colorbarTitleText'; var editable = gd._context.edits[editAttr]; @@ -31748,6 +32085,10 @@ function draw(gd, titleClass, options) { if(!editable) txt = ''; } + if(fullLayout.meta) { + txt = Lib.templateString(txt, {meta: fullLayout.meta}); + } + var elShouldExist = txt || editable; if(!group) { @@ -31790,7 +32131,7 @@ function draw(gd, titleClass, options) { titleEl.attr('transform', transformVal); titleEl.style({ - 'font-family': font, + 'font-family': fontFamily, 'font-size': d3.round(fontSize, 2) + 'px', fill: Color.rgb(fontColor), opacity: opacity * Color.opacity(fontColor), @@ -31890,9 +32231,9 @@ function draw(gd, titleClass, options) { el.call(svgTextUtils.makeEditable, {gd: gd}) .on('edit', function(text) { if(traceIndex !== undefined) { - Registry.call('restyle', gd, prop, text, traceIndex); + Registry.call('_guiRestyle', gd, prop, text, traceIndex); } else { - Registry.call('relayout', gd, prop, text); + Registry.call('_guiRelayout', gd, prop, text); } }) .on('cancel', function() { @@ -31909,9 +32250,9 @@ function draw(gd, titleClass, options) { return group; } -},{"../../constants/interactions":150,"../../lib":169,"../../lib/svg_text_utils":191,"../../plots/plots":246,"../../registry":259,"../color":50,"../drawing":75,"d3":16,"fast-isnumeric":18}],142:[function(_dereq_,module,exports){ +},{"../../constants/interactions":148,"../../lib":168,"../../lib/svg_text_utils":189,"../../plots/plots":245,"../../registry":257,"../color":51,"../drawing":72,"d3":16,"fast-isnumeric":18}],140:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32038,7 +32379,7 @@ module.exports = overrideAll(templatedArray('updatemenu', { }, - pad: extendFlat({}, padAttrs, { + pad: extendFlat(padAttrs({editType: 'arraydraw'}), { }), @@ -32067,9 +32408,9 @@ module.exports = overrideAll(templatedArray('updatemenu', { } }), 'arraydraw', 'from-root'); -},{"../../lib/extend":163,"../../plot_api/edit_types":197,"../../plot_api/plot_template":204,"../../plots/font_attributes":240,"../../plots/pad_attributes":245,"../color/attributes":49}],143:[function(_dereq_,module,exports){ +},{"../../lib/extend":162,"../../plot_api/edit_types":195,"../../plot_api/plot_template":202,"../../plots/font_attributes":239,"../../plots/pad_attributes":244,"../color/attributes":50}],141:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32148,9 +32489,9 @@ module.exports = { } }; -},{}],144:[function(_dereq_,module,exports){ +},{}],142:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32231,9 +32572,9 @@ function buttonDefaults(buttonIn, buttonOut) { } } -},{"../../lib":169,"../../plots/array_container_defaults":210,"./attributes":142,"./constants":143}],145:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/array_container_defaults":208,"./attributes":140,"./constants":141}],143:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32250,7 +32591,6 @@ var Color = _dereq_('../color'); var Drawing = _dereq_('../drawing'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); -var anchorUtils = _dereq_('../legend/anchor_utils'); var arrayEditor = _dereq_('../../plot_api/plot_template').arrayEditor; var LINE_SPACING = _dereq_('../../constants/alignment').LINE_SPACING; @@ -32259,8 +32599,8 @@ var constants = _dereq_('./constants'); var ScrollBox = _dereq_('./scrollbox'); module.exports = function draw(gd) { - var fullLayout = gd._fullLayout, - menuData = Lib.filterVisible(fullLayout[constants.name]); + var fullLayout = gd._fullLayout; + var menuData = Lib.filterVisible(fullLayout[constants.name]); /* Update menu data is bound to the header-group. * The items in the header group are always present. @@ -32334,8 +32674,8 @@ module.exports = function draw(gd) { } // setup scrollbox - var scrollBoxId = 'updatemenus' + fullLayout._uid, - scrollBox = new ScrollBox(gd, gButton, scrollBoxId); + var scrollBoxId = 'updatemenus' + fullLayout._uid; + var scrollBox = new ScrollBox(gd, gButton, scrollBoxId); // remove exiting header, remove dropped buttons and reset margins if(headerGroups.enter().size()) { @@ -32591,9 +32931,9 @@ function drawScrollBox(gd, gHeader, gButton, scrollBox, menuOpts, position) { var isVertical = (direction === 'up' || direction === 'down'); var dims = menuOpts._dims; - var active = menuOpts.active, - translateX, translateY, - i; + var active = menuOpts.active; + var translateX, translateY; + var i; if(isVertical) { translateY = 0; for(i = 0; i < active; i++) { @@ -32625,8 +32965,8 @@ function drawScrollBox(gd, gHeader, gButton, scrollBox, menuOpts, position) { } function hideScrollBox(scrollBox) { - var hasHBar = !!scrollBox.hbar, - hasVBar = !!scrollBox.vbar; + var hasHBar = !!scrollBox.hbar; + var hasVBar = !!scrollBox.vbar; if(hasHBar) { scrollBox.hbar @@ -32800,21 +33140,21 @@ function findDimensions(gd, menuOpts) { dims.ly = graphSize.t + graphSize.h * (1 - menuOpts.y); var xanchor = 'left'; - if(anchorUtils.isRightAnchor(menuOpts)) { + if(Lib.isRightAnchor(menuOpts)) { dims.lx -= paddedWidth; xanchor = 'right'; } - if(anchorUtils.isCenterAnchor(menuOpts)) { + if(Lib.isCenterAnchor(menuOpts)) { dims.lx -= paddedWidth / 2; xanchor = 'center'; } var yanchor = 'top'; - if(anchorUtils.isBottomAnchor(menuOpts)) { + if(Lib.isBottomAnchor(menuOpts)) { dims.ly -= paddedHeight; yanchor = 'bottom'; } - if(anchorUtils.isMiddleAnchor(menuOpts)) { + if(Lib.isMiddleAnchor(menuOpts)) { dims.ly -= paddedHeight / 2; yanchor = 'middle'; } @@ -32881,11 +33221,11 @@ function removeAllButtons(gButton, newMenuIndexAttr) { .selectAll('g.' + constants.dropdownButtonClassName).remove(); } -},{"../../constants/alignment":148,"../../lib":169,"../../lib/svg_text_utils":191,"../../plot_api/plot_template":204,"../../plots/plots":246,"../color":50,"../drawing":75,"../legend/anchor_utils":102,"./constants":143,"./scrollbox":147,"d3":16}],146:[function(_dereq_,module,exports){ -arguments[4][140][0].apply(exports,arguments) -},{"./attributes":142,"./constants":143,"./defaults":144,"./draw":145,"dup":140}],147:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../lib":168,"../../lib/svg_text_utils":189,"../../plot_api/plot_template":202,"../../plots/plots":245,"../color":51,"../drawing":72,"./constants":141,"./scrollbox":145,"d3":16}],144:[function(_dereq_,module,exports){ +arguments[4][138][0].apply(exports,arguments) +},{"./attributes":140,"./constants":141,"./defaults":142,"./draw":143,"dup":138}],145:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32965,26 +33305,26 @@ ScrollBox.barColor = '#808BA4'; * @param {number} [translateY=0] Vertical offset (in pixels) */ ScrollBox.prototype.enable = function enable(position, translateX, translateY) { - var fullLayout = this.gd._fullLayout, - fullWidth = fullLayout.width, - fullHeight = fullLayout.height; + var fullLayout = this.gd._fullLayout; + var fullWidth = fullLayout.width; + var fullHeight = fullLayout.height; // compute position of scrollbox this.position = position; - var l = this.position.l, - w = this.position.w, - t = this.position.t, - h = this.position.h, - direction = this.position.direction, - isDown = (direction === 'down'), - isLeft = (direction === 'left'), - isRight = (direction === 'right'), - isUp = (direction === 'up'), - boxW = w, - boxH = h, - boxL, boxR, - boxT, boxB; + var l = this.position.l; + var w = this.position.w; + var t = this.position.t; + var h = this.position.h; + var direction = this.position.direction; + var isDown = (direction === 'down'); + var isLeft = (direction === 'left'); + var isRight = (direction === 'right'); + var isUp = (direction === 'up'); + var boxW = w; + var boxH = h; + var boxL, boxR; + var boxT, boxB; if(!isDown && !isLeft && !isRight && !isUp) { this.position.direction = 'down'; @@ -33035,12 +33375,12 @@ ScrollBox.prototype.enable = function enable(position, translateX, translateY) { }; // compute position of horizontal scroll bar - var needsHorizontalScrollBar = (w > boxW), - hbarW = ScrollBox.barLength + 2 * ScrollBox.barPad, - hbarH = ScrollBox.barWidth + 2 * ScrollBox.barPad, - // draw horizontal scrollbar on the bottom side - hbarL = l, - hbarT = t + h; + var needsHorizontalScrollBar = (w > boxW); + var hbarW = ScrollBox.barLength + 2 * ScrollBox.barPad; + var hbarH = ScrollBox.barWidth + 2 * ScrollBox.barPad; + // draw horizontal scrollbar on the bottom side + var hbarL = l; + var hbarT = t + h; if(hbarT + hbarH > fullHeight) hbarT = fullHeight - hbarH; @@ -33076,12 +33416,12 @@ ScrollBox.prototype.enable = function enable(position, translateX, translateY) { } // compute position of vertical scroll bar - var needsVerticalScrollBar = (h > boxH), - vbarW = ScrollBox.barWidth + 2 * ScrollBox.barPad, - vbarH = ScrollBox.barLength + 2 * ScrollBox.barPad, - // draw vertical scrollbar on the right side - vbarL = l + w, - vbarT = t; + var needsVerticalScrollBar = (h > boxH); + var vbarW = ScrollBox.barWidth + 2 * ScrollBox.barPad; + var vbarH = ScrollBox.barLength + 2 * ScrollBox.barPad; + // draw vertical scrollbar on the right side + var vbarL = l + w; + var vbarT = t; if(vbarL + vbarW > fullWidth) vbarL = fullWidth - vbarW; @@ -33117,11 +33457,11 @@ ScrollBox.prototype.enable = function enable(position, translateX, translateY) { } // setup a clip path (if scroll bars are needed) - var clipId = this.id, - clipL = boxL - 0.5, - clipR = (needsVerticalScrollBar) ? boxR + vbarW + 0.5 : boxR + 0.5, - clipT = boxT - 0.5, - clipB = (needsHorizontalScrollBar) ? boxB + hbarH + 0.5 : boxB + 0.5; + var clipId = this.id; + var clipL = boxL - 0.5; + var clipR = (needsVerticalScrollBar) ? boxR + vbarW + 0.5 : boxR + 0.5; + var clipT = boxT - 0.5; + var clipB = (needsHorizontalScrollBar) ? boxB + hbarH + 0.5 : boxB + 0.5; var clipPath = fullLayout._topdefs.selectAll('#' + clipId) .data((needsHorizontalScrollBar || needsVerticalScrollBar) ? [0] : []); @@ -33140,7 +33480,7 @@ ScrollBox.prototype.enable = function enable(position, translateX, translateY) { height: Math.ceil(clipB) - Math.floor(clipT) }); - this.container.call(Drawing.setClipUrl, clipId); + this.container.call(Drawing.setClipUrl, clipId, this.gd); this.bg.attr({ x: l, @@ -33240,8 +33580,8 @@ ScrollBox.prototype.disable = function disable() { * @method */ ScrollBox.prototype._onBoxDrag = function onBarDrag() { - var translateX = this.translateX, - translateY = this.translateY; + var translateX = this.translateX; + var translateY = this.translateY; if(this.hbar) { translateX -= d3.event.dx; @@ -33260,8 +33600,8 @@ ScrollBox.prototype._onBoxDrag = function onBarDrag() { * @method */ ScrollBox.prototype._onBoxWheel = function onBarWheel() { - var translateX = this.translateX, - translateY = this.translateY; + var translateX = this.translateX; + var translateY = this.translateY; if(this.hbar) { translateX += d3.event.deltaY; @@ -33280,14 +33620,14 @@ ScrollBox.prototype._onBoxWheel = function onBarWheel() { * @method */ ScrollBox.prototype._onBarDrag = function onBarDrag() { - var translateX = this.translateX, - translateY = this.translateY; + var translateX = this.translateX; + var translateY = this.translateY; if(this.hbar) { - var xMin = translateX + this._hbarXMin, - xMax = xMin + this._hbarTranslateMax, - x = Lib.constrain(d3.event.x, xMin, xMax), - xf = (x - xMin) / (xMax - xMin); + var xMin = translateX + this._hbarXMin; + var xMax = xMin + this._hbarTranslateMax; + var x = Lib.constrain(d3.event.x, xMin, xMax); + var xf = (x - xMin) / (xMax - xMin); var translateXMax = this.position.w - this._box.w; @@ -33295,10 +33635,10 @@ ScrollBox.prototype._onBarDrag = function onBarDrag() { } if(this.vbar) { - var yMin = translateY + this._vbarYMin, - yMax = yMin + this._vbarTranslateMax, - y = Lib.constrain(d3.event.y, yMin, yMax), - yf = (y - yMin) / (yMax - yMin); + var yMin = translateY + this._vbarYMin; + var yMax = yMin + this._vbarTranslateMax; + var y = Lib.constrain(d3.event.y, yMin, yMax); + var yf = (y - yMin) / (yMax - yMin); var translateYMax = this.position.h - this._box.h; @@ -33317,8 +33657,8 @@ ScrollBox.prototype._onBarDrag = function onBarDrag() { */ ScrollBox.prototype.setTranslate = function setTranslate(translateX, translateY) { // store translateX and translateY (needed by mouse event handlers) - var translateXMax = this.position.w - this._box.w, - translateYMax = this.position.h - this._box.h; + var translateXMax = this.position.w - this._box.w; + var translateYMax = this.position.h - this._box.h; translateX = Lib.constrain(translateX || 0, 0, translateXMax); translateY = Lib.constrain(translateY || 0, 0, translateYMax); @@ -33354,9 +33694,9 @@ ScrollBox.prototype.setTranslate = function setTranslate(translateX, translateY) } }; -},{"../../lib":169,"../color":50,"../drawing":75,"d3":16}],148:[function(_dereq_,module,exports){ +},{"../../lib":168,"../color":51,"../drawing":72,"d3":16}],146:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33398,12 +33738,17 @@ module.exports = { // multiple of fontSize to get the vertical offset between lines LINE_SPACING: 1.3, - // multiple of fontSize to shift from the baseline to the midline + // multiple of fontSize to shift from the baseline + // to the cap (captical letter) line // (to use when we don't calculate this shift from Drawing.bBox) - // To be precise this should be half the cap height (capital letter) - // of the font, and according to wikipedia: + // This is an approximation since in reality cap height can differ + // from font to font. However, according to Wikipedia // an "average" font might have a cap height of 70% of the em // https://en.wikipedia.org/wiki/Em_(typography)#History + CAP_SHIFT: 0.70, + + // half the cap height (distance between baseline and cap line) + // of an "average" font (for more info see above). MID_SHIFT: 0.35, OPPOSITE_SIDE: { @@ -33414,9 +33759,9 @@ module.exports = { } }; -},{}],149:[function(_dereq_,module,exports){ +},{}],147:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33452,9 +33797,9 @@ module.exports = { } }; -},{}],150:[function(_dereq_,module,exports){ +},{}],148:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33479,9 +33824,9 @@ module.exports = { DESELECTDIM: 0.2 }; -},{}],151:[function(_dereq_,module,exports){ +},{}],149:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33544,9 +33889,9 @@ module.exports = { MINUS_SIGN: '\u2212' }; -},{}],152:[function(_dereq_,module,exports){ +},{}],150:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33568,9 +33913,9 @@ exports.svgAttrs = { 'xmlns:xlink': exports.xlink }; -},{}],153:[function(_dereq_,module,exports){ +},{}],151:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33580,7 +33925,7 @@ exports.svgAttrs = { 'use strict'; // package version injected by `npm run preprocess` -exports.version = '1.41.3'; +exports.version = '1.44.4'; // inject promise polyfill _dereq_('es6-promise').polyfill(); @@ -33589,7 +33934,7 @@ _dereq_('es6-promise').polyfill(); _dereq_('../build/plotcss'); // inject default MathJax config -_dereq_('./fonts/mathjax_config'); +_dereq_('./fonts/mathjax_config')(); // include registry module and expose register method var Registry = _dereq_('./registry'); @@ -33600,7 +33945,8 @@ var plotApi = _dereq_('./plot_api'); var methodNames = Object.keys(plotApi); for(var i = 0; i < methodNames.length; i++) { var name = methodNames[i]; - exports[name] = plotApi[name]; + // _ -> private API methods, but still registered for internal use + if(name.charAt(0) !== '_') exports[name] = plotApi[name]; register({ moduleType: 'apiMethod', name: name, @@ -33624,7 +33970,8 @@ register([ _dereq_('./components/rangeslider'), _dereq_('./components/rangeselector'), _dereq_('./components/grid'), - _dereq_('./components/errorbars') + _dereq_('./components/errorbars'), + _dereq_('./components/colorscale') ]); // locales en and en-US are required for default behavior @@ -33646,9 +33993,9 @@ exports.Queue = _dereq_('./lib/queue'); // export d3 used in the bundle exports.d3 = _dereq_('d3'); -},{"../build/plotcss":1,"../build/ploticon":2,"./components/annotations":43,"./components/annotations3d":48,"./components/errorbars":81,"./components/fx":92,"./components/grid":96,"./components/images":101,"./components/legend":110,"./components/rangeselector":121,"./components/rangeslider":127,"./components/shapes":135,"./components/sliders":140,"./components/updatemenus":146,"./fonts/mathjax_config":154,"./lib/queue":184,"./locale-en":195,"./locale-en-us":194,"./plot_api":199,"./plot_api/plot_schema":203,"./plots/plots":246,"./registry":259,"./snapshot":264,"./traces/scatter":378,"d3":16,"es6-promise":17}],154:[function(_dereq_,module,exports){ +},{"../build/plotcss":1,"../build/ploticon":2,"./components/annotations":44,"./components/annotations3d":49,"./components/colorscale":63,"./components/errorbars":78,"./components/fx":90,"./components/grid":94,"./components/images":99,"./components/legend":107,"./components/rangeselector":118,"./components/rangeslider":125,"./components/shapes":133,"./components/sliders":138,"./components/updatemenus":144,"./fonts/mathjax_config":152,"./lib/queue":182,"./locale-en":193,"./locale-en-us":192,"./plot_api":197,"./plot_api/plot_schema":201,"./plots/plots":245,"./registry":257,"./snapshot":262,"./traces/scatter":379,"d3":16,"es6-promise":17}],152:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33659,29 +34006,91 @@ exports.d3 = _dereq_('d3'); /* global MathJax:false */ -/** - * Check and configure MathJax - */ -if(typeof MathJax !== 'undefined') { - exports.MathJax = true; +module.exports = function() { + if(typeof MathJax !== 'undefined') { + var globalConfig = (window.PlotlyConfig || {}).MathJaxConfig !== 'local'; - MathJax.Hub.Config({ - messageStyle: 'none', - skipStartupTypeset: true, - displayAlign: 'left', - tex2jax: { - inlineMath: [['$', '$'], ['\\(', '\\)']] + if(globalConfig) { + MathJax.Hub.Config({ + messageStyle: 'none', + skipStartupTypeset: true, + displayAlign: 'left', + tex2jax: { + inlineMath: [['$', '$'], ['\\(', '\\)']] + } + }); + MathJax.Hub.Configured(); } - }); + } +}; - MathJax.Hub.Configured(); -} else { - exports.MathJax = false; -} - -},{}],155:[function(_dereq_,module,exports){ +},{}],153:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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'; + + +/** + * Determine the position anchor property of x/y xanchor/yanchor components. + * + * - values < 1/3 align the low side at that fraction, + * - values [1/3, 2/3] align the center at that fraction, + * - values > 2/3 align the right at that fraction. + */ + + +exports.isLeftAnchor = function isLeftAnchor(opts) { + return ( + opts.xanchor === 'left' || + (opts.xanchor === 'auto' && opts.x <= 1 / 3) + ); +}; + +exports.isCenterAnchor = function isCenterAnchor(opts) { + return ( + opts.xanchor === 'center' || + (opts.xanchor === 'auto' && opts.x > 1 / 3 && opts.x < 2 / 3) + ); +}; + +exports.isRightAnchor = function isRightAnchor(opts) { + return ( + opts.xanchor === 'right' || + (opts.xanchor === 'auto' && opts.x >= 2 / 3) + ); +}; + +exports.isTopAnchor = function isTopAnchor(opts) { + return ( + opts.yanchor === 'top' || + (opts.yanchor === 'auto' && opts.y >= 2 / 3) + ); +}; + +exports.isMiddleAnchor = function isMiddleAnchor(opts) { + return ( + opts.yanchor === 'middle' || + (opts.yanchor === 'auto' && opts.y > 1 / 3 && opts.y < 2 / 3) + ); +}; + +exports.isBottomAnchor = function isBottomAnchor(opts) { + return ( + opts.yanchor === 'bottom' || + (opts.yanchor === 'auto' && opts.y <= 1 / 3) + ); +}; + +},{}],154:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33920,9 +34329,168 @@ module.exports = { pathAnnulus: pathAnnulus }; -},{"./mod":177}],156:[function(_dereq_,module,exports){ +},{"./mod":175}],155:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isArray = Array.isArray; + +// IE9 fallbacks + +var ab = (typeof ArrayBuffer === 'undefined' || !ArrayBuffer.isView) ? + {isView: function() { return false; }} : + ArrayBuffer; + +var dv = (typeof DataView === 'undefined') ? + function() {} : + DataView; + +function isTypedArray(a) { + return ab.isView(a) && !(a instanceof dv); +} +exports.isTypedArray = isTypedArray; + +function isArrayOrTypedArray(a) { + return isArray(a) || isTypedArray(a); +} +exports.isArrayOrTypedArray = isArrayOrTypedArray; + +/* + * Test whether an input object is 1D. + * + * Assumes we already know the object is an array. + * + * Looks only at the first element, if the dimensionality is + * not consistent we won't figure that out here. + */ +function isArray1D(a) { + return !isArrayOrTypedArray(a[0]); +} +exports.isArray1D = isArray1D; + +/* + * Ensures an array has the right amount of storage space. If it doesn't + * exist, it creates an array. If it does exist, it returns it if too + * short or truncates it in-place. + * + * The goal is to just reuse memory to avoid a bit of excessive garbage + * collection. + */ +exports.ensureArray = function(out, n) { + // TODO: typed array support here? This is only used in + // traces/carpet/compute_control_points + if(!isArray(out)) out = []; + + // If too long, truncate. (If too short, it will grow + // automatically so we don't care about that case) + out.length = n; + + return out; +}; + +/* + * TypedArray-compatible concatenation of n arrays + * if all arrays are the same type it will preserve that type, + * otherwise it falls back on Array. + * Also tries to avoid copying, in case one array has zero length + * But never mutates an existing array + */ +exports.concat = function() { + var args = []; + var allArray = true; + var totalLen = 0; + + var _constructor, arg0, i, argi, posi, leni, out, j; + + for(i = 0; i < arguments.length; i++) { + argi = arguments[i]; + leni = argi.length; + if(leni) { + if(arg0) args.push(argi); + else { + arg0 = argi; + posi = leni; + } + + if(isArray(argi)) { + _constructor = false; + } + else { + allArray = false; + if(!totalLen) { + _constructor = argi.constructor; + } + else if(_constructor !== argi.constructor) { + // TODO: in principle we could upgrade here, + // ie keep typed array but convert all to Float64Array? + _constructor = false; + } + } + + totalLen += leni; + } + } + + if(!totalLen) return []; + if(!args.length) return arg0; + + if(allArray) return arg0.concat.apply(arg0, args); + if(_constructor) { + // matching typed arrays + out = new _constructor(totalLen); + out.set(arg0); + for(i = 0; i < args.length; i++) { + argi = args[i]; + out.set(argi, posi); + posi += argi.length; + } + return out; + } + + // mismatched types or Array + typed + out = new Array(totalLen); + for(j = 0; j < arg0.length; j++) out[j] = arg0[j]; + for(i = 0; i < args.length; i++) { + argi = args[i]; + for(j = 0; j < argi.length; j++) out[posi + j] = argi[j]; + posi += j; + } + return out; +}; + +exports.maxRowLength = function(z) { + return _rowLength(z, Math.max, 0); +}; + +exports.minRowLength = function(z) { + return _rowLength(z, Math.min, Infinity); +}; + +function _rowLength(z, fn, len0) { + if(isArrayOrTypedArray(z)) { + if(isArrayOrTypedArray(z[0])) { + var len = len0; + for(var i = 0; i < z.length; i++) { + len = fn(len, z[i].length); + } + return len; + } else { + return z.length; + } + } + return 0; +} + +},{}],156:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33953,9 +34521,9 @@ module.exports = function cleanNumber(v) { return BADNUM; }; -},{"../constants/numerical":151,"fast-isnumeric":18}],157:[function(_dereq_,module,exports){ +},{"../constants/numerical":149,"fast-isnumeric":18}],157:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33983,7 +34551,7 @@ module.exports = function clearGlCanvases(gd) { },{}],158:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34006,27 +34574,26 @@ module.exports = function clearResponsive(gd) { },{}],159:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); var tinycolor = _dereq_('tinycolor2'); var baseTraceAttrs = _dereq_('../plots/attributes'); -var getColorscale = _dereq_('../components/colorscale/get_scale'); -var colorscaleNames = Object.keys(_dereq_('../components/colorscale/scales')); +var scales = _dereq_('../components/colorscale/scales'); +var DESELECTDIM = _dereq_('../constants/interactions').DESELECTDIM; + var nestedProperty = _dereq_('./nested_property'); var counterRegex = _dereq_('./regex').counter; -var DESELECTDIM = _dereq_('../constants/interactions').DESELECTDIM; var modHalf = _dereq_('./mod').modHalf; -var isArrayOrTypedArray = _dereq_('./is_array').isArrayOrTypedArray; +var isArrayOrTypedArray = _dereq_('./array').isArrayOrTypedArray; exports.valObjectMeta = { data_array: { @@ -34142,7 +34709,7 @@ exports.valObjectMeta = { coerceFunction: function(v, propOut, dflt) { - propOut.set(getColorscale(v, dflt)); + propOut.set(scales.get(v, dflt)); } }, angle: { @@ -34190,8 +34757,8 @@ exports.valObjectMeta = { propOut.set(v); return; } - var vParts = v.split('+'), - i = 0; + var vParts = v.split('+'); + var i = 0; while(i < vParts.length) { var vi = vParts[i]; if(opts.flags.indexOf(vi) === -1 || vParts.indexOf(vi) < i) { @@ -34370,9 +34937,9 @@ exports.coerce = function(containerIn, containerOut, attributes, attribute, dflt * returns false if there is no user input. */ exports.coerce2 = function(containerIn, containerOut, attributes, attribute, dflt) { - var propIn = nestedProperty(containerIn, attribute), - propOut = exports.coerce(containerIn, containerOut, attributes, attribute, dflt), - valIn = propIn.get(); + var propIn = nestedProperty(containerIn, attribute); + var propOut = exports.coerce(containerIn, containerOut, attributes, attribute, dflt); + var valIn = propIn.get(); return (valIn !== undefined && valIn !== null) ? propOut : false; }; @@ -34465,9 +35032,9 @@ function validate(value, opts) { return valObjectDef.validateFunction(value, opts); } - var failed = {}, - out = failed, - propMock = { set: function(v) { out = v; } }; + var failed = {}; + var out = failed; + var propMock = { set: function(v) { out = v; } }; // 'failed' just something mutable that won't be === anything else @@ -34476,9 +35043,9 @@ function validate(value, opts) { } exports.validate = validate; -},{"../components/colorscale/get_scale":63,"../components/colorscale/scales":69,"../constants/interactions":150,"../plots/attributes":211,"./is_array":170,"./mod":177,"./nested_property":178,"./regex":185,"fast-isnumeric":18,"tinycolor2":33}],160:[function(_dereq_,module,exports){ +},{"../components/colorscale/scales":66,"../constants/interactions":148,"../plots/attributes":209,"./array":155,"./mod":175,"./nested_property":176,"./regex":183,"fast-isnumeric":18,"tinycolor2":34}],160:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34649,12 +35216,12 @@ exports.dateTime2ms = function(s, calendar) { var match = s.match(isChinese ? DATETIME_REGEXP_CN : DATETIME_REGEXP); if(!match) return BADNUM; - var y = match[1], - m = match[3] || '1', - d = Number(match[5] || 1), - H = Number(match[7] || 0), - M = Number(match[9] || 0), - S = Number(match[11] || 0); + var y = match[1]; + var m = match[3] || '1'; + var d = Number(match[5] || 1); + var H = Number(match[7] || 0); + var M = Number(match[9] || 0); + var S = Number(match[11] || 0); if(isWorld) { // disallow 2-digit years for world calendars @@ -34731,18 +35298,17 @@ exports.ms2DateTime = function(ms, r, calendar) { if(!r) r = 0; - var msecTenths = Math.floor(mod(ms + 0.05, 1) * 10), - msRounded = Math.round(ms - msecTenths / 10), - dateStr, h, m, s, msec10, d; + var msecTenths = Math.floor(mod(ms + 0.05, 1) * 10); + var msRounded = Math.round(ms - msecTenths / 10); + var dateStr, h, m, s, msec10, d; if(isWorldCalendar(calendar)) { - var dateJD = Math.floor(msRounded / ONEDAY) + EPOCHJD, - timeMs = Math.floor(mod(ms, ONEDAY)); + var dateJD = Math.floor(msRounded / ONEDAY) + EPOCHJD; + var timeMs = Math.floor(mod(ms, ONEDAY)); try { dateStr = Registry.getComponentMethod('calendars', 'getCal')(calendar) .fromJD(dateJD).formatDate('yyyy-mm-dd'); - } - catch(e) { + } catch(e) { // invalid date in this calendar - fall back to Gyyyy-mm-dd dateStr = utcFormat('G%Y-%m-%d')(new Date(msRounded)); } @@ -34752,8 +35318,7 @@ exports.ms2DateTime = function(ms, r, calendar) { // it manually (after the '-' if there is one) if(dateStr.charAt(0) === '-') { while(dateStr.length < 11) dateStr = '-0' + dateStr.substr(1); - } - else { + } else { while(dateStr.length < 10) dateStr = '0' + dateStr; } @@ -34790,13 +35355,13 @@ exports.ms2DateTime = function(ms, r, calendar) { exports.ms2DateTimeLocal = function(ms) { if(!(ms >= MIN_MS + ONEDAY && ms <= MAX_MS - ONEDAY)) return BADNUM; - var msecTenths = Math.floor(mod(ms + 0.05, 1) * 10), - d = new Date(Math.round(ms - msecTenths / 10)), - dateStr = d3.time.format('%Y-%m-%d')(d), - h = d.getHours(), - m = d.getMinutes(), - s = d.getSeconds(), - msec10 = d.getUTCMilliseconds() * 10 + msecTenths; + var msecTenths = Math.floor(mod(ms + 0.05, 1) * 10); + var d = new Date(Math.round(ms - msecTenths / 10)); + var dateStr = d3.time.format('%Y-%m-%d')(d); + var h = d.getHours(); + var m = d.getMinutes(); + var s = d.getSeconds(); + var msec10 = d.getUTCMilliseconds() * 10 + msecTenths; return includeTime(dateStr, h, m, s, msec10); }; @@ -34824,7 +35389,9 @@ function includeTime(dateStr, h, m, s, msec10) { // a Date object or milliseconds // optional dflt is the return value if cleaning fails exports.cleanDate = function(v, dflt, calendar) { - if(exports.isJSDate(v) || typeof v === 'number') { + // let us use cleanDate to provide a missing default without an error + if(v === BADNUM) return dflt; + if(exports.isJSDate(v) || (typeof v === 'number' && isFinite(v))) { // do not allow milliseconds (old) or jsdate objects (inherently // described as gregorian dates) with world calendars if(isWorldCalendar(calendar)) { @@ -34858,10 +35425,10 @@ var fracMatch = /%\d?f/g; function modDateFormat(fmt, x, formatter, calendar) { fmt = fmt.replace(fracMatch, function(match) { - var digits = Math.min(+(match.charAt(1)) || 6, 6), - fracSecs = ((x / 1000 % 1) + 2) - .toFixed(digits) - .substr(2).replace(/0+$/, '') || '0'; + var digits = Math.min(+(match.charAt(1)) || 6, 6); + var fracSecs = ((x / 1000 % 1) + 2) + .toFixed(digits) + .substr(2).replace(/0+$/, '') || '0'; return fracSecs; }); @@ -34993,16 +35560,15 @@ exports.incrementMonth = function(ms, dMonth, calendar) { if(calendar) { try { - var dateJD = Math.round(ms / ONEDAY) + EPOCHJD, - calInstance = Registry.getComponentMethod('calendars', 'getCal')(calendar), - cDate = calInstance.fromJD(dateJD); + var dateJD = Math.round(ms / ONEDAY) + EPOCHJD; + var calInstance = Registry.getComponentMethod('calendars', 'getCal')(calendar); + var cDate = calInstance.fromJD(dateJD); if(dMonth % 12) calInstance.add(cDate, dMonth, 'm'); else calInstance.add(cDate, dMonth / 12, 'y'); return (cDate.toJD() - EPOCHJD) * ONEDAY + timeMs; - } - catch(e) { + } catch(e) { Loggers.error('invalid ms ' + ms + ' in calendar ' + calendar); // then keep going in gregorian even though the result will be 'Invalid' } @@ -35019,12 +35585,12 @@ exports.incrementMonth = function(ms, dMonth, calendar) { * calendar (string) the calendar to test against */ exports.findExactDates = function(data, calendar) { - var exactYears = 0, - exactMonths = 0, - exactDays = 0, - blankCount = 0, - d, - di; + var exactYears = 0; + var exactMonths = 0; + var exactDays = 0; + var blankCount = 0; + var d; + var di; var calInstance = ( isWorldCalendar(calendar) && @@ -35077,38 +35643,9 @@ exports.findExactDates = function(data, calendar) { }; }; -},{"../constants/numerical":151,"../registry":259,"./loggers":174,"./mod":177,"d3":16,"fast-isnumeric":18}],161:[function(_dereq_,module,exports){ +},{"../constants/numerical":149,"../registry":257,"./loggers":172,"./mod":175,"d3":16,"fast-isnumeric":18}],161:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - -/* - * Ensures an array has the right amount of storage space. If it doesn't - * exist, it creates an array. If it does exist, it returns it if too - * short or truncates it in-place. - * - * The goal is to just reuse memory to avoid a bit of excessive garbage - * collection. - */ -module.exports = function ensureArray(out, n) { - if(!Array.isArray(out)) out = []; - - // If too long, truncate. (If too short, it will grow - // automatically so we don't care about that case) - out.length = n; - - return out; -}; - -},{}],162:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35280,9 +35817,9 @@ var Events = { module.exports = Events; -},{"events":15}],163:[function(_dereq_,module,exports){ +},{"events":15}],162:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35343,8 +35880,8 @@ exports.extendDeepNoArrays = function() { * */ function _extend(inputs, isDeep, keepAllKeys, noArrayCopies) { - var target = inputs[0], - length = inputs.length; + var target = inputs[0]; + var length = inputs.length; var input, key, src, copy, copyIsArray, clone, allPrimitives; @@ -35396,9 +35933,9 @@ function _extend(inputs, isDeep, keepAllKeys, noArrayCopies) { return target; } -},{"./is_plain_object.js":171}],164:[function(_dereq_,module,exports){ +},{"./is_plain_object.js":169}],163:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35431,9 +35968,9 @@ function _extend(inputs, isDeep, keepAllKeys, noArrayCopies) { * @return {array} new filtered array */ module.exports = function filterUnique(array) { - var seen = {}, - out = [], - j = 0; + var seen = {}; + var out = []; + var j = 0; for(var i = 0; i < array.length; i++) { var item = array[i]; @@ -35447,9 +35984,9 @@ module.exports = function filterUnique(array) { return out; }; -},{}],165:[function(_dereq_,module,exports){ +},{}],164:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35494,9 +36031,9 @@ function isCalcData(cont) { ); } -},{}],166:[function(_dereq_,module,exports){ +},{}],165:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35513,18 +36050,18 @@ var mod = _dereq_('./mod').mod; */ exports.segmentsIntersect = segmentsIntersect; function segmentsIntersect(x1, y1, x2, y2, x3, y3, x4, y4) { - var a = x2 - x1, - b = x3 - x1, - c = x4 - x3, - d = y2 - y1, - e = y3 - y1, - f = y4 - y3, - det = a * f - c * d; + var a = x2 - x1; + var b = x3 - x1; + var c = x4 - x3; + var d = y2 - y1; + var e = y3 - y1; + var f = y4 - y3; + var det = a * f - c * d; // parallel lines? intersection is undefined // ignore the case where they are colinear if(det === 0) return null; - var t = (b * f - c * e) / det, - u = (b * d - a * e) / det; + var t = (b * f - c * e) / det; + var u = (b * d - a * e) / det; // segments do not intersect? if(u < 0 || u > 1 || t < 0 || t > 1) return null; @@ -35542,15 +36079,15 @@ exports.segmentDistance = function segmentDistance(x1, y1, x2, y2, x3, y3, x4, y var y12 = y2 - y1; var x34 = x4 - x3; var y34 = y4 - y3; - var l2_12 = x12 * x12 + y12 * y12; - var l2_34 = x34 * x34 + y34 * y34; + var ll12 = x12 * x12 + y12 * y12; + var ll34 = x34 * x34 + y34 * y34; // calculate distance squared, then take the sqrt at the very end var dist2 = Math.min( - perpDistance2(x12, y12, l2_12, x3 - x1, y3 - y1), - perpDistance2(x12, y12, l2_12, x4 - x1, y4 - y1), - perpDistance2(x34, y34, l2_34, x1 - x3, y1 - y3), - perpDistance2(x34, y34, l2_34, x2 - x3, y2 - y3) + perpDistance2(x12, y12, ll12, x3 - x1, y3 - y1), + perpDistance2(x12, y12, ll12, x4 - x1, y4 - y1), + perpDistance2(x34, y34, ll34, x1 - x3, y1 - y3), + perpDistance2(x34, y34, ll34, x2 - x3, y2 - y3) ); return Math.sqrt(dist2); @@ -35560,15 +36097,15 @@ exports.segmentDistance = function segmentDistance(x1, y1, x2, y2, x3, y3, x4, y * distance squared from segment ab to point c * [xab, yab] is the vector b-a * [xac, yac] is the vector c-a - * l2_ab is the length squared of (b-a), just to simplify calculation + * llab is the length squared of (b-a), just to simplify calculation */ -function perpDistance2(xab, yab, l2_ab, xac, yac) { - var fc_ab = (xac * xab + yac * yab); - if(fc_ab < 0) { +function perpDistance2(xab, yab, llab, xac, yac) { + var fcAB = (xac * xab + yac * yab); + if(fcAB < 0) { // point c is closer to point a return xac * xac + yac * yac; } - else if(fc_ab > l2_ab) { + else if(fcAB > llab) { // point c is closer to point b var xbc = xac - xab; var ybc = yac - yab; @@ -35577,7 +36114,7 @@ function perpDistance2(xab, yab, l2_ab, xac, yac) { else { // perpendicular distance is the shortest var crossProduct = xac * yab - yac * xab; - return crossProduct * crossProduct / l2_ab; + return crossProduct * crossProduct / llab; } } @@ -35740,9 +36277,9 @@ exports.findPointOnPath = function findPointOnPath(path, val, coord, opts) { return pt; }; -},{"./mod":177}],167:[function(_dereq_,module,exports){ +},{"./mod":175}],166:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35778,9 +36315,9 @@ module.exports = function(gd) { return gd; // otherwise assume that gd is a DOM element }; -},{}],168:[function(_dereq_,module,exports){ +},{}],167:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35794,9 +36331,9 @@ module.exports = function(gd) { module.exports = function identity(d) { return d; }; -},{}],169:[function(_dereq_,module,exports){ +},{}],168:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35821,17 +36358,20 @@ lib.relativeAttr = _dereq_('./relative_attr'); lib.isPlainObject = _dereq_('./is_plain_object'); lib.toLogRange = _dereq_('./to_log_range'); lib.relinkPrivateKeys = _dereq_('./relink_private'); -lib.ensureArray = _dereq_('./ensure_array'); + +var arrayModule = _dereq_('./array'); +lib.isTypedArray = arrayModule.isTypedArray; +lib.isArrayOrTypedArray = arrayModule.isArrayOrTypedArray; +lib.isArray1D = arrayModule.isArray1D; +lib.ensureArray = arrayModule.ensureArray; +lib.concat = arrayModule.concat; +lib.maxRowLength = arrayModule.maxRowLength; +lib.minRowLength = arrayModule.minRowLength; var modModule = _dereq_('./mod'); lib.mod = modModule.mod; lib.modHalf = modModule.modHalf; -var isArrayModule = _dereq_('./is_array'); -lib.isTypedArray = isArrayModule.isTypedArray; -lib.isArrayOrTypedArray = isArrayModule.isArrayOrTypedArray; -lib.isArray1D = isArrayModule.isArray1D; - var coerceModule = _dereq_('./coerce'); lib.valObjectMeta = coerceModule.valObjectMeta; lib.coerce = coerceModule.coerce; @@ -35896,6 +36436,14 @@ lib.pathArc = anglesModule.pathArc; lib.pathSector = anglesModule.pathSector; lib.pathAnnulus = anglesModule.pathAnnulus; +var anchorUtils = _dereq_('./anchor_utils'); +lib.isLeftAnchor = anchorUtils.isLeftAnchor; +lib.isCenterAnchor = anchorUtils.isCenterAnchor; +lib.isRightAnchor = anchorUtils.isRightAnchor; +lib.isTopAnchor = anchorUtils.isTopAnchor; +lib.isMiddleAnchor = anchorUtils.isMiddleAnchor; +lib.isBottomAnchor = anchorUtils.isBottomAnchor; + var geom2dModule = _dereq_('./geometry2d'); lib.segmentsIntersect = geom2dModule.segmentsIntersect; lib.segmentDistance = geom2dModule.segmentDistance; @@ -35986,10 +36534,10 @@ lib.swapAttrs = function(cont, attrList, part1, part2) { if(!part1) part1 = 'x'; if(!part2) part2 = 'y'; for(var i = 0; i < attrList.length; i++) { - var attr = attrList[i], - xp = lib.nestedProperty(cont, attr.replace('?', part1)), - yp = lib.nestedProperty(cont, attr.replace('?', part2)), - temp = xp.get(); + var attr = attrList[i]; + var xp = lib.nestedProperty(cont, attr.replace('?', part1)); + var yp = lib.nestedProperty(cont, attr.replace('?', part2)); + var temp = xp.get(); xp.set(yp.get()); yp.set(temp); } @@ -36038,8 +36586,8 @@ lib.bBoxIntersect = function(a, b, pad) { * x1, x2: optional extra args */ lib.simpleMap = function(array, func, x1, x2) { - var len = array.length, - out = new Array(len); + var len = array.length; + var out = new Array(len); for(var i = 0; i < len; i++) out[i] = func(array[i], x1, x2); return out; }; @@ -36127,15 +36675,15 @@ lib.smooth = function(arrayIn, FWHM) { FWHM = Math.round(FWHM) || 0; // only makes sense for integers if(FWHM < 2) return arrayIn; - var alen = arrayIn.length, - alen2 = 2 * alen, - wlen = 2 * FWHM - 1, - w = new Array(wlen), - arrayOut = new Array(alen), - i, - j, - k, - v; + var alen = arrayIn.length; + var alen2 = 2 * alen; + var wlen = 2 * FWHM - 1; + var w = new Array(wlen); + var arrayOut = new Array(alen); + var i; + var j; + var k; + var v; // first make the window array for(i = 0; i < wlen; i++) { @@ -36213,10 +36761,10 @@ lib.noneOrAll = function(containerIn, containerOut, attrList) { */ if(!containerIn) return; - var hasAny = false, - hasAll = true, - i, - val; + var hasAny = false; + var hasAll = true; + var i; + var val; for(i = 0; i < attrList.length; i++) { val = containerIn[attrList[i]]; @@ -36420,17 +36968,22 @@ lib.getTargetArray = function(trace, transformOpts) { lib.minExtend = function(obj1, obj2) { var objOut = {}; if(typeof obj2 !== 'object') obj2 = {}; - var arrayLen = 3, - keys = Object.keys(obj1), - i, - k, - v; + var arrayLen = 3; + var keys = Object.keys(obj1); + var i, k, v; + for(i = 0; i < keys.length; i++) { k = keys[i]; v = obj1[k]; if(k.charAt(0) === '_' || typeof v === 'function') continue; else if(k === 'module') objOut[k] = v; - else if(Array.isArray(v)) objOut[k] = v.slice(0, arrayLen); + else if(Array.isArray(v)) { + if(k === 'colorscale') { + objOut[k] = v.slice(); + } else { + objOut[k] = v.slice(0, arrayLen); + } + } else if(v && (typeof v === 'object')) objOut[k] = lib.minExtend(obj1[k], obj2[k]); else objOut[k] = v; } @@ -36476,14 +37029,24 @@ lib.removeElement = function(el) { * by all calls to this function */ lib.addStyleRule = function(selector, styleString) { - if(!lib.styleSheet) { - var style = document.createElement('style'); + lib.addRelatedStyleRule('global', selector, styleString); +}; + +/** + * for dynamically adding style rules + * to a stylesheet uniquely identified by a uid + */ +lib.addRelatedStyleRule = function(uid, selector, styleString) { + var id = 'plotly.js-style-' + uid; + var style = document.getElementById(id); + if(!style) { + style = document.createElement('style'); + style.setAttribute('id', id); // WebKit hack :( style.appendChild(document.createTextNode('')); document.head.appendChild(style); - lib.styleSheet = style.sheet; } - var styleSheet = lib.styleSheet; + var styleSheet = style.sheet; if(styleSheet.insertRule) { styleSheet.insertRule(selector + '{' + styleString + '}', 0); @@ -36494,6 +37057,15 @@ lib.addStyleRule = function(selector, styleString) { else lib.warn('addStyleRule failed'); }; +/** + * to remove from the page a stylesheet identified by a given uid + */ +lib.deleteRelatedStyleRule = function(uid) { + var id = 'plotly.js-style-' + uid; + var style = document.getElementById(id); + if(style) lib.removeElement(style); +}; + lib.isIE = function() { return typeof window.navigator.msSaveBlob !== 'undefined'; }; @@ -36581,9 +37153,9 @@ lib.ensureSingleById = function(parent, nodeType, id, enterFn) { * @return {Object} the constructed object with a full nested path */ lib.objectFromPath = function(path, value) { - var keys = path.split('.'), - tmpObj, - obj = tmpObj = {}; + var keys = path.split('.'); + var tmpObj; + var obj = tmpObj = {}; for(var i = 0; i < keys.length; i++) { var key = keys[i]; @@ -36738,13 +37310,13 @@ lib.numSeparate = function(value, separators, separatethousands) { value = String(value); } - var thousandsRe = /(\d+)(\d{3})/, - decimalSep = separators.charAt(0), - thouSep = separators.charAt(1); + var thousandsRe = /(\d+)(\d{3})/; + var decimalSep = separators.charAt(0); + var thouSep = separators.charAt(1); - var x = value.split('.'), - x1 = x[0], - x2 = x.length > 1 ? decimalSep + x[1] : ''; + var x = value.split('.'); + var x1 = x[0]; + var x2 = x.length > 1 ? decimalSep + x[1] : ''; // Years are ignored for thousands separators if(thouSep && (x.length > 1 || x1.length > 4 || separatethousands)) { @@ -36756,10 +37328,10 @@ lib.numSeparate = function(value, separators, separatethousands) { return x1 + x2; }; -var TEMPLATE_STRING_REGEX = /%{([^\s%{}]*)}/g; +var TEMPLATE_STRING_REGEX = /%{([^\s%{}:]*)(:[^}]*)?}/g; var SIMPLE_PROPERTY_REGEX = /^\w*$/; -/* +/** * Substitute values from an object into a string * * Examples: @@ -36771,7 +37343,6 @@ var SIMPLE_PROPERTY_REGEX = /^\w*$/; * * @return {string} templated string */ - lib.templateString = function(string, obj) { // Not all that useful, but cache nestedProperty instantiation // just in case it speeds things up *slightly*: @@ -36786,6 +37357,67 @@ lib.templateString = function(string, obj) { }); }; +var TEMPLATE_STRING_FORMAT_SEPARATOR = /^:/; +var numberOfHoverTemplateWarnings = 0; +var maximumNumberOfHoverTemplateWarnings = 10; +/** + * Substitute values from an object into a string and optionally formats them using d3-format, + * or fallback to associated labels. + * + * Examples: + * Lib.templateString('name: %{trace}', {trace: 'asdf'}) --> 'name: asdf' + * Lib.templateString('name: %{trace[0].name}', {trace: [{name: 'asdf'}]}) --> 'name: asdf' + * Lib.templateString('price: %{y:$.2f}', {y: 1}) --> 'price: $1.00' + * + * @param {string} input string containing %{...:...} template strings + * @param {obj} data object containing fallback text when no formatting is specified, ex.: {yLabel: 'formattedYValue'} + * @param {obj} data objects containing substitution values + * + * @return {string} templated string + */ +lib.hovertemplateString = function(string, labels) { + var args = arguments; + // Not all that useful, but cache nestedProperty instantiation + // just in case it speeds things up *slightly*: + var getterCache = {}; + + return string.replace(TEMPLATE_STRING_REGEX, function(match, key, format) { + var obj, value, i; + for(i = 2; i < args.length; i++) { + obj = args[i]; + if(obj.hasOwnProperty(key)) { + value = obj[key]; + break; + } + + if(!SIMPLE_PROPERTY_REGEX.test(key)) { + value = getterCache[key] || lib.nestedProperty(obj, key).get(); + if(value) getterCache[key] = value; + } + if(value !== undefined) break; + } + + if(value === undefined) { + if(numberOfHoverTemplateWarnings < maximumNumberOfHoverTemplateWarnings) { + lib.warn('Variable \'' + key + '\' in hovertemplate could not be found!'); + value = match; + } + + if(numberOfHoverTemplateWarnings === maximumNumberOfHoverTemplateWarnings) { + lib.warn('Too many hovertemplate warnings - additional warnings will be suppressed'); + } + numberOfHoverTemplateWarnings++; + } + + if(format) { + value = d3.format(format.replace(TEMPLATE_STRING_FORMAT_SEPARATOR, ''))(value); + } else { + if(labels.hasOwnProperty(key + 'Label')) value = labels[key + 'Label']; + } + return value; + }); +}; + /* * alphanumeric string sort, tailored for subplot IDs like scene2, scene10, x10y13 etc */ @@ -36828,56 +37460,9 @@ lib.pseudoRandom = function() { return randSeed / 4294967296; }; -},{"../constants/numerical":151,"./angles":155,"./clean_number":156,"./clear_responsive":158,"./coerce":159,"./dates":160,"./ensure_array":161,"./extend":163,"./filter_unique":164,"./filter_visible":165,"./geometry2d":166,"./get_graph_div":167,"./identity":168,"./is_array":170,"./is_plain_object":171,"./keyed_container":172,"./localize":173,"./loggers":174,"./make_trace_groups":175,"./matrix":176,"./mod":177,"./nested_property":178,"./noop":179,"./notifier":180,"./push_unique":183,"./regex":185,"./relative_attr":186,"./relink_private":187,"./search":188,"./stats":190,"./throttle":192,"./to_log_range":193,"d3":16,"fast-isnumeric":18}],170:[function(_dereq_,module,exports){ +},{"../constants/numerical":149,"./anchor_utils":153,"./angles":154,"./array":155,"./clean_number":156,"./clear_responsive":158,"./coerce":159,"./dates":160,"./extend":162,"./filter_unique":163,"./filter_visible":164,"./geometry2d":165,"./get_graph_div":166,"./identity":167,"./is_plain_object":169,"./keyed_container":170,"./localize":171,"./loggers":172,"./make_trace_groups":173,"./matrix":174,"./mod":175,"./nested_property":176,"./noop":177,"./notifier":178,"./push_unique":181,"./regex":183,"./relative_attr":184,"./relink_private":185,"./search":186,"./stats":188,"./throttle":190,"./to_log_range":191,"d3":16,"fast-isnumeric":18}],169:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - -// IE9 fallbacks - -var ab = (typeof ArrayBuffer === 'undefined' || !ArrayBuffer.isView) ? - {isView: function() { return false; }} : - ArrayBuffer; - -var dv = (typeof DataView === 'undefined') ? - function() {} : - DataView; - -function isTypedArray(a) { - return ab.isView(a) && !(a instanceof dv); -} - -function isArrayOrTypedArray(a) { - return Array.isArray(a) || isTypedArray(a); -} - -/* - * Test whether an input object is 1D. - * - * Assumes we already know the object is an array. - * - * Looks only at the first element, if the dimensionality is - * not consistent we won't figure that out here. - */ -function isArray1D(a) { - return !isArrayOrTypedArray(a[0]); -} - -module.exports = { - isTypedArray: isTypedArray, - isArrayOrTypedArray: isArrayOrTypedArray, - isArray1D: isArray1D -}; - -},{}],171:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36904,9 +37489,9 @@ module.exports = function isPlainObject(obj) { ); }; -},{}],172:[function(_dereq_,module,exports){ +},{}],170:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37097,9 +37682,9 @@ module.exports = function keyedContainer(baseObj, path, keyName, valueName) { return obj; }; -},{"./nested_property":178}],173:[function(_dereq_,module,exports){ +},{"./nested_property":176}],171:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37153,9 +37738,9 @@ module.exports = function localize(gd, s) { return s; }; -},{"../registry":259}],174:[function(_dereq_,module,exports){ +},{"../registry":257}],172:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37166,7 +37751,7 @@ module.exports = function localize(gd, s) { /* eslint-disable no-console */ -var config = _dereq_('../plot_api/plot_config'); +var dfltConfig = _dereq_('../plot_api/plot_config').dfltConfig; var loggers = module.exports = {}; @@ -37177,7 +37762,7 @@ var loggers = module.exports = {}; */ loggers.log = function() { - if(config.logging > 1) { + if(dfltConfig.logging > 1) { var messages = ['LOG:']; for(var i = 0; i < arguments.length; i++) { @@ -37189,7 +37774,7 @@ loggers.log = function() { }; loggers.warn = function() { - if(config.logging > 0) { + if(dfltConfig.logging > 0) { var messages = ['WARN:']; for(var i = 0; i < arguments.length; i++) { @@ -37201,7 +37786,7 @@ loggers.warn = function() { }; loggers.error = function() { - if(config.logging > 0) { + if(dfltConfig.logging > 0) { var messages = ['ERROR:']; for(var i = 0; i < arguments.length; i++) { @@ -37217,19 +37802,31 @@ loggers.error = function() { * apply like other functions do */ function apply(f, args) { - if(f.apply) { - f.apply(f, args); + if(f && f.apply) { + try { + // `this` should always be console, since here we're always + // applying a method of the console object. + f.apply(console, args); + return; + } + catch(e) { /* in case apply failed, fall back on the code below */ } } - else { - for(var i = 0; i < args.length; i++) { + + // no apply - just try calling the function on each arg independently + for(var i = 0; i < args.length; i++) { + try { f(args[i]); } + catch(e) { + // still fails - last resort simple console.log + console.log(args[i]); + } } } -},{"../plot_api/plot_config":202}],175:[function(_dereq_,module,exports){ +},{"../plot_api/plot_config":200}],173:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37264,9 +37861,9 @@ module.exports = function makeTraceGroups(traceLayer, cdModule, cls) { return traces; }; -},{}],176:[function(_dereq_,module,exports){ +},{}],174:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37289,10 +37886,9 @@ exports.init2dArray = function(rowLength, colLength) { * transposing-a-2d-array-in-javascript */ exports.transposeRagged = function(z) { - var maxlen = 0, - zlen = z.length, - i, - j; + var maxlen = 0; + var zlen = z.length; + var i, j; // Maximum row length: for(i = 0; i < zlen; i++) maxlen = Math.max(maxlen, z[i].length); @@ -37309,9 +37905,9 @@ exports.transposeRagged = function(z) { exports.dot = function(x, y) { if(!(x.length && y.length) || x.length !== y.length) return null; - var len = x.length, - out, - i; + var len = x.length; + var out; + var i; if(x[0].length) { // mat-vec or mat-mat @@ -37374,9 +37970,9 @@ exports.apply2DTransform2 = function(transform) { }; }; -},{}],177:[function(_dereq_,module,exports){ +},{}],175:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37409,9 +38005,9 @@ module.exports = { modHalf: modHalf }; -},{}],178:[function(_dereq_,module,exports){ +},{}],176:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37422,7 +38018,7 @@ module.exports = { 'use strict'; var isNumeric = _dereq_('fast-isnumeric'); -var isArrayOrTypedArray = _dereq_('./is_array').isArrayOrTypedArray; +var isArrayOrTypedArray = _dereq_('./array').isArrayOrTypedArray; /** * convert a string s (such as 'xaxis.range[0]') @@ -37445,11 +38041,11 @@ module.exports = function nestedProperty(container, propStr) { throw 'bad property string'; } - var j = 0, - propParts = propStr.split('.'), - indexed, - indices, - i; + var j = 0; + var propParts = propStr.split('.'); + var indexed; + var indices; + var i; // check for parts of the nesting hierarchy that are numbers (ie array elements) while(j < propParts.length) { @@ -37488,12 +38084,12 @@ module.exports = function nestedProperty(container, propStr) { function npGet(cont, parts) { return function() { - var curCont = cont, - curPart, - allSame, - out, - i, - j; + var curCont = cont; + var curPart; + var allSame; + var out; + var i; + var j; for(i = 0; i < parts.length - 1; i++) { curPart = parts[i]; @@ -37544,12 +38140,12 @@ function isDeletable(val, propStr) { function npSet(cont, parts, propStr) { return function(val) { - var curCont = cont, - propPart = '', - containerLevels = [[cont, propPart]], - toDelete = isDeletable(val, propStr), - curPart, - i; + var curCont = cont; + var propPart = ''; + var containerLevels = [[cont, propPart]]; + var toDelete = isDeletable(val, propStr); + var curPart; + var i; for(i = 0; i < parts.length - 1; i++) { curPart = parts[i]; @@ -37608,13 +38204,13 @@ function joinPropStr(propStr, newPart) { // handle special -1 array index function setArrayAll(containerArray, innerParts, val, propStr) { - var arrayVal = isArrayOrTypedArray(val), - allSet = true, - thisVal = val, - thisPropStr = propStr.replace('-1', 0), - deleteThis = arrayVal ? false : isDeletable(val, thisPropStr), - firstPart = innerParts[0], - i; + var arrayVal = isArrayOrTypedArray(val); + var allSet = true; + var thisVal = val; + var thisPropStr = propStr.replace('-1', 0); + var deleteThis = arrayVal ? false : isDeletable(val, thisPropStr); + var firstPart = innerParts[0]; + var i; for(i = 0; i < containerArray.length; i++) { thisPropStr = propStr.replace('-1', i); @@ -37656,9 +38252,9 @@ function badContainer(container, propStr, propParts) { }; } -},{"./is_array":170,"fast-isnumeric":18}],179:[function(_dereq_,module,exports){ +},{"./array":155,"fast-isnumeric":18}],177:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37672,9 +38268,9 @@ function badContainer(container, propStr, propParts) { module.exports = function noop() {}; -},{}],180:[function(_dereq_,module,exports){ +},{}],178:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37754,9 +38350,9 @@ module.exports = function(text, displayLength) { }); }; -},{"d3":16,"fast-isnumeric":18}],181:[function(_dereq_,module,exports){ +},{"d3":16,"fast-isnumeric":18}],179:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37803,9 +38399,9 @@ module.exports = function overrideCursor(el3, csr) { } }; -},{"./setcursor":189}],182:[function(_dereq_,module,exports){ +},{"./setcursor":187}],180:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37837,12 +38433,12 @@ var polygon = module.exports = {}; * returns boolean: is pt inside the polygon (including on its edges) */ polygon.tester = function tester(ptsIn) { - var pts = ptsIn.slice(), - xmin = pts[0][0], - xmax = xmin, - ymin = pts[0][1], - ymax = ymin, - i; + var pts = ptsIn.slice(); + var xmin = pts[0][0]; + var xmax = xmin; + var ymin = pts[0][1]; + var ymax = ymin; + var i; pts.push(pts[0]); for(i = 1; i < pts.length; i++) { @@ -37855,8 +38451,8 @@ polygon.tester = function tester(ptsIn) { // do we have a rectangle? Handle this here, so we can use the same // tester for the rectangular case without sacrificing speed - var isRect = false, - rectFirstEdgeTest; + var isRect = false; + var rectFirstEdgeTest; if(pts.length === 5) { if(pts[0][0] === pts[1][0]) { // vert, horz, vert, horz @@ -37878,8 +38474,8 @@ polygon.tester = function tester(ptsIn) { } function rectContains(pt, omitFirstEdge) { - var x = pt[0], - y = pt[1]; + var x = pt[0]; + var y = pt[1]; if(x === BADNUM || x < xmin || x > xmax || y === BADNUM || y < ymin || y > ymax) { // pt is outside the bounding box of polygon @@ -37891,23 +38487,23 @@ polygon.tester = function tester(ptsIn) { } function contains(pt, omitFirstEdge) { - var x = pt[0], - y = pt[1]; + var x = pt[0]; + var y = pt[1]; if(x === BADNUM || x < xmin || x > xmax || y === BADNUM || y < ymin || y > ymax) { // pt is outside the bounding box of polygon return false; } - var imax = pts.length, - x1 = pts[0][0], - y1 = pts[0][1], - crossings = 0, - i, - x0, - y0, - xmini, - ycross; + var imax = pts.length; + var x1 = pts[0][0]; + var y1 = pts[0][1]; + var crossings = 0; + var i; + var x0; + var y0; + var xmini; + var ycross; for(i = 1; i < imax; i++) { // find all crossings of a vertical line upward from pt with @@ -37989,14 +38585,14 @@ polygon.tester = function tester(ptsIn) { * @returns boolean: true means this segment is bent, false means straight */ var isBent = polygon.isSegmentBent = function isBent(pts, start, end, tolerance) { - var startPt = pts[start], - segment = [pts[end][0] - startPt[0], pts[end][1] - startPt[1]], - segmentSquared = dot(segment, segment), - segmentLen = Math.sqrt(segmentSquared), - unitPerp = [-segment[1] / segmentLen, segment[0] / segmentLen], - i, - part, - partParallel; + var startPt = pts[start]; + var segment = [pts[end][0] - startPt[0], pts[end][1] - startPt[1]]; + var segmentSquared = dot(segment, segment); + var segmentLen = Math.sqrt(segmentSquared); + var unitPerp = [-segment[1] / segmentLen, segment[0] / segmentLen]; + var i; + var part; + var partParallel; for(i = start + 1; i < end; i++) { part = [pts[i][0] - startPt[0], pts[i][1] - startPt[1]]; @@ -38022,14 +38618,14 @@ var isBent = polygon.isSegmentBent = function isBent(pts, start, end, tolerance) * filtered is the resulting filtered Array of [x, y] pairs */ polygon.filter = function filter(pts, tolerance) { - var ptsFiltered = [pts[0]], - doneRawIndex = 0, - doneFilteredIndex = 0; + var ptsFiltered = [pts[0]]; + var doneRawIndex = 0; + var doneFilteredIndex = 0; function addPt(pt) { pts.push(pt); - var prevFilterLen = ptsFiltered.length, - iLast = doneRawIndex; + var prevFilterLen = ptsFiltered.length; + var iLast = doneRawIndex; ptsFiltered.splice(doneFilteredIndex + 1); for(var i = iLast + 1; i < pts.length; i++) { @@ -38056,9 +38652,9 @@ polygon.filter = function filter(pts, tolerance) { }; }; -},{"../constants/numerical":151,"./matrix":176}],183:[function(_dereq_,module,exports){ +},{"../constants/numerical":149,"./matrix":174}],181:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38082,9 +38678,8 @@ polygon.filter = function filter(pts, tolerance) { */ module.exports = function pushUnique(array, item) { if(item instanceof RegExp) { - var itemStr = item.toString(), - i; - for(i = 0; i < array.length; i++) { + var itemStr = item.toString(); + for(var i = 0; i < array.length; i++) { if(array[i] instanceof RegExp && array[i].toString() === itemStr) { return array; } @@ -38096,21 +38691,19 @@ module.exports = function pushUnique(array, item) { return array; }; -},{}],184:[function(_dereq_,module,exports){ +},{}],182:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Lib = _dereq_('../lib'); -var config = _dereq_('../plot_api/plot_config'); - +var dfltConfig = _dereq_('../plot_api/plot_config').dfltConfig; /** * Copy arg array *without* removing `undefined` values from objects. @@ -38190,7 +38783,7 @@ queue.add = function(gd, undoFunc, undoArgs, redoFunc, redoArgs) { queueObj.redo.args.push(redoArgs); } - if(gd.undoQueue.queue.length > config.queueLength) { + if(gd.undoQueue.queue.length > dfltConfig.queueLength) { gd.undoQueue.queue.shift(); gd.undoQueue.index--; } @@ -38307,9 +38900,9 @@ queue.plotDo = function(gd, func, args) { module.exports = queue; -},{"../lib":169,"../plot_api/plot_config":202}],185:[function(_dereq_,module,exports){ +},{"../lib":168,"../plot_api/plot_config":200}],183:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38326,18 +38919,20 @@ module.exports = queue; * @param {Optional(string)} tail: a fixed piece after the id * eg counterRegex('scene', '.annotations') for scene2.annotations etc. * @param {boolean} openEnded: if true, the string may continue past the match. + * @param {boolean} matchBeginning: if false, the string may start before the match. */ -exports.counter = function(head, tail, openEnded) { +exports.counter = function(head, tail, openEnded, matchBeginning) { var fullTail = (tail || '') + (openEnded ? '' : '$'); + var startWithPrefix = matchBeginning === false ? '' : '^'; if(head === 'xy') { - return new RegExp('^x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?' + fullTail); + return new RegExp(startWithPrefix + 'x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?' + fullTail); } - return new RegExp('^' + head + '([2-9]|[1-9][0-9]+)?' + fullTail); + return new RegExp(startWithPrefix + head + '([2-9]|[1-9][0-9]+)?' + fullTail); }; -},{}],186:[function(_dereq_,module,exports){ +},{}],184:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38388,9 +38983,9 @@ module.exports = function(baseAttr, relativeAttr) { return baseAttr + relativeAttr; }; -},{}],187:[function(_dereq_,module,exports){ +},{}],185:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38400,7 +38995,7 @@ module.exports = function(baseAttr, relativeAttr) { 'use strict'; -var isArrayOrTypedArray = _dereq_('./is_array').isArrayOrTypedArray; +var isArrayOrTypedArray = _dereq_('./array').isArrayOrTypedArray; var isPlainObject = _dereq_('./is_plain_object'); /** @@ -38451,9 +39046,9 @@ module.exports = function relinkPrivateKeys(toContainer, fromContainer) { } }; -},{"./is_array":170,"./is_plain_object":171}],188:[function(_dereq_,module,exports){ +},{"./array":155,"./is_plain_object":169}],186:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38529,10 +39124,10 @@ exports.distinctVals = function(valsIn) { var vals = valsIn.slice(); // otherwise we sort the original array... vals.sort(exports.sorterAsc); - var l = vals.length - 1, - minDiff = (vals[l] - vals[0]) || 1, - errDiff = minDiff / (l || 1) / 10000, - v2 = [vals[0]]; + var l = vals.length - 1; + var minDiff = (vals[l] - vals[0]) || 1; + var errDiff = minDiff / (l || 1) / 10000; + var v2 = [vals[0]]; for(var i = 0; i < l; i++) { // make sure values aren't just off by a rounding error @@ -38553,13 +39148,13 @@ exports.distinctVals = function(valsIn) { * binary search is probably overkill here... */ exports.roundUp = function(val, arrayIn, reverse) { - var low = 0, - high = arrayIn.length - 1, - mid, - c = 0, - dlow = reverse ? 0 : 1, - dhigh = reverse ? 1 : 0, - rounded = reverse ? Math.ceil : Math.floor; + var low = 0; + var high = arrayIn.length - 1; + var mid; + var c = 0; + var dlow = reverse ? 0 : 1; + var dhigh = reverse ? 1 : 0; + var rounded = reverse ? Math.ceil : Math.floor; // c is just to avoid infinite loops if there's an error while(low < high && c++ < 100) { mid = rounded((low + high) / 2); @@ -38572,6 +39167,10 @@ exports.roundUp = function(val, arrayIn, reverse) { /** * Tweak to Array.sort(sortFn) that improves performance for pre-sorted arrays * + * Note that newer browsers (such as Chrome v70+) are starting to pick up + * on pre-sorted arrays which may render the following optimization unnecessary + * in the future. + * * Motivation: sometimes we need to sort arrays but the input is likely to * already be sorted. Browsers don't seem to pick up on pre-sorted arrays, * and in fact Chrome is actually *slower* sorting pre-sorted arrays than purely @@ -38635,9 +39234,9 @@ exports.findIndexOfMin = function(arr, fn) { return ind; }; -},{"./identity":168,"./loggers":174,"fast-isnumeric":18}],189:[function(_dereq_,module,exports){ +},{"./identity":167,"./loggers":172,"fast-isnumeric":18}],187:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38658,9 +39257,9 @@ module.exports = function setCursor(el3, csr) { if(csr) el3.classed('cursor-' + csr, true); }; -},{}],190:[function(_dereq_,module,exports){ +},{}],188:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38671,7 +39270,7 @@ module.exports = function setCursor(el3, csr) { 'use strict'; var isNumeric = _dereq_('fast-isnumeric'); -var isArrayOrTypedArray = _dereq_('./is_array').isArrayOrTypedArray; +var isArrayOrTypedArray = _dereq_('./array').isArrayOrTypedArray; /** * aggNums() returns the result of an aggregate function applied to an array of @@ -38759,9 +39358,9 @@ exports.interp = function(arr, n) { return frac * arr[Math.ceil(n)] + (1 - frac) * arr[Math.floor(n)]; }; -},{"./is_array":170,"fast-isnumeric":18}],191:[function(_dereq_,module,exports){ +},{"./array":155,"fast-isnumeric":18}],189:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38878,13 +39477,13 @@ exports.convertToTspans = function(_context, gd, _callback) { var fill = _context.node().style.fill || 'black'; newSvg.select('g').attr({fill: fill, stroke: fill}); - var newSvgW = getSize(newSvg, 'width'), - newSvgH = getSize(newSvg, 'height'), - newX = +_context.attr('x') - newSvgW * - {start: 0, middle: 0.5, end: 1}[_context.attr('text-anchor') || 'start'], - // font baseline is about 1/4 fontSize below centerline - textHeight = fontSize || getSize(_context, 'height'), - dy = -textHeight / 4; + var newSvgW = getSize(newSvg, 'width'); + var newSvgH = getSize(newSvg, 'height'); + var newX = +_context.attr('x') - newSvgW * + {start: 0, middle: 0.5, end: 1}[_context.attr('text-anchor') || 'start']; + // font baseline is about 1/4 fontSize below centerline + var textHeight = fontSize || getSize(_context, 'height'); + var dy = -textHeight / 4; if(svgClass[0] === 'y') { mathjaxGroup.attr({ @@ -38896,7 +39495,7 @@ exports.convertToTspans = function(_context, gd, _callback) { else if(svgClass[0] === 'l') { newSvg.attr({x: _context.attr('x'), y: dy - (newSvgH / 2)}); } - else if(svgClass[0] === 'a') { + else if(svgClass[0] === 'a' && svgClass.indexOf('atitle') !== 0) { newSvg.attr({x: 0, y: dy}); } else { @@ -38925,14 +39524,48 @@ function cleanEscapesForTex(s) { } function texToSVG(_texString, _config, _callback) { - var randomID = 'math-output-' + Lib.randstr({}, 64); - var tmpDiv = d3.select('body').append('div') - .attr({id: randomID}) - .style({visibility: 'hidden', position: 'absolute'}) - .style({'font-size': _config.fontSize + 'px'}) - .text(cleanEscapesForTex(_texString)); - MathJax.Hub.Queue(['Typeset', MathJax.Hub, tmpDiv.node()], function() { + var originalRenderer, + originalConfig, + originalProcessSectionDelay, + tmpDiv; + + MathJax.Hub.Queue( + function() { + originalConfig = Lib.extendDeepAll({}, MathJax.Hub.config); + + originalProcessSectionDelay = MathJax.Hub.processSectionDelay; + if(MathJax.Hub.processSectionDelay !== undefined) { + // MathJax 2.5+ + MathJax.Hub.processSectionDelay = 0; + } + + return MathJax.Hub.Config({ + messageStyle: 'none', + tex2jax: { + inlineMath: [['$', '$'], ['\\(', '\\)']] + }, + displayAlign: 'left', + }); + }, + function() { + // Get original renderer + originalRenderer = MathJax.Hub.config.menuSettings.renderer; + if(originalRenderer !== 'SVG') { + return MathJax.Hub.setRenderer('SVG'); + } + }, + function() { + var randomID = 'math-output-' + Lib.randstr({}, 64); + tmpDiv = d3.select('body').append('div') + .attr({id: randomID}) + .style({visibility: 'hidden', position: 'absolute'}) + .style({'font-size': _config.fontSize + 'px'}) + .text(cleanEscapesForTex(_texString)); + + return MathJax.Hub.Typeset(tmpDiv.node()); + }, + function() { var glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs'); if(tmpDiv.select('.MathJax_SVG').empty() || !tmpDiv.select('svg').node()) { @@ -38945,6 +39578,16 @@ function texToSVG(_texString, _config, _callback) { } tmpDiv.remove(); + + if(originalRenderer !== 'SVG') { + return MathJax.Hub.setRenderer(originalRenderer); + } + }, + function() { + if(originalProcessSectionDelay !== undefined) { + MathJax.Hub.processSectionDelay = originalProcessSectionDelay; + } + return MathJax.Hub.Config(originalConfig); }); } @@ -38982,8 +39625,6 @@ var ZERO_WIDTH_SPACE = '\u200b'; */ var PROTOCOLS = ['http:', 'https:', 'mailto:', '', undefined, ':']; -var STRIP_TAGS = new RegExp(']*)?/?>', 'g'); - var NEWLINES = /(\r\n?|\n)/g; var SPLIT_TAGS = /(<[^<>]*>)/; @@ -39033,10 +39674,66 @@ function getQuotedMatch(_str, re) { var COLORMATCH = /(^|;)\s*color:/; -exports.plainText = function(_str) { - // strip out our pseudo-html so we have a readable - // version to put into text fields - return (_str || '').replace(STRIP_TAGS, ' '); +/** + * Strip string of tags + * + * @param {string} _str : input string + * @param {object} opts : + * - maxLen {number} max length of output string + * - allowedTags {array} list of pseudo-html tags to NOT strip + * @return {string} + */ +exports.plainText = function(_str, opts) { + opts = opts || {}; + + var len = (opts.len !== undefined && opts.len !== -1) ? opts.len : Infinity; + var allowedTags = opts.allowedTags !== undefined ? opts.allowedTags : ['br']; + + var ellipsis = '...'; + var eLen = ellipsis.length; + + var oldParts = _str.split(SPLIT_TAGS); + var newParts = []; + var prevTag = ''; + var l = 0; + + for(var i = 0; i < oldParts.length; i++) { + var p = oldParts[i]; + var match = p.match(ONE_TAG); + var tagType = match && match[2].toLowerCase(); + + if(tagType) { + // N.B. tags do not count towards string length + if(allowedTags.indexOf(tagType) !== -1) { + newParts.push(p); + prevTag = tagType; + } + } else { + var pLen = p.length; + + if((l + pLen) < len) { + newParts.push(p); + l += pLen; + } else if(l < len) { + var pLen2 = len - l; + + if(prevTag && (prevTag !== 'br' || pLen2 <= eLen || pLen <= eLen)) { + newParts.pop(); + } + + if(len > eLen) { + newParts.push(p.substr(0, pLen2 - eLen) + ellipsis); + } else { + newParts.push(p.substr(0, pLen2)); + } + break; + } + + prevTag = ''; + } + } + + return newParts.join(''); }; /* @@ -39330,13 +40027,13 @@ exports.positionText = function positionText(s, x, y) { }; function alignHTMLWith(_base, container, options) { - var alignH = options.horizontalAlign, - alignV = options.verticalAlign || 'top', - bRect = _base.node().getBoundingClientRect(), - cRect = container.node().getBoundingClientRect(), - thisRect, - getTop, - getLeft; + var alignH = options.horizontalAlign; + var alignV = options.verticalAlign || 'top'; + var bRect = _base.node().getBoundingClientRect(); + var cRect = container.node().getBoundingClientRect(); + var thisRect; + var getTop; + var getLeft; if(alignV === 'bottom') { getTop = function() { return bRect.bottom - thisRect.height; }; @@ -39394,8 +40091,8 @@ exports.makeEditable = function(context, options) { appendEditable(); context.style({opacity: 0}); // also hide any mathjax svg - var svgClass = handlerElement.attr('class'), - mathjaxClass; + var svgClass = handlerElement.attr('class'); + var mathjaxClass; if(svgClass) mathjaxClass = '.' + svgClass.split(' ')[0] + '-math-group'; else mathjaxClass = '[class*=-math-group]'; if(mathjaxClass) { @@ -39443,8 +40140,8 @@ exports.makeEditable = function(context, options) { gd._editing = false; context.text(this.textContent) .style({opacity: 1}); - var svgClass = d3.select(this).attr('class'), - mathjaxClass; + var svgClass = d3.select(this).attr('class'); + var mathjaxClass; if(svgClass) mathjaxClass = '.' + svgClass.split(' ')[0] + '-math-group'; else mathjaxClass = '[class*=-math-group]'; if(mathjaxClass) { @@ -39490,9 +40187,9 @@ exports.makeEditable = function(context, options) { return d3.rebind(context, dispatch, 'on'); }; -},{"../constants/alignment":148,"../constants/xmlns_namespaces":152,"../lib":169,"d3":16}],192:[function(_dereq_,module,exports){ +},{"../constants/alignment":146,"../constants/xmlns_namespaces":150,"../lib":168,"d3":16}],190:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39594,9 +40291,9 @@ function _clearTimeout(cache) { } } -},{}],193:[function(_dereq_,module,exports){ +},{}],191:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39622,9 +40319,9 @@ module.exports = function toLogRange(val, range) { return newVal; }; -},{"fast-isnumeric":18}],194:[function(_dereq_,module,exports){ +},{"fast-isnumeric":18}],192:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39644,9 +40341,9 @@ module.exports = { } }; -},{}],195:[function(_dereq_,module,exports){ +},{}],193:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39687,9 +40384,9 @@ module.exports = { } }; -},{}],196:[function(_dereq_,module,exports){ +},{}],194:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39715,11 +40412,11 @@ var Registry = _dereq_('../registry'); * or the whole object) */ module.exports = function containerArrayMatch(astr) { - var rootContainers = Registry.layoutArrayContainers, - regexpContainers = Registry.layoutArrayRegexes, - rootPart = astr.split('[')[0], - arrayStr, - match; + var rootContainers = Registry.layoutArrayContainers; + var regexpContainers = Registry.layoutArrayRegexes; + var rootPart = astr.split('[')[0]; + var arrayStr; + var match; // look for regexp matches first, because they may be nested inside root matches // eg updatemenus[i].buttons is nested inside updatemenus @@ -39745,9 +40442,9 @@ module.exports = function containerArrayMatch(astr) { return {array: arrayStr, index: Number(match[1]), property: match[3] || ''}; }; -},{"../registry":259}],197:[function(_dereq_,module,exports){ +},{"../registry":257}],195:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39763,7 +40460,7 @@ var isPlainObject = Lib.isPlainObject; var traceOpts = { valType: 'flaglist', extras: ['none'], - flags: ['calc', 'clearAxisTypes', 'plot', 'style', 'colorbars'], + flags: ['calc', 'clearAxisTypes', 'plot', 'style', 'markerSize', 'colorbars'], }; @@ -39871,9 +40568,9 @@ function overrideOne(attr, editTypeOverride, overrideContainers, key) { } } -},{"../lib":169}],198:[function(_dereq_,module,exports){ +},{"../lib":168}],196:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39927,6 +40624,8 @@ exports.cleanLayout = function(layout) { } var axisAttrRegex = (Plots.subplotsRegistry.cartesian || {}).attrRegex; + var polarAttrRegex = (Plots.subplotsRegistry.polar || {}).attrRegex; + var ternaryAttrRegex = (Plots.subplotsRegistry.ternary || {}).attrRegex; var sceneAttrRegex = (Plots.subplotsRegistry.gl3d || {}).attrRegex; var keys = Object.keys(layout); @@ -39965,6 +40664,24 @@ exports.cleanLayout = function(layout) { } delete ax.autotick; } + + cleanTitle(ax); + } + + // modifications for polar + else if(polarAttrRegex && polarAttrRegex.test(key)) { + var polar = layout[key]; + + cleanTitle(polar.radialaxis); + } + + // modifications for ternary + else if(ternaryAttrRegex && ternaryAttrRegex.test(key)) { + var ternary = layout[key]; + + cleanTitle(ternary.aaxis); + cleanTitle(ternary.baxis); + cleanTitle(ternary.caxis); } // modifications for 3D scenes @@ -39975,11 +40692,11 @@ exports.cleanLayout = function(layout) { var cameraposition = scene.cameraposition; if(Array.isArray(cameraposition) && cameraposition[0].length === 4) { - var rotation = cameraposition[0], - center = cameraposition[1], - radius = cameraposition[2], - mat = m4FromQuat([], rotation), - eye = []; + var rotation = cameraposition[0]; + var center = cameraposition[1]; + var radius = cameraposition[2]; + var mat = m4FromQuat([], rotation); + var eye = []; for(j = 0; j < 3; ++j) { eye[j] = center[j] + radius * mat[2 + 4 * j]; @@ -39988,11 +40705,16 @@ exports.cleanLayout = function(layout) { scene.camera = { eye: {x: eye[0], y: eye[1], z: eye[2]}, center: {x: center[0], y: center[1], z: center[2]}, - up: {x: mat[1], y: mat[5], z: mat[9]} + up: {x: 0, y: 0, z: 1} // we just ignore calculating camera z up in this case }; delete scene.cameraposition; } + + // clean axis titles + cleanTitle(scene.xaxis); + cleanTitle(scene.yaxis); + cleanTitle(scene.zaxis); } } @@ -40050,6 +40772,9 @@ exports.cleanLayout = function(layout) { } } + // clean plot title + cleanTitle(layout); + /* * Moved from rotate -> orbit for dragmode */ @@ -40059,17 +40784,62 @@ exports.cleanLayout = function(layout) { // supported, but new tinycolor does not because they're not valid css Color.clean(layout); + // clean the layout container in layout.template + if(layout.template && layout.template.layout) { + exports.cleanLayout(layout.template.layout); + } + return layout; }; function cleanAxRef(container, attr) { - var valIn = container[attr], - axLetter = attr.charAt(0); + var valIn = container[attr]; + var axLetter = attr.charAt(0); if(valIn && valIn !== 'paper') { container[attr] = cleanId(valIn, axLetter); } } +/** + * Cleans up old title attribute structure (flat) in favor of the new one (nested). + * + * @param {Object} titleContainer - an object potentially including deprecated title attributes + */ +function cleanTitle(titleContainer) { + if(titleContainer) { + + // title -> title.text + // (although title used to be a string attribute, + // numbers are accepted as well) + if(typeof titleContainer.title === 'string' || typeof titleContainer.title === 'number') { + titleContainer.title = { + text: titleContainer.title + }; + } + + rewireAttr('titlefont', 'font'); + rewireAttr('titleposition', 'position'); + rewireAttr('titleside', 'side'); + rewireAttr('titleoffset', 'offset'); + } + + function rewireAttr(oldAttrName, newAttrName) { + var oldAttrSet = titleContainer[oldAttrName]; + var newAttrSet = titleContainer.title && titleContainer.title[newAttrName]; + + if(oldAttrSet && !newAttrSet) { + + // Ensure title object exists + if(!titleContainer.title) { + titleContainer.title = {}; + } + + titleContainer.title[newAttrName] = titleContainer[oldAttrName]; + delete titleContainer[oldAttrName]; + } + } +} + /* * cleanData: Make a few changes to the data for backward compatibility * before it gets used for anything. Modifies the data traces users provide. @@ -40090,9 +40860,10 @@ exports.cleanData = function(data) { // error_y.opacity is obsolete - merge into color if(trace.error_y && 'opacity' in trace.error_y) { - var dc = Color.defaults, - yeColor = trace.error_y.color || - (Registry.traceIs(trace, 'bar') ? Color.defaultLine : dc[tracei % dc.length]); + var dc = Color.defaults; + var yeColor = trace.error_y.color || (Registry.traceIs(trace, 'bar') ? + Color.defaultLine : + dc[tracei % dc.length]); trace.error_y.color = Color.addOpacity( Color.rgb(yeColor), Color.opacity(yeColor) * trace.error_y.opacity); @@ -40118,11 +40889,11 @@ exports.cleanData = function(data) { } // scl->scale, reversescl->reversescale - if('scl' in trace) { + if('scl' in trace && !('colorscale' in trace)) { trace.colorscale = trace.scl; delete trace.scl; } - if('reversescl' in trace) { + if('reversescl' in trace && !('reversescale' in trace)) { trace.reversescale = trace.reversescl; delete trace.reversescl; } @@ -40260,6 +41031,26 @@ exports.cleanData = function(data) { // sanitize rgb(fractions) and rgba(fractions) that old tinycolor // supported, but new tinycolor does not because they're not valid css Color.clean(trace); + + // remove obsolete autobin(x|y) attributes, but only if true + // if false, this needs to happen in Histogram.calc because it + // can be a one-time autobin so we need to know the results before + // we can push them back into the trace. + if(trace.autobinx) { + delete trace.autobinx; + delete trace.xbins; + } + if(trace.autobiny) { + delete trace.autobiny; + delete trace.ybins; + } + + cleanTitle(trace); + if(trace.colorbar) cleanTitle(trace.colorbar); + if(trace.marker && trace.marker.colorbar) cleanTitle(trace.marker.colorbar); + if(trace.line && trace.line.colorbar) cleanTitle(trace.line.colorbar); + if(trace.aaxis) cleanTitle(trace.aaxis); + if(trace.baxis) cleanTitle(trace.baxis); } }; @@ -40298,13 +41089,16 @@ function commonPrefix(name1, name2, show1, show2) { // textposition - support partial attributes (ie just 'top') // and incorrect use of middle / center etc. function cleanTextPosition(textposition) { - var posY = 'middle', - posX = 'center'; - if(textposition.indexOf('top') !== -1) posY = 'top'; - else if(textposition.indexOf('bottom') !== -1) posY = 'bottom'; + var posY = 'middle'; + var posX = 'center'; - if(textposition.indexOf('left') !== -1) posX = 'left'; - else if(textposition.indexOf('right') !== -1) posX = 'right'; + if(typeof textposition === 'string') { + if(textposition.indexOf('top') !== -1) posY = 'top'; + else if(textposition.indexOf('bottom') !== -1) posY = 'bottom'; + + if(textposition.indexOf('left') !== -1) posX = 'left'; + else if(textposition.indexOf('right') !== -1) posX = 'right'; + } return posY + ' ' + posX; } @@ -40325,9 +41119,10 @@ exports.swapXYData = function(trace) { else trace.transpose = true; } if(trace.error_x && trace.error_y) { - var errorY = trace.error_y, - copyYstyle = ('copy_ystyle' in errorY) ? errorY.copy_ystyle : - !(errorY.color || errorY.thickness || errorY.width); + var errorY = trace.error_y; + var copyYstyle = ('copy_ystyle' in errorY) ? + errorY.copy_ystyle : + !(errorY.color || errorY.thickness || errorY.width); Lib.swapAttrs(trace, ['error_?.copy_ystyle']); if(copyYstyle) { Lib.swapAttrs(trace, ['error_?.color', 'error_?.thickness', 'error_?.width']); @@ -40351,6 +41146,17 @@ exports.coerceTraceIndices = function(gd, traceIndices) { else if(!Array.isArray(traceIndices) || !traceIndices.length) { return gd.data.map(function(_, i) { return i; }); } + else if(Array.isArray(traceIndices)) { + var traceIndicesOut = []; + for(var i = 0; i < traceIndices.length; i++) { + if(Lib.isIndex(traceIndices[i], gd.data.length)) { + traceIndicesOut.push(traceIndices[i]); + } else { + Lib.warn('trace index (', traceIndices[i], ') is not a number or is out of bounds'); + } + } + return traceIndicesOut; + } return traceIndices; }; @@ -40368,10 +41174,10 @@ exports.coerceTraceIndices = function(gd, traceIndices) { * */ exports.manageArrayContainers = function(np, newVal, undoit) { - var obj = np.obj, - parts = np.parts, - pLength = parts.length, - pLast = parts[pLength - 1]; + var obj = np.obj; + var parts = np.parts; + var pLength = parts.length; + var pLast = parts[pLength - 1]; var pLastIsNumber = isNumeric(pLast); @@ -40379,8 +41185,8 @@ exports.manageArrayContainers = function(np, newVal, undoit) { if(pLastIsNumber && newVal === null) { // Clear item in array container when new value is null - var contPath = parts.slice(0, pLength - 1).join('.'), - cont = Lib.nestedProperty(obj, contPath).get(); + var contPath = parts.slice(0, pLength - 1).join('.'); + var cont = Lib.nestedProperty(obj, contPath).get(); cont.splice(pLast, 1); // Note that nested property clears null / undefined at end of @@ -40469,9 +41275,9 @@ exports.clearAxisTypes = function(gd, traces, layoutUpdate) { } }; -},{"../components/color":50,"../lib":169,"../plots/cartesian/axis_ids":217,"../plots/plots":246,"../registry":259,"fast-isnumeric":18,"gl-mat4/fromQuat":19}],199:[function(_dereq_,module,exports){ +},{"../components/color":51,"../lib":168,"../plots/cartesian/axis_ids":215,"../plots/plots":245,"../registry":257,"fast-isnumeric":18,"gl-mat4/fromQuat":19}],197:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40488,6 +41294,10 @@ exports.restyle = main.restyle; exports.relayout = main.relayout; exports.redraw = main.redraw; exports.update = main.update; +exports._guiRestyle = main._guiRestyle; +exports._guiRelayout = main._guiRelayout; +exports._guiUpdate = main._guiUpdate; +exports._storeDirectGUIEdit = main._storeDirectGUIEdit; exports.react = main.react; exports.extendTraces = main.extendTraces; exports.prependTraces = main.prependTraces; @@ -40508,9 +41318,9 @@ var templateApi = _dereq_('./template_api'); exports.makeTemplate = templateApi.makeTemplate; exports.validateTemplate = templateApi.validateTemplate; -},{"../snapshot/download":261,"./plot_api":201,"./template_api":206,"./to_image":207,"./validate":208}],200:[function(_dereq_,module,exports){ +},{"../snapshot/download":259,"./plot_api":199,"./template_api":204,"./to_image":205,"./validate":206}],198:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40520,7 +41330,6 @@ exports.validateTemplate = templateApi.validateTemplate; 'use strict'; -var nestedProperty = _dereq_('../lib/nested_property'); var isPlainObject = _dereq_('../lib/is_plain_object'); var noop = _dereq_('../lib/noop'); var Loggers = _dereq_('../lib/loggers'); @@ -40577,19 +41386,22 @@ var isRemoveVal = exports.isRemoveVal = function isRemoveVal(val) { * the flags for which actions we're going to perform to display these (and * any other) changes. If we're already `recalc`ing, we don't need to redraw * individual items + * @param {function} _nestedProperty + * a (possibly modified for gui edits) nestedProperty constructor + * The modified version takes a 3rd argument, for a prefix to the attribute + * string necessary for storing GUI edits * * @returns {bool} `true` if it managed to complete drawing of the changes * `false` would mean the parent should replot. */ -exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, edits, flags) { - var componentType = np.astr, - supplyComponentDefaults = Registry.getComponentMethod(componentType, 'supplyLayoutDefaults'), - draw = Registry.getComponentMethod(componentType, 'draw'), - drawOne = Registry.getComponentMethod(componentType, 'drawOne'), - replotLater = flags.replot || flags.recalc || (supplyComponentDefaults === noop) || - (draw === noop), - layout = gd.layout, - fullLayout = gd._fullLayout; +exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, edits, flags, _nestedProperty) { + var componentType = np.astr; + var supplyComponentDefaults = Registry.getComponentMethod(componentType, 'supplyLayoutDefaults'); + var draw = Registry.getComponentMethod(componentType, 'draw'); + var drawOne = Registry.getComponentMethod(componentType, 'drawOne'); + var replotLater = flags.replot || flags.recalc || (supplyComponentDefaults === noop) || (draw === noop); + var layout = gd.layout; + var fullLayout = gd._fullLayout; if(edits['']) { if(Object.keys(edits).length > 1) { @@ -40613,26 +41425,26 @@ exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, return true; } - var componentNums = Object.keys(edits).map(Number).sort(sorterAsc), - componentArrayIn = np.get(), - componentArray = componentArrayIn || [], - // componentArrayFull is used just to keep splices in line between - // full and input arrays, so private keys can be copied over after - // redoing supplyDefaults - // TODO: this assumes componentArray is in gd.layout - which will not be - // true after we extend this to restyle - componentArrayFull = nestedProperty(fullLayout, componentType).get(); + var componentNums = Object.keys(edits).map(Number).sort(sorterAsc); + var componentArrayIn = np.get(); + var componentArray = componentArrayIn || []; + // componentArrayFull is used just to keep splices in line between + // full and input arrays, so private keys can be copied over after + // redoing supplyDefaults + // TODO: this assumes componentArray is in gd.layout - which will not be + // true after we extend this to restyle + var componentArrayFull = _nestedProperty(fullLayout, componentType).get(); - var deletes = [], - firstIndexChange = -1, - maxIndex = componentArray.length, - i, - j, - componentNum, - objEdits, - objKeys, - objVal, - adding; + var deletes = []; + var firstIndexChange = -1; + var maxIndex = componentArray.length; + var i; + var j; + var componentNum; + var objEdits; + var objKeys; + var objVal; + var adding, prefix; // first make the add and edit changes for(i = 0; i < componentNums.length; i++) { @@ -40671,7 +41483,9 @@ exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, } else { for(j = 0; j < objKeys.length; j++) { - nestedProperty(componentArray[componentNum], objKeys[j]).set(objEdits[objKeys[j]]); + prefix = componentType + '[' + componentNum + '].'; + _nestedProperty(componentArray[componentNum], objKeys[j], prefix) + .set(objEdits[objKeys[j]]); } } } @@ -40722,9 +41536,9 @@ exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, return true; }; -},{"../lib/is_plain_object":171,"../lib/loggers":174,"../lib/nested_property":178,"../lib/noop":179,"../lib/search":188,"../registry":259,"./container_array_match":196}],201:[function(_dereq_,module,exports){ +},{"../lib/is_plain_object":169,"../lib/loggers":172,"../lib/noop":177,"../lib/search":186,"../registry":257,"./container_array_match":194}],199:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40740,6 +41554,8 @@ var isNumeric = _dereq_('fast-isnumeric'); var hasHover = _dereq_('has-hover'); var Lib = _dereq_('../lib'); +var nestedProperty = Lib.nestedProperty; + var Events = _dereq_('../lib/events'); var Queue = _dereq_('../lib/queue'); @@ -40756,7 +41572,7 @@ var initInteractions = _dereq_('../plots/cartesian/graph_interact').initInteract var xmlnsNamespaces = _dereq_('../constants/xmlns_namespaces'); var svgTextUtils = _dereq_('../lib/svg_text_utils'); -var defaultConfig = _dereq_('./plot_config'); +var dfltConfig = _dereq_('./plot_config').dfltConfig; var manageArrays = _dereq_('./manage_arrays'); var helpers = _dereq_('./helpers'); var subroutines = _dereq_('./subroutines'); @@ -40835,9 +41651,6 @@ exports.plot = function(gd, data, layout, config) { // so we can share cached text across tabs Drawing.makeTester(); - // clear stashed base url - delete Drawing.baseUrl; - // collect promises for any async actions during plotting // any part of the plotting code can push to gd._promises, then // before we move to the next step, we check that they're all @@ -40882,7 +41695,7 @@ exports.plot = function(gd, data, layout, config) { // Legacy polar plots if(!fullLayout._has('polar') && data && data[0] && data[0].r) { Lib.log('Legacy polar charts are deprecated!'); - return plotPolar(gd, data, layout); + return plotLegacyPolar(gd, data, layout); } // so we don't try to re-call Plotly.plot from inside @@ -40986,15 +41799,15 @@ exports.plot = function(gd, data, layout, config) { if(regl) { // Unfortunately, this can happen when relayouting to large // width/height on some browsers. - if(fullLayout.width !== regl._gl.drawingBufferWidth || - fullLayout.height !== regl._gl.drawingBufferHeight + if(Math.floor(fullLayout.width) !== regl._gl.drawingBufferWidth || + Math.floor(fullLayout.height) !== regl._gl.drawingBufferHeight ) { var msg = 'WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.'; if(drawFrameworkCalls) { Lib.error(msg); } else { Lib.log(msg + ' Clearing graph and plotting again.'); - Plots.cleanPlot([], {}, gd._fullData, fullLayout, gd.calcdata); + Plots.cleanPlot([], {}, gd._fullData, fullLayout); Plots.supplyDefaults(gd); fullLayout = gd._fullLayout; Plots.doCalcdata(gd); @@ -41058,8 +41871,7 @@ exports.plot = function(gd, data, layout, config) { return Lib.syncOrAsync([ Registry.getComponentMethod('shapes', 'calcAutorange'), Registry.getComponentMethod('annotations', 'calcAutorange'), - doAutoRangeAndConstraints, - Registry.getComponentMethod('rangeslider', 'calcAutorange') + doAutoRangeAndConstraints ], gd); } @@ -41071,11 +41883,16 @@ exports.plot = function(gd, data, layout, config) { // store initial ranges *after* enforcing constraints, otherwise // we will never look like we're at the initial ranges if(graphWasEmpty) Axes.saveRangeInitial(gd); + + // this one is different from shapes/annotations calcAutorange + // the others incorporate those components into ax._extremes, + // this one actually sets the ranges in rangesliders. + Registry.getComponentMethod('rangeslider', 'calcAutorange')(gd); } // draw ticks, titles, and calculate axis scaling (._b, ._m) function drawAxes() { - return Axes.doTicks(gd, graphWasEmpty ? '' : 'redraw'); + return Axes.draw(gd, graphWasEmpty ? '' : 'redraw'); } var seq = [ @@ -41127,7 +41944,7 @@ function emitAfterPlot(gd) { } exports.setPlotConfig = function setPlotConfig(obj) { - return Lib.extendFlat(defaultConfig, obj); + return Lib.extendFlat(dfltConfig, obj); }; function setBackground(gd, bgColor) { @@ -41144,7 +41961,16 @@ function opaqueSetBackground(gd, bgColor) { } function setPlotContext(gd, config) { - if(!gd._context) gd._context = Lib.extendDeep({}, defaultConfig); + if(!gd._context) { + gd._context = Lib.extendDeep({}, dfltConfig); + + // stash href, used to make robust clipPath URLs + var base = d3.select('base'); + gd._context._baseUrl = base.size() && base.attr('href') ? + window.location.href.split('#')[0] : + ''; + } + var context = gd._context; var i, keys, key; @@ -41190,6 +42016,9 @@ function setPlotContext(gd, config) { } } } + + // not part of the user-facing config options + context._exportedPlot = config._exportedPlot; } // staticPlot forces a bunch of others: @@ -41213,9 +42042,32 @@ function setPlotContext(gd, config) { if(context.setBackground === 'transparent' || typeof context.setBackground !== 'function') { context.setBackground = setBackground; } + + // Check if gd has a specified widht/height to begin with + context._hasZeroHeight = context._hasZeroHeight || gd.clientHeight === 0; + context._hasZeroWidth = context._hasZeroWidth || gd.clientWidth === 0; + + // fill context._scrollZoom helper to help manage scrollZoom flaglist + var szIn = context.scrollZoom; + var szOut = context._scrollZoom = {}; + if(szIn === true) { + szOut.cartesian = 1; + szOut.gl3d = 1; + szOut.geo = 1; + szOut.mapbox = 1; + } else if(typeof szIn === 'string') { + var parts = szIn.split('+'); + for(i = 0; i < parts.length; i++) { + szOut[parts[i]] = 1; + } + } else if(szIn !== false) { + szOut.gl3d = 1; + szOut.geo = 1; + szOut.mapbox = 1; + } } -function plotPolar(gd, data, layout) { +function plotLegacyPolar(gd, data, layout) { // build or reuse the container skeleton var plotContainer = d3.select(gd).selectAll('.plot-container') .data([0]); @@ -41256,7 +42108,7 @@ function plotPolar(gd, data, layout) { // editable title var opacity = 1; - var txt = gd._fullLayout.title; + var txt = gd._fullLayout.title ? gd._fullLayout.title.text : ''; if(txt === '' || !txt) opacity = 0; var titleLayout = function() { @@ -41290,7 +42142,7 @@ function plotPolar(gd, data, layout) { var setContenteditable = function() { this.call(svgTextUtils.makeEditable, {gd: gd}) .on('edit', function(text) { - gd.framework({layout: {title: text}}); + gd.framework({layout: {title: {text: text}}}); this.text(text) .call(titleLayout); this.call(setContenteditable); @@ -41339,7 +42191,7 @@ exports.newPlot = function(gd, data, layout, config) { gd = Lib.getGraphDiv(gd); // remove gl contexts - Plots.cleanPlot([], {}, gd._fullData || [], gd._fullLayout || {}, gd.calcdata || []); + Plots.cleanPlot([], {}, gd._fullData || [], gd._fullLayout || {}); Plots.purge(gd); return exports.plot(gd, data, layout, config); @@ -41352,10 +42204,10 @@ exports.newPlot = function(gd, data, layout, config) { * @param {Number} maxIndex The maximum index allowable (arr.length - 1) */ function positivifyIndices(indices, maxIndex) { - var parentLength = maxIndex + 1, - positiveIndices = [], - i, - index; + var parentLength = maxIndex + 1; + var positiveIndices = []; + var i; + var index; for(i = 0; i < indices.length; i++) { index = indices[i]; @@ -41543,8 +42395,8 @@ function assertExtendTracesArgs(gd, update, indices, maxPoints) { */ function getExtendProperties(gd, update, indices, maxPoints) { - var maxPointsIsObject = Lib.isPlainObject(maxPoints), - updateProps = []; + var maxPointsIsObject = Lib.isPlainObject(maxPoints); + var updateProps = []; var trace, target, prop, insert, maxp; // allow scalar index to represent a single trace position @@ -41563,7 +42415,7 @@ function getExtendProperties(gd, update, indices, maxPoints) { * instance that references the key and value for this particular trace. */ trace = gd.data[indices[j]]; - prop = Lib.nestedProperty(trace, key); + prop = nestedProperty(trace, key); /* * Target is the existing gd.data.trace.dataArray value like "x" or "marker.size" @@ -41797,13 +42649,13 @@ exports.prependTraces = function prependTraces(gd, update, indices, maxPoints) { exports.addTraces = function addTraces(gd, traces, newIndices) { gd = Lib.getGraphDiv(gd); - var currentIndices = [], - undoFunc = exports.deleteTraces, - redoFunc = addTraces, - undoArgs = [gd, currentIndices], - redoArgs = [gd, traces], // no newIndices here - i, - promise; + var currentIndices = []; + var undoFunc = exports.deleteTraces; + var redoFunc = addTraces; + var undoArgs = [gd, currentIndices]; + var redoArgs = [gd, traces]; // no newIndices here + var i; + var promise; // all validation is done elsewhere to remove clutter here checkAddTracesArgs(gd, traces, newIndices); @@ -41874,13 +42726,13 @@ exports.addTraces = function addTraces(gd, traces, newIndices) { exports.deleteTraces = function deleteTraces(gd, indices) { gd = Lib.getGraphDiv(gd); - var traces = [], - undoFunc = exports.addTraces, - redoFunc = deleteTraces, - undoArgs = [gd, traces, indices], - redoArgs = [gd, indices], - i, - deletedTrace; + var traces = []; + var undoFunc = exports.addTraces; + var redoFunc = deleteTraces; + var undoArgs = [gd, traces, indices]; + var redoArgs = [gd, indices]; + var i; + var deletedTrace; // make sure indices are defined if(typeof indices === 'undefined') { @@ -41940,13 +42792,13 @@ exports.deleteTraces = function deleteTraces(gd, indices) { exports.moveTraces = function moveTraces(gd, currentIndices, newIndices) { gd = Lib.getGraphDiv(gd); - var newData = [], - movingTraceMap = [], - undoFunc = moveTraces, - redoFunc = moveTraces, - undoArgs = [gd, newIndices, currentIndices], - redoArgs = [gd, currentIndices, newIndices], - i; + var newData = []; + var movingTraceMap = []; + var undoFunc = moveTraces; + var redoFunc = moveTraces; + var undoArgs = [gd, newIndices, currentIndices]; + var redoArgs = [gd, currentIndices, newIndices]; + var i; // to reduce complexity here, check args elsewhere // this throws errors where appropriate @@ -42034,7 +42886,7 @@ exports.moveTraces = function moveTraces(gd, currentIndices, newIndices) { * If the array is too short, it will wrap around (useful for * style files that want to specify cyclical default values). */ -exports.restyle = function restyle(gd, astr, val, _traces) { +function restyle(gd, astr, val, _traces) { gd = Lib.getGraphDiv(gd); helpers.clearPromiseQueue(gd); @@ -42069,8 +42921,21 @@ exports.restyle = function restyle(gd, astr, val, _traces) { } else { seq.push(Plots.previousPromises); + // maybe only call Plots.supplyDataDefaults in the splom case, + // to skip over long and slow axes defaults Plots.supplyDefaults(gd); + if(flags.markerSize) { + Plots.doCalcdata(gd); + addAxRangeSequence(seq); + + // TODO + // if all axes have autorange:false, then + // proceed to subroutines.doTraceStyle(), + // otherwise we must go through addAxRangeSequence, + // which in general must redraws 'all' axes + } + if(flags.style) seq.push(subroutines.doTraceStyle); if(flags.colorbars) seq.push(subroutines.doColorBars); @@ -42091,7 +42956,8 @@ exports.restyle = function restyle(gd, astr, val, _traces) { gd.emit('plotly_restyle', specs.eventData); return gd; }); -}; +} +exports.restyle = restyle; // for undo: undefined initial vals must be turned into nulls // so that we unset rather than ignore them @@ -42100,20 +42966,86 @@ function undefinedToNull(val) { return val; } +/** + * Factory function to wrap nestedProperty with GUI edits if necessary + * with GUI edits we add an optional prefix to the nestedProperty constructor + * to prepend to the attribute string in the preGUI store. + */ +function makeNP(preGUI, guiEditFlag) { + if(!guiEditFlag) return nestedProperty; + + return function(container, attr, prefix) { + var np = nestedProperty(container, attr); + var npSet = np.set; + np.set = function(val) { + var fullAttr = (prefix || '') + attr; + storeCurrent(fullAttr, np.get(), val, preGUI); + npSet(val); + }; + return np; + }; +} + +function storeCurrent(attr, val, newVal, preGUI) { + if(Array.isArray(val) || Array.isArray(newVal)) { + var arrayVal = Array.isArray(val) ? val : []; + var arrayNew = Array.isArray(newVal) ? newVal : []; + var maxLen = Math.max(arrayVal.length, arrayNew.length); + for(var i = 0; i < maxLen; i++) { + storeCurrent(attr + '[' + i + ']', arrayVal[i], arrayNew[i], preGUI); + } + } + else if(Lib.isPlainObject(val) || Lib.isPlainObject(newVal)) { + var objVal = Lib.isPlainObject(val) ? val : {}; + var objNew = Lib.isPlainObject(newVal) ? newVal : {}; + var objBoth = Lib.extendFlat({}, objVal, objNew); + for(var key in objBoth) { + storeCurrent(attr + '.' + key, objVal[key], objNew[key], preGUI); + } + } + else if(preGUI[attr] === undefined) { + preGUI[attr] = undefinedToNull(val); + } +} + +/** + * storeDirectGUIEdit: for routines that skip restyle/relayout and mock it + * by emitting a plotly_restyle or plotly_relayout event, this routine + * keeps track of the initial state in _preGUI for use by uirevision + * Does *not* apply these changes to data/layout - that's the responsibility + * of the calling routine. + * + * @param {object} container: the input attributes container (eg `layout` or a `trace`) + * @param {object} preGUI: where original values should be stored, either + * `layout._preGUI` or `layout._tracePreGUI[uid]` + * @param {object} edits: the {attr: val} object as normally passed to `relayout` etc + */ +exports._storeDirectGUIEdit = function(container, preGUI, edits) { + for(var attr in edits) { + var np = nestedProperty(container, attr); + storeCurrent(attr, np.get(), edits[attr], preGUI); + } +}; + function _restyle(gd, aobj, traces) { - var fullLayout = gd._fullLayout, - fullData = gd._fullData, - data = gd.data, - i; + var fullLayout = gd._fullLayout; + var fullData = gd._fullData; + var data = gd.data; + var guiEditFlag = fullLayout._guiEditing; + var layoutNP = makeNP(fullLayout._preGUI, guiEditFlag); + var eventData = Lib.extendDeepAll({}, aobj); + var i; + + cleanDeprecatedAttributeKeys(aobj); // initialize flags var flags = editTypes.traceFlags(); // copies of the change (and previous values of anything affected) // for the undo / redo queue - var redoit = {}, - undoit = {}, - axlist; + var redoit = {}; + var undoit = {}; + var axlist; // make a new empty vals array for undoit function a0() { return traces.map(function() { return undefined; }); } @@ -42128,6 +43060,16 @@ function _restyle(gd, aobj, traces) { function rangeAttr(axName) { return 'LAYOUT' + axName + '.range'; } + function getFullTrace(traceIndex) { + // usually fullData maps 1:1 onto data, but with groupby transforms + // the fullData index can be greater. Take the *first* matching trace. + for(var j = traceIndex; j < fullData.length; j++) { + if(fullData[j]._input === data[traceIndex]) return fullData[j]; + } + // should never get here - and if we *do* it should cause an error + // later on undefined fullTrace is passed to nestedProperty. + } + // for attrs that interact (like scales & autoscales), save the // old vals before making the change // val=undefined will not set a value, just record what the value was. @@ -42143,9 +43085,11 @@ function _restyle(gd, aobj, traces) { var extraparam; if(attr.substr(0, 6) === 'LAYOUT') { - extraparam = Lib.nestedProperty(gd.layout, attr.replace('LAYOUT', '')); + extraparam = layoutNP(gd.layout, attr.replace('LAYOUT', '')); } else { - extraparam = Lib.nestedProperty(data[traces[i]], attr); + var tracei = traces[i]; + var preGUI = fullLayout._tracePreGUI[getFullTrace(tracei)._fullInput.uid]; + extraparam = makeNP(preGUI, guiEditFlag)(data[tracei], attr); } if(!(attr in undoit)) { @@ -42159,6 +43103,18 @@ function _restyle(gd, aobj, traces) { } } + function allBins(binAttr) { + return function(j) { + return fullData[j][binAttr]; + }; + } + + function arrayBins(binAttr) { + return function(vij, j) { + return vij === false ? fullData[traces[j]][binAttr] : null; + }; + } + // now make the changes to gd.data (and occasionally gd.layout) // and figure out what kind of graphics update we need to do for(var ai in aobj) { @@ -42166,18 +43122,29 @@ function _restyle(gd, aobj, traces) { throw new Error('cannot set ' + ai + 'and a parent attribute simultaneously'); } - var vi = aobj[ai], - cont, - contFull, - param, - oldVal, - newVal, - valObject; + var vi = aobj[ai]; + var cont; + var contFull; + var param; + var oldVal; + var newVal; + var valObject; + + // Backward compatibility shim for turning histogram autobin on, + // or freezing previous autobinned values. + // Replace obsolete `autobin(x|y): true` with `(x|y)bins: null` + // and `autobin(x|y): false` with the `(x|y)bins` in `fullData` + if(ai === 'autobinx' || ai === 'autobiny') { + ai = ai.charAt(ai.length - 1) + 'bins'; + if(Array.isArray(vi)) vi = vi.map(arrayBins(ai)); + else if(vi === false) vi = traces.map(allBins(ai)); + else vi = null; + } redoit[ai] = vi; if(ai.substr(0, 6) === 'LAYOUT') { - param = Lib.nestedProperty(gd.layout, ai.replace('LAYOUT', '')); + param = layoutNP(gd.layout, ai.replace('LAYOUT', '')); undoit[ai] = [undefinedToNull(param.get())]; // since we're allowing val to be an array, allow it here too, // even though that's meaningless @@ -42192,8 +43159,9 @@ function _restyle(gd, aobj, traces) { undoit[ai] = a0(); for(i = 0; i < traces.length; i++) { cont = data[traces[i]]; - contFull = fullData[traces[i]]; - param = Lib.nestedProperty(cont, ai); + contFull = getFullTrace(traces[i]); + var preGUI = fullLayout._tracePreGUI[contFull._fullInput.uid]; + param = makeNP(preGUI, guiEditFlag)(cont, ai); oldVal = param.get(); newVal = Array.isArray(vi) ? vi[i % vi.length] : vi; @@ -42203,7 +43171,7 @@ function _restyle(gd, aobj, traces) { var prefix = ai.substr(0, ai.length - finalPart.length - 1); var prefixDot = prefix ? prefix + '.' : ''; var innerContFull = prefix ? - Lib.nestedProperty(contFull, prefix).get() : contFull; + nestedProperty(contFull, prefix).get() : contFull; valObject = PlotSchema.getTraceValObject(contFull, param.parts); @@ -42239,8 +43207,8 @@ function _restyle(gd, aobj, traces) { } else if(ai === 'type' && (newVal === 'pie') !== (oldVal === 'pie')) { - var labelsTo = 'x', - valuesTo = 'y'; + var labelsTo = 'x'; + var valuesTo = 'y'; if((newVal === 'bar' || oldVal === 'bar') && cont.orientation === 'h') { labelsTo = 'y'; valuesTo = 'x'; @@ -42250,14 +43218,14 @@ function _restyle(gd, aobj, traces) { Lib.swapAttrs(cont, ['?', '?src'], 'values', valuesTo); if(oldVal === 'pie') { - Lib.nestedProperty(cont, 'marker.color') - .set(Lib.nestedProperty(cont, 'marker.colors').get()); + nestedProperty(cont, 'marker.color') + .set(nestedProperty(cont, 'marker.colors').get()); // super kludgy - but if all pies are gone we won't remove them otherwise fullLayout._pielayer.selectAll('g.trace').remove(); } else if(Registry.traceIs(cont, 'cartesian')) { - Lib.nestedProperty(cont, 'marker.colors') - .set(Lib.nestedProperty(cont, 'marker.color').get()); + nestedProperty(cont, 'marker.colors') + .set(nestedProperty(cont, 'marker.color').get()); } } @@ -42297,8 +43265,10 @@ function _restyle(gd, aobj, traces) { else { if(valObject) { // must redo calcdata when restyling array values of arrayOk attributes - if(valObject.arrayOk && ( - Lib.isArrayOrTypedArray(newVal) || Lib.isArrayOrTypedArray(oldVal)) + // ... but no need to this for regl-based traces + if(valObject.arrayOk && + !Registry.traceIs(contFull, 'regl') && + (Lib.isArrayOrTypedArray(newVal) || Lib.isArrayOrTypedArray(oldVal)) ) { flags.calc = true; } @@ -42326,7 +43296,7 @@ function _restyle(gd, aobj, traces) { // swap hovermode if set to "compare x/y data" if(ai === 'orientationaxes') { - var hovermode = Lib.nestedProperty(gd.layout, 'hovermode'); + var hovermode = nestedProperty(gd.layout, 'hovermode'); if(hovermode.get() === 'x') { hovermode.set('y'); } else if(hovermode.get() === 'y') { @@ -42334,8 +43304,12 @@ function _restyle(gd, aobj, traces) { } } - // major enough changes deserve autoscale, autobin, and + // Major enough changes deserve autoscale and // non-reversed axes so people don't get confused + // + // Note: autobin (or its new analog bin clearing) is not included here + // since we're not pushing bins back to gd.data, so if we have bin + // info it was explicitly provided by the user. if(['orientation', 'type'].indexOf(ai) !== -1) { axlist = []; for(i = 0; i < traces.length; i++) { @@ -42344,10 +43318,6 @@ function _restyle(gd, aobj, traces) { if(Registry.traceIs(trace, 'cartesian')) { addToAxlist(trace.xaxis || 'x'); addToAxlist(trace.yaxis || 'y'); - - if(ai === 'type') { - doextra(['autobinx', 'autobiny'], true, i); - } } } @@ -42365,10 +43335,53 @@ function _restyle(gd, aobj, traces) { undoit: undoit, redoit: redoit, traces: traces, - eventData: Lib.extendDeepNoArrays([], [redoit, traces]) + eventData: Lib.extendDeepNoArrays([], [eventData, traces]) }; } +/** + * Converts deprecated attribute keys to + * the current API to ensure backwards compatibility. + * + * This is needed for the update mechanism to determine which + * subroutines to run based on the actual attribute + * definitions (that don't include the deprecated ones). + * + * E.g. Maps {'xaxis.title': 'A chart'} to {'xaxis.title.text': 'A chart'} + * and {titlefont: {...}} to {'title.font': {...}}. + * + * @param aobj + */ +function cleanDeprecatedAttributeKeys(aobj) { + var oldAxisTitleRegex = Lib.counterRegex('axis', '\.title', false, false); + var colorbarRegex = /colorbar\.title$/; + var keys = Object.keys(aobj); + var i, key, value; + + for(i = 0; i < keys.length; i++) { + key = keys[i]; + value = aobj[key]; + + if((key === 'title' || oldAxisTitleRegex.test(key) || colorbarRegex.test(key)) && + (typeof value === 'string' || typeof value === 'number')) { + replace(key, key.replace('title', 'title.text')); + } else if(key.indexOf('titlefont') > -1) { + replace(key, key.replace('titlefont', 'title.font')); + } else if(key.indexOf('titleposition') > -1) { + replace(key, key.replace('titleposition', 'title.position')); + } else if(key.indexOf('titleside') > -1) { + replace(key, key.replace('titleside', 'title.side')); + } else if(key.indexOf('titleoffset') > -1) { + replace(key, key.replace('titleoffset', 'title.offset')); + } + } + + function replace(oldAttrStr, newAttrStr) { + aobj[newAttrStr] = aobj[oldAttrStr]; + delete aobj[oldAttrStr]; + } +} + /** * relayout: update layout attributes of an existing plot * @@ -42389,7 +43402,7 @@ function _restyle(gd, aobj, traces) { * attribute object `{astr1: val1, astr2: val2 ...}` * allows setting multiple attributes simultaneously */ -exports.relayout = function relayout(gd, astr, val) { +function relayout(gd, astr, val) { gd = Lib.getGraphDiv(gd); helpers.clearPromiseQueue(gd); @@ -42426,15 +43439,11 @@ exports.relayout = function relayout(gd, astr, val) { seq.push(subroutines.layoutReplot); } else if(Object.keys(aobj).length) { - Plots.supplyDefaults(gd); + axRangeSupplyDefaultsByPass(gd, flags, specs) || Plots.supplyDefaults(gd); if(flags.legend) seq.push(subroutines.doLegend); if(flags.layoutstyle) seq.push(subroutines.layoutStyles); - - if(flags.axrange) { - addAxRangeSequence(seq, specs.rangesAltered); - } - + if(flags.axrange) addAxRangeSequence(seq, specs.rangesAltered); if(flags.ticks) seq.push(subroutines.doTicksRelayout); if(flags.modebar) seq.push(subroutines.doModeBar); if(flags.camera) seq.push(subroutines.doCamera); @@ -42456,19 +43465,53 @@ exports.relayout = function relayout(gd, astr, val) { gd.emit('plotly_relayout', specs.eventData); return gd; }); -}; +} +exports.relayout = relayout; + +// Optimization mostly for large splom traces where +// Plots.supplyDefaults can take > 100ms +function axRangeSupplyDefaultsByPass(gd, flags, specs) { + var k; + + if(!flags.axrange) return false; + + for(k in flags) { + if(k !== 'axrange' && flags[k]) return false; + } + + for(k in specs.rangesAltered) { + var axName = Axes.id2name(k); + var axIn = gd.layout[axName]; + var axOut = gd._fullLayout[axName]; + axOut.autorange = axIn.autorange; + axOut.range = axIn.range.slice(); + axOut.cleanRange(); + } + return true; +} function addAxRangeSequence(seq, rangesAltered) { // N.B. leave as sequence of subroutines (for now) instead of // subroutine of its own so that finalDraw always gets // executed after drawData - var doTicks = rangesAltered ? - function(gd) { return subroutines.doTicksRelayout(gd, rangesAltered); } : - subroutines.doTicksRelayout; + var drawAxes = rangesAltered ? + function(gd) { + var opts = {skipTitle: true}; + for(var id in rangesAltered) { + if(Axes.getFromId(gd, id).automargin) { + opts = {}; + break; + } + } + return Axes.draw(gd, Object.keys(rangesAltered), opts); + } : + function(gd) { + return Axes.draw(gd, 'redraw'); + }; seq.push( subroutines.doAutoRangeAndConstraints, - doTicks, + drawAxes, subroutines.drawData, subroutines.finalDraw ); @@ -42479,23 +43522,28 @@ var AX_AUTORANGE_RE = /^[xyz]axis[0-9]*\.autorange$/; var AX_DOMAIN_RE = /^[xyz]axis[0-9]*\.domain(\[[0|1]\])?$/; function _relayout(gd, aobj) { - var layout = gd.layout, - fullLayout = gd._fullLayout, - keys = Object.keys(aobj), - axes = Axes.list(gd), - arrayEdits = {}, - arrayStr, - i, - j; + var layout = gd.layout; + var fullLayout = gd._fullLayout; + var guiEditFlag = fullLayout._guiEditing; + var layoutNP = makeNP(fullLayout._preGUI, guiEditFlag); + var keys = Object.keys(aobj); + var axes = Axes.list(gd); + var eventData = Lib.extendDeepAll({}, aobj); + var arrayEdits = {}; + + var arrayStr, i, j; + + cleanDeprecatedAttributeKeys(aobj); + keys = Object.keys(aobj); // look for 'allaxes', split out into all axes // in case of 3D the axis are nested within a scene which is held in _id for(i = 0; i < keys.length; i++) { if(keys[i].indexOf('allaxes') === 0) { for(j = 0; j < axes.length; j++) { - var scene = axes[j]._id.substr(1), - axisAttr = (scene.indexOf('scene') !== -1) ? (scene + '.') : '', - newkey = keys[i].replace('allaxes', axisAttr + axes[j]._name); + var scene = axes[j]._id.substr(1); + var axisAttr = (scene.indexOf('scene') !== -1) ? (scene + '.') : ''; + var newkey = keys[i].replace('allaxes', axisAttr + axes[j]._name); if(!aobj[newkey]) aobj[newkey] = aobj[keys[i]]; } @@ -42509,8 +43557,8 @@ function _relayout(gd, aobj) { // copies of the change (and previous values of anything affected) // for the undo / redo queue - var redoit = {}, - undoit = {}; + var redoit = {}; + var undoit = {}; // for attrs that interact (like scales & autoscales), save the // old vals before making the change @@ -42526,7 +43574,7 @@ function _relayout(gd, aobj) { // via a parent) do not override with this auto-generated extra if(attr in aobj || helpers.hasParent(aobj, attr)) return; - var p = Lib.nestedProperty(layout, attr); + var p = layoutNP(layout, attr); if(!(attr in undoit)) { undoit[attr] = undefinedToNull(p.get()); } @@ -42551,7 +43599,7 @@ function _relayout(gd, aobj) { throw new Error('cannot set ' + ai + 'and a parent attribute simultaneously'); } - var p = Lib.nestedProperty(layout, ai); + var p = layoutNP(layout, ai); var vi = aobj[ai]; var plen = p.parts.length; // p.parts may end with an index integer if the property is an array @@ -42563,8 +43611,8 @@ function _relayout(gd, aobj) { var pleafPlus = p.parts[pend - 1] + '.' + pleaf; // trunk nodes (everything except the leaf) var ptrunk = p.parts.slice(0, pend).join('.'); - var parentIn = Lib.nestedProperty(gd.layout, ptrunk).get(); - var parentFull = Lib.nestedProperty(fullLayout, ptrunk).get(); + var parentIn = nestedProperty(gd.layout, ptrunk).get(); + var parentFull = nestedProperty(fullLayout, ptrunk).get(); var vOld = p.get(); if(vi === undefined) continue; @@ -42587,18 +43635,34 @@ function _relayout(gd, aobj) { // back to its initial value as computed during the first pass in Plots.plotAutoSize. // // To do so, we must manually set them back here using the _initialAutoSize cache. - if(['width', 'height'].indexOf(ai) !== -1 && vi === null) { - fullLayout[ai] = gd._initialAutoSize[ai]; + // can't use impliedEdits for this because behavior depends on vi + if(['width', 'height'].indexOf(ai) !== -1) { + if(vi) { + doextra('autosize', null); + // currently we don't support autosize one dim only - so + // explicitly set the other one. Note that doextra will + // ignore this if the same relayout call also provides oppositeAttr + var oppositeAttr = ai === 'height' ? 'width' : 'height'; + doextra(oppositeAttr, fullLayout[oppositeAttr]); + } + else { + fullLayout[ai] = gd._initialAutoSize[ai]; + } + } + else if(ai === 'autosize') { + // depends on vi here too, so again can't use impliedEdits + doextra('width', vi ? null : fullLayout.width); + doextra('height', vi ? null : fullLayout.height); } // check autorange vs range else if(pleafPlus.match(AX_RANGE_RE)) { recordAlteredAxis(pleafPlus); - Lib.nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); + nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); } else if(pleafPlus.match(AX_AUTORANGE_RE)) { recordAlteredAxis(pleafPlus); - Lib.nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); - var axFull = Lib.nestedProperty(fullLayout, ptrunk).get(); + nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); + var axFull = nestedProperty(fullLayout, ptrunk).get(); if(axFull._inputDomain) { // if we're autoranging and this axis has a constrained domain, // reset it so we don't get locked into a shrunken size @@ -42606,7 +43670,7 @@ function _relayout(gd, aobj) { } } else if(pleafPlus.match(AX_DOMAIN_RE)) { - Lib.nestedProperty(fullLayout, ptrunk + '._inputDomain').set(null); + nestedProperty(fullLayout, ptrunk + '._inputDomain').set(null); } // toggling axis type between log and linear: we need to convert @@ -42615,9 +43679,9 @@ function _relayout(gd, aobj) { // previously we did this for log <-> not-log, but now only do it // for log <-> linear if(pleaf === 'type') { - var ax = parentIn, - toLog = parentFull.type === 'linear' && vi === 'log', - fromLog = parentFull.type === 'log' && vi === 'linear'; + var ax = parentIn; + var toLog = parentFull.type === 'linear' && vi === 'log'; + var fromLog = parentFull.type === 'log' && vi === 'linear'; if(toLog || fromLog) { if(!ax || !ax.range) { @@ -42629,8 +43693,8 @@ function _relayout(gd, aobj) { else if(!parentFull.autorange) { // toggling log without autorange: need to also recalculate ranges // because log axes use linearized values for range endpoints - var r0 = ax.range[0], - r1 = ax.range[1]; + var r0 = ax.range[0]; + var r1 = ax.range[1]; if(toLog) { // if both limits are negative, autorange if(r0 <= 0 && r1 <= 0) { @@ -42675,11 +43739,11 @@ function _relayout(gd, aobj) { doextra(ptrunk + '.autorange', true); doextra(ptrunk + '.range', null); } - Lib.nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); + nestedProperty(fullLayout, ptrunk + '._inputRange').set(null); } else if(pleaf.match(AX_NAME_PATTERN)) { - var fullProp = Lib.nestedProperty(fullLayout, ai).get(), - newType = (vi || {}).type; + var fullProp = nestedProperty(fullLayout, ai).get(); + var newType = (vi || {}).type; // This can potentially cause strange behavior if the autotype is not // numeric (linear, because we don't auto-log) but the previous type @@ -42700,22 +43764,20 @@ function _relayout(gd, aobj) { arrayStr = containerArrayMatch.array; i = containerArrayMatch.index; var propStr = containerArrayMatch.property; - var componentArray = Lib.nestedProperty(layout, arrayStr); - var obji = (componentArray || [])[i] || {}; var updateValObject = valObject || {editType: 'calc'}; - if(propStr === '') { + if(i !== '' && propStr === '') { // special handling of undoit if we're adding or removing an element - // ie 'annotations[2]' which can be {...} (add) or null (remove) + // ie 'annotations[2]' which can be {...} (add) or null, + // does not work when replacing the entire array if(manageArrays.isAddVal(vi)) { undoit[ai] = null; } else if(manageArrays.isRemoveVal(vi)) { - undoit[ai] = obji; + undoit[ai] = (nestedProperty(layout, arrayStr).get() || [])[i]; } else { Lib.warn('unrecognized full object value', aobj); } } - editTypes.update(flags, updateValObject); // prepare the edits object we'll send to applyContainerArrayChanges @@ -42755,7 +43817,7 @@ function _relayout(gd, aobj) { // now we've collected component edits - execute them all together for(arrayStr in arrayEdits) { var finished = manageArrays.applyContainerArrayChanges(gd, - Lib.nestedProperty(layout, arrayStr), arrayEdits[arrayStr], flags); + layoutNP(layout, arrayStr), arrayEdits[arrayStr], flags, layoutNP); if(!finished) flags.plot = true; } @@ -42798,7 +43860,7 @@ function _relayout(gd, aobj) { rangesAltered: rangesAltered, undoit: undoit, redoit: redoit, - eventData: Lib.extendDeep({}, redoit) + eventData: eventData }; } @@ -42833,7 +43895,7 @@ function updateAutosize(gd) { * integer or array of integers for the traces to alter (all if omitted) * */ -exports.update = function update(gd, traceUpdate, layoutUpdate, _traces) { +function update(gd, traceUpdate, layoutUpdate, _traces) { gd = Lib.getGraphDiv(gd); helpers.clearPromiseQueue(gd); @@ -42863,8 +43925,8 @@ exports.update = function update(gd, traceUpdate, layoutUpdate, _traces) { var seq = []; if(restyleFlags.fullReplot && relayoutFlags.layoutReplot) { - var data = gd.data, - layout = gd.layout; + var data = gd.data; + var layout = gd.layout; // clear existing data/layout on gd // so that Plotly.plot doesn't try to extend them @@ -42881,15 +43943,13 @@ exports.update = function update(gd, traceUpdate, layoutUpdate, _traces) { } else { seq.push(Plots.previousPromises); - Plots.supplyDefaults(gd); + axRangeSupplyDefaultsByPass(gd, relayoutFlags, relayoutSpecs) || Plots.supplyDefaults(gd); if(restyleFlags.style) seq.push(subroutines.doTraceStyle); if(restyleFlags.colorbars) seq.push(subroutines.doColorBars); if(relayoutFlags.legend) seq.push(subroutines.doLegend); if(relayoutFlags.layoutstyle) seq.push(subroutines.layoutStyles); - if(relayoutFlags.axrange) { - addAxRangeSequence(seq, relayoutSpecs.rangesAltered); - } + if(relayoutFlags.axrange) addAxRangeSequence(seq, relayoutSpecs.rangesAltered); if(relayoutFlags.ticks) seq.push(subroutines.doTicksRelayout); if(relayoutFlags.modebar) seq.push(subroutines.doModeBar); if(relayoutFlags.camera) seq.push(subroutines.doCamera); @@ -42915,7 +43975,235 @@ exports.update = function update(gd, traceUpdate, layoutUpdate, _traces) { return gd; }); -}; +} +exports.update = update; + +/* + * internal-use-only restyle/relayout/update variants that record the initial + * values in (fullLayout|fullTrace)._preGUI so changes can be persisted across + * Plotly.react data updates, dependent on uirevision attributes + */ +function guiEdit(func) { + return function wrappedEdit(gd) { + gd._fullLayout._guiEditing = true; + var p = func.apply(null, arguments); + gd._fullLayout._guiEditing = false; + return p; + }; +} +exports._guiRestyle = guiEdit(restyle); +exports._guiRelayout = guiEdit(relayout); +exports._guiUpdate = guiEdit(update); + +// For connecting edited layout attributes to uirevision attrs +// If no `attr` we use `match[1] + '.uirevision'` +// Ordered by most common edits first, to minimize our search time +var layoutUIControlPatterns = [ + {pattern: /^hiddenlabels/, attr: 'legend.uirevision'}, + {pattern: /^((x|y)axis\d*)\.((auto)?range|title\.text)/}, + + // showspikes and modes include those nested inside scenes + {pattern: /axis\d*\.showspikes$/, attr: 'modebar.uirevision'}, + {pattern: /(hover|drag)mode$/, attr: 'modebar.uirevision'}, + + {pattern: /^(scene\d*)\.camera/}, + {pattern: /^(geo\d*)\.(projection|center)/}, + {pattern: /^(ternary\d*\.[abc]axis)\.(min|title\.text)$/}, + {pattern: /^(polar\d*\.radialaxis)\.((auto)?range|angle|title\.text)/}, + {pattern: /^(polar\d*\.angularaxis)\.rotation/}, + {pattern: /^(mapbox\d*)\.(center|zoom|bearing|pitch)/}, + + {pattern: /^legend\.(x|y)$/, attr: 'editrevision'}, + {pattern: /^(shapes|annotations)/, attr: 'editrevision'}, + {pattern: /^title\.text$/, attr: 'editrevision'} +]; + +// same for trace attributes: if `attr` is given it's in layout, +// or with no `attr` we use `trace.uirevision` +var traceUIControlPatterns = [ + {pattern: /^selectedpoints$/, attr: 'selectionrevision'}, + // "visible" includes trace.transforms[i].styles[j].value.visible + {pattern: /(^|value\.)visible$/, attr: 'legend.uirevision'}, + {pattern: /^dimensions\[\d+\]\.constraintrange/}, + + // below this you must be in editable: true mode + // TODO: I still put name and title with `trace.uirevision` + // reasonable or should these be `editrevision`? + // Also applies to axis titles up in the layout section + + // "name" also includes transform.styles + {pattern: /(^|value\.)name$/}, + // including nested colorbar attributes (ie marker.colorbar) + {pattern: /colorbar\.title\.text$/}, + {pattern: /colorbar\.(x|y)$/, attr: 'editrevision'} +]; + +function findUIPattern(key, patternSpecs) { + for(var i = 0; i < patternSpecs.length; i++) { + var spec = patternSpecs[i]; + var match = key.match(spec.pattern); + if(match) { + return {head: match[1], attr: spec.attr}; + } + } +} + +// We're finding the new uirevision before supplyDefaults, so do the +// inheritance manually. Note that only `undefined` inherits - other +// falsy values are returned. +function getNewRev(revAttr, container) { + var newRev = nestedProperty(container, revAttr).get(); + if(newRev !== undefined) return newRev; + + var parts = revAttr.split('.'); + parts.pop(); + while(parts.length > 1) { + parts.pop(); + newRev = nestedProperty(container, parts.join('.') + '.uirevision').get(); + if(newRev !== undefined) return newRev; + } + + return container.uirevision; +} + +function getFullTraceIndexFromUid(uid, fullData) { + for(var i = 0; i < fullData.length; i++) { + if(fullData[i]._fullInput.uid === uid) return i; + } + return -1; +} + +function getTraceIndexFromUid(uid, data, tracei) { + for(var i = 0; i < data.length; i++) { + if(data[i].uid === uid) return i; + } + // fall back on trace order, but only if user didn't provide a uid for that trace + return (!data[tracei] || data[tracei].uid) ? -1 : tracei; +} + +function valsMatch(v1, v2) { + var v1IsObj = Lib.isPlainObject(v1); + var v1IsArray = Array.isArray(v1); + if(v1IsObj || v1IsArray) { + return ( + (v1IsObj && Lib.isPlainObject(v2)) || + (v1IsArray && Array.isArray(v2)) + ) && JSON.stringify(v1) === JSON.stringify(v2); + } + return v1 === v2; +} + +function applyUIRevisions(data, layout, oldFullData, oldFullLayout) { + var layoutPreGUI = oldFullLayout._preGUI; + var key, revAttr, oldRev, newRev, match, preGUIVal, newNP, newVal; + var bothInheritAutorange = []; + var newRangeAccepted = {}; + for(key in layoutPreGUI) { + match = findUIPattern(key, layoutUIControlPatterns); + if(match) { + revAttr = match.attr || (match.head + '.uirevision'); + oldRev = nestedProperty(oldFullLayout, revAttr).get(); + newRev = oldRev && getNewRev(revAttr, layout); + if(newRev && (newRev === oldRev)) { + preGUIVal = layoutPreGUI[key]; + if(preGUIVal === null) preGUIVal = undefined; + newNP = nestedProperty(layout, key); + newVal = newNP.get(); + if(valsMatch(newVal, preGUIVal)) { + if(newVal === undefined && key.substr(key.length - 9) === 'autorange') { + bothInheritAutorange.push(key.substr(0, key.length - 10)); + } + newNP.set(undefinedToNull(nestedProperty(oldFullLayout, key).get())); + continue; + } + } + } + else { + Lib.warn('unrecognized GUI edit: ' + key); + } + // if we got this far, the new value was accepted as the new starting + // point (either because it changed or revision changed) + // so remove it from _preGUI for next time. + delete layoutPreGUI[key]; + + if(key.substr(key.length - 8, 6) === 'range[') { + newRangeAccepted[key.substr(0, key.length - 9)] = 1; + } + } + + // Special logic for `autorange`, since it interacts with `range`: + // If the new figure's matching `range` was kept, and `autorange` + // wasn't supplied explicitly in either the original or the new figure, + // we shouldn't alter that - but we may just have done that, so fix it. + for(var i = 0; i < bothInheritAutorange.length; i++) { + var axAttr = bothInheritAutorange[i]; + if(newRangeAccepted[axAttr]) { + var newAx = nestedProperty(layout, axAttr).get(); + if(newAx) delete newAx.autorange; + } + } + + // Now traces - try to match them up by uid (in case we added/deleted in + // the middle), then fall back on index. + var allTracePreGUI = oldFullLayout._tracePreGUI; + for(var uid in allTracePreGUI) { + var tracePreGUI = allTracePreGUI[uid]; + var newTrace = null; + var fullInput; + for(key in tracePreGUI) { + // wait until we know we have preGUI values to look for traces + // but if we don't find both, stop looking at this uid + if(!newTrace) { + var fulli = getFullTraceIndexFromUid(uid, oldFullData); + if(fulli < 0) { + // Somehow we didn't even have this trace in oldFullData... + // I guess this could happen with `deleteTraces` or something + delete allTracePreGUI[uid]; + break; + } + var fullTrace = oldFullData[fulli]; + fullInput = fullTrace._fullInput; + + var newTracei = getTraceIndexFromUid(uid, data, fullInput.index); + if(newTracei < 0) { + // No match in new data + delete allTracePreGUI[uid]; + break; + } + newTrace = data[newTracei]; + } + + match = findUIPattern(key, traceUIControlPatterns); + if(match) { + if(match.attr) { + oldRev = nestedProperty(oldFullLayout, match.attr).get(); + newRev = oldRev && getNewRev(match.attr, layout); + } + else { + oldRev = fullInput.uirevision; + // inheritance for trace.uirevision is simple, just layout.uirevision + newRev = newTrace.uirevision; + if(newRev === undefined) newRev = layout.uirevision; + } + + if(newRev && newRev === oldRev) { + preGUIVal = tracePreGUI[key]; + if(preGUIVal === null) preGUIVal = undefined; + newNP = nestedProperty(newTrace, key); + newVal = newNP.get(); + if(valsMatch(newVal, preGUIVal)) { + newNP.set(undefinedToNull(nestedProperty(fullInput, key).get())); + continue; + } + } + } + else { + Lib.warn('unrecognized GUI edit: ' + key + ' in trace uid ' + uid); + } + delete tracePreGUI[key]; + } + } +} /** * Plotly.react: @@ -42979,6 +44267,8 @@ exports.react = function(gd, data, layout, config) { gd.layout = layout || {}; helpers.cleanLayout(gd.layout); + applyUIRevisions(gd.data, gd.layout, oldFullData, oldFullLayout); + // "true" skips updating calcdata and remapping arrays from calcTransforms, // which supplyDefaults usually does at the end, but we may need to NOT do // if the diff (which we haven't determined yet) says we'll recalc @@ -42987,9 +44277,11 @@ exports.react = function(gd, data, layout, config) { var newFullData = gd._fullData; var newFullLayout = gd._fullLayout; var immutable = newFullLayout.datarevision === undefined; + var transition = newFullLayout.transition; - var restyleFlags = diffData(gd, oldFullData, newFullData, immutable); - var relayoutFlags = diffLayout(gd, oldFullLayout, newFullLayout, immutable); + var relayoutFlags = diffLayout(gd, oldFullLayout, newFullLayout, immutable, transition); + var newDataRevision = relayoutFlags.newDataRevision; + var restyleFlags = diffData(gd, oldFullData, newFullData, immutable, transition, newDataRevision); // TODO: how to translate this part of relayout to Plotly.react? // // Setting width or height to null must reset the graph's width / height @@ -43019,7 +44311,19 @@ exports.react = function(gd, data, layout, config) { seq.push(addFrames); } - if(restyleFlags.fullReplot || relayoutFlags.layoutReplot || configChanged) { + // Transition pathway, + // only used when 'transition' is set by user and + // when at least one animatable attribute has changed, + // N.B. config changed aren't animatable + if(newFullLayout.transition && !configChanged && (restyleFlags.anim || relayoutFlags.anim)) { + Plots.doCalcdata(gd); + subroutines.doAutoRangeAndConstraints(gd); + + seq.push(function() { + return Plots.transitionFromReact(gd, restyleFlags, relayoutFlags, oldFullLayout); + }); + } + else if(restyleFlags.fullReplot || relayoutFlags.layoutReplot || configChanged) { gd._fullLayout._skipDefaults = true; seq.push(exports.plot); } @@ -43072,8 +44376,10 @@ exports.react = function(gd, data, layout, config) { }; -function diffData(gd, oldFullData, newFullData, immutable) { - if(oldFullData.length !== newFullData.length) { +function diffData(gd, oldFullData, newFullData, immutable, transition, newDataRevision) { + var sameTraceLength = oldFullData.length === newFullData.length; + + if(!transition && !sameTraceLength) { return { fullReplot: true, calc: true @@ -43082,6 +44388,9 @@ function diffData(gd, oldFullData, newFullData, immutable) { var flags = editTypes.traceFlags(); flags.arrays = {}; + flags.nChanges = 0; + flags.nChangesAnim = 0; + var i, trace; function getTraceValObject(parts) { @@ -43092,31 +44401,41 @@ function diffData(gd, oldFullData, newFullData, immutable) { getValObject: getTraceValObject, flags: flags, immutable: immutable, + transition: transition, + newDataRevision: newDataRevision, gd: gd }; - var seenUIDs = {}; for(i = 0; i < oldFullData.length; i++) { - trace = newFullData[i]._fullInput; - if(Plots.hasMakesDataTransform(trace)) trace = newFullData[i]; - if(seenUIDs[trace.uid]) continue; - seenUIDs[trace.uid] = 1; + if(newFullData[i]) { + trace = newFullData[i]._fullInput; + if(Plots.hasMakesDataTransform(trace)) trace = newFullData[i]; + if(seenUIDs[trace.uid]) continue; + seenUIDs[trace.uid] = 1; - getDiffFlags(oldFullData[i]._fullInput, trace, [], diffOpts); + getDiffFlags(oldFullData[i]._fullInput, trace, [], diffOpts); + } } if(flags.calc || flags.plot) { flags.fullReplot = true; } + if(transition && flags.nChanges && flags.nChangesAnim) { + flags.anim = (flags.nChanges === flags.nChangesAnim) && sameTraceLength ? 'all' : 'some'; + } + return flags; } -function diffLayout(gd, oldFullLayout, newFullLayout, immutable) { +function diffLayout(gd, oldFullLayout, newFullLayout, immutable, transition) { var flags = editTypes.layoutFlags(); flags.arrays = {}; + flags.rangesAltered = {}; + flags.nChanges = 0; + flags.nChangesAnim = 0; function getLayoutValObject(parts) { return PlotSchema.getLayoutValObject(newFullLayout, parts); @@ -43126,6 +44445,7 @@ function diffLayout(gd, oldFullLayout, newFullLayout, immutable) { getValObject: getLayoutValObject, flags: flags, immutable: immutable, + transition: transition, gd: gd }; @@ -43135,11 +44455,15 @@ function diffLayout(gd, oldFullLayout, newFullLayout, immutable) { flags.layoutReplot = true; } + if(transition && flags.nChanges && flags.nChangesAnim) { + flags.anim = flags.nChanges === flags.nChangesAnim ? 'all' : 'some'; + } + return flags; } function getDiffFlags(oldContainer, newContainer, outerparts, opts) { - var valObject, key; + var valObject, key, astr; var getValObject = opts.getValObject; var flags = opts.flags; @@ -43154,6 +44478,30 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) { return; } editTypes.update(flags, valObject); + + if(editType !== 'none') { + flags.nChanges++; + } + + // track animatable changes + if(opts.transition && valObject.anim) { + flags.nChangesAnim++; + } + + // track cartesian axes with altered ranges + if(AX_RANGE_RE.test(astr) || AX_AUTORANGE_RE.test(astr)) { + flags.rangesAltered[outerparts[0]] = 1; + } + + // clear _inputDomain on cartesian axes with altered domains + if(AX_DOMAIN_RE.test(astr)) { + nestedProperty(newContainer, '_inputDomain').set(null); + } + + // track datarevision changes + if(key === 'datarevision') { + flags.newDataRevision = 1; + } } function valObjectCanBeDataArray(valObject) { @@ -43162,10 +44510,12 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) { for(key in oldContainer) { // short-circuit based on previous calls or previous keys that already maximized the pathway - if(flags.calc) return; + if(flags.calc && !opts.transition) return; var oldVal = oldContainer[key]; var newVal = newContainer[key]; + var parts = outerparts.concat(key); + astr = parts.join('.'); if(key.charAt(0) === '_' || typeof oldVal === 'function' || oldVal === newVal) continue; @@ -43181,7 +44531,6 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) { if(key === 'range' && newContainer.autorange) continue; if((key === 'zmin' || key === 'zmax') && newContainer.type === 'contourcarpet') continue; - var parts = outerparts.concat(key); valObject = getValObject(parts); // in case type changed, we may not even *have* a valObject. @@ -43252,6 +44601,11 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) { if(immutable) { flags.calc = true; } + + // look for animatable attributes when the data changed + if(immutable || opts.newDataRevision) { + changed(); + } } else if(wasArray !== nowArray) { flags.calc = true; @@ -43292,6 +44646,7 @@ function diffConfig(oldConfig, newConfig) { var key; for(key in oldConfig) { + if(key.charAt(0) === '_') continue; var oldVal = oldConfig[key]; var newVal = newConfig[key]; if(oldVal !== newVal) { @@ -43825,10 +45180,10 @@ exports.addFrames = function(gd, frameList, indices) { } } - var undoFunc = Plots.modifyFrames, - redoFunc = Plots.modifyFrames, - undoArgs = [gd, revops], - redoArgs = [gd, ops]; + var undoFunc = Plots.modifyFrames; + var redoFunc = Plots.modifyFrames; + var undoArgs = [gd, revops]; + var redoArgs = [gd, ops]; if(Queue) Queue.add(gd, undoFunc, undoArgs, redoFunc, redoArgs); @@ -43872,10 +45227,10 @@ exports.deleteFrames = function(gd, frameList) { revops.unshift({type: 'insert', index: idx, value: _frames[idx]}); } - var undoFunc = Plots.modifyFrames, - redoFunc = Plots.modifyFrames, - undoArgs = [gd, revops], - redoArgs = [gd, ops]; + var undoFunc = Plots.modifyFrames; + var redoFunc = Plots.modifyFrames; + var undoArgs = [gd, revops]; + var redoArgs = [gd, ops]; if(Queue) Queue.add(gd, undoFunc, undoArgs, redoFunc, redoArgs); @@ -43893,10 +45248,9 @@ exports.purge = function purge(gd) { var fullLayout = gd._fullLayout || {}; var fullData = gd._fullData || []; - var calcdata = gd.calcdata || []; // remove gl contexts - Plots.cleanPlot([], {}, fullData, fullLayout, calcdata); + Plots.cleanPlot([], {}, fullData, fullLayout); // purge properties Plots.purge(gd); @@ -44033,9 +45387,9 @@ function makePlotFramework(gd) { gd.emit('plotly_framework'); } -},{"../components/color":50,"../components/colorbar/connect":52,"../components/drawing":75,"../constants/xmlns_namespaces":152,"../lib":169,"../lib/events":162,"../lib/queue":184,"../lib/svg_text_utils":191,"../plots/cartesian/axes":214,"../plots/cartesian/constants":219,"../plots/cartesian/graph_interact":223,"../plots/plots":246,"../plots/polar/legacy":249,"../registry":259,"./edit_types":197,"./helpers":198,"./manage_arrays":200,"./plot_config":202,"./plot_schema":203,"./subroutines":205,"d3":16,"fast-isnumeric":18,"has-hover":20}],202:[function(_dereq_,module,exports){ +},{"../components/color":51,"../components/colorbar/connect":53,"../components/drawing":72,"../constants/xmlns_namespaces":150,"../lib":168,"../lib/events":161,"../lib/queue":182,"../lib/svg_text_utils":189,"../plots/cartesian/axes":212,"../plots/cartesian/constants":218,"../plots/cartesian/graph_interact":222,"../plots/plots":245,"../plots/polar/legacy":248,"../registry":257,"./edit_types":195,"./helpers":196,"./manage_arrays":198,"./plot_config":200,"./plot_schema":201,"./subroutines":203,"d3":16,"fast-isnumeric":18,"has-hover":20}],200:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -44050,191 +45404,286 @@ function makePlotFramework(gd) { * * The defaults are the appropriate settings for plotly.js, * so we get the right experience without any config argument. + * + * N.B. the config options are not coerced using Lib.coerce so keys + * like `valType` and `values` are only set for documentation purposes + * at the moment. */ -module.exports = { - - // no interactivity, for export or image generation - staticPlot: false, - - // base URL for the 'Edit in Chart Studio' (aka sendDataToCloud) mode bar button - // and the showLink/sendData on-graph link - plotlyServerURL: 'https://plot.ly', - - /* - * we can edit titles, move annotations, etc - sets all pieces of `edits` - * unless a separate `edits` config item overrides individual parts - */ - editable: false, - edits: { - /* - * annotationPosition: the main anchor of the annotation, which is the - * text (if no arrow) or the arrow (which drags the whole thing leaving - * the arrow length & direction unchanged) - */ - annotationPosition: false, - // just for annotations with arrows, change the length and direction of the arrow - annotationTail: false, - annotationText: false, - axisTitleText: false, - colorbarPosition: false, - colorbarTitleText: false, - legendPosition: false, - // edit the trace name fields from the legend - legendText: false, - shapePosition: false, - // the global `layout.title` - titleText: false +var configAttributes = { + staticPlot: { + valType: 'boolean', + dflt: false, + }, - /* - * DO autosize once regardless of layout.autosize - * (use default width or height values otherwise) - */ - autosizable: false, + plotlyServerURL: { + valType: 'string', + dflt: 'https://plot.ly', + + }, - // responsive: determines whether to change the layout size when window is resized - responsive: false, + editable: { + valType: 'boolean', + dflt: false, + + }, + edits: { + annotationPosition: { + valType: 'boolean', + dflt: false, + + }, + annotationTail: { + valType: 'boolean', + dflt: false, + + }, + annotationText: { + valType: 'boolean', + dflt: false, + + }, + axisTitleText: { + valType: 'boolean', + dflt: false, + + }, + colorbarPosition: { + valType: 'boolean', + dflt: false, + + }, + colorbarTitleText: { + valType: 'boolean', + dflt: false, + + }, + legendPosition: { + valType: 'boolean', + dflt: false, + + }, + legendText: { + valType: 'boolean', + dflt: false, + + }, + shapePosition: { + valType: 'boolean', + dflt: false, + + }, + titleText: { + valType: 'boolean', + dflt: false, + + } + }, - // set the length of the undo/redo queue - queueLength: 0, + autosizable: { + valType: 'boolean', + dflt: false, + + }, + responsive: { + valType: 'boolean', + dflt: false, + + }, + fillFrame: { + valType: 'boolean', + dflt: false, + + }, + frameMargins: { + valType: 'number', + dflt: 0, + min: 0, + max: 0.5, + + }, - // if we DO autosize, do we fill the container or the screen? - fillFrame: false, + scrollZoom: { + valType: 'flaglist', + flags: ['cartesian', 'gl3d', 'geo', 'mapbox'], + extras: [true, false], + dflt: 'gl3d+geo+mapbox', + + }, + doubleClick: { + valType: 'enumerated', + values: [false, 'reset', 'autosize', 'reset+autosize'], + dflt: 'reset+autosize', + + }, - // if we DO autosize, set the frame margins in percents of plot size - frameMargins: 0, + showAxisDragHandles: { + valType: 'boolean', + dflt: true, + + }, + showAxisRangeEntryBoxes: { + valType: 'boolean', + dflt: true, + + }, - // mousewheel or two-finger scroll zooms the plot - scrollZoom: false, + showTips: { + valType: 'boolean', + dflt: true, + + }, - // double click interaction (false, 'reset', 'autosize' or 'reset+autosize') - doubleClick: 'reset+autosize', + showLink: { + valType: 'boolean', + dflt: false, + + }, + linkText: { + valType: 'string', + dflt: 'Edit chart', + noBlank: true, + + }, + sendData: { + valType: 'boolean', + dflt: true, + + }, + showSources: { + valType: 'any', + dflt: false, + + }, - // new users see some hints about interactivity - showTips: true, + displayModeBar: { + valType: 'enumerated', + values: ['hover', true, false], + dflt: 'hover', + + }, + showSendToCloud: { + valType: 'boolean', + dflt: false, + + }, + modeBarButtonsToRemove: { + valType: 'any', + dflt: [], + + }, + modeBarButtonsToAdd: { + valType: 'any', + dflt: [], + + }, + modeBarButtons: { + valType: 'any', + dflt: false, + + }, + toImageButtonOptions: { + valType: 'any', + dflt: {}, + + }, + displaylogo: { + valType: 'boolean', + dflt: true, + + }, + watermark: { + valType: 'boolean', + dflt: false, + + }, - // enable axis pan/zoom drag handles - showAxisDragHandles: true, + plotGlPixelRatio: { + valType: 'number', + dflt: 2, + min: 1, + max: 4, + + }, - /* - * enable direct range entry at the pan/zoom drag points - * (drag handles must be enabled above) - */ - showAxisRangeEntryBoxes: true, + setBackground: { + valType: 'any', + dflt: 'transparent', + + }, - // link to open this plot in plotly - showLink: false, + topojsonURL: { + valType: 'string', + noBlank: true, + dflt: 'https://cdn.plot.ly/', + + }, - // if we show a link, does it contain data or just link to a plotly file? - sendData: true, + mapboxAccessToken: { + valType: 'string', + dflt: null, + + }, - // text appearing in the sendData link - linkText: 'Edit chart', + logging: { + valType: 'boolean', + dflt: 1, + + }, - // false or function adding source(s) to linkText - showSources: false, + queueLength: { + valType: 'integer', + min: 0, + dflt: 0, + + }, - // display the mode bar (true, false, or 'hover') - displayModeBar: 'hover', + globalTransforms: { + valType: 'any', + dflt: [], + + }, - /* - * remove mode bar button by name - * (see ../components/modebar/buttons.js for the list of names) - */ - modeBarButtonsToRemove: [], + locale: { + valType: 'string', + dflt: 'en-US', + + }, - /* - * add mode bar button using config objects - * (see ./components/modebar/buttons.js for list of arguments) - */ - modeBarButtonsToAdd: [], - - /* - * fully custom mode bar buttons as nested array, - * where the outer arrays represents button groups, and - * the inner arrays have buttons config objects or names of default buttons - * (see ../components/modebar/buttons.js for more info) - */ - modeBarButtons: false, - - // statically override options for toImage modebar button - // allowed keys are format, filename, width, height, scale - // see ../components/modebar/buttons.js - toImageButtonOptions: {}, - - // add the plotly logo on the end of the mode bar - displaylogo: true, - - // increase the pixel ratio for Gl plot images - plotGlPixelRatio: 2, - - /* - * background setting function - * 'transparent' sets the background `layout.paper_color` - * 'opaque' blends bg color with white ensuring an opaque background - * or any other custom function of gd - */ - setBackground: 'transparent', - - // URL to topojson files used in geo charts - topojsonURL: 'https://cdn.plot.ly/', - - /* - * Mapbox access token (required to plot mapbox trace types) - * If using an Mapbox Atlas server, set this option to '', - * so that plotly.js won't attempt to authenticate to the public Mapbox server. - */ - mapboxAccessToken: null, - - /* - * Turn all console logging on or off (errors will be thrown) - * This should ONLY be set via Plotly.setPlotConfig - * 0: no logs - * 1: warnings and errors, but not informational messages - * 2: verbose logs - */ - logging: 1, - - /* - * Set global transform to be applied to all traces with no - * specification needed - */ - globalTransforms: [], - - /* - * Which localization should we use? - * Should be a string like 'en' or 'en-US'. - */ - locale: 'en-US', - - /* - * Localization definitions - * Locales can be provided either here (specific to one chart) or globally - * by registering them as modules. - * Should be an object of objects {locale: {dictionary: {...}, format: {...}}} - * { - * da: { - * dictionary: {'Reset axes': 'Nulstil aksler', ...}, - * format: {months: [...], shortMonths: [...]} - * }, - * ... - * } - * All parts are optional. When looking for translation or format fields, we - * look first for an exact match in a config locale, then in a registered - * module. If those fail, we strip off any regionalization ('en-US' -> 'en') - * and try each (config, registry) again. The final fallback for translation - * is untranslated (which is US English) and for formats is the base English - * (the only consequence being the last fallback date format %x is DD/MM/YYYY - * instead of MM/DD/YYYY). Currently `grouping` and `currency` are ignored - * for our automatic number formatting, but can be used in custom formats. - */ - locales: {} + locales: { + valType: 'any', + dflt: {}, + + } }; -},{}],203:[function(_dereq_,module,exports){ +var dfltConfig = {}; + +function crawl(src, target) { + for(var k in src) { + var obj = src[k]; + if(obj.valType) { + target[k] = obj.dflt; + } else { + if(!target[k]) { + target[k] = {}; + } + crawl(obj, target[k]); + } + } +} + +crawl(configAttributes, dfltConfig); + +module.exports = { + configAttributes: configAttributes, + dfltConfig: dfltConfig +}; + +},{}],201:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -44251,6 +45700,7 @@ var baseAttributes = _dereq_('../plots/attributes'); var baseLayoutAttributes = _dereq_('../plots/layout_attributes'); var frameAttributes = _dereq_('../plots/frame_attributes'); var animationAttributes = _dereq_('../plots/animation_attributes'); +var configAttributes = _dereq_('./plot_config').configAttributes; // polar attributes are not part of the Registry yet var polarAreaAttrs = _dereq_('../plots/polar/legacy/area_attributes'); @@ -44282,7 +45732,7 @@ exports.UNDERSCORE_ATTRS = UNDERSCORE_ATTRS; * - transforms * - frames * - animations - * - config (coming soon ...) + * - config */ exports.get = function() { var traces = {}; @@ -44316,7 +45766,9 @@ exports.get = function() { transforms: transforms, frames: getFramesAttributes(), - animation: formatAttributes(animationAttributes) + animation: formatAttributes(animationAttributes), + + config: formatAttributes(configAttributes) }; }; @@ -44332,6 +45784,7 @@ exports.get = function() { * @param {String} attrName name string * @param {object[]} attrs all the attributes * @param {Number} level the recursion level, 0 at the root + * @param {String} fullAttrString full attribute name (ie 'marker.line') * @param {Number} [specifiedLevel] * The level in the tree, in order to let the callback function detect descend or backtrack, * typically unsupplied (implied 0), just used by the self-recursive call. @@ -44680,11 +46133,22 @@ function getTraceAttributes(type) { // make 'type' the first attribute in the object attributes.type = null; + + var copyBaseAttributes = extendDeepAll({}, baseAttributes); + var copyModuleAttributes = extendDeepAll({}, _module.attributes); + + // prune global-level trace attributes that are already defined in a trace + exports.crawl(copyModuleAttributes, function(attr, attrName, attrs, level, fullAttrString) { + Lib.nestedProperty(copyBaseAttributes, fullAttrString).set(undefined); + // Prune undefined attributes + if(attr === undefined) Lib.nestedProperty(copyModuleAttributes, fullAttrString).set(undefined); + }); + // base attributes (same for all trace types) - extendDeepAll(attributes, baseAttributes); + extendDeepAll(attributes, copyBaseAttributes); // module attributes - extendDeepAll(attributes, _module.attributes); + extendDeepAll(attributes, copyModuleAttributes); // subplot attributes if(basePlotModule.attributes) { @@ -44893,8 +46357,8 @@ function assignPolarLayoutAttrs(layoutAttributes) { } function handleBasePlotModule(layoutAttributes, _module, astr) { - var np = Lib.nestedProperty(layoutAttributes, astr), - attrs = extendDeepAll({}, _module.layoutAttributes); + var np = Lib.nestedProperty(layoutAttributes, astr); + var attrs = extendDeepAll({}, _module.layoutAttributes); attrs[IS_SUBPLOT_OBJ] = true; np.set(attrs); @@ -44906,9 +46370,9 @@ function insertAttrs(baseAttrs, newAttrs, astr) { np.set(extendDeepAll(np.get() || {}, newAttrs)); } -},{"../lib":169,"../plots/animation_attributes":209,"../plots/attributes":211,"../plots/frame_attributes":241,"../plots/layout_attributes":244,"../plots/polar/legacy/area_attributes":247,"../plots/polar/legacy/axis_attributes":248,"../registry":259,"./edit_types":197}],204:[function(_dereq_,module,exports){ +},{"../lib":168,"../plots/animation_attributes":207,"../plots/attributes":209,"../plots/frame_attributes":240,"../plots/layout_attributes":243,"../plots/polar/legacy/area_attributes":246,"../plots/polar/legacy/axis_attributes":247,"../registry":257,"./edit_types":195,"./plot_config":200}],202:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -45220,9 +46684,9 @@ exports.arrayEditor = function(parentIn, containerStr, itemOut) { }; }; -},{"../lib":169,"../plots/attributes":211}],205:[function(_dereq_,module,exports){ +},{"../lib":168,"../plots/attributes":209}],203:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -45250,14 +46714,18 @@ var enforceAxisConstraints = axisConstraints.enforce; var cleanAxisConstraints = axisConstraints.clean; var doAutoRange = _dereq_('../plots/cartesian/autorange').doAutoRange; +var SVG_TEXT_ANCHOR_START = 'start'; +var SVG_TEXT_ANCHOR_MIDDLE = 'middle'; +var SVG_TEXT_ANCHOR_END = 'end'; + exports.layoutStyles = function(gd) { return Lib.syncOrAsync([Plots.doAutoMargin, lsInner], gd); }; function overlappingDomain(xDomain, yDomain, domains) { for(var i = 0; i < domains.length; i++) { - var existingX = domains[i][0], - existingY = domains[i][1]; + var existingX = domains[i][0]; + var existingY = domains[i][1]; if(existingX[0] >= xDomain[1] || existingX[1] <= xDomain[0]) { continue; @@ -45274,12 +46742,25 @@ function lsInner(gd) { var gs = fullLayout._size; var pad = gs.p; var axList = Axes.list(gd, '', true); + var i, subplot, plotinfo, ax, xa, ya; + + fullLayout._paperdiv.style({ + width: (gd._context.responsive && fullLayout.autosize && !gd._context._hasZeroWidth && !gd.layout.width) ? '100%' : fullLayout.width + 'px', + height: (gd._context.responsive && fullLayout.autosize && !gd._context._hasZeroHeight && !gd.layout.height) ? '100%' : fullLayout.height + 'px' + }) + .selectAll('.main-svg') + .call(Drawing.setSize, fullLayout.width, fullLayout.height); + gd._context.setBackground(gd, fullLayout.paper_bgcolor); + + exports.drawMainTitle(gd); + ModeBar.manage(gd); // _has('cartesian') means SVG specifically, not GL2D - but GL2D // can still get here because it makes some of the SVG structure // for shared features like selections. - var hasSVGCartesian = fullLayout._has('cartesian'); - var i; + if(!fullLayout._has('cartesian')) { + return gd._promises.length && Promise.all(gd._promises); + } function getLinePosition(ax, counterAx, side) { var lwHalf = ax._lw / 2; @@ -45297,10 +46778,7 @@ function lsInner(gd) { // some preparation of axis position info for(i = 0; i < axList.length; i++) { - var ax = axList[i]; - - // reset scale in case the margins have changed - ax.setScale(); + ax = axList[i]; var counterAx = ax._anchorAxis; @@ -45319,32 +46797,24 @@ function lsInner(gd) { ax._mainMirrorPosition = (ax.mirror && counterAx) ? getLinePosition(ax, counterAx, alignmentConstants.OPPOSITE_SIDE[ax.side]) : null; - - // Figure out which subplot to draw ticks, labels, & axis lines on - // do this as a separate loop so we already have all the - // _mainAxis and _anchorAxis links set - ax._mainSubplot = findMainSubplot(ax, fullLayout); } - fullLayout._paperdiv - .style({ - width: fullLayout.width + 'px', - height: fullLayout.height + 'px' - }) - .selectAll('.main-svg') - .call(Drawing.setSize, fullLayout.width, fullLayout.height); - - gd._context.setBackground(gd, fullLayout.paper_bgcolor); - - var subplotSelection = fullLayout._paper.selectAll('g.subplot'); - - // figure out which backgrounds we need to draw, and in which layers - // to put them + // figure out which backgrounds we need to draw, + // and in which layers to put them var lowerBackgroundIDs = []; + var backgroundIds = []; var lowerDomains = []; - subplotSelection.each(function(d) { - var subplot = d[0]; - var plotinfo = fullLayout._plots[subplot]; + // no need to draw background when paper and plot color are the same color, + // activate mode just for large splom (which benefit the most from this + // optimization), but this could apply to all cartesian subplots. + var noNeedForBg = ( + Color.opacity(fullLayout.paper_bgcolor) === 1 && + Color.opacity(fullLayout.plot_bgcolor) === 1 && + fullLayout.paper_bgcolor === fullLayout.plot_bgcolor + ); + + for(subplot in fullLayout._plots) { + plotinfo = fullLayout._plots[subplot]; if(plotinfo.mainplot) { // mainplot is a reference to the main plot this one is overlaid on @@ -45354,23 +46824,26 @@ function lsInner(gd) { plotinfo.bg.remove(); } plotinfo.bg = undefined; - return; - } - - var xDomain = plotinfo.xaxis.domain; - var yDomain = plotinfo.yaxis.domain; - var plotgroup = plotinfo.plotgroup; - - if(overlappingDomain(xDomain, yDomain, lowerDomains)) { - var pgNode = plotgroup.node(); - var plotgroupBg = plotinfo.bg = Lib.ensureSingle(plotgroup, 'rect', 'bg'); - pgNode.insertBefore(plotgroupBg.node(), pgNode.childNodes[0]); } else { - plotgroup.select('rect.bg').remove(); - lowerBackgroundIDs.push(subplot); - lowerDomains.push([xDomain, yDomain]); + var xDomain = plotinfo.xaxis.domain; + var yDomain = plotinfo.yaxis.domain; + var plotgroup = plotinfo.plotgroup; + + if(overlappingDomain(xDomain, yDomain, lowerDomains)) { + var pgNode = plotgroup.node(); + var plotgroupBg = plotinfo.bg = Lib.ensureSingle(plotgroup, 'rect', 'bg'); + pgNode.insertBefore(plotgroupBg.node(), pgNode.childNodes[0]); + backgroundIds.push(subplot); + } else { + plotgroup.select('rect.bg').remove(); + lowerDomains.push([xDomain, yDomain]); + if(!noNeedForBg) { + lowerBackgroundIDs.push(subplot); + backgroundIds.push(subplot); + } + } } - }); + } // now create all the lower-layer backgrounds at once now that // we have the list of subplots that need them @@ -45386,13 +46859,13 @@ function lsInner(gd) { fullLayout._plots[subplot].bg = d3.select(this); }); - subplotSelection.each(function(d) { - var subplot = d[0]; - var plotinfo = fullLayout._plots[subplot]; - var xa = plotinfo.xaxis; - var ya = plotinfo.yaxis; + // style all backgrounds + for(i = 0; i < backgroundIds.length; i++) { + plotinfo = fullLayout._plots[backgroundIds[i]]; + xa = plotinfo.xaxis; + ya = plotinfo.yaxis; - if(plotinfo.bg && hasSVGCartesian) { + if(plotinfo.bg) { plotinfo.bg .call(Drawing.setRect, xa._offset - pad, ya._offset - pad, @@ -45400,72 +46873,83 @@ function lsInner(gd) { .call(Color.fill, fullLayout.plot_bgcolor) .style('stroke-width', 0); } + } - // Clip so that data only shows up on the plot area. - var clipId = plotinfo.clipId = 'clip' + fullLayout._uid + subplot + 'plot'; + if(!fullLayout._hasOnlyLargeSploms) { + for(subplot in fullLayout._plots) { + plotinfo = fullLayout._plots[subplot]; + xa = plotinfo.xaxis; + ya = plotinfo.yaxis; - var plotClip = Lib.ensureSingleById(fullLayout._clips, 'clipPath', clipId, function(s) { - s.classed('plotclip', true) - .append('rect'); - }); + // Clip so that data only shows up on the plot area. + var clipId = plotinfo.clipId = 'clip' + fullLayout._uid + subplot + 'plot'; - plotinfo.clipRect = plotClip.select('rect').attr({ - width: xa._length, - height: ya._length - }); + var plotClip = Lib.ensureSingleById(fullLayout._clips, 'clipPath', clipId, function(s) { + s.classed('plotclip', true) + .append('rect'); + }); - Drawing.setTranslate(plotinfo.plot, xa._offset, ya._offset); + plotinfo.clipRect = plotClip.select('rect').attr({ + width: xa._length, + height: ya._length + }); - var plotClipId; - var layerClipId; + Drawing.setTranslate(plotinfo.plot, xa._offset, ya._offset); - if(plotinfo._hasClipOnAxisFalse) { - plotClipId = null; - layerClipId = clipId; - } else { - plotClipId = clipId; - layerClipId = null; + var plotClipId; + var layerClipId; + + if(plotinfo._hasClipOnAxisFalse) { + plotClipId = null; + layerClipId = clipId; + } else { + plotClipId = clipId; + layerClipId = null; + } + + Drawing.setClipUrl(plotinfo.plot, plotClipId, gd); + + // stash layer clipId value (null or same as clipId) + // to DRY up Drawing.setClipUrl calls on trace-module and trace layers + // downstream + plotinfo.layerClipId = layerClipId; } + } - Drawing.setClipUrl(plotinfo.plot, plotClipId); + var xLinesXLeft, xLinesXRight, xLinesYBottom, xLinesYTop, + leftYLineWidth, rightYLineWidth; + var yLinesYBottom, yLinesYTop, yLinesXLeft, yLinesXRight, + connectYBottom, connectYTop; + var extraSubplot; - // stash layer clipId value (null or same as clipId) - // to DRY up Drawing.setClipUrl calls on trace-module and trace layers - // downstream - plotinfo.layerClipId = layerClipId; + function xLinePath(y) { + return 'M' + xLinesXLeft + ',' + y + 'H' + xLinesXRight; + } - // figure out extra axis line and tick positions as needed - if(!hasSVGCartesian) return; + function xLinePathFree(y) { + return 'M' + xa._offset + ',' + y + 'h' + xa._length; + } - var xLinesXLeft, xLinesXRight, xLinesYBottom, xLinesYTop, - leftYLineWidth, rightYLineWidth; - var yLinesYBottom, yLinesYTop, yLinesXLeft, yLinesXRight, - connectYBottom, connectYTop; - var extraSubplot; + function yLinePath(x) { + return 'M' + x + ',' + yLinesYTop + 'V' + yLinesYBottom; + } - function xLinePath(y) { - return 'M' + xLinesXLeft + ',' + y + 'H' + xLinesXRight; - } + function yLinePathFree(x) { + return 'M' + x + ',' + ya._offset + 'v' + ya._length; + } - function xLinePathFree(y) { - return 'M' + xa._offset + ',' + y + 'h' + xa._length; - } + function mainPath(ax, pathFn, pathFnFree) { + if(!ax.showline || subplot !== ax._mainSubplot) return ''; + if(!ax._anchorAxis) return pathFnFree(ax._mainLinePosition); + var out = pathFn(ax._mainLinePosition); + if(ax.mirror) out += pathFn(ax._mainMirrorPosition); + return out; + } - function yLinePath(x) { - return 'M' + x + ',' + yLinesYTop + 'V' + yLinesYBottom; - } - - function yLinePathFree(x) { - return 'M' + x + ',' + ya._offset + 'v' + ya._length; - } - - function mainPath(ax, pathFn, pathFnFree) { - if(!ax.showline || subplot !== ax._mainSubplot) return ''; - if(!ax._anchorAxis) return pathFnFree(ax._mainLinePosition); - var out = pathFn(ax._mainLinePosition); - if(ax.mirror) out += pathFn(ax._mainMirrorPosition); - return out; - } + for(subplot in fullLayout._plots) { + plotinfo = fullLayout._plots[subplot]; + xa = plotinfo.xaxis; + ya = plotinfo.yaxis; /* * x lines get longer where they meet y lines, to make a crisp corner. @@ -45546,57 +47030,13 @@ function lsInner(gd) { ya.linecolor : 'rgba(0,0,0,0)'); } plotinfo.ylines.attr('d', yPath); - }); + } Axes.makeClipPaths(gd); - exports.drawMainTitle(gd); - ModeBar.manage(gd); return gd._promises.length && Promise.all(gd._promises); } -function findMainSubplot(ax, fullLayout) { - var subplotList = fullLayout._subplots; - var ids = subplotList.cartesian.concat(subplotList.gl2d || []); - var mockGd = {_fullLayout: fullLayout}; - - var isX = ax._id.charAt(0) === 'x'; - var anchorAx = ax._mainAxis._anchorAxis; - var mainSubplotID = ''; - var nextBestMainSubplotID = ''; - var anchorID = ''; - - // First try the main ID with the anchor - if(anchorAx) { - anchorID = anchorAx._mainAxis._id; - mainSubplotID = isX ? (ax._id + anchorID) : (anchorID + ax._id); - } - - // Then look for a subplot with the counteraxis overlaying the anchor - // If that fails just use the first subplot including this axis - if(!mainSubplotID || !fullLayout._plots[mainSubplotID]) { - mainSubplotID = ''; - - for(var j = 0; j < ids.length; j++) { - var id = ids[j]; - var yIndex = id.indexOf('y'); - var idPart = isX ? id.substr(0, yIndex) : id.substr(yIndex); - var counterPart = isX ? id.substr(yIndex) : id.substr(0, yIndex); - - if(idPart === ax._id) { - if(!nextBestMainSubplotID) nextBestMainSubplotID = id; - var counterAx = Axes.getFromId(mockGd, counterPart); - if(anchorID && counterAx.overlaying === anchorID) { - mainSubplotID = id; - break; - } - } - } - } - - return mainSubplotID || nextBestMainSubplotID; -} - function shouldShowLinesOrTicks(ax, subplot) { return (ax.ticks || ax.showline) && (subplot === ax._mainSubplot || ax.mirror === 'all' || ax.mirror === 'allticks'); @@ -45651,29 +47091,121 @@ function findCounterAxisLineWidth(ax, side, counterAx, axList) { exports.drawMainTitle = function(gd) { var fullLayout = gd._fullLayout; + var textAnchor = getMainTitleTextAnchor(fullLayout); + var dy = getMainTitleDy(fullLayout); + Titles.draw(gd, 'gtitle', { propContainer: fullLayout, - propName: 'title', + propName: 'title.text', placeholder: fullLayout._dfltTitle.plot, attributes: { - x: fullLayout.width / 2, - y: fullLayout._size.t / 2, - 'text-anchor': 'middle' + x: getMainTitleX(fullLayout, textAnchor), + y: getMainTitleY(fullLayout, dy), + 'text-anchor': textAnchor, + dy: dy } }); }; -// First, see if we need to do arraysToCalcdata -// call it regardless of what change we made, in case -// supplyDefaults brought in an array that was already -// in gd.data but not in gd._fullData previously -exports.doTraceStyle = function(gd) { - for(var i = 0; i < gd.calcdata.length; i++) { - var cdi = gd.calcdata[i], - _module = ((cdi[0] || {}).trace || {})._module || {}, - arraysToCalcdata = _module.arraysToCalcdata; +function getMainTitleX(fullLayout, textAnchor) { + var title = fullLayout.title; + var gs = fullLayout._size; + var hPadShift = 0; - if(arraysToCalcdata) arraysToCalcdata(cdi, cdi[0].trace); + if(textAnchor === SVG_TEXT_ANCHOR_START) { + hPadShift = title.pad.l; + } else if(textAnchor === SVG_TEXT_ANCHOR_END) { + hPadShift = -title.pad.r; + } + + switch(title.xref) { + case 'paper': + return gs.l + gs.w * title.x + hPadShift; + case 'container': + default: + return fullLayout.width * title.x + hPadShift; + } +} + +function getMainTitleY(fullLayout, dy) { + var title = fullLayout.title; + var gs = fullLayout._size; + var vPadShift = 0; + + if(dy === '0em' || !dy) { + vPadShift = -title.pad.b; + } else if(dy === alignmentConstants.CAP_SHIFT + 'em') { + vPadShift = title.pad.t; + } + + if(title.y === 'auto') { + return gs.t / 2; + } else { + switch(title.yref) { + case 'paper': + return gs.t + gs.h - gs.h * title.y + vPadShift; + case 'container': + default: + return fullLayout.height - fullLayout.height * title.y + vPadShift; + } + } +} + +function getMainTitleTextAnchor(fullLayout) { + var title = fullLayout.title; + + var textAnchor = SVG_TEXT_ANCHOR_MIDDLE; + if(Lib.isRightAnchor(title)) { + textAnchor = SVG_TEXT_ANCHOR_END; + } else if(Lib.isLeftAnchor(title)) { + textAnchor = SVG_TEXT_ANCHOR_START; + } + + return textAnchor; +} + +function getMainTitleDy(fullLayout) { + var title = fullLayout.title; + + var dy = '0em'; + if(Lib.isTopAnchor(title)) { + dy = alignmentConstants.CAP_SHIFT + 'em'; + } else if(Lib.isMiddleAnchor(title)) { + dy = alignmentConstants.MID_SHIFT + 'em'; + } + + return dy; +} + +exports.doTraceStyle = function(gd) { + var calcdata = gd.calcdata; + var editStyleCalls = []; + var i; + + for(i = 0; i < calcdata.length; i++) { + var cd = calcdata[i]; + var cd0 = cd[0] || {}; + var trace = cd0.trace || {}; + var _module = trace._module || {}; + + // See if we need to do arraysToCalcdata + // call it regardless of what change we made, in case + // supplyDefaults brought in an array that was already + // in gd.data but not in gd._fullData previously + var arraysToCalcdata = _module.arraysToCalcdata; + if(arraysToCalcdata) arraysToCalcdata(cd, trace); + + var editStyle = _module.editStyle; + if(editStyle) editStyleCalls.push({fn: editStyle, cd0: cd0}); + } + + if(editStyleCalls.length) { + for(i = 0; i < editStyleCalls.length; i++) { + var edit = editStyleCalls[i]; + edit.fn(gd, edit.cd0); + } + clearGlCanvases(gd); + exports.redrawReglTraces(gd); } Plots.style(gd); @@ -45687,8 +47219,8 @@ exports.doColorBars = function(gd) { var cdi0 = gd.calcdata[i][0]; if((cdi0.t || {}).cb) { - var trace = cdi0.trace, - cb = cdi0.t.cb; + var trace = cdi0.trace; + var cb = cdi0.t.cb; if(Registry.traceIs(trace, 'contour')) { cb.line({ @@ -45721,16 +47253,13 @@ exports.doLegend = function(gd) { return Plots.previousPromises(gd); }; -exports.doTicksRelayout = function(gd, rangesAltered) { - if(rangesAltered) { - Axes.doTicks(gd, Object.keys(rangesAltered), true); - } else { - Axes.doTicks(gd, 'redraw'); - } +exports.doTicksRelayout = function(gd) { + Axes.draw(gd, 'redraw'); if(gd._fullLayout._hasOnlyLargeSploms) { + Registry.subplotsRegistry.splom.updateGrid(gd); clearGlCanvases(gd); - Registry.subplotsRegistry.splom.plot(gd); + exports.redrawReglTraces(gd); } exports.drawMainTitle(gd); @@ -45783,6 +47312,8 @@ exports.drawData = function(gd) { basePlotModules[i].plot(gd); } + exports.redrawReglTraces(gd); + // styling separate from drawing Plots.style(gd); @@ -45796,12 +47327,70 @@ exports.drawData = function(gd) { return Plots.previousPromises(gd); }; +// Draw (or redraw) all regl-based traces in one go, +// useful during drag and selection where buffers of targeted traces are updated, +// but all traces need to be redrawn following clearGlCanvases. +// +// Note that _module.plot for regl trace does NOT draw things +// on the canvas, they only update the buffers. +// Drawing is perform here. +// +// TODO try adding per-subplot option using gl.SCISSOR_TEST for +// non-overlaying, disjoint subplots. +// +// TODO try to include parcoords in here. +// https://github.com/plotly/plotly.js/issues/3069 +exports.redrawReglTraces = function(gd) { + var fullLayout = gd._fullLayout; + + if(fullLayout._has('regl')) { + var fullData = gd._fullData; + var cartesianIds = []; + var polarIds = []; + var i, sp; + + if(fullLayout._hasOnlyLargeSploms) { + fullLayout._splomGrid.draw(); + } + + // N.B. + // - Loop over fullData (not _splomScenes) to preserve splom trace-to-trace ordering + // - Fill list if subplot ids (instead of fullLayout._subplots) to handle cases where all traces + // of a given module are `visible !== true` + for(i = 0; i < fullData.length; i++) { + var trace = fullData[i]; + + if(trace.visible === true) { + if(trace.type === 'splom') { + fullLayout._splomScenes[trace.uid].draw(); + } else if(trace.type === 'scattergl') { + Lib.pushUnique(cartesianIds, trace.xaxis + trace.yaxis); + } else if(trace.type === 'scatterpolargl') { + Lib.pushUnique(polarIds, trace.subplot); + } + } + } + + for(i = 0; i < cartesianIds.length; i++) { + sp = fullLayout._plots[cartesianIds[i]]; + if(sp._scene) sp._scene.draw(); + } + + for(i = 0; i < polarIds.length; i++) { + sp = fullLayout[polarIds[i]]._subplot; + if(sp._scene) sp._scene.draw(); + } + } +}; + exports.doAutoRangeAndConstraints = function(gd) { var axList = Axes.list(gd, '', true); for(var i = 0; i < axList.length; i++) { var ax = axList[i]; cleanAxisConstraints(gd, ax); + // in case margins changed, update scale + ax.setScale(); doAutoRange(gd, ax); } @@ -45833,9 +47422,9 @@ exports.drawMarginPushers = function(gd) { Registry.getComponentMethod('updatemenus', 'draw')(gd); }; -},{"../components/color":50,"../components/drawing":75,"../components/modebar":113,"../components/titles":141,"../constants/alignment":148,"../lib":169,"../lib/clear_gl_canvases":157,"../plots/cartesian/autorange":213,"../plots/cartesian/axes":214,"../plots/cartesian/constraints":221,"../plots/plots":246,"../registry":259,"d3":16}],206:[function(_dereq_,module,exports){ +},{"../components/color":51,"../components/drawing":72,"../components/modebar":110,"../components/titles":139,"../constants/alignment":146,"../lib":168,"../lib/clear_gl_canvases":157,"../plots/cartesian/autorange":211,"../plots/cartesian/axes":212,"../plots/cartesian/constraints":220,"../plots/plots":245,"../registry":257,"d3":16}],204:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -45851,7 +47440,7 @@ var PlotSchema = _dereq_('./plot_schema'); var Plots = _dereq_('../plots/plots'); var plotAttributes = _dereq_('../plots/attributes'); var Template = _dereq_('./plot_template'); -var dfltConfig = _dereq_('./plot_config'); +var dfltConfig = _dereq_('./plot_config').dfltConfig; /** * Plotly.makeTemplate: create a template off an existing figure to reuse @@ -45860,14 +47449,15 @@ var dfltConfig = _dereq_('./plot_config'); * Note: separated from the rest of templates because otherwise we get circular * references due to PlotSchema. * - * @param {object|DOM element} figure: The figure to base the template on + * @param {object|DOM element|string} figure: The figure to base the template on * should contain a trace array `figure.data` * and a layout object `figure.layout` * @returns {object} template: the extracted template - can then be used as * `layout.template` in another figure. */ exports.makeTemplate = function(figure) { - figure = Lib.extendDeep({_context: dfltConfig}, figure); + figure = Lib.isPlainObject(figure) ? figure : Lib.getGraphDiv(figure); + figure = Lib.extendDeep({_context: dfltConfig}, {data: figure.data, layout: figure.layout}); Plots.supplyDefaults(figure); var data = figure.data || []; var layout = figure.layout || {}; @@ -46307,9 +47897,9 @@ function format(opts) { return opts; } -},{"../lib":169,"../plots/attributes":211,"../plots/plots":246,"./plot_config":202,"./plot_schema":203,"./plot_template":204}],207:[function(_dereq_,module,exports){ +},{"../lib":168,"../plots/attributes":209,"../plots/plots":245,"./plot_config":200,"./plot_schema":201,"./plot_template":202}],205:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -46427,6 +48017,7 @@ function toImage(gd, opts) { // extend config for static plot var configImage = Lib.extendFlat({}, config, { + _exportedPlot: true, staticPlot: true, setBackground: setBackground }); @@ -46497,9 +48088,9 @@ function toImage(gd, opts) { module.exports = toImage; -},{"../lib":169,"../snapshot/helpers":263,"../snapshot/svgtoimg":265,"../snapshot/tosvg":267,"./plot_api":201}],208:[function(_dereq_,module,exports){ +},{"../lib":168,"../snapshot/helpers":261,"../snapshot/svgtoimg":263,"../snapshot/tosvg":265,"./plot_api":199}],206:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -46511,7 +48102,7 @@ module.exports = toImage; var Lib = _dereq_('../lib'); var Plots = _dereq_('../plots/plots'); var PlotSchema = _dereq_('./plot_schema'); -var dfltConfig = _dereq_('./plot_config'); +var dfltConfig = _dereq_('./plot_config').dfltConfig; var isPlainObject = Lib.isPlainObject; var isArray = Array.isArray; @@ -46573,21 +48164,21 @@ module.exports = function validate(data, layout) { Plots.supplyDefaults(gd); - var dataOut = gd._fullData, - len = dataIn.length; + var dataOut = gd._fullData; + var len = dataIn.length; for(var i = 0; i < len; i++) { - var traceIn = dataIn[i], - base = ['data', i]; + var traceIn = dataIn[i]; + var base = ['data', i]; if(!isPlainObject(traceIn)) { errorList.push(format('object', base)); continue; } - var traceOut = dataOut[i], - traceType = traceOut.type, - traceSchema = schema.traces[traceType].attributes; + var traceOut = dataOut[i]; + var traceType = traceOut.type; + var traceSchema = schema.traces[traceType].attributes; // PlotSchema does something fancy with trace 'type', reset it here // to make the trace schema compatible with Lib.validate. @@ -46602,8 +48193,8 @@ module.exports = function validate(data, layout) { crawl(traceIn, traceOut, traceSchema, errorList, base); - var transformsIn = traceIn.transforms, - transformsOut = traceOut.transforms; + var transformsIn = traceIn.transforms; + var transformsOut = traceOut.transforms; if(transformsIn) { if(!isArray(transformsIn)) { @@ -46613,8 +48204,8 @@ module.exports = function validate(data, layout) { base.push('transforms'); for(var j = 0; j < transformsIn.length; j++) { - var path = ['transforms', j], - transformType = transformsIn[j].type; + var path = ['transforms', j]; + var transformType = transformsIn[j].type; if(!isPlainObject(transformsIn[j])) { errorList.push(format('object', base, path)); @@ -46636,8 +48227,8 @@ module.exports = function validate(data, layout) { } } - var layoutOut = gd._fullLayout, - layoutSchema = fillLayoutSchema(schema, dataOut); + var layoutOut = gd._fullLayout; + var layoutSchema = fillLayoutSchema(schema, dataOut); crawl(layoutIn, layoutOut, layoutSchema, errorList, 'layout'); @@ -46659,8 +48250,8 @@ function crawl(objIn, objOut, schema, list, base, path) { var p = path.slice(); p.push(k); - var valIn = objIn[k], - valOut = objOut[k]; + var valIn = objIn[k]; + var valOut = objOut[k]; var nestedSchema = getNestedSchema(schema, k); var isInfoArray = (nestedSchema || {}).valType === 'info_array'; @@ -46720,8 +48311,8 @@ function crawl(objIn, objOut, schema, list, base, path) { } } else if(nestedSchema.items && !isInfoArray && isArray(valIn)) { - var _nestedSchema = items[Object.keys(items)[0]], - indexList = []; + var _nestedSchema = items[Object.keys(items)[0]]; + var indexList = []; var j, _p; @@ -46892,9 +48483,9 @@ function format(code, base, path, valIn, valOut) { } function isInSchema(schema, key) { - var parts = splitKey(key), - keyMinusId = parts.keyMinusId, - id = parts.id; + var parts = splitKey(key); + var keyMinusId = parts.keyMinusId; + var id = parts.id; if((keyMinusId in schema) && schema[keyMinusId]._isSubplotObj && id) { return true; @@ -46943,9 +48534,9 @@ function convertPathToAttributeString(path) { return astr; } -},{"../lib":169,"../plots/plots":246,"./plot_config":202,"./plot_schema":203}],209:[function(_dereq_,module,exports){ +},{"../lib":168,"../plots/plots":245,"./plot_config":200,"./plot_schema":201}],207:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -46996,6 +48587,7 @@ module.exports = { min: 0, dflt: 500, + editType: 'none', }, easing: { @@ -47040,14 +48632,23 @@ module.exports = { 'bounce-in-out' ], + editType: 'none', }, + ordering: { + valType: 'enumerated', + values: ['layout first', 'traces first'], + dflt: 'layout first', + + editType: 'none', + + } } }; -},{}],210:[function(_dereq_,module,exports){ +},{}],208:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47141,9 +48742,9 @@ module.exports = function handleArrayContainerDefaults(parentObjIn, parentObjOut return contOut; }; -},{"../lib":169,"../plot_api/plot_template":204}],211:[function(_dereq_,module,exports){ +},{"../lib":168,"../plot_api/plot_template":202}],209:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47203,11 +48804,14 @@ module.exports = { uid: { valType: 'string', - editType: 'plot' + editType: 'plot', + anim: true, + }, ids: { valType: 'data_array', editType: 'calc', + anim: true, }, customdata: { @@ -47263,12 +48867,18 @@ module.exports = { _isLinkedToArray: 'transform', editType: 'calc', + }, + uirevision: { + valType: 'any', + + editType: 'none', + } }; -},{"../components/fx/attributes":84}],212:[function(_dereq_,module,exports){ +},{"../components/fx/attributes":81}],210:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47295,9 +48905,9 @@ module.exports = { } }; -},{}],213:[function(_dereq_,module,exports){ +},{}],211:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47310,6 +48920,7 @@ var isNumeric = _dereq_('fast-isnumeric'); var Lib = _dereq_('../../lib'); var FP_SAFE = _dereq_('../../constants/numerical').FP_SAFE; +var Registry = _dereq_('../../registry'); module.exports = { getAutoRange: getAutoRange, @@ -47534,10 +49145,6 @@ function concatExtremes(gd, ax) { } function doAutoRange(gd, ax) { - if(!ax._length) ax.setScale(); - - var axIn; - if(ax.autorange) { ax.range = getAutoRange(gd, ax); @@ -47547,20 +49154,28 @@ function doAutoRange(gd, ax) { // doAutoRange will get called on fullLayout, // but we want to report its results back to layout - axIn = ax._input; + var axIn = ax._input; + + // before we edit _input, store preGUI values + var edits = {}; + edits[ax._attr + '.range'] = ax.range; + edits[ax._attr + '.autorange'] = ax.autorange; + Registry.call('_storeDirectGUIEdit', gd.layout, gd._fullLayout._preGUI, edits); + axIn.range = ax.range.slice(); axIn.autorange = ax.autorange; } - if(ax._anchorAxis && ax._anchorAxis.rangeslider) { - var axeRangeOpts = ax._anchorAxis.rangeslider[ax._name]; + var anchorAx = ax._anchorAxis; + + if(anchorAx && anchorAx.rangeslider) { + var axeRangeOpts = anchorAx.rangeslider[ax._name]; if(axeRangeOpts) { if(axeRangeOpts.rangemode === 'auto') { axeRangeOpts.range = getAutoRange(gd, ax); } } - axIn = ax._anchorAxis._input; - axIn.rangeslider[ax._name] = Lib.extendFlat({}, axeRangeOpts); + anchorAx._input.rangeslider[ax._name] = Lib.extendFlat({}, axeRangeOpts); } } @@ -47583,7 +49198,7 @@ function doAutoRange(gd, ax) { * - ax.d2l * @param {array} data: * array of numbers (i.e. already run though ax.d2c) - * @param {object} options: + * @param {object} opts: * available keys are: * vpad: (number or number array) pad values (data value +-vpad) * ppad: (number or number array) pad pixels (pixel location +-ppad) @@ -47601,17 +49216,18 @@ function doAutoRange(gd, ax) { * - val {number} * - pad {number} * - extrappad {number} + * - opts {object}: a ref to the passed "options" object */ -function findExtremes(ax, data, options) { - if(!options) options = {}; +function findExtremes(ax, data, opts) { + if(!opts) opts = {}; if(!ax._m) ax.setScale(); var minArray = []; var maxArray = []; var len = data.length; - var extrapad = options.padded || false; - var tozero = options.tozero && (ax.type === 'linear' || ax.type === '-'); + var extrapad = opts.padded || false; + var tozero = opts.tozero && (ax.type === 'linear' || ax.type === '-'); var isLog = ax.type === 'log'; var hasArrayOption = false; var i, v, di, dmin, dmax, ppadiplus, ppadiminus, vmin, vmax; @@ -47628,11 +49244,11 @@ function findExtremes(ax, data, options) { } var ppadplus = makePadAccessor((ax._m > 0 ? - options.ppadplus : options.ppadminus) || options.ppad || 0); + opts.ppadplus : opts.ppadminus) || opts.ppad || 0); var ppadminus = makePadAccessor((ax._m > 0 ? - options.ppadminus : options.ppadplus) || options.ppad || 0); - var vpadplus = makePadAccessor(options.vpadplus || options.vpad); - var vpadminus = makePadAccessor(options.vpadminus || options.vpad); + opts.ppadminus : opts.ppadplus) || opts.ppad || 0); + var vpadplus = makePadAccessor(opts.vpadplus || opts.vpad); + var vpadminus = makePadAccessor(opts.vpadminus || opts.vpad); if(!hasArrayOption) { // with no arrays other than `data` we don't need to consider @@ -47696,7 +49312,11 @@ function findExtremes(ax, data, options) { for(i = 0; i < iMax; i++) addItem(i); for(i = len - 1; i >= iMax; i--) addItem(i); - return {min: minArray, max: maxArray}; + return { + min: minArray, + max: maxArray, + opts: opts + }; } function collapseMinArray(array, newVal, newPad, opts) { @@ -47778,9 +49398,9 @@ function goodNumber(v) { function lessOrEqual(v0, v1) { return v0 <= v1; } function greaterOrEqual(v0, v1) { return v0 >= v1; } -},{"../../constants/numerical":151,"../../lib":169,"fast-isnumeric":18}],214:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"../../registry":257,"fast-isnumeric":18}],212:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47802,6 +49422,7 @@ var Color = _dereq_('../../components/color'); var Drawing = _dereq_('../../components/drawing'); var axAttrs = _dereq_('./layout_attributes'); +var cleanTicks = _dereq_('./clean_ticks'); var constants = _dereq_('../../constants/numerical'); var ONEAVGYEAR = constants.ONEAVGYEAR; @@ -47912,6 +49533,39 @@ axes.cleanPosition = function(pos, gd, axRef) { return cleanPos(pos); }; +axes.redrawComponents = function(gd, axIds) { + axIds = axIds ? axIds : axes.listIds(gd); + + var fullLayout = gd._fullLayout; + + function _redrawOneComp(moduleName, methodName, stashName, shortCircuit) { + var method = Registry.getComponentMethod(moduleName, methodName); + var stash = {}; + + for(var i = 0; i < axIds.length; i++) { + var ax = fullLayout[axes.id2name(axIds[i])]; + var indices = ax[stashName]; + + for(var j = 0; j < indices.length; j++) { + var ind = indices[j]; + + if(!stash[ind]) { + method(gd, ind); + stash[ind] = 1; + // once is enough for images (which doesn't use the `i` arg anyway) + if(shortCircuit) return; + } + } + } + } + + // annotations and shapes 'draw' method is slow, + // use the finer-grained 'drawOne' method instead + _redrawOneComp('annotations', 'drawOne', '_annIndices'); + _redrawOneComp('shapes', 'drawOne', '_shapeIndices'); + _redrawOneComp('images', 'draw', '_imgIndices', true); +}; + var getDataConversions = axes.getDataConversions = function(gd, trace, target, targetArray) { var ax; @@ -47937,6 +49591,7 @@ var getDataConversions = axes.getDataConversions = function(gd, trace, target, t ax.d2c(targetArray[i]); } } + // TODO what to do for transforms? } else { ax = axes.getFromTrace(gd, trace, d2cTarget); } @@ -47977,7 +49632,7 @@ axes.counterLetter = function(id) { axes.minDtick = function(ax, newDiff, newFirst, allow) { // doesn't make sense to do forced min dTick on log or category axes, // and the plot itself may decide to cancel (ie non-grouped bars) - if(['log', 'category'].indexOf(ax.type) !== -1 || !allow) { + if(['log', 'category', 'multicategory'].indexOf(ax.type) !== -1 || !allow) { ax._minDtick = 0; } // undefined means there's nothing there yet @@ -48009,18 +49664,15 @@ axes.minDtick = function(ax, newDiff, newFirst, allow) { // save a copy of the initial axis ranges in fullLayout // use them in mode bar and dblclick events axes.saveRangeInitial = function(gd, overwrite) { - var axList = axes.list(gd, '', true), - hasOneAxisChanged = false; + var axList = axes.list(gd, '', true); + var hasOneAxisChanged = false; for(var i = 0; i < axList.length; i++) { var ax = axList[i]; - var isNew = (ax._rangeInitial === undefined); - var hasChanged = ( - isNew || !( - ax.range[0] === ax._rangeInitial[0] && - ax.range[1] === ax._rangeInitial[1] - ) + var hasChanged = isNew || !( + ax.range[0] === ax._rangeInitial[0] && + ax.range[1] === ax._rangeInitial[1] ); if((isNew && ax.autorange === false) || (overwrite && hasChanged)) { @@ -48034,21 +49686,16 @@ axes.saveRangeInitial = function(gd, overwrite) { // save a copy of the initial spike visibility axes.saveShowSpikeInitial = function(gd, overwrite) { - var axList = axes.list(gd, '', true), - hasOneAxisChanged = false, - allSpikesEnabled = 'on'; + var axList = axes.list(gd, '', true); + var hasOneAxisChanged = false; + var allSpikesEnabled = 'on'; for(var i = 0; i < axList.length; i++) { var ax = axList[i]; - var isNew = (ax._showSpikeInitial === undefined); - var hasChanged = ( - isNew || !( - ax.showspikes === ax._showspikes - ) - ); + var hasChanged = isNew || !(ax.showspikes === ax._showspikes); - if((isNew) || (overwrite && hasChanged)) { + if(isNew || (overwrite && hasChanged)) { ax._showSpikeInitial = ax.showspikes; hasOneAxisChanged = true; } @@ -48061,51 +49708,29 @@ axes.saveShowSpikeInitial = function(gd, overwrite) { return hasOneAxisChanged; }; -axes.autoBin = function(data, ax, nbins, is2d, calendar) { - var dataMin = Lib.aggNums(Math.min, null, data), - dataMax = Lib.aggNums(Math.max, null, data); +axes.autoBin = function(data, ax, nbins, is2d, calendar, size) { + var dataMin = Lib.aggNums(Math.min, null, data); + var dataMax = Lib.aggNums(Math.max, null, data); - if(!calendar) calendar = ax.calendar; - - if(ax.type === 'category') { + if(ax.type === 'category' || ax.type === 'multicategory') { return { start: dataMin - 0.5, end: dataMax + 0.5, - size: 1, + size: Math.max(1, Math.round(size) || 1), _dataSpan: dataMax - dataMin, }; } - var size0; - if(nbins) size0 = ((dataMax - dataMin) / nbins); - else { - // totally auto: scale off std deviation so the highest bin is - // somewhat taller than the total number of bins, but don't let - // the size get smaller than the 'nice' rounded down minimum - // difference between values - var distinctData = Lib.distinctVals(data), - msexp = Math.pow(10, Math.floor( - Math.log(distinctData.minDiff) / Math.LN10)), - minSize = msexp * Lib.roundUp( - distinctData.minDiff / msexp, [0.9, 1.9, 4.9, 9.9], true); - size0 = Math.max(minSize, 2 * Lib.stdev(data) / - Math.pow(data.length, is2d ? 0.25 : 0.4)); + if(!calendar) calendar = ax.calendar; - // fallback if ax.d2c output BADNUMs - // e.g. when user try to plot categorical bins - // on a layout.xaxis.type: 'linear' - if(!isNumeric(size0)) size0 = 1; - } - - // piggyback off autotick code to make "nice" bin sizes + // piggyback off tick code to make "nice" bin sizes and edges var dummyAx; if(ax.type === 'log') { dummyAx = { type: 'linear', range: [dataMin, dataMax] }; - } - else { + } else { dummyAx = { type: ax.type, range: Lib.simpleMap([dataMin, dataMax], ax.c2r, 0, calendar), @@ -48114,19 +49739,51 @@ axes.autoBin = function(data, ax, nbins, is2d, calendar) { } axes.setConvert(dummyAx); - axes.autoTicks(dummyAx, size0); + size = size && cleanTicks.dtick(size, dummyAx.type); + + if(size) { + dummyAx.dtick = size; + dummyAx.tick0 = cleanTicks.tick0(undefined, dummyAx.type, calendar); + } + else { + var size0; + if(nbins) size0 = ((dataMax - dataMin) / nbins); + else { + // totally auto: scale off std deviation so the highest bin is + // somewhat taller than the total number of bins, but don't let + // the size get smaller than the 'nice' rounded down minimum + // difference between values + var distinctData = Lib.distinctVals(data); + var msexp = Math.pow(10, Math.floor( + Math.log(distinctData.minDiff) / Math.LN10)); + var minSize = msexp * Lib.roundUp( + distinctData.minDiff / msexp, [0.9, 1.9, 4.9, 9.9], true); + size0 = Math.max(minSize, 2 * Lib.stdev(data) / + Math.pow(data.length, is2d ? 0.25 : 0.4)); + + // fallback if ax.d2c output BADNUMs + // e.g. when user try to plot categorical bins + // on a layout.xaxis.type: 'linear' + if(!isNumeric(size0)) size0 = 1; + } + + axes.autoTicks(dummyAx, size0); + } + + + var finalSize = dummyAx.dtick; var binStart = axes.tickIncrement( - axes.tickFirst(dummyAx), dummyAx.dtick, 'reverse', calendar); + axes.tickFirst(dummyAx), finalSize, 'reverse', calendar); var binEnd, bincount; // check for too many data points right at the edges of bins // (>50% within 1% of bin edges) or all data points integral // and offset the bins accordingly - if(typeof dummyAx.dtick === 'number') { + if(typeof finalSize === 'number') { binStart = autoShiftNumericBins(binStart, data, dummyAx, dataMin, dataMax); - bincount = 1 + Math.floor((dataMax - binStart) / dummyAx.dtick); - binEnd = binStart + bincount * dummyAx.dtick; + bincount = 1 + Math.floor((dataMax - binStart) / finalSize); + binEnd = binStart + bincount * finalSize; } else { // month ticks - should be the only nonlinear kind we have at this point. @@ -48135,7 +49792,7 @@ axes.autoBin = function(data, ax, nbins, is2d, calendar) { // we bin it on a linear axis (which one could argue against, but that's // a separate issue) if(dummyAx.dtick.charAt(0) === 'M') { - binStart = autoShiftMonthBins(binStart, data, dummyAx.dtick, dataMin, calendar); + binStart = autoShiftMonthBins(binStart, data, finalSize, dataMin, calendar); } // calculate the endpoint for nonlinear ticks - you have to @@ -48143,7 +49800,7 @@ axes.autoBin = function(data, ax, nbins, is2d, calendar) { binEnd = binStart; bincount = 0; while(binEnd <= dataMax) { - binEnd = axes.tickIncrement(binEnd, dummyAx.dtick, false, calendar); + binEnd = axes.tickIncrement(binEnd, finalSize, false, calendar); bincount++; } } @@ -48151,17 +49808,17 @@ axes.autoBin = function(data, ax, nbins, is2d, calendar) { return { start: ax.c2r(binStart, 0, calendar), end: ax.c2r(binEnd, 0, calendar), - size: dummyAx.dtick, + size: finalSize, _dataSpan: dataMax - dataMin }; }; function autoShiftNumericBins(binStart, data, ax, dataMin, dataMax) { - var edgecount = 0, - midcount = 0, - intcount = 0, - blankCount = 0; + var edgecount = 0; + var midcount = 0; + var intcount = 0; + var blankCount = 0; function nearEdge(v) { // is a value within 1% of a bin edge? @@ -48252,14 +49909,14 @@ axes.prepTicks = function(ax) { // calculate max number of (auto) ticks to display based on plot size if(ax.tickmode === 'auto' || !ax.dtick) { - var nt = ax.nticks, - minPx; + var nt = ax.nticks; + var minPx; + if(!nt) { - if(ax.type === 'category') { + if(ax.type === 'category' || ax.type === 'multicategory') { minPx = ax.tickfont ? (ax.tickfont.size || 12) * 1.2 : 15; nt = ax._length / minPx; - } - else { + } else { minPx = ax._id.charAt(0) === 'y' ? 40 : 80; nt = Lib.constrain(ax._length / minPx, 4, 9) + 1; } @@ -48321,7 +49978,7 @@ axes.calcTicks = function calcTicks(ax) { // return the full set of tick vals var vals = []; - if(ax.type === 'category') { + if(ax.type === 'category' || ax.type === 'multicategory') { endTick = (axrev) ? Math.max(-0.5, endTick) : Math.min(ax._categories.length - 0.5, endTick); } @@ -48365,23 +50022,22 @@ axes.calcTicks = function calcTicks(ax) { }; function arrayTicks(ax) { - var vals = ax.tickvals, - text = ax.ticktext, - ticksOut = new Array(vals.length), - rng = Lib.simpleMap(ax.range, ax.r2l), - r0expanded = rng[0] * 1.0001 - rng[1] * 0.0001, - r1expanded = rng[1] * 1.0001 - rng[0] * 0.0001, - tickMin = Math.min(r0expanded, r1expanded), - tickMax = Math.max(r0expanded, r1expanded), - vali, - i, - j = 0; + var vals = ax.tickvals; + var text = ax.ticktext; + var ticksOut = new Array(vals.length); + var rng = Lib.simpleMap(ax.range, ax.r2l); + var r0expanded = rng[0] * 1.0001 - rng[1] * 0.0001; + var r1expanded = rng[1] * 1.0001 - rng[0] * 0.0001; + var tickMin = Math.min(r0expanded, r1expanded); + var tickMax = Math.max(r0expanded, r1expanded); + var j = 0; // without a text array, just format the given values as any other ticks // except with more precision to the numbers if(!Array.isArray(text)) text = []; // make sure showing ticks doesn't accidentally add new categories + // TODO multicategory, if we allow ticktext / tickvals var tickVal2l = ax.type === 'category' ? ax.d2l_noadd : ax.d2l; // array ticks on log axes always show the full number @@ -48390,8 +50046,8 @@ function arrayTicks(ax) { ax.dtick = 'L' + Math.pow(10, Math.floor(Math.min(ax.range[0], ax.range[1])) - 1); } - for(i = 0; i < vals.length; i++) { - vali = tickVal2l(vals[i]); + for(var i = 0; i < vals.length; i++) { + var vali = tickVal2l(vals[i]); if(vali > tickMin && vali < tickMax) { if(text[i] === undefined) ticksOut[j] = axes.tickText(ax, vali); else ticksOut[j] = tickTextObj(ax, vali, String(text[i])); @@ -48404,17 +50060,17 @@ function arrayTicks(ax) { return ticksOut; } -var roundBase10 = [2, 5, 10], - roundBase24 = [1, 2, 3, 6, 12], - roundBase60 = [1, 2, 5, 10, 15, 30], - // 2&3 day ticks are weird, but need something btwn 1&7 - roundDays = [1, 2, 3, 7, 14], - // approx. tick positions for log axes, showing all (1) and just 1, 2, 5 (2) - // these don't have to be exact, just close enough to round to the right value - roundLog1 = [-0.046, 0, 0.301, 0.477, 0.602, 0.699, 0.778, 0.845, 0.903, 0.954, 1], - roundLog2 = [-0.301, 0, 0.301, 0.699, 1], - // N.B. `thetaunit; 'radians' angular axes must be converted to degrees - roundAngles = [15, 30, 45, 90, 180]; +var roundBase10 = [2, 5, 10]; +var roundBase24 = [1, 2, 3, 6, 12]; +var roundBase60 = [1, 2, 5, 10, 15, 30]; +// 2&3 day ticks are weird, but need something btwn 1&7 +var roundDays = [1, 2, 3, 7, 14]; +// approx. tick positions for log axes, showing all (1) and just 1, 2, 5 (2) +// these don't have to be exact, just close enough to round to the right value +var roundLog1 = [-0.046, 0, 0.301, 0.477, 0.602, 0.699, 0.778, 0.845, 0.903, 0.954, 1]; +var roundLog2 = [-0.301, 0, 0.301, 0.699, 1]; +// N.B. `thetaunit; 'radians' angular axes must be converted to degrees +var roundAngles = [15, 30, 45, 90, 180]; function roundDTick(roughDTick, base, roundingSet) { return base * Lib.roundUp(roughDTick / base, roundingSet); @@ -48505,7 +50161,7 @@ axes.autoTicks = function(ax, roughDTick) { ax.dtick = (roughDTick > 0.3) ? 'D2' : 'D1'; } } - else if(ax.type === 'category') { + else if(ax.type === 'category' || ax.type === 'multicategory') { ax.tick0 = 0; ax.dtick = Math.ceil(Math.max(roughDTick, 1)); } @@ -48545,7 +50201,7 @@ function autoTickRound(ax) { dtick = 1; } - if(ax.type === 'category') { + if(ax.type === 'category' || ax.type === 'multicategory') { ax._tickround = null; } if(ax.type === 'date') { @@ -48553,9 +50209,9 @@ function autoTickRound(ax) { // not necessarily *all* the information in tick0 though, if it's really odd // minimal string length for tick0: 'd' is 10, 'M' is 16, 'S' is 19 // take off a leading minus (year < 0) and i (intercalary month) so length is consistent - var tick0ms = ax.r2l(ax.tick0), - tick0str = ax.l2r(tick0ms).replace(/(^-|i)/g, ''), - tick0len = tick0str.length; + var tick0ms = ax.r2l(ax.tick0); + var tick0str = ax.l2r(tick0ms).replace(/(^-|i)/g, ''); + var tick0len = tick0str.length; if(String(dtick).charAt(0) === 'M') { // any tick0 more specific than a year: alway show the full date @@ -48613,8 +50269,8 @@ axes.tickIncrement = function(x, dtick, axrev, calendar) { if(isNumeric(dtick)) return x + axSign * dtick; // everything else is a string, one character plus a number - var tType = dtick.charAt(0), - dtSigned = axSign * Number(dtick.substr(1)); + var tType = dtick.charAt(0); + var dtSigned = axSign * Number(dtick.substr(1)); // Dates: months (or years - see Lib.incrementMonth) if(tType === 'M') return Lib.incrementMonth(x, dtSigned, calendar); @@ -48625,9 +50281,9 @@ axes.tickIncrement = function(x, dtick, axrev, calendar) { // log10 of 2,5,10, or all digits (logs just have to be // close enough to round) else if(tType === 'D') { - var tickset = (dtick === 'D2') ? roundLog2 : roundLog1, - x2 = x + axSign * 0.01, - frac = Lib.roundUp(Lib.mod(x2, 1), tickset, axrev); + var tickset = (dtick === 'D2') ? roundLog2 : roundLog1; + var x2 = x + axSign * 0.01; + var frac = Lib.roundUp(Lib.mod(x2, 1), tickset, axrev); return Math.floor(x2) + Math.log(d3.round(Math.pow(10, frac), 1)) / Math.LN10; @@ -48637,36 +50293,34 @@ axes.tickIncrement = function(x, dtick, axrev, calendar) { // calculate the first tick on an axis axes.tickFirst = function(ax) { - var r2l = ax.r2l || Number, - rng = Lib.simpleMap(ax.range, r2l), - axrev = rng[1] < rng[0], - sRound = axrev ? Math.floor : Math.ceil, - // add a tiny extra bit to make sure we get ticks - // that may have been rounded out - r0 = rng[0] * 1.0001 - rng[1] * 0.0001, - dtick = ax.dtick, - tick0 = r2l(ax.tick0); + var r2l = ax.r2l || Number; + var rng = Lib.simpleMap(ax.range, r2l); + var axrev = rng[1] < rng[0]; + var sRound = axrev ? Math.floor : Math.ceil; + // add a tiny extra bit to make sure we get ticks + // that may have been rounded out + var r0 = rng[0] * 1.0001 - rng[1] * 0.0001; + var dtick = ax.dtick; + var tick0 = r2l(ax.tick0); if(isNumeric(dtick)) { var tmin = sRound((r0 - tick0) / dtick) * dtick + tick0; // make sure no ticks outside the category list - if(ax.type === 'category') { + if(ax.type === 'category' || ax.type === 'multicategory') { tmin = Lib.constrain(tmin, 0, ax._categories.length - 1); } return tmin; } - var tType = dtick.charAt(0), - dtNum = Number(dtick.substr(1)); + var tType = dtick.charAt(0); + var dtNum = Number(dtick.substr(1)); // Dates: months (or years) if(tType === 'M') { - var cnt = 0, - t0 = tick0, - t1, - mult, - newDTick; + var cnt = 0; + var t0 = tick0; + var t1, mult, newDTick; // This algorithm should work for *any* nonlinear (but close to linear!) // tick spacing. Limit to 10 iterations, for gregorian months it's normally <=3. @@ -48692,8 +50346,8 @@ axes.tickFirst = function(ax) { (Math.pow(10, r0) - tick0) / dtNum) * dtNum + tick0) / Math.LN10; } else if(tType === 'D') { - var tickset = (dtick === 'D2') ? roundLog2 : roundLog1, - frac = Lib.roundUp(Lib.mod(r0, 1), tickset, axrev); + var tickset = (dtick === 'D2') ? roundLog2 : roundLog1; + var frac = Lib.roundUp(Lib.mod(r0, 1), tickset, axrev); return Math.floor(r0) + Math.log(d3.round(Math.pow(10, frac), 1)) / Math.LN10; @@ -48708,16 +50362,18 @@ axes.tickFirst = function(ax) { // hover is a (truthy) flag for whether to show numbers with a bit // more precision for hovertext axes.tickText = function(ax, x, hover) { - var out = tickTextObj(ax, x), - hideexp, - arrayMode = ax.tickmode === 'array', - extraPrecision = hover || arrayMode, - i, - tickVal2l = ax.type === 'category' ? ax.d2l_noadd : ax.d2l; + var out = tickTextObj(ax, x); + var arrayMode = ax.tickmode === 'array'; + var extraPrecision = hover || arrayMode; + var axType = ax.type; + // TODO multicategory, if we allow ticktext / tickvals + var tickVal2l = axType === 'category' ? ax.d2l_noadd : ax.d2l; + var i; if(arrayMode && Array.isArray(ax.ticktext)) { - var rng = Lib.simpleMap(ax.range, ax.r2l), - minDiff = Math.abs(rng[1] - rng[0]) / 10000; + var rng = Lib.simpleMap(ax.range, ax.r2l); + var minDiff = Math.abs(rng[1] - rng[0]) / 10000; + for(i = 0; i < ax.ticktext.length; i++) { if(Math.abs(x - tickVal2l(ax.tickvals[i])) < minDiff) break; } @@ -48728,28 +50384,25 @@ axes.tickText = function(ax, x, hover) { } function isHidden(showAttr) { - var first_or_last; - if(showAttr === undefined) return true; if(hover) return showAttr === 'none'; - first_or_last = { + var firstOrLast = { first: ax._tmin, last: ax._tmax }[showAttr]; - return showAttr !== 'all' && x !== first_or_last; + return showAttr !== 'all' && x !== firstOrLast; } - if(hover) { - hideexp = 'never'; - } else { - hideexp = ax.exponentformat !== 'none' && isHidden(ax.showexponent) ? 'hide' : ''; - } + var hideexp = hover ? + 'never' : + ax.exponentformat !== 'none' && isHidden(ax.showexponent) ? 'hide' : ''; - if(ax.type === 'date') formatDate(ax, out, hover, extraPrecision); - else if(ax.type === 'log') formatLog(ax, out, hover, extraPrecision, hideexp); - else if(ax.type === 'category') formatCategory(ax, out); + if(axType === 'date') formatDate(ax, out, hover, extraPrecision); + else if(axType === 'log') formatLog(ax, out, hover, extraPrecision, hideexp); + else if(axType === 'category') formatCategory(ax, out); + else if(axType === 'multicategory') formatMultiCategory(ax, out, hover); else if(isAngular(ax)) formatAngle(ax, out, hover, extraPrecision, hideexp); else formatLinear(ax, out, hover, extraPrecision, hideexp); @@ -48757,6 +50410,20 @@ axes.tickText = function(ax, x, hover) { if(ax.tickprefix && !isHidden(ax.showtickprefix)) out.text = ax.tickprefix + out.text; if(ax.ticksuffix && !isHidden(ax.showticksuffix)) out.text += ax.ticksuffix; + // Setup ticks and grid lines boundaries + // at 1/2 a 'category' to the left/bottom + if(ax.tickson === 'boundaries' || ax.showdividers) { + var inbounds = function(v) { + var p = ax.l2p(v); + return p >= 0 && p <= ax._length ? v : null; + }; + + out.xbnd = [ + inbounds(out.x - 0.5), + inbounds(out.x + ax.dtick - 0.5) + ]; + } + return out; }; @@ -48806,8 +50473,8 @@ function tickTextObj(ax, x, text) { } function formatDate(ax, out, hover, extraPrecision) { - var tr = ax._tickround, - fmt = (hover && ax.hoverformat) || axes.getTickFormat(ax); + var tr = ax._tickround; + var fmt = (hover && ax.hoverformat) || axes.getTickFormat(ax); if(extraPrecision) { // second or sub-second precision: extra always shows max digits. @@ -48816,8 +50483,8 @@ function formatDate(ax, out, hover, extraPrecision) { else tr = {y: 'm', m: 'd', d: 'M', M: 'S', S: 4}[tr]; } - var dateStr = Lib.formatDate(out.x, fmt, tr, ax._dateFormat, ax.calendar, ax._extraFormat), - headStr; + var dateStr = Lib.formatDate(out.x, fmt, tr, ax._dateFormat, ax.calendar, ax._extraFormat); + var headStr; var splitIndex = dateStr.indexOf('\n'); if(splitIndex !== -1) { @@ -48934,6 +50601,22 @@ function formatCategory(ax, out) { out.text = String(tt); } +function formatMultiCategory(ax, out, hover) { + var v = Math.round(out.x); + var cats = ax._categories[v] || []; + var tt = cats[1] === undefined ? '' : String(cats[1]); + var tt2 = cats[0] === undefined ? '' : String(cats[0]); + + if(hover) { + // TODO is this what we want? + out.text = tt2 + ' - ' + tt; + } else { + // setup for secondary labels + out.text = tt; + out.text2 = tt2; + } +} + function formatLinear(ax, out, hover, extraPrecision, hideexp) { if(hideexp === 'never') { // If this is a hover label, then we must *never* hide the exponent @@ -49039,14 +50722,13 @@ function beyondSI(exponent) { } function numFormat(v, ax, fmtoverride, hover) { - // negative? - var isNeg = v < 0, - // max number of digits past decimal point to show - tickRound = ax._tickround, - exponentFormat = fmtoverride || ax.exponentformat || 'B', - exponent = ax._tickexponent, - tickformat = axes.getTickFormat(ax), - separatethousands = ax.separatethousands; + var isNeg = v < 0; + // max number of digits past decimal point to show + var tickRound = ax._tickround; + var exponentFormat = fmtoverride || ax.exponentformat || 'B'; + var exponent = ax._tickexponent; + var tickformat = axes.getTickFormat(ax); + var separatethousands = ax.separatethousands; // special case for hover: set exponent just for this value, and // add a couple more digits of precision over tick labels @@ -49219,6 +50901,9 @@ axes.getTickFormat = function(ax) { // as an array of items like 'xy', 'x2y', 'x2y2'... // sorted by x (x,x2,x3...) then y // optionally restrict to only subplots containing axis object ax +// +// NOTE: this is currently only used OUTSIDE plotly.js (toolpanel, webapp) +// ideally we get rid of it there (or just copy this there) and remove it here axes.getSubplots = function(gd, ax) { var subplotObj = gd._fullLayout._subplots; var allSubplots = subplotObj.cartesian.concat(subplotObj.gl2d || []); @@ -49237,18 +50922,20 @@ axes.getSubplots = function(gd, ax) { }; // find all subplots with axis 'ax' +// NOTE: this is only used in axes.getSubplots (only used outside plotly.js) and +// gl2d/convert (where it restricts axis subplots to only those with gl2d) axes.findSubplotsWithAxis = function(subplots, ax) { var axMatch = new RegExp( (ax._id.charAt(0) === 'x') ? ('^' + ax._id + 'y') : (ax._id + '$') ); - var subplotsWithAxis = []; + var subplotsWithAx = []; for(var i = 0; i < subplots.length; i++) { var sp = subplots[i]; - if(axMatch.test(sp)) subplotsWithAxis.push(sp); + if(axMatch.test(sp)) subplotsWithAx.push(sp); } - return subplotsWithAxis; + return subplotsWithAx; }; // makeClipPaths: prepare clipPaths for all single axes and all possible xy pairings @@ -49301,24 +50988,25 @@ axes.makeClipPaths = function(gd) { * * @param {DOM element} gd : graph div * @param {string or array of strings} arg : polymorphic argument - * @param {boolean} skipTitle : optional flag to skip axis title draw/update + * @param {object} opts: + * - @param {boolean} skipTitle : optional flag to skip axis title draw/update * - * Signature 1: Axes.doTicks(gd, 'redraw') + * Signature 1: Axes.draw(gd, 'redraw') * use this to clear and redraw all axes on graph * - * Signature 2: Axes.doTicks(gd, '') + * Signature 2: Axes.draw(gd, '') * use this to draw all axes on graph w/o the selectAll().remove() * of the 'redraw' signature * - * Signature 3: Axes.doTicks(gd, [axId, axId2, ...]) + * Signature 3: Axes.draw(gd, [axId, axId2, ...]) * where the items are axis id string, * use this to update multiple axes in one call * - * N.B doTicks updates: + * N.B draw updates: * - ax._r (stored range for use by zoom/pan) * - ax._rl (stored linearized range for use by zoom/pan) */ -axes.doTicks = function(gd, arg, skipTitle) { +axes.draw = function(gd, arg, opts) { var fullLayout = gd._fullLayout; if(arg === 'redraw') { @@ -49330,8 +51018,14 @@ axes.doTicks = function(gd, arg, skipTitle) { plotinfo.xaxislayer.selectAll('.' + xa._id + 'tick').remove(); plotinfo.yaxislayer.selectAll('.' + ya._id + 'tick').remove(); + plotinfo.xaxislayer.selectAll('.' + xa._id + 'tick2').remove(); + plotinfo.yaxislayer.selectAll('.' + ya._id + 'tick2').remove(); + plotinfo.xaxislayer.selectAll('.' + xa._id + 'divider').remove(); + plotinfo.yaxislayer.selectAll('.' + ya._id + 'divider').remove(); + if(plotinfo.gridlayer) plotinfo.gridlayer.selectAll('path').remove(); if(plotinfo.zerolinelayer) plotinfo.zerolinelayer.selectAll('path').remove(); + fullLayout._infolayer.select('.g-' + xa._id + 'title').remove(); fullLayout._infolayer.select('.g-' + ya._id + 'title').remove(); }); @@ -49339,13 +51033,13 @@ axes.doTicks = function(gd, arg, skipTitle) { var axList = (!arg || arg === 'redraw') ? axes.listIds(gd) : arg; - Lib.syncOrAsync(axList.map(function(axid) { + return Lib.syncOrAsync(axList.map(function(axId) { return function() { - if(!axid) return; + if(!axId) return; - var axDone = axes.doTicksSingle(gd, axid, skipTitle); + var ax = axes.getFromId(gd, axId); + var axDone = axes.drawOne(gd, ax, opts); - var ax = axes.getFromId(gd, axid); ax._r = ax.range.slice(); ax._rl = Lib.simpleMap(ax._r, ax.r2l); @@ -49355,692 +51049,1103 @@ axes.doTicks = function(gd, arg, skipTitle) { }; /** - * Per-axis drawing routine! + * Draw one cartesian axis * - * This routine draws axis ticks and much more (... grids, labels, title etc.) - * Supports multiple argument signatures. - * N.B. this thing is async in general (because of MathJax rendering) - * - * @param {DOM element} gd : graph div - * @param {string or object} arg : polymorphic argument - * @param {boolean} skipTitle : optional flag to skip axis title draw/update - * @return {promise} - * - * Signature 1: Axes.doTicks(gd, ax) - * where ax is an axis object as in fullLayout - * - * Signature 2: Axes.doTicks(gd, axId) - * where axId is a axis id string + * @param {DOM element} gd + * @param {object} ax (full) axis object + * @param {object} opts + * - @param {boolean} skipTitle (set to true to skip axis title draw call) */ -axes.doTicksSingle = function(gd, arg, skipTitle) { - var fullLayout = gd._fullLayout; - var independent = false; - var ax; +axes.drawOne = function(gd, ax, opts) { + opts = opts || {}; - if(Lib.isPlainObject(arg)) { - ax = arg; - independent = true; - } else { - ax = axes.getFromId(gd, arg); - } + var i, sp, plotinfo; - // set scaling to pixels ax.setScale(); - var axid = ax._id; - var axLetter = axid.charAt(0); - var counterLetter = axes.counterLetter(axid); + var fullLayout = gd._fullLayout; + var axId = ax._id; + var axLetter = axId.charAt(0); + var counterLetter = axes.counterLetter(axId); + var mainSubplot = ax._mainSubplot; + var mainLinePosition = ax._mainLinePosition; + var mainMirrorPosition = ax._mainMirrorPosition; + var mainPlotinfo = fullLayout._plots[mainSubplot]; + var mainAxLayer = mainPlotinfo[axLetter + 'axislayer']; + var subplotsWithAx = ax._subplotsWith; + var vals = ax._vals = axes.calcTicks(ax); - var datafn = function(d) { return [d.text, d.x, ax.mirror, d.font, d.fontSize, d.fontColor].join('_'); }; - var tcls = axid + 'tick'; - var gcls = axid + 'grid'; - var zcls = axid + 'zl'; - var pad = (ax.linewidth || 1) / 2; - var labelStandoff = (ax.ticks === 'outside' ? ax.ticklen : 0); - var labelShift = 0; - var gridWidth = Drawing.crispRound(gd, ax.gridwidth, 1); - var zeroLineWidth = Drawing.crispRound(gd, ax.zerolinewidth, gridWidth); - var tickWidth = Drawing.crispRound(gd, ax.tickwidth, 1); - var sides, transfn, tickpathfn, subplots; - var tickLabels; - var i; - if(ax._counterangle && ax.ticks === 'outside') { - var caRad = ax._counterangle * Math.PI / 180; - labelStandoff = ax.ticklen * Math.cos(caRad) + 1; - labelShift = ax.ticklen * Math.sin(caRad); - } - - if(ax.showticklabels && (ax.ticks === 'outside' || ax.showline)) { - labelStandoff += 0.2 * ax.tickfont.size; - } - - // positioning arguments for x vs y axes - if(axLetter === 'x') { - sides = ['bottom', 'top']; - transfn = ax._transfn || function(d) { - return 'translate(' + (ax._offset + ax.l2p(d.x)) + ',0)'; - }; - tickpathfn = function(shift, len) { - if(ax._counterangle) { - var caRad = ax._counterangle * Math.PI / 180; - return 'M0,' + shift + 'l' + (Math.sin(caRad) * len) + ',' + (Math.cos(caRad) * len); - } - else return 'M0,' + shift + 'v' + len; - }; - } - else if(axLetter === 'y') { - sides = ['left', 'right']; - transfn = ax._transfn || function(d) { - return 'translate(0,' + (ax._offset + ax.l2p(d.x)) + ')'; - }; - tickpathfn = function(shift, len) { - if(ax._counterangle) { - var caRad = ax._counterangle * Math.PI / 180; - return 'M' + shift + ',0l' + (Math.cos(caRad) * len) + ',' + (-Math.sin(caRad) * len); - } - else return 'M' + shift + ',0h' + len; - }; - } - else if(isAngular(ax)) { - sides = ['left', 'right']; - transfn = ax._transfn; - tickpathfn = function(shift, len) { - return 'M' + shift + ',0h' + len; - }; - } - else { - Lib.warn('Unrecognized doTicks axis:', axid); - return; - } - - var axside = ax.side || sides[0]; - // which direction do the side[0], side[1], and free ticks go? - // then we flip if outside XOR y axis - var ticksign = [-1, 1, axside === sides[1] ? 1 : -1]; - if((ax.ticks !== 'inside') === (axLetter === 'x')) { - ticksign = ticksign.map(function(v) { return -v; }); + // Add a couple of axis properties that should cause us to recreate + // elements. Used in d3 data function. + var axInfo = [ax.mirror, mainLinePosition, mainMirrorPosition].join('_'); + for(i = 0; i < vals.length; i++) { + vals[i].axInfo = axInfo; } if(!ax.visible) return; - if(ax._tickFilter) { - vals = vals.filter(ax._tickFilter); + // stash selections to avoid DOM queries e.g. + // - stash tickLabels selection, so that drawTitle can use it to scoot title + ax._selections = {}; + // stash tick angle (including the computed 'auto' values) per tick-label class + ax._tickAngles = {}; + + var transFn = axes.makeTransFn(ax); + var tickVals; + // We remove zero lines, grid lines, and inside ticks if they're within 1px of the end + // The key case here is removing zero lines when the axis bound is zero + var valsClipped; + + if(ax.tickson === 'boundaries') { + var boundaryVals = getBoundaryVals(ax, vals); + valsClipped = axes.clipEnds(ax, boundaryVals); + tickVals = ax.ticks === 'inside' ? valsClipped : boundaryVals; + } else { + valsClipped = axes.clipEnds(ax, vals); + tickVals = ax.ticks === 'inside' ? valsClipped : vals; } - // Remove zero lines, grid lines, and inside ticks if they're within - // 1 pixel of the end. - // The key case here is removing zero lines when the axis bound is zero. - // Don't clip angular values. - var valsClipped = ax._valsClipped = isAngular(ax) ? - vals : - vals.filter(function(d) { return clipEnds(ax, d.x); }); - - function drawTicks(container, tickpath) { - var ticks = container.selectAll('path.' + tcls) - .data(ax.ticks === 'inside' ? valsClipped : vals, datafn); - - if(tickpath && ax.ticks) { - ticks.enter().append('path').classed(tcls, 1).classed('ticks', 1) - .classed('crisp', 1) - .call(Color.stroke, ax.tickcolor) - .style('stroke-width', tickWidth + 'px') - .attr('d', tickpath); - ticks.attr('transform', transfn); - ticks.exit().remove(); - } - else ticks.remove(); - } - - function drawLabels(container, position) { - // tick labels - for now just the main labels. - // TODO: mirror labels, esp for subplots - tickLabels = container.selectAll('g.' + tcls).data(vals, datafn); - - if(!isNumeric(position)) { - tickLabels.remove(); - drawAxTitle(); - return; - } - if(!ax.showticklabels) { - tickLabels.remove(); - drawAxTitle(); - calcBoundingBox(); - return; - } - - var labelx, labely, labelanchor, labelpos0, flipit; - if(axLetter === 'x') { - flipit = (axside === 'bottom') ? 1 : -1; - labelx = function(d) { return d.dx + labelShift * flipit; }; - labelpos0 = position + (labelStandoff + pad) * flipit; - labely = function(d) { - return d.dy + labelpos0 + d.fontSize * - ((axside === 'bottom') ? 1 : -0.2); - }; - labelanchor = function(angle) { - if(!isNumeric(angle) || angle === 0 || angle === 180) { - return 'middle'; - } - return (angle * flipit < 0) ? 'end' : 'start'; - }; - } - else if(axLetter === 'y') { - flipit = (axside === 'right') ? 1 : -1; - labely = function(d) { - return d.dy + d.fontSize * MID_SHIFT - labelShift * flipit; - }; - labelx = function(d) { - return d.dx + position + (labelStandoff + pad + - ((Math.abs(ax.tickangle) === 90) ? d.fontSize / 2 : 0)) * flipit; - }; - labelanchor = function(angle) { - if(isNumeric(angle) && Math.abs(angle) === 90) { - return 'middle'; - } - return axside === 'right' ? 'start' : 'end'; - }; - } - else if(isAngular(ax)) { - ax._labelShift = labelShift; - ax._labelStandoff = labelStandoff; - ax._pad = pad; - - labelx = ax._labelx; - labely = ax._labely; - labelanchor = ax._labelanchor; - } - - var maxFontSize = 0, - autoangle = 0, - labelsReady = []; - tickLabels.enter().append('g').classed(tcls, 1) - .append('text') - // only so tex has predictable alignment that we can - // alter later - .attr('text-anchor', 'middle') - .each(function(d) { - var thisLabel = d3.select(this), - newPromise = gd._promises.length; - thisLabel - .call(svgTextUtils.positionText, labelx(d), labely(d)) - .call(Drawing.font, d.font, d.fontSize, d.fontColor) - .text(d.text) - .call(svgTextUtils.convertToTspans, gd); - newPromise = gd._promises[newPromise]; - if(newPromise) { - // if we have an async label, we'll deal with that - // all here so take it out of gd._promises and - // instead position the label and promise this in - // labelsReady - labelsReady.push(gd._promises.pop().then(function() { - positionLabels(thisLabel, ax.tickangle); - })); - } - else { - // sync label: just position it now. - positionLabels(thisLabel, ax.tickangle); - } - }); - tickLabels.exit().remove(); - - tickLabels.each(function(d) { - maxFontSize = Math.max(maxFontSize, d.fontSize); - }); - - if(isAngular(ax)) { - tickLabels.each(function(d) { - d3.select(this).select('text') - .call(svgTextUtils.positionText, labelx(d), labely(d)); - }); - } - - // How much to shift a multi-line label to center it vertically. - function getAnchorHeight(lineCount, lineHeight, angle) { - var h = (lineCount - 1) * lineHeight; - if(axLetter === 'x') { - if(angle < -60 || 60 < angle) { - return -0.5 * h; - } else if(axside === 'top') { - return -h; - } - } else { - angle *= axside === 'left' ? 1 : -1; - if(angle < -30) { - return -h; - } else if(angle < 30) { - return -0.5 * h; - } - } - return 0; - } - - function positionLabels(s, angle) { - s.each(function(d) { - var anchor = labelanchor(angle, d); - var thisLabel = d3.select(this), - mathjaxGroup = thisLabel.select('.text-math-group'), - transform = transfn.call(thisLabel.node(), d) + - ((isNumeric(angle) && +angle !== 0) ? - (' rotate(' + angle + ',' + labelx(d) + ',' + - (labely(d) - d.fontSize / 2) + ')') : - ''); - var anchorHeight = getAnchorHeight( - svgTextUtils.lineCount(thisLabel), - LINE_SPACING * d.fontSize, - isNumeric(angle) ? +angle : 0); - if(anchorHeight) { - transform += ' translate(0, ' + anchorHeight + ')'; - } - if(mathjaxGroup.empty()) { - thisLabel.select('text').attr({ - transform: transform, - 'text-anchor': anchor - }); - } - else { - var mjShift = - Drawing.bBox(mathjaxGroup.node()).width * - {end: -0.5, start: 0.5}[anchor]; - mathjaxGroup.attr('transform', transform + - (mjShift ? 'translate(' + mjShift + ',0)' : '')); - } - }); - } - - // make sure all labels are correctly positioned at their base angle - // the positionLabels call above is only for newly drawn labels. - // do this without waiting, using the last calculated angle to - // minimize flicker, then do it again when we know all labels are - // there, putting back the prescribed angle to check for overlaps. - positionLabels(tickLabels, ax._lastangle || ax.tickangle); - - function allLabelsReady() { - return labelsReady.length && Promise.all(labelsReady); - } - - function fixLabelOverlaps() { - positionLabels(tickLabels, ax.tickangle); - - // check for auto-angling if x labels overlap - // don't auto-angle at all for log axes with - // base and digit format - if(axLetter === 'x' && !isNumeric(ax.tickangle) && - (ax.type !== 'log' || String(ax.dtick).charAt(0) !== 'D')) { - var lbbArray = []; - tickLabels.each(function(d) { - var s = d3.select(this), - thisLabel = s.select('.text-math-group'), - x = ax.l2p(d.x); - if(thisLabel.empty()) thisLabel = s.select('text'); - - var bb = Drawing.bBox(thisLabel.node()); - - lbbArray.push({ - // ignore about y, just deal with x overlaps - top: 0, - bottom: 10, - height: 10, - left: x - bb.width / 2, - // impose a 2px gap - right: x + bb.width / 2 + 2, - width: bb.width + 2 - }); - }); - for(i = 0; i < lbbArray.length - 1; i++) { - if(Lib.bBoxIntersect(lbbArray[i], lbbArray[i + 1])) { - // any overlap at all - set 30 degrees - autoangle = 30; - break; - } - } - if(autoangle) { - var tickspacing = Math.abs( - (vals[vals.length - 1].x - vals[0].x) * ax._m - ) / (vals.length - 1); - if(tickspacing < maxFontSize * 2.5) { - autoangle = 90; - } - positionLabels(tickLabels, autoangle); - } - ax._lastangle = autoangle; - } - - // update the axis title - // (so it can move out of the way if needed) - // TODO: separate out scoot so we don't need to do - // a full redraw of the title (mostly relevant for MathJax) - drawAxTitle(); - return axid + ' done'; - } - - function calcBoundingBox() { - if(ax.showticklabels) { - var gdBB = gd.getBoundingClientRect(); - var bBox = container.node().getBoundingClientRect(); - - /* - * the way we're going to use this, the positioning that matters - * is relative to the origin of gd. This is important particularly - * if gd is scrollable, and may have been scrolled between the time - * we calculate this and the time we use it - */ - - ax._boundingBox = { - width: bBox.width, - height: bBox.height, - left: bBox.left - gdBB.left, - right: bBox.right - gdBB.left, - top: bBox.top - gdBB.top, - bottom: bBox.bottom - gdBB.top - }; - } else { - var gs = fullLayout._size; - var pos; - - // set dummy bbox for ticklabel-less axes - - if(axLetter === 'x') { - pos = ax.anchor === 'free' ? - gs.t + gs.h * (1 - ax.position) : - gs.t + gs.h * (1 - ax._anchorAxis.domain[{bottom: 0, top: 1}[ax.side]]); - - ax._boundingBox = { - top: pos, - bottom: pos, - left: ax._offset, - right: ax._offset + ax._length, - width: ax._length, - height: 0 - }; - } else { - pos = ax.anchor === 'free' ? - gs.l + gs.w * ax.position : - gs.l + gs.w * ax._anchorAxis.domain[{left: 0, right: 1}[ax.side]]; - - ax._boundingBox = { - left: pos, - right: pos, - bottom: ax._offset + ax._length, - top: ax._offset, - height: ax._length, - width: 0 - }; - } - } - - /* - * for spikelines: what's the full domain of positions in the - * opposite direction that are associated with this axis? - * This means any axes that we make a subplot with, plus the - * position of the axis itself if it's free. - */ - if(subplots) { - var fullRange = ax._counterSpan = [Infinity, -Infinity]; - - for(i = 0; i < subplots.length; i++) { - var subplot = fullLayout._plots[subplots[i]]; - var counterAxis = subplot[(axLetter === 'x') ? 'yaxis' : 'xaxis']; - - extendRange(fullRange, [ - counterAxis._offset, - counterAxis._offset + counterAxis._length - ]); - } - - if(ax.anchor === 'free') { - extendRange(fullRange, (axLetter === 'x') ? - [ax._boundingBox.bottom, ax._boundingBox.top] : - [ax._boundingBox.right, ax._boundingBox.left]); - } - } - - function extendRange(range, newRange) { - range[0] = Math.min(range[0], newRange[0]); - range[1] = Math.max(range[1], newRange[1]); - } - } - - function doAutoMargins() { - var pushKey = ax._name + '.automargin'; - if(axLetter !== 'x' && axLetter !== 'y') { return; } - if(!ax.automargin) { - Plots.autoMargin(gd, pushKey); - return; - } - - var s = ax.side[0]; - var push = {x: 0, y: 0, r: 0, l: 0, t: 0, b: 0}; - - if(axLetter === 'x') { - push.y = (ax.anchor === 'free' ? ax.position : - ax._anchorAxis.domain[s === 't' ? 1 : 0]); - push[s] += ax._boundingBox.height; - } - else { - push.x = (ax.anchor === 'free' ? ax.position : - ax._anchorAxis.domain[s === 'r' ? 1 : 0]); - push[s] += ax._boundingBox.width; - } - - if(ax.title !== fullLayout._dfltTitle[axLetter]) { - push[s] += ax.titlefont.size; - } - - Plots.autoMargin(gd, pushKey, push); - } - - var done = Lib.syncOrAsync([ - allLabelsReady, - fixLabelOverlaps, - calcBoundingBox, - doAutoMargins - ]); - if(done && done.then) gd._promises.push(done); - return done; - } - - function drawAxTitle() { - if(skipTitle) return; - - // now this only applies to regular cartesian axes; colorbars and - // others ALWAYS call doTicks with skipTitle=true so they can - // configure their own titles. - - // rangeslider takes over a bottom title so drop it here - if(ax.rangeslider && ax.rangeslider.visible && ax._boundingBox && ax.side === 'bottom') return; - - var avoid = { - selection: tickLabels, - side: ax.side - }; - var axLetter = axid.charAt(0); - var gs = gd._fullLayout._size; - var offsetBase = 1.5; - var fontSize = ax.titlefont.size; - - var transform, counterAxis, x, y; - - if(tickLabels.size()) { - var translation = Drawing.getTranslate(tickLabels.node().parentNode); - avoid.offsetLeft = translation.x; - avoid.offsetTop = translation.y; - } - - var titleStandoff = 10 + fontSize * offsetBase + - (ax.linewidth ? ax.linewidth - 1 : 0); - - if(axLetter === 'x') { - counterAxis = (ax.anchor === 'free') ? - {_offset: gs.t + (1 - (ax.position || 0)) * gs.h, _length: 0} : - axisIds.getFromId(gd, ax.anchor); - - x = ax._offset + ax._length / 2; - - if(ax.side === 'top') { - y = -titleStandoff - fontSize * (ax.showticklabels ? 1 : 0); - } - else { - y = counterAxis._length + titleStandoff + - fontSize * (ax.showticklabels ? 1.5 : 0.5); - } - y += counterAxis._offset; - - if(!avoid.side) avoid.side = 'bottom'; - } - else { - counterAxis = (ax.anchor === 'free') ? - {_offset: gs.l + (ax.position || 0) * gs.w, _length: 0} : - axisIds.getFromId(gd, ax.anchor); - - y = ax._offset + ax._length / 2; - if(ax.side === 'right') { - x = counterAxis._length + titleStandoff + - fontSize * (ax.showticklabels ? 1 : 0.5); - } - else { - x = -titleStandoff - fontSize * (ax.showticklabels ? 0.5 : 0); - } - x += counterAxis._offset; - - transform = {rotate: '-90', offset: 0}; - if(!avoid.side) avoid.side = 'left'; - } - - Titles.draw(gd, axid + 'title', { - propContainer: ax, - propName: ax._name + '.title', - placeholder: fullLayout._dfltTitle[axLetter], - avoid: avoid, - transform: transform, - attributes: {x: x, y: y, 'text-anchor': 'middle'} - }); - } - - function drawGrid(plotinfo, counteraxis) { - if(fullLayout._hasOnlyLargeSploms) return; - - var gridcontainer = plotinfo.gridlayer.selectAll('.' + axid); - var zlcontainer = plotinfo.zerolinelayer; - var gridpath = ax._gridpath || ((axLetter === 'x' ? - ('M0,' + counteraxis._offset + 'v') : - ('M' + counteraxis._offset + ',0h') - ) + counteraxis._length); - var grid = gridcontainer.selectAll('path.' + gcls) - .data((ax.showgrid === false) ? [] : valsClipped, datafn); - grid.enter().append('path').classed(gcls, 1) - .classed('crisp', 1) - .attr('d', gridpath) - .each(function(d) { - if(ax.zeroline && (ax.type === 'linear' || ax.type === '-') && - Math.abs(d.x) < ax.dtick / 100) { - d3.select(this).remove(); - } - }); - grid.attr('transform', transfn) - .call(Color.stroke, ax.gridcolor || '#ddd') - .style('stroke-width', gridWidth + 'px'); - if(typeof gridpath === 'function') grid.attr('d', gridpath); - grid.exit().remove(); - - // zero line - if(zlcontainer) { - var zlData = {x: 0, id: axid}; - var showZl = axes.shouldShowZeroLine(gd, ax, counteraxis); - var zl = zlcontainer.selectAll('path.' + zcls) - .data(showZl ? [zlData] : []); - zl.enter().append('path').classed(zcls, 1).classed('zl', 1) - .classed('crisp', 1) - .attr('d', gridpath) - .each(function() { - // use the fact that only one element can enter to trigger a sort. - // If several zerolines enter at the same time we will sort once per, - // but generally this should be a minimal overhead. - zlcontainer.selectAll('path').sort(function(da, db) { - return axisIds.idSort(da.id, db.id); - }); - }); - zl.attr('transform', transfn) - .call(Color.stroke, ax.zerolinecolor || Color.defaultLine) - .style('stroke-width', zeroLineWidth + 'px'); - zl.exit().remove(); - } - } - - if(independent) { - drawTicks(ax._axislayer, tickpathfn(ax._pos + pad * ticksign[2], ticksign[2] * ax.ticklen)); - if(ax._counteraxis) { - var fictionalPlotinfo = { - gridlayer: ax._gridlayer, - zerolinelayer: ax._zerolinelayer - }; - drawGrid(fictionalPlotinfo, ax._counteraxis); - } - return drawLabels(ax._axislayer, ax._pos); - } - else if(fullLayout._has('cartesian')) { - subplots = axes.getSubplots(gd, ax); + var gridVals = ax._gridVals = valsClipped; + var dividerVals = getDividerVals(ax, vals); + if(!fullLayout._hasOnlyLargeSploms) { // keep track of which subplots (by main conteraxis) we've already // drawn grids for, so we don't overdraw overlaying subplots var finishedGrids = {}; - subplots.map(function(subplot) { - var plotinfo = fullLayout._plots[subplot]; - var counterAxis = plotinfo[counterLetter + 'axis']; + for(i = 0; i < subplotsWithAx.length; i++) { + sp = subplotsWithAx[i]; + plotinfo = fullLayout._plots[sp]; + var counterAxis = plotinfo[counterLetter + 'axis']; var mainCounterID = counterAxis._mainAxis._id; - if(finishedGrids[mainCounterID]) return; + if(finishedGrids[mainCounterID]) continue; finishedGrids[mainCounterID] = 1; - drawGrid(plotinfo, counterAxis, subplot); - }); + var gridPath = axLetter === 'x' ? + 'M0,' + counterAxis._offset + 'v' + counterAxis._length : + 'M' + counterAxis._offset + ',0h' + counterAxis._length; - var mainSubplot = ax._mainSubplot; - var mainPlotinfo = fullLayout._plots[mainSubplot]; - var tickSubplots = []; + axes.drawGrid(gd, ax, { + vals: gridVals, + counterAxis: counterAxis, + layer: plotinfo.gridlayer.select('.' + axId), + path: gridPath, + transFn: transFn + }); + axes.drawZeroLine(gd, ax, { + counterAxis: counterAxis, + layer: plotinfo.zerolinelayer, + path: gridPath, + transFn: transFn + }); + } + } - if(ax.ticks) { - var mainSign = ticksign[2]; - var tickpath = tickpathfn(ax._mainLinePosition + pad * mainSign, mainSign * ax.ticklen); - if(ax._anchorAxis && ax.mirror && ax.mirror !== true) { - tickpath += tickpathfn(ax._mainMirrorPosition - pad * mainSign, -mainSign * ax.ticklen); - } - drawTicks(mainPlotinfo[axLetter + 'axislayer'], tickpath); + var tickSigns = axes.getTickSigns(ax); + var tickSubplots = []; - tickSubplots = Object.keys(ax._linepositions || {}); + if(ax.ticks) { + var mainTickPath = axes.makeTickPath(ax, mainLinePosition, tickSigns[2]); + var mirrorTickPath; + var fullTickPath; + if(ax._anchorAxis && ax.mirror && ax.mirror !== true) { + mirrorTickPath = axes.makeTickPath(ax, mainMirrorPosition, tickSigns[3]); + fullTickPath = mainTickPath + mirrorTickPath; + } else { + mirrorTickPath = ''; + fullTickPath = mainTickPath; } - tickSubplots.map(function(subplot) { - var plotinfo = fullLayout._plots[subplot]; - - var container = plotinfo[axLetter + 'axislayer']; - - // [bottom or left, top or right] - // free and main are handled above - var linepositions = ax._linepositions[subplot] || []; - - function tickPathSide(sidei) { - var tsign = ticksign[sidei]; - return tickpathfn(linepositions[sidei] + pad * tsign, tsign * ax.ticklen); + var tickPath; + if(ax.showdividers && ax.ticks === 'outside' && ax.tickson === 'boundaries') { + var dividerLookup = {}; + for(i = 0; i < dividerVals.length; i++) { + dividerLookup[dividerVals[i].x] = 1; } + tickPath = function(d) { + return dividerLookup[d.x] ? mirrorTickPath : fullTickPath; + }; + } else { + tickPath = fullTickPath; + } - drawTicks(container, tickPathSide(0) + tickPathSide(1)); + axes.drawTicks(gd, ax, { + vals: tickVals, + layer: mainAxLayer, + path: tickPath, + transFn: transFn }); - var mainContainer = mainPlotinfo[axLetter + 'axislayer']; - - return drawLabels(mainContainer, ax._mainLinePosition); + tickSubplots = Object.keys(ax._linepositions || {}); } + + for(i = 0; i < tickSubplots.length; i++) { + sp = tickSubplots[i]; + plotinfo = fullLayout._plots[sp]; + // [bottom or left, top or right], free and main are handled above + var linepositions = ax._linepositions[sp] || []; + var spTickPath = axes.makeTickPath(ax, linepositions[0], tickSigns[0]) + + axes.makeTickPath(ax, linepositions[1], tickSigns[1]); + + axes.drawTicks(gd, ax, { + vals: tickVals, + layer: plotinfo[axLetter + 'axislayer'], + path: spTickPath, + transFn: transFn + }); + } + + var seq = []; + + // tick labels - for now just the main labels. + // TODO: mirror labels, esp for subplots + + seq.push(function() { + var labelFns = axes.makeLabelFns(ax, mainLinePosition); + return axes.drawLabels(gd, ax, { + vals: vals, + layer: mainAxLayer, + transFn: transFn, + labelXFn: labelFns.labelXFn, + labelYFn: labelFns.labelYFn, + labelAnchorFn: labelFns.labelAnchorFn, + }); + }); + + if(ax.type === 'multicategory') { + var labelLength = 0; + var pad = {x: 2, y: 10}[axLetter]; + var sgn = tickSigns[2] * (ax.ticks === 'inside' ? -1 : 1); + + seq.push(function() { + labelLength += getLabelLevelSpan(ax, axId + 'tick') + pad; + labelLength += ax._tickAngles[axId + 'tick'] ? ax.tickfont.size * LINE_SPACING : 0; + var secondaryPosition = mainLinePosition + labelLength * sgn; + var secondaryLabelFns = axes.makeLabelFns(ax, secondaryPosition); + + return axes.drawLabels(gd, ax, { + vals: getSecondaryLabelVals(ax, vals), + layer: mainAxLayer, + cls: axId + 'tick2', + repositionOnUpdate: true, + secondary: true, + transFn: transFn, + labelXFn: secondaryLabelFns.labelXFn, + labelYFn: secondaryLabelFns.labelYFn, + labelAnchorFn: secondaryLabelFns.labelAnchorFn, + }); + }); + + seq.push(function() { + labelLength += getLabelLevelSpan(ax, axId + 'tick2'); + ax._labelLength = labelLength; + + return drawDividers(gd, ax, { + vals: dividerVals, + layer: mainAxLayer, + path: axes.makeTickPath(ax, mainLinePosition, sgn, labelLength), + transFn: transFn + }); + }); + } + + function extendRange(range, newRange) { + range[0] = Math.min(range[0], newRange[0]); + range[1] = Math.max(range[1], newRange[1]); + } + + function calcBoundingBox() { + if(ax.showticklabels) { + var gdBB = gd.getBoundingClientRect(); + var bBox = mainAxLayer.node().getBoundingClientRect(); + + /* + * the way we're going to use this, the positioning that matters + * is relative to the origin of gd. This is important particularly + * if gd is scrollable, and may have been scrolled between the time + * we calculate this and the time we use it + */ + + ax._boundingBox = { + width: bBox.width, + height: bBox.height, + left: bBox.left - gdBB.left, + right: bBox.right - gdBB.left, + top: bBox.top - gdBB.top, + bottom: bBox.bottom - gdBB.top + }; + } else { + var gs = fullLayout._size; + var pos; + + // set dummy bbox for ticklabel-less axes + + if(axLetter === 'x') { + pos = ax.anchor === 'free' ? + gs.t + gs.h * (1 - ax.position) : + gs.t + gs.h * (1 - ax._anchorAxis.domain[{bottom: 0, top: 1}[ax.side]]); + + ax._boundingBox = { + top: pos, + bottom: pos, + left: ax._offset, + right: ax._offset + ax._length, + width: ax._length, + height: 0 + }; + } else { + pos = ax.anchor === 'free' ? + gs.l + gs.w * ax.position : + gs.l + gs.w * ax._anchorAxis.domain[{left: 0, right: 1}[ax.side]]; + + ax._boundingBox = { + left: pos, + right: pos, + bottom: ax._offset + ax._length, + top: ax._offset, + height: ax._length, + width: 0 + }; + } + } + + /* + * for spikelines: what's the full domain of positions in the + * opposite direction that are associated with this axis? + * This means any axes that we make a subplot with, plus the + * position of the axis itself if it's free. + */ + if(subplotsWithAx) { + var fullRange = ax._counterSpan = [Infinity, -Infinity]; + + for(var i = 0; i < subplotsWithAx.length; i++) { + var plotinfo = fullLayout._plots[subplotsWithAx[i]]; + var counterAxis = plotinfo[(axLetter === 'x') ? 'yaxis' : 'xaxis']; + + extendRange(fullRange, [ + counterAxis._offset, + counterAxis._offset + counterAxis._length + ]); + } + + if(ax.anchor === 'free') { + extendRange(fullRange, (axLetter === 'x') ? + [ax._boundingBox.bottom, ax._boundingBox.top] : + [ax._boundingBox.right, ax._boundingBox.left]); + } + } + } + + var hasRangeSlider = Registry.getComponentMethod('rangeslider', 'isVisible')(ax); + + function doAutoMargins() { + var s = ax.side.charAt(0); + var push; + var rangeSliderPush; + + if(hasRangeSlider) { + rangeSliderPush = Registry.getComponentMethod('rangeslider', 'autoMarginOpts')(gd, ax); + } + Plots.autoMargin(gd, rangeSliderAutoMarginID(ax), rangeSliderPush); + + if(ax.automargin && (!hasRangeSlider || s !== 'b')) { + push = {x: 0, y: 0, r: 0, l: 0, t: 0, b: 0}; + + var bbox = ax._boundingBox; + var counterAx = mainPlotinfo[counterLetter + 'axis']; + var anchorAxDomainIndex; + var offset; + + switch(axLetter + s) { + case 'xb': + anchorAxDomainIndex = 0; + offset = bbox.top - counterAx._length - counterAx._offset; + push[s] = bbox.height; + break; + case 'xt': + anchorAxDomainIndex = 1; + offset = counterAx._offset - bbox.bottom; + push[s] = bbox.height; + break; + case 'yl': + anchorAxDomainIndex = 0; + offset = counterAx._offset - bbox.right; + push[s] = bbox.width; + break; + case 'yr': + anchorAxDomainIndex = 1; + offset = bbox.left - counterAx._length - counterAx._offset; + push[s] = bbox.width; + break; + } + + push[counterLetter] = ax.anchor === 'free' ? + ax.position : + ax._anchorAxis.domain[anchorAxDomainIndex]; + + if(push[s] > 0) { + push[s] += offset; + } + if(ax.title.text !== fullLayout._dfltTitle[axLetter]) { + push[s] += ax.title.font.size; + } + } + + Plots.autoMargin(gd, axAutoMarginID(ax), push); + } + + seq.push(calcBoundingBox, doAutoMargins); + + if(!opts.skipTitle && + !(hasRangeSlider && ax._boundingBox && ax.side === 'bottom') + ) { + seq.push(function() { return drawTitle(gd, ax); }); + } + + return Lib.syncOrAsync(seq); }; +function getBoundaryVals(ax, vals) { + var out = []; + var i; + + // boundaryVals are never used for labels; + // no need to worry about the other tickTextObj keys + var _push = function(d, bndIndex) { + var xb = d.xbnd[bndIndex]; + if(xb !== null) { + out.push(Lib.extendFlat({}, d, {x: xb})); + } + }; + + if(vals.length) { + for(i = 0; i < vals.length; i++) { + _push(vals[i], 0); + } + _push(vals[i - 1], 1); + } + + return out; +} + +function getSecondaryLabelVals(ax, vals) { + var out = []; + var lookup = {}; + + for(var i = 0; i < vals.length; i++) { + var d = vals[i]; + if(lookup[d.text2]) { + lookup[d.text2].push(d.x); + } else { + lookup[d.text2] = [d.x]; + } + } + + for(var k in lookup) { + out.push(tickTextObj(ax, Lib.interp(lookup[k], 0.5), k)); + } + + return out; +} + +function getDividerVals(ax, vals) { + var out = []; + var i, current; + + // never used for labels; + // no need to worry about the other tickTextObj keys + var _push = function(d, bndIndex) { + var xb = d.xbnd[bndIndex]; + if(xb !== null) { + out.push(Lib.extendFlat({}, d, {x: xb})); + } + }; + + if(ax.showdividers && vals.length) { + for(i = 0; i < vals.length; i++) { + var d = vals[i]; + if(d.text2 !== current) { + _push(d, 0); + } + current = d.text2; + } + _push(vals[i - 1], 1); + } + + return out; +} + +function getLabelLevelSpan(ax, cls) { + var axLetter = ax._id.charAt(0); + var angle = ax._tickAngles[cls] || 0; + var rad = Lib.deg2rad(angle); + var sinA = Math.sin(rad); + var cosA = Math.cos(rad); + var maxX = 0; + var maxY = 0; + + // N.B. Drawing.bBox does not take into account rotate transforms + + ax._selections[cls].each(function() { + var thisLabel = selectTickLabel(this); + var bb = Drawing.bBox(thisLabel.node()); + var w = bb.width; + var h = bb.height; + maxX = Math.max(maxX, cosA * w, sinA * h); + maxY = Math.max(maxY, sinA * w, cosA * h); + }); + + return {x: maxY, y: maxX}[axLetter]; +} + +/** + * Which direction do the 'ax.side' values, and free ticks go? + * + * @param {object} ax (full) axis object + * - {string} _id (starting with 'x' or 'y') + * - {string} side + * - {string} ticks + * @return {array} all entries are either -1 or 1 + * - [0]: sign for top/right ticks (i.e. negative SVG direction) + * - [1]: sign for bottom/left ticks (i.e. positive SVG direction) + * - [2]: sign for ticks corresponding to 'ax.side' + * - [3]: sign for ticks mirroring 'ax.side' + */ +axes.getTickSigns = function(ax) { + var axLetter = ax._id.charAt(0); + var sideOpposite = {x: 'top', y: 'right'}[axLetter]; + var main = ax.side === sideOpposite ? 1 : -1; + var out = [-1, 1, main, -main]; + // then we flip if outside XOR y axis + if((ax.ticks !== 'inside') === (axLetter === 'x')) { + out = out.map(function(v) { return -v; }); + } + return out; +}; + +/** + * Make axis translate transform function + * + * @param {object} ax (full) axis object + * - {string} _id + * - {number} _offset + * - {fn} l2p + * @return {fn} function of calcTicks items + */ +axes.makeTransFn = function(ax) { + var axLetter = ax._id.charAt(0); + var offset = ax._offset; + return axLetter === 'x' ? + function(d) { return 'translate(' + (offset + ax.l2p(d.x)) + ',0)'; } : + function(d) { return 'translate(0,' + (offset + ax.l2p(d.x)) + ')'; }; +}; + +/** + * Make axis tick path string + * + * @param {object} ax (full) axis object + * - {string} _id + * - {number} ticklen + * - {number} linewidth + * @param {number} shift along direction of ticklen + * @param {1 or -1} sng tick sign + * @param {number (optional)} len tick length + * @return {string} + */ +axes.makeTickPath = function(ax, shift, sgn, len) { + len = len !== undefined ? len : ax.ticklen; + + var axLetter = ax._id.charAt(0); + var pad = (ax.linewidth || 1) / 2; + + return axLetter === 'x' ? + 'M0,' + (shift + pad * sgn) + 'v' + (len * sgn) : + 'M' + (shift + pad * sgn) + ',0h' + (len * sgn); +}; + +/** + * Make axis tick label x, y and anchor functions + * + * @param {object} ax (full) axis object + * - {string} _id + * - {string} ticks + * - {number} ticklen + * - {string} side + * - {number} linewidth + * - {number} tickfont.size + * - {boolean} showline + * @param {number} shift + * @param {number} angle [in degrees] ... + * @return {object} + * - {fn} labelXFn + * - {fn} labelYFn + * - {fn} labelAnchorFn + * - {number} labelStandoff + * - {number} labelShift + */ +axes.makeLabelFns = function(ax, shift, angle) { + var axLetter = ax._id.charAt(0); + var pad = (ax.linewidth || 1) / 2; + var ticksOnOutsideLabels = ax.tickson !== 'boundaries' && ax.ticks === 'outside'; + + var labelStandoff = ticksOnOutsideLabels ? ax.ticklen : 0; + var labelShift = 0; + + if(angle && ax.ticks === 'outside') { + var rad = Lib.deg2rad(angle); + labelStandoff = ax.ticklen * Math.cos(rad) + 1; + labelShift = ax.ticklen * Math.sin(rad); + } + + if(ax.showticklabels && (ticksOnOutsideLabels || ax.showline)) { + labelStandoff += 0.2 * ax.tickfont.size; + } + + // Used in polar angular label x/y functions + // TODO generalize makeLabelFns so that it just work for angular axes + var out = { + labelStandoff: labelStandoff, + labelShift: labelShift + }; + + var x0, y0, ff, flipIt; + if(axLetter === 'x') { + flipIt = ax.side === 'bottom' ? 1 : -1; + x0 = labelShift * flipIt; + y0 = shift + (labelStandoff + pad) * flipIt; + ff = ax.side === 'bottom' ? 1 : -0.2; + + out.labelXFn = function(d) { return d.dx + x0; }; + out.labelYFn = function(d) { return d.dy + y0 + d.fontSize * ff; }; + out.labelAnchorFn = function(a) { + if(!isNumeric(a) || a === 0 || a === 180) { + return 'middle'; + } + return (a * flipIt < 0) ? 'end' : 'start'; + }; + } else if(axLetter === 'y') { + flipIt = ax.side === 'right' ? 1 : -1; + x0 = labelStandoff + pad; + y0 = -labelShift * flipIt; + ff = Math.abs(ax.tickangle) === 90 ? 0.5 : 0; + + out.labelXFn = function(d) { return d.dx + shift + (x0 + d.fontSize * ff) * flipIt; }; + out.labelYFn = function(d) { return d.dy + y0 + d.fontSize * MID_SHIFT; }; + out.labelAnchorFn = function(a) { + if(isNumeric(a) && Math.abs(a) === 90) { + return 'middle'; + } + return ax.side === 'right' ? 'start' : 'end'; + }; + } + + return out; +}; + +function tickDataFn(d) { + return [d.text, d.x, d.axInfo, d.font, d.fontSize, d.fontColor].join('_'); +} + +/** + * Draw axis ticks + * + * @param {DOM element} gd + * @param {object} ax (full) axis object + * - {string} _id + * - {string} ticks + * - {number} linewidth + * - {string} tickcolor + * @param {object} opts + * - {array of object} vals (calcTicks output-like) + * - {d3 selection} layer + * - {string or fn} path + * - {fn} transFn + * - {boolean} crisp (set to false to unset crisp-edge SVG rendering) + */ +axes.drawTicks = function(gd, ax, opts) { + opts = opts || {}; + + var cls = ax._id + 'tick'; + + var ticks = opts.layer.selectAll('path.' + cls) + .data(ax.ticks ? opts.vals : [], tickDataFn); + + ticks.exit().remove(); + + ticks.enter().append('path') + .classed(cls, 1) + .classed('ticks', 1) + .classed('crisp', opts.crisp !== false) + .call(Color.stroke, ax.tickcolor) + .style('stroke-width', Drawing.crispRound(gd, ax.tickwidth, 1) + 'px') + .attr('d', opts.path); + + ticks.attr('transform', opts.transFn); +}; + +/** + * Draw axis grid + * + * @param {DOM element} gd + * @param {object} ax (full) axis object + * - {string} _id + * - {boolean} showgrid + * - {string} gridcolor + * - {string} gridwidth + * - {boolean} zeroline + * - {string} type + * - {string} dtick + * @param {object} opts + * - {array of object} vals (calcTicks output-like) + * - {d3 selection} layer + * - {object} counterAxis (full axis object corresponding to counter axis) + * optional - only required if this axis supports zero lines + * - {string or fn} path + * - {fn} transFn + * - {boolean} crisp (set to false to unset crisp-edge SVG rendering) + */ +axes.drawGrid = function(gd, ax, opts) { + opts = opts || {}; + + var cls = ax._id + 'grid'; + var vals = opts.vals; + var counterAx = opts.counterAxis; + if(ax.showgrid === false) { + vals = []; + } + else if(counterAx && axes.shouldShowZeroLine(gd, ax, counterAx)) { + var isArrayMode = ax.tickmode === 'array'; + for(var i = 0; i < vals.length; i++) { + var xi = vals[i].x; + if(isArrayMode ? !xi : (Math.abs(xi) < ax.dtick / 100)) { + vals = vals.slice(0, i).concat(vals.slice(i + 1)); + // In array mode you can in principle have multiple + // ticks at 0, so test them all. Otherwise once we found + // one we can stop. + if(isArrayMode) i--; + else break; + } + } + } + + var grid = opts.layer.selectAll('path.' + cls) + .data(vals, tickDataFn); + + grid.exit().remove(); + + grid.enter().append('path') + .classed(cls, 1) + .classed('crisp', opts.crisp !== false); + + ax._gw = Drawing.crispRound(gd, ax.gridwidth, 1); + + grid.attr('transform', opts.transFn) + .attr('d', opts.path) + .call(Color.stroke, ax.gridcolor || '#ddd') + .style('stroke-width', ax._gw + 'px'); + + if(typeof opts.path === 'function') grid.attr('d', opts.path); +}; + +/** + * Draw axis zero-line + * + * @param {DOM element} gd + * @param {object} ax (full) axis object + * - {string} _id + * - {boolean} zeroline + * - {number} zerolinewidth + * - {string} zerolinecolor + * - {number (optional)} _gridWidthCrispRound + * @param {object} opts + * - {d3 selection} layer + * - {object} counterAxis (full axis object corresponding to counter axis) + * - {string or fn} path + * - {fn} transFn + * - {boolean} crisp (set to false to unset crisp-edge SVG rendering) + */ +axes.drawZeroLine = function(gd, ax, opts) { + opts = opts || opts; + + var cls = ax._id + 'zl'; + var show = axes.shouldShowZeroLine(gd, ax, opts.counterAxis); + + var zl = opts.layer.selectAll('path.' + cls) + .data(show ? [{x: 0, id: ax._id}] : []); + + zl.exit().remove(); + + zl.enter().append('path') + .classed(cls, 1) + .classed('zl', 1) + .classed('crisp', opts.crisp !== false) + .each(function() { + // use the fact that only one element can enter to trigger a sort. + // If several zerolines enter at the same time we will sort once per, + // but generally this should be a minimal overhead. + opts.layer.selectAll('path').sort(function(da, db) { + return axisIds.idSort(da.id, db.id); + }); + }); + + zl.attr('transform', opts.transFn) + .attr('d', opts.path) + .call(Color.stroke, ax.zerolinecolor || Color.defaultLine) + .style('stroke-width', Drawing.crispRound(gd, ax.zerolinewidth, ax._gw || 1) + 'px'); +}; + +/** + * Draw axis tick labels + * + * @param {DOM element} gd + * @param {object} ax (full) axis object + * - {string} _id + * - {boolean} showticklabels + * - {number} tickangle + * - {object (optional)} _selections + * - {object} (optional)} _tickAngles + * @param {object} opts + * - {array of object} vals (calcTicks output-like) + * - {d3 selection} layer + * - {string (optional)} cls (node className) + * - {boolean} repositionOnUpdate (set to true to reposition update selection) + * - {boolean} secondary + * - {fn} transFn + * - {fn} labelXFn + * - {fn} labelYFn + * - {fn} labelAnchorFn + */ +axes.drawLabels = function(gd, ax, opts) { + opts = opts || {}; + + var axId = ax._id; + var axLetter = axId.charAt(0); + var cls = opts.cls || axId + 'tick'; + var vals = opts.vals; + var labelXFn = opts.labelXFn; + var labelYFn = opts.labelYFn; + var labelAnchorFn = opts.labelAnchorFn; + var tickAngle = opts.secondary ? 0 : ax.tickangle; + var lastAngle = (ax._tickAngles || {})[cls]; + + var tickLabels = opts.layer.selectAll('g.' + cls) + .data(ax.showticklabels ? vals : [], tickDataFn); + + var labelsReady = []; + + tickLabels.enter().append('g') + .classed(cls, 1) + .append('text') + // only so tex has predictable alignment that we can + // alter later + .attr('text-anchor', 'middle') + .each(function(d) { + var thisLabel = d3.select(this); + var newPromise = gd._promises.length; + + thisLabel + .call(svgTextUtils.positionText, labelXFn(d), labelYFn(d)) + .call(Drawing.font, d.font, d.fontSize, d.fontColor) + .text(d.text) + .call(svgTextUtils.convertToTspans, gd); + + if(gd._promises[newPromise]) { + // if we have an async label, we'll deal with that + // all here so take it out of gd._promises and + // instead position the label and promise this in + // labelsReady + labelsReady.push(gd._promises.pop().then(function() { + positionLabels(thisLabel, tickAngle); + })); + } else { + // sync label: just position it now. + positionLabels(thisLabel, tickAngle); + } + }); + + tickLabels.exit().remove(); + + if(opts.repositionOnUpdate) { + tickLabels.each(function(d) { + d3.select(this).select('text') + .call(svgTextUtils.positionText, labelXFn(d), labelYFn(d)); + }); + } + + // How much to shift a multi-line label to center it vertically. + function getAnchorHeight(lineCount, lineHeight, angle) { + var h = (lineCount - 1) * lineHeight; + if(axLetter === 'x') { + if(angle < -60 || 60 < angle) { + return -0.5 * h; + } else if(ax.side === 'top') { + return -h; + } + } else { + angle *= ax.side === 'left' ? 1 : -1; + if(angle < -30) { + return -h; + } else if(angle < 30) { + return -0.5 * h; + } + } + return 0; + } + + function positionLabels(s, angle) { + s.each(function(d) { + var thisLabel = d3.select(this); + var mathjaxGroup = thisLabel.select('.text-math-group'); + var anchor = labelAnchorFn(angle, d); + + var transform = opts.transFn.call(thisLabel.node(), d) + + ((isNumeric(angle) && +angle !== 0) ? + (' rotate(' + angle + ',' + labelXFn(d) + ',' + + (labelYFn(d) - d.fontSize / 2) + ')') : + ''); + + var anchorHeight = getAnchorHeight( + svgTextUtils.lineCount(thisLabel), + LINE_SPACING * d.fontSize, + isNumeric(angle) ? +angle : 0 + ); + + if(anchorHeight) { + transform += ' translate(0, ' + anchorHeight + ')'; + } + + if(mathjaxGroup.empty()) { + thisLabel.select('text').attr({ + transform: transform, + 'text-anchor': anchor + }); + } else { + var mjWidth = Drawing.bBox(mathjaxGroup.node()).width; + var mjShift = mjWidth * {end: -0.5, start: 0.5}[anchor]; + mathjaxGroup.attr('transform', transform + (mjShift ? 'translate(' + mjShift + ',0)' : '')); + } + }); + } + + // make sure all labels are correctly positioned at their base angle + // the positionLabels call above is only for newly drawn labels. + // do this without waiting, using the last calculated angle to + // minimize flicker, then do it again when we know all labels are + // there, putting back the prescribed angle to check for overlaps. + positionLabels(tickLabels, lastAngle || tickAngle); + + function allLabelsReady() { + return labelsReady.length && Promise.all(labelsReady); + } + + function fixLabelOverlaps() { + positionLabels(tickLabels, tickAngle); + + var autoangle = null; + + // check for auto-angling if x labels overlap + // don't auto-angle at all for log axes with + // base and digit format + if(vals.length && axLetter === 'x' && !isNumeric(tickAngle) && + (ax.type !== 'log' || String(ax.dtick).charAt(0) !== 'D') + ) { + autoangle = 0; + + var maxFontSize = 0; + var lbbArray = []; + var i; + + tickLabels.each(function(d) { + maxFontSize = Math.max(maxFontSize, d.fontSize); + + var x = ax.l2p(d.x); + var thisLabel = selectTickLabel(this); + var bb = Drawing.bBox(thisLabel.node()); + + lbbArray.push({ + // ignore about y, just deal with x overlaps + top: 0, + bottom: 10, + height: 10, + left: x - bb.width / 2, + // impose a 2px gap + right: x + bb.width / 2 + 2, + width: bb.width + 2 + }); + }); + + if((ax.tickson === 'boundaries' || ax.showdividers) && !opts.secondary) { + var gap = 2; + if(ax.ticks) gap += ax.tickwidth / 2; + + // TODO should secondary labels also fall into this fix-overlap regime? + + for(i = 0; i < lbbArray.length; i++) { + var xbnd = vals[i].xbnd; + var lbb = lbbArray[i]; + if( + (xbnd[0] !== null && (lbb.left - ax.l2p(xbnd[0])) < gap) || + (xbnd[1] !== null && (ax.l2p(xbnd[1]) - lbb.right) < gap) + ) { + autoangle = 90; + break; + } + } + } else { + var vLen = vals.length; + var tickSpacing = Math.abs((vals[vLen - 1].x - vals[0].x) * ax._m) / (vLen - 1); + var rotate90 = (tickSpacing < maxFontSize * 2.5) || ax.type === 'multicategory'; + + // any overlap at all - set 30 degrees or 90 degrees + for(i = 0; i < lbbArray.length - 1; i++) { + if(Lib.bBoxIntersect(lbbArray[i], lbbArray[i + 1])) { + autoangle = rotate90 ? 90 : 30; + break; + } + } + } + + if(autoangle) { + positionLabels(tickLabels, autoangle); + } + } + + if(ax._tickAngles) { + ax._tickAngles[cls] = autoangle === null ? + (isNumeric(tickAngle) ? tickAngle : 0) : + autoangle; + } + } + + if(ax._selections) { + ax._selections[cls] = tickLabels; + } + + var done = Lib.syncOrAsync([allLabelsReady, fixLabelOverlaps]); + if(done && done.then) gd._promises.push(done); + return done; +}; + +/** + * Draw axis dividers + * + * @param {DOM element} gd + * @param {object} ax (full) axis object + * - {string} _id + * - {string} showdividers + * - {number} dividerwidth + * - {string} dividercolor + * @param {object} opts + * - {array of object} vals (calcTicks output-like) + * - {d3 selection} layer + * - {fn} path + * - {fn} transFn + */ +function drawDividers(gd, ax, opts) { + var cls = ax._id + 'divider'; + var vals = opts.vals; + + var dividers = opts.layer.selectAll('path.' + cls) + .data(vals, tickDataFn); + + dividers.exit().remove(); + + dividers.enter().insert('path', ':first-child') + .classed(cls, 1) + .classed('crisp', 1) + .call(Color.stroke, ax.dividercolor) + .style('stroke-width', Drawing.crispRound(gd, ax.dividerwidth, 1) + 'px'); + + dividers + .attr('transform', opts.transFn) + .attr('d', opts.path); +} + +function drawTitle(gd, ax) { + var fullLayout = gd._fullLayout; + var axId = ax._id; + var axLetter = axId.charAt(0); + var gs = fullLayout._size; + var fontSize = ax.title.font.size; + + var titleStandoff; + if(ax.type === 'multicategory') { + titleStandoff = ax._labelLength; + } else { + var offsetBase = 1.5; + titleStandoff = 10 + fontSize * offsetBase + (ax.linewidth ? ax.linewidth - 1 : 0); + } + + var transform, counterAxis, x, y; + + if(axLetter === 'x') { + counterAxis = (ax.anchor === 'free') ? + {_offset: gs.t + (1 - (ax.position || 0)) * gs.h, _length: 0} : + axisIds.getFromId(gd, ax.anchor); + + x = ax._offset + ax._length / 2; + + if(ax.side === 'top') { + y = -titleStandoff - fontSize * (ax.showticklabels ? 1 : 0); + } else { + y = counterAxis._length + titleStandoff + + fontSize * (ax.showticklabels ? 1.5 : 0.5); + } + y += counterAxis._offset; + } else { + counterAxis = (ax.anchor === 'free') ? + {_offset: gs.l + (ax.position || 0) * gs.w, _length: 0} : + axisIds.getFromId(gd, ax.anchor); + + y = ax._offset + ax._length / 2; + + if(ax.side === 'right') { + x = counterAxis._length + titleStandoff + + fontSize * (ax.showticklabels ? 1 : 0.5); + } else { + x = -titleStandoff - fontSize * (ax.showticklabels ? 0.5 : 0); + } + x += counterAxis._offset; + + transform = {rotate: '-90', offset: 0}; + } + + var avoid; + + if(ax.type !== 'multicategory') { + var tickLabels = ax._selections[ax._id + 'tick']; + + avoid = { + selection: tickLabels, + side: ax.side + }; + + if(tickLabels && tickLabels.node() && tickLabels.node().parentNode) { + var translation = Drawing.getTranslate(tickLabels.node().parentNode); + avoid.offsetLeft = translation.x; + avoid.offsetTop = translation.y; + } + } + + return Titles.draw(gd, axId + 'title', { + propContainer: ax, + propName: ax._name + '.title.text', + placeholder: fullLayout._dfltTitle[axLetter], + avoid: avoid, + transform: transform, + attributes: {x: x, y: y, 'text-anchor': 'middle'} + }); +} + axes.shouldShowZeroLine = function(gd, ax, counterAxis) { var rng = Lib.simpleMap(ax.range, ax.r2l); return ( (rng[0] * rng[1] <= 0) && ax.zeroline && (ax.type === 'linear' || ax.type === '-') && - ax._valsClipped.length && + ax._gridVals.length && ( clipEnds(ax, 0) || !anyCounterAxLineAtZero(gd, ax, counterAxis, rng) || @@ -50049,6 +52154,10 @@ axes.shouldShowZeroLine = function(gd, ax, counterAxis) { ); }; +axes.clipEnds = function(ax, vals) { + return vals.filter(function(d) { return clipEnds(ax, d.x); }); +}; + function clipEnds(ax, l) { var p = ax.l2p(l); return (p > 1 && p < ax._length - 1); @@ -50124,6 +52233,12 @@ function hasBarsOrFill(gd, ax) { return false; } +function selectTickLabel(gTick) { + var s = d3.select(gTick); + var mj = s.select('.text-math-group'); + return mj.empty() ? s.select('text') : mj; +} + /** * Find all margin pushers for 2D axes and reserve them for later use * Both label and rangeslider automargin calculations happen later so @@ -50138,14 +52253,17 @@ axes.allowAutoMargin = function(gd) { for(var i = 0; i < axList.length; i++) { var ax = axList[i]; if(ax.automargin) { - Plots.allowAutoMargin(gd, ax._name + '.automargin'); + Plots.allowAutoMargin(gd, axAutoMarginID(ax)); } - if(ax.rangeslider && ax.rangeslider.visible) { - Plots.allowAutoMargin(gd, 'rangeslider' + ax._id); + if(Registry.getComponentMethod('rangeslider', 'isVisible')(ax)) { + Plots.allowAutoMargin(gd, rangeSliderAutoMarginID(ax)); } } }; +function axAutoMarginID(ax) { return ax._id + '.automargin'; } +function rangeSliderAutoMarginID(ax) { return ax._id + '.rangeslider'; } + // swap all the presentation attributes of the axes showing these traces axes.swap = function(gd, traces) { var axGroups = makeAxisGroups(gd, traces); @@ -50156,14 +52274,13 @@ axes.swap = function(gd, traces) { }; function makeAxisGroups(gd, traces) { - var groups = [], - i, - j; + var groups = []; + var i, j; for(i = 0; i < traces.length; i++) { - var groupsi = [], - xi = gd._fullData[traces[i]].xaxis, - yi = gd._fullData[traces[i]].yaxis; + var groupsi = []; + var xi = gd._fullData[traces[i]].xaxis; + var yi = gd._fullData[traces[i]].yaxis; if(!xi || !yi) continue; // not a 2D cartesian trace? for(j = 0; j < groups.length; j++) { @@ -50177,8 +52294,8 @@ function makeAxisGroups(gd, traces) { continue; } - var group0 = groups[groupsi[0]], - groupj; + var group0 = groups[groupsi[0]]; + var groupj; if(groupsi.length > 1) { for(j = 1; j < groupsi.length; j++) { @@ -50201,11 +52318,10 @@ function mergeAxisGroups(intoSet, fromSet) { } function swapAxisGroup(gd, xIds, yIds) { - var i, - j, - xFullAxes = [], - yFullAxes = [], - layout = gd.layout; + var xFullAxes = []; + var yFullAxes = []; + var layout = gd.layout; + var i, j; for(i = 0; i < xIds.length; i++) xFullAxes.push(axes.getFromId(gd, xIds[i])); for(i = 0; i < yIds.length; i++) yFullAxes.push(axes.getFromId(gd, yIds[i])); @@ -50218,12 +52334,12 @@ function swapAxisGroup(gd, xIds, yIds) { var numericTypes = ['linear', 'log']; for(i = 0; i < allAxKeys.length; i++) { - var keyi = allAxKeys[i], - xVal = xFullAxes[0][keyi], - yVal = yFullAxes[0][keyi], - allEqual = true, - coerceLinearX = false, - coerceLinearY = false; + var keyi = allAxKeys[i]; + var xVal = xFullAxes[0][keyi]; + var yVal = yFullAxes[0][keyi]; + var allEqual = true; + var coerceLinearX = false; + var coerceLinearY = false; if(keyi.charAt(0) === '_' || typeof xVal === 'function' || noSwapAttrs.indexOf(keyi) !== -1) { continue; @@ -50269,17 +52385,18 @@ function swapAxisAttrs(layout, key, xFullAxes, yFullAxes, dfltTitle) { // in case the value is the default for either axis, // look at the first axis in each list and see if // this key's value is undefined - var np = Lib.nestedProperty, - xVal = np(layout[xFullAxes[0]._name], key).get(), - yVal = np(layout[yFullAxes[0]._name], key).get(), - i; + var np = Lib.nestedProperty; + var xVal = np(layout[xFullAxes[0]._name], key).get(); + var yVal = np(layout[yFullAxes[0]._name], key).get(); + var i; + if(key === 'title') { // special handling of placeholder titles - if(xVal === dfltTitle.x) { - xVal = dfltTitle.y; + if(xVal && xVal.text === dfltTitle.x) { + xVal.text = dfltTitle.y; } - if(yVal === dfltTitle.y) { - yVal = dfltTitle.x; + if(yVal && yVal.text === dfltTitle.y) { + yVal.text = dfltTitle.x; } } @@ -50295,9 +52412,9 @@ function isAngular(ax) { return ax._id === 'angularaxis'; } -},{"../../components/color":50,"../../components/drawing":75,"../../components/titles":141,"../../constants/alignment":148,"../../constants/numerical":151,"../../lib":169,"../../lib/svg_text_utils":191,"../../plots/plots":246,"../../registry":259,"./autorange":213,"./axis_autotype":215,"./axis_ids":217,"./layout_attributes":226,"./set_convert":232,"d3":16,"fast-isnumeric":18}],215:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../components/titles":139,"../../constants/alignment":146,"../../constants/numerical":149,"../../lib":168,"../../lib/svg_text_utils":189,"../../plots/plots":245,"../../registry":257,"./autorange":211,"./axis_autotype":213,"./axis_ids":215,"./clean_ticks":217,"./layout_attributes":225,"./set_convert":231,"d3":16,"fast-isnumeric":18}],213:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50312,7 +52429,10 @@ var isNumeric = _dereq_('fast-isnumeric'); var Lib = _dereq_('../../lib'); var BADNUM = _dereq_('../../constants/numerical').BADNUM; -module.exports = function autoType(array, calendar) { +module.exports = function autoType(array, calendar, opts) { + opts = opts || {}; + + if(!opts.noMultiCategory && multiCategory(array)) return 'multicategory'; if(moreDates(array, calendar)) return 'date'; if(category(array)) return 'category'; if(linearOK(array)) return 'linear'; @@ -50336,15 +52456,20 @@ function linearOK(array) { // 2- or 4-digit integers can be both, so require twice as many // dates as non-dates, to exclude cases with mostly 2 & 4 digit // numbers and a few dates +// as with categories, consider DISTINCT values only. function moreDates(a, calendar) { - var dcnt = 0, - ncnt = 0, - // test at most 1000 points, evenly spaced - inc = Math.max(1, (a.length - 1) / 1000), - ai; + // test at most 1000 points, evenly spaced + var inc = Math.max(1, (a.length - 1) / 1000); + var dcnt = 0; + var ncnt = 0; + var seen = {}; for(var i = 0; i < a.length; i += inc) { - ai = a[Math.round(i)]; + var ai = a[Math.round(i)]; + var stri = String(ai); + if(seen[stri]) continue; + seen[stri] = 1; + if(Lib.isDateTime(ai, calendar)) dcnt += 1; if(isNumeric(ai)) ncnt += 1; } @@ -50353,26 +52478,38 @@ function moreDates(a, calendar) { } // are the (x,y)-values in gd.data mostly text? -// require twice as many categories as numbers +// require twice as many DISTINCT categories as distinct numbers function category(a) { // test at most 1000 points - var inc = Math.max(1, (a.length - 1) / 1000), - curvenums = 0, - curvecats = 0, - ai; + var inc = Math.max(1, (a.length - 1) / 1000); + var curvenums = 0; + var curvecats = 0; + var seen = {}; for(var i = 0; i < a.length; i += inc) { - ai = a[Math.round(i)]; - if(Lib.cleanNumber(ai) !== BADNUM) curvenums++; - else if(typeof ai === 'string' && ai !== '' && ai !== 'None') curvecats++; + var ai = a[Math.round(i)]; + var stri = String(ai); + if(seen[stri]) continue; + seen[stri] = 1; + + if(typeof ai === 'boolean') curvecats++; + else if(Lib.cleanNumber(ai) !== BADNUM) curvenums++; + else if(typeof ai === 'string') curvecats++; } return curvecats > curvenums * 2; } -},{"../../constants/numerical":151,"../../lib":169,"fast-isnumeric":18}],216:[function(_dereq_,module,exports){ +// very-loose requirements for multicategory, +// trace modules that should never auto-type to multicategory +// should be declared with 'noMultiCategory' +function multiCategory(a) { + return Lib.isArrayOrTypedArray(a[0]) && Lib.isArrayOrTypedArray(a[1]); +} + +},{"../../constants/numerical":149,"../../lib":168,"fast-isnumeric":18}],214:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50401,6 +52538,7 @@ var setConvert = _dereq_('./set_convert'); * outerTicks: boolean, should ticks default to outside? * showGrid: boolean, should gridlines be shown by default? * noHover: boolean, this axis doesn't support hover effects? + * noTickson: boolean, this axis doesn't support 'tickson' * data: the plot data, used to manage categories * bgColor: the plot background color, to calculate default gridline colors */ @@ -50441,8 +52579,8 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce, // try to get default title from splom trace, fallback to graph-wide value var dfltTitle = splomStash.label || layoutOut._dfltTitle[letter]; - coerce('title', dfltTitle); - Lib.coerceFont(coerce, 'titlefont', { + coerce('title.text', dfltTitle); + Lib.coerceFont(coerce, 'title.font', { family: font.family, size: Math.round(font.size * 1.2), color: dfltFontColor @@ -50462,12 +52600,31 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce, if(options.automargin) coerce('automargin'); + var isMultiCategory = containerOut.type === 'multicategory'; + + if(!options.noTickson && + (containerOut.type === 'category' || isMultiCategory) && + (containerOut.ticks || containerOut.showgrid) + ) { + var ticksonDflt; + if(isMultiCategory) ticksonDflt = 'boundaries'; + coerce('tickson', ticksonDflt); + } + + if(isMultiCategory) { + var showDividers = coerce('showdividers'); + if(showDividers) { + coerce('dividercolor'); + coerce('dividerwidth'); + } + } + return containerOut; }; -},{"../../lib":169,"../../registry":259,"./category_order_defaults":218,"./layout_attributes":226,"./line_grid_defaults":228,"./set_convert":232,"./tick_label_defaults":233,"./tick_mark_defaults":234,"./tick_value_defaults":235}],217:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"./category_order_defaults":216,"./layout_attributes":225,"./line_grid_defaults":227,"./set_convert":231,"./tick_label_defaults":232,"./tick_mark_defaults":233,"./tick_value_defaults":234}],215:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50583,9 +52740,9 @@ exports.idSort = function(id1, id2) { return +(id1.substr(1) || 1) - +(id2.substr(1) || 1); }; -},{"../../registry":259,"./constants":219}],218:[function(_dereq_,module,exports){ +},{"../../registry":257,"./constants":218}],216:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50677,9 +52834,98 @@ module.exports = function handleCategoryOrderDefaults(containerIn, containerOut, } }; -},{}],219:[function(_dereq_,module,exports){ +},{}],217:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); +var Lib = _dereq_('../../lib'); +var ONEDAY = _dereq_('../../constants/numerical').ONEDAY; + +/** + * Return a validated dtick value for this axis + * + * @param {any} dtick: the candidate dtick. valid values are numbers and strings, + * and further constrained depending on the axis type. + * @param {string} axType: the axis type + */ +exports.dtick = function(dtick, axType) { + var isLog = axType === 'log'; + var isDate = axType === 'date'; + var isCat = axType === 'category'; + var dtickDflt = isDate ? ONEDAY : 1; + + if(!dtick) return dtickDflt; + + if(isNumeric(dtick)) { + dtick = Number(dtick); + if(dtick <= 0) return dtickDflt; + if(isCat) { + // category dtick must be positive integers + return Math.max(1, Math.round(dtick)); + } + if(isDate) { + // date dtick must be at least 0.1ms (our current precision) + return Math.max(0.1, dtick); + } + return dtick; + } + + if(typeof dtick !== 'string' || !(isDate || isLog)) { + return dtickDflt; + } + + var prefix = dtick.charAt(0); + var dtickNum = dtick.substr(1); + dtickNum = isNumeric(dtickNum) ? Number(dtickNum) : 0; + + if((dtickNum <= 0) || !( + // "M" gives ticks every (integer) n months + (isDate && prefix === 'M' && dtickNum === Math.round(dtickNum)) || + // "L" gives ticks linearly spaced in data (not in position) every (float) f + (isLog && prefix === 'L') || + // "D1" gives powers of 10 with all small digits between, "D2" gives only 2 and 5 + (isLog && prefix === 'D' && (dtickNum === 1 || dtickNum === 2)) + )) { + return dtickDflt; + } + + return dtick; +}; + +/** + * Return a validated tick0 for this axis + * + * @param {any} tick0: the candidate tick0. Valid values are numbers and strings, + * further constrained depending on the axis type + * @param {string} axType: the axis type + * @param {string} calendar: for date axes, the calendar to validate/convert with + * @param {any} dtick: an already valid dtick. Only used for D1 and D2 log dticks, + * which do not support tick0 at all. + */ +exports.tick0 = function(tick0, axType, calendar, dtick) { + if(axType === 'date') { + return Lib.cleanDate(tick0, Lib.dateTick0(calendar)); + } + if(dtick === 'D1' || dtick === 'D2') { + // D1 and D2 modes ignore tick0 entirely + return undefined; + } + // Aside from date axes, tick0 must be numeric + return isNumeric(tick0) ? Number(tick0) : 0; +}; + +},{"../../constants/numerical":149,"../../lib":168,"fast-isnumeric":18}],218:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50759,9 +53005,9 @@ module.exports = { } }; -},{"../../lib/regex":185}],220:[function(_dereq_,module,exports){ +},{"../../lib/regex":183}],219:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -50913,9 +53159,9 @@ function updateConstraintGroups(constraintGroups, thisGroup, thisID, scaleanchor thisGroup[scaleanchor] = 1; } -},{"../../lib":169,"./axis_ids":217}],221:[function(_dereq_,module,exports){ +},{"../../lib":168,"./axis_ids":215}],220:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -51055,7 +53301,6 @@ exports.enforce = function enforceAxisConstraints(gd) { var getPad = makePadFn(ax); updateDomain(ax, factor); - ax.setScale(); var m = Math.abs(ax._m); var extremes = concatExtremes(gd, ax); var minArray = extremes.min; @@ -51122,11 +53367,12 @@ function updateDomain(ax, factor) { center + (inputDomain[0] - center) / factor, center + (inputDomain[1] - center) / factor ]; + ax.setScale(); } -},{"../../constants/alignment":148,"../../constants/numerical":151,"./autorange":213,"./axis_ids":217,"./scale_zoom":230}],222:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146,"../../constants/numerical":149,"./autorange":211,"./axis_ids":215,"./scale_zoom":229}],221:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -51143,17 +53389,18 @@ var supportsPassive = _dereq_('has-passive-events'); var Registry = _dereq_('../../registry'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); -var clearGlCanvases = _dereq_('../../lib/clear_gl_canvases'); var Color = _dereq_('../../components/color'); var Drawing = _dereq_('../../components/drawing'); var Fx = _dereq_('../../components/fx'); +var Axes = _dereq_('./axes'); var setCursor = _dereq_('../../lib/setcursor'); var dragElement = _dereq_('../../components/dragelement'); var FROM_TL = _dereq_('../../constants/alignment').FROM_TL; +var clearGlCanvases = _dereq_('../../lib/clear_gl_canvases'); +var redrawReglTraces = _dereq_('../../plot_api/subroutines').redrawReglTraces; var Plots = _dereq_('../plots'); -var doTicksSingle = _dereq_('./axes').doTicksSingle; var getFromId = _dereq_('./axis_ids').getFromId; var prepSelect = _dereq_('./select').prepSelect; var clearSelect = _dereq_('./select').clearSelect; @@ -51211,7 +53458,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { // do we need to edit x/y ranges? var editX, editY; // graph-wide optimization flags - var hasScatterGl, hasOnlyLargeSploms, hasSplom, hasSVG; + var hasScatterGl, hasSplom, hasSVG; // collected changes to be made to the plot by relayout at the end var updates; @@ -51252,8 +53499,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { var fullLayout = gd._fullLayout; hasScatterGl = fullLayout._has('scattergl'); - hasOnlyLargeSploms = fullLayout._hasOnlyLargeSploms; - hasSplom = hasOnlyLargeSploms || fullLayout._has('splom'); + hasSplom = fullLayout._has('splom'); hasSVG = fullLayout._has('svg'); } @@ -51369,12 +53615,12 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { } } else if(numClicks === 1 && singleEnd) { - var ax = ns ? ya0 : xa0, - end = (ns === 's' || ew === 'w') ? 0 : 1, - attrStr = ax._name + '.range[' + end + ']', - initialText = getEndText(ax, end), - hAlign = 'left', - vAlign = 'middle'; + var ax = ns ? ya0 : xa0; + var end = (ns === 's' || ew === 'w') ? 0 : 1; + var attrStr = ax._name + '.range[' + end + ']'; + var initialText = getEndText(ax, end); + var hAlign = 'left'; + var vAlign = 'middle'; if(ax.fixedrange) return; @@ -51398,7 +53644,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { .on('edit', function(text) { var v = ax.d2r(text); if(v !== undefined) { - Registry.call('relayout', gd, attrStr, v); + Registry.call('_guiRelayout', gd, attrStr, v); } }); } @@ -51443,10 +53689,10 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { return false; } - var x1 = Math.max(0, Math.min(pw, dx0 + x0)), - y1 = Math.max(0, Math.min(ph, dy0 + y0)), - dx = Math.abs(x1 - x0), - dy = Math.abs(y1 - y0); + var x1 = Math.max(0, Math.min(pw, dx0 + x0)); + var y1 = Math.max(0, Math.min(ph, dy0 + y0)); + var dx = Math.abs(x1 - x0); + var dy = Math.abs(y1 - y0); box.l = Math.min(x0, x1); box.r = Math.max(x0, x1); @@ -51544,7 +53790,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { // deactivate mousewheel scrolling on embedded graphs // devs can override this with layout._enablescrollzoom, // but _ ensures this setting won't leave their page - if(!gd._context.scrollZoom && !gd._fullLayout._enablescrollzoom) { + if(!gd._context._scrollZoom.cartesian && !gd._fullLayout._enablescrollzoom) { return; } @@ -51557,17 +53803,8 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { return; } - var pc = gd.querySelector('.plotly'); - recomputeAxisLists(); - // if the plot has scrollbars (more than a tiny excess) - // disable scrollzoom too. - if(pc.scrollHeight - pc.clientHeight > 10 || - pc.scrollWidth - pc.clientWidth > 10) { - return; - } - clearTimeout(redrawTimer); var wheelDelta = -e.deltaY; @@ -51577,18 +53814,17 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { return; } - var zoom = Math.exp(-Math.min(Math.max(wheelDelta, -20), 20) / 200), - gbb = mainplot.draglayer.select('.nsewdrag') - .node().getBoundingClientRect(), - xfrac = (e.clientX - gbb.left) / gbb.width, - yfrac = (gbb.bottom - e.clientY) / gbb.height, - i; + var zoom = Math.exp(-Math.min(Math.max(wheelDelta, -20), 20) / 200); + var gbb = mainplot.draglayer.select('.nsewdrag').node().getBoundingClientRect(); + var xfrac = (e.clientX - gbb.left) / gbb.width; + var yfrac = (gbb.bottom - e.clientY) / gbb.height; + var i; function zoomWheelOneAxis(ax, centerFraction, zoom) { if(ax.fixedrange) return; - var axRange = Lib.simpleMap(ax.range, ax.r2l), - v0 = axRange[0] + (axRange[1] - axRange[0]) * centerFraction; + var axRange = Lib.simpleMap(ax.range, ax.r2l); + var v0 = axRange[0] + (axRange[1] - axRange[0]) * centerFraction; function doZoom(v) { return ax.l2r(v0 + (v - v0) * zoom); } ax.range = axRange.map(doZoom); } @@ -51618,7 +53854,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { // viewbox redraw at first updateSubplots(scrollViewBox); - ticksAndAnnotations(ns, ew); + ticksAndAnnotations(); // then replot after a delay to make sure // no more scrolling is coming @@ -51643,11 +53879,14 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { return; } + // prevent axis drawing from monkeying with margins until we're done + gd._fullLayout._replotting = true; + if(xActive === 'ew' || yActive === 'ns') { if(xActive) dragAxList(xaxes, dx); if(yActive) dragAxList(yaxes, dy); updateSubplots([xActive ? -dx : 0, yActive ? -dy : 0, pw, ph]); - ticksAndAnnotations(yActive, xActive); + ticksAndAnnotations(); return; } @@ -51657,9 +53896,9 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { // TODO: this makes (generally non-fatal) errors when you get // near floating point limits function dz(axArray, end, d) { - var otherEnd = 1 - end, - movedAx, - newLinearizedEnd; + var otherEnd = 1 - end; + var movedAx; + var newLinearizedEnd; for(var i = 0; i < axArray.length; i++) { var axi = axArray[i]; if(axi.fixedrange) continue; @@ -51719,14 +53958,14 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { } updateSubplots([x0, y0, pw - dx, ph - dy]); - ticksAndAnnotations(yActive, xActive); + ticksAndAnnotations(); } // Draw ticks and annotations (and other components) when ranges change. // Also records the ranges that have changed for use by update at the end. - function ticksAndAnnotations(ns, ew) { - var activeAxIds = [], - i; + function ticksAndAnnotations() { + var activeAxIds = []; + var i; function pushActiveAxIds(axList) { for(i = 0; i < axList.length; i++) { @@ -51746,39 +53985,21 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { updates = {}; for(i = 0; i < activeAxIds.length; i++) { var axId = activeAxIds[i]; - doTicksSingle(gd, axId, true); var ax = getFromId(gd, axId); + Axes.drawOne(gd, ax, {skipTitle: true}); updates[ax._name + '.range[0]'] = ax.range[0]; updates[ax._name + '.range[1]'] = ax.range[1]; } - function redrawObjs(objArray, method, shortCircuit) { - for(i = 0; i < objArray.length; i++) { - var obji = objArray[i]; - - if((ew && activeAxIds.indexOf(obji.xref) !== -1) || - (ns && activeAxIds.indexOf(obji.yref) !== -1)) { - method(gd, i); - // once is enough for images (which doesn't use the `i` arg anyway) - if(shortCircuit) return; - } - } - } - - // annotations and shapes 'draw' method is slow, - // use the finer-grained 'drawOne' method instead - - redrawObjs(gd._fullLayout.annotations || [], Registry.getComponentMethod('annotations', 'drawOne')); - redrawObjs(gd._fullLayout.shapes || [], Registry.getComponentMethod('shapes', 'drawOne')); - redrawObjs(gd._fullLayout.images || [], Registry.getComponentMethod('images', 'draw'), true); + Axes.redrawComponents(gd, activeAxIds); } function doubleClick() { if(gd._transitioningWithDuration) return; - var doubleClickConfig = gd._context.doubleClick, - axList = (xActive ? xaxes : []).concat(yActive ? yaxes : []), - attrs = {}; + var doubleClickConfig = gd._context.doubleClick; + var axList = (xActive ? xaxes : []).concat(yActive ? yaxes : []); + var attrs = {}; var ax, i, rangeInitial; @@ -51827,19 +54048,20 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { for(i = 0; i < axList.length; i++) { ax = axList[i]; - if(!ax._rangeInitial) { - attrs[ax._name + '.autorange'] = true; - } - else { - rangeInitial = ax._rangeInitial; - attrs[ax._name + '.range[0]'] = rangeInitial[0]; - attrs[ax._name + '.range[1]'] = rangeInitial[1]; + if(!ax.fixedrange) { + if(!ax._rangeInitial) { + attrs[ax._name + '.autorange'] = true; + } else { + rangeInitial = ax._rangeInitial; + attrs[ax._name + '.range[0]'] = rangeInitial[0]; + attrs[ax._name + '.range[1]'] = rangeInitial[1]; + } } } } gd.emit('plotly_doubleclick', null); - Registry.call('relayout', gd, attrs); + Registry.call('_guiRelayout', gd, attrs); } // dragTail - finish a drag event with a redraw @@ -51853,7 +54075,10 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { // accumulated MathJax promises - wait for them before we relayout. Lib.syncOrAsync([ Plots.previousPromises, - function() { Registry.call('relayout', gd, updates); } + function() { + gd._fullLayout._replotting = false; + Registry.call('_guiRelayout', gd, updates); + } ], gd); } @@ -51871,33 +54096,29 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) { var subplots = fullLayout._subplots.cartesian; var i, sp, xa, ya; - if(hasSplom || hasScatterGl) { - clearGlCanvases(gd); - } - if(hasSplom) { Registry.subplotsRegistry.splom.drag(gd); - if(hasOnlyLargeSploms) return; } if(hasScatterGl) { - // loop over all subplots (w/o exceptions) here, - // as we cleared the gl canvases above for(i = 0; i < subplots.length; i++) { sp = plotinfos[subplots[i]]; xa = sp.xaxis; ya = sp.yaxis; - var scene = sp._scene; - if(scene) { - // FIXME: possibly we could update axis internal _r and _rl here + if(sp._scene) { var xrng = Lib.simpleMap(xa.range, xa.r2l); var yrng = Lib.simpleMap(ya.range, ya.r2l); - scene.update({range: [xrng[0], yrng[0], xrng[1], yrng[1]]}); + sp._scene.update({range: [xrng[0], yrng[0], xrng[1], yrng[1]]}); } } } + if(hasSplom || hasScatterGl) { + clearGlCanvases(gd); + redrawReglTraces(gd); + } + if(hasSVG) { var xScaleFactor = viewBox[2] / xa0._length; var yScaleFactor = viewBox[3] / ya0._length; @@ -52028,9 +54249,9 @@ function isDirectionActive(axList, activeVal) { } function getEndText(ax, end) { - var initialVal = ax.range[end], - diff = Math.abs(initialVal - ax.range[1 - end]), - dig; + var initialVal = ax.range[end]; + var diff = Math.abs(initialVal - ax.range[1 - end]); + var dig; // TODO: this should basically be ax.r2d but we're doing extra // rounding here... can we clean up at all? @@ -52315,9 +54536,9 @@ module.exports = { attachWheelEventHandler: attachWheelEventHandler }; -},{"../../components/color":50,"../../components/dragelement":72,"../../components/drawing":75,"../../components/fx":92,"../../constants/alignment":148,"../../lib":169,"../../lib/clear_gl_canvases":157,"../../lib/setcursor":189,"../../lib/svg_text_utils":191,"../../registry":259,"../plots":246,"./axes":214,"./axis_ids":217,"./constants":219,"./scale_zoom":230,"./select":231,"d3":16,"has-passive-events":21,"tinycolor2":33}],223:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/dragelement":69,"../../components/drawing":72,"../../components/fx":90,"../../constants/alignment":146,"../../lib":168,"../../lib/clear_gl_canvases":157,"../../lib/setcursor":187,"../../lib/svg_text_utils":189,"../../plot_api/subroutines":203,"../../registry":257,"../plots":245,"./axes":212,"./axis_ids":215,"./constants":218,"./scale_zoom":229,"./select":230,"d3":16,"has-passive-events":21,"tinycolor2":34}],222:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -52351,8 +54572,8 @@ exports.initInteractions = function initInteractions(gd) { // sort overlays last, then by x axis number, then y axis number if((fullLayout._plots[a].mainplot && true) === (fullLayout._plots[b].mainplot && true)) { - var aParts = a.split('y'), - bParts = b.split('y'); + var aParts = a.split('y'); + var bParts = b.split('y'); return (aParts[0] === bParts[0]) ? (Number(aParts[1] || 1) - Number(bParts[1] || 1)) : (Number(aParts[0] || 1) - Number(bParts[0] || 1)); @@ -52483,9 +54704,9 @@ exports.updateFx = function(gd) { setCursor(fullLayout._draggers, cursor); }; -},{"../../components/dragelement":72,"../../components/fx":92,"../../lib/setcursor":189,"./constants":219,"./dragbox":222,"d3":16}],224:[function(_dereq_,module,exports){ +},{"../../components/dragelement":69,"../../components/fx":90,"../../lib/setcursor":187,"./constants":218,"./dragbox":221,"d3":16}],223:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -52558,9 +54779,9 @@ module.exports = function makeIncludeComponents(containerArrayName) { }; }; -},{"../../lib":169,"../../registry":259}],225:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],224:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -52823,7 +55044,7 @@ function plotOne(gd, plotinfo, cdSubplot, transitionOpts, makeOnCompleteCallback // layers that allow `cliponaxis: false` if(className !== 'scatterlayer' && className !== 'barlayer') { - Drawing.setClipUrl(sel, plotinfo.layerClipId); + Drawing.setClipUrl(sel, plotinfo.layerClipId, gd); } }); @@ -53025,7 +55246,6 @@ function makeSubplotLayer(gd, plotinfo) { // and other places // - we don't (x|y)lines and (x|y)axislayer for most subplots // usually just the bottom x and left y axes. - plotinfo.plot = ensureSingle(plotgroup, 'g', 'plot'); plotinfo.xlines = ensureSingle(plotgroup, 'path', 'xlines-above'); plotinfo.ylines = ensureSingle(plotgroup, 'path', 'ylines-above'); plotinfo.xaxislayer = ensureSingle(plotgroup, 'g', 'xaxislayer-above'); @@ -53182,9 +55402,9 @@ exports.toSVG = function(gd) { exports.updateFx = _dereq_('./graph_interact').updateFx; -},{"../../components/drawing":75,"../../constants/xmlns_namespaces":152,"../../lib":169,"../../registry":259,"../get_data":242,"../plots":246,"./attributes":212,"./axis_ids":217,"./constants":219,"./graph_interact":223,"./layout_attributes":226,"./layout_defaults":227,"./transition_axes":236,"d3":16}],226:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../constants/xmlns_namespaces":150,"../../lib":168,"../../registry":257,"../get_data":241,"../plots":245,"./attributes":210,"./axis_ids":215,"./constants":218,"./graph_interact":222,"./layout_attributes":225,"./layout_defaults":226,"./transition_axes":235,"d3":16}],225:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53217,21 +55437,24 @@ module.exports = { }, title: { - valType: 'string', - - editType: 'ticks', - + text: { + valType: 'string', + + editType: 'ticks', + + }, + font: fontAttrs({ + editType: 'ticks', + + }), + editType: 'ticks' }, - titlefont: fontAttrs({ - editType: 'ticks', - - }), type: { valType: 'enumerated', // '-' means we haven't yet run autotype or couldn't find any data // it gets turned into linear in gd._fullLayout but not copied back // to gd.data like the others are. - values: ['-', 'linear', 'log', 'date', 'category'], + values: ['-', 'linear', 'log', 'date', 'category', 'multicategory'], dflt: '-', editType: 'calc', @@ -53263,11 +55486,12 @@ module.exports = { valType: 'info_array', items: [ - {valType: 'any', editType: 'axrange', impliedEdits: {'^autorange': false}}, - {valType: 'any', editType: 'axrange', impliedEdits: {'^autorange': false}} + {valType: 'any', editType: 'axrange', impliedEdits: {'^autorange': false}, anim: true}, + {valType: 'any', editType: 'axrange', impliedEdits: {'^autorange': false}, anim: true} ], editType: 'axrange', impliedEdits: {'autorange': false}, + anim: true, }, fixedrange: { @@ -53360,6 +55584,14 @@ module.exports = { editType: 'ticks', + }, + tickson: { + valType: 'enumerated', + values: ['labels', 'boundaries'], + + dflt: 'labels', + editType: 'ticks', + }, mirror: { valType: 'enumerated', @@ -53613,6 +55845,30 @@ module.exports = { editType: 'ticks', }, + + showdividers: { + valType: 'boolean', + dflt: true, + + editType: 'ticks', + + }, + dividercolor: { + valType: 'color', + dflt: colorAttrs.defaultLine, + + editType: 'ticks', + + }, + dividerwidth: { + valType: 'number', + dflt: 1, + + editType: 'ticks', + + }, + // TODO dividerlen: that would override "to label base" length? + // positioning attributes // anchor: not used directly, just put here for reference // values are any opposite-letter axis id @@ -53694,6 +55950,12 @@ module.exports = { editType: 'calc', + }, + uirevision: { + valType: 'any', + + editType: 'none', + }, editType: 'calc', @@ -53703,13 +55965,23 @@ module.exports = { editType: 'ticks', - } + }, + title: { + valType: 'string', + + editType: 'ticks', + + }, + titlefont: fontAttrs({ + editType: 'ticks', + + }) } }; -},{"../../components/color/attributes":49,"../../components/drawing/attributes":74,"../../lib/extend":163,"../../plot_api/plot_template":204,"../font_attributes":240,"./constants":219}],227:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../components/drawing/attributes":71,"../../lib/extend":162,"../../plot_api/plot_template":202,"../font_attributes":239,"./constants":218}],226:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53812,12 +56084,12 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { // plot_bgcolor only makes sense if there's a (2D) plot! // TODO: bgcolor for each subplot, to inherit from the main one - var plot_bgcolor = Color.background; + var plotBgColor = Color.background; if(xIds.length && yIds.length) { - plot_bgcolor = Lib.coerce(layoutIn, layoutOut, basePlotLayoutAttributes, 'plot_bgcolor'); + plotBgColor = Lib.coerce(layoutIn, layoutOut, basePlotLayoutAttributes, 'plot_bgcolor'); } - var bgColor = Color.combine(plot_bgcolor, layoutOut.paper_bgcolor); + var bgColor = Color.combine(plotBgColor, layoutOut.paper_bgcolor); var axName, axLetter, axLayoutIn, axLayoutOut; @@ -53866,9 +56138,12 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { axLayoutOut._traceIndices = traces.map(function(t) { return t._expandedIndex; }); axLayoutOut._annIndices = []; axLayoutOut._shapeIndices = []; + axLayoutOut._imgIndices = []; + axLayoutOut._subplotsWith = []; + axLayoutOut._counterAxes = []; // set up some private properties - axLayoutOut._name = axName; + axLayoutOut._name = axLayoutOut._attr = axName; var id = axLayoutOut._id = name2id(axName); var overlayableAxes = getOverlayableAxes(axLetter, axName); @@ -53886,15 +56161,17 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { splomStash: ((layoutOut._splomAxes || {})[axLetter] || {})[id] }; + coerce('uirevision', layoutOut.uirevision); + handleTypeDefaults(axLayoutIn, axLayoutOut, coerce, defaultOptions); handleAxisDefaults(axLayoutIn, axLayoutOut, coerce, defaultOptions, layoutOut); - var spikecolor = coerce2('spikecolor'), - spikethickness = coerce2('spikethickness'), - spikedash = coerce2('spikedash'), - spikemode = coerce2('spikemode'), - spikesnap = coerce2('spikesnap'), - showSpikes = coerce('showspikes', !!spikecolor || !!spikethickness || !!spikedash || !!spikemode || !!spikesnap); + var spikecolor = coerce2('spikecolor'); + var spikethickness = coerce2('spikethickness'); + var spikedash = coerce2('spikedash'); + var spikemode = coerce2('spikemode'); + var spikesnap = coerce2('spikesnap'); + var showSpikes = coerce('showspikes', !!spikecolor || !!spikethickness || !!spikedash || !!spikemode || !!spikesnap); if(!showSpikes) { delete axLayoutOut.spikecolor; @@ -53947,11 +56224,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { var anchoredAxis = layoutOut[id2name(axLayoutOut.anchor)]; - var fixedRangeDflt = ( - anchoredAxis && - anchoredAxis.rangeslider && - anchoredAxis.rangeslider.visible - ); + var fixedRangeDflt = getComponentMethod('rangeslider', 'isVisible')(anchoredAxis); coerce('fixedrange', fixedRangeDflt); } @@ -53976,9 +56249,9 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { } }; -},{"../../components/color":50,"../../lib":169,"../../plot_api/plot_template":204,"../../registry":259,"../layout_attributes":244,"./axis_defaults":216,"./axis_ids":217,"./constraint_defaults":220,"./layout_attributes":226,"./position_defaults":229,"./type_defaults":237}],228:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../../plot_api/plot_template":202,"../../registry":257,"../layout_attributes":243,"./axis_defaults":214,"./axis_ids":215,"./constraint_defaults":219,"./layout_attributes":225,"./position_defaults":228,"./type_defaults":236}],227:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54041,9 +56314,9 @@ module.exports = function handleLineGridDefaults(containerIn, containerOut, coer } }; -},{"../../components/color/attributes":49,"../../lib":169,"tinycolor2":33}],229:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../lib":168,"tinycolor2":34}],228:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54116,7 +56389,11 @@ module.exports = function handlePositionDefaults(containerIn, containerOut, coer // in the axes popover to hide domain for the overlaying axis. // perhaps I should make a private version _domain that all axes get??? var domain = coerce('domain', dfltDomain); - if(domain[0] > domain[1] - 0.01) containerOut.domain = dfltDomain; + + // according to https://www.npmjs.com/package/canvas-size + // the minimum value of max canvas width across browsers and devices is 4096 + // which applied in the calculation below: + if(domain[0] > domain[1] - 1 / 4096) containerOut.domain = dfltDomain; Lib.noneOrAll(containerIn.domain, containerOut.domain, dfltDomain); } @@ -54125,9 +56402,9 @@ module.exports = function handlePositionDefaults(containerIn, containerOut, coer return containerOut; }; -},{"../../lib":169,"fast-isnumeric":18}],230:[function(_dereq_,module,exports){ +},{"../../lib":168,"fast-isnumeric":18}],229:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54153,9 +56430,9 @@ module.exports = function scaleZoom(ax, factor, centerFraction) { ]; }; -},{"../../constants/alignment":148}],231:[function(_dereq_,module,exports){ +},{"../../constants/alignment":146}],230:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54175,7 +56452,8 @@ var polygon = _dereq_('../../lib/polygon'); var throttle = _dereq_('../../lib/throttle'); var makeEventData = _dereq_('../../components/fx/helpers').makeEventData; var getFromId = _dereq_('./axis_ids').getFromId; -var sortModules = _dereq_('../sort_modules').sortModules; +var clearGlCanvases = _dereq_('../../lib/clear_gl_canvases'); +var redrawReglTraces = _dereq_('../../plot_api/subroutines').redrawReglTraces; var constants = _dereq_('./constants'); var MINSELECT = constants.MINSELECT; @@ -54281,8 +56559,8 @@ function prepSelect(e, startX, startY, dragOptions, mode) { x1 = Math.max(0, Math.min(pw, dx0 + x0)); y1 = Math.max(0, Math.min(ph, dy0 + y0)); - var dx = Math.abs(x1 - x0), - dy = Math.abs(y1 - y0); + var dx = Math.abs(x1 - x0); + var dy = Math.abs(y1 - y0); if(mode === 'select') { var direction = fullLayout.selectdirection; @@ -54358,7 +56636,9 @@ function prepSelect(e, startX, startY, dragOptions, mode) { function() { selection = []; - var thisSelection, traceSelections = [], traceSelection; + var thisSelection; + var traceSelections = []; + var traceSelection; for(i = 0; i < searchTraces.length; i++) { searchInfo = searchTraces[i]; @@ -54670,7 +56950,9 @@ function determineSearchTraces(gd, xAxes, yAxes, subplot) { // FIXME: make sure we don't have more than single axis for splom trace._xaxes[xAxisIds[0]] && trace._yaxes[yAxisIds[0]] ) { - searchTraces.push(createSearchInfo(trace._module, cd, xAxes[0], yAxes[0])); + var info = createSearchInfo(trace._module, cd, xAxes[0], yAxes[0]); + info.scene = gd._fullLayout._splomScenes[trace.uid]; + searchTraces.push(info); } else { if(xAxisIds.indexOf(trace.xaxis) === -1) continue; if(yAxisIds.indexOf(trace.yaxis) === -1) continue; @@ -54817,15 +57099,24 @@ function isOnlyOnePointSelected(searchTraces) { } function updateSelectedState(gd, searchTraces, eventData) { - var i, j, searchInfo, trace; + var i, searchInfo, cd, trace; + + // before anything else, update preGUI if necessary + for(i = 0; i < searchTraces.length; i++) { + var fullInputTrace = searchTraces[i].cd[0].trace._fullInput; + var tracePreGUI = gd._fullLayout._tracePreGUI[fullInputTrace.uid]; + if(tracePreGUI.selectedpoints === undefined) { + tracePreGUI.selectedpoints = fullInputTrace._input.selectedpoints || null; + } + } if(eventData) { var pts = eventData.points || []; for(i = 0; i < searchTraces.length; i++) { trace = searchTraces[i].cd[0].trace; - trace.selectedpoints = []; - trace._input.selectedpoints = []; + trace._input.selectedpoints = trace._fullInput.selectedpoints = []; + if(trace._fullInput !== trace) trace.selectedpoints = []; } for(i = 0; i < pts.length; i++) { @@ -54835,10 +57126,14 @@ function updateSelectedState(gd, searchTraces, eventData) { if(pt.pointIndices) { [].push.apply(data.selectedpoints, pt.pointIndices); - [].push.apply(fullData.selectedpoints, pt.pointIndices); + if(trace._fullInput !== trace) { + [].push.apply(fullData.selectedpoints, pt.pointIndices); + } } else { data.selectedpoints.push(pt.pointIndex); - fullData.selectedpoints.push(pt.pointIndex); + if(trace._fullInput !== trace) { + fullData.selectedpoints.push(pt.pointIndex); + } } } } @@ -54847,46 +57142,31 @@ function updateSelectedState(gd, searchTraces, eventData) { trace = searchTraces[i].cd[0].trace; delete trace.selectedpoints; delete trace._input.selectedpoints; + if(trace._fullInput !== trace) { + delete trace._fullInput.selectedpoints; + } } } - // group searchInfo traces by trace modules - var lookup = {}; + var hasRegl = false; for(i = 0; i < searchTraces.length; i++) { searchInfo = searchTraces[i]; + cd = searchInfo.cd; + trace = cd[0].trace; - var name = searchInfo._module.name; - if(lookup[name]) { - lookup[name].push(searchInfo); - } else { - lookup[name] = [searchInfo]; + if(Registry.traceIs(trace, 'regl')) { + hasRegl = true; } + + var _module = searchInfo._module; + var fn = _module.styleOnSelect || _module.style; + if(fn) fn(gd, cd); } - var keys = Object.keys(lookup).sort(sortModules); - - for(i = 0; i < keys.length; i++) { - var items = lookup[keys[i]]; - var len = items.length; - var item0 = items[0]; - var trace0 = item0.cd[0].trace; - var _module = item0._module; - var styleSelection = _module.styleOnSelect || _module.style; - - if(Registry.traceIs(trace0, 'regl')) { - // plot regl traces per module - var cds = new Array(len); - for(j = 0; j < len; j++) { - cds[j] = items[j].cd; - } - styleSelection(gd, cds); - } else { - // plot svg trace per trace - for(j = 0; j < len; j++) { - styleSelection(gd, items[j].cd); - } - } + if(hasRegl) { + clearGlCanvases(gd); + redrawReglTraces(gd); } } @@ -54942,9 +57222,9 @@ module.exports = { selectOnClick: selectOnClick }; -},{"../../components/color":50,"../../components/fx":92,"../../components/fx/helpers":89,"../../lib/polygon":182,"../../lib/throttle":192,"../../registry":259,"../sort_modules":253,"./axis_ids":217,"./constants":219,"polybooljs":24}],232:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":90,"../../components/fx/helpers":86,"../../lib/clear_gl_canvases":157,"../../lib/polygon":180,"../../lib/throttle":190,"../../plot_api/subroutines":203,"../../registry":257,"./axis_ids":215,"./constants":218,"polybooljs":25}],231:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54962,6 +57242,7 @@ var cleanNumber = Lib.cleanNumber; var ms2DateTime = Lib.ms2DateTime; var dateTime2ms = Lib.dateTime2ms; var ensureNumber = Lib.ensureNumber; +var isArrayOrTypedArray = Lib.isArrayOrTypedArray; var numConstants = _dereq_('../../constants/numerical'); var FP_SAFE = numConstants.FP_SAFE; @@ -54975,6 +57256,10 @@ function fromLog(v) { return Math.pow(10, v); } +function isValidCategory(v) { + return v !== null && v !== undefined; +} + /** * Define the conversion functions for an axis data is used in 5 ways: * @@ -55011,8 +57296,8 @@ module.exports = function setConvert(ax, fullLayout) { else if(v <= 0 && clip && ax.range && ax.range.length === 2) { // clip NaN (ie past negative infinity) to LOG_CLIP axis // length past the negative edge - var r0 = ax.range[0], - r1 = ax.range[1]; + var r0 = ax.range[0]; + var r1 = ax.range[1]; return 0.5 * (r0 + r1 - 2 * LOG_CLIP * Math.abs(r0 - r1)); } @@ -55068,7 +57353,7 @@ module.exports = function setConvert(ax, fullLayout) { * a disconnect between the array and the index returned */ function setCategoryIndex(v) { - if(v !== null && v !== undefined) { + if(isValidCategory(v)) { if(ax._categoriesMap === undefined) { ax._categoriesMap = {}; } @@ -55087,14 +57372,29 @@ module.exports = function setConvert(ax, fullLayout) { return BADNUM; } - function getCategoryIndex(v) { - // d2l/d2c variant that that won't add categories but will also - // allow numbers to be mapped to the linearized axis positions - if(ax._categoriesMap) { - var index = ax._categoriesMap[v]; - if(index !== undefined) return index; + function setMultiCategoryIndex(arrayIn, len) { + var arrayOut = new Array(len); + + for(var i = 0; i < len; i++) { + var v0 = (arrayIn[0] || [])[i]; + var v1 = (arrayIn[1] || [])[i]; + arrayOut[i] = getCategoryIndex([v0, v1]); } + return arrayOut; + } + + function getCategoryIndex(v) { + if(ax._categoriesMap) { + return ax._categoriesMap[v]; + } + } + + function getCategoryPosition(v) { + // d2l/d2c variant that that won't add categories but will also + // allow numbers to be mapped to the linearized axis positions + var index = getCategoryIndex(v); + if(index !== undefined) return index; if(isNumeric(v)) return +v; } @@ -55180,15 +57480,15 @@ module.exports = function setConvert(ax, fullLayout) { ax.d2c = ax.d2l = setCategoryIndex; ax.r2d = ax.c2d = ax.l2d = getCategoryName; - ax.d2r = ax.d2l_noadd = getCategoryIndex; + ax.d2r = ax.d2l_noadd = getCategoryPosition; ax.r2c = function(v) { - var index = getCategoryIndex(v); + var index = getCategoryPosition(v); return index !== undefined ? index : ax.fraction2r(0.5); }; ax.l2r = ax.c2r = ensureNumber; - ax.r2l = getCategoryIndex; + ax.r2l = getCategoryPosition; ax.d2p = function(v) { return ax.l2p(ax.r2c(v)); }; ax.p2d = function(px) { return getCategoryName(p2l(px)); }; @@ -55200,18 +57500,96 @@ module.exports = function setConvert(ax, fullLayout) { return ensureNumber(v); }; } + else if(ax.type === 'multicategory') { + // N.B. multicategory axes don't define d2c and d2l, + // as 'data-to-calcdata' conversion needs to take into + // account all data array items as in ax.makeCalcdata. + + ax.r2d = ax.c2d = ax.l2d = getCategoryName; + ax.d2r = ax.d2l_noadd = getCategoryPosition; + + ax.r2c = function(v) { + var index = getCategoryPosition(v); + return index !== undefined ? index : ax.fraction2r(0.5); + }; + + ax.r2c_just_indices = getCategoryIndex; + + ax.l2r = ax.c2r = ensureNumber; + ax.r2l = getCategoryPosition; + + ax.d2p = function(v) { return ax.l2p(ax.r2c(v)); }; + ax.p2d = function(px) { return getCategoryName(p2l(px)); }; + ax.r2p = ax.d2p; + ax.p2r = p2l; + + ax.cleanPos = function(v) { + if(Array.isArray(v) || (typeof v === 'string' && v !== '')) return v; + return ensureNumber(v); + }; + + ax.setupMultiCategory = function(fullData) { + var traceIndices = ax._traceIndices; + var i, j; + + // [ [cnt, {$cat: index}], for 1,2 ] + var seen = ax._multicatSeen = [[0, {}], [0, {}]]; + // [ [arrayIn[0][i], arrayIn[1][i]], for i .. N ] + var list = ax._multicatList = []; + + for(i = 0; i < traceIndices.length; i++) { + var trace = fullData[traceIndices[i]]; + + if(axLetter in trace) { + var arrayIn = trace[axLetter]; + var len = trace._length || Lib.minRowLength(arrayIn); + + if(isArrayOrTypedArray(arrayIn[0]) && isArrayOrTypedArray(arrayIn[1])) { + for(j = 0; j < len; j++) { + var v0 = arrayIn[0][j]; + var v1 = arrayIn[1][j]; + + if(isValidCategory(v0) && isValidCategory(v1)) { + list.push([v0, v1]); + + if(!(v0 in seen[0][1])) { + seen[0][1][v0] = seen[0][0]++; + } + if(!(v1 in seen[1][1])) { + seen[1][1][v1] = seen[1][0]++; + } + } + } + } + } + } + + list.sort(function(a, b) { + var ind0 = seen[0][1]; + var d = ind0[a[0]] - ind0[b[0]]; + if(d) return d; + + var ind1 = seen[1][1]; + return ind1[a[1]] - ind1[b[1]]; + }); + + for(i = 0; i < list.length; i++) { + setCategoryIndex(list[i]); + } + }; + } // find the range value at the specified (linear) fraction of the axis ax.fraction2r = function(v) { - var rl0 = ax.r2l(ax.range[0]), - rl1 = ax.r2l(ax.range[1]); + var rl0 = ax.r2l(ax.range[0]); + var rl1 = ax.r2l(ax.range[1]); return ax.l2r(rl0 + v * (rl1 - rl0)); }; // find the fraction of the range at the specified range value ax.r2fraction = function(v) { - var rl0 = ax.r2l(ax.range[0]), - rl1 = ax.r2l(ax.range[1]); + var rl0 = ax.r2l(ax.range[0]); + var rl1 = ax.r2l(ax.range[1]); return (ax.r2l(v) - rl0) / (rl1 - rl0); }; @@ -55293,11 +57671,6 @@ module.exports = function setConvert(ax, fullLayout) { ax.setScale = function(usePrivateRange) { var gs = fullLayout._size; - // TODO cleaner way to handle this case - if(!ax._categories) ax._categories = []; - // Add a map to optimize the performance of category collection - if(!ax._categoriesMap) ax._categoriesMap = {}; - // make sure we have a domain (pull it in from the axis // this one is overlaying if necessary) if(ax.overlaying) { @@ -55309,12 +57682,12 @@ module.exports = function setConvert(ax, fullLayout) { // issue if we transform the drawn layer *and* use the new axis range to // draw the data. This allows us to construct setConvert using the pre- // interaction values of the range: - var rangeAttr = (usePrivateRange && ax._r) ? '_r' : 'range', - calendar = ax.calendar; + var rangeAttr = (usePrivateRange && ax._r) ? '_r' : 'range'; + var calendar = ax.calendar; ax.cleanRange(rangeAttr); - var rl0 = ax.r2l(ax[rangeAttr][0], calendar), - rl1 = ax.r2l(ax[rangeAttr][1], calendar); + var rl0 = ax.r2l(ax[rangeAttr][0], calendar); + var rl1 = ax.r2l(ax[rangeAttr][1], calendar); if(axLetter === 'y') { ax._offset = gs.t + (1 - ax.domain[1]) * gs.h; @@ -55352,7 +57725,7 @@ module.exports = function setConvert(ax, fullLayout) { if(axLetter in trace) { arrayIn = trace[axLetter]; - len = trace._length || arrayIn.length; + len = trace._length || Lib.minRowLength(arrayIn); if(Lib.isTypedArray(arrayIn) && (axType === 'linear' || axType === 'log')) { if(len === arrayIn.length) { @@ -55362,6 +57735,10 @@ module.exports = function setConvert(ax, fullLayout) { } } + if(axType === 'multicategory') { + return setMultiCategoryIndex(arrayIn, len); + } + arrayOut = new Array(len); for(i = 0; i < len; i++) { arrayOut[i] = ax.d2c(arrayIn[i], 0, cal); @@ -55438,9 +57815,9 @@ module.exports = function setConvert(ax, fullLayout) { delete ax._forceTick0; }; -},{"../../constants/numerical":151,"../../lib":169,"./axis_ids":217,"./constants":219,"d3":16,"fast-isnumeric":18}],233:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"./axis_ids":215,"./constants":218,"d3":16,"fast-isnumeric":18}],232:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55512,15 +57889,13 @@ module.exports = function handleTickLabelDefaults(containerIn, containerOut, coe * */ function getShowAttrDflt(containerIn) { - var showAttrsAll = ['showexponent', - 'showtickprefix', - 'showticksuffix'], - showAttrs = showAttrsAll.filter(function(a) { - return containerIn[a] !== undefined; - }), - sameVal = function(a) { - return containerIn[a] === containerIn[showAttrs[0]]; - }; + var showAttrsAll = ['showexponent', 'showtickprefix', 'showticksuffix']; + var showAttrs = showAttrsAll.filter(function(a) { + return containerIn[a] !== undefined; + }); + var sameVal = function(a) { + return containerIn[a] === containerIn[showAttrs[0]]; + }; if(showAttrs.every(sameVal) || showAttrs.length === 1) { return containerIn[showAttrs[0]]; @@ -55539,9 +57914,9 @@ function tickformatstopDefaults(valueIn, valueOut) { } } -},{"../../lib":169,"../array_container_defaults":210,"./layout_attributes":226}],234:[function(_dereq_,module,exports){ +},{"../../lib":168,"../array_container_defaults":208,"./layout_attributes":225}],233:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55560,10 +57935,10 @@ var layoutAttributes = _dereq_('./layout_attributes'); * options: inherits outerTicks from axes.handleAxisDefaults */ module.exports = function handleTickDefaults(containerIn, containerOut, coerce, options) { - var tickLen = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'ticklen'), - tickWidth = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'tickwidth'), - tickColor = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'tickcolor', containerOut.color), - showTicks = coerce('ticks', (options.outerTicks || tickLen || tickWidth || tickColor) ? 'outside' : ''); + var tickLen = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'ticklen'); + var tickWidth = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'tickwidth'); + var tickColor = Lib.coerce2(containerIn, containerOut, layoutAttributes, 'tickcolor', containerOut.color); + var showTicks = coerce('ticks', (options.outerTicks || tickLen || tickWidth || tickColor) ? 'outside' : ''); if(!showTicks) { delete containerOut.ticklen; @@ -55572,22 +57947,18 @@ module.exports = function handleTickDefaults(containerIn, containerOut, coerce, } }; -},{"../../lib":169,"./layout_attributes":226}],235:[function(_dereq_,module,exports){ +},{"../../lib":168,"./layout_attributes":225}],234:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); -var Lib = _dereq_('../../lib'); -var ONEDAY = _dereq_('../../constants/numerical').ONEDAY; - +var cleanTicks = _dereq_('./clean_ticks'); module.exports = function handleTickValueDefaults(containerIn, containerOut, coerce, axType) { var tickmode; @@ -55595,10 +57966,8 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe if(containerIn.tickmode === 'array' && (axType === 'log' || axType === 'date')) { tickmode = containerOut.tickmode = 'auto'; - } - else { - var tickmodeDefault = - Array.isArray(containerIn.tickvals) ? 'array' : + } else { + var tickmodeDefault = Array.isArray(containerIn.tickvals) ? 'array' : containerIn.dtick ? 'linear' : 'auto'; tickmode = coerce('tickmode', tickmodeDefault); @@ -55608,58 +57977,21 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe else if(tickmode === 'linear') { // dtick is usually a positive number, but there are some // special strings available for log or date axes - // default is 1 day for dates, otherwise 1 - var dtickDflt = (axType === 'date') ? ONEDAY : 1; - var dtick = coerce('dtick', dtickDflt); - if(isNumeric(dtick)) { - containerOut.dtick = (dtick > 0) ? Number(dtick) : dtickDflt; - } - else if(typeof dtick !== 'string') { - containerOut.dtick = dtickDflt; - } - else { - // date and log special cases are all one character plus a number - var prefix = dtick.charAt(0), - dtickNum = dtick.substr(1); - - dtickNum = isNumeric(dtickNum) ? Number(dtickNum) : 0; - if((dtickNum <= 0) || !( - // "M" gives ticks every (integer) n months - (axType === 'date' && prefix === 'M' && dtickNum === Math.round(dtickNum)) || - // "L" gives ticks linearly spaced in data (not in position) every (float) f - (axType === 'log' && prefix === 'L') || - // "D1" gives powers of 10 with all small digits between, "D2" gives only 2 and 5 - (axType === 'log' && prefix === 'D' && (dtickNum === 1 || dtickNum === 2)) - )) { - containerOut.dtick = dtickDflt; - } - } - - // tick0 can have different valType for different axis types, so - // validate that now. Also for dates, change milliseconds to date strings - var tick0Dflt = (axType === 'date') ? Lib.dateTick0(containerOut.calendar) : 0; - var tick0 = coerce('tick0', tick0Dflt); - if(axType === 'date') { - containerOut.tick0 = Lib.cleanDate(tick0, tick0Dflt); - } - // Aside from date axes, dtick must be numeric; D1 and D2 modes ignore tick0 entirely - else if(isNumeric(tick0) && dtick !== 'D1' && dtick !== 'D2') { - containerOut.tick0 = Number(tick0); - } - else { - containerOut.tick0 = tick0Dflt; - } - } - else { + // tick0 also has special logic + var dtick = containerOut.dtick = cleanTicks.dtick( + containerIn.dtick, axType); + containerOut.tick0 = cleanTicks.tick0( + containerIn.tick0, axType, containerOut.calendar, dtick); + } else if(axType !== 'multicategory') { var tickvals = coerce('tickvals'); if(tickvals === undefined) containerOut.tickmode = 'auto'; else coerce('ticktext'); } }; -},{"../../constants/numerical":151,"../../lib":169,"fast-isnumeric":18}],236:[function(_dereq_,module,exports){ +},{"./clean_ticks":217}],235:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55673,150 +58005,43 @@ var d3 = _dereq_('d3'); var Registry = _dereq_('../../registry'); var Drawing = _dereq_('../../components/drawing'); var Axes = _dereq_('./axes'); -var axisRegex = _dereq_('./constants').attrRegex; -module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCompleteCallback) { +/** + * transitionAxes + * + * transition axes from one set of ranges to another, using a svg + * transformations, similar to during panning. + * + * @param {DOM element | object} gd + * @param {array} edits : array of 'edits', each item with + * - plotinfo {object} subplot object + * - xr0 {array} initial x-range + * - xr1 {array} end x-range + * - yr0 {array} initial y-range + * - yr1 {array} end y-range + * @param {object} transitionOpts + * @param {function} makeOnCompleteCallback + */ +module.exports = function transitionAxes(gd, edits, transitionOpts, makeOnCompleteCallback) { var fullLayout = gd._fullLayout; - var axes = []; - function computeUpdates(layout) { - var ai, attrList, match, axis, update; - var updates = {}; - - for(ai in layout) { - attrList = ai.split('.'); - match = attrList[0].match(axisRegex); - if(match) { - var axisLetter = ai.charAt(0); - var axisName = attrList[0]; - axis = fullLayout[axisName]; - update = {}; - - if(Array.isArray(layout[ai])) { - update.to = layout[ai].slice(0); - } else { - if(Array.isArray(layout[ai].range)) { - update.to = layout[ai].range.slice(0); - } - } - if(!update.to) continue; - - update.axisName = axisName; - update.length = axis._length; - - axes.push(axisLetter); - - updates[axisLetter] = update; - } - } - - return updates; - } - - function computeAffectedSubplots(fullLayout, updatedAxisIds, updates) { - var plotName; - var plotinfos = fullLayout._plots; - var affectedSubplots = []; - var toX, toY; - - for(plotName in plotinfos) { - var plotinfo = plotinfos[plotName]; - - if(affectedSubplots.indexOf(plotinfo) !== -1) continue; - - var x = plotinfo.xaxis._id; - var y = plotinfo.yaxis._id; - var fromX = plotinfo.xaxis.range; - var fromY = plotinfo.yaxis.range; - - // Store the initial range at the beginning of this transition: - plotinfo.xaxis._r = plotinfo.xaxis.range.slice(); - plotinfo.yaxis._r = plotinfo.yaxis.range.slice(); - - if(updates[x]) { - toX = updates[x].to; - } else { - toX = fromX; - } - if(updates[y]) { - toY = updates[y].to; - } else { - toY = fromY; - } - - if(fromX[0] === toX[0] && fromX[1] === toX[1] && fromY[0] === toY[0] && fromY[1] === toY[1]) continue; - - if(updatedAxisIds.indexOf(x) !== -1 || updatedAxisIds.indexOf(y) !== -1) { - affectedSubplots.push(plotinfo); - } - } - - return affectedSubplots; - } - - var updates = computeUpdates(newLayout); - var updatedAxisIds = Object.keys(updates); - var affectedSubplots = computeAffectedSubplots(fullLayout, updatedAxisIds, updates); - - function updateLayoutObjs() { - function redrawObjs(objArray, method, shortCircuit) { - for(var i = 0; i < objArray.length; i++) { - method(gd, i); - - // once is enough for images (which doesn't use the `i` arg anyway) - if(shortCircuit) return; - } - } - - redrawObjs(fullLayout.annotations || [], Registry.getComponentMethod('annotations', 'drawOne')); - redrawObjs(fullLayout.shapes || [], Registry.getComponentMethod('shapes', 'drawOne')); - redrawObjs(fullLayout.images || [], Registry.getComponentMethod('images', 'draw'), true); - } - - if(!affectedSubplots.length) { - updateLayoutObjs(); - return false; - } - - function ticksAndAnnotations(xa, ya) { - var activeAxIds = [], - i; - - activeAxIds = [xa._id, ya._id]; - - for(i = 0; i < activeAxIds.length; i++) { - Axes.doTicksSingle(gd, activeAxIds[i], true); - } - - function redrawObjs(objArray, method, shortCircuit) { - for(i = 0; i < objArray.length; i++) { - var obji = objArray[i]; - - if((activeAxIds.indexOf(obji.xref) !== -1) || - (activeAxIds.indexOf(obji.yref) !== -1)) { - method(gd, i); - } - - // once is enough for images (which doesn't use the `i` arg anyway) - if(shortCircuit) return; - } - } - - redrawObjs(fullLayout.annotations || [], Registry.getComponentMethod('annotations', 'drawOne')); - redrawObjs(fullLayout.shapes || [], Registry.getComponentMethod('shapes', 'drawOne')); - redrawObjs(fullLayout.images || [], Registry.getComponentMethod('images', 'draw'), true); + // special case for redraw:false Plotly.animate that relies on this + // to update axis-referenced layout components + if(edits.length === 0) { + Axes.redrawComponents(gd); + return; } function unsetSubplotTransform(subplot) { - var xa2 = subplot.xaxis; - var ya2 = subplot.yaxis; + var xa = subplot.xaxis; + var ya = subplot.yaxis; fullLayout._defs.select('#' + subplot.clipId + '> rect') .call(Drawing.setTranslate, 0, 0) .call(Drawing.setScale, 1, 1); subplot.plot - .call(Drawing.setTranslate, xa2._offset, ya2._offset) + .call(Drawing.setTranslate, xa._offset, ya._offset) .call(Drawing.setScale, 1, 1); var traceGroups = subplot.plot.selectAll('.scatterlayer .trace'); @@ -55832,79 +58057,71 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo .call(Drawing.hideOutsideRangePoints, subplot); } - function updateSubplot(subplot, progress) { - var axis, r0, r1; - var xUpdate = updates[subplot.xaxis._id]; - var yUpdate = updates[subplot.yaxis._id]; + function updateSubplot(edit, progress) { + var plotinfo = edit.plotinfo; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; + var xr0 = edit.xr0; + var xr1 = edit.xr1; + var xlen = xa._length; + var yr0 = edit.yr0; + var yr1 = edit.yr1; + var ylen = ya._length; + + var editX = !!xr1; + var editY = !!yr1; var viewBox = []; - if(xUpdate) { - axis = gd._fullLayout[xUpdate.axisName]; - r0 = axis._r; - r1 = xUpdate.to; - viewBox[0] = (r0[0] * (1 - progress) + progress * r1[0] - r0[0]) / (r0[1] - r0[0]) * subplot.xaxis._length; - var dx1 = r0[1] - r0[0]; - var dx2 = r1[1] - r1[0]; - - axis.range[0] = r0[0] * (1 - progress) + progress * r1[0]; - axis.range[1] = r0[1] * (1 - progress) + progress * r1[1]; - - viewBox[2] = subplot.xaxis._length * ((1 - progress) + progress * dx2 / dx1); + if(editX) { + var dx0 = xr0[1] - xr0[0]; + var dx1 = xr1[1] - xr1[0]; + viewBox[0] = (xr0[0] * (1 - progress) + progress * xr1[0] - xr0[0]) / (xr0[1] - xr0[0]) * xlen; + viewBox[2] = xlen * ((1 - progress) + progress * dx1 / dx0); + xa.range[0] = xr0[0] * (1 - progress) + progress * xr1[0]; + xa.range[1] = xr0[1] * (1 - progress) + progress * xr1[1]; } else { viewBox[0] = 0; - viewBox[2] = subplot.xaxis._length; + viewBox[2] = xlen; } - if(yUpdate) { - axis = gd._fullLayout[yUpdate.axisName]; - r0 = axis._r; - r1 = yUpdate.to; - viewBox[1] = (r0[1] * (1 - progress) + progress * r1[1] - r0[1]) / (r0[0] - r0[1]) * subplot.yaxis._length; - var dy1 = r0[1] - r0[0]; - var dy2 = r1[1] - r1[0]; - - axis.range[0] = r0[0] * (1 - progress) + progress * r1[0]; - axis.range[1] = r0[1] * (1 - progress) + progress * r1[1]; - - viewBox[3] = subplot.yaxis._length * ((1 - progress) + progress * dy2 / dy1); + if(editY) { + var dy0 = yr0[1] - yr0[0]; + var dy1 = yr1[1] - yr1[0]; + viewBox[1] = (yr0[1] * (1 - progress) + progress * yr1[1] - yr0[1]) / (yr0[0] - yr0[1]) * ylen; + viewBox[3] = ylen * ((1 - progress) + progress * dy1 / dy0); + ya.range[0] = yr0[0] * (1 - progress) + progress * yr1[0]; + ya.range[1] = yr0[1] * (1 - progress) + progress * yr1[1]; } else { viewBox[1] = 0; - viewBox[3] = subplot.yaxis._length; + viewBox[3] = ylen; } - ticksAndAnnotations(subplot.xaxis, subplot.yaxis); + Axes.drawOne(gd, xa, {skipTitle: true}); + Axes.drawOne(gd, ya, {skipTitle: true}); + Axes.redrawComponents(gd, [xa._id, ya._id]); - var xa2 = subplot.xaxis; - var ya2 = subplot.yaxis; + var xScaleFactor = editX ? xlen / viewBox[2] : 1; + var yScaleFactor = editY ? ylen / viewBox[3] : 1; + var clipDx = editX ? viewBox[0] : 0; + var clipDy = editY ? viewBox[1] : 0; + var fracDx = editX ? (viewBox[0] / viewBox[2] * xlen) : 0; + var fracDy = editY ? (viewBox[1] / viewBox[3] * ylen) : 0; + var plotDx = xa._offset - fracDx; + var plotDy = ya._offset - fracDy; - var editX = !!xUpdate; - var editY = !!yUpdate; - - var xScaleFactor = editX ? xa2._length / viewBox[2] : 1, - yScaleFactor = editY ? ya2._length / viewBox[3] : 1; - - var clipDx = editX ? viewBox[0] : 0, - clipDy = editY ? viewBox[1] : 0; - - var fracDx = editX ? (viewBox[0] / viewBox[2] * xa2._length) : 0, - fracDy = editY ? (viewBox[1] / viewBox[3] * ya2._length) : 0; - - var plotDx = xa2._offset - fracDx, - plotDy = ya2._offset - fracDy; - - subplot.clipRect + plotinfo.clipRect .call(Drawing.setTranslate, clipDx, clipDy) .call(Drawing.setScale, 1 / xScaleFactor, 1 / yScaleFactor); - subplot.plot + plotinfo.plot .call(Drawing.setTranslate, plotDx, plotDy) .call(Drawing.setScale, xScaleFactor, yScaleFactor); // apply an inverse scale to individual points to counteract // the scale of the trace group. - Drawing.setPointGroupScale(subplot.zoomScalePts, 1 / xScaleFactor, 1 / yScaleFactor); - Drawing.setTextPointsScale(subplot.zoomScaleTxt, 1 / xScaleFactor, 1 / yScaleFactor); + Drawing.setPointGroupScale(plotinfo.zoomScalePts, 1 / xScaleFactor, 1 / yScaleFactor); + Drawing.setTextPointsScale(plotinfo.zoomScaleTxt, 1 / xScaleFactor, 1 / yScaleFactor); } var onComplete; @@ -55916,38 +58133,35 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo function transitionComplete() { var aobj = {}; - for(var i = 0; i < updatedAxisIds.length; i++) { - var axi = gd._fullLayout[updates[updatedAxisIds[i]].axisName]; - var to = updates[updatedAxisIds[i]].to; - aobj[axi._name + '.range[0]'] = to[0]; - aobj[axi._name + '.range[1]'] = to[1]; - axi.range = to.slice(); + for(var i = 0; i < edits.length; i++) { + var edit = edits[i]; + if(edit.xr1) aobj[edit.plotinfo.xaxis._name + '.range'] = edit.xr1.slice(); + if(edit.yr1) aobj[edit.plotinfo.yaxis._name + '.range'] = edit.yr1.slice(); } // Signal that this transition has completed: onComplete && onComplete(); return Registry.call('relayout', gd, aobj).then(function() { - for(var i = 0; i < affectedSubplots.length; i++) { - unsetSubplotTransform(affectedSubplots[i]); + for(var i = 0; i < edits.length; i++) { + unsetSubplotTransform(edits[i].plotinfo); } }); } function transitionInterrupt() { var aobj = {}; - for(var i = 0; i < updatedAxisIds.length; i++) { - var axi = gd._fullLayout[updatedAxisIds[i] + 'axis']; - aobj[axi._name + '.range[0]'] = axi.range[0]; - aobj[axi._name + '.range[1]'] = axi.range[1]; - axi.range = axi._r.slice(); + for(var i = 0; i < edits.length; i++) { + var edit = edits[i]; + if(edit.xr0) aobj[edit.plotinfo.xaxis._name + '.range'] = edit.xr0.slice(); + if(edit.yr0) aobj[edit.plotinfo.yaxis._name + '.range'] = edit.yr0.slice(); } return Registry.call('relayout', gd, aobj).then(function() { - for(var i = 0; i < affectedSubplots.length; i++) { - unsetSubplotTransform(affectedSubplots[i]); + for(var i = 0; i < edits.length; i++) { + unsetSubplotTransform(edits[i].plotinfo); } }); } @@ -55967,8 +58181,8 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo var tInterp = Math.min(1, (t2 - t1) / transitionOpts.duration); var progress = easeFn(tInterp); - for(var i = 0; i < affectedSubplots.length; i++) { - updateSubplot(affectedSubplots[i], progress); + for(var i = 0; i < edits.length; i++) { + updateSubplot(edits[i], progress); } if(t2 - t1 > transitionOpts.duration) { @@ -55985,9 +58199,9 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo return Promise.resolve(); }; -},{"../../components/drawing":75,"../../registry":259,"./axes":214,"./constants":219,"d3":16}],237:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../registry":257,"./axes":212,"d3":16}],236:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55996,7 +58210,7 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo 'use strict'; -var Registry = _dereq_('../../registry'); +var traceIs = _dereq_('../../registry').traceIs; var autoType = _dereq_('./axis_autotype'); /* @@ -56045,6 +58259,7 @@ function setAutoType(ax, data) { var calAttr = axLetter + 'calendar'; var calendar = d0[calAttr]; + var opts = {noMultiCategory: !traceIs(d0, 'cartesian') || traceIs(d0, 'noMultiCategory')}; var i; // check all boxes on this x axis to see @@ -56055,8 +58270,7 @@ function setAutoType(ax, data) { for(i = 0; i < data.length; i++) { var trace = data[i]; - if(!Registry.traceIs(trace, 'box-violin') || - (trace[axLetter + 'axis'] || axLetter) !== id) continue; + if(!traceIs(trace, 'box-violin') || (trace[axLetter + 'axis'] || axLetter) !== id) continue; if(trace[posLetter] !== undefined) boxPositions.push(trace[posLetter][0]); else if(trace.name !== undefined) boxPositions.push(trace.name); @@ -56065,7 +58279,7 @@ function setAutoType(ax, data) { if(trace[calAttr] !== calendar) calendar = undefined; } - ax.type = autoType(boxPositions, calendar); + ax.type = autoType(boxPositions, calendar, opts); } else if(d0.type === 'splom') { var dimensions = d0.dimensions; @@ -56073,13 +58287,13 @@ function setAutoType(ax, data) { for(i = 0; i < dimensions.length; i++) { var dim = dimensions[i]; if(dim.visible && (diag[i][0] === id || diag[i][1] === id)) { - ax.type = autoType(dim.values, calendar); + ax.type = autoType(dim.values, calendar, opts); break; } } } else { - ax.type = autoType(d0[axLetter] || [d0[axLetter + '0']], calendar); + ax.type = autoType(d0[axLetter] || [d0[axLetter + '0']], calendar, opts); } } @@ -56110,9 +58324,9 @@ function getBoxPosLetter(trace) { } function isBoxWithoutPositionCoords(trace, axLetter) { - var posLetter = getBoxPosLetter(trace), - isBox = Registry.traceIs(trace, 'box-violin'), - isCandlestick = Registry.traceIs(trace._fullInput || {}, 'candlestick'); + var posLetter = getBoxPosLetter(trace); + var isBox = traceIs(trace, 'box-violin'); + var isCandlestick = traceIs(trace._fullInput || {}, 'candlestick'); return ( isBox && @@ -56123,9 +58337,9 @@ function isBoxWithoutPositionCoords(trace, axLetter) { ); } -},{"../../registry":259,"./axis_autotype":215}],238:[function(_dereq_,module,exports){ +},{"../../registry":257,"./axis_autotype":213}],237:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56547,9 +58761,9 @@ function crawl(attrs, callback, path, depth) { }); } -},{"../lib":169,"../registry":259}],239:[function(_dereq_,module,exports){ +},{"../lib":168,"../registry":257}],238:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56655,9 +58869,9 @@ exports.defaults = function(containerOut, layout, coerce, dfltDomains) { coerce('domain.y', dfltY); }; -},{"../lib/extend":163}],240:[function(_dereq_,module,exports){ +},{"../lib/extend":162}],239:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56720,9 +58934,9 @@ module.exports = function(opts) { return attrs; }; -},{}],241:[function(_dereq_,module,exports){ +},{}],240:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56766,9 +58980,9 @@ module.exports = { } }; -},{}],242:[function(_dereq_,module,exports){ +},{}],241:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56894,9 +59108,9 @@ exports.getSubplotData = function getSubplotData(data, type, subplotId) { return subplotData; }; -},{"../registry":259,"./cartesian/constants":219}],243:[function(_dereq_,module,exports){ +},{"../registry":257,"./cartesian/constants":218}],242:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56928,9 +59142,9 @@ function project(camera, v) { module.exports = project; -},{}],244:[function(_dereq_,module,exports){ +},{}],243:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56940,7 +59154,11 @@ module.exports = project; 'use strict'; var fontAttrs = _dereq_('./font_attributes'); +var animationAttrs = _dereq_('./animation_attributes'); var colorAttrs = _dereq_('../components/color/attributes'); +var colorscaleAttrs = _dereq_('../components/colorscale/layout_attributes'); +var padAttrs = _dereq_('./pad_attributes'); +var extendFlat = _dereq_('../lib/extend').extendFlat; var globalFont = fontAttrs({ editType: 'calc', @@ -56953,15 +59171,71 @@ globalFont.color.dflt = colorAttrs.defaultLine; module.exports = { font: globalFont, title: { - valType: 'string', - - editType: 'layoutstyle', - + text: { + valType: 'string', + + editType: 'layoutstyle', + + }, + font: fontAttrs({ + editType: 'layoutstyle', + + }), + xref: { + valType: 'enumerated', + dflt: 'container', + values: ['container', 'paper'], + + editType: 'layoutstyle', + + }, + yref: { + valType: 'enumerated', + dflt: 'container', + values: ['container', 'paper'], + + editType: 'layoutstyle', + + }, + x: { + valType: 'number', + min: 0, + max: 1, + dflt: 0.5, + + editType: 'layoutstyle', + + }, + y: { + valType: 'number', + min: 0, + max: 1, + dflt: 'auto', + + editType: 'layoutstyle', + + }, + xanchor: { + valType: 'enumerated', + dflt: 'auto', + values: ['auto', 'left', 'center', 'right'], + + editType: 'layoutstyle', + + }, + yanchor: { + valType: 'enumerated', + dflt: 'auto', + values: ['auto', 'top', 'middle', 'bottom'], + + editType: 'layoutstyle', + + }, + pad: extendFlat(padAttrs({editType: 'layoutstyle'}), { + + }), + editType: 'layoutstyle' }, - titlefont: fontAttrs({ - editType: 'layoutstyle', - - }), autosize: { valType: 'boolean', @@ -57080,23 +59354,101 @@ module.exports = { editType: 'calc', }, + colorscale: colorscaleAttrs, datarevision: { valType: 'any', editType: 'calc', + }, + uirevision: { + valType: 'any', + + editType: 'none', + + }, + editrevision: { + valType: 'any', + + editType: 'none', + + }, + selectionrevision: { + valType: 'any', + + editType: 'none', + }, template: { valType: 'any', editType: 'calc', + }, + modebar: { + orientation: { + valType: 'enumerated', + values: ['v', 'h'], + dflt: 'h', + + editType: 'modebar', + + }, + bgcolor: { + valType: 'color', + + editType: 'modebar', + + }, + color: { + valType: 'color', + + editType: 'modebar', + + }, + activecolor: { + valType: 'color', + + editType: 'modebar', + + }, + uirevision: { + valType: 'any', + + editType: 'none', + + }, + editType: 'modebar' + }, + + meta: { + valType: 'data_array', + editType: 'plot', + + }, + + transition: extendFlat({}, animationAttrs.transition, { + + editType: 'none' + }), + + _deprecated: { + title: { + valType: 'string', + + editType: 'layoutstyle', + + }, + titlefont: fontAttrs({ + editType: 'layoutstyle', + + }) } }; -},{"../components/color/attributes":49,"./font_attributes":240}],245:[function(_dereq_,module,exports){ +},{"../components/color/attributes":50,"../components/colorscale/layout_attributes":64,"../lib/extend":162,"./animation_attributes":207,"./font_attributes":239,"./pad_attributes":244}],244:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57105,44 +59457,53 @@ module.exports = { 'use strict'; -// This is used exclusively by components inside component arrays, -// hence the 'arraydraw' editType. If this ever gets used elsewhere -// we could generalize it as a function ala font_attributes -module.exports = { - t: { - valType: 'number', - dflt: 0, - - editType: 'arraydraw', - - }, - r: { - valType: 'number', - dflt: 0, - - editType: 'arraydraw', - - }, - b: { - valType: 'number', - dflt: 0, - - editType: 'arraydraw', - - }, - l: { - valType: 'number', - dflt: 0, - - editType: 'arraydraw', - - }, - editType: 'arraydraw' +/** + * Creates a set of padding attributes. + * + * @param {object} opts + * @param {string} editType: + * the editType for all pieces of this padding definition + * + * @return {object} attributes object containing {t, r, b, l} as specified + */ +module.exports = function(opts) { + var editType = opts.editType; + return { + t: { + valType: 'number', + dflt: 0, + + editType: editType, + + }, + r: { + valType: 'number', + dflt: 0, + + editType: editType, + + }, + b: { + valType: 'number', + dflt: 0, + + editType: editType, + + }, + l: { + valType: 'number', + dflt: 0, + + editType: editType, + + }, + editType: editType + }; }; -},{}],246:[function(_dereq_,module,exports){ +},{}],245:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57163,7 +59524,6 @@ var Color = _dereq_('../components/color'); var BADNUM = _dereq_('../constants/numerical').BADNUM; var axisIDs = _dereq_('../plots/cartesian/axis_ids'); -var sortBasePlotModules = _dereq_('./sort_modules').sortBasePlotModules; var animationAttrs = _dereq_('./animation_attributes'); var frameAttrs = _dereq_('./frame_attributes'); @@ -57315,9 +59675,9 @@ plots.addLinks = function(gd) { linkContainer.attr(attrs); - var toolspan = linkContainer.select('.js-link-to-tool'), - spacespan = linkContainer.select('.js-link-spacer'), - sourcespan = linkContainer.select('.js-sourcelinks'); + var toolspan = linkContainer.select('.js-link-to-tool'); + var spacespan = linkContainer.select('.js-link-spacer'); + var sourcespan = linkContainer.select('.js-sourcelinks'); if(gd._context.showSources) gd._context.showSources(gd); @@ -57485,8 +59845,8 @@ plots.supplyDefaults = function(gd, opts) { if(oldFullLayout._initialAutoSizeIsDone) { // coerce the updated layout while preserving width and height - var oldWidth = oldFullLayout.width, - oldHeight = oldFullLayout.height; + var oldWidth = oldFullLayout.width; + var oldHeight = oldFullLayout.height; plots.supplyLayoutGlobalDefaults(newLayout, newFullLayout, formatObj); @@ -57499,10 +59859,10 @@ plots.supplyDefaults = function(gd, opts) { // coerce the updated layout and autosize if needed plots.supplyLayoutGlobalDefaults(newLayout, newFullLayout, formatObj); - var missingWidthOrHeight = (!newLayout.width || !newLayout.height), - autosize = newFullLayout.autosize, - autosizable = context.autosizable, - initialAutoSize = missingWidthOrHeight && (autosize || autosizable); + var missingWidthOrHeight = (!newLayout.width || !newLayout.height); + var autosize = newFullLayout.autosize; + var autosizable = context.autosizable; + var initialAutoSize = missingWidthOrHeight && (autosize || autosizable); if(initialAutoSize) plots.plotAutoSize(gd, newLayout, newFullLayout); else if(missingWidthOrHeight) plots.sanitizeMargins(newFullLayout); @@ -57571,13 +59931,6 @@ plots.supplyDefaults = function(gd, opts) { // attach helper method to check whether a plot type is present on graph newFullLayout._has = plots._hasPlotType.bind(newFullLayout); - // special cases that introduce interactions between traces - var _modules = newFullLayout._visibleModules; - for(i = 0; i < _modules.length; i++) { - var _module = _modules[i]; - if(_module.cleanData) _module.cleanData(newFullData); - } - if(oldFullData.length === newFullData.length) { for(i = 0; i < newFullData.length; i++) { relinkPrivateKeys(newFullData[i], oldFullData[i]); @@ -57587,6 +59940,21 @@ plots.supplyDefaults = function(gd, opts) { // finally, fill in the pieces of layout that may need to look at data plots.supplyLayoutModuleDefaults(newLayout, newFullLayout, newFullData, gd._transitionData); + // Special cases that introduce interactions between traces. + // This is after relinkPrivateKeys so we can use those in crossTraceDefaults + // and after layout module defaults, so we can use eg barmode + var _modules = newFullLayout._visibleModules; + var crossTraceDefaultsFuncs = []; + for(i = 0; i < _modules.length; i++) { + var funci = _modules[i].crossTraceDefaults; + // some trace types share crossTraceDefaults (ie histogram2d, histogram2dcontour) + if(funci) Lib.pushUnique(crossTraceDefaultsFuncs, funci); + } + for(i = 0; i < crossTraceDefaultsFuncs.length; i++) { + crossTraceDefaultsFuncs[i](newFullData, newFullLayout); + } + Registry.getComponentMethod('colorscale', 'crossTraceDefaults')(newFullData, newFullLayout); + // turn on flag to optimize large splom-only graphs // mostly by omitting SVG layers during Cartesian.drawFramework newFullLayout._hasOnlyLargeSploms = ( @@ -57611,34 +59979,45 @@ plots.supplyDefaults = function(gd, opts) { plots.linkSubplots(newFullData, newFullLayout, oldFullData, oldFullLayout); // clean subplots and other artifacts from previous plot calls - plots.cleanPlot(newFullData, newFullLayout, oldFullData, oldFullLayout, oldCalcdata); + plots.cleanPlot(newFullData, newFullLayout, oldFullData, oldFullLayout); // relink functions and _ attributes to promote consistency between plots relinkPrivateKeys(newFullLayout, oldFullLayout); - // TODO may return a promise - plots.doAutoMargin(gd); - - // set scale after auto margin routine - var axList = axisIDs.list(gd); - for(i = 0; i < axList.length; i++) { - var ax = axList[i]; - ax.setScale(); + // For persisting GUI-driven changes in layout + // _preGUI and _tracePreGUI were already copied over in relinkPrivateKeys + if(!newFullLayout._preGUI) newFullLayout._preGUI = {}; + // track trace GUI changes by uid rather than by trace index + if(!newFullLayout._tracePreGUI) newFullLayout._tracePreGUI = {}; + var tracePreGUI = newFullLayout._tracePreGUI; + var uids = {}; + var uid; + for(uid in tracePreGUI) uids[uid] = 'old'; + for(i = 0; i < newFullData.length; i++) { + uid = newFullData[i]._fullInput.uid; + if(!uids[uid]) tracePreGUI[uid] = {}; + uids[uid] = 'new'; } + for(uid in uids) { + if(uids[uid] === 'old') delete tracePreGUI[uid]; + } + + // set up containers for margin calculations + initMargins(newFullLayout); + + // collect and do some initial calculations for rangesliders + Registry.getComponentMethod('rangeslider', 'makeData')(newFullLayout); // update object references in calcdata if(!skipUpdateCalc && oldCalcdata.length === newFullData.length) { plots.supplyDefaultsUpdateCalc(oldCalcdata, newFullData); } - - // sort base plot modules for consistent ordering - newFullLayout._basePlotModules.sort(sortBasePlotModules); }; plots.supplyDefaultsUpdateCalc = function(oldCalcdata, newFullData) { for(var i = 0; i < newFullData.length; i++) { var newTrace = newFullData[i]; - var cd0 = oldCalcdata[i][0]; + var cd0 = (oldCalcdata[i] || [])[0]; if(cd0 && cd0.trace) { var oldTrace = cd0.trace; if(oldTrace._hasCalcTransform) { @@ -57688,7 +60067,10 @@ function getTraceUids(oldFullData, newData) { } for(i = 0; i < len; i++) { - if(tryUid(newData[i].uid, i)) continue; + var newUid = newData[i].uid; + if(typeof newUid === 'number') newUid = String(newUid); + + if(tryUid(newUid, i)) continue; if(i < oldLen && tryUid(oldFullInput[i].uid, i)) continue; setUid(Lib.randstr(seenUids), i); } @@ -57704,8 +60086,8 @@ function getTraceUids(oldFullData, newData) { * Single-trace subplots (which have no `id`) such as pie, table, etc * do not need to be collected because we just draw all visible traces. */ -var collectableSubplotTypes; function emptySubplotLists() { + var collectableSubplotTypes = Registry.collectableSubplotTypes; var out = {}; var i, j; @@ -57861,7 +60243,7 @@ plots._hasPlotType = function(category) { return false; }; -plots.cleanPlot = function(newFullData, newFullLayout, oldFullData, oldFullLayout, oldCalcdata) { +plots.cleanPlot = function(newFullData, newFullLayout, oldFullData, oldFullLayout) { var i, j; var basePlotModules = oldFullLayout._basePlotModules || []; @@ -57869,7 +60251,7 @@ plots.cleanPlot = function(newFullData, newFullLayout, oldFullData, oldFullLayou var _module = basePlotModules[i]; if(_module.clean) { - _module.clean(newFullData, newFullLayout, oldFullData, oldFullLayout, oldCalcdata); + _module.clean(newFullData, newFullLayout, oldFullData, oldFullLayout); } } @@ -57888,8 +60270,8 @@ plots.cleanPlot = function(newFullData, newFullLayout, oldFullData, oldFullLayou oldLoop: for(i = 0; i < oldFullData.length; i++) { - var oldTrace = oldFullData[i], - oldUid = oldTrace.uid; + var oldTrace = oldFullData[i]; + var oldUid = oldTrace.uid; for(j = 0; j < newFullData.length; j++) { var newTrace = newFullData[j]; @@ -57937,6 +60319,12 @@ plots.linkSubplots = function(newFullData, newFullLayout, oldFullData, oldFullLa plotinfo.id = id; } + // add these axis ids to each others' subplot lists + xaxis._counterAxes.push(yaxis._id); + yaxis._counterAxes.push(xaxis._id); + xaxis._subplotsWith.push(id); + yaxis._subplotsWith.push(id); + // update x and y axis layout object refs plotinfo.xaxis = xaxis; plotinfo.yaxis = yaxis; @@ -57964,8 +60352,9 @@ plots.linkSubplots = function(newFullData, newFullLayout, oldFullData, oldFullLa // while we're at it, link overlaying axes to their main axes and // anchored axes to the axes they're anchored to var axList = axisIDs.list(mockGd, null, true); + var ax; for(i = 0; i < axList.length; i++) { - var ax = axList[i]; + ax = axList[i]; var mainAx = null; if(ax.overlaying) { @@ -57993,8 +60382,53 @@ plots.linkSubplots = function(newFullData, newFullLayout, oldFullData, oldFullLa null : axisIDs.getFromId(mockGd, ax.anchor); } + + // finally, we can find the main subplot for each axis + // (on which the ticks & labels are drawn) + for(i = 0; i < axList.length; i++) { + ax = axList[i]; + ax._counterAxes.sort(axisIDs.idSort); + ax._subplotsWith.sort(Lib.subplotSort); + ax._mainSubplot = findMainSubplot(ax, newFullLayout); + } }; +function findMainSubplot(ax, fullLayout) { + var mockGd = {_fullLayout: fullLayout}; + + var isX = ax._id.charAt(0) === 'x'; + var anchorAx = ax._mainAxis._anchorAxis; + var mainSubplotID = ''; + var nextBestMainSubplotID = ''; + var anchorID = ''; + + // First try the main ID with the anchor + if(anchorAx) { + anchorID = anchorAx._mainAxis._id; + mainSubplotID = isX ? (ax._id + anchorID) : (anchorID + ax._id); + } + + // Then look for a subplot with the counteraxis overlaying the anchor + // If that fails just use the first subplot including this axis + if(!mainSubplotID || !fullLayout._plots[mainSubplotID]) { + mainSubplotID = ''; + + var counterIDs = ax._counterAxes; + for(var j = 0; j < counterIDs.length; j++) { + var counterPart = counterIDs[j]; + var id = isX ? (ax._id + counterPart) : (counterPart + ax._id); + if(!nextBestMainSubplotID) nextBestMainSubplotID = id; + var counterAx = axisIDs.getFromId(mockGd, counterPart); + if(anchorID && counterAx.overlaying === anchorID) { + mainSubplotID = id; + break; + } + } + } + + return mainSubplotID || nextBestMainSubplotID; +} + // This function clears any trace attributes with valType: color and // no set dflt filed in the plot schema. This is needed because groupby (which // is the only transform for which this currently applies) supplies parent @@ -58091,6 +60525,8 @@ plots.supplyDataDefaults = function(dataIn, dataOut, layout, fullLayout) { fullTrace._expandedIndex = cnt; if(fullTrace.transforms && fullTrace.transforms.length) { + var sdInvisible = trace.visible !== false && fullTrace.visible === false; + var expandedTraces = applyTransforms(fullTrace, dataOut, layout, fullLayout); for(var j = 0; j < expandedTraces.length; j++) { @@ -58104,6 +60540,17 @@ plots.supplyDataDefaults = function(dataIn, dataOut, layout, fullLayout) { // to promote consistency between update calls uid: fullTrace.uid + j }; + + // If the first supplyDefaults created `visible: false`, + // clear it before running supplyDefaults a second time, + // because sometimes there are items we still want to coerce + // inside trace modules before determining that the trace is + // again `visible: false`, for example partial visibilities + // in `splom` traces. + if(sdInvisible && expandedTrace.visible === false) { + delete expandedTrace.visible; + } + plots.supplyTraceDefaults(expandedTrace, fullExpandedTrace, cnt, fullLayout, i); // relink private (i.e. underscore) keys expanded trace to full expanded trace so @@ -58249,9 +60696,12 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac coerce('type'); coerce('name', layout._traceWord + ' ' + traceInIndex); + coerce('uirevision', layout.uirevision); + // we want even invisible traces to make their would-be subplots visible // so coerce the subplot id(s) now no matter what var _module = plots.getModule(traceOut); + traceOut._module = _module; if(_module) { var basePlotModule = _module.basePlotModule; @@ -58285,6 +60735,18 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac } } + function coerceUnlessPruned(attr, dflt, cb) { + if(_module && (attr in _module.attributes) && _module.attributes[attr] === undefined) { + // Pruned + } else { + if(cb && typeof cb === 'function') { + cb(); + } else { + coerce(attr, dflt); + } + } + } + if(visible) { coerce('customdata'); coerce('ids'); @@ -58298,16 +60760,18 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac traceOut._dfltShowLegend = false; } - Registry.getComponentMethod( - 'fx', - 'supplyDefaults' - )(traceIn, traceOut, defaultColor, layout); + coerceUnlessPruned('hoverlabel', '', function() { + Registry.getComponentMethod( + 'fx', + 'supplyDefaults' + )(traceIn, traceOut, defaultColor, layout); + }); // TODO add per-base-plot-module trace defaults step if(_module) { _module.supplyDefaults(traceIn, traceOut, defaultColor, layout); - Lib.coerceHoverinfo(traceIn, traceOut, layout); + if(!traceOut.hovertemplate) Lib.coerceHoverinfo(traceIn, traceOut, layout); } if(!Registry.traceIs(traceOut, 'noOpacity')) coerce('opacity'); @@ -58360,15 +60824,15 @@ plots.supplyTransformDefaults = function(traceIn, traceOut, layout) { if(!Array.isArray(traceIn.transforms) && globalTransforms.length === 0) return; - var containerIn = traceIn.transforms || [], - transformList = globalTransforms.concat(containerIn), - containerOut = traceOut.transforms = []; + var containerIn = traceIn.transforms || []; + var transformList = globalTransforms.concat(containerIn); + var containerOut = traceOut.transforms = []; for(var i = 0; i < transformList.length; i++) { - var transformIn = transformList[i], - type = transformIn.type, - _module = transformsRegistry[type], - transformOut; + var transformIn = transformList[i]; + var type = transformIn.type; + var _module = transformsRegistry[type]; + var transformOut; /* * Supply defaults may run twice. First pass runs all supply defaults steps @@ -58379,8 +60843,8 @@ plots.supplyTransformDefaults = function(traceIn, traceOut, layout) { * function it could not have generated any new traces and the second stage * is unnecessary. We detect this case with the following variables. */ - var isFirstStage = !(transformIn._module && transformIn._module === _module), - doLaterStages = _module && typeof _module.transform === 'function'; + var isFirstStage = !(transformIn._module && transformIn._module === _module); + var doLaterStages = _module && typeof _module.transform === 'function'; if(!_module) Lib.warn('Unrecognized transform type ' + type + '.'); @@ -58400,12 +60864,12 @@ plots.supplyTransformDefaults = function(traceIn, traceOut, layout) { }; function applyTransforms(fullTrace, fullData, layout, fullLayout) { - var container = fullTrace.transforms, - dataOut = [fullTrace]; + var container = fullTrace.transforms; + var dataOut = [fullTrace]; for(var i = 0; i < container.length; i++) { - var transform = container[i], - _module = transformsRegistry[transform.type]; + var transform = container[i]; + var _module = transformsRegistry[transform.type]; if(_module && _module.transform) { dataOut = _module.transform(dataOut, { @@ -58436,14 +60900,25 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) { var globalFont = Lib.coerceFont(coerce, 'font'); - coerce('title', layoutOut._dfltTitle.plot); + coerce('title.text', layoutOut._dfltTitle.plot); - Lib.coerceFont(coerce, 'titlefont', { + Lib.coerceFont(coerce, 'title.font', { family: globalFont.family, size: Math.round(globalFont.size * 1.4), color: globalFont.color }); + coerce('title.xref'); + coerce('title.yref'); + coerce('title.x'); + coerce('title.y'); + coerce('title.xanchor'); + coerce('title.yanchor'); + coerce('title.pad.t'); + coerce('title.pad.r'); + coerce('title.pad.b'); + coerce('title.pad.l'); + // 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/ @@ -58476,6 +60951,25 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) { coerce('colorway'); coerce('datarevision'); + var uirevision = coerce('uirevision'); + coerce('editrevision', uirevision); + coerce('selectionrevision', uirevision); + + coerce('modebar.orientation'); + coerce('modebar.bgcolor', Color.addOpacity(layoutOut.paper_bgcolor, 0.5)); + var modebarDefaultColor = Color.contrast(Color.rgb(layoutOut.modebar.bgcolor)); + coerce('modebar.color', Color.addOpacity(modebarDefaultColor, 0.3)); + coerce('modebar.activecolor', Color.addOpacity(modebarDefaultColor, 0.7)); + coerce('modebar.uirevision', uirevision); + + coerce('meta'); + + // do not include defaults in fullLayout when users do not set transition + if(Lib.isPlainObject(layoutIn.transition)) { + coerce('transition.duration'); + coerce('transition.easing'); + coerce('transition.ordering'); + } Registry.getComponentMethod( 'calendars', @@ -58489,10 +60983,10 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) { }; plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) { - var context = gd._context || {}, - frameMargins = context.frameMargins, - newWidth, - newHeight; + var context = gd._context || {}; + var frameMargins = context.frameMargins; + var newWidth; + var newHeight; var isPlotDiv = Lib.isPlotDiv(gd); @@ -58508,21 +61002,6 @@ plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) { // just hide it document.body.style.overflow = 'hidden'; } - else if(isNumeric(frameMargins) && frameMargins > 0) { - var reservedMargins = calculateReservedMargins(gd._boundingBoxMargins), - reservedWidth = reservedMargins.left + reservedMargins.right, - reservedHeight = reservedMargins.bottom + reservedMargins.top, - factor = 1 - 2 * frameMargins; - - var gdBB = fullLayout._container && fullLayout._container.node ? - fullLayout._container.node().getBoundingClientRect() : { - width: fullLayout.width, - height: fullLayout.height - }; - - newWidth = Math.round(factor * (gdBB.width - reservedWidth)); - newHeight = Math.round(factor * (gdBB.height - reservedHeight)); - } else { // plotly.js - let the developers do what they want, either // provide height and width for the container div, @@ -58532,17 +61011,23 @@ plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) { newWidth = parseFloat(computedStyle.width) || parseFloat(computedStyle.maxWidth) || fullLayout.width; newHeight = parseFloat(computedStyle.height) || parseFloat(computedStyle.maxHeight) || fullLayout.height; + + if(isNumeric(frameMargins) && frameMargins > 0) { + var factor = 1 - 2 * frameMargins; + newWidth = Math.round(factor * newWidth); + newHeight = Math.round(factor * newHeight); + } } - var minWidth = plots.layoutAttributes.width.min, - minHeight = plots.layoutAttributes.height.min; + var minWidth = plots.layoutAttributes.width.min; + var minHeight = plots.layoutAttributes.height.min; if(newWidth < minWidth) newWidth = minWidth; if(newHeight < minHeight) newHeight = minHeight; var widthHasChanged = !layout.width && - (Math.abs(fullLayout.width - newWidth) > 1), - heightHasChanged = !layout.height && - (Math.abs(fullLayout.height - newHeight) > 1); + (Math.abs(fullLayout.width - newWidth) > 1); + var heightHasChanged = !layout.height && + (Math.abs(fullLayout.height - newHeight) > 1); if(heightHasChanged || widthHasChanged) { if(widthHasChanged) fullLayout.width = newWidth; @@ -58558,29 +61043,6 @@ plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) { plots.sanitizeMargins(fullLayout); }; -/** - * Reduce all reserved margin objects to a single required margin reservation. - * - * @param {Object} margins - * @returns {{left: number, right: number, bottom: number, top: number}} - */ -function calculateReservedMargins(margins) { - var resultingMargin = {left: 0, right: 0, bottom: 0, top: 0}, - marginName; - - if(margins) { - for(marginName in margins) { - if(margins.hasOwnProperty(marginName)) { - resultingMargin.left += margins[marginName].left || 0; - resultingMargin.right += margins[marginName].right || 0; - resultingMargin.bottom += margins[marginName].bottom || 0; - resultingMargin.top += margins[marginName].top || 0; - } - } - } - return resultingMargin; -} - plots.supplyLayoutModuleDefaults = function(layoutIn, layoutOut, fullData, transitionData) { var componentsRegistry = Registry.componentsRegistry; var basePlotModules = layoutOut._basePlotModules; @@ -58625,7 +61087,10 @@ plots.supplyLayoutModuleDefaults = function(layoutIn, layoutOut, fullData, trans } // trace module layout defaults - var modules = layoutOut._visibleModules; + // use _modules rather than _visibleModules so that even + // legendonly traces can include settings - eg barmode, which affects + // legend.traceorder default value. + var modules = layoutOut._modules; for(i = 0; i < modules.length; i++) { _module = modules[i]; @@ -58754,12 +61219,12 @@ plots.sanitizeMargins = function(fullLayout) { // polar doesn't do margins... if(!fullLayout || !fullLayout.margin) return; - var width = fullLayout.width, - height = fullLayout.height, - margin = fullLayout.margin, - plotWidth = width - (margin.l + margin.r), - plotHeight = height - (margin.t + margin.b), - correction; + var width = fullLayout.width; + var height = fullLayout.height; + var margin = fullLayout.margin; + var plotWidth = width - (margin.l + margin.r); + var plotHeight = height - (margin.t + margin.b); + var correction; // if margin.l + margin.r = 0 then plotWidth > 0 // as width >= 10 by supplyDefaults @@ -58786,7 +61251,20 @@ plots.allowAutoMargin = function(gd, id) { gd._fullLayout._pushmarginIds[id] = 1; }; -function setupAutoMargin(fullLayout) { +function initMargins(fullLayout) { + var margin = fullLayout.margin; + + if(!fullLayout._size) { + var gs = fullLayout._size = { + l: Math.round(margin.l), + r: Math.round(margin.r), + t: Math.round(margin.t), + b: Math.round(margin.b), + p: Math.round(margin.pad) + }; + gs.w = Math.round(fullLayout.width) - gs.l - gs.r; + gs.h = Math.round(fullLayout.height) - gs.t - gs.b; + } if(!fullLayout._pushmargin) fullLayout._pushmargin = {}; if(!fullLayout._pushmarginIds) fullLayout._pushmarginIds = {}; } @@ -58809,8 +61287,6 @@ function setupAutoMargin(fullLayout) { plots.autoMargin = function(gd, id, o) { var fullLayout = gd._fullLayout; - setupAutoMargin(fullLayout); - var pushMargin = fullLayout._pushmargin; var pushMarginIds = fullLayout._pushmarginIds; @@ -58854,18 +61330,19 @@ plots.autoMargin = function(gd, id, o) { plots.doAutoMargin = function(gd) { var fullLayout = gd._fullLayout; if(!fullLayout._size) fullLayout._size = {}; - setupAutoMargin(fullLayout); + initMargins(fullLayout); - var gs = fullLayout._size, - oldmargins = JSON.stringify(gs); + var gs = fullLayout._size; + var oldmargins = JSON.stringify(gs); + var margin = fullLayout.margin; // adjust margins for outside components // fullLayout.margin is the requested margin, // fullLayout._size has margins and plotsize after adjustment - var ml = Math.max(fullLayout.margin.l || 0, 0); - var mr = Math.max(fullLayout.margin.r || 0, 0); - var mt = Math.max(fullLayout.margin.t || 0, 0); - var mb = Math.max(fullLayout.margin.b || 0, 0); + var ml = margin.l; + var mr = margin.r; + var mt = margin.t; + var mb = margin.b; var pushMargin = fullLayout._pushmargin; var pushMarginIds = fullLayout._pushmarginIds; @@ -58888,23 +61365,23 @@ plots.doAutoMargin = function(gd) { for(var k1 in pushMargin) { - var pushleft = pushMargin[k1].l || {}, - pushbottom = pushMargin[k1].b || {}, - fl = pushleft.val, - pl = pushleft.size, - fb = pushbottom.val, - pb = pushbottom.size; + var pushleft = pushMargin[k1].l || {}; + var pushbottom = pushMargin[k1].b || {}; + var fl = pushleft.val; + var pl = pushleft.size; + var fb = pushbottom.val; + var pb = pushbottom.size; for(var k2 in pushMargin) { if(isNumeric(pl) && pushMargin[k2].r) { - var fr = pushMargin[k2].r.val, - pr = pushMargin[k2].r.size; + var fr = pushMargin[k2].r.val; + var pr = pushMargin[k2].r.size; if(fr > fl) { var newl = (pl * fr + - (pr - fullLayout.width) * fl) / (fr - fl), - newr = (pr * (1 - fl) + - (pl - fullLayout.width) * (1 - fr)) / (fr - fl); + (pr - fullLayout.width) * fl) / (fr - fl); + var newr = (pr * (1 - fl) + + (pl - fullLayout.width) * (1 - fr)) / (fr - fl); if(newl >= 0 && newr >= 0 && newl + newr > ml + mr) { ml = newl; mr = newr; @@ -58913,14 +61390,14 @@ plots.doAutoMargin = function(gd) { } if(isNumeric(pb) && pushMargin[k2].t) { - var ft = pushMargin[k2].t.val, - pt = pushMargin[k2].t.size; + var ft = pushMargin[k2].t.val; + var pt = pushMargin[k2].t.size; if(ft > fb) { var newb = (pb * ft + - (pt - fullLayout.height) * fb) / (ft - fb), - newt = (pt * (1 - fb) + - (pb - fullLayout.height) * (1 - ft)) / (ft - fb); + (pt - fullLayout.height) * fb) / (ft - fb); + var newt = (pt * (1 - fb) + + (pb - fullLayout.height) * (1 - ft)) / (ft - fb); if(newb >= 0 && newt >= 0 && newb + newt > mb + mt) { mb = newb; mt = newt; @@ -58935,7 +61412,7 @@ plots.doAutoMargin = function(gd) { gs.r = Math.round(mr); gs.t = Math.round(mt); gs.b = Math.round(mb); - gs.p = Math.round(fullLayout.margin.pad); + gs.p = Math.round(margin.pad); gs.w = Math.round(fullLayout.width) - gs.l - gs.r; gs.h = Math.round(fullLayout.height) - gs.t - gs.b; @@ -58982,16 +61459,17 @@ plots.graphJson = function(gd, dataonly, mode, output, useDefaults) { plots.supplyDefaults(gd); } - var data = (useDefaults) ? gd._fullData : gd.data, - layout = (useDefaults) ? gd._fullLayout : gd.layout, - frames = (gd._transitionData || {})._frames; + var data = (useDefaults) ? gd._fullData : gd.data; + var layout = (useDefaults) ? gd._fullLayout : gd.layout; + var frames = (gd._transitionData || {})._frames; function stripObj(d) { if(typeof d === 'function') { return null; } if(Lib.isPlainObject(d)) { - var o = {}, v, src; + var o = {}; + var v, src; for(v in d) { // remove private elements and functions // _ is for private, [ is a mistake ie [object Object] @@ -59324,10 +61802,9 @@ plots.extendLayout = function(destLayout, srcLayout) { }; /** - * Transition to a set of new data and layout properties + * Transition to a set of new data and layout properties from Plotly.animate * * @param {DOM element} gd - * the DOM element of the graph container div * @param {Object[]} data * an array of data objects following the normal Plotly data definition format * @param {Object} layout @@ -59340,17 +61817,15 @@ plots.extendLayout = function(destLayout, srcLayout) { * options for the transition */ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) { - var i, traceIdx; - - var dataLength = Array.isArray(data) ? data.length : 0; - var traceIndices = traces.slice(0, dataLength); - + var opts = {redraw: frameOpts.redraw}; var transitionedTraces = []; + var axEdits = []; - function prepareTransitions() { - var i; + opts.prepareFn = function() { + var dataLength = Array.isArray(data) ? data.length : 0; + var traceIndices = traces.slice(0, dataLength); - for(i = 0; i < traceIndices.length; i++) { + for(var i = 0; i < traceIndices.length; i++) { var traceIdx = traceIndices[i]; var trace = gd._fullData[traceIdx]; var module = trace._module; @@ -59396,8 +61871,213 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) plots.supplyDefaults(gd); plots.doCalcdata(gd); + var newLayout = Lib.expandObjectPaths(layout); + + if(newLayout) { + var subplots = gd._fullLayout._plots; + + for(var k in subplots) { + var plotinfo = subplots[k]; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; + var xr0 = xa.range.slice(); + var yr0 = ya.range.slice(); + + var xr1; + if(Array.isArray(newLayout[xa._name + '.range'])) { + xr1 = newLayout[xa._name + '.range'].slice(); + } else if(Array.isArray((newLayout[xa._name] || {}).range)) { + xr1 = newLayout[xa._name].range.slice(); + } + + var yr1; + if(Array.isArray(newLayout[ya._name + '.range'])) { + yr1 = newLayout[ya._name + '.range'].slice(); + } else if(Array.isArray((newLayout[ya._name] || {}).range)) { + yr1 = newLayout[ya._name].range.slice(); + } + + var editX; + if(xr0 && xr1 && (xr0[0] !== xr1[0] || xr0[1] !== xr1[1])) { + editX = {xr0: xr0, xr1: xr1}; + } + + var editY; + if(yr0 && yr1 && (yr0[0] !== yr1[0] || yr0[1] !== yr1[1])) { + editY = {yr0: yr0, yr1: yr1}; + } + + if(editX || editY) { + axEdits.push(Lib.extendFlat({plotinfo: plotinfo}, editX, editY)); + } + } + } + return Promise.resolve(); - } + }; + + opts.runFn = function(makeCallback) { + var traceTransitionOpts; + var basePlotModules = gd._fullLayout._basePlotModules; + var hasAxisTransition = axEdits.length; + var i; + + if(layout) { + for(i = 0; i < basePlotModules.length; i++) { + if(basePlotModules[i].transitionAxes) { + basePlotModules[i].transitionAxes(gd, axEdits, transitionOpts, makeCallback); + } + } + } + + // Here handle the exception that we refuse to animate scales and axes at the same + // time. In other words, if there's an axis transition, then set the data transition + // to instantaneous. + if(hasAxisTransition) { + traceTransitionOpts = Lib.extendFlat({}, transitionOpts); + traceTransitionOpts.duration = 0; + // This means do not transition traces, + // this happens on layout-only (e.g. axis range) animations + transitionedTraces = null; + } else { + traceTransitionOpts = transitionOpts; + } + + for(i = 0; i < basePlotModules.length; i++) { + // Note that we pass a callback to *create* the callback that must be invoked on completion. + // This is since not all traces know about transitions, so it greatly simplifies matters if + // the trace is responsible for creating a callback, if needed, and then executing it when + // the time is right. + basePlotModules[i].plot(gd, transitionedTraces, traceTransitionOpts, makeCallback); + } + }; + + return _transition(gd, transitionOpts, opts); +}; + +/** + * Transition to a set of new data and layout properties from Plotly.react + * + * @param {DOM element} gd + * @param {object} restyleFlags + * - anim {'all'|'some'} + * @param {object} relayoutFlags + * - anim {'all'|'some'} + * @param {object} oldFullLayout : old (pre Plotly.react) fullLayout + */ +plots.transitionFromReact = function(gd, restyleFlags, relayoutFlags, oldFullLayout) { + var fullLayout = gd._fullLayout; + var transitionOpts = fullLayout.transition; + var opts = {}; + var axEdits = []; + + opts.prepareFn = function() { + var subplots = fullLayout._plots; + + // no need to redraw at end of transition, + // if all changes are animatable + opts.redraw = false; + if(restyleFlags.anim === 'some') opts.redraw = true; + if(relayoutFlags.anim === 'some') opts.redraw = true; + + for(var k in subplots) { + var plotinfo = subplots[k]; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; + var xr0 = oldFullLayout[xa._name].range.slice(); + var yr0 = oldFullLayout[ya._name].range.slice(); + var xr1 = xa.range.slice(); + var yr1 = ya.range.slice(); + + xa.setScale(); + ya.setScale(); + + var editX; + if(xr0[0] !== xr1[0] || xr0[1] !== xr1[1]) { + editX = {xr0: xr0, xr1: xr1}; + } + + var editY; + if(yr0[0] !== yr1[0] || yr0[1] !== yr1[1]) { + editY = {yr0: yr0, yr1: yr1}; + } + + if(editX || editY) { + axEdits.push(Lib.extendFlat({plotinfo: plotinfo}, editX, editY)); + } + } + + return Promise.resolve(); + }; + + opts.runFn = function(makeCallback) { + var fullData = gd._fullData; + var fullLayout = gd._fullLayout; + var basePlotModules = fullLayout._basePlotModules; + + var axisTransitionOpts; + var traceTransitionOpts; + var transitionedTraces; + + var allTraceIndices = []; + for(var i = 0; i < fullData.length; i++) { + allTraceIndices.push(i); + } + + function transitionAxes() { + for(var j = 0; j < basePlotModules.length; j++) { + if(basePlotModules[j].transitionAxes) { + basePlotModules[j].transitionAxes(gd, axEdits, axisTransitionOpts, makeCallback); + } + } + } + + function transitionTraces() { + for(var j = 0; j < basePlotModules.length; j++) { + basePlotModules[j].plot(gd, transitionedTraces, traceTransitionOpts, makeCallback); + } + } + + if(axEdits.length && restyleFlags.anim) { + if(transitionOpts.ordering === 'traces first') { + axisTransitionOpts = Lib.extendFlat({}, transitionOpts, {duration: 0}); + transitionedTraces = allTraceIndices; + traceTransitionOpts = transitionOpts; + transitionTraces(); + setTimeout(transitionAxes, transitionOpts.duration); + } else { + axisTransitionOpts = transitionOpts; + transitionedTraces = null; + traceTransitionOpts = Lib.extendFlat({}, transitionOpts, {duration: 0}); + transitionAxes(); + transitionTraces(); + } + } else if(axEdits.length) { + axisTransitionOpts = transitionOpts; + transitionAxes(); + } else if(restyleFlags.anim) { + transitionedTraces = allTraceIndices; + traceTransitionOpts = transitionOpts; + transitionTraces(); + } + }; + + return _transition(gd, transitionOpts, opts); +}; + +/** + * trace/layout transition wrapper that works + * for transitions initiated by Plotly.animate and Plotly.react. + * + * @param {DOM element} gd + * @param {object} transitionOpts + * @param {object} opts + * - redraw {boolean} + * - prepareFn {function} *should return a Promise* + * - runFn {function} ran inside executeTransitions + */ +function _transition(gd, transitionOpts, opts) { + var aborted = false; function executeCallbacks(list) { var p = Promise.resolve(); @@ -59415,8 +62095,6 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) } } - var aborted = false; - function executeTransitions() { gd.emit('plotly_transitioning', []); @@ -59431,7 +62109,6 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) gd._transitioningWithDuration = true; } - // If another transition is triggered, this callback will be executed simply because it's // in the interruptCallbacks queue. If this transition completes, it will instead flush // that queue and forget about this callback. @@ -59439,7 +62116,7 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) aborted = true; }); - if(frameOpts.redraw) { + if(opts.redraw) { gd._transitionData._interruptCallbacks.push(function() { return Registry.call('redraw', gd); }); @@ -59465,44 +62142,10 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) }; } - var traceTransitionOpts; - var j; - var basePlotModules = gd._fullLayout._basePlotModules; - var hasAxisTransition = false; - - if(layout) { - for(j = 0; j < basePlotModules.length; j++) { - if(basePlotModules[j].transitionAxes) { - var newLayout = Lib.expandObjectPaths(layout); - hasAxisTransition = basePlotModules[j].transitionAxes(gd, newLayout, transitionOpts, makeCallback) || hasAxisTransition; - } - } - } - - // Here handle the exception that we refuse to animate scales and axes at the same - // time. In other words, if there's an axis transition, then set the data transition - // to instantaneous. - if(hasAxisTransition) { - traceTransitionOpts = Lib.extendFlat({}, transitionOpts); - traceTransitionOpts.duration = 0; - // This means do not transition traces, - // this happens on layout-only (e.g. axis range) animations - transitionedTraces = null; - } else { - traceTransitionOpts = transitionOpts; - } - - for(j = 0; j < basePlotModules.length; j++) { - // Note that we pass a callback to *create* the callback that must be invoked on completion. - // This is since not all traces know about transitions, so it greatly simplifies matters if - // the trace is responsible for creating a callback, if needed, and then executing it when - // the time is right. - basePlotModules[j].plot(gd, transitionedTraces, traceTransitionOpts, makeCallback); - } + opts.runFn(makeCallback); // If nothing else creates a callback, then this will trigger the completion in the next tick: setTimeout(makeCallback()); - }); } @@ -59515,7 +62158,7 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) flushCallbacks(gd._transitionData._interruptCallbacks); return Promise.resolve().then(function() { - if(frameOpts.redraw) { + if(opts.redraw) { return Registry.call('redraw', gd); } }).then(function() { @@ -59541,15 +62184,13 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) return executeCallbacks(gd._transitionData._interruptCallbacks); } - for(i = 0; i < traceIndices.length; i++) { - traceIdx = traceIndices[i]; - var contFull = gd._fullData[traceIdx]; - var module = contFull._module; - - if(!module) continue; - } - - var seq = [plots.previousPromises, interruptPreviousTransitions, prepareTransitions, plots.rehover, executeTransitions]; + var seq = [ + plots.previousPromises, + interruptPreviousTransitions, + opts.prepareFn, + plots.rehover, + executeTransitions + ]; var transitionStarting = Lib.syncOrAsync(seq, gd); @@ -59557,15 +62198,13 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) transitionStarting = Promise.resolve(); } - return transitionStarting.then(function() { - return gd; - }); -}; + return transitionStarting.then(function() { return gd; }); +} plots.doCalcdata = function(gd, traces) { - var axList = axisIDs.list(gd), - fullData = gd._fullData, - fullLayout = gd._fullLayout; + var axList = axisIDs.list(gd); + var fullData = gd._fullData; + var fullLayout = gd._fullLayout; var trace, _module, i, j; @@ -59618,7 +62257,7 @@ plots.doCalcdata = function(gd, traces) { ); } - clearAxesCalc(axList); + setupAxisCategories(axList, fullData); var hasCalcTransform = false; @@ -59656,7 +62295,7 @@ plots.doCalcdata = function(gd, traces) { } // clear stuff that should recomputed in 'regular' loop - if(hasCalcTransform) clearAxesCalc(axList); + if(hasCalcTransform) setupAxisCategories(axList, fullData); function calci(i, isContainer) { trace = fullData[i]; @@ -59714,9 +62353,13 @@ plots.doCalcdata = function(gd, traces) { Registry.getComponentMethod('errorbars', 'calc')(gd); }; -function clearAxesCalc(axList) { +function setupAxisCategories(axList, fullData) { for(var i = 0; i < axList.length; i++) { - axList[i].clearCalc(); + var ax = axList[i]; + ax.clearCalc(); + if(ax.type === 'multicategory') { + ax.setupMultiCategory(fullData); + } } } @@ -59780,8 +62423,8 @@ plots.generalUpdatePerTraceModule = function(gd, subplot, subplotCalcData, subpl // build up moduleName -> calcData hash for(i = 0; i < subplotCalcData.length; i++) { - var calcTraces = subplotCalcData[i], - trace = calcTraces[0].trace; + var calcTraces = subplotCalcData[i]; + var trace = calcTraces[0].trace; // skip over visible === false traces // as they don't have `_module` ref @@ -59796,8 +62439,8 @@ plots.generalUpdatePerTraceModule = function(gd, subplot, subplotCalcData, subpl // removed from the DOM. for(var moduleNameOld in traceHashOld) { if(!traceHash[moduleNameOld]) { - var fakeCalcTrace = traceHashOld[moduleNameOld][0], - fakeTrace = fakeCalcTrace[0].trace; + var fakeCalcTrace = traceHashOld[moduleNameOld][0]; + var fakeTrace = fakeCalcTrace[0].trace; fakeTrace.visible = false; traceHash[moduleNameOld] = [fakeCalcTrace]; @@ -59816,9 +62459,9 @@ plots.generalUpdatePerTraceModule = function(gd, subplot, subplotCalcData, subpl subplot.traceHash = traceHash; }; -},{"../components/color":50,"../constants/numerical":151,"../lib":169,"../plot_api/plot_schema":203,"../plot_api/plot_template":204,"../plots/cartesian/axis_ids":217,"../registry":259,"./animation_attributes":209,"./attributes":211,"./command":238,"./font_attributes":240,"./frame_attributes":241,"./layout_attributes":244,"./sort_modules":253,"d3":16,"fast-isnumeric":18}],247:[function(_dereq_,module,exports){ +},{"../components/color":51,"../constants/numerical":149,"../lib":168,"../plot_api/plot_schema":201,"../plot_api/plot_template":202,"../plots/cartesian/axis_ids":215,"../registry":257,"./animation_attributes":207,"./attributes":209,"./command":237,"./font_attributes":239,"./frame_attributes":240,"./layout_attributes":243,"d3":16,"fast-isnumeric":18}],246:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59860,9 +62503,9 @@ module.exports = { } }; -},{"../../../lib/extend":163,"../../../traces/scatter/attributes":366}],248:[function(_dereq_,module,exports){ +},{"../../../lib/extend":162,"../../../traces/scatter/attributes":367}],247:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59982,9 +62625,9 @@ module.exports = overrideAll({ } }, 'plot', 'nested'); -},{"../../../lib/extend":163,"../../../plot_api/edit_types":197,"../../cartesian/layout_attributes":226}],249:[function(_dereq_,module,exports){ +},{"../../../lib/extend":162,"../../../plot_api/edit_types":195,"../../cartesian/layout_attributes":225}],248:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59997,9 +62640,9 @@ var Polar = module.exports = _dereq_('./micropolar'); Polar.manager = _dereq_('./micropolar_manager'); -},{"./micropolar":250,"./micropolar_manager":251}],250:[function(_dereq_,module,exports){ +},{"./micropolar":249,"./micropolar_manager":250}],249:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -60215,8 +62858,8 @@ var µ = module.exports = { version: '0.2.2' }; centeringOffset[0] = Math.max(0, centeringOffset[0]); centeringOffset[1] = Math.max(0, centeringOffset[1]); svg.select('.outer-group').attr('transform', 'translate(' + centeringOffset + ')'); - if (axisConfig.title) { - var title = svg.select('g.title-group text').style(fontStyle).text(axisConfig.title); + if (axisConfig.title && axisConfig.title.text) { + var title = svg.select('g.title-group text').style(fontStyle).text(axisConfig.title.text); var titleBBox = title.node().getBBox(); title.attr({ x: chartCenter[0] - titleBBox.width / 2, @@ -61417,9 +64060,9 @@ var µ = module.exports = { version: '0.2.2' }; return exports; }; -},{"../../../constants/alignment":148,"../../../lib":169,"d3":16}],251:[function(_dereq_,module,exports){ +},{"../../../constants/alignment":146,"../../../lib":168,"d3":16}],250:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61488,24 +64131,24 @@ manager.framework = function(_gd) { }; manager.fillLayout = function(_gd) { - var container = d3.select(_gd).selectAll('.plot-container'), - paperDiv = container.selectAll('.svg-container'), - paper = _gd.framework && _gd.framework.svg && _gd.framework.svg(), - dflts = { - width: 800, - height: 600, - paper_bgcolor: Color.background, - _container: container, - _paperdiv: paperDiv, - _paper: paper - }; + var container = d3.select(_gd).selectAll('.plot-container'); + var paperDiv = container.selectAll('.svg-container'); + var paper = _gd.framework && _gd.framework.svg && _gd.framework.svg(); + var dflts = { + width: 800, + height: 600, + paper_bgcolor: Color.background, + _container: container, + _paperdiv: paperDiv, + _paper: paper + }; _gd._fullLayout = extendDeepAll(dflts, _gd.layout); }; -},{"../../../components/color":50,"../../../lib":169,"./micropolar":250,"./undo_manager":252,"d3":16}],252:[function(_dereq_,module,exports){ +},{"../../../components/color":51,"../../../lib":168,"./micropolar":249,"./undo_manager":251,"d3":16}],251:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61517,10 +64160,10 @@ manager.fillLayout = function(_gd) { // Modified from https://github.com/ArthurClemens/Javascript-Undo-Manager // Copyright (c) 2010-2013 Arthur Clemens, arthur@visiblearea.com module.exports = function UndoManager() { - var undoCommands = [], - index = -1, - isExecuting = false, - callback; + var undoCommands = []; + var index = -1; + var isExecuting = false; + var callback; function execute(command, action) { if(!command) return this; @@ -61569,36 +64212,9 @@ module.exports = function UndoManager() { }; }; -},{}],253:[function(_dereq_,module,exports){ +},{}],252:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - -// always plot splom before cartesian (i.e. scattergl traces) -function sortModules(a, b) { - if(a === 'splom') return -1; - if(b === 'splom') return 1; - return 0; -} - -function sortBasePlotModules(a, b) { - return sortModules(a.name, b.name); -} - -module.exports = { - sortBasePlotModules: sortBasePlotModules, - sortModules: sortModules -}; - -},{}],254:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61666,6 +64282,12 @@ module.exports = function handleSubplotDefaults(layoutIn, layoutOut, fullData, o subplotLayoutOut = Template.newContainer(layoutOut, id, baseId); + // All subplot containers get a `uirevision` inheriting from the base. + // Currently all subplots containers have some user interaction + // attributes, but if we ever add one that doesn't, we would need an + // option to skip this step. + coerce('uirevision', layoutOut.uirevision); + var dfltDomains = {}; dfltDomains[partition] = [i / idsLength, (i + 1) / idsLength]; handleDomainDefaults(subplotLayoutOut, layoutOut, coerce, dfltDomains); @@ -61675,9 +64297,9 @@ module.exports = function handleSubplotDefaults(layoutIn, layoutOut, fullData, o } }; -},{"../lib":169,"../plot_api/plot_template":204,"./domain":239}],255:[function(_dereq_,module,exports){ +},{"../lib":168,"../plot_api/plot_template":202,"./domain":238}],253:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61720,9 +64342,9 @@ exports.plot = function plotTernary(gd) { var ternaryIds = fullLayout._subplots[TERNARY]; for(var i = 0; i < ternaryIds.length; i++) { - var ternaryId = ternaryIds[i], - ternaryCalcData = getSubplotCalcData(calcData, TERNARY, ternaryId), - ternary = fullLayout[ternaryId]._subplot; + var ternaryId = ternaryIds[i]; + var ternaryCalcData = getSubplotCalcData(calcData, TERNARY, ternaryId); + var ternary = fullLayout[ternaryId]._subplot; // If ternary is not instantiated, create one! if(!ternary) { @@ -61759,9 +64381,9 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) } }; -},{"../../lib":169,"../../plots/get_data":242,"./layout_attributes":256,"./layout_defaults":257,"./ternary":258}],256:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/get_data":241,"./layout_attributes":254,"./layout_defaults":255,"./ternary":256}],254:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61779,7 +64401,6 @@ var extendFlat = _dereq_('../../lib/extend').extendFlat; var ternaryAxesAttrs = { title: axesAttrs.title, - titlefont: axesAttrs.titlefont, color: axesAttrs.color, // ticks tickmode: axesAttrs.tickmode, @@ -61820,10 +64441,14 @@ var ternaryAxesAttrs = { min: 0, + }, + _deprecated: { + title: axesAttrs._deprecated.title, + titlefont: axesAttrs._deprecated.titlefont } }; -module.exports = overrideAll({ +var attrs = module.exports = overrideAll({ domain: domainAttrs({name: 'ternary'}), bgcolor: { @@ -61844,9 +64469,24 @@ module.exports = overrideAll({ caxis: ternaryAxesAttrs }, 'plot', 'from-root'); -},{"../../components/color/attributes":49,"../../lib/extend":163,"../../plot_api/edit_types":197,"../cartesian/layout_attributes":226,"../domain":239}],257:[function(_dereq_,module,exports){ +// set uirevisions outside of `overrideAll` so we can get `editType: none` +attrs.uirevision = { + valType: 'any', + + editType: 'none', + +}; + +attrs.aaxis.uirevision = attrs.baxis.uirevision = attrs.caxis.uirevision = { + valType: 'any', + + editType: 'none', + +}; + +},{"../../components/color/attributes":50,"../../lib/extend":162,"../../plot_api/edit_types":195,"../cartesian/layout_attributes":225,"../domain":238}],255:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61893,15 +64533,15 @@ function handleTernaryDefaults(ternaryLayoutIn, ternaryLayoutOut, coerce, option containerOut = Template.newContainer(ternaryLayoutOut, axName); containerOut._name = axName; - handleAxisDefaults(containerIn, containerOut, options); + handleAxisDefaults(containerIn, containerOut, options, ternaryLayoutOut); } // if the min values contradict each other, set them all to default (0) // and delete *all* the inputs so the user doesn't get confused later by // changing one and having them all change. - var aaxis = ternaryLayoutOut.aaxis, - baxis = ternaryLayoutOut.baxis, - caxis = ternaryLayoutOut.caxis; + var aaxis = ternaryLayoutOut.aaxis; + var baxis = ternaryLayoutOut.baxis; + var caxis = ternaryLayoutOut.caxis; if(aaxis.min + baxis.min + caxis.min >= sum) { aaxis.min = 0; baxis.min = 0; @@ -61912,13 +64552,15 @@ function handleTernaryDefaults(ternaryLayoutIn, ternaryLayoutOut, coerce, option } } -function handleAxisDefaults(containerIn, containerOut, options) { +function handleAxisDefaults(containerIn, containerOut, options, ternaryLayoutOut) { var axAttrs = layoutAttributes[containerOut._name]; function coerce(attr, dflt) { return Lib.coerce(containerIn, containerOut, axAttrs, attr, dflt); } + coerce('uirevision', ternaryLayoutOut.uirevision); + containerOut.type = 'linear'; // no other types allowed for ternary var dfltColor = coerce('color'); @@ -61926,14 +64568,14 @@ function handleAxisDefaults(containerIn, containerOut, options) { // inherit from global font color in case that was provided. var dfltFontColor = (dfltColor !== axAttrs.color.dflt) ? dfltColor : options.font.color; - var axName = containerOut._name, - letterUpper = axName.charAt(0).toUpperCase(), - dfltTitle = 'Component ' + letterUpper; + var axName = containerOut._name; + var letterUpper = axName.charAt(0).toUpperCase(); + var dfltTitle = 'Component ' + letterUpper; - var title = coerce('title', dfltTitle); + var title = coerce('title.text', dfltTitle); containerOut._hovertitle = title === dfltTitle ? title : letterUpper; - Lib.coerceFont(coerce, 'titlefont', { + Lib.coerceFont(coerce, 'title.font', { family: options.font.family, size: Math.round(options.font.size * 1.2), color: dfltFontColor @@ -61974,9 +64616,9 @@ function handleAxisDefaults(containerIn, containerOut, options) { coerce('layer'); } -},{"../../components/color":50,"../../lib":169,"../../plot_api/plot_template":204,"../cartesian/line_grid_defaults":228,"../cartesian/tick_label_defaults":233,"../cartesian/tick_mark_defaults":234,"../cartesian/tick_value_defaults":235,"../subplot_defaults":254,"./layout_attributes":256}],258:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../../plot_api/plot_template":202,"../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":254}],256:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -62054,6 +64696,7 @@ proto.plot = function(ternaryCalcData, fullLayout) { proto.makeFramework = function(fullLayout) { var _this = this; + var gd = _this.graphDiv; var ternaryLayout = fullLayout[_this.id]; var clipId = _this.clipId = 'clip' + _this.layoutId + _this.id; @@ -62073,8 +64716,8 @@ proto.makeFramework = function(fullLayout) { _this.plotContainer = Lib.ensureSingle(_this.container, 'g', _this.id); _this.updateLayers(ternaryLayout); - Drawing.setClipUrl(_this.layers.backplot, clipId); - Drawing.setClipUrl(_this.layers.grids, clipId); + Drawing.setClipUrl(_this.layers.backplot, clipId, gd); + Drawing.setClipUrl(_this.layers.grids, clipId, gd); }; proto.updateLayers = function(ternaryLayout) { @@ -62135,9 +64778,6 @@ proto.updateLayers = function(ternaryLayout) { } else if(d === 'grids') { grids.forEach(function(d) { layers[d] = s.append('g').classed('grid ' + d, true); - - var fictID = (d === 'bgrid') ? 'x' : 'y'; - layers[d].append('g').classed(fictID, true); }); } }); @@ -62145,31 +64785,31 @@ proto.updateLayers = function(ternaryLayout) { toplevel.order(); }; -var w_over_h = Math.sqrt(4 / 3); +var whRatio = Math.sqrt(4 / 3); proto.adjustLayout = function(ternaryLayout, graphSize) { - var _this = this, - domain = ternaryLayout.domain, - xDomainCenter = (domain.x[0] + domain.x[1]) / 2, - yDomainCenter = (domain.y[0] + domain.y[1]) / 2, - xDomain = domain.x[1] - domain.x[0], - yDomain = domain.y[1] - domain.y[0], - wmax = xDomain * graphSize.w, - hmax = yDomain * graphSize.h, - sum = ternaryLayout.sum, - amin = ternaryLayout.aaxis.min, - bmin = ternaryLayout.baxis.min, - cmin = ternaryLayout.caxis.min; + var _this = this; + var domain = ternaryLayout.domain; + var xDomainCenter = (domain.x[0] + domain.x[1]) / 2; + var yDomainCenter = (domain.y[0] + domain.y[1]) / 2; + var xDomain = domain.x[1] - domain.x[0]; + var yDomain = domain.y[1] - domain.y[0]; + var wmax = xDomain * graphSize.w; + var hmax = yDomain * graphSize.h; + var sum = ternaryLayout.sum; + var amin = ternaryLayout.aaxis.min; + var bmin = ternaryLayout.baxis.min; + var cmin = ternaryLayout.caxis.min; var x0, y0, w, h, xDomainFinal, yDomainFinal; - if(wmax > w_over_h * hmax) { + if(wmax > whRatio * hmax) { h = hmax; - w = h * w_over_h; + w = h * whRatio; } else { w = wmax; - h = w / w_over_h; + h = w / whRatio; } xDomainFinal = xDomain * w / wmax; @@ -62227,23 +64867,16 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { // fictitious angles and domain, but then rotate and translate // it into place at the end var aaxis = _this.aaxis = extendFlat({}, ternaryLayout.aaxis, { - visible: true, range: [amin, sum - bmin - cmin], side: 'left', - _counterangle: 30, // tickangle = 'auto' means 0 anyway for a y axis, need to coerce to 0 here // so we can shift by 30. tickangle: (+ternaryLayout.aaxis.tickangle || 0) - 30, - domain: [yDomain0, yDomain0 + yDomainFinal * w_over_h], - _axislayer: _this.layers.aaxis, - _gridlayer: _this.layers.agrid, + domain: [yDomain0, yDomain0 + yDomainFinal * whRatio], anchor: 'free', position: 0, - _pos: 0, // _this.xaxis.domain[0] * graphSize.w, _id: 'y', - _length: w, - _gridpath: 'M0,0l' + h + ',-' + (w / 2), - automargin: false // don't use automargins routine for labels + _length: w }); setConvert(aaxis, _this.graphDiv._fullLayout); aaxis.setScale(); @@ -62251,45 +64884,28 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { // baxis goes across the bottom (backward). We can set it up as an x axis // without any enclosing transformation. var baxis = _this.baxis = extendFlat({}, ternaryLayout.baxis, { - visible: true, range: [sum - amin - cmin, bmin], side: 'bottom', - _counterangle: 30, domain: _this.xaxis.domain, - _axislayer: _this.layers.baxis, - _gridlayer: _this.layers.bgrid, - _counteraxis: _this.aaxis, anchor: 'free', position: 0, - _pos: 0, // (1 - yDomain0) * graphSize.h, _id: 'x', - _length: w, - _gridpath: 'M0,0l-' + (w / 2) + ',-' + h, - automargin: false // don't use automargins routine for labels + _length: w }); setConvert(baxis, _this.graphDiv._fullLayout); baxis.setScale(); - aaxis._counteraxis = baxis; // caxis goes down the right side. Set it up as a y axis, with // post-transformation similar to aaxis var caxis = _this.caxis = extendFlat({}, ternaryLayout.caxis, { - visible: true, range: [sum - amin - bmin, cmin], side: 'right', - _counterangle: 30, tickangle: (+ternaryLayout.caxis.tickangle || 0) + 30, - domain: [yDomain0, yDomain0 + yDomainFinal * w_over_h], - _axislayer: _this.layers.caxis, - _gridlayer: _this.layers.cgrid, - _counteraxis: _this.baxis, + domain: [yDomain0, yDomain0 + yDomainFinal * whRatio], anchor: 'free', position: 0, - _pos: 0, // _this.xaxis.domain[1] * graphSize.w, _id: 'y', - _length: w, - _gridpath: 'M0,0l-' + h + ',' + (w / 2), - automargin: false // don't use automargins routine for labels + _length: w }); setConvert(caxis, _this.graphDiv._fullLayout); caxis.setScale(); @@ -62327,10 +64943,6 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { _this.drawAxes(true); - // remove crispEdges - all the off-square angles in ternary plots - // make these counterproductive. - _this.plotContainer.selectAll('.crisp').classed('crisp', false); - _this.layers.aline.select('path') .attr('d', aaxis.showline ? 'M' + x0 + ',' + (y0 + h) + 'l' + (w / 2) + ',-' + h : 'M0,0') @@ -62353,7 +64965,8 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { Drawing.setClipUrl( _this.layers.frontplot, - _this._hasClipOnAxisFalse ? null : _this.clipId + _this._hasClipOnAxisFalse ? null : _this.clipId, + _this.graphDiv ); }; @@ -62365,80 +64978,122 @@ proto.drawAxes = function(doTitles) { var aaxis = _this.aaxis; var baxis = _this.baxis; var caxis = _this.caxis; - var newTickLayout; - newTickLayout = strTickLayout(aaxis); - if(_this.aTickLayout !== newTickLayout) { - layers.aaxis.selectAll('.ytick').remove(); - _this.aTickLayout = newTickLayout; - } - - newTickLayout = strTickLayout(baxis); - if(_this.bTickLayout !== newTickLayout) { - layers.baxis.selectAll('.xtick').remove(); - _this.bTickLayout = newTickLayout; - } - - newTickLayout = strTickLayout(caxis); - if(_this.cTickLayout !== newTickLayout) { - layers.caxis.selectAll('.ytick').remove(); - _this.cTickLayout = newTickLayout; - } - - // 3rd arg true below skips titles, so we can configure them - // correctly later on. - Axes.doTicksSingle(gd, aaxis, true); - Axes.doTicksSingle(gd, baxis, true); - Axes.doTicksSingle(gd, caxis, true); + _this.drawAx(aaxis); + _this.drawAx(baxis); + _this.drawAx(caxis); if(doTitles) { var apad = Math.max(aaxis.showticklabels ? aaxis.tickfont.size / 2 : 0, (caxis.showticklabels ? caxis.tickfont.size * 0.75 : 0) + (caxis.ticks === 'outside' ? caxis.ticklen * 0.87 : 0)); - _this.layers['a-title'] = Titles.draw(gd, 'a' + titlesuffix, { + var bpad = (baxis.showticklabels ? baxis.tickfont.size : 0) + + (baxis.ticks === 'outside' ? baxis.ticklen : 0) + 3; + + layers['a-title'] = Titles.draw(gd, 'a' + titlesuffix, { propContainer: aaxis, propName: _this.id + '.aaxis.title', placeholder: _(gd, 'Click to enter Component A title'), attributes: { x: _this.x0 + _this.w / 2, - y: _this.y0 - aaxis.titlefont.size / 3 - apad, + y: _this.y0 - aaxis.title.font.size / 3 - apad, 'text-anchor': 'middle' } }); - - - var bpad = (baxis.showticklabels ? baxis.tickfont.size : 0) + - (baxis.ticks === 'outside' ? baxis.ticklen : 0) + 3; - - _this.layers['b-title'] = Titles.draw(gd, 'b' + titlesuffix, { + layers['b-title'] = Titles.draw(gd, 'b' + titlesuffix, { propContainer: baxis, propName: _this.id + '.baxis.title', placeholder: _(gd, 'Click to enter Component B title'), attributes: { x: _this.x0 - bpad, - y: _this.y0 + _this.h + baxis.titlefont.size * 0.83 + bpad, + y: _this.y0 + _this.h + baxis.title.font.size * 0.83 + bpad, 'text-anchor': 'middle' } }); - - _this.layers['c-title'] = Titles.draw(gd, 'c' + titlesuffix, { + layers['c-title'] = Titles.draw(gd, 'c' + titlesuffix, { propContainer: caxis, propName: _this.id + '.caxis.title', placeholder: _(gd, 'Click to enter Component C title'), attributes: { x: _this.x0 + _this.w + bpad, - y: _this.y0 + _this.h + caxis.titlefont.size * 0.83 + bpad, + y: _this.y0 + _this.h + caxis.title.font.size * 0.83 + bpad, 'text-anchor': 'middle' } }); } }; +proto.drawAx = function(ax) { + var _this = this; + var gd = _this.graphDiv; + var axName = ax._name; + var axLetter = axName.charAt(0); + var axId = ax._id; + var axLayer = _this.layers[axName]; + var counterAngle = 30; + + var stashKey = axLetter + 'tickLayout'; + var newTickLayout = strTickLayout(ax); + if(_this[stashKey] !== newTickLayout) { + axLayer.selectAll('.' + axId + 'tick').remove(); + _this[stashKey] = newTickLayout; + } + + ax.setScale(); + + var vals = Axes.calcTicks(ax); + var valsClipped = Axes.clipEnds(ax, vals); + var transFn = Axes.makeTransFn(ax); + var tickSign = Axes.getTickSigns(ax)[2]; + + var caRad = Lib.deg2rad(counterAngle); + var pad = tickSign * (ax.linewidth || 1) / 2; + var len = tickSign * ax.ticklen; + var w = _this.w; + var h = _this.h; + + var tickPath = axLetter === 'b' ? + 'M0,' + pad + 'l' + (Math.sin(caRad) * len) + ',' + (Math.cos(caRad) * len) : + 'M' + pad + ',0l' + (Math.cos(caRad) * len) + ',' + (-Math.sin(caRad) * len); + + var gridPath = { + a: 'M0,0l' + h + ',-' + (w / 2), + b: 'M0,0l-' + (w / 2) + ',-' + h, + c: 'M0,0l-' + h + ',' + (w / 2) + }[axLetter]; + + Axes.drawTicks(gd, ax, { + vals: ax.ticks === 'inside' ? valsClipped : vals, + layer: axLayer, + path: tickPath, + transFn: transFn, + crisp: false + }); + + Axes.drawGrid(gd, ax, { + vals: valsClipped, + layer: _this.layers[axLetter + 'grid'], + path: gridPath, + transFn: transFn, + crisp: false + }); + + var labelFns = Axes.makeLabelFns(ax, 0, counterAngle); + + Axes.drawLabels(gd, ax, { + vals: vals, + layer: axLayer, + transFn: transFn, + labelXFn: labelFns.labelXFn, + labelYFn: labelFns.labelYFn, + labelAnchorFn: labelFns.labelAnchorFn + }); +}; + function strTickLayout(axLayout) { return axLayout.ticks + String(axLayout.ticklen) + String(axLayout.showticklabels); } - // hard coded paths for zoom corners // uses the same sizing as cartesian, length is MINZOOM/2, width is 3px var CLEN = constants.MINZOOM / 2 + 0.87; @@ -62458,10 +65113,10 @@ var STARTMARKER = 'm0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2Z'; var SHOWZOOMOUTTIP = true; proto.initInteractions = function() { - var _this = this, - dragger = _this.layers.plotbg.select('path').node(), - gd = _this.graphDiv, - zoomContainer = gd._fullLayout._zoomlayer; + var _this = this; + var dragger = _this.layers.plotbg.select('path').node(); + var gd = _this.graphDiv; + var zoomContainer = gd._fullLayout._zoomlayer; // use plotbg for the main interactions var dragOptions = { @@ -62504,18 +65159,22 @@ proto.initInteractions = function() { var x0, y0, mins0, span0, mins, lum, path0, dimmed, zb, corners; + function makeUpdate(_mins) { + var attrs = {}; + attrs[_this.id + '.aaxis.min'] = _mins.a; + attrs[_this.id + '.baxis.min'] = _mins.b; + attrs[_this.id + '.caxis.min'] = _mins.c; + return attrs; + } + function clickZoomPan(numClicks, evt) { var clickMode = gd._fullLayout.clickmode; removeZoombox(gd); if(numClicks === 2) { - var attrs = {}; - attrs[_this.id + '.aaxis.min'] = 0; - attrs[_this.id + '.baxis.min'] = 0; - attrs[_this.id + '.caxis.min'] = 0; gd.emit('plotly_doubleclick', null); - Registry.call('relayout', gd, attrs); + Registry.call('_guiRelayout', gd, makeUpdate({a: 0, b: 0, c: 0})); } if(clickMode.indexOf('select') > -1 && numClicks === 1) { @@ -62570,17 +65229,17 @@ proto.initInteractions = function() { function getCFrac(x, y) { return ((x - (_this.h - y) / Math.sqrt(3)) / _this.w); } function zoomMove(dx0, dy0) { - var x1 = x0 + dx0, - y1 = y0 + dy0, - afrac = Math.max(0, Math.min(1, getAFrac(x0, y0), getAFrac(x1, y1))), - bfrac = Math.max(0, Math.min(1, getBFrac(x0, y0), getBFrac(x1, y1))), - cfrac = Math.max(0, Math.min(1, getCFrac(x0, y0), getCFrac(x1, y1))), - xLeft = ((afrac / 2) + cfrac) * _this.w, - xRight = (1 - (afrac / 2) - bfrac) * _this.w, - xCenter = (xLeft + xRight) / 2, - xSpan = xRight - xLeft, - yBottom = (1 - afrac) * _this.h, - yTop = yBottom - xSpan / w_over_h; + var x1 = x0 + dx0; + var y1 = y0 + dy0; + var afrac = Math.max(0, Math.min(1, getAFrac(x0, y0), getAFrac(x1, y1))); + var bfrac = Math.max(0, Math.min(1, getBFrac(x0, y0), getBFrac(x1, y1))); + var cfrac = Math.max(0, Math.min(1, getCFrac(x0, y0), getCFrac(x1, y1))); + var xLeft = ((afrac / 2) + cfrac) * _this.w; + var xRight = (1 - (afrac / 2) - bfrac) * _this.w; + var xCenter = (xLeft + xRight) / 2; + var xSpan = xRight - xLeft; + var yBottom = (1 - afrac) * _this.h; + var yTop = yBottom - xSpan / whRatio; if(xSpan < constants.MINZOOM) { mins = mins0; @@ -62619,12 +65278,7 @@ proto.initInteractions = function() { if(mins === mins0) return; - var attrs = {}; - attrs[_this.id + '.aaxis.min'] = mins.a; - attrs[_this.id + '.baxis.min'] = mins.b; - attrs[_this.id + '.caxis.min'] = mins.c; - - Registry.call('relayout', gd, attrs); + Registry.call('_guiRelayout', gd, makeUpdate(mins)); if(SHOWZOOMOUTTIP && gd.data && gd._context.showTips) { Lib.notifier(_(gd, 'Double-click to zoom back out'), 'long'); @@ -62642,19 +65296,19 @@ proto.initInteractions = function() { } function plotDrag(dx, dy) { - var dxScaled = dx / _this.xaxis._m, - dyScaled = dy / _this.yaxis._m; + var dxScaled = dx / _this.xaxis._m; + var dyScaled = dy / _this.yaxis._m; mins = { a: mins0.a - dyScaled, b: mins0.b + (dxScaled + dyScaled) / 2, c: mins0.c - (dxScaled - dyScaled) / 2 }; - var minsorted = [mins.a, mins.b, mins.c].sort(), - minindices = { - a: minsorted.indexOf(mins.a), - b: minsorted.indexOf(mins.b), - c: minsorted.indexOf(mins.c) - }; + var minsorted = [mins.a, mins.b, mins.c].sort(); + var minindices = { + a: minsorted.indexOf(mins.a), + b: minsorted.indexOf(mins.b), + c: minsorted.indexOf(mins.c) + }; if(minsorted[0] < 0) { if(minsorted[1] + minsorted[0] / 2 < 0) { minsorted[2] += minsorted[0] + minsorted[1]; @@ -62688,7 +65342,6 @@ proto.initInteractions = function() { _this.caxis.range = [_this.sum - mins.a - mins.b, mins.c]; _this.drawAxes(false); - _this.plotContainer.selectAll('.crisp').classed('crisp', false); if(_this._hasClipOnAxisFalse) { _this.plotContainer @@ -62698,12 +65351,7 @@ proto.initInteractions = function() { } function dragDone() { - var attrs = {}; - attrs[_this.id + '.aaxis.min'] = mins.a; - attrs[_this.id + '.baxis.min'] = mins.b; - attrs[_this.id + '.caxis.min'] = mins.c; - - Registry.call('relayout', gd, attrs); + Registry.call('_guiRelayout', gd, makeUpdate(mins)); } // finally, set up hover and click @@ -62730,9 +65378,9 @@ function removeZoombox(gd) { .remove(); } -},{"../../components/color":50,"../../components/dragelement":72,"../../components/drawing":75,"../../components/fx":92,"../../components/titles":141,"../../lib":169,"../../lib/extend":163,"../../registry":259,"../cartesian/axes":214,"../cartesian/constants":219,"../cartesian/select":231,"../cartesian/set_convert":232,"../plots":246,"d3":16,"tinycolor2":33}],259:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/dragelement":69,"../../components/drawing":72,"../../components/fx":90,"../../components/titles":139,"../../lib":168,"../../lib/extend":162,"../../registry":257,"../cartesian/axes":212,"../cartesian/constants":218,"../cartesian/select":230,"../cartesian/set_convert":231,"../plots":245,"d3":16,"tinycolor2":34}],257:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -62764,6 +65412,7 @@ exports.layoutArrayRegexes = []; exports.traceLayoutAttributes = {}; exports.localeRegistry = {}; exports.apiMethodRegistry = {}; +exports.collectableSubplotTypes = null; /** * Top-level register routine, exported as Plotly.register @@ -62805,6 +65454,8 @@ exports.apiMethodRegistry = {}; * */ exports.register = function register(_modules) { + exports.collectableSubplotTypes = null; + if(!_modules) { throw new Error('No argument passed to Plotly.register.'); } else if(_modules && !Array.isArray(_modules)) { @@ -63172,9 +65823,9 @@ function getTraceType(traceType) { return traceType; } -},{"./lib/extend":163,"./lib/is_plain_object":171,"./lib/loggers":174,"./lib/noop":179,"./lib/push_unique":183,"./plots/attributes":211,"./plots/layout_attributes":244}],260:[function(_dereq_,module,exports){ +},{"./lib/extend":162,"./lib/is_plain_object":169,"./lib/loggers":172,"./lib/noop":177,"./lib/push_unique":181,"./plots/attributes":209,"./plots/layout_attributes":243}],258:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63199,7 +65850,7 @@ function cloneLayoutOverride(tileClass) { autosize: true, width: 150, height: 150, - title: '', + title: {text: ''}, showlegend: false, margin: {l: 5, r: 5, t: 5, b: 5, pad: 0}, annotations: [] @@ -63208,7 +65859,7 @@ function cloneLayoutOverride(tileClass) { case 'thumbnail': override = { - title: '', + title: {text: ''}, hidesources: true, showlegend: false, borderwidth: 0, @@ -63256,7 +65907,7 @@ module.exports = function clonePlot(graphObj, options) { for(i = 0; i < keys.length; i++) { if(keyIsAxis(keys[i])) { - newLayout[keys[i]].title = ''; + newLayout[keys[i]].title = {text: ''}; } } @@ -63284,7 +65935,7 @@ module.exports = function clonePlot(graphObj, options) { var axesImageOverride = {}; if(options.tileClass === 'thumbnail') { axesImageOverride = { - title: '', + title: {text: ''}, showaxeslabels: false, showticklabels: false, linetickenable: false @@ -63346,9 +65997,9 @@ module.exports = function clonePlot(graphObj, options) { return plotTile; }; -},{"../lib":169}],261:[function(_dereq_,module,exports){ +},{"../lib":168}],259:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63414,9 +66065,9 @@ function downloadImage(gd, opts) { module.exports = downloadImage; -},{"../lib":169,"../plot_api/to_image":207,"./filesaver":262}],262:[function(_dereq_,module,exports){ +},{"../lib":168,"../plot_api/to_image":205,"./filesaver":260}],260:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63486,9 +66137,9 @@ var fileSaver = function(url, name) { module.exports = fileSaver; -},{}],263:[function(_dereq_,module,exports){ +},{}],261:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63523,9 +66174,9 @@ exports.getRedrawFunc = function(gd) { }; }; -},{}],264:[function(_dereq_,module,exports){ +},{}],262:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63549,9 +66200,9 @@ var Snapshot = { module.exports = Snapshot; -},{"./cloneplot":260,"./download":261,"./helpers":263,"./svgtoimg":265,"./toimage":266,"./tosvg":267}],265:[function(_dereq_,module,exports){ +},{"./cloneplot":258,"./download":259,"./helpers":261,"./svgtoimg":263,"./toimage":264,"./tosvg":265}],263:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63665,9 +66316,9 @@ function svgToImg(opts) { module.exports = svgToImg; -},{"../lib":169,"events":15}],266:[function(_dereq_,module,exports){ +},{"../lib":168,"events":15}],264:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63744,9 +66395,9 @@ function toImage(gd, opts) { module.exports = toImage; -},{"../lib":169,"../registry":259,"./cloneplot":260,"./helpers":263,"./svgtoimg":265,"./tosvg":267,"events":15}],267:[function(_dereq_,module,exports){ +},{"../lib":168,"../registry":257,"./cloneplot":258,"./helpers":261,"./svgtoimg":263,"./tosvg":265,"events":15}],265:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63926,9 +66577,9 @@ module.exports = function toSVG(gd, format, scale) { return s; }; -},{"../components/color":50,"../components/drawing":75,"../constants/xmlns_namespaces":152,"../lib":169,"d3":16}],268:[function(_dereq_,module,exports){ +},{"../components/color":51,"../components/drawing":72,"../constants/xmlns_namespaces":150,"../lib":168,"d3":16}],266:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63961,9 +66612,9 @@ module.exports = function arraysToCalcdata(cd, trace) { } }; -},{"../../lib":169}],269:[function(_dereq_,module,exports){ +},{"../../lib":168}],267:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63973,15 +66624,18 @@ module.exports = function arraysToCalcdata(cd, trace) { 'use strict'; var scatterAttrs = _dereq_('../scatter/attributes'); +var hovertemplateAttrs = _dereq_('../../components/fx/hovertemplate_attributes'); var colorAttributes = _dereq_('../../components/colorscale/attributes'); var colorbarAttrs = _dereq_('../../components/colorbar/attributes'); var fontAttrs = _dereq_('../../plots/font_attributes'); +var constants = _dereq_('./constants.js'); var extendFlat = _dereq_('../../lib/extend').extendFlat; var textFontAttrs = fontAttrs({ editType: 'calc', arrayOk: true, + colorEditType: 'style', }); @@ -64023,6 +66677,9 @@ module.exports = { text: scatterAttrs.text, hovertext: scatterAttrs.hovertext, + hovertemplate: hovertemplateAttrs({}, { + keys: constants.eventDataKeys + }), textposition: { valType: 'enumerated', @@ -64130,9 +66787,9 @@ module.exports = { } }; -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../lib/extend":163,"../../plots/font_attributes":240,"../scatter/attributes":366}],270:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../components/fx/hovertemplate_attributes":89,"../../lib/extend":162,"../../plots/font_attributes":239,"../scatter/attributes":367,"./constants.js":269}],268:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -64142,7 +66799,7 @@ module.exports = { 'use strict'; var Axes = _dereq_('../../plots/cartesian/axes'); -var hasColorscale = _dereq_('../../components/colorscale/has_colorscale'); +var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale; var colorscaleCalc = _dereq_('../../components/colorscale/calc'); var arraysToCalcdata = _dereq_('./arrays_to_calcdata'); var calcSelection = _dereq_('../scatter/calc_selection'); @@ -64175,10 +66832,18 @@ module.exports = function calc(gd, trace) { // auto-z and autocolorscale if applicable if(hasColorscale(trace, 'marker')) { - colorscaleCalc(trace, trace.marker.color, 'marker', 'c'); + colorscaleCalc(gd, trace, { + vals: trace.marker.color, + containerStr: 'marker', + cLetter: 'c' + }); } if(hasColorscale(trace, 'marker.line')) { - colorscaleCalc(trace, trace.marker.line.color, 'marker.line', 'c'); + colorscaleCalc(gd, trace, { + vals: trace.marker.line.color, + containerStr: 'marker.line', + cLetter: 'c' + }); } arraysToCalcdata(cd, trace); @@ -64187,9 +66852,9 @@ module.exports = function calc(gd, trace) { return cd; }; -},{"../../components/colorscale/calc":58,"../../components/colorscale/has_colorscale":64,"../../plots/cartesian/axes":214,"../scatter/calc_selection":368,"./arrays_to_calcdata":268}],271:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"../../plots/cartesian/axes":212,"../scatter/calc_selection":369,"./arrays_to_calcdata":266}],269:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -64197,6 +66862,21 @@ module.exports = function calc(gd, trace) { */ +'use strict'; + +module.exports = { + eventDataKeys: [] +}; + +},{}],270:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); @@ -64215,15 +66895,15 @@ var Sieve = _dereq_('./sieve.js'); */ function crossTraceCalc(gd, plotinfo) { - var xa = plotinfo.xaxis, - ya = plotinfo.yaxis; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; - var fullTraces = gd._fullData, - calcTraces = gd.calcdata, - calcTracesHorizontal = [], - calcTracesVertical = [], - i; - for(i = 0; i < fullTraces.length; i++) { + var fullTraces = gd._fullData; + var calcTraces = gd.calcdata; + var calcTracesHorizontal = []; + var calcTracesVertical = []; + + for(var i = 0; i < fullTraces.length; i++) { var fullTrace = fullTraces[i]; if( fullTrace.visible === true && @@ -64233,8 +66913,7 @@ function crossTraceCalc(gd, plotinfo) { ) { if(fullTrace.orientation === 'h') { calcTracesHorizontal.push(calcTraces[i]); - } - else { + } else { calcTracesVertical.push(calcTraces[i]); } } @@ -64247,19 +66926,18 @@ function crossTraceCalc(gd, plotinfo) { function setGroupPositions(gd, pa, sa, calcTraces) { if(!calcTraces.length) return; - var barmode = gd._fullLayout.barmode, - overlay = (barmode === 'overlay'), - group = (barmode === 'group'), - excluded, - included, - i, calcTrace, fullTrace; + var barmode = gd._fullLayout.barmode; + var overlay = (barmode === 'overlay'); + var group = (barmode === 'group'); + var excluded; + var included; + var i, calcTrace, fullTrace; initBase(gd, pa, sa, calcTraces); if(overlay) { setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces); - } - else if(group) { + } else if(group) { // exclude from the group those traces for which the user set an offset excluded = []; included = []; @@ -64277,8 +66955,7 @@ function setGroupPositions(gd, pa, sa, calcTraces) { if(excluded.length) { setGroupPositionsInOverlayMode(gd, pa, sa, excluded); } - } - else { + } else { // exclude from the stack those traces for which the user set a base excluded = []; included = []; @@ -64316,9 +66993,14 @@ function initBase(gd, pa, sa, calcTraces) { // time. But included here for completeness. var scalendar = trace.orientation === 'h' ? trace.xcalendar : trace.ycalendar; + // 'base' on categorical axes makes no sense + var d2c = sa.type === 'category' || sa.type === 'multicategory' ? + function() { return null; } : + sa.d2c; + if(isArrayOrTypedArray(base)) { for(j = 0; j < Math.min(base.length, cd.length); j++) { - b = sa.d2c(base[j], 0, scalendar); + b = d2c(base[j], 0, scalendar); if(isNumeric(b)) { cd[j].b = +b; cd[j].hasB = 1; @@ -64329,7 +67011,7 @@ function initBase(gd, pa, sa, calcTraces) { cd[j].b = 0; } } else { - b = sa.d2c(base, 0, scalendar); + b = d2c(base, 0, scalendar); var hasBase = isNumeric(b); b = hasBase ? b : 0; for(j = 0; j < cd.length; j++) { @@ -64340,19 +67022,15 @@ function initBase(gd, pa, sa, calcTraces) { } } - function setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces) { - var barnorm = gd._fullLayout.barnorm, - separateNegativeValues = false, - dontMergeOverlappingData = !barnorm; + var barnorm = gd._fullLayout.barnorm; + var separateNegativeValues = false; + var dontMergeOverlappingData = !barnorm; // update position axis and set bar offsets and widths for(var i = 0; i < calcTraces.length; i++) { var calcTrace = calcTraces[i]; - - var sieve = new Sieve( - [calcTrace], separateNegativeValues, dontMergeOverlappingData - ); + var sieve = new Sieve([calcTrace], separateNegativeValues, dontMergeOverlappingData); // set bar offsets and widths, and update position axis setOffsetAndWidth(gd, pa, sieve); @@ -64365,22 +67043,18 @@ function setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces) { if(barnorm) { sieveBars(gd, sa, sieve); normalizeBars(gd, sa, sieve); - } - else { + } else { setBaseAndTop(gd, sa, sieve); } } } - function setGroupPositionsInGroupMode(gd, pa, sa, calcTraces) { - var fullLayout = gd._fullLayout, - barnorm = fullLayout.barnorm, - separateNegativeValues = false, - dontMergeOverlappingData = !barnorm, - sieve = new Sieve( - calcTraces, separateNegativeValues, dontMergeOverlappingData - ); + var fullLayout = gd._fullLayout; + var barnorm = fullLayout.barnorm; + var separateNegativeValues = false; + var dontMergeOverlappingData = !barnorm; + var sieve = new Sieve(calcTraces, separateNegativeValues, dontMergeOverlappingData); // set bar offsets and widths, and update position axis setOffsetAndWidthInGroupMode(gd, pa, sieve); @@ -64389,24 +67063,20 @@ function setGroupPositionsInGroupMode(gd, pa, sa, calcTraces) { if(barnorm) { sieveBars(gd, sa, sieve); normalizeBars(gd, sa, sieve); - } - else { + } else { setBaseAndTop(gd, sa, sieve); } } - function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) { - var fullLayout = gd._fullLayout, - barmode = fullLayout.barmode, - stack = (barmode === 'stack'), - relative = (barmode === 'relative'), - barnorm = gd._fullLayout.barnorm, - separateNegativeValues = relative, - dontMergeOverlappingData = !(barnorm || stack || relative), - sieve = new Sieve( - calcTraces, separateNegativeValues, dontMergeOverlappingData - ); + var fullLayout = gd._fullLayout; + var barmode = fullLayout.barmode; + var stack = barmode === 'stack'; + var relative = barmode === 'relative'; + var barnorm = fullLayout.barnorm; + var separateNegativeValues = relative; + var dontMergeOverlappingData = !(barnorm || stack || relative); + var sieve = new Sieve(calcTraces, separateNegativeValues, dontMergeOverlappingData); // set bar offsets and widths, and update position axis setOffsetAndWidth(gd, pa, sieve); @@ -64421,10 +67091,10 @@ function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) { for(var j = 0; j < calcTrace.length; j++) { var bar = calcTrace[j]; - if(bar.s === BADNUM) continue; - - var isOutmostBar = ((bar.b + bar.s) === sieve.get(bar.p, bar.s)); - if(isOutmostBar) bar._outmost = true; + if(bar.s !== BADNUM) { + var isOutmostBar = ((bar.b + bar.s) === sieve.get(bar.p, bar.s)); + if(isOutmostBar) bar._outmost = true; + } } } @@ -64433,30 +67103,26 @@ function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) { if(barnorm) normalizeBars(gd, sa, sieve); } - function setOffsetAndWidth(gd, pa, sieve) { - var fullLayout = gd._fullLayout, - bargap = fullLayout.bargap, - bargroupgap = fullLayout.bargroupgap || 0, - minDiff = sieve.minDiff, - calcTraces = sieve.traces, - i, calcTrace, calcTrace0, - t; + var fullLayout = gd._fullLayout; + var bargap = fullLayout.bargap; + var bargroupgap = fullLayout.bargroupgap || 0; + var minDiff = sieve.minDiff; + var calcTraces = sieve.traces; // set bar offsets and widths - var barGroupWidth = minDiff * (1 - bargap), - barWidthPlusGap = barGroupWidth, - barWidth = barWidthPlusGap * (1 - bargroupgap); + var barGroupWidth = minDiff * (1 - bargap); + var barWidthPlusGap = barGroupWidth; + var barWidth = barWidthPlusGap * (1 - bargroupgap); // computer bar group center and bar offset var offsetFromCenter = -barWidth / 2; - for(i = 0; i < calcTraces.length; i++) { - calcTrace = calcTraces[i]; - calcTrace0 = calcTrace[0]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; + var t = calcTrace[0].t; // store bar width and offset for this trace - t = calcTrace0.t; t.barwidth = barWidth; t.poffset = offsetFromCenter; t.bargroupwidth = barGroupWidth; @@ -64476,38 +67142,34 @@ function setOffsetAndWidth(gd, pa, sieve) { updatePositionAxis(gd, pa, sieve); } - function setOffsetAndWidthInGroupMode(gd, pa, sieve) { - var fullLayout = gd._fullLayout, - bargap = fullLayout.bargap, - bargroupgap = fullLayout.bargroupgap || 0, - positions = sieve.positions, - distinctPositions = sieve.distinctPositions, - minDiff = sieve.minDiff, - calcTraces = sieve.traces, - i, calcTrace, calcTrace0, - t; + var fullLayout = gd._fullLayout; + var bargap = fullLayout.bargap; + var bargroupgap = fullLayout.bargroupgap || 0; + var positions = sieve.positions; + var distinctPositions = sieve.distinctPositions; + var minDiff = sieve.minDiff; + var calcTraces = sieve.traces; // if there aren't any overlapping positions, // let them have full width even if mode is group var overlap = (positions.length !== distinctPositions.length); - var nTraces = calcTraces.length, - barGroupWidth = minDiff * (1 - bargap), - barWidthPlusGap = (overlap) ? barGroupWidth / nTraces : barGroupWidth, - barWidth = barWidthPlusGap * (1 - bargroupgap); + var nTraces = calcTraces.length; + var barGroupWidth = minDiff * (1 - bargap); + var barWidthPlusGap = (overlap) ? barGroupWidth / nTraces : barGroupWidth; + var barWidth = barWidthPlusGap * (1 - bargroupgap); - for(i = 0; i < nTraces; i++) { - calcTrace = calcTraces[i]; - calcTrace0 = calcTrace[0]; + for(var i = 0; i < nTraces; i++) { + var calcTrace = calcTraces[i]; + var t = calcTrace[0].t; // computer bar group center and bar offset - var offsetFromCenter = (overlap) ? - ((2 * i + 1 - nTraces) * barWidthPlusGap - barWidth) / 2 : - -barWidth / 2; + var offsetFromCenter = overlap ? + ((2 * i + 1 - nTraces) * barWidthPlusGap - barWidth) / 2 : + -barWidth / 2; // store bar width and offset for this trace - t = calcTrace0.t; t.barwidth = barWidth; t.poffset = offsetFromCenter; t.bargroupwidth = barGroupWidth; @@ -64527,26 +67189,22 @@ function setOffsetAndWidthInGroupMode(gd, pa, sieve) { updatePositionAxis(gd, pa, sieve, overlap); } - function applyAttributes(sieve) { - var calcTraces = sieve.traces, - i, calcTrace, calcTrace0, fullTrace, - j, - t; + var calcTraces = sieve.traces; + var i, j; for(i = 0; i < calcTraces.length; i++) { - calcTrace = calcTraces[i]; - calcTrace0 = calcTrace[0]; - fullTrace = calcTrace0.trace; - t = calcTrace0.t; - - var offset = fullTrace._offset || fullTrace.offset, - initialPoffset = t.poffset, - newPoffset; + var calcTrace = calcTraces[i]; + var calcTrace0 = calcTrace[0]; + var fullTrace = calcTrace0.trace; + var t = calcTrace0.t; + var offset = fullTrace._offset || fullTrace.offset; + var initialPoffset = t.poffset; + var newPoffset; if(isArrayOrTypedArray(offset)) { // if offset is an array, then clone it into t.poffset. - newPoffset = offset.slice(0, calcTrace.length); + newPoffset = Array.prototype.slice.call(offset, 0, calcTrace.length); // guard against non-numeric items for(j = 0; j < newPoffset.length; j++) { @@ -64562,17 +67220,16 @@ function applyAttributes(sieve) { } t.poffset = newPoffset; - } - else if(offset !== undefined) { + } else if(offset !== undefined) { t.poffset = offset; } - var width = fullTrace._width || fullTrace.width, - initialBarwidth = t.barwidth; + var width = fullTrace._width || fullTrace.width; + var initialBarwidth = t.barwidth; if(isArrayOrTypedArray(width)) { // if width is an array, then clone it into t.barwidth. - var newBarwidth = width.slice(0, calcTrace.length); + var newBarwidth = Array.prototype.slice.call(width, 0, calcTrace.length); // guard against non-numeric items for(j = 0; j < newBarwidth.length; j++) { @@ -64598,8 +67255,7 @@ function applyAttributes(sieve) { } t.poffset = newPoffset; } - } - else if(width !== undefined) { + } else if(width !== undefined) { t.barwidth = width; // if user didn't set offset, @@ -64611,234 +67267,217 @@ function applyAttributes(sieve) { } } - function setBarCenterAndWidth(gd, pa, sieve) { - var calcTraces = sieve.traces, - pLetter = getAxisLetter(pa); + var calcTraces = sieve.traces; + var pLetter = getAxisLetter(pa); for(var i = 0; i < calcTraces.length; i++) { - var calcTrace = calcTraces[i], - t = calcTrace[0].t, - poffset = t.poffset, - poffsetIsArray = Array.isArray(poffset), - barwidth = t.barwidth, - barwidthIsArray = Array.isArray(barwidth); + var calcTrace = calcTraces[i]; + var t = calcTrace[0].t; + var poffset = t.poffset; + var poffsetIsArray = Array.isArray(poffset); + var barwidth = t.barwidth; + var barwidthIsArray = Array.isArray(barwidth); for(var j = 0; j < calcTrace.length; j++) { var calcBar = calcTrace[j]; // store the actual bar width and position, for use by hover - var width = calcBar.w = (barwidthIsArray) ? barwidth[j] : barwidth; - calcBar[pLetter] = calcBar.p + - ((poffsetIsArray) ? poffset[j] : poffset) + - width / 2; - - + var width = calcBar.w = barwidthIsArray ? barwidth[j] : barwidth; + calcBar[pLetter] = calcBar.p + (poffsetIsArray ? poffset[j] : poffset) + width / 2; } } } - function updatePositionAxis(gd, pa, sieve, allowMinDtick) { - var calcTraces = sieve.traces, - distinctPositions = sieve.distinctPositions, - distinctPositions0 = distinctPositions[0], - minDiff = sieve.minDiff, - vpad = minDiff / 2; + var calcTraces = sieve.traces; + var minDiff = sieve.minDiff; + var vpad = minDiff / 2; - Axes.minDtick(pa, minDiff, distinctPositions0, allowMinDtick); - - // If the user set the bar width or the offset, - // then bars can be shifted away from their positions - // and widths can be larger than minDiff. - // - // Here, we compute pMin and pMax to expand the position axis, - // so that all bars are fully within the axis range. - var pMin = Math.min.apply(Math, distinctPositions) - vpad, - pMax = Math.max.apply(Math, distinctPositions) + vpad; + Axes.minDtick(pa, sieve.minDiff, sieve.distinctPositions[0], allowMinDtick); for(var i = 0; i < calcTraces.length; i++) { - var calcTrace = calcTraces[i], - calcTrace0 = calcTrace[0], - fullTrace = calcTrace0.trace; + var calcTrace = calcTraces[i]; + var calcTrace0 = calcTrace[0]; + var fullTrace = calcTrace0.trace; + var pts = []; + var bar, l, r, j; - if(fullTrace.width === undefined && fullTrace.offset === undefined) { - continue; + for(j = 0; j < calcTrace.length; j++) { + bar = calcTrace[j]; + l = bar.p - vpad; + r = bar.p + vpad; + pts.push(l, r); } - var t = calcTrace0.t, - poffset = t.poffset, - barwidth = t.barwidth, - poffsetIsArray = Array.isArray(poffset), - barwidthIsArray = Array.isArray(barwidth); + if(fullTrace.width || fullTrace.offset) { + var t = calcTrace0.t; + var poffset = t.poffset; + var barwidth = t.barwidth; + var poffsetIsArray = Array.isArray(poffset); + var barwidthIsArray = Array.isArray(barwidth); - for(var j = 0; j < calcTrace.length; j++) { - var calcBar = calcTrace[j], - calcBarOffset = (poffsetIsArray) ? poffset[j] : poffset, - calcBarWidth = (barwidthIsArray) ? barwidth[j] : barwidth, - p = calcBar.p, - l = p + calcBarOffset, + for(j = 0; j < calcTrace.length; j++) { + bar = calcTrace[j]; + var calcBarOffset = poffsetIsArray ? poffset[j] : poffset; + var calcBarWidth = barwidthIsArray ? barwidth[j] : barwidth; + l = bar.p + calcBarOffset; r = l + calcBarWidth; - - pMin = Math.min(pMin, l); - pMax = Math.max(pMax, r); - } - } - - var extremes = Axes.findExtremes(pa, [pMin, pMax], {padded: false}); - putExtremes(calcTraces, pa, extremes); -} - -function expandRange(range, newValue) { - if(isNumeric(range[0])) range[0] = Math.min(range[0], newValue); - else range[0] = newValue; - - if(isNumeric(range[1])) range[1] = Math.max(range[1], newValue); - else range[1] = newValue; -} - -function setBaseAndTop(gd, sa, sieve) { - // store these bar bases and tops in calcdata - // and make sure the size axis includes zero, - // along with the bases and tops of each bar. - var traces = sieve.traces, - sLetter = getAxisLetter(sa), - sRange = [null, null]; - - for(var i = 0; i < traces.length; i++) { - var trace = traces[i]; - - for(var j = 0; j < trace.length; j++) { - var bar = trace[j], - barBase = bar.b, - barTop = barBase + bar.s; - - bar[sLetter] = barTop; - - if(isNumeric(sa.c2l(barTop))) expandRange(sRange, barTop); - if(bar.hasB && isNumeric(sa.c2l(barBase))) expandRange(sRange, barBase); - } - } - - var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: true}); - putExtremes(traces, sa, extremes); -} - - -function stackBars(gd, sa, sieve) { - var fullLayout = gd._fullLayout, - barnorm = fullLayout.barnorm, - sLetter = getAxisLetter(sa), - traces = sieve.traces, - i, trace, - j, bar; - - var sRange = [null, null]; - - for(i = 0; i < traces.length; i++) { - trace = traces[i]; - - for(j = 0; j < trace.length; j++) { - bar = trace[j]; - - if(bar.s === BADNUM) continue; - - // stack current bar and get previous sum - var barBase = sieve.put(bar.p, bar.b + bar.s), - barTop = barBase + bar.b + bar.s; - - // store the bar base and top in each calcdata item - bar.b = barBase; - bar[sLetter] = barTop; - - if(!barnorm) { - if(isNumeric(sa.c2l(barTop))) expandRange(sRange, barTop); - if(bar.hasB && isNumeric(sa.c2l(barBase))) expandRange(sRange, barBase); + pts.push(l, r); } } - } - // if barnorm is set, let normalizeBars update the axis range - if(!barnorm) { - var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: true}); - putExtremes(traces, sa, extremes); + fullTrace._extremes[pa._id] = Axes.findExtremes(pa, pts, {padded: false}); } } +// store these bar bases and tops in calcdata +// and make sure the size axis includes zero, +// along with the bases and tops of each bar. +function setBaseAndTop(gd, sa, sieve) { + var calcTraces = sieve.traces; + var sLetter = getAxisLetter(sa); + + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; + var fullTrace = calcTrace[0].trace; + var pts = []; + var allBarBaseAboveZero = true; + + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; + var barBase = bar.b; + var barTop = barBase + bar.s; + + bar[sLetter] = barTop; + pts.push(barTop); + if(bar.hasB) pts.push(barBase); + + if(!bar.hasB || !(bar.b > 0 && bar.s > 0)) { + allBarBaseAboveZero = false; + } + } + + fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { + tozero: !allBarBaseAboveZero, + padded: true + }); + } +} + +function stackBars(gd, sa, sieve) { + var fullLayout = gd._fullLayout; + var barnorm = fullLayout.barnorm; + var sLetter = getAxisLetter(sa); + var calcTraces = sieve.traces; + + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; + var fullTrace = calcTrace[0].trace; + var pts = []; + + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; + + if(bar.s !== BADNUM) { + // stack current bar and get previous sum + var barBase = sieve.put(bar.p, bar.b + bar.s); + var barTop = barBase + bar.b + bar.s; + + // store the bar base and top in each calcdata item + bar.b = barBase; + bar[sLetter] = barTop; + + if(!barnorm) { + pts.push(barTop); + if(bar.hasB) pts.push(barBase); + } + } + } + + // if barnorm is set, let normalizeBars update the axis range + if(!barnorm) { + fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { + // N.B. we don't stack base with 'base', + // so set tozero:true always! + tozero: true, + padded: true + }); + } + } +} function sieveBars(gd, sa, sieve) { - var traces = sieve.traces; + var calcTraces = sieve.traces; - for(var i = 0; i < traces.length; i++) { - var trace = traces[i]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; - for(var j = 0; j < trace.length; j++) { - var bar = trace[j]; + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; if(bar.s !== BADNUM) sieve.put(bar.p, bar.b + bar.s); } } } - +// Note: +// +// normalizeBars requires that either sieveBars or stackBars has been +// previously invoked. function normalizeBars(gd, sa, sieve) { - // Note: - // - // normalizeBars requires that either sieveBars or stackBars has been - // previously invoked. + var fullLayout = gd._fullLayout; + var calcTraces = sieve.traces; + var sLetter = getAxisLetter(sa); + var sTop = fullLayout.barnorm === 'fraction' ? 1 : 100; + var sTiny = sTop / 1e9; // in case of rounding error in sum + var sMin = sa.l2c(sa.c2l(0)); + var sMax = fullLayout.barmode === 'stack' ? sTop : sMin; - var traces = sieve.traces, - sLetter = getAxisLetter(sa), - sTop = (gd._fullLayout.barnorm === 'fraction') ? 1 : 100, - sTiny = sTop / 1e9, // in case of rounding error in sum - sMin = sa.l2c(sa.c2l(0)), - sMax = (gd._fullLayout.barmode === 'stack') ? sTop : sMin, - sRange = [sMin, sMax], - padded = false; - - function maybeExpand(newValue) { - if(isNumeric(sa.c2l(newValue)) && - ((newValue < sMin - sTiny) || (newValue > sMax + sTiny) || !isNumeric(sMin)) - ) { - padded = true; - expandRange(sRange, newValue); - } + function needsPadding(v) { + return ( + isNumeric(sa.c2l(v)) && + ((v < sMin - sTiny) || (v > sMax + sTiny) || !isNumeric(sMin)) + ); } - for(var i = 0; i < traces.length; i++) { - var trace = traces[i]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; + var fullTrace = calcTrace[0].trace; + var pts = []; + var allBarBaseAboveZero = true; + var padded = false; - for(var j = 0; j < trace.length; j++) { - var bar = trace[j]; + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; - if(bar.s === BADNUM) continue; + if(bar.s !== BADNUM) { + var scale = Math.abs(sTop / sieve.get(bar.p, bar.s)); + bar.b *= scale; + bar.s *= scale; - var scale = Math.abs(sTop / sieve.get(bar.p, bar.s)); - bar.b *= scale; - bar.s *= scale; + var barBase = bar.b; + var barTop = barBase + bar.s; - var barBase = bar.b, - barTop = barBase + bar.s; - bar[sLetter] = barTop; + bar[sLetter] = barTop; + pts.push(barTop); + padded = padded || needsPadding(barTop); - maybeExpand(barTop); - if(bar.hasB) maybeExpand(barBase); + if(bar.hasB) { + pts.push(barBase); + padded = padded || needsPadding(barBase); + } + + if(!bar.hasB || !(bar.b > 0 && bar.s > 0)) { + allBarBaseAboveZero = false; + } + } } - } - // update range of size axis - var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: padded}); - putExtremes(traces, sa, extremes); -} - - -function getAxisLetter(ax) { - return ax._id.charAt(0); -} - -function putExtremes(cd, ax, extremes) { - for(var i = 0; i < cd.length; i++) { - cd[i][0].trace._extremes[ax._id] = extremes; + fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { + tozero: !allBarBaseAboveZero, + padded: padded + }); } } @@ -64848,12 +67487,13 @@ function putExtremes(cd, ax, extremes) { // run once per trace group (subplot & direction) and // the same mapping is attached to all calcdata traces function collectExtents(calcTraces, pa) { - var posLetter = pa._id.charAt(0); + var pLetter = getAxisLetter(pa); var extents = {}; + var i, j, cd; + var pMin = Infinity; var pMax = -Infinity; - var i, j, cd; for(i = 0; i < calcTraces.length; i++) { cd = calcTraces[i]; for(j = 0; j < cd.length; j++) { @@ -64873,20 +67513,19 @@ function collectExtents(calcTraces, pa) { return String(Math.round(roundFactor * (p - pMin))); }; - var poffset, poffsetIsArray; - for(i = 0; i < calcTraces.length; i++) { cd = calcTraces[i]; cd[0].t.extents = extents; - poffset = cd[0].t.poffset; - poffsetIsArray = Array.isArray(poffset); + + var poffset = cd[0].t.poffset; + var poffsetIsArray = Array.isArray(poffset); for(j = 0; j < cd.length; j++) { var di = cd[j]; - var p0 = di[posLetter] - di.w / 2; + var p0 = di[pLetter] - di.w / 2; if(isNumeric(p0)) { - var p1 = di[posLetter] + di.w / 2; + var p1 = di[pLetter] + di.w / 2; var pVal = round(di.p); if(extents[pVal]) { extents[pVal] = [Math.min(p0, extents[pVal][0]), Math.max(p1, extents[pVal][1])]; @@ -64895,7 +67534,7 @@ function collectExtents(calcTraces, pa) { } } - di.p0 = di.p + ((poffsetIsArray) ? poffset[j] : poffset); + di.p0 = di.p + (poffsetIsArray ? poffset[j] : poffset); di.p1 = di.p0 + di.w; di.s0 = di.b; di.s1 = di.s0 + di.s; @@ -64903,14 +67542,18 @@ function collectExtents(calcTraces, pa) { } } +function getAxisLetter(ax) { + return ax._id.charAt(0); +} + module.exports = { crossTraceCalc: crossTraceCalc, setGroupPositions: setGroupPositions }; -},{"../../constants/numerical":151,"../../lib":169,"../../plots/cartesian/axes":214,"../../registry":259,"./sieve.js":279,"fast-isnumeric":18}],272:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"../../plots/cartesian/axes":212,"../../registry":257,"./sieve.js":279,"fast-isnumeric":18}],271:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -64948,17 +67591,31 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('text'); coerce('hovertext'); + coerce('hovertemplate'); var textPosition = coerce('textposition'); - var hasBoth = Array.isArray(textPosition) || textPosition === 'auto', - hasInside = hasBoth || textPosition === 'inside', - hasOutside = hasBoth || textPosition === 'outside'; + var hasBoth = Array.isArray(textPosition) || textPosition === 'auto'; + var hasInside = hasBoth || textPosition === 'inside'; + var hasOutside = hasBoth || textPosition === 'outside'; if(hasInside || hasOutside) { var textFont = coerceFont(coerce, 'textfont', layout.font); - if(hasInside) coerceFont(coerce, 'insidetextfont', textFont); + + // Note that coercing `insidetextfont` is always needed – + // even if `textposition` is `outside` for each trace – since + // an outside label can become an inside one, for example because + // of a bar being stacked on top of it. + var insideTextFontDefault = Lib.extendFlat({}, textFont); + var isTraceTextfontColorSet = traceIn.textfont && traceIn.textfont.color; + var isColorInheritedFromLayoutFont = !isTraceTextfontColorSet; + if(isColorInheritedFromLayoutFont) { + delete insideTextFontDefault.color; + } + coerceFont(coerce, 'insidetextfont', insideTextFontDefault); + if(hasOutside) coerceFont(coerce, 'outsidetextfont', textFont); + coerce('constraintext'); coerce('selected.textfont.color'); coerce('unselected.textfont.color'); @@ -64967,17 +67624,87 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout handleStyleDefaults(traceIn, traceOut, coerce, defaultColor, layout); + var lineColor = (traceOut.marker.line || {}).color; + // override defaultColor for error bars with defaultLine var errorBarsSupplyDefaults = Registry.getComponentMethod('errorbars', 'supplyDefaults'); - errorBarsSupplyDefaults(traceIn, traceOut, Color.defaultLine, {axis: 'y'}); - errorBarsSupplyDefaults(traceIn, traceOut, Color.defaultLine, {axis: 'x', inherit: 'y'}); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'y'}); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'}); Lib.coerceSelectionMarkerOpacity(traceOut, coerce); }; -},{"../../components/color":50,"../../lib":169,"../../registry":259,"../bar/style_defaults":281,"../scatter/xy_defaults":392,"./attributes":269}],273:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../../registry":257,"../bar/style_defaults":281,"../scatter/xy_defaults":393,"./attributes":267}],272:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); +var tinycolor = _dereq_('tinycolor2'); + +exports.coerceString = function(attributeDefinition, value, defaultValue) { + if(typeof value === 'string') { + if(value || !attributeDefinition.noBlank) return value; + } else if(typeof value === 'number') { + if(!attributeDefinition.strict) return String(value); + } + + return (defaultValue !== undefined) ? + defaultValue : + attributeDefinition.dflt; +}; + +exports.coerceNumber = function(attributeDefinition, value, defaultValue) { + if(isNumeric(value)) { + value = +value; + + var min = attributeDefinition.min; + var max = attributeDefinition.max; + var isOutOfBounds = (min !== undefined && value < min) || + (max !== undefined && value > max); + + if(!isOutOfBounds) return value; + } + + return (defaultValue !== undefined) ? + defaultValue : + attributeDefinition.dflt; +}; + +exports.coerceColor = function(attributeDefinition, value, defaultValue) { + if(tinycolor(value).isValid()) return value; + + return (defaultValue !== undefined) ? + defaultValue : + attributeDefinition.dflt; +}; + +exports.coerceEnumerated = function(attributeDefinition, value, defaultValue) { + if(attributeDefinition.coerceNumber) value = +value; + + if(attributeDefinition.values.indexOf(value) !== -1) return value; + + return (defaultValue !== undefined) ? + defaultValue : + attributeDefinition.dflt; +}; + +exports.getValue = function(arrayOrScalar, index) { + var value; + if(!Array.isArray(arrayOrScalar)) value = arrayOrScalar; + else if(index < arrayOrScalar.length) value = arrayOrScalar[index]; + return value; +}; + +},{"fast-isnumeric":18,"tinycolor2":34}],273:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65115,6 +67842,7 @@ function hoverPoints(pointData, xval, yval, hovermode) { fillHoverText(di, trace, pointData); Registry.getComponentMethod('errorbars', 'hoverInfo')(di, trace, pointData); + pointData.hovertemplate = trace.hovertemplate; return [pointData]; } @@ -65132,9 +67860,9 @@ module.exports = { getTraceColor: getTraceColor }; -},{"../../components/color":50,"../../components/fx":92,"../../registry":259,"../scatter/fill_hover_text":374}],274:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":90,"../../registry":257,"../scatter/fill_hover_text":375}],274:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65170,9 +67898,9 @@ Bar.meta = { module.exports = Bar; -},{"../../plots/cartesian":225,"../scatter/marker_colorbar":384,"./arrays_to_calcdata":268,"./attributes":269,"./calc":270,"./cross_trace_calc":271,"./defaults":272,"./hover":273,"./layout_attributes":275,"./layout_defaults":276,"./plot":277,"./select":278,"./style":280}],275:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../scatter/marker_colorbar":385,"./arrays_to_calcdata":266,"./attributes":267,"./calc":268,"./cross_trace_calc":270,"./defaults":271,"./hover":273,"./layout_attributes":275,"./layout_defaults":276,"./plot":277,"./select":278,"./style":280}],275:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65220,7 +67948,7 @@ module.exports = { },{}],276:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65242,14 +67970,14 @@ module.exports = function(layoutIn, layoutOut, fullData) { return Lib.coerce(layoutIn, layoutOut, layoutAttributes, attr, dflt); } - var hasBars = false, - shouldBeGapless = false, - gappedAnyway = false, - usedSubplots = {}; + var hasBars = false; + var shouldBeGapless = false; + var gappedAnyway = false; + var usedSubplots = {}; for(var i = 0; i < fullData.length; i++) { var trace = fullData[i]; - if(Registry.traceIs(trace, 'bar')) hasBars = true; + if(Registry.traceIs(trace, 'bar') && trace.visible) hasBars = true; else continue; // if we have at least 2 grouped bar traces on the same subplot, @@ -65276,9 +68004,9 @@ module.exports = function(layoutIn, layoutOut, fullData) { coerce('bargroupgap'); }; -},{"../../lib":169,"../../plots/cartesian/axes":214,"../../registry":259,"./layout_attributes":275}],277:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"../../registry":257,"./layout_attributes":275}],277:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65290,7 +68018,6 @@ module.exports = function(layoutIn, layoutOut, fullData) { var d3 = _dereq_('d3'); var isNumeric = _dereq_('fast-isnumeric'); -var tinycolor = _dereq_('tinycolor2'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); @@ -65299,12 +68026,11 @@ var Color = _dereq_('../../components/color'); var Drawing = _dereq_('../../components/drawing'); var Registry = _dereq_('../../registry'); -var attributes = _dereq_('./attributes'), - attributeText = attributes.text, - attributeTextPosition = attributes.textposition, - attributeTextFont = attributes.textfont, - attributeInsideTextFont = attributes.insidetextfont, - attributeOutsideTextFont = attributes.outsidetextfont; +var attributes = _dereq_('./attributes'); +var attributeText = attributes.text; +var attributeTextPosition = attributes.textposition; +var helpers = _dereq_('./helpers'); +var style = _dereq_('./style'); // padding in pixels around text var TEXTPAD = 3; @@ -65365,8 +68091,8 @@ module.exports = function plot(gd, plotinfo, cdbar, barLayer) { } var lw = (di.mlw + 1 || trace.marker.line.width + 1 || - (di.trace ? di.trace.marker.line.width : 0) + 1) - 1, - offset = d3.round((lw / 2) % 1, 2); + (di.trace ? di.trace.marker.line.width : 0) + 1) - 1; + var offset = d3.round((lw / 2) % 1, 2); function roundWithLine(v) { // if there are explicit gaps, don't round, @@ -65392,9 +68118,8 @@ module.exports = function plot(gd, plotinfo, cdbar, barLayer) { // pixelation. if the bars ARE fully opaque and have // no line, expand to a full pixel to make sure we // can see them - var op = Color.opacity(di.mc || trace.marker.color), - fixpx = (op < 1 || lw > 0.01) ? - roundWithLine : expandToVisible; + var op = Color.opacity(di.mc || trace.marker.color); + var fixpx = (op < 1 || lw > 0.01) ? roundWithLine : expandToVisible; x0 = fixpx(x0, x1); x1 = fixpx(x1, x0); y0 = fixpx(y0, y1); @@ -65405,7 +68130,7 @@ module.exports = function plot(gd, plotinfo, cdbar, barLayer) { .style('vector-effect', 'non-scaling-stroke') .attr('d', 'M' + x0 + ',' + y0 + 'V' + y1 + 'H' + x1 + 'V' + y0 + 'Z') - .call(Drawing.setClipUrl, plotinfo.layerClipId); + .call(Drawing.setClipUrl, plotinfo.layerClipId, gd); appendBarText(gd, bar, cd, i, x0, x1, y0, y1); @@ -65417,11 +68142,11 @@ module.exports = function plot(gd, plotinfo, cdbar, barLayer) { // lastly, clip points groups of `cliponaxis !== false` traces // on `plotinfo._hasClipOnAxisFalse === true` subplots var hasClipOnAxisFalse = cd0.trace.cliponaxis === false; - Drawing.setClipUrl(plotGroup, hasClipOnAxisFalse ? null : plotinfo.layerClipId); + Drawing.setClipUrl(plotGroup, hasClipOnAxisFalse ? null : plotinfo.layerClipId, gd); }); // error bars are on the top - Registry.getComponentMethod('errorbars', 'plot')(bartraces, plotinfo); + Registry.getComponentMethod('errorbars', 'plot')(gd, bartraces, plotinfo); }; function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) { @@ -65445,8 +68170,8 @@ function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) { } // get trace attributes - var trace = calcTrace[0].trace, - orientation = trace.orientation; + var trace = calcTrace[0].trace; + var orientation = trace.orientation; var text = getText(trace, i); textPosition = getTextPosition(trace, i); @@ -65456,29 +68181,30 @@ function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) { return; } - var textFont = getTextFont(trace, i, gd._fullLayout.font), - insideTextFont = getInsideTextFont(trace, i, textFont), - outsideTextFont = getOutsideTextFont(trace, i, textFont); + var layoutFont = gd._fullLayout.font; + var barColor = style.getBarColor(calcTrace[i], trace); + var insideTextFont = style.getInsideTextFont(trace, i, layoutFont, barColor); + var outsideTextFont = style.getOutsideTextFont(trace, i, layoutFont); // compute text position - var barmode = gd._fullLayout.barmode, - inStackMode = (barmode === 'stack'), - inRelativeMode = (barmode === 'relative'), - inStackOrRelativeMode = inStackMode || inRelativeMode, + var barmode = gd._fullLayout.barmode; + var inStackMode = (barmode === 'stack'); + var inRelativeMode = (barmode === 'relative'); + var inStackOrRelativeMode = inStackMode || inRelativeMode; - calcBar = calcTrace[i], - isOutmostBar = !inStackOrRelativeMode || calcBar._outmost, + var calcBar = calcTrace[i]; + var isOutmostBar = !inStackOrRelativeMode || calcBar._outmost; - barWidth = Math.abs(x1 - x0) - 2 * TEXTPAD, // padding excluded - barHeight = Math.abs(y1 - y0) - 2 * TEXTPAD, // padding excluded + var barWidth = Math.abs(x1 - x0) - 2 * TEXTPAD; // padding excluded + var barHeight = Math.abs(y1 - y0) - 2 * TEXTPAD; // padding excluded - textSelection, - textBB, - textWidth, - textHeight; + var textSelection; + var textBB; + var textWidth; + var textHeight; if(textPosition === 'outside') { - if(!isOutmostBar) textPosition = 'inside'; + if(!isOutmostBar && !calcBar.hasB) textPosition = 'inside'; } if(textPosition === 'auto') { @@ -65491,14 +68217,13 @@ function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) { textWidth = textBB.width, textHeight = textBB.height; - var textHasSize = (textWidth > 0 && textHeight > 0), - fitsInside = - (textWidth <= barWidth && textHeight <= barHeight), - fitsInsideIfRotated = - (textWidth <= barHeight && textHeight <= barWidth), - fitsInsideIfShrunk = (orientation === 'h') ? - (barWidth >= textWidth * (barHeight / textHeight)) : - (barHeight >= textHeight * (barWidth / textWidth)); + var textHasSize = (textWidth > 0 && textHeight > 0); + var fitsInside = (textWidth <= barWidth && textHeight <= barHeight); + var fitsInsideIfRotated = (textWidth <= barHeight && textHeight <= barWidth); + var fitsInsideIfShrunk = (orientation === 'h') ? + (barWidth >= textWidth * (barHeight / textHeight)) : + (barHeight >= textHeight * (barWidth / textWidth)); + if(textHasSize && (fitsInside || fitsInsideIfRotated || fitsInsideIfShrunk)) { textPosition = 'inside'; @@ -65545,16 +68270,16 @@ function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) { function getTransformToMoveInsideBar(x0, x1, y0, y1, textBB, orientation, constrained) { // compute text and target positions - var textWidth = textBB.width, - textHeight = textBB.height, - textX = (textBB.left + textBB.right) / 2, - textY = (textBB.top + textBB.bottom) / 2, - barWidth = Math.abs(x1 - x0), - barHeight = Math.abs(y1 - y0), - targetWidth, - targetHeight, - targetX, - targetY; + var textWidth = textBB.width; + var textHeight = textBB.height; + var textX = (textBB.left + textBB.right) / 2; + var textY = (textBB.top + textBB.bottom) / 2; + var barWidth = Math.abs(x1 - x0); + var barHeight = Math.abs(y1 - y0); + var targetWidth; + var targetHeight; + var targetX; + var targetY; // apply text padding var textpad; @@ -65630,9 +68355,9 @@ function getTransformToMoveInsideBar(x0, x1, y0, y1, textBB, orientation, constr function getTransformToMoveOutsideBar(x0, x1, y0, y1, textBB, orientation, constrained) { var barWidth = (orientation === 'h') ? - Math.abs(y1 - y0) : - Math.abs(x1 - x0), - textpad; + Math.abs(y1 - y0) : + Math.abs(x1 - x0); + var textpad; // Keep the padding so the text doesn't sit right against // the bars, but don't factor it into barWidth @@ -65649,12 +68374,12 @@ function getTransformToMoveOutsideBar(x0, x1, y0, y1, textBB, orientation, const } // compute text and target positions - var textX = (textBB.left + textBB.right) / 2, - textY = (textBB.top + textBB.bottom) / 2, - targetWidth, - targetHeight, - targetX, - targetY; + var textX = (textBB.left + textBB.right) / 2; + var textY = (textBB.top + textBB.bottom) / 2; + var targetWidth; + var targetHeight; + var targetX; + var targetY; targetWidth = scale * textBB.width; targetHeight = scale * textBB.height; @@ -65686,9 +68411,9 @@ function getTransformToMoveOutsideBar(x0, x1, y0, y1, textBB, orientation, const } function getTransform(textX, textY, targetX, targetY, scale, rotate) { - var transformScale, - transformRotate, - transformTranslate; + var transformScale; + var transformRotate; + var transformTranslate; if(scale < 1) transformScale = 'scale(' + scale + ') '; else { @@ -65700,113 +68425,26 @@ function getTransform(textX, textY, targetX, targetY, scale, rotate) { 'rotate(' + rotate + ' ' + textX + ' ' + textY + ') ' : ''; // Note that scaling also affects the center of the text box - var translateX = (targetX - scale * textX), - translateY = (targetY - scale * textY); + var translateX = (targetX - scale * textX); + var translateY = (targetY - scale * textY); transformTranslate = 'translate(' + translateX + ' ' + translateY + ')'; return transformTranslate + transformScale + transformRotate; } function getText(trace, index) { - var value = getValue(trace.text, index); - return coerceString(attributeText, value); + var value = helpers.getValue(trace.text, index); + return helpers.coerceString(attributeText, value); } function getTextPosition(trace, index) { - var value = getValue(trace.textposition, index); - return coerceEnumerated(attributeTextPosition, value); + var value = helpers.getValue(trace.textposition, index); + return helpers.coerceEnumerated(attributeTextPosition, value); } -function getTextFont(trace, index, defaultValue) { - return getFontValue( - attributeTextFont, trace.textfont, index, defaultValue); -} - -function getInsideTextFont(trace, index, defaultValue) { - return getFontValue( - attributeInsideTextFont, trace.insidetextfont, index, defaultValue); -} - -function getOutsideTextFont(trace, index, defaultValue) { - return getFontValue( - attributeOutsideTextFont, trace.outsidetextfont, index, defaultValue); -} - -function getFontValue(attributeDefinition, attributeValue, index, defaultValue) { - attributeValue = attributeValue || {}; - - var familyValue = getValue(attributeValue.family, index), - sizeValue = getValue(attributeValue.size, index), - colorValue = getValue(attributeValue.color, index); - - return { - family: coerceString( - attributeDefinition.family, familyValue, defaultValue.family), - size: coerceNumber( - attributeDefinition.size, sizeValue, defaultValue.size), - color: coerceColor( - attributeDefinition.color, colorValue, defaultValue.color) - }; -} - -function getValue(arrayOrScalar, index) { - var value; - if(!Array.isArray(arrayOrScalar)) value = arrayOrScalar; - else if(index < arrayOrScalar.length) value = arrayOrScalar[index]; - return value; -} - -function coerceString(attributeDefinition, value, defaultValue) { - if(typeof value === 'string') { - if(value || !attributeDefinition.noBlank) return value; - } - else if(typeof value === 'number') { - if(!attributeDefinition.strict) return String(value); - } - - return (defaultValue !== undefined) ? - defaultValue : - attributeDefinition.dflt; -} - -function coerceEnumerated(attributeDefinition, value, defaultValue) { - if(attributeDefinition.coerceNumber) value = +value; - - if(attributeDefinition.values.indexOf(value) !== -1) return value; - - return (defaultValue !== undefined) ? - defaultValue : - attributeDefinition.dflt; -} - -function coerceNumber(attributeDefinition, value, defaultValue) { - if(isNumeric(value)) { - value = +value; - - var min = attributeDefinition.min, - max = attributeDefinition.max, - isOutOfBounds = (min !== undefined && value < min) || - (max !== undefined && value > max); - - if(!isOutOfBounds) return value; - } - - return (defaultValue !== undefined) ? - defaultValue : - attributeDefinition.dflt; -} - -function coerceColor(attributeDefinition, value, defaultValue) { - if(tinycolor(value).isValid()) return value; - - return (defaultValue !== undefined) ? - defaultValue : - attributeDefinition.dflt; -} - -},{"../../components/color":50,"../../components/drawing":75,"../../lib":169,"../../lib/svg_text_utils":191,"../../registry":259,"./attributes":269,"d3":16,"fast-isnumeric":18,"tinycolor2":33}],278:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../lib":168,"../../lib/svg_text_utils":189,"../../registry":257,"./attributes":267,"./helpers":272,"./style":280,"d3":16,"fast-isnumeric":18}],278:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65849,7 +68487,7 @@ module.exports = function selectPoints(searchInfo, selectionTester) { },{}],279:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65915,8 +68553,8 @@ function Sieve(traces, separateNegativeValues, dontMergeOverlappingData) { * @returns {number} Previous bin value */ Sieve.prototype.put = function put(position, value) { - var label = this.getLabel(position, value), - oldValue = this.bins[label] || 0; + var label = this.getLabel(position, value); + var oldValue = this.bins[label] || 0; this.bins[label] = oldValue + value; @@ -65949,16 +68587,16 @@ Sieve.prototype.get = function put(position, value) { * true; otherwise prefixed with '^') */ Sieve.prototype.getLabel = function getLabel(position, value) { - var prefix = (value < 0 && this.separateNegativeValues) ? 'v' : '^', - label = (this.dontMergeOverlappingData) ? - position : - Math.round(position / this.binWidth); + var prefix = (value < 0 && this.separateNegativeValues) ? 'v' : '^'; + var label = (this.dontMergeOverlappingData) ? + position : + Math.round(position / this.binWidth); return prefix + label; }; -},{"../../constants/numerical":151,"../../lib":169}],280:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168}],280:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65969,9 +68607,17 @@ Sieve.prototype.getLabel = function getLabel(position, value) { 'use strict'; var d3 = _dereq_('d3'); +var Color = _dereq_('../../components/color'); var Drawing = _dereq_('../../components/drawing'); +var Lib = _dereq_('../../lib'); var Registry = _dereq_('../../registry'); +var attributes = _dereq_('./attributes'); +var attributeTextFont = attributes.textfont; +var attributeInsideTextFont = attributes.insidetextfont; +var attributeOutsideTextFont = attributes.outsidetextfont; +var helpers = _dereq_('./helpers'); + function style(gd, cd) { var s = cd ? cd[0].node3 : d3.select(gd).selectAll('g.trace.bars'); var barcount = s.size(); @@ -66009,21 +68655,8 @@ function stylePoints(sel, trace, gd) { txs.each(function(d) { var tx = d3.select(this); - var textFont; - - if(tx.classed('bartext-inside')) { - textFont = trace.insidetextfont; - } else if(tx.classed('bartext-outside')) { - textFont = trace.outsidetextfont; - } - if(!textFont) textFont = trace.textfont; - - function cast(k) { - var cont = textFont[k]; - return Array.isArray(cont) ? cont[d.i] : cont; - } - - Drawing.font(tx, cast('family'), cast('size'), cast('color')); + var font = determineFont(tx, d, trace, gd); + Drawing.font(tx, font); }); } @@ -66032,32 +68665,122 @@ function styleOnSelect(gd, cd) { var trace = cd[0].trace; if(trace.selectedpoints) { - Drawing.selectedPointStyle(s.selectAll('path'), trace); - Drawing.selectedTextStyle(s.selectAll('text'), trace); + stylePointsInSelectionMode(s, trace, gd); } else { stylePoints(s, trace, gd); } } +function stylePointsInSelectionMode(s, trace, gd) { + Drawing.selectedPointStyle(s.selectAll('path'), trace); + styleTextInSelectionMode(s.selectAll('text'), trace, gd); +} + +function styleTextInSelectionMode(txs, trace, gd) { + txs.each(function(d) { + var tx = d3.select(this); + var font; + + if(d.selected) { + font = Lib.extendFlat({}, determineFont(tx, d, trace, gd)); + + var selectedFontColor = trace.selected.textfont && trace.selected.textfont.color; + if(selectedFontColor) { + font.color = selectedFontColor; + } + + Drawing.font(tx, font); + } else { + Drawing.selectedTextStyle(tx, trace); + } + }); +} + +function determineFont(tx, d, trace, gd) { + var layoutFont = gd._fullLayout.font; + var textFont = trace.textfont; + + if(tx.classed('bartext-inside')) { + var barColor = getBarColor(d, trace); + textFont = getInsideTextFont(trace, d.i, layoutFont, barColor); + } else if(tx.classed('bartext-outside')) { + textFont = getOutsideTextFont(trace, d.i, layoutFont); + } + + return textFont; +} + +function getTextFont(trace, index, defaultValue) { + return getFontValue( + attributeTextFont, trace.textfont, index, defaultValue); +} + +function getInsideTextFont(trace, index, layoutFont, barColor) { + var defaultFont = getTextFont(trace, index, layoutFont); + + var wouldFallBackToLayoutFont = + (trace._input.textfont === undefined || trace._input.textfont.color === undefined) || + (Array.isArray(trace.textfont.color) && trace.textfont.color[index] === undefined); + if(wouldFallBackToLayoutFont) { + defaultFont = { + color: Color.contrast(barColor), + family: defaultFont.family, + size: defaultFont.size + }; + } + + return getFontValue( + attributeInsideTextFont, trace.insidetextfont, index, defaultFont); +} + +function getOutsideTextFont(trace, index, layoutFont) { + var defaultFont = getTextFont(trace, index, layoutFont); + return getFontValue( + attributeOutsideTextFont, trace.outsidetextfont, index, defaultFont); +} + +function getFontValue(attributeDefinition, attributeValue, index, defaultValue) { + attributeValue = attributeValue || {}; + + var familyValue = helpers.getValue(attributeValue.family, index); + var sizeValue = helpers.getValue(attributeValue.size, index); + var colorValue = helpers.getValue(attributeValue.color, index); + + return { + family: helpers.coerceString( + attributeDefinition.family, familyValue, defaultValue.family), + size: helpers.coerceNumber( + attributeDefinition.size, sizeValue, defaultValue.size), + color: helpers.coerceColor( + attributeDefinition.color, colorValue, defaultValue.color) + }; +} + +function getBarColor(cd, trace) { + return cd.mc || trace.marker.color; +} + module.exports = { style: style, - styleOnSelect: styleOnSelect + styleOnSelect: styleOnSelect, + getInsideTextFont: getInsideTextFont, + getOutsideTextFont: getOutsideTextFont, + getBarColor: getBarColor }; -},{"../../components/drawing":75,"../../registry":259,"d3":16}],281:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../lib":168,"../../registry":257,"./attributes":267,"./helpers":272,"d3":16}],281:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Color = _dereq_('../../components/color'); -var hasColorscale = _dereq_('../../components/colorscale/has_colorscale'); +var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale; var colorscaleDefaults = _dereq_('../../components/colorscale/defaults'); module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, defaultColor, layout) { @@ -66083,9 +68806,9 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, default coerce('unselected.marker.color'); }; -},{"../../components/color":50,"../../components/colorscale/defaults":60,"../../components/colorscale/has_colorscale":64}],282:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62}],282:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66196,6 +68919,16 @@ module.exports = { editType: 'calc+clearAxisTypes', }, + + width: { + valType: 'number', + min: 0, + + dflt: 0, + editType: 'calc', + + }, + marker: { outliercolor: { valType: 'color', @@ -66264,7 +68997,6 @@ module.exports = { marker: scatterAttrs.unselected.marker, editType: 'style' }, - hoveron: { valType: 'flaglist', flags: ['boxes', 'points'], @@ -66275,9 +69007,9 @@ module.exports = { } }; -},{"../../components/color/attributes":49,"../../lib/extend":163,"../scatter/attributes":366}],283:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../lib/extend":162,"../scatter/attributes":367}],283:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66342,6 +69074,11 @@ module.exports = function calc(gd, trace) { } } + var cdi; + var ptFilterFn = (trace.boxpoints || trace.points) === 'all' ? + Lib.identity : + function(pt) { return (pt.v < cdi.lf || pt.v > cdi.uf); }; + // build calcdata trace items, one item per distinct position for(i = 0; i < pLen; i++) { if(ptsPerBin[i].length > 0) { @@ -66349,10 +69086,9 @@ module.exports = function calc(gd, trace) { var boxVals = pts.map(extractVal); var bvLen = boxVals.length; - var cdi = { - pos: posDistinct[i], - pts: pts - }; + cdi = {}; + cdi.pos = posDistinct[i]; + cdi.pts = pts; cdi.min = boxVals[0]; cdi.max = boxVals[bvLen - 1]; @@ -66388,13 +69124,14 @@ module.exports = function calc(gd, trace) { cdi.lo = 4 * cdi.q1 - 3 * cdi.q3; cdi.uo = 4 * cdi.q3 - 3 * cdi.q1; - // 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; + cdi.pts2 = pts.filter(ptFilterFn); + cd.push(cdi); } } @@ -66456,7 +69193,10 @@ function getPos(trace, posLetter, posAxis, val, num) { pos0 = num; } - var pos0c = posAxis.d2c(pos0, 0, trace[posLetter + 'calendar']); + var pos0c = posAxis.type === 'multicategory' ? + posAxis.r2c_just_indices(pos0) : + posAxis.d2c(pos0, 0, trace[posLetter + 'calendar']); + return val.map(function() { return pos0c; }); } @@ -66511,9 +69251,9 @@ function sortByVal(a, b) { return a.v - b.v; } function extractVal(o) { return o.v; } -},{"../../lib":169,"../../plots/cartesian/axes":214,"fast-isnumeric":18}],284:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"fast-isnumeric":18}],284:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66536,8 +69276,6 @@ function crossTraceCalc(gd, plotinfo) { var orientation = orientations[i]; var posAxis = orientation === 'h' ? ya : xa; var boxList = []; - var minPad = 0; - var maxPad = 0; // make list of boxes / candlesticks // For backward compatibility, candlesticks are treated as if they *are* box traces here @@ -66554,72 +69292,173 @@ function crossTraceCalc(gd, plotinfo) { trace.yaxis === ya._id ) { boxList.push(j); - - if(trace.boxpoints) { - minPad = Math.max(minPad, trace.jitter - trace.pointpos - 1); - maxPad = Math.max(maxPad, trace.jitter + trace.pointpos - 1); - } } } - setPositionOffset('box', gd, boxList, posAxis, [minPad, maxPad]); + setPositionOffset('box', gd, boxList, posAxis); } } -function setPositionOffset(traceType, gd, boxList, posAxis, pad) { +function setPositionOffset(traceType, gd, boxList, posAxis) { var calcdata = gd.calcdata; var fullLayout = gd._fullLayout; - var pointList = []; + var axId = posAxis._id; + var axLetter = axId.charAt(0); // N.B. reused in violin var numKey = traceType === 'violin' ? '_numViolins' : '_numBoxes'; var i, j, calcTrace; + var pointList = []; + var shownPts = 0; // make list of box points for(i = 0; i < boxList.length; i++) { calcTrace = calcdata[boxList[i]]; for(j = 0; j < calcTrace.length; j++) { pointList.push(calcTrace[j].pos); + shownPts += (calcTrace[j].pts2 || []).length; } } if(!pointList.length) return; // box plots - update dPos based on multiple traces - // and then use for posAxis autorange var boxdv = Lib.distinctVals(pointList); - var dPos = boxdv.minDiff / 2; - - // if there's no duplication of x points, - // disable 'group' mode by setting counter to 1 - if(pointList.length === boxdv.vals.length) { - fullLayout[numKey] = 1; - } + var dPos0 = boxdv.minDiff / 2; // check for forced minimum dtick Axes.minDtick(posAxis, boxdv.minDiff, boxdv.vals[0], true); - var gap = fullLayout[traceType + 'gap']; - var groupgap = fullLayout[traceType + 'groupgap']; - var padfactor = (1 - gap) * (1 - groupgap) * dPos / fullLayout[numKey]; - - // autoscale the x axis - including space for points if they're off the side - // TODO: this will overdo it if the outermost boxes don't have - // their points as far out as the other boxes - var extremes = Axes.findExtremes(posAxis, boxdv.vals, { - vpadminus: dPos + pad[0] * padfactor, - vpadplus: dPos + pad[1] * padfactor - }); + var num = fullLayout[numKey]; + var group = (fullLayout[traceType + 'mode'] === 'group' && num > 1); + var groupFraction = 1 - fullLayout[traceType + 'gap']; + var groupGapFraction = 1 - fullLayout[traceType + 'groupgap']; for(i = 0; i < boxList.length; i++) { calcTrace = calcdata[boxList[i]]; - // set the width of all boxes - calcTrace[0].t.dPos = dPos; - // link extremes to all boxes - calcTrace[0].trace._extremes[posAxis._id] = extremes; - } + var trace = calcTrace[0].trace; + var t = calcTrace[0].t; + var width = trace.width; + var side = trace.side; + + // position coordinate delta + var dPos; + // box half width; + var bdPos; + // box center offset + var bPos; + // half-width within which to accept hover for this box/violin + // always split the distance to the closest box/violin + var wHover; + + if(width) { + dPos = bdPos = wHover = width / 2; + bPos = 0; + } else { + dPos = dPos0; + bdPos = dPos * groupFraction * groupGapFraction / (group ? num : 1); + bPos = group ? 2 * dPos * (-0.5 + (t.num + 0.5) / num) * groupFraction : 0; + wHover = dPos * (group ? groupFraction / num : 1); + } + t.dPos = dPos; + t.bPos = bPos; + t.bdPos = bdPos; + t.wHover = wHover; + + // box/violin-only value-space push value + var pushplus; + var pushminus; + // edge of box/violin + var edge = bPos + bdPos; + var edgeplus; + var edgeminus; + + if(side === 'positive') { + pushplus = dPos * (width ? 1 : 0.5); + edgeplus = edge; + pushminus = edgeplus = bPos; + } else if(side === 'negative') { + pushplus = edgeplus = bPos; + pushminus = dPos * (width ? 1 : 0.5); + edgeminus = edge; + } else { + pushplus = pushminus = dPos; + edgeplus = edgeminus = edge; + } + + // value-space padding + var vpadplus; + var vpadminus; + // pixel-space padding + var ppadplus; + var ppadminus; + // do we add 5% of both sides (for points beyond box/violin) + var padded = false; + // does this trace show points? + var hasPts = (trace.boxpoints || trace.points) && (shownPts > 0); + + if(hasPts) { + var pointpos = trace.pointpos; + var jitter = trace.jitter; + var ms = trace.marker.size / 2; + + var pp = 0; + if((pointpos + jitter) >= 0) { + pp = edge * (pointpos + jitter); + if(pp > pushplus) { + // (++) beyond plus-value, use pp + padded = true; + ppadplus = ms; + vpadplus = pp; + } else if(pp > edgeplus) { + // (+), use push-value (it's bigger), but add px-pad + ppadplus = ms; + vpadplus = pushplus; + } + } + if(pp <= pushplus) { + // (->) fallback to push value + vpadplus = pushplus; + } + + var pm = 0; + if((pointpos - jitter) <= 0) { + pm = -edge * (pointpos - jitter); + if(pm > pushminus) { + // (--) beyond plus-value, use pp + padded = true; + ppadminus = ms; + vpadminus = pm; + } else if(pm > edgeminus) { + // (-), use push-value (it's bigger), but add px-pad + ppadminus = ms; + vpadminus = pushminus; + } + } + if(pm <= pushminus) { + // (<-) fallback to push value + vpadminus = pushminus; + } + } else { + vpadplus = pushplus; + vpadminus = pushminus; + } + + // calcdata[i][j] are in ascending order + var firstPos = calcTrace[0].pos; + var lastPos = calcTrace[calcTrace.length - 1].pos; + + trace._extremes[axId] = Axes.findExtremes(posAxis, [firstPos, lastPos], { + padded: padded, + vpadminus: vpadminus, + vpadplus: vpadplus, + // N.B. SVG px-space positive/negative + ppadminus: {x: ppadminus, y: ppadplus}[axLetter], + ppadplus: {x: ppadplus, y: ppadminus}[axLetter], + }); + } } module.exports = { @@ -66627,9 +69466,9 @@ module.exports = { setPositionOffset: setPositionOffset }; -},{"../../lib":169,"../../plots/cartesian/axes":214}],285:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212}],285:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66658,6 +69497,7 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { coerce('whiskerwidth'); coerce('boxmean'); + coerce('width'); var notched = coerce('notched', traceIn.notchwidth !== undefined); if(notched) coerce('notchwidth'); @@ -66675,16 +69515,15 @@ function handleSampleDefaults(traceIn, traceOut, coerce, layout) { if(y && y.length) { defaultOrientation = 'v'; if(hasX) { - len = Math.min(x.length, y.length); - } - else { + len = Math.min(Lib.minRowLength(x), Lib.minRowLength(y)); + } else { coerce('x0'); - len = y.length; + len = Lib.minRowLength(y); } } else if(hasX) { defaultOrientation = 'h'; coerce('y0'); - len = x.length; + len = Lib.minRowLength(x); } else { traceOut.visible = false; return; @@ -66745,9 +69584,9 @@ module.exports = { handlePointsDefaults: handlePointsDefaults }; -},{"../../components/color":50,"../../lib":169,"../../registry":259,"./attributes":282}],286:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../../registry":257,"./attributes":282}],286:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66773,7 +69612,7 @@ module.exports = function eventData(out, pt) { },{}],287:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67014,15 +69853,25 @@ function hoverOnPoints(pointData, xval, yval) { name: trace.name, x0: xc - rad, x1: xc + rad, - xLabelVal: pt.x, y0: yc - rad, y1: yc + rad, - yLabelVal: pt.y, spikeDistance: pointData.distance }); - var pLetter = trace.orientation === 'h' ? 'y' : 'x'; - var pa = trace.orientation === 'h' ? ya : xa; + + var pa; + if(trace.orientation === 'h') { + pa = ya; + closePtData.xLabelVal = pt.x; + closePtData.yLabelVal = di.pos; + } else { + pa = xa; + closePtData.xLabelVal = di.pos; + closePtData.yLabelVal = pt.y; + } + + var pLetter = pa._id.charAt(0); closePtData[pLetter + 'Spike'] = pa.c2p(di.pos, true); + fillHoverText(pt, trace, closePtData); return closePtData; @@ -67034,9 +69883,9 @@ module.exports = { hoverOnPoints: hoverOnPoints }; -},{"../../components/color":50,"../../components/fx":92,"../../lib":169,"../../plots/cartesian/axes":214,"../scatter/fill_hover_text":374}],288:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":90,"../../lib":168,"../../plots/cartesian/axes":212,"../scatter/fill_hover_text":375}],288:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67070,9 +69919,9 @@ Box.meta = { module.exports = Box; -},{"../../plots/cartesian":225,"./attributes":282,"./calc":283,"./cross_trace_calc":284,"./defaults":285,"./event_data":286,"./hover":287,"./layout_attributes":289,"./layout_defaults":290,"./plot":291,"./select":292,"./style":293}],289:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":282,"./calc":283,"./cross_trace_calc":284,"./defaults":285,"./event_data":286,"./hover":287,"./layout_attributes":289,"./layout_defaults":290,"./plot":291,"./select":292,"./style":293}],289:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67113,7 +69962,7 @@ module.exports = { },{}],290:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67154,9 +70003,9 @@ module.exports = { _supply: _supply }; -},{"../../lib":169,"../../registry":259,"./layout_attributes":289}],291:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"./layout_attributes":289}],291:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67175,12 +70024,8 @@ var JITTERCOUNT = 5; // points either side of this to include var JITTERSPREAD = 0.01; // fraction of IQR to count as "dense" function plot(gd, plotinfo, cdbox, boxLayer) { - var fullLayout = gd._fullLayout; var xa = plotinfo.xaxis; var ya = plotinfo.yaxis; - var numBoxes = fullLayout._numBoxes; - var groupFraction = (1 - fullLayout.boxgap); - var group = (fullLayout.boxmode === 'group' && numBoxes > 1); Lib.makeTraceGroups(boxLayer, cdbox, 'trace boxes').each(function(cd) { var plotGroup = d3.select(this); @@ -67188,12 +70033,9 @@ function plot(gd, plotinfo, cdbox, boxLayer) { var t = cd0.t; var trace = cd0.trace; if(!plotinfo.isRangePlot) cd0.node3 = plotGroup; - // box half width - var bdPos = t.dPos * groupFraction * (1 - fullLayout.boxgroupgap) / (group ? numBoxes : 1); - // box center offset - var bPos = group ? 2 * t.dPos * (-0.5 + (t.num + 0.5) / numBoxes) * groupFraction : 0; + // whisker width - var wdPos = bdPos * trace.whiskerwidth; + t.wdPos = t.bdPos * trace.whiskerwidth; if(trace.visible !== true || t.empty) { plotGroup.remove(); @@ -67210,14 +70052,6 @@ function plot(gd, plotinfo, cdbox, boxLayer) { valAxis = ya; } - // save the box size and box position for use by hover - t.bPos = bPos; - t.bdPos = bdPos; - t.wdPos = wdPos; - // half-width within which to accept hover for this box - // always split the distance to the closest box - t.wHover = t.dPos * (group ? groupFraction / numBoxes : 1); - plotBoxAndWhiskers(plotGroup, {pos: posAxis, val: valAxis}, trace, t); plotPoints(plotGroup, {x: xa, y: ya}, trace, t); plotBoxMean(plotGroup, {pos: posAxis, val: valAxis}, trace, t); @@ -67257,6 +70091,8 @@ function plotBoxAndWhiskers(sel, axes, trace, t) { paths.exit().remove(); paths.each(function(d) { + if(d.empty) return 'M0,0Z'; + var pos = d.pos; var posc = posAxis.c2p(pos + bPos, true) + bPosPxOffset; var pos0 = posAxis.c2p(pos + bPos - bdPos0, true) + bPosPxOffset; @@ -67347,10 +70183,7 @@ function plotPoints(sel, axes, trace, t) { var paths = gPoints.selectAll('path') .data(function(d) { var i; - - var pts = mode === 'all' ? - d.pts : - d.pts.filter(function(pt) { return (pt.v < d.lf || pt.v > d.uf); }); + var pts = d.pts2; // normally use IQR, but if this is 0 or too small, use max-min var typicalSpread = Math.max((d.max - d.min) / 10, d.q3 - d.q1); @@ -67494,9 +70327,9 @@ module.exports = { plotBoxMean: plotBoxMean }; -},{"../../components/drawing":75,"../../lib":169,"d3":16}],292:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":168,"d3":16}],292:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67545,7 +70378,7 @@ module.exports = function selectPoints(searchInfo, selectionTester) { },{}],293:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67578,14 +70411,15 @@ function style(gd, cd) { if(trace.type === 'candlestick') { allBoxes.each(function(boxData) { + if(boxData.empty) return; + var thisBox = d3.select(this); var container = trace[boxData.dir]; // dir = 'increasing' or 'decreasing' styleBox(thisBox, container.line.width, container.line.color, container.fillcolor); // TODO: custom selection style for candlesticks thisBox.style('opacity', trace.selectedpoints && !boxData.selected ? 0.3 : 1); }); - } - else { + } else { styleBox(allBoxes, lineWidth, trace.line.color, trace.fillcolor); el.selectAll('path.mean') .style({ @@ -67617,9 +70451,9 @@ module.exports = { styleOnSelect: styleOnSelect }; -},{"../../components/color":50,"../../components/drawing":75,"d3":16}],294:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"d3":16}],294:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67796,9 +70630,9 @@ module.exports = extendFlat({ { colorbar: colorbarAttrs } ); -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../components/drawing/attributes":74,"../../constants/filter_ops":149,"../../lib/extend":163,"../../plots/font_attributes":240,"../heatmap/attributes":316,"../scatter/attributes":366}],295:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../constants/filter_ops":147,"../../lib/extend":162,"../../plots/font_attributes":239,"../heatmap/attributes":316,"../scatter/attributes":367}],295:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67822,7 +70656,7 @@ module.exports = function calc(gd, trace) { },{"../heatmap/calc":317,"./set_contours":313}],296:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67889,7 +70723,7 @@ module.exports = function(pathinfo, operation, perimeter, trace) { },{}],297:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67938,9 +70772,9 @@ module.exports = function colorbar(gd, cd) { .options(trace.colorbar)(); }; -},{"../../components/colorbar/draw":55,"./end_plus":305,"./make_color_map":310}],298:[function(_dereq_,module,exports){ +},{"../../components/colorbar/draw":56,"./end_plus":305,"./make_color_map":310}],298:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68018,7 +70852,7 @@ module.exports = { },{}],299:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68111,9 +70945,9 @@ function handleConstraintValueDefaults(coerce, contours) { } } -},{"../../components/color":50,"../../constants/filter_ops":149,"./label_defaults":309,"fast-isnumeric":18}],300:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../constants/filter_ops":147,"./label_defaults":309,"fast-isnumeric":18}],300:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68190,9 +71024,9 @@ function makeInequalitySettings(operation) { }; } -},{"../../constants/filter_ops":149,"fast-isnumeric":18}],301:[function(_dereq_,module,exports){ +},{"../../constants/filter_ops":147,"fast-isnumeric":18}],301:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68221,7 +71055,7 @@ module.exports = function handleContourDefaults(traceIn, traceOut, coerce, coerc },{}],302:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68307,9 +71141,9 @@ function copyPathinfo(pi) { }); } -},{"../../lib":169}],303:[function(_dereq_,module,exports){ +},{"../../lib":168}],303:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68356,9 +71190,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout } }; -},{"../../lib":169,"../heatmap/xyz_defaults":331,"./attributes":294,"./constraint_defaults":299,"./contours_defaults":301,"./style_defaults":315}],304:[function(_dereq_,module,exports){ +},{"../../lib":168,"../heatmap/xyz_defaults":330,"./attributes":294,"./constraint_defaults":299,"./contours_defaults":301,"./style_defaults":315}],304:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68420,9 +71254,9 @@ module.exports = function emptyPathinfo(contours, plotinfo, cd0) { return pathinfo; }; -},{"../../lib":169,"./constraint_mapping":300,"./end_plus":305}],305:[function(_dereq_,module,exports){ +},{"../../lib":168,"./constraint_mapping":300,"./end_plus":305}],305:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68442,7 +71276,7 @@ module.exports = function endPlus(contours) { },{}],306:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68490,8 +71324,8 @@ function equalPts(pt1, pt2, xtol, ytol) { // distance in index units - uses the 3rd and 4th items in points function ptDist(pt1, pt2) { - var dx = pt1[2] - pt2[2], - dy = pt1[3] - pt2[3]; + var dx = pt1[2] - pt2[2]; + var dy = pt1[3] - pt2[3]; return Math.sqrt(dx * dx + dy * dy); } @@ -68533,8 +71367,8 @@ function makePath(pi, loc, edgeflag, xtol, ytol) { locStr = loc.join(','); var atEdge = (marchStep[0] && (loc[0] < 0 || loc[0] > n - 2)) || - (marchStep[1] && (loc[1] < 0 || loc[1] > m - 2)), - closedLoop = (locStr === startLocStr) && (marchStep.join(',') === startStepStr); + (marchStep[1] && (loc[1] < 0 || loc[1] > m - 2)); + var closedLoop = (locStr === startLocStr) && (marchStep.join(',') === startStepStr); // have we completed a loop, or reached an edge? if((closedLoop) || (edgeflag && atEdge)) break; @@ -68683,8 +71517,8 @@ function makePath(pi, loc, edgeflag, xtol, ytol) { // special function to get the marching step of the // first point in the path (leading to loc) function startStep(mi, edgeflag, loc) { - var dx = 0, - dy = 0; + var dx = 0; + var dy = 0; if(mi > 20 && edgeflag) { // these saddles start at +/- x if(mi === 208 || mi === 1114) { @@ -68719,11 +71553,11 @@ function startStep(mi, edgeflag, loc) { * points into a path, because those routines require length-2 points. */ function getInterpPx(pi, loc, step) { - var locx = loc[0] + Math.max(step[0], 0), - locy = loc[1] + Math.max(step[1], 0), - zxy = pi.z[locy][locx], - xa = pi.xaxis, - ya = pi.yaxis; + var locx = loc[0] + Math.max(step[0], 0); + var locy = loc[1] + Math.max(step[1], 0); + var zxy = pi.z[locy][locx]; + var xa = pi.xaxis; + var ya = pi.yaxis; if(step[1]) { var dx = (pi.level - zxy) / (pi.z[locy][locx + 1] - zxy); @@ -68740,9 +71574,9 @@ function getInterpPx(pi, loc, step) { } } -},{"../../lib":169,"./constants":298}],307:[function(_dereq_,module,exports){ +},{"../../lib":168,"./constants":298}],307:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68776,9 +71610,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return hoverData; }; -},{"../../components/color":50,"../heatmap/hover":323}],308:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../heatmap/hover":323}],308:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68808,9 +71642,9 @@ Contour.meta = { module.exports = Contour; -},{"../../plots/cartesian":225,"./attributes":294,"./calc":295,"./colorbar":297,"./defaults":303,"./hover":307,"./plot":312,"./style":314}],309:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":294,"./calc":295,"./colorbar":297,"./defaults":303,"./hover":307,"./plot":312,"./style":314}],309:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68838,9 +71672,9 @@ module.exports = function handleLabelDefaults(coerce, layout, lineColor, opts) { if(opts.hasHover !== false) coerce('zhoverformat'); }; -},{"../../lib":169}],310:[function(_dereq_,module,exports){ +},{"../../lib":168}],310:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68855,23 +71689,25 @@ var Colorscale = _dereq_('../../components/colorscale'); var endPlus = _dereq_('./end_plus'); module.exports = function makeColorMap(trace) { - var contours = trace.contours, - start = contours.start, - end = endPlus(contours), - cs = contours.size || 1, - nc = Math.floor((end - start) / cs) + 1, - extra = contours.coloring === 'lines' ? 0 : 1; + var contours = trace.contours; + var start = contours.start; + var end = endPlus(contours); + var cs = contours.size || 1; + var nc = Math.floor((end - start) / cs) + 1; + var extra = contours.coloring === 'lines' ? 0 : 1; if(!isFinite(cs)) { cs = 1; nc = 1; } - var scl = trace.colorscale, - len = scl.length; + var scl = trace.reversescale ? + Colorscale.flipScale(trace.colorscale) : + trace.colorscale; - var domain = new Array(len), - range = new Array(len); + var len = scl.length; + var domain = new Array(len); + var range = new Array(len); var si, i; @@ -68890,10 +71726,14 @@ module.exports = function makeColorMap(trace) { // do the contours extend beyond the colorscale? // if so, extend the colorscale with constants - var zRange = d3.extent([trace.zmin, trace.zmax, contours.start, - contours.start + cs * (nc - 1)]), - zmin = zRange[trace.zmin < trace.zmax ? 0 : 1], - zmax = zRange[trace.zmin < trace.zmax ? 1 : 0]; + var zRange = d3.extent([ + trace.zmin, + trace.zmax, + contours.start, + contours.start + cs * (nc - 1) + ]); + var zmin = zRange[trace.zmin < trace.zmax ? 0 : 1]; + var zmax = zRange[trace.zmin < trace.zmax ? 1 : 0]; if(zmin !== trace.zmin) { domain.splice(0, 0, zmin); @@ -68922,9 +71762,9 @@ module.exports = function makeColorMap(trace) { }); }; -},{"../../components/colorscale":65,"./end_plus":305,"d3":16}],311:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"./end_plus":305,"d3":16}],311:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68940,19 +71780,19 @@ var constants = _dereq_('./constants'); // at every intersection, rather than just following a path // TODO: shorten the inner loop to only the relevant levels module.exports = function makeCrossings(pathinfo) { - var z = pathinfo[0].z, - m = z.length, - n = z[0].length, // we already made sure z isn't ragged in interp2d - twoWide = m === 2 || n === 2, - xi, - yi, - startIndices, - ystartIndices, - label, - corners, - mi, - pi, - i; + var z = pathinfo[0].z; + var m = z.length; + var n = z[0].length; // we already made sure z isn't ragged in interp2d + var twoWide = m === 2 || n === 2; + var xi; + var yi; + var startIndices; + var ystartIndices; + var label; + var corners; + var mi; + var pi; + var i; for(yi = 0; yi < m - 1; yi++) { ystartIndices = []; @@ -69016,7 +71856,7 @@ function getMarchingIndex(val, corners) { },{"./constants":298}],312:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69046,7 +71886,6 @@ var costConstants = constants.LABELOPTIMIZER; exports.plot = function plot(gd, plotinfo, cdcontours, contourLayer) { var xa = plotinfo.xaxis; var ya = plotinfo.yaxis; - var fullLayout = gd._fullLayout; Lib.makeTraceGroups(contourLayer, cdcontours, 'contour').each(function(cd) { var plotGroup = d3.select(this); @@ -69074,16 +71913,16 @@ exports.plot = function plot(gd, plotinfo, cdcontours, contourLayer) { makeCrossings(pathinfo); findAllPaths(pathinfo); - var leftedge = xa.c2p(x[0], true), - rightedge = xa.c2p(x[x.length - 1], true), - bottomedge = ya.c2p(y[0], true), - topedge = ya.c2p(y[y.length - 1], true), - perimeter = [ - [leftedge, topedge], - [rightedge, topedge], - [rightedge, bottomedge], - [leftedge, bottomedge] - ]; + var leftedge = xa.c2p(x[0], true); + var rightedge = xa.c2p(x[x.length - 1], true); + var bottomedge = ya.c2p(y[0], true); + var topedge = ya.c2p(y[y.length - 1], true); + var perimeter = [ + [leftedge, topedge], + [rightedge, topedge], + [rightedge, bottomedge], + [leftedge, bottomedge] + ]; var fillPathinfo = pathinfo; if(contours.type === 'constraint') { @@ -69095,7 +71934,7 @@ exports.plot = function plot(gd, plotinfo, cdcontours, contourLayer) { makeBackground(plotGroup, perimeter, contours); makeFills(plotGroup, fillPathinfo, perimeter, contours); makeLinesAndLabels(plotGroup, pathinfo, gd, cd0, contours, perimeter); - clipGaps(plotGroup, plotinfo, fullLayout._clips, cd0, perimeter); + clipGaps(plotGroup, plotinfo, gd, cd0, perimeter); }); }; @@ -69147,16 +71986,16 @@ function initFullPath(pi, perimeter) { } function joinAllPaths(pi, perimeter) { - var fullpath = initFullPath(pi, perimeter), - i = 0, - startsleft = pi.edgepaths.map(function(v, i) { return i; }), - newloop = true, - endpt, - newendpt, - cnt, - nexti, - possiblei, - addpath; + var fullpath = initFullPath(pi, perimeter); + var i = 0; + var startsleft = pi.edgepaths.map(function(v, i) { return i; }); + var newloop = true; + var endpt; + var newendpt; + var cnt; + var nexti; + var possiblei; + var addpath; function istop(pt) { return Math.abs(pt[1] - perimeter[0][1]) < 0.01; } function isbottom(pt) { return Math.abs(pt[1] - perimeter[2][1]) < 0.01; } @@ -69247,8 +72086,7 @@ function makeLinesAndLabels(plotgroup, pathinfo, gd, cd0, contours, perimeter) { // In this case we'll remove the lines after making the labels. var linegroup = exports.createLines(lineContainer, showLines || showLabels, pathinfo); - var lineClip = exports.createLineClip(lineContainer, clipLinesForLabels, - gd._fullLayout._clips, cd0.trace.uid); + var lineClip = exports.createLineClip(lineContainer, clipLinesForLabels, gd, cd0.trace.uid); var labelGroup = plotgroup.selectAll('g.contourlabels') .data(showLabels ? [0] : []); @@ -69259,8 +72097,7 @@ function makeLinesAndLabels(plotgroup, pathinfo, gd, cd0, contours, perimeter) { .classed('contourlabels', true); if(showLabels) { - var labelClipPathData = [perimeter]; - + var labelClipPathData = []; var labelData = []; // invalidate the getTextLocation cache in case paths changed @@ -69272,20 +72109,47 @@ function makeLinesAndLabels(plotgroup, pathinfo, gd, cd0, contours, perimeter) { .attr('data-notex', 1) .call(Drawing.font, contours.labelfont); - var xLen = pathinfo[0].xaxis._length; - var yLen = pathinfo[0].yaxis._length; + var xa = pathinfo[0].xaxis; + var ya = pathinfo[0].yaxis; + var xLen = xa._length; + var yLen = ya._length; + var xRng = xa.range; + var yRng = ya.range; + var x0 = Math.max(perimeter[0][0], 0); + var x1 = Math.min(perimeter[2][0], xLen); + var y0 = Math.max(perimeter[0][1], 0); + var y1 = Math.min(perimeter[2][1], yLen); // visible bounds of the contour trace (and the midpoints, to // help with cost calculations) - var bounds = { - left: Math.max(perimeter[0][0], 0), - right: Math.min(perimeter[2][0], xLen), - top: Math.max(perimeter[0][1], 0), - bottom: Math.min(perimeter[2][1], yLen) - }; + var bounds = {}; + + if(xRng[0] < xRng[1]) { + bounds.left = x0; + bounds.right = x1; + } else { + bounds.left = x1; + bounds.right = x0; + } + + if(yRng[0] < yRng[1]) { + bounds.top = y0; + bounds.bottom = y1; + } else { + bounds.top = y1; + bounds.bottom = y0; + } + bounds.middle = (bounds.top + bounds.bottom) / 2; bounds.center = (bounds.left + bounds.right) / 2; + labelClipPathData.push([ + [bounds.left, bounds.top], + [bounds.right, bounds.top], + [bounds.right, bounds.bottom], + [bounds.left, bounds.bottom] + ]); + var plotDiagonal = Math.sqrt(xLen * xLen + yLen * yLen); // the path length to use to scale the number of labels to draw: @@ -69370,7 +72234,8 @@ exports.createLines = function(lineContainer, makeLines, pathinfo) { return linegroup; }; -exports.createLineClip = function(lineContainer, clipLinesForLabels, clips, uid) { +exports.createLineClip = function(lineContainer, clipLinesForLabels, gd, uid) { + var clips = gd._fullLayout._clips; var clipId = clipLinesForLabels ? ('clipline' + uid) : null; var lineClip = clips.selectAll('#' + clipId) @@ -69381,7 +72246,7 @@ exports.createLineClip = function(lineContainer, clipLinesForLabels, clips, uid) .classed('contourlineclip', true) .attr('id', clipId); - Drawing.setClipUrl(lineContainer, clipId); + Drawing.setClipUrl(lineContainer, clipId, gd); return lineClip; }; @@ -69612,7 +72477,8 @@ exports.drawLabels = function(labelGroup, labelData, gd, lineClip, labelClipPath } }; -function clipGaps(plotGroup, plotinfo, clips, cd0, perimeter) { +function clipGaps(plotGroup, plotinfo, gd, cd0, perimeter) { + var clips = gd._fullLayout._clips; var clipId = 'clip' + cd0.trace.uid; var clipPath = clips.selectAll('#' + clipId) @@ -69651,17 +72517,17 @@ function clipGaps(plotGroup, plotinfo, clips, cd0, perimeter) { } else clipId = null; - plotGroup.call(Drawing.setClipUrl, clipId); + Drawing.setClipUrl(plotGroup, clipId, gd); } function makeClipMask(cd0) { - var empties = cd0.trace._emptypoints, - z = [], - m = cd0.z.length, - n = cd0.z[0].length, - i, - row = [], - emptyPoint; + var empties = cd0.trace._emptypoints; + var z = []; + var m = cd0.z.length; + var n = cd0.z[0].length; + var i; + var row = []; + var emptyPoint; for(i = 0; i < n; i++) row.push(1); for(i = 0; i < m; i++) z.push(row.slice()); @@ -69674,9 +72540,9 @@ function makeClipMask(cd0) { return z; } -},{"../../components/drawing":75,"../../lib":169,"../../lib/svg_text_utils":191,"../../plots/cartesian/axes":214,"../../plots/cartesian/set_convert":232,"../heatmap/plot":328,"./close_boundaries":296,"./constants":298,"./convert_to_constraints":302,"./empty_pathinfo":304,"./find_all_paths":306,"./make_crossings":311,"d3":16}],313:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":168,"../../lib/svg_text_utils":189,"../../plots/cartesian/axes":212,"../../plots/cartesian/set_convert":231,"../heatmap/plot":327,"./close_boundaries":296,"./constants":298,"./convert_to_constraints":302,"./empty_pathinfo":304,"./find_all_paths":306,"./make_crossings":311,"d3":16}],313:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69732,9 +72598,9 @@ module.exports = function setContours(trace) { } else if(contours.type !== 'constraint') { // sanity checks on manually-supplied start/end/size - var start = contours.start, - end = contours.end, - inputContours = trace._input.contours; + var start = contours.start; + var end = contours.end; + var inputContours = trace._input.contours; if(start > end) { contours.start = inputContours.start = end; @@ -69778,9 +72644,9 @@ function autoContours(start, end, ncontours) { return dummyAx; } -},{"../../lib":169,"../../plots/cartesian/axes":214}],314:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212}],314:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69860,9 +72726,9 @@ module.exports = function style(gd) { heatmapStyle(gd); }; -},{"../../components/drawing":75,"../heatmap/style":329,"./make_color_map":310,"d3":16}],315:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../heatmap/style":328,"./make_color_map":310,"d3":16}],315:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69905,9 +72771,9 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, layout, handleLabelDefaults(coerce, layout, lineColor, opts); }; -},{"../../components/colorscale/defaults":60,"./label_defaults":309}],316:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"./label_defaults":309}],316:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69999,6 +72865,7 @@ module.exports = extendFlat({ editType: 'none', }, + transforms: undefined }, colorscaleAttrs('', { cLetter: 'z', @@ -70007,9 +72874,9 @@ module.exports = extendFlat({ { colorbar: colorbarAttrs } ); -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../lib/extend":163,"../scatter/attributes":366}],317:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../lib/extend":162,"../scatter/attributes":367}],317:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70026,7 +72893,6 @@ var Axes = _dereq_('../../plots/cartesian/axes'); var histogram2dCalc = _dereq_('../histogram2d/calc'); var colorscaleCalc = _dereq_('../../components/colorscale/calc'); var convertColumnData = _dereq_('./convert_column_xyz'); -var maxRowLength = _dereq_('./max_row_length'); var clean2dArray = _dereq_('./clean_2d_array'); var interp2d = _dereq_('./interp2d'); var findEmpties = _dereq_('./find_empties'); @@ -70036,21 +72902,21 @@ var makeBoundArray = _dereq_('./make_bound_array'); module.exports = function calc(gd, trace) { // prepare the raw data // run makeCalcdata on x and y even for heatmaps, in case of category mappings - var xa = Axes.getFromId(gd, trace.xaxis || 'x'), - ya = Axes.getFromId(gd, trace.yaxis || 'y'), - isContour = Registry.traceIs(trace, 'contour'), - isHist = Registry.traceIs(trace, 'histogram'), - isGL2D = Registry.traceIs(trace, 'gl2d'), - zsmooth = isContour ? 'best' : trace.zsmooth, - x, - x0, - dx, - y, - y0, - dy, - z, - i, - binned; + var xa = Axes.getFromId(gd, trace.xaxis || 'x'); + var ya = Axes.getFromId(gd, trace.yaxis || 'y'); + var isContour = Registry.traceIs(trace, 'contour'); + var isHist = Registry.traceIs(trace, 'histogram'); + var isGL2D = Registry.traceIs(trace, 'gl2d'); + var zsmooth = isContour ? 'best' : trace.zsmooth; + var x; + var x0; + var dx; + var y; + var y0; + var dy; + var z; + var i; + var binned; // cancel minimum tick spacings (only applies to bars and boxes) xa._minDtick = 0; @@ -70103,8 +72969,8 @@ module.exports = function calc(gd, trace) { } else if(!isHist) { if(x.length) { - var avgdx = (x[x.length - 1] - x[0]) / (x.length - 1), - maxErrX = Math.abs(avgdx / 100); + var avgdx = (x[x.length - 1] - x[0]) / (x.length - 1); + var maxErrX = Math.abs(avgdx / 100); for(i = 0; i < x.length - 1; i++) { if(Math.abs(x[i + 1] - x[i] - avgdx) > maxErrX) { noZsmooth('x scale is not linear'); @@ -70113,8 +72979,8 @@ module.exports = function calc(gd, trace) { } } if(y.length && zsmooth === 'fast') { - var avgdy = (y[y.length - 1] - y[0]) / (y.length - 1), - maxErrY = Math.abs(avgdy / 100); + var avgdy = (y[y.length - 1] - y[0]) / (y.length - 1); + var maxErrY = Math.abs(avgdy / 100); for(i = 0; i < y.length - 1; i++) { if(Math.abs(y[i + 1] - y[i] - avgdy) > maxErrY) { noZsmooth('y scale is not linear'); @@ -70126,7 +72992,7 @@ module.exports = function calc(gd, trace) { } // create arrays of brick boundaries, to be used by autorange and heatmap.plot - var xlen = maxRowLength(z); + var xlen = Lib.maxRowLength(z); var xIn = trace.xtype === 'scaled' ? '' : x; var xArray = makeBoundArray(trace, xIn, x0, dx, xlen, xa); var yIn = trace.ytype === 'scaled' ? '' : y; @@ -70156,7 +73022,11 @@ module.exports = function calc(gd, trace) { // auto-z and autocolorscale if applicable if(!isContour || trace.contours.type !== 'constraint') { - colorscaleCalc(trace, z, '', 'z'); + colorscaleCalc(gd, trace, { + vals: z, + containerStr: '', + cLetter: 'z' + }); } if(isContour && trace.contours && trace.contours.coloring === 'heatmap') { @@ -70172,9 +73042,9 @@ module.exports = function calc(gd, trace) { return [cd0]; }; -},{"../../components/colorscale/calc":58,"../../lib":169,"../../plots/cartesian/axes":214,"../../registry":259,"../histogram2d/calc":345,"./clean_2d_array":318,"./convert_column_xyz":320,"./find_empties":322,"./interp2d":325,"./make_bound_array":326,"./max_row_length":327}],318:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../lib":168,"../../plots/cartesian/axes":212,"../../registry":257,"../histogram2d/calc":345,"./clean_2d_array":318,"./convert_column_xyz":320,"./find_empties":322,"./interp2d":325,"./make_bound_array":326}],318:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70219,7 +73089,7 @@ module.exports = function clean2dArray(zOld, transpose) { },{"fast-isnumeric":18}],319:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70235,7 +73105,7 @@ module.exports = { },{}],320:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70250,43 +73120,36 @@ var BADNUM = _dereq_('../../constants/numerical').BADNUM; module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, arrayVarNames) { var colLen = trace._length; - var col1 = trace[var1Name].slice(0, colLen); - var col2 = trace[var2Name].slice(0, colLen); + var col1 = ax1.makeCalcdata(trace, var1Name); + var col2 = ax2.makeCalcdata(trace, var2Name); var textCol = trace.text; var hasColumnText = (textCol !== undefined && Lib.isArray1D(textCol)); - var col1Calendar = trace[var1Name + 'calendar']; - var col2Calendar = trace[var2Name + 'calendar']; + var i, j; - var i, j, arrayVar, newArray, arrayVarName; - - for(i = 0; i < colLen; i++) { - col1[i] = ax1.d2c(col1[i], 0, col1Calendar); - col2[i] = ax2.d2c(col2[i], 0, col2Calendar); - } - - var col1dv = Lib.distinctVals(col1), - col1vals = col1dv.vals, - col2dv = Lib.distinctVals(col2), - col2vals = col2dv.vals, - newArrays = []; + var col1dv = Lib.distinctVals(col1); + var col1vals = col1dv.vals; + var col2dv = Lib.distinctVals(col2); + var col2vals = col2dv.vals; + var newArrays = []; + var text; for(i = 0; i < arrayVarNames.length; i++) { newArrays[i] = Lib.init2dArray(col2vals.length, col1vals.length); } - var i1, i2, text; - - if(hasColumnText) text = Lib.init2dArray(col2vals.length, col1vals.length); + if(hasColumnText) { + text = Lib.init2dArray(col2vals.length, col1vals.length); + } for(i = 0; i < colLen; i++) { if(col1[i] !== BADNUM && col2[i] !== BADNUM) { - i1 = Lib.findBin(col1[i] + col1dv.minDiff / 2, col1vals); - i2 = Lib.findBin(col2[i] + col2dv.minDiff / 2, col2vals); + var i1 = Lib.findBin(col1[i] + col1dv.minDiff / 2, col1vals); + var i2 = Lib.findBin(col2[i] + col2dv.minDiff / 2, col2vals); for(j = 0; j < arrayVarNames.length; j++) { - arrayVarName = arrayVarNames[j]; - arrayVar = trace[arrayVarName]; - newArray = newArrays[j]; + var arrayVarName = arrayVarNames[j]; + var arrayVar = trace[arrayVarName]; + var newArray = newArrays[j]; newArray[i2][i1] = arrayVar[i]; } @@ -70302,9 +73165,9 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, if(hasColumnText) trace._text = text; }; -},{"../../constants/numerical":151,"../../lib":169}],321:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168}],321:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70342,9 +73205,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: '', cLetter: 'z'}); }; -},{"../../components/colorscale/defaults":60,"../../lib":169,"./attributes":316,"./style_defaults":330,"./xyz_defaults":331}],322:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../lib":168,"./attributes":316,"./style_defaults":329,"./xyz_defaults":330}],322:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70353,7 +73216,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout 'use strict'; -var maxRowLength = _dereq_('./max_row_length'); +var maxRowLength = _dereq_('../../lib').maxRowLength; /* Return a list of empty points in 2D array z * each empty point z[i][j] gives an array [i, j, neighborCount] @@ -70363,21 +73226,21 @@ var maxRowLength = _dereq_('./max_row_length'); * neighbors, and add a fractional neighborCount */ module.exports = function findEmpties(z) { - var empties = [], - neighborHash = {}, - noNeighborList = [], - nextRow = z[0], - row = [], - blank = [0, 0, 0], - rowLength = maxRowLength(z), - prevRow, - i, - j, - thisPt, - p, - neighborCount, - newNeighborHash, - foundNewNeighbors; + var empties = []; + var neighborHash = {}; + var noNeighborList = []; + var nextRow = z[0]; + var row = []; + var blank = [0, 0, 0]; + var rowLength = maxRowLength(z); + var prevRow; + var i; + var j; + var thisPt; + var p; + var neighborCount; + var newNeighborHash; + var foundNewNeighbors; for(i = 0; i < z.length; i++) { prevRow = row; @@ -70448,9 +73311,9 @@ module.exports = function findEmpties(z) { return empties.sort(function(a, b) { return b[2] - a[2]; }); }; -},{"./max_row_length":327}],323:[function(_dereq_,module,exports){ +},{"../../lib":168}],323:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70520,10 +73383,10 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay ny = Math.max(0, Math.min(y2.length - 2, Lib.findBin(yval, y2))); } - var x0 = xa.c2p(x[nx]), - x1 = xa.c2p(x[nx + 1]), - y0 = ya.c2p(y[ny]), - y1 = ya.c2p(y[ny + 1]); + var x0 = xa.c2p(x[nx]); + var x1 = xa.c2p(x[nx + 1]); + var y0 = ya.c2p(y[ny]); + var y1 = ya.c2p(y[ny + 1]); if(contour) { x1 = x0; @@ -70577,9 +73440,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay })]; }; -},{"../../components/fx":92,"../../lib":169,"../../plots/cartesian/axes":214}],324:[function(_dereq_,module,exports){ +},{"../../components/fx":90,"../../lib":168,"../../plots/cartesian/axes":212}],324:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70609,9 +73472,9 @@ Heatmap.meta = { module.exports = Heatmap; -},{"../../plots/cartesian":225,"./attributes":316,"./calc":317,"./colorbar":319,"./defaults":321,"./hover":323,"./plot":328,"./style":329}],325:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":316,"./calc":317,"./colorbar":319,"./defaults":321,"./hover":323,"./plot":327,"./style":328}],325:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70674,20 +73537,20 @@ module.exports = function interp2d(z, emptyPoints) { }; function iterateInterp2d(z, emptyPoints, overshoot) { - var maxFractionalChange = 0, - thisPt, - i, - j, - p, - q, - neighborShift, - neighborRow, - neighborVal, - neighborCount, - neighborSum, - initialVal, - minNeighbor, - maxNeighbor; + var maxFractionalChange = 0; + var thisPt; + var i; + var j; + var p; + var q; + var neighborShift; + var neighborRow; + var neighborVal; + var neighborCount; + var neighborSum; + var initialVal; + var minNeighbor; + var maxNeighbor; for(p = 0; p < emptyPoints.length; p++) { thisPt = emptyPoints[p]; @@ -70744,9 +73607,9 @@ function iterateInterp2d(z, emptyPoints, overshoot) { return maxFractionalChange; } -},{"../../lib":169}],326:[function(_dereq_,module,exports){ +},{"../../lib":168}],326:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70759,13 +73622,13 @@ var Registry = _dereq_('../../registry'); var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray; module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, ax) { - var arrayOut = [], - isContour = Registry.traceIs(trace, 'contour'), - isHist = Registry.traceIs(trace, 'histogram'), - isGL2D = Registry.traceIs(trace, 'gl2d'), - v0, - dv, - i; + var arrayOut = []; + var isContour = Registry.traceIs(trace, 'contour'); + var isHist = Registry.traceIs(trace, 'histogram'); + var isGL2D = Registry.traceIs(trace, 'gl2d'); + var v0; + var dv; + var i; var isArrayOfTwoItemsOrMore = isArrayOrTypedArray(arrayIn) && arrayIn.length > 1; @@ -70792,8 +73655,8 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, } if(len < numbricks) { - var lastPt = arrayOut[arrayOut.length - 1], - delta = lastPt - arrayOut[arrayOut.length - 2]; + var lastPt = arrayOut[arrayOut.length - 1]; + var delta = lastPt - arrayOut[arrayOut.length - 2]; for(i = len; i < numbricks; i++) { lastPt += delta; @@ -70814,10 +73677,15 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, var calendar = trace[ax._id.charAt(0) + 'calendar']; - if(isHist || ax.type === 'category') v0 = ax.r2c(v0In, 0, calendar) || 0; - else if(isArrayOrTypedArray(arrayIn) && arrayIn.length === 1) v0 = arrayIn[0]; - else if(v0In === undefined) v0 = 0; - else v0 = ax.d2c(v0In, 0, calendar); + if(isHist || ax.type === 'category' || ax.type === 'multicategory') { + v0 = ax.r2c(v0In, 0, calendar) || 0; + } else if(isArrayOrTypedArray(arrayIn) && arrayIn.length === 1) { + v0 = arrayIn[0]; + } else if(v0In === undefined) { + v0 = 0; + } else { + v0 = ax.d2c(v0In, 0, calendar); + } for(i = (isContour || isGL2D) ? 0 : -0.5; i < numbricks; i++) { arrayOut.push(v0 + dv * i); @@ -70827,31 +73695,9 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, return arrayOut; }; -},{"../../lib":169,"../../registry":259}],327:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],327:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, 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'; - -module.exports = function maxRowLength(z) { - var len = 0; - - for(var i = 0; i < z.length; i++) { - len = Math.max(len, z[i].length); - } - - return len; -}; - -},{}],328:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70869,8 +73715,6 @@ var Lib = _dereq_('../../lib'); var Colorscale = _dereq_('../../components/colorscale'); var xmlnsNamespaces = _dereq_('../../constants/xmlns_namespaces'); -var maxRowLength = _dereq_('./max_row_length'); - module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { var xa = plotinfo.xaxis; var ya = plotinfo.yaxis; @@ -70890,7 +73734,7 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { // get z dims var m = z.length; - var n = maxRowLength(z); + var n = Lib.maxRowLength(z); var xrev = false; var yrev = false; @@ -70964,8 +73808,8 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { bottom = Math.min((1 + extra) * ya._length, bottom); } - var imageWidth = Math.round(right - left), - imageHeight = Math.round(bottom - top); + var imageWidth = Math.round(right - left); + var imageHeight = Math.round(bottom - top); // setup image nodes @@ -70995,11 +73839,7 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { var context = canvas.getContext('2d'); var sclFunc = Colorscale.makeColorScaleFunc( - Colorscale.extractScale( - trace.colorscale, - trace.zmin, - trace.zmax - ), + Colorscale.extractScale(trace, {cLetter: 'z'}), { noNumericCheck: true, returnArray: true } ); @@ -71060,12 +73900,12 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { var z00 = r0[xinterp.bin0]; if(z00 === undefined) return setColor(undefined, 1); - var z01 = r0[xinterp.bin1], - z10 = r1[xinterp.bin0], - z11 = r1[xinterp.bin1], - dx = (z01 - z00) || 0, - dy = (z10 - z00) || 0, - dxy; + var z01 = r0[xinterp.bin1]; + var z10 = r1[xinterp.bin0]; + var z11 = r1[xinterp.bin1]; + var dx = (z01 - z00) || 0; + var dy = (z10 - z00) || 0; + var dxy; // the bilinear interpolation term needs different calculations // for all the different permutations of missing data @@ -71087,13 +73927,12 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { } if(zsmooth) { // best or fast, works fastest with imageData - var pxIndex = 0, - pixels; + var pxIndex = 0; + var pixels; try { pixels = new Uint8Array(imageWidth * imageHeight * 4); - } - catch(e) { + } catch(e) { pixels = new Array(imageWidth * imageHeight * 4); } @@ -71141,10 +73980,9 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) { var imageData = context.createImageData(imageWidth, imageHeight); try { imageData.data.set(pixels); - } - catch(e) { - var pxArray = imageData.data, - dlen = pxArray.length; + } catch(e) { + var pxArray = imageData.data; + var dlen = pxArray.length; for(j = 0; j < dlen; j ++) { pxArray[j] = pixels[j]; } @@ -71270,9 +74108,9 @@ function putColor(pixels, pxIndex, c) { pixels[pxIndex + 3] = Math.round(c[3] * 255); } -},{"../../components/colorscale":65,"../../constants/xmlns_namespaces":152,"../../lib":169,"../../registry":259,"./max_row_length":327,"d3":16,"tinycolor2":33}],329:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"../../constants/xmlns_namespaces":150,"../../lib":168,"../../registry":257,"d3":16,"tinycolor2":34}],328:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71291,9 +74129,9 @@ module.exports = function style(gd) { }); }; -},{"d3":16}],330:[function(_dereq_,module,exports){ +},{"d3":16}],329:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71314,16 +74152,15 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce) { coerce('zhoverformat'); }; -},{}],331:[function(_dereq_,module,exports){ +},{}],330:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); @@ -71343,10 +74180,13 @@ module.exports = function handleXYZDefaults(traceIn, traceOut, coerce, layout, x x = coerce(xName); y = coerce(yName); - // column z must be accompanied by xName and yName arrays - if(!(x && x.length && y && y.length)) return 0; + var xlen = Lib.minRowLength(x); + var ylen = Lib.minRowLength(y); - traceOut._length = Math.min(x.length, y.length, z.length); + // column z must be accompanied by xName and yName arrays + if(xlen === 0 || ylen === 0) return 0; + + traceOut._length = Math.min(xlen, ylen, z.length); } else { x = coordDefaults(xName, coerce); @@ -71367,10 +74207,8 @@ module.exports = function handleXYZDefaults(traceIn, traceOut, coerce, layout, x }; function coordDefaults(coordStr, coerce) { - var coord = coerce(coordStr), - coordType = coord ? - coerce(coordStr + 'type', 'array') : - 'scaled'; + var coord = coerce(coordStr); + var coordType = coord ? coerce(coordStr + 'type', 'array') : 'scaled'; if(coordType === 'scaled') { coerce(coordStr + '0'); @@ -71381,10 +74219,10 @@ function coordDefaults(coordStr, coerce) { } function isValidZ(z) { - var allRowsAreArrays = true, - oneRowIsFilled = false, - hasOneNumber = false, - zi; + var allRowsAreArrays = true; + var oneRowIsFilled = false; + var hasOneNumber = false; + var zi; /* * Without this step: @@ -71412,9 +74250,9 @@ function isValidZ(z) { return (allRowsAreArrays && oneRowIsFilled && hasOneNumber); } -},{"../../lib":169,"../../registry":259,"fast-isnumeric":18}],332:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"fast-isnumeric":18}],331:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71424,6 +74262,9 @@ function isValidZ(z) { 'use strict'; var barAttrs = _dereq_('../bar/attributes'); +var hovertemplateAttrs = _dereq_('../../components/fx/hovertemplate_attributes'); +var makeBinAttrs = _dereq_('./bin_attributes'); +var constants = _dereq_('./constants'); module.exports = { x: { @@ -71485,19 +74326,6 @@ module.exports = { }, editType: 'calc' }, - - autobinx: { - valType: 'boolean', - dflt: null, - - editType: 'calc', - impliedEdits: { - 'xbins.start': undefined, - 'xbins.end': undefined, - 'xbins.size': undefined - }, - - }, nbinsx: { valType: 'integer', min: 0, @@ -71506,20 +74334,8 @@ module.exports = { editType: 'calc', }, - xbins: makeBinsAttr('x'), + xbins: makeBinAttrs('x', true), - autobiny: { - valType: 'boolean', - dflt: null, - - editType: 'calc', - impliedEdits: { - 'ybins.start': undefined, - 'ybins.end': undefined, - 'ybins.size': undefined - }, - - }, nbinsy: { valType: 'integer', min: 0, @@ -71528,7 +74344,25 @@ module.exports = { editType: 'calc', }, - ybins: makeBinsAttr('y'), + ybins: makeBinAttrs('y', true), + autobinx: { + valType: 'boolean', + dflt: null, + + editType: 'calc', + + }, + autobiny: { + valType: 'boolean', + dflt: null, + + editType: 'calc', + + }, + + hovertemplate: hovertemplateAttrs({}, { + keys: constants.eventDataKeys + }), marker: barAttrs.marker, @@ -71540,45 +74374,9 @@ module.exports = { } }; -function makeBinsAttr(axLetter) { - var impliedEdits = {}; - impliedEdits['autobin' + axLetter] = false; - var impliedEditsInner = {}; - impliedEditsInner['^autobin' + axLetter] = false; - - return { - start: { - valType: 'any', // for date axes - dflt: null, - - editType: 'calc', - impliedEdits: impliedEditsInner, - - }, - end: { - valType: 'any', // for date axes - dflt: null, - - editType: 'calc', - impliedEdits: impliedEditsInner, - - }, - size: { - valType: 'any', // for date axes - dflt: null, - - editType: 'calc', - impliedEdits: impliedEditsInner, - - }, - editType: 'calc', - impliedEdits: impliedEdits - }; -} - -},{"../bar/attributes":269}],333:[function(_dereq_,module,exports){ +},{"../../components/fx/hovertemplate_attributes":89,"../bar/attributes":267,"./bin_attributes":333,"./constants":337}],332:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71590,8 +74388,8 @@ function makeBinsAttr(axLetter) { module.exports = function doAvg(size, counts) { - var nMax = size.length, - total = 0; + var nMax = size.length; + var total = 0; for(var i = 0; i < nMax; i++) { if(counts[i]) { size[i] /= counts[i]; @@ -71602,43 +74400,44 @@ module.exports = function doAvg(size, counts) { return total; }; -},{}],334:[function(_dereq_,module,exports){ +},{}],333:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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'; - -module.exports = function handleBinDefaults(traceIn, traceOut, coerce, binDirections) { - coerce('histnorm'); - - binDirections.forEach(function(binDirection) { - /* - * Because date axes have string values for start and end, - * and string options for size, we cannot validate these attributes - * now. We will do this during calc (immediately prior to binning) - * in ./clean_bins, and push the cleaned values back to _fullData. - */ - coerce(binDirection + 'bins.start'); - coerce(binDirection + 'bins.end'); - coerce(binDirection + 'bins.size'); - - var autobin = coerce('autobin' + binDirection); - if(autobin !== false) coerce('nbins' + binDirection); - }); - - return traceOut; +module.exports = function makeBinAttrs(axLetter, match) { + return { + start: { + valType: 'any', // for date axes + + editType: 'calc', + + }, + end: { + valType: 'any', // for date axes + + editType: 'calc', + + }, + size: { + valType: 'any', // for date axes + + editType: 'calc', + + }, + editType: 'calc' + }; }; -},{}],335:[function(_dereq_,module,exports){ +},{}],334:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71712,9 +74511,9 @@ module.exports = { } }; -},{"fast-isnumeric":18}],336:[function(_dereq_,module,exports){ +},{"fast-isnumeric":18}],335:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71890,9 +74689,9 @@ function dateParts(v, pa, calendar) { return parts; } -},{"../../constants/numerical":151,"../../plots/cartesian/axes":214}],337:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../plots/cartesian/axes":212}],336:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71911,8 +74710,6 @@ var arraysToCalcdata = _dereq_('../bar/arrays_to_calcdata'); var binFunctions = _dereq_('./bin_functions'); var normFunctions = _dereq_('./norm_functions'); var doAvg = _dereq_('./average'); -var cleanBins = _dereq_('./clean_bins'); -var oneMonth = _dereq_('../../constants/numerical').ONEAVGMONTH; var getBinSpanLabelRound = _dereq_('./bin_label_vals'); module.exports = function calc(gd, trace) { @@ -71931,8 +74728,6 @@ module.exports = function calc(gd, trace) { var cumulativeSpec = trace.cumulative; var i; - cleanBins(trace, pa, mainData); - var binsAndPos = calcAllAutoBins(gd, trace, pa, mainData); var binSpec = binsAndPos[0]; var pos0 = binsAndPos[1]; @@ -72110,8 +74905,26 @@ module.exports = function calc(gd, trace) { */ function calcAllAutoBins(gd, trace, pa, mainData, _overlayEdgeCase) { var binAttr = mainData + 'bins'; - var isOverlay = gd._fullLayout.barmode === 'overlay'; - var i, tracei, calendar, firstManual, pos0; + var fullLayout = gd._fullLayout; + var isOverlay = fullLayout.barmode === 'overlay'; + var i, traces, tracei, calendar, pos0, autoVals, cumulativeSpec; + + var cleanBound = (pa.type === 'date') ? + function(v) { return (v || v === 0) ? Lib.cleanDate(v, null, pa.calendar) : null; } : + function(v) { return isNumeric(v) ? Number(v) : null; }; + + function setBound(attr, bins, newBins) { + if(bins[attr + 'Found']) { + bins[attr] = cleanBound(bins[attr]); + if(bins[attr] === null) bins[attr] = newBins[attr]; + } + else { + autoVals[attr] = bins[attr] = newBins[attr]; + Lib.nestedProperty(traces[0], binAttr + '.' + attr).set(newBins[attr]); + } + } + + var binOpts = fullLayout._histogramBinOpts[trace._groupName]; // all but the first trace in this group has already been marked finished // clear this flag, so next time we run calc we will run autobin again @@ -72119,121 +74932,136 @@ function calcAllAutoBins(gd, trace, pa, mainData, _overlayEdgeCase) { delete trace._autoBinFinished; } else { - // must be the first trace in the group - do the autobinning on them all - - // find all grouped traces - in overlay mode each trace is independent - var traceGroup = isOverlay ? [trace] : getConnectedHistograms(gd, trace); - var autoBinnedTraces = []; - - var minSize = Infinity; - var minStart = Infinity; - var maxEnd = -Infinity; - - var autoBinAttr = 'autobin' + mainData; - - for(i = 0; i < traceGroup.length; i++) { - tracei = traceGroup[i]; - - // stash pos0 on the trace so we don't need to duplicate this - // in the main body of calc - pos0 = tracei._pos0 = pa.makeCalcdata(tracei, mainData); - var binSpec = tracei[binAttr]; - - if((tracei[autoBinAttr]) || !binSpec || - binSpec.start === null || binSpec.end === null) { - calendar = tracei[mainData + 'calendar']; - var cumulativeSpec = tracei.cumulative; - - binSpec = Axes.autoBin(pos0, pa, tracei['nbins' + mainData], false, calendar); - - // Edge case: single-valued histogram overlaying others - // Use them all together to calculate the bin size for the single-valued one - if(isOverlay && binSpec._dataSpan === 0 && pa.type !== 'category') { - // Several single-valued histograms! Stop infinite recursion, - // just return an extra flag that tells handleSingleValueOverlays - // to sort out this trace too - if(_overlayEdgeCase) return [binSpec, pos0, true]; - - binSpec = handleSingleValueOverlays(gd, trace, pa, mainData, binAttr); - } - - // adjust for CDF edge cases - if(cumulativeSpec.enabled && (cumulativeSpec.currentbin !== 'include')) { - if(cumulativeSpec.direction === 'decreasing') { - minStart = Math.min(minStart, pa.r2c(binSpec.start, 0, calendar) - binSpec.size); + traces = binOpts.traces; + var sizeFound = binOpts.sizeFound; + var allPos = []; + autoVals = traces[0]._autoBin = {}; + // Note: we're including `legendonly` traces here for autobin purposes, + // so that showing & hiding from the legend won't affect bins. + // But this complicates things a bit since those traces don't `calc`, + // hence `isFirstVisible`. + var isFirstVisible = true; + for(i = 0; i < traces.length; i++) { + tracei = traces[i]; + if(tracei.visible) { + pos0 = tracei._pos0 = pa.makeCalcdata(tracei, mainData); + allPos = Lib.concat(allPos, pos0); + delete tracei._autoBinFinished; + if(trace.visible === true) { + if(isFirstVisible) { + isFirstVisible = false; } else { - maxEnd = Math.max(maxEnd, pa.r2c(binSpec.end, 0, calendar) + binSpec.size); + delete tracei._autoBin; + tracei._autoBinFinished = 1; } } - - // note that it's possible to get here with an explicit autobin: false - // if the bins were not specified. mark this trace for followup - autoBinnedTraces.push(tracei); } - else if(!firstManual) { - // Remember the first manually set binSpec. We'll try to be extra - // accommodating of this one, so other bins line up with these. - // But if there's more than one manual bin set and they're mutually - // inconsistent, then there's not much we can do... - firstManual = { - size: binSpec.size, - start: pa.r2c(binSpec.start, 0, calendar), - end: pa.r2c(binSpec.end, 0, calendar) - }; + } + calendar = traces[0][mainData + 'calendar']; + var newBinSpec = Axes.autoBin( + allPos, pa, binOpts.nbins, false, calendar, sizeFound && binOpts.size); + + // Edge case: single-valued histogram overlaying others + // Use them all together to calculate the bin size for the single-valued one + if(isOverlay && newBinSpec._dataSpan === 0 && + pa.type !== 'category' && pa.type !== 'multicategory') { + // Several single-valued histograms! Stop infinite recursion, + // just return an extra flag that tells handleSingleValueOverlays + // to sort out this trace too + if(_overlayEdgeCase) return [newBinSpec, pos0, true]; + + newBinSpec = handleSingleValueOverlays(gd, trace, pa, mainData, binAttr); + } + + // adjust for CDF edge cases + cumulativeSpec = tracei.cumulative; + if(cumulativeSpec.enabled && (cumulativeSpec.currentbin !== 'include')) { + if(cumulativeSpec.direction === 'decreasing') { + newBinSpec.start = pa.c2r(Axes.tickIncrement( + pa.r2c(newBinSpec.start, 0, calendar), + newBinSpec.size, true, calendar + )); + } + else { + newBinSpec.end = pa.c2r(Axes.tickIncrement( + pa.r2c(newBinSpec.end, 0, calendar), + newBinSpec.size, false, calendar + )); } - - // Even non-autobinned traces get included here, so we get the greatest extent - // and minimum bin size of them all. - // But manually binned traces won't be adjusted, even if the auto values - // are inconsistent with the manual ones (or the manual ones are inconsistent - // with each other). - minSize = getMinSize(minSize, binSpec.size); - minStart = Math.min(minStart, pa.r2c(binSpec.start, 0, calendar)); - maxEnd = Math.max(maxEnd, pa.r2c(binSpec.end, 0, calendar)); - - // add the flag that lets us abort autobin on later traces - if(i) tracei._autoBinFinished = 1; } - // do what we can to match the auto bins to the first manual bins - // but only if sizes are all numeric - if(firstManual && isNumeric(firstManual.size) && isNumeric(minSize)) { - // first need to ensure the bin size is the same as or an integer fraction - // of the first manual bin - // allow the bin size to increase just under the autobin step size to match, - // (which is a factor of 2 or 2.5) otherwise shrink it - if(minSize > firstManual.size / 1.9) minSize = firstManual.size; - else minSize = firstManual.size / Math.ceil(firstManual.size / minSize); - - // now decrease minStart if needed to make the bin centers line up - var adjustedFirstStart = firstManual.start + (firstManual.size - minSize) / 2; - minStart = adjustedFirstStart - minSize * Math.ceil((adjustedFirstStart - minStart) / minSize); + binOpts.size = newBinSpec.size; + if(!sizeFound) { + autoVals.size = newBinSpec.size; + Lib.nestedProperty(traces[0], binAttr + '.size').set(newBinSpec.size); } - // now go back to the autobinned traces and update their bin specs with the final values - for(i = 0; i < autoBinnedTraces.length; i++) { - tracei = autoBinnedTraces[i]; - calendar = tracei[mainData + 'calendar']; - - tracei._input[binAttr] = tracei[binAttr] = { - start: pa.c2r(minStart, 0, calendar), - end: pa.c2r(maxEnd, 0, calendar), - size: minSize - }; - - // note that it's possible to get here with an explicit autobin: false - // if the bins were not specified. - // in that case this will remain in the trace, so that future updates - // which would change the autobinning will not do so. - tracei._input[autoBinAttr] = tracei[autoBinAttr]; - } + setBound('start', binOpts, newBinSpec); + setBound('end', binOpts, newBinSpec); } pos0 = trace._pos0; delete trace._pos0; - return [trace[binAttr], pos0]; + // Each trace can specify its own start/end, or if omitted + // we ensure they're beyond the bounds of this trace's data, + // and we need to make sure start is aligned with the main start + var traceInputBins = trace._input[binAttr] || {}; + var traceBinOptsCalc = Lib.extendFlat({}, binOpts); + var mainStart = binOpts.start; + var startIn = pa.r2l(traceInputBins.start); + var hasStart = startIn !== undefined; + if((binOpts.startFound || hasStart) && startIn !== pa.r2l(mainStart)) { + // We have an explicit start to reconcile across traces + // if this trace has an explicit start, shift it down to a bin edge + // if another trace had an explicit start, shift it down to a + // bin edge past our data + var traceStart = hasStart ? + startIn : + Lib.aggNums(Math.min, null, pos0); + + var dummyAx = { + type: (pa.type === 'category' || pa.type === 'multicategory') ? 'linear' : pa.type, + r2l: pa.r2l, + dtick: binOpts.size, + tick0: mainStart, + calendar: calendar, + range: ([traceStart, Axes.tickIncrement(traceStart, binOpts.size, false, calendar)]).map(pa.l2r) + }; + var newStart = Axes.tickFirst(dummyAx); + if(newStart > pa.r2l(traceStart)) { + newStart = Axes.tickIncrement(newStart, binOpts.size, true, calendar); + } + traceBinOptsCalc.start = pa.l2r(newStart); + if(!hasStart) Lib.nestedProperty(trace, binAttr + '.start').set(traceBinOptsCalc.start); + } + + var mainEnd = binOpts.end; + var endIn = pa.r2l(traceInputBins.end); + var hasEnd = endIn !== undefined; + if((binOpts.endFound || hasEnd) && endIn !== pa.r2l(mainEnd)) { + // Reconciling an explicit end is easier, as it doesn't need to + // match bin edges + var traceEnd = hasEnd ? + endIn : + Lib.aggNums(Math.max, null, pos0); + + traceBinOptsCalc.end = pa.l2r(traceEnd); + if(!hasEnd) Lib.nestedProperty(trace, binAttr + '.start').set(traceBinOptsCalc.end); + } + + // Backward compatibility for one-time autobinning. + // autobin: true is handled in cleanData, but autobin: false + // needs to be here where we have determined the values. + var autoBinAttr = 'autobin' + mainData; + if(trace._input[autoBinAttr] === false) { + trace._input[binAttr] = Lib.extendFlat({}, trace[binAttr] || {}); + delete trace._input[autoBinAttr]; + delete trace[autoBinAttr]; + } + + return [traceBinOptsCalc, pos0]; } /* @@ -72342,25 +75170,6 @@ function getConnectedHistograms(gd, trace) { } -/* - * getMinSize: find the smallest given that size can be a string code - * ie 'M6' for 6 months. ('L' wouldn't make sense to compare with numeric sizes) - */ -function getMinSize(size1, size2) { - if(size1 === Infinity) return size2; - var sizeNumeric1 = numericSize(size1); - var sizeNumeric2 = numericSize(size2); - return sizeNumeric2 < sizeNumeric1 ? size2 : size1; -} - -function numericSize(size) { - if(isNumeric(size)) return size; - if(typeof size === 'string' && size.charAt(0) === 'M') { - return oneMonth * +(size.substr(1)); - } - return Infinity; -} - function cdf(size, direction, currentBin) { var i, vi, prevSum; @@ -72413,9 +75222,9 @@ function cdf(size, direction, currentBin) { } } -},{"../../constants/numerical":151,"../../lib":169,"../../plots/cartesian/axes":214,"../bar/arrays_to_calcdata":268,"./average":333,"./bin_functions":335,"./bin_label_vals":336,"./clean_bins":338,"./norm_functions":343,"fast-isnumeric":18}],338:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"../bar/arrays_to_calcdata":266,"./average":332,"./bin_functions":334,"./bin_label_vals":335,"./norm_functions":343,"fast-isnumeric":18}],337:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72424,78 +75233,128 @@ function cdf(size, direction, currentBin) { 'use strict'; -var isNumeric = _dereq_('fast-isnumeric'); -var cleanDate = _dereq_('../../lib').cleanDate; -var constants = _dereq_('../../constants/numerical'); -var ONEDAY = constants.ONEDAY; -var BADNUM = constants.BADNUM; -/* - * cleanBins: validate attributes autobin[xy] and [xy]bins.(start, end, size) - * Mutates trace so all these attributes are valid. - * - * Normally this kind of thing would happen during supplyDefaults, but - * in this case we need to know the axis type, and axis type isn't set until - * after trace supplyDefaults are completed. So this gets called during the - * calc step, when data are inserted into bins. - */ -module.exports = function cleanBins(trace, ax, binDirection) { - var axType = ax.type, - binAttr = binDirection + 'bins', - bins = trace[binAttr]; +module.exports = { + eventDataKeys: ['binNumber'] +}; - if(!bins) bins = trace[binAttr] = {}; +},{}],338:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, 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. +*/ - var cleanBound = (axType === 'date') ? - function(v) { return (v || v === 0) ? cleanDate(v, BADNUM, bins.calendar) : null; } : - function(v) { return isNumeric(v) ? Number(v) : null; }; - bins.start = cleanBound(bins.start); - bins.end = cleanBound(bins.end); +'use strict'; - // logic for bin size is very similar to dtick (cartesian/tick_value_defaults) - // but without the extra string options for log axes - // ie the only strings we accept are M for months - var sizeDflt = (axType === 'date') ? ONEDAY : 1, - binSize = bins.size; +var Lib = _dereq_('../../lib'); +var nestedProperty = Lib.nestedProperty; - if(isNumeric(binSize)) { - bins.size = (binSize > 0) ? Number(binSize) : sizeDflt; +var attributes = _dereq_('./attributes'); + +var BINATTRS = { + x: [ + {aStr: 'xbins.start', name: 'start'}, + {aStr: 'xbins.end', name: 'end'}, + {aStr: 'xbins.size', name: 'size'}, + {aStr: 'nbinsx', name: 'nbins'} + ], + y: [ + {aStr: 'ybins.start', name: 'start'}, + {aStr: 'ybins.end', name: 'end'}, + {aStr: 'ybins.size', name: 'size'}, + {aStr: 'nbinsy', name: 'nbins'} + ] +}; + +// handle bin attrs and relink auto-determined values so fullData is complete +module.exports = function crossTraceDefaults(fullData, fullLayout) { + var allBinOpts = fullLayout._histogramBinOpts = {}; + var isOverlay = fullLayout.barmode === 'overlay'; + var i, j, traceOut, traceIn, binDirection, group, binOpts; + + function coerce(attr) { + return Lib.coerce(traceOut._input, traceOut, attributes, attr); } - else if(typeof binSize !== 'string') { - bins.size = sizeDflt; - } - else { - // date special case: "M" gives bins every (integer) n months - var prefix = binSize.charAt(0), - sizeNum = binSize.substr(1); - sizeNum = isNumeric(sizeNum) ? Number(sizeNum) : 0; - if((sizeNum <= 0) || !( - axType === 'date' && prefix === 'M' && sizeNum === Math.round(sizeNum) - )) { - bins.size = sizeDflt; + for(i = 0; i < fullData.length; i++) { + traceOut = fullData[i]; + if(traceOut.type !== 'histogram') continue; + + // TODO: this shouldn't be relinked as it's only used within calc + // https://github.com/plotly/plotly.js/issues/749 + delete traceOut._autoBinFinished; + + binDirection = traceOut.orientation === 'v' ? 'x' : 'y'; + // in overlay mode make a separate group for each trace + // otherwise collect all traces of the same subplot & orientation + group = isOverlay ? traceOut.uid : (traceOut.xaxis + traceOut.yaxis + binDirection); + traceOut._groupName = group; + + binOpts = allBinOpts[group]; + + if(binOpts) { + binOpts.traces.push(traceOut); + } + else { + binOpts = allBinOpts[group] = { + traces: [traceOut], + direction: binDirection + }; } } - var autoBinAttr = 'autobin' + binDirection; + for(group in allBinOpts) { + binOpts = allBinOpts[group]; + binDirection = binOpts.direction; + var attrs = BINATTRS[binDirection]; + for(j = 0; j < attrs.length; j++) { + var attrSpec = attrs[j]; + var attr = attrSpec.name; - if(typeof trace[autoBinAttr] !== 'boolean') { - trace[autoBinAttr] = trace._fullInput[autoBinAttr] = trace._input[autoBinAttr] = !( - (bins.start || bins.start === 0) && - (bins.end || bins.end === 0) - ); - } + // nbins(x|y) is moot if we have a size. This depends on + // nbins coming after size in binAttrs. + if(attr === 'nbins' && binOpts.sizeFound) continue; - if(!trace[autoBinAttr]) { - delete trace['nbins' + binDirection]; - delete trace._fullInput['nbins' + binDirection]; + var aStr = attrSpec.aStr; + for(i = 0; i < binOpts.traces.length; i++) { + traceOut = binOpts.traces[i]; + traceIn = traceOut._input; + if(nestedProperty(traceIn, aStr).get() !== undefined) { + binOpts[attr] = coerce(aStr); + binOpts[attr + 'Found'] = true; + break; + } + var autoVals = traceOut._autoBin; + if(autoVals && autoVals[attr]) { + // if this is the *first* autoval + nestedProperty(traceOut, aStr).set(autoVals[attr]); + } + } + // start and end we need to coerce anyway, after having collected the + // first of each into binOpts, in case a trace wants to restrict its + // data to a certain range + if(attr === 'start' || attr === 'end') { + for(; i < binOpts.traces.length; i++) { + traceOut = binOpts.traces[i]; + coerce(aStr, (traceOut._autoBin || {})[attr]); + } + } + + if(attr === 'nbins' && !binOpts.sizeFound && !binOpts.nbinsFound) { + traceOut = binOpts.traces[0]; + binOpts[attr] = coerce(aStr); + } + } } }; -},{"../../constants/numerical":151,"../../lib":169,"fast-isnumeric":18}],339:[function(_dereq_,module,exports){ +},{"../../lib":168,"./attributes":331}],339:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72509,7 +75368,6 @@ var Registry = _dereq_('../../registry'); var Lib = _dereq_('../../lib'); var Color = _dereq_('../../components/color'); -var handleBinDefaults = _dereq_('./bin_defaults'); var handleStyleDefaults = _dereq_('../bar/style_defaults'); var attributes = _dereq_('./attributes'); @@ -72533,7 +75391,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var sampleLetter = orientation === 'v' ? 'x' : 'y'; var aggLetter = orientation === 'v' ? 'y' : 'x'; - var len = (x && y) ? Math.min(x.length && y.length) : (traceOut[sampleLetter] || []).length; + var len = (x && y) ? + Math.min(Lib.minRowLength(x) && Lib.minRowLength(y)) : + Lib.minRowLength(traceOut[sampleLetter] || []); if(!len) { traceOut.visible = false; @@ -72547,22 +75407,29 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var hasAggregationData = traceOut[aggLetter]; if(hasAggregationData) coerce('histfunc'); + coerce('histnorm'); - handleBinDefaults(traceIn, traceOut, coerce, [sampleLetter]); + // Note: bin defaults are now handled in Histogram.crossTraceDefaults + // autobin(x|y) are only included here to appease Plotly.validate + coerce('autobin' + sampleLetter); + + coerce('hovertemplate'); handleStyleDefaults(traceIn, traceOut, coerce, defaultColor, layout); + Lib.coerceSelectionMarkerOpacity(traceOut, coerce); + + var lineColor = (traceOut.marker.line || {}).color; + // override defaultColor for error bars with defaultLine var errorBarsSupplyDefaults = Registry.getComponentMethod('errorbars', 'supplyDefaults'); - errorBarsSupplyDefaults(traceIn, traceOut, Color.defaultLine, {axis: 'y'}); - errorBarsSupplyDefaults(traceIn, traceOut, Color.defaultLine, {axis: 'x', inherit: 'y'}); - - Lib.coerceSelectionMarkerOpacity(traceOut, coerce); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'y'}); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'}); }; -},{"../../components/color":50,"../../lib":169,"../../registry":259,"../bar/style_defaults":281,"./attributes":332,"./bin_defaults":334}],340:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../../registry":257,"../bar/style_defaults":281,"./attributes":331}],340:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72608,7 +75475,7 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { },{}],341:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72636,12 +75503,14 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { pointData[posLetter + 'Label'] = hoverLabelText(pointData[posLetter + 'a'], di.ph0, di.ph1); } + if(trace.hovermplate) pointData.hovertemplate = trace.hovertemplate; + return pts; }; -},{"../../plots/cartesian/axes":214,"../bar/hover":273}],342:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":212,"../bar/hover":273}],342:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72670,6 +75539,7 @@ var Histogram = {}; Histogram.attributes = _dereq_('./attributes'); Histogram.layoutAttributes = _dereq_('../bar/layout_attributes'); Histogram.supplyDefaults = _dereq_('./defaults'); +Histogram.crossTraceDefaults = _dereq_('./cross_trace_defaults'); Histogram.supplyLayoutDefaults = _dereq_('../bar/layout_defaults'); Histogram.calc = _dereq_('./calc'); Histogram.crossTraceCalc = _dereq_('../bar/cross_trace_calc').crossTraceCalc; @@ -72692,9 +75562,9 @@ Histogram.meta = { module.exports = Histogram; -},{"../../plots/cartesian":225,"../bar/cross_trace_calc":271,"../bar/layout_attributes":275,"../bar/layout_defaults":276,"../bar/plot":277,"../bar/select":278,"../bar/style":280,"../scatter/marker_colorbar":384,"./attributes":332,"./calc":337,"./defaults":339,"./event_data":340,"./hover":341}],343:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../bar/cross_trace_calc":270,"../bar/layout_attributes":275,"../bar/layout_defaults":276,"../bar/plot":277,"../bar/select":278,"../bar/style":280,"../scatter/marker_colorbar":385,"./attributes":331,"./calc":336,"./cross_trace_defaults":338,"./defaults":339,"./event_data":340,"./hover":341}],343:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72707,8 +75577,8 @@ module.exports = Histogram; module.exports = { percent: function(size, total) { - var nMax = size.length, - norm = 100 / total; + var nMax = size.length; + var norm = 100 / total; for(var n = 0; n < nMax; n++) size[n] *= norm; }, probability: function(size, total) { @@ -72729,7 +75599,7 @@ module.exports = { },{}],344:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72739,6 +75609,7 @@ module.exports = { 'use strict'; var histogramAttrs = _dereq_('../histogram/attributes'); +var makeBinAttrs = _dereq_('../histogram/bin_attributes'); var heatmapAttrs = _dereq_('../heatmap/attributes'); var colorscaleAttrs = _dereq_('../../components/colorscale/attributes'); var colorbarAttrs = _dereq_('../../components/colorbar/attributes'); @@ -72766,12 +75637,12 @@ module.exports = extendFlat( histnorm: histogramAttrs.histnorm, histfunc: histogramAttrs.histfunc, - autobinx: histogramAttrs.autobinx, nbinsx: histogramAttrs.nbinsx, - xbins: histogramAttrs.xbins, - autobiny: histogramAttrs.autobiny, + xbins: makeBinAttrs('x'), nbinsy: histogramAttrs.nbinsy, - ybins: histogramAttrs.ybins, + ybins: makeBinAttrs('y'), + autobinx: histogramAttrs.autobinx, + autobiny: histogramAttrs.autobiny, xgap: heatmapAttrs.xgap, ygap: heatmapAttrs.ygap, @@ -72785,9 +75656,9 @@ module.exports = extendFlat( { colorbar: colorbarAttrs } ); -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../lib/extend":163,"../heatmap/attributes":316,"../histogram/attributes":332}],345:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../lib/extend":162,"../heatmap/attributes":316,"../histogram/attributes":331,"../histogram/bin_attributes":333}],345:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72803,7 +75674,6 @@ var Axes = _dereq_('../../plots/cartesian/axes'); var binFunctions = _dereq_('../histogram/bin_functions'); var normFunctions = _dereq_('../histogram/norm_functions'); var doAvg = _dereq_('../histogram/average'); -var cleanBins = _dereq_('../histogram/clean_bins'); var getBinSpanLabelRound = _dereq_('../histogram/bin_label_vals'); @@ -72826,8 +75696,8 @@ module.exports = function calc(gd, trace) { if(y.length > serieslen) y.splice(serieslen, y.length - serieslen); // calculate the bins - cleanAndAutobin(trace, 'x', x, xa, xr2c, xc2r, xcalendar); - cleanAndAutobin(trace, 'y', y, ya, yr2c, yc2r, ycalendar); + doAutoBin(trace, 'x', x, xa, xr2c, xc2r, xcalendar); + doAutoBin(trace, 'y', y, ya, yr2c, yc2r, ycalendar); // make the empty bin array & scale the map var z = []; @@ -72868,10 +75738,10 @@ module.exports = function calc(gd, trace) { } // decrease end a little in case of rounding errors - var binSpec = trace.xbins, - binStart = xr2c(binSpec.start), - binEnd = xr2c(binSpec.end) + - (binStart - Axes.tickIncrement(binStart, binSpec.size, false, xcalendar)) / 1e6; + var binSpec = trace.xbins; + var binStart = xr2c(binSpec.start); + var binEnd = xr2c(binSpec.end) + + (binStart - Axes.tickIncrement(binStart, binSpec.size, false, xcalendar)) / 1e6; for(i = binStart; i < binEnd; i = Axes.tickIncrement(i, binSpec.size, false, xcalendar)) { onecol.push(sizeinit); @@ -72970,31 +75840,49 @@ module.exports = function calc(gd, trace) { }; }; -function cleanAndAutobin(trace, axLetter, data, ax, r2c, c2r, calendar) { - var binSpecAttr = axLetter + 'bins'; - var autoBinAttr = 'autobin' + axLetter; - var binSpec = trace[binSpecAttr]; +function doAutoBin(trace, axLetter, data, ax, r2c, c2r, calendar) { + var binAttr = axLetter + 'bins'; + var binSpec = trace[binAttr]; + if(!binSpec) binSpec = trace[binAttr] = {}; + var inputBinSpec = trace._input[binAttr] || {}; + var autoBin = trace._autoBin = {}; - cleanBins(trace, ax, axLetter); + // clear out any previously added autobin info + if(!inputBinSpec.size) delete binSpec.size; + if(inputBinSpec.start === undefined) delete binSpec.start; + if(inputBinSpec.end === undefined) delete binSpec.end; - if(trace[autoBinAttr] || !binSpec || binSpec.start === null || binSpec.end === null) { - binSpec = Axes.autoBin(data, ax, trace['nbins' + axLetter], '2d', calendar); + var autoSize = !binSpec.size; + var autoStart = binSpec.start === undefined; + var autoEnd = binSpec.end === undefined; + + if(autoSize || autoStart || autoEnd) { + var newBinSpec = Axes.autoBin(data, ax, trace['nbins' + axLetter], '2d', calendar, binSpec.size); if(trace.type === 'histogram2dcontour') { - // the "true" last argument reverses the tick direction (which we can't + // the "true" 2nd argument reverses the tick direction (which we can't // just do with a minus sign because of month bins) - binSpec.start = c2r(Axes.tickIncrement( - r2c(binSpec.start), binSpec.size, true, calendar)); - binSpec.end = c2r(Axes.tickIncrement( - r2c(binSpec.end), binSpec.size, false, calendar)); + if(autoStart) { + newBinSpec.start = c2r(Axes.tickIncrement( + r2c(newBinSpec.start), newBinSpec.size, true, calendar)); + } + if(autoEnd) { + newBinSpec.end = c2r(Axes.tickIncrement( + r2c(newBinSpec.end), newBinSpec.size, false, calendar)); + } } + if(autoSize) binSpec.size = autoBin.size = newBinSpec.size; + if(autoStart) binSpec.start = autoBin.start = newBinSpec.start; + if(autoEnd) binSpec.end = autoBin.end = newBinSpec.end; + } - // copy bin info back to the source data. - trace._input[binSpecAttr] = trace[binSpecAttr] = binSpec; - // note that it's possible to get here with an explicit autobin: false - // if the bins were not specified. - // in that case this will remain in the trace, so that future updates - // which would change the autobinning will not do so. - trace._input[autoBinAttr] = trace[autoBinAttr]; + // Backward compatibility for one-time autobinning. + // autobin: true is handled in cleanData, but autobin: false + // needs to be here where we have determined the values. + var autoBinAttr = 'autobin' + axLetter; + if(trace._input[autoBinAttr] === false) { + trace._input[binAttr] = Lib.extendFlat({}, binSpec); + delete trace._input[autoBinAttr]; + delete trace[autoBinAttr]; } } @@ -73033,9 +75921,104 @@ function getRanges(edges, uniqueVals, gapLow, gapHigh, ax, calendar) { return out; } -},{"../../lib":169,"../../plots/cartesian/axes":214,"../histogram/average":333,"../histogram/bin_functions":335,"../histogram/bin_label_vals":336,"../histogram/clean_bins":338,"../histogram/norm_functions":343}],346:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"../histogram/average":332,"../histogram/bin_functions":334,"../histogram/bin_label_vals":335,"../histogram/norm_functions":343}],346:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 isNumeric = _dereq_('fast-isnumeric'); + +var BADNUM = _dereq_('../../constants/numerical').BADNUM; +var axisIds = _dereq_('../../plots/cartesian/axis_ids'); +var Lib = _dereq_('../../lib'); + +var attributes = _dereq_('./attributes'); + +var BINDIRECTIONS = ['x', 'y']; + +// Handle bin attrs and relink auto-determined values so fullData is complete +// does not have cross-trace coupling, but moved out here so we have axis types +// and relinked trace._autoBin +module.exports = function crossTraceDefaults(fullData, fullLayout) { + var i, j, traceOut, binDirection; + + function coerce(attr) { + return Lib.coerce(traceOut._input, traceOut, attributes, attr); + } + + for(i = 0; i < fullData.length; i++) { + traceOut = fullData[i]; + var type = traceOut.type; + if(type !== 'histogram2d' && type !== 'histogram2dcontour') continue; + + for(j = 0; j < BINDIRECTIONS.length; j++) { + binDirection = BINDIRECTIONS[j]; + var binAttr = binDirection + 'bins'; + var autoBins = (traceOut._autoBin || {})[binDirection] || {}; + coerce(binAttr + '.start', autoBins.start); + coerce(binAttr + '.end', autoBins.end); + coerce(binAttr + '.size', autoBins.size); + + cleanBins(traceOut, binDirection, fullLayout, autoBins); + + if(!(traceOut[binAttr] || {}).size) coerce('nbins' + binDirection); + } + } +}; + +function cleanBins(trace, binDirection, fullLayout, autoBins) { + var ax = fullLayout[axisIds.id2name(trace[binDirection + 'axis'])]; + var axType = ax.type; + var binAttr = binDirection + 'bins'; + var bins = trace[binAttr]; + var calendar = trace[binDirection + 'calendar']; + + if(!bins) bins = trace[binAttr] = {}; + + var cleanBound = (axType === 'date') ? + function(v, dflt) { return (v || v === 0) ? Lib.cleanDate(v, BADNUM, calendar) : dflt; } : + function(v, dflt) { return isNumeric(v) ? Number(v) : dflt; }; + + bins.start = cleanBound(bins.start, autoBins.start); + bins.end = cleanBound(bins.end, autoBins.end); + + // logic for bin size is very similar to dtick (cartesian/tick_value_defaults) + // but without the extra string options for log axes + // ie the only strings we accept are M for months + var sizeDflt = autoBins.size; + var binSize = bins.size; + + if(isNumeric(binSize)) { + bins.size = (binSize > 0) ? Number(binSize) : sizeDflt; + } + else if(typeof binSize !== 'string') { + bins.size = sizeDflt; + } + else { + // date special case: "M" gives bins every (integer) n months + var prefix = binSize.charAt(0); + var sizeNum = binSize.substr(1); + + sizeNum = isNumeric(sizeNum) ? Number(sizeNum) : 0; + if((sizeNum <= 0) || !( + axType === 'date' && prefix === 'M' && sizeNum === Math.round(sizeNum) + )) { + bins.size = sizeDflt; + } + } +} + +},{"../../constants/numerical":149,"../../lib":168,"../../plots/cartesian/axis_ids":215,"./attributes":344,"fast-isnumeric":18}],347:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73067,9 +76050,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout ); }; -},{"../../components/colorscale/defaults":60,"../../lib":169,"../heatmap/style_defaults":330,"./attributes":344,"./sample_defaults":349}],347:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../lib":168,"../heatmap/style_defaults":329,"./attributes":344,"./sample_defaults":350}],348:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73101,9 +76084,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return pts; }; -},{"../../plots/cartesian/axes":214,"../heatmap/hover":323}],348:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":212,"../heatmap/hover":323}],349:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73117,6 +76100,7 @@ var Histogram2D = {}; Histogram2D.attributes = _dereq_('./attributes'); Histogram2D.supplyDefaults = _dereq_('./defaults'); +Histogram2D.crossTraceDefaults = _dereq_('./cross_trace_defaults'); Histogram2D.calc = _dereq_('../heatmap/calc'); Histogram2D.plot = _dereq_('../heatmap/plot'); Histogram2D.layerName = 'heatmaplayer'; @@ -73136,35 +76120,35 @@ Histogram2D.meta = { module.exports = Histogram2D; -},{"../../plots/cartesian":225,"../heatmap/calc":317,"../heatmap/colorbar":319,"../heatmap/plot":328,"../heatmap/style":329,"../histogram/event_data":340,"./attributes":344,"./defaults":346,"./hover":347}],349:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../heatmap/calc":317,"../heatmap/colorbar":319,"../heatmap/plot":327,"../heatmap/style":328,"../histogram/event_data":340,"./attributes":344,"./cross_trace_defaults":346,"./defaults":347,"./hover":348}],350:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Registry = _dereq_('../../registry'); -var handleBinDefaults = _dereq_('../histogram/bin_defaults'); - +var Lib = _dereq_('../../lib'); module.exports = function handleSampleDefaults(traceIn, traceOut, coerce, layout) { var x = coerce('x'); var y = coerce('y'); + var xlen = Lib.minRowLength(x); + var ylen = Lib.minRowLength(y); // we could try to accept x0 and dx, etc... // but that's a pretty weird use case. // for now require both x and y explicitly specified. - if(!(x && x.length && y && y.length)) { + if(!xlen || !ylen) { traceOut.visible = false; return; } - traceOut._length = Math.min(x.length, y.length); + traceOut._length = Math.min(xlen, ylen); var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults'); handleCalendarDefaults(traceIn, traceOut, ['x', 'y'], layout); @@ -73173,14 +76157,17 @@ module.exports = function handleSampleDefaults(traceIn, traceOut, coerce, layout var hasAggregationData = coerce('z') || coerce('marker.color'); if(hasAggregationData) coerce('histfunc'); + coerce('histnorm'); - var binDirections = ['x', 'y']; - handleBinDefaults(traceIn, traceOut, coerce, binDirections); + // Note: bin defaults are now handled in Histogram2D.crossTraceDefaults + // autobin(x|y) are only included here to appease Plotly.validate + coerce('autobinx'); + coerce('autobiny'); }; -},{"../../registry":259,"../histogram/bin_defaults":334}],350:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],351:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73204,12 +76191,12 @@ module.exports = extendFlat({ histnorm: histogram2dAttrs.histnorm, histfunc: histogram2dAttrs.histfunc, - autobinx: histogram2dAttrs.autobinx, nbinsx: histogram2dAttrs.nbinsx, xbins: histogram2dAttrs.xbins, - autobiny: histogram2dAttrs.autobiny, nbinsy: histogram2dAttrs.nbinsy, ybins: histogram2dAttrs.ybins, + autobinx: histogram2dAttrs.autobinx, + autobiny: histogram2dAttrs.autobiny, autocontour: contourAttrs.autocontour, ncontours: contourAttrs.ncontours, @@ -73224,9 +76211,9 @@ module.exports = extendFlat({ { colorbar: colorbarAttrs } ); -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../lib/extend":163,"../contour/attributes":294,"../histogram2d/attributes":344}],351:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../lib/extend":162,"../contour/attributes":294,"../histogram2d/attributes":344}],352:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73260,9 +76247,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout handleStyleDefaults(traceIn, traceOut, coerce, layout); }; -},{"../../lib":169,"../contour/contours_defaults":301,"../contour/style_defaults":315,"../histogram2d/sample_defaults":349,"./attributes":350}],352:[function(_dereq_,module,exports){ +},{"../../lib":168,"../contour/contours_defaults":301,"../contour/style_defaults":315,"../histogram2d/sample_defaults":350,"./attributes":351}],353:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73276,6 +76263,7 @@ var Histogram2dContour = {}; Histogram2dContour.attributes = _dereq_('./attributes'); Histogram2dContour.supplyDefaults = _dereq_('./defaults'); +Histogram2dContour.crossTraceDefaults = _dereq_('../histogram2d/cross_trace_defaults'); Histogram2dContour.calc = _dereq_('../contour/calc'); Histogram2dContour.plot = _dereq_('../contour/plot').plot; Histogram2dContour.layerName = 'contourlayer'; @@ -73294,9 +76282,9 @@ Histogram2dContour.meta = { module.exports = Histogram2dContour; -},{"../../plots/cartesian":225,"../contour/calc":295,"../contour/colorbar":297,"../contour/hover":307,"../contour/plot":312,"../contour/style":314,"./attributes":350,"./defaults":351}],353:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../contour/calc":295,"../contour/colorbar":297,"../contour/hover":307,"../contour/plot":312,"../contour/style":314,"../histogram2d/cross_trace_defaults":346,"./attributes":351,"./defaults":352}],354:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73308,13 +76296,15 @@ module.exports = Histogram2dContour; var colorAttrs = _dereq_('../../components/color/attributes'); var fontAttrs = _dereq_('../../plots/font_attributes'); var plotAttrs = _dereq_('../../plots/attributes'); +var hovertemplateAttrs = _dereq_('../../components/fx/hovertemplate_attributes'); var domainAttrs = _dereq_('../../plots/domain').attributes; var extendFlat = _dereq_('../../lib/extend').extendFlat; var textFontAttrs = fontAttrs({ editType: 'calc', - colorEditType: 'style', + arrayOk: true, + colorEditType: 'plot', }); @@ -73414,6 +76404,9 @@ module.exports = { hoverinfo: extendFlat({}, plotAttrs.hoverinfo, { flags: ['label', 'text', 'value', 'percent', 'name'] }), + hovertemplate: hovertemplateAttrs({}, { + keys: ['label', 'color', 'value', 'percent', 'text'] + }), textposition: { valType: 'enumerated', @@ -73423,7 +76416,6 @@ module.exports = { editType: 'calc', }, - // TODO make those arrayOk? textfont: extendFlat({}, textFontAttrs, { }), @@ -73434,6 +76426,32 @@ module.exports = { }), + title: { + text: { + valType: 'string', + dflt: '', + + editType: 'calc', + + }, + font: extendFlat({}, textFontAttrs, { + + }), + position: { + valType: 'enumerated', + values: [ + 'top left', 'top center', 'top right', + 'middle center', + 'bottom left', 'bottom center', 'bottom right' + ], + + editType: 'calc', + + }, + + editType: 'calc' + }, + // position and shape domain: domainAttrs({name: 'pie', trace: true, editType: 'calc'}), @@ -73489,12 +76507,36 @@ module.exports = { arrayOk: true, editType: 'calc', + }, + + _deprecated: { + title: { + valType: 'string', + dflt: '', + + editType: 'calc', + + }, + titlefont: extendFlat({}, textFontAttrs, { + + }), + titleposition: { + valType: 'enumerated', + values: [ + 'top left', 'top center', 'top right', + 'middle center', + 'bottom left', 'bottom center', 'bottom right' + ], + + editType: 'calc', + + } } }; -},{"../../components/color/attributes":49,"../../lib/extend":163,"../../plots/attributes":211,"../../plots/domain":239,"../../plots/font_attributes":240}],354:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../components/fx/hovertemplate_attributes":89,"../../lib/extend":162,"../../plots/attributes":209,"../../plots/domain":238,"../../plots/font_attributes":239}],355:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73524,9 +76566,9 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) } }; -},{"../../plots/get_data":242,"../../registry":259}],355:[function(_dereq_,module,exports){ +},{"../../plots/get_data":241,"../../registry":257}],356:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73715,9 +76757,9 @@ function generateExtendedColors(colorList) { return pieColors; } -},{"../../components/color":50,"../../lib":169,"./helpers":358,"fast-isnumeric":18,"tinycolor2":33}],356:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"./helpers":359,"fast-isnumeric":18,"tinycolor2":34}],357:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73769,23 +76811,38 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var textData = coerce('text'); var textInfo = coerce('textinfo', Array.isArray(textData) ? 'text+percent' : 'percent'); coerce('hovertext'); + coerce('hovertemplate'); if(textInfo && textInfo !== 'none') { - var textPosition = coerce('textposition'), - hasBoth = Array.isArray(textPosition) || textPosition === 'auto', - hasInside = hasBoth || textPosition === 'inside', - hasOutside = hasBoth || textPosition === 'outside'; + var textPosition = coerce('textposition'); + var hasBoth = Array.isArray(textPosition) || textPosition === 'auto'; + var hasInside = hasBoth || textPosition === 'inside'; + var hasOutside = hasBoth || textPosition === 'outside'; if(hasInside || hasOutside) { var dfltFont = coerceFont(coerce, 'textfont', layout.font); - if(hasInside) coerceFont(coerce, 'insidetextfont', dfltFont); + if(hasInside) { + var insideTextFontDefault = Lib.extendFlat({}, dfltFont); + var isTraceTextfontColorSet = traceIn.textfont && traceIn.textfont.color; + var isColorInheritedFromLayoutFont = !isTraceTextfontColorSet; + if(isColorInheritedFromLayoutFont) { + delete insideTextFontDefault.color; + } + coerceFont(coerce, 'insidetextfont', insideTextFontDefault); + } if(hasOutside) coerceFont(coerce, 'outsidetextfont', dfltFont); } } handleDomainDefaults(traceOut, layout, coerce); - coerce('hole'); + var hole = coerce('hole'); + var title = coerce('title.text'); + if(title) { + var titlePosition = coerce('title.position', hole ? 'middle center' : 'top center'); + if(!hole && titlePosition === 'middle center') traceOut.title.position = 'top center'; + coerceFont(coerce, 'title.font', layout.font); + } coerce('sort'); coerce('direction'); @@ -73794,9 +76851,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('pull'); }; -},{"../../lib":169,"../../plots/domain":239,"./attributes":353}],357:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/domain":238,"./attributes":354}],358:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73821,6 +76878,8 @@ module.exports = function eventData(pt, trace) { label: pt.label, color: pt.color, value: pt.v, + percent: pt.percent, + text: pt.text, // pt.v (and pt.i below) for backward compatibility v: pt.v @@ -73837,9 +76896,9 @@ module.exports = function eventData(pt, trace) { return out; }; -},{"../../components/fx/helpers":89}],358:[function(_dereq_,module,exports){ +},{"../../components/fx/helpers":86}],359:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73879,9 +76938,9 @@ exports.castOption = function castOption(item, indices) { else if(item) return item; }; -},{"../../lib":169}],359:[function(_dereq_,module,exports){ +},{"../../lib":168}],360:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73915,9 +76974,9 @@ Pie.meta = { module.exports = Pie; -},{"./attributes":353,"./base_plot":354,"./calc":355,"./defaults":356,"./layout_attributes":360,"./layout_defaults":361,"./plot":362,"./style":363,"./style_one":364}],360:[function(_dereq_,module,exports){ +},{"./attributes":354,"./base_plot":355,"./calc":356,"./defaults":357,"./layout_attributes":361,"./layout_defaults":362,"./plot":363,"./style":364,"./style_one":365}],361:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73951,9 +77010,9 @@ module.exports = { } }; -},{}],361:[function(_dereq_,module,exports){ +},{}],362:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73975,9 +77034,9 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) { coerce('extendpiecolors'); }; -},{"../../lib":169,"./layout_attributes":360}],362:[function(_dereq_,module,exports){ +},{"../../lib":168,"./layout_attributes":361}],363:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74000,6 +77059,7 @@ var eventData = _dereq_('./event_data'); module.exports = function plot(gd, cdpie) { var fullLayout = gd._fullLayout; + prerenderTitles(cdpie, gd); scalePies(cdpie, fullLayout._size); var pieGroups = Lib.makeTraceGroups(fullLayout._pielayer, cdpie, 'trace').each(function(cd) { @@ -74076,20 +77136,25 @@ module.exports = function plot(gd, cdpie) { // in case we dragged over the pie from another subplot, // or if hover is turned off - if(hoverinfo !== 'none' && hoverinfo !== 'skip' && hoverinfo) { + if(trace2.hovertemplate || (hoverinfo !== 'none' && hoverinfo !== 'skip' && hoverinfo)) { var rInscribed = getInscribedRadiusFraction(pt, cd0); var hoverCenterX = cx + pt.pxmid[0] * (1 - rInscribed); var hoverCenterY = cy + pt.pxmid[1] * (1 - rInscribed); var separators = fullLayout.separators; var thisText = []; - if(hoverinfo.indexOf('label') !== -1) thisText.push(pt.label); - if(hoverinfo.indexOf('text') !== -1) { - var texti = helpers.castOption(trace2.hovertext || trace2.text, pt.pts); + if(hoverinfo && hoverinfo.indexOf('label') !== -1) thisText.push(pt.label); + pt.text = helpers.castOption(trace2.hovertext || trace2.text, pt.pts); + if(hoverinfo && hoverinfo.indexOf('text') !== -1) { + var texti = pt.text; if(texti) thisText.push(texti); } - if(hoverinfo.indexOf('value') !== -1) thisText.push(helpers.formatPieValue(pt.v, separators)); - if(hoverinfo.indexOf('percent') !== -1) thisText.push(helpers.formatPiePercent(pt.v / cd0.vTotal, separators)); + pt.value = pt.v; + pt.valueLabel = helpers.formatPieValue(pt.v, separators); + if(hoverinfo && hoverinfo.indexOf('value') !== -1) thisText.push(pt.valueLabel); + pt.percent = pt.v / cd0.vTotal; + pt.percentLabel = helpers.formatPiePercent(pt.percent, separators); + if(hoverinfo && hoverinfo.indexOf('percent') !== -1) thisText.push(pt.percentLabel); var hoverLabel = trace.hoverlabel; var hoverFont = hoverLabel.font; @@ -74099,13 +77164,18 @@ module.exports = function plot(gd, cdpie) { x1: hoverCenterX + rInscribed * cd0.r, y: hoverCenterY, text: thisText.join('
    '), - name: hoverinfo.indexOf('name') !== -1 ? trace2.name : undefined, + name: (trace2.hovertemplate || hoverinfo.indexOf('name') !== -1) ? trace2.name : undefined, idealAlign: pt.pxmid[0] < 0 ? 'left' : 'right', color: helpers.castOption(hoverLabel.bgcolor, pt.pts) || pt.color, borderColor: helpers.castOption(hoverLabel.bordercolor, pt.pts), fontFamily: helpers.castOption(hoverFont.family, pt.pts), fontSize: helpers.castOption(hoverFont.size, pt.pts), - fontColor: helpers.castOption(hoverFont.color, pt.pts) + fontColor: helpers.castOption(hoverFont.color, pt.pts), + + trace: trace2, + hovertemplate: helpers.castOption(trace2.hovertemplate, pt.pts), + hovertemplateLabels: pt, + eventData: [eventData(pt, trace2)] }, { container: fullLayout2._hoverlayer.node(), outerContainer: fullLayout2._paper.node(), @@ -74241,7 +77311,8 @@ module.exports = function plot(gd, cdpie) { 'text-anchor': 'middle' }) .call(Drawing.font, textPosition === 'outside' ? - trace.outsidetextfont : trace.insidetextfont) + determineOutsideTextFont(trace, pt, gd._fullLayout.font) : + determineInsideTextFont(trace, pt, gd._fullLayout.font)) .call(svgTextUtils.convertToTspans, gd); // position the text relative to the slice @@ -74286,6 +77357,47 @@ module.exports = function plot(gd, cdpie) { }); }); + // add the title + var titleTextGroup = d3.select(this).selectAll('g.titletext') + .data(trace.title.text ? [0] : []); + + titleTextGroup.enter().append('g') + .classed('titletext', true); + titleTextGroup.exit().remove(); + + titleTextGroup.each(function() { + var titleText = Lib.ensureSingle(d3.select(this), 'text', '', function(s) { + // prohibit tex interpretation as above + s.attr('data-notex', 1); + }); + + var txt = fullLayout.meta ? + Lib.templateString(trace.title.text, {meta: fullLayout.meta}) : + trace.title.text; + + titleText.text(txt) + .attr({ + 'class': 'titletext', + transform: '', + 'text-anchor': 'middle', + }) + .call(Drawing.font, trace.title.font) + .call(svgTextUtils.convertToTspans, gd); + + var transform; + + if(trace.title.position === 'middle center') { + transform = positionTitleInside(cd0); + } else { + transform = positionTitleOutside(cd0, fullLayout._size); + } + + titleText.attr('transform', + 'translate(' + transform.x + ',' + transform.y + ')' + + (transform.scale < 1 ? ('scale(' + transform.scale + ')') : '') + + 'translate(' + transform.tx + ',' + transform.ty + ')'); + }); + // now make sure no labels overlap (at least within one pie) if(hasOutsideText) scootLabels(quadrants, trace); slices.each(function(pt) { @@ -74349,25 +77461,99 @@ module.exports = function plot(gd, cdpie) { }, 0); }; +function determineOutsideTextFont(trace, pt, layoutFont) { + var color = helpers.castOption(trace.outsidetextfont.color, pt.pts) || + helpers.castOption(trace.textfont.color, pt.pts) || + layoutFont.color; + + var family = helpers.castOption(trace.outsidetextfont.family, pt.pts) || + helpers.castOption(trace.textfont.family, pt.pts) || + layoutFont.family; + + var size = helpers.castOption(trace.outsidetextfont.size, pt.pts) || + helpers.castOption(trace.textfont.size, pt.pts) || + layoutFont.size; + + return { + color: color, + family: family, + size: size + }; +} + +function determineInsideTextFont(trace, pt, layoutFont) { + var customColor = helpers.castOption(trace.insidetextfont.color, pt.pts); + if(!customColor && trace._input.textfont) { + + // Why not simply using trace.textfont? Because if not set, it + // defaults to layout.font which has a default color. But if + // textfont.color and insidetextfont.color don't supply a value, + // a contrasting color shall be used. + customColor = helpers.castOption(trace._input.textfont.color, pt.pts); + } + + var family = helpers.castOption(trace.insidetextfont.family, pt.pts) || + helpers.castOption(trace.textfont.family, pt.pts) || + layoutFont.family; + + var size = helpers.castOption(trace.insidetextfont.size, pt.pts) || + helpers.castOption(trace.textfont.size, pt.pts) || + layoutFont.size; + + return { + color: customColor || Color.contrast(pt.color), + family: family, + size: size + }; +} + +function prerenderTitles(cdpie, gd) { + var fullLayout = gd._fullLayout; + + var cd0, trace; + // Determine the width and height of the title for each pie. + for(var i = 0; i < cdpie.length; i++) { + cd0 = cdpie[i][0]; + trace = cd0.trace; + + if(trace.title.text) { + var txt = fullLayout.meta ? + Lib.templateString(trace.title.text, {meta: fullLayout.meta}) : + trace.title.text; + + var dummyTitle = Drawing.tester.append('text') + .attr('data-notex', 1) + .text(txt) + .call(Drawing.font, trace.title.font) + .call(svgTextUtils.convertToTspans, gd); + var bBox = Drawing.bBox(dummyTitle.node(), true); + cd0.titleBox = { + width: bBox.width, + height: bBox.height, + }; + dummyTitle.remove(); + } + } +} 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 = Math.PI * Math.min(pt.v / cd0.vTotal, 0.5); var ring = 1 - cd0.trace.hole; - var rInscribed = getInscribedRadiusFraction(pt, cd0), + var rInscribed = getInscribedRadiusFraction(pt, cd0); - // 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 - transform = { - scale: rInscribed * cd0.r * 2 / textDiameter, + // 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 * cd0.r * 2 / textDiameter, - // and the center position and rotation in this case - rCenter: 1 - rInscribed, - rotate: 0 - }; + // and the center position and rotation in this case + rCenter: 1 - rInscribed, + rotate: 0 + }; if(transform.scale >= 1) return transform; @@ -74432,6 +77618,93 @@ function transformOutsideText(textBB, pt) { }; } +function positionTitleInside(cd0) { + var textDiameter = + Math.sqrt(cd0.titleBox.width * cd0.titleBox.width + cd0.titleBox.height * cd0.titleBox.height); + return { + x: cd0.cx, + y: cd0.cy, + scale: cd0.trace.hole * cd0.r * 2 / textDiameter, + tx: 0, + ty: - cd0.titleBox.height / 2 + cd0.trace.title.font.size + }; +} + +function positionTitleOutside(cd0, plotSize) { + var scaleX = 1; + var scaleY = 1; + var maxWidth, maxPull; + + var trace = cd0.trace; + // position of the baseline point of the text box in the plot, before scaling. + // we anchored the text in the middle, so the baseline is on the bottom middle + // of the first line of text. + var topMiddle = { + x: cd0.cx, + y: cd0.cy + }; + // relative translation of the text box after scaling + var translate = { + tx: 0, + ty: 0 + }; + + // we reason below as if the baseline is the top middle point of the text box. + // so we must add the font size to approximate the y-coord. of the top. + // note that this correction must happen after scaling. + translate.ty += trace.title.font.size; + maxPull = getMaxPull(trace); + + if(trace.title.position.indexOf('top') !== -1) { + topMiddle.y -= (1 + maxPull) * cd0.r; + translate.ty -= cd0.titleBox.height; + } + else if(trace.title.position.indexOf('bottom') !== -1) { + topMiddle.y += (1 + maxPull) * cd0.r; + } + + if(trace.title.position.indexOf('left') !== -1) { + // we start the text at the left edge of the pie + maxWidth = plotSize.w * (trace.domain.x[1] - trace.domain.x[0]) / 2 + cd0.r; + topMiddle.x -= (1 + maxPull) * cd0.r; + translate.tx += cd0.titleBox.width / 2; + } else if(trace.title.position.indexOf('center') !== -1) { + maxWidth = plotSize.w * (trace.domain.x[1] - trace.domain.x[0]); + } else if(trace.title.position.indexOf('right') !== -1) { + maxWidth = plotSize.w * (trace.domain.x[1] - trace.domain.x[0]) / 2 + cd0.r; + topMiddle.x += (1 + maxPull) * cd0.r; + translate.tx -= cd0.titleBox.width / 2; + } + scaleX = maxWidth / cd0.titleBox.width; + scaleY = getTitleSpace(cd0, plotSize) / cd0.titleBox.height; + return { + x: topMiddle.x, + y: topMiddle.y, + scale: Math.min(scaleX, scaleY), + tx: translate.tx, + ty: translate.ty + }; +} + +function getTitleSpace(cd0, plotSize) { + var trace = cd0.trace; + var pieBoxHeight = plotSize.h * (trace.domain.y[1] - trace.domain.y[0]); + // use at most half of the plot for the title + return Math.min(cd0.titleBox.height, pieBoxHeight / 2); +} + +function getMaxPull(trace) { + var maxPull = trace.pull; + var j; + if(Array.isArray(maxPull)) { + maxPull = 0; + for(j = 0; j < trace.pull.length; j++) { + if(trace.pull[j] > maxPull) maxPull = trace.pull[j]; + } + } + return maxPull; +} + function scootLabels(quadrants, trace) { var xHalf, yHalf, equatorFirst, farthestX, farthestY, xDiffSign, yDiffSign, thisQuad, oppositeQuad, @@ -74548,21 +77821,23 @@ function scalePies(cdpie, plotSize) { for(i = 0; i < cdpie.length; i++) { cd0 = cdpie[i][0]; trace = cd0.trace; + pieBoxWidth = plotSize.w * (trace.domain.x[1] - trace.domain.x[0]); pieBoxHeight = plotSize.h * (trace.domain.y[1] - trace.domain.y[0]); - - maxPull = trace.pull; - if(Array.isArray(maxPull)) { - maxPull = 0; - for(j = 0; j < trace.pull.length; j++) { - if(trace.pull[j] > maxPull) maxPull = trace.pull[j]; - } + // leave some space for the title, if it will be displayed outside + if(trace.title.text && trace.title.position !== 'middle center') { + pieBoxHeight -= getTitleSpace(cd0, plotSize); } + maxPull = getMaxPull(trace); + cd0.r = Math.min(pieBoxWidth, pieBoxHeight) / (2 + 2 * maxPull); cd0.cx = plotSize.l + plotSize.w * (trace.domain.x[1] + trace.domain.x[0]) / 2; - cd0.cy = plotSize.t + plotSize.h * (2 - trace.domain.y[1] - trace.domain.y[0]) / 2; + cd0.cy = plotSize.t + plotSize.h * (1 - trace.domain.y[0]) - pieBoxHeight / 2; + if(trace.title.text && trace.title.position.indexOf('bottom') !== -1) { + cd0.cy -= getTitleSpace(cd0, plotSize); + } if(trace.scalegroup && scaleGroups.indexOf(trace.scalegroup) === -1) { scaleGroups.push(trace.scalegroup); @@ -74639,9 +77914,9 @@ function setCoords(cd) { } } -},{"../../components/color":50,"../../components/drawing":75,"../../components/fx":92,"../../lib":169,"../../lib/svg_text_utils":191,"./event_data":357,"./helpers":358,"d3":16}],363:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../components/fx":90,"../../lib":168,"../../lib/svg_text_utils":189,"./event_data":358,"./helpers":359,"d3":16}],364:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74668,9 +77943,9 @@ module.exports = function style(gd) { }); }; -},{"./style_one":364,"d3":16}],364:[function(_dereq_,module,exports){ +},{"./style_one":365,"d3":16}],365:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74692,9 +77967,9 @@ module.exports = function styleOne(s, pt, trace) { .call(Color.stroke, lineColor); }; -},{"../../components/color":50,"./helpers":358}],365:[function(_dereq_,module,exports){ +},{"../../components/color":51,"./helpers":359}],366:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74744,9 +78019,9 @@ module.exports = function arraysToCalcdata(cd, trace) { } }; -},{"../../lib":169}],366:[function(_dereq_,module,exports){ +},{"../../lib":168}],367:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74755,6 +78030,7 @@ module.exports = function arraysToCalcdata(cd, trace) { 'use strict'; +var hovertemplateAttrs = _dereq_('../../components/fx/hovertemplate_attributes'); var colorAttributes = _dereq_('../../components/colorscale/attributes'); var colorbarAttrs = _dereq_('../../components/colorbar/attributes'); var fontAttrs = _dereq_('../../plots/font_attributes'); @@ -74768,6 +78044,7 @@ module.exports = { x: { valType: 'data_array', editType: 'calc+clearAxisTypes', + anim: true, }, x0: { @@ -74775,6 +78052,7 @@ module.exports = { dflt: 0, editType: 'calc+clearAxisTypes', + anim: true, }, dx: { @@ -74782,11 +78060,13 @@ module.exports = { dflt: 1, editType: 'calc', + anim: true, }, y: { valType: 'data_array', editType: 'calc+clearAxisTypes', + anim: true, }, y0: { @@ -74794,6 +78074,7 @@ module.exports = { dflt: 0, editType: 'calc+clearAxisTypes', + anim: true, }, dy: { @@ -74801,6 +78082,7 @@ module.exports = { dflt: 1, editType: 'calc', + anim: true, }, @@ -74866,11 +78148,15 @@ module.exports = { editType: 'style', }, + hovertemplate: hovertemplateAttrs({}, { + keys: constants.eventDataKeys + }), line: { color: { valType: 'color', editType: 'style', + anim: true, }, width: { @@ -74879,6 +78165,7 @@ module.exports = { dflt: 2, editType: 'style', + anim: true, }, shape: { @@ -74935,6 +78222,7 @@ module.exports = { valType: 'color', editType: 'style', + anim: true, }, marker: extendFlat({ @@ -74954,6 +78242,7 @@ module.exports = { arrayOk: true, editType: 'style', + anim: true, }, size: { @@ -74963,6 +78252,7 @@ module.exports = { arrayOk: true, editType: 'calc', + anim: true, }, maxdisplayed: { @@ -75006,11 +78296,12 @@ module.exports = { arrayOk: true, editType: 'style', + anim: true, }, editType: 'calc' }, - colorAttributes('marker.line') + colorAttributes('marker.line', {anim: true}) ), gradient: { type: { @@ -75033,7 +78324,7 @@ module.exports = { }, editType: 'calc' }, - colorAttributes('marker') + colorAttributes('marker', {anim: true}) ), selected: { marker: { @@ -75140,9 +78431,9 @@ module.exports = { } }; -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../components/drawing":75,"../../components/drawing/attributes":74,"../../lib/extend":163,"../../plots/font_attributes":240,"./constants":371}],367:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../components/drawing":72,"../../components/drawing/attributes":71,"../../components/fx/hovertemplate_attributes":89,"../../lib/extend":162,"../../plots/font_attributes":239,"./constants":371}],368:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75230,7 +78521,7 @@ function calc(gd, trace) { } arraysToCalcdata(cd, trace); - calcColorscale(trace); + calcColorscale(gd, trace); calcSelection(cd, trace); if(stackGroupOpts) { @@ -75430,9 +78721,9 @@ module.exports = { getStackOpts: getStackOpts }; -},{"../../constants/numerical":151,"../../lib":169,"../../plots/cartesian/axes":214,"./arrays_to_calcdata":365,"./calc_selection":368,"./colorscale_calc":370,"./subtypes":390,"fast-isnumeric":18}],368:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"../../plots/cartesian/axes":212,"./arrays_to_calcdata":366,"./calc_selection":369,"./colorscale_calc":370,"./subtypes":391,"fast-isnumeric":18}],369:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75449,81 +78740,52 @@ module.exports = function calcSelection(cd, trace) { } }; -},{"../../lib":169}],369:[function(_dereq_,module,exports){ +},{"../../lib":168}],370:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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'; - -// remove opacity for any trace that has a fill or is filled to -module.exports = function cleanData(fullData) { - for(var i = 0; i < fullData.length; i++) { - var tracei = fullData[i]; - if(tracei.type !== 'scatter') continue; - - var filli = tracei.fill; - if(filli === 'none' || filli === 'toself') continue; - - tracei.opacity = undefined; - - if(filli === 'tonexty' || filli === 'tonextx') { - for(var j = i - 1; j >= 0; j--) { - var tracej = fullData[j]; - - if((tracej.type === 'scatter') && - (tracej.xaxis === tracei.xaxis) && - (tracej.yaxis === tracei.yaxis)) { - tracej.opacity = undefined; - break; - } - } - } - } -}; - -},{}],370:[function(_dereq_,module,exports){ -/** -* Copyright 2012-2018, 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 hasColorscale = _dereq_('../../components/colorscale/has_colorscale'); +var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale; var calcColorscale = _dereq_('../../components/colorscale/calc'); var subTypes = _dereq_('./subtypes'); - -module.exports = function calcMarkerColorscale(trace) { +module.exports = function calcMarkerColorscale(gd, trace) { if(subTypes.hasLines(trace) && hasColorscale(trace, 'line')) { - calcColorscale(trace, trace.line.color, 'line', 'c'); + calcColorscale(gd, trace, { + vals: trace.line.color, + containerStr: 'line', + cLetter: 'c' + }); } if(subTypes.hasMarkers(trace)) { if(hasColorscale(trace, 'marker')) { - calcColorscale(trace, trace.marker.color, 'marker', 'c'); + calcColorscale(gd, trace, { + vals: trace.marker.color, + containerStr: 'marker', + cLetter: 'c' + }); } if(hasColorscale(trace, 'marker.line')) { - calcColorscale(trace, trace.marker.line.color, 'marker.line', 'c'); + calcColorscale(gd, trace, { + vals: trace.marker.line.color, + containerStr: 'marker.line', + cLetter: 'c' + }); } } }; -},{"../../components/colorscale/calc":58,"../../components/colorscale/has_colorscale":64,"./subtypes":390}],371:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"./subtypes":391}],371:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75545,12 +78807,14 @@ module.exports = { // number of viewport sizes away from the visible region // at which we clip all lines to the perimeter - maxScreensAway: 20 + maxScreensAway: 20, + + eventDataKeys: [] }; },{}],372:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75731,9 +78995,48 @@ function getInterp(calcTrace, index, position, posAttr) { return pt0.s + (pt1.s - pt0.s) * (position - pt0[posAttr]) / (pt1[posAttr] - pt0[posAttr]); } -},{"./calc":367}],373:[function(_dereq_,module,exports){ +},{"./calc":368}],373:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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'; + + +// remove opacity for any trace that has a fill or is filled to +module.exports = function crossTraceDefaults(fullData) { + for(var i = 0; i < fullData.length; i++) { + var tracei = fullData[i]; + if(tracei.type !== 'scatter') continue; + + var filli = tracei.fill; + if(filli === 'none' || filli === 'toself') continue; + + tracei.opacity = undefined; + + if(filli === 'tonexty' || filli === 'tonextx') { + for(var j = i - 1; j >= 0; j--) { + var tracej = fullData[j]; + + if((tracej.type === 'scatter') && + (tracej.xaxis === tracei.xaxis) && + (tracej.yaxis === tracei.yaxis)) { + tracej.opacity = undefined; + break; + } + } + } + } +}; + +},{}],374:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75805,21 +79108,24 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(!subTypes.hasLines(traceOut)) handleLineShapeDefaults(traceIn, traceOut, coerce); } + var lineColor = (traceOut.line || {}).color; + var markerColor = (traceOut.marker || {}).color; + if(traceOut.fill === 'tonext' || traceOut.fill === 'toself') { dfltHoverOn.push('fills'); } coerce('hoveron', dfltHoverOn.join('+') || 'points'); - + if(traceOut.hoveron !== 'fills') coerce('hovertemplate'); var errorBarsSupplyDefaults = Registry.getComponentMethod('errorbars', 'supplyDefaults'); - errorBarsSupplyDefaults(traceIn, traceOut, defaultColor, {axis: 'y'}); - errorBarsSupplyDefaults(traceIn, traceOut, defaultColor, {axis: 'x', inherit: 'y'}); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || markerColor || defaultColor, {axis: 'y'}); + errorBarsSupplyDefaults(traceIn, traceOut, lineColor || markerColor || defaultColor, {axis: 'x', inherit: 'y'}); Lib.coerceSelectionMarkerOpacity(traceOut, coerce); }; -},{"../../lib":169,"../../registry":259,"./attributes":366,"./constants":371,"./fillcolor_defaults":375,"./line_defaults":379,"./line_shape_defaults":381,"./marker_defaults":385,"./stack_defaults":388,"./subtypes":390,"./text_defaults":391,"./xy_defaults":392}],374:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257,"./attributes":367,"./constants":371,"./fillcolor_defaults":376,"./line_defaults":380,"./line_shape_defaults":382,"./marker_defaults":386,"./stack_defaults":389,"./subtypes":391,"./text_defaults":392,"./xy_defaults":393}],375:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75860,9 +79166,9 @@ function isValid(v) { return v || v === 0; } -},{"../../lib":169}],375:[function(_dereq_,module,exports){ +},{"../../lib":168}],376:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75880,8 +79186,8 @@ module.exports = function fillColorDefaults(traceIn, traceOut, defaultColor, coe if(traceOut.marker) { // don't try to inherit a color array - var markerColor = traceOut.marker.color, - markerLineColor = (traceOut.marker.line || {}).color; + var markerColor = traceOut.marker.color; + var markerLineColor = (traceOut.marker.line || {}).color; if(markerColor && !isArrayOrTypedArray(markerColor)) { inheritColorFromMarker = markerColor; @@ -75898,9 +79204,9 @@ module.exports = function fillColorDefaults(traceIn, traceOut, defaultColor, coe )); }; -},{"../../components/color":50,"../../lib":169}],376:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168}],377:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75928,8 +79234,8 @@ module.exports = function getTraceColor(trace, di) { return trace.fill ? trace.fillcolor : ''; } else { - var mc = di.mcc || (trace.marker || {}).color, - mlc = di.mlcc || ((trace.marker || {}).line || {}).color; + var mc = di.mcc || (trace.marker || {}).color; + var mlc = di.mlcc || ((trace.marker || {}).line || {}).color; tc = (mc && Color.opacity(mc)) ? mc : (mlc && Color.opacity(mlc) && @@ -75951,9 +79257,9 @@ module.exports = function getTraceColor(trace, di) { } }; -},{"../../components/color":50,"./subtypes":390}],377:[function(_dereq_,module,exports){ +},{"../../components/color":51,"./subtypes":391}],378:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76047,7 +79353,8 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { y1: yc + rad, yLabelVal: yLabelVal, - spikeDistance: dxy(di) + spikeDistance: dxy(di), + hovertemplate: trace.hovertemplate }); fillHoverText(di, trace, pointData); @@ -76131,7 +79438,8 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { x1: xmax, y0: yAvg, y1: yAvg, - color: color + color: color, + hovertemplate: '%{name}' }); delete pointData.index; @@ -76146,9 +79454,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { } }; -},{"../../components/color":50,"../../components/fx":92,"../../lib":169,"../../registry":259,"./fill_hover_text":374,"./get_trace_color":376}],378:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":90,"../../lib":168,"../../registry":257,"./fill_hover_text":375,"./get_trace_color":377}],379:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76168,7 +79476,7 @@ Scatter.isBubble = subtypes.isBubble; Scatter.attributes = _dereq_('./attributes'); Scatter.supplyDefaults = _dereq_('./defaults'); -Scatter.cleanData = _dereq_('./clean_data'); +Scatter.crossTraceDefaults = _dereq_('./cross_trace_defaults'); Scatter.calc = _dereq_('./calc').calc; Scatter.crossTraceCalc = _dereq_('./cross_trace_calc'); Scatter.arraysToCalcdata = _dereq_('./arrays_to_calcdata'); @@ -76193,9 +79501,9 @@ Scatter.meta = { module.exports = Scatter; -},{"../../plots/cartesian":225,"./arrays_to_calcdata":365,"./attributes":366,"./calc":367,"./clean_data":369,"./cross_trace_calc":372,"./defaults":373,"./hover":377,"./marker_colorbar":384,"./plot":386,"./select":387,"./style":389,"./subtypes":390}],379:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./arrays_to_calcdata":366,"./attributes":367,"./calc":368,"./cross_trace_calc":372,"./cross_trace_defaults":373,"./defaults":374,"./hover":378,"./marker_colorbar":385,"./plot":387,"./select":388,"./style":390,"./subtypes":391}],380:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76205,7 +79513,7 @@ module.exports = Scatter; 'use strict'; var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray; -var hasColorscale = _dereq_('../../components/colorscale/has_colorscale'); +var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale; var colorscaleDefaults = _dereq_('../../components/colorscale/defaults'); module.exports = function lineDefaults(traceIn, traceOut, defaultColor, layout, coerce, opts) { @@ -76214,7 +79522,7 @@ module.exports = function lineDefaults(traceIn, traceOut, defaultColor, layout, coerce('line.color', defaultColor); if(hasColorscale(traceIn, 'line')) { - colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: 'line.', cLetter: 'c', noScale: true}); + colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: 'line.', cLetter: 'c'}); } else { var lineColorDflt = (isArrayOrTypedArray(markerColor) ? false : markerColor) || defaultColor; coerce('line.color', lineColorDflt); @@ -76224,9 +79532,9 @@ module.exports = function lineDefaults(traceIn, traceOut, defaultColor, layout, if(!(opts || {}).noDash) coerce('line.dash'); }; -},{"../../components/colorscale/defaults":60,"../../components/colorscale/has_colorscale":64,"../../lib":169}],380:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"../../lib":168}],381:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76689,9 +79997,9 @@ module.exports = function linePoints(d, opts) { return segments; }; -},{"../../constants/numerical":151,"../../lib":169,"./constants":371}],381:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"./constants":371}],382:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76708,9 +80016,9 @@ module.exports = function handleLineShapeDefaults(traceIn, traceOut, coerce) { if(shape === 'spline') coerce('line.smoothing'); }; -},{}],382:[function(_dereq_,module,exports){ +},{}],383:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76786,18 +80094,24 @@ module.exports = function linkTraces(gd, plotinfo, cdscatter) { } } + trace._ownfill = (trace.fill && ( + trace.fill.substr(0, 6) === 'tozero' || + trace.fill === 'toself' || + (trace.fill.substr(0, 2) === 'to' && !trace._prevtrace) + )); + prevtraces[group] = trace; } else { - trace._prevtrace = trace._nexttrace = null; + trace._prevtrace = trace._nexttrace = trace._ownfill = null; } } return cdscatterSorted; }; -},{}],383:[function(_dereq_,module,exports){ +},{}],384:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76813,17 +80127,17 @@ var isNumeric = _dereq_('fast-isnumeric'); // used in the drawing step for 'scatter' and 'scattegeo' and // in the convert step for 'scatter3d' module.exports = function makeBubbleSizeFn(trace) { - var marker = trace.marker, - sizeRef = marker.sizeref || 1, - sizeMin = marker.sizemin || 0; + var marker = trace.marker; + var sizeRef = marker.sizeref || 1; + var sizeMin = marker.sizemin || 0; // for bubble charts, allow scaling the provided value linearly // and by area or diameter. // Note this only applies to the array-value sizes var baseFn = (marker.sizemode === 'area') ? - function(v) { return Math.sqrt(v / sizeRef); } : - function(v) { return v / sizeRef; }; + function(v) { return Math.sqrt(v / sizeRef); } : + function(v) { return v / sizeRef; }; // TODO add support for position/negative bubbles? // TODO add 'sizeoffset' attribute? @@ -76837,9 +80151,9 @@ module.exports = function makeBubbleSizeFn(trace) { }; }; -},{"fast-isnumeric":18}],384:[function(_dereq_,module,exports){ +},{"fast-isnumeric":18}],385:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76855,20 +80169,19 @@ module.exports = { max: 'cmax' }; -},{}],385:[function(_dereq_,module,exports){ +},{}],386:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Color = _dereq_('../../components/color'); -var hasColorscale = _dereq_('../../components/colorscale/has_colorscale'); +var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale; var colorscaleDefaults = _dereq_('../../components/colorscale/defaults'); var subTypes = _dereq_('./subtypes'); @@ -76880,9 +80193,9 @@ var subTypes = _dereq_('./subtypes'); * noSelect: caller does not support selected/unselected attribute containers */ module.exports = function markerDefaults(traceIn, traceOut, defaultColor, layout, coerce, opts) { - var isBubble = subTypes.isBubble(traceIn), - lineColor = (traceIn.line || {}).color, - defaultMLC; + var isBubble = subTypes.isBubble(traceIn); + var lineColor = (traceIn.line || {}).color; + var defaultMLC; opts = opts || {}; @@ -76938,9 +80251,9 @@ module.exports = function markerDefaults(traceIn, traceOut, defaultColor, layout } }; -},{"../../components/color":50,"../../components/colorscale/defaults":60,"../../components/colorscale/has_colorscale":64,"./subtypes":390}],386:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"./subtypes":391}],387:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77029,24 +80342,15 @@ module.exports = function plot(gd, plotinfo, cdscatter, scatterLayer, transition function createFills(gd, traceJoin, plotinfo) { traceJoin.each(function(d) { var fills = ensureSingle(d3.select(this), 'g', 'fills'); - Drawing.setClipUrl(fills, plotinfo.layerClipId); + Drawing.setClipUrl(fills, plotinfo.layerClipId, gd); var trace = d[0].trace; var fillData = []; - if(trace.fill && (trace.fill.substr(0, 6) === 'tozero' || trace.fill === 'toself' || - (trace.fill.substr(0, 2) === 'to' && !trace._prevtrace)) - ) { - fillData = ['_ownFill']; - } - if(trace._nexttrace) { - // make the fill-to-next path now for the NEXT trace, so it shows - // behind both lines. - fillData.push('_nextFill'); - } + if(trace._ownfill) fillData.push('_ownFill'); + if(trace._nexttrace) fillData.push('_nextFill'); - var fillJoin = fills.selectAll('g') - .data(fillData, identity); + var fillJoin = fills.selectAll('g').data(fillData, identity); fillJoin.enter().append('g'); @@ -77077,8 +80381,8 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition return hasTransition ? selection.transition() : selection; } - var xa = plotinfo.xaxis, - ya = plotinfo.yaxis; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; var trace = cdscatter[0].trace; var line = trace.line; @@ -77090,7 +80394,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition var text = ensureSingle(tr, 'g', 'text'); // error bars are at the bottom - Registry.getComponentMethod('errorbars', 'plot')(errorBarGroup, plotinfo, transitionOpts); + Registry.getComponentMethod('errorbars', 'plot')(gd, errorBarGroup, plotinfo, transitionOpts); if(trace.visible !== true) return; @@ -77114,21 +80418,21 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition prevPolygons = prevtrace._polygons; } - var thispath, - thisrevpath, - // fullpath is all paths for this curve, joined together straight - // across gaps, for filling - fullpath = '', - // revpath is fullpath reversed, for fill-to-next - revpath = '', - // functions for converting a point array to a path - pathfn, revpathbase, revpathfn, - // variables used before and after the data join - pt0, lastSegment, pt1, thisPolygons; + var thispath; + var thisrevpath; + // fullpath is all paths for this curve, joined together straight + // across gaps, for filling + var fullpath = ''; + // revpath is fullpath reversed, for fill-to-next + var revpath = ''; + // functions for converting a point array to a path + var pathfn, revpathbase, revpathfn; + // variables used before and after the data join + var pt0, lastSegment, pt1, thisPolygons; // initialize line join data / method - var segments = [], - makeUpdate = Lib.noop; + var segments = []; + var makeUpdate = Lib.noop; ownFillEl3 = trace._ownFill; @@ -77245,7 +80549,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition .call(Drawing.lineGroupStyle) .each(makeUpdate(true)); - Drawing.setClipUrl(lineJoin, plotinfo.layerClipId); + Drawing.setClipUrl(lineJoin, plotinfo.layerClipId, gd); function clearFill(selection) { transition(selection).attr('d', 'M0,0Z'); @@ -77473,15 +80777,15 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition // on `plotinfo._hasClipOnAxisFalse === true` subplots var hasClipOnAxisFalse = trace.cliponaxis === false; var clipUrl = hasClipOnAxisFalse ? null : plotinfo.layerClipId; - Drawing.setClipUrl(points, clipUrl); - Drawing.setClipUrl(text, clipUrl); + Drawing.setClipUrl(points, clipUrl, gd); + Drawing.setClipUrl(text, clipUrl, gd); } function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) { - var xa = plotinfo.xaxis, - ya = plotinfo.yaxis, - xr = d3.extent(Lib.simpleMap(xa.range, xa.r2c)), - yr = d3.extent(Lib.simpleMap(ya.range, ya.r2c)); + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; + var xr = d3.extent(Lib.simpleMap(xa.range, xa.r2c)); + var yr = d3.extent(Lib.simpleMap(ya.range, ya.r2c)); var trace = cdscatter[0].trace; if(!subTypes.hasMarkers(trace)) return; @@ -77493,10 +80797,10 @@ function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) { if(mnum === 0) return; var cd = cdscatter.filter(function(v) { - return v.x >= xr[0] && v.x <= xr[1] && v.y >= yr[0] && v.y <= yr[1]; - }), - inc = Math.ceil(cd.length / mnum), - tnum = 0; + return v.x >= xr[0] && v.x <= xr[1] && v.y >= yr[0] && v.y <= yr[1]; + }); + var inc = Math.ceil(cd.length / mnum); + var tnum = 0; cdscatterAll.forEach(function(cdj, j) { var tracei = cdj[0].trace; if(subTypes.hasMarkers(tracei) && @@ -77519,9 +80823,9 @@ function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) { }); } -},{"../../components/drawing":75,"../../lib":169,"../../lib/polygon":182,"../../registry":259,"./line_points":380,"./link_traces":382,"./subtypes":390,"d3":16}],387:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":168,"../../lib/polygon":180,"../../registry":257,"./line_points":381,"./link_traces":383,"./subtypes":391,"d3":16}],388:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77534,15 +80838,15 @@ function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) { var subtypes = _dereq_('./subtypes'); module.exports = function selectPoints(searchInfo, selectionTester) { - var cd = searchInfo.cd, - xa = searchInfo.xaxis, - ya = searchInfo.yaxis, - selection = [], - trace = cd[0].trace, - i, - di, - x, - y; + var cd = searchInfo.cd; + var xa = searchInfo.xaxis; + var ya = searchInfo.yaxis; + var selection = []; + var trace = cd[0].trace; + var i; + var di; + var x; + var y; var hasOnlyLines = (!subtypes.hasMarkers(trace) && !subtypes.hasText(trace)); if(hasOnlyLines) return []; @@ -77574,9 +80878,9 @@ module.exports = function selectPoints(searchInfo, selectionTester) { return selection; }; -},{"./subtypes":390}],388:[function(_dereq_,module,exports){ +},{"./subtypes":391}],389:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77680,9 +80984,9 @@ module.exports = function handleStackDefaults(traceIn, traceOut, layout, coerce) } }; -},{}],389:[function(_dereq_,module,exports){ +},{}],390:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77752,9 +81056,9 @@ module.exports = { styleOnSelect: styleOnSelect }; -},{"../../components/drawing":75,"../../registry":259,"d3":16}],390:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../registry":257,"d3":16}],391:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77791,9 +81095,9 @@ module.exports = { } }; -},{"../../lib":169}],391:[function(_dereq_,module,exports){ +},{"../../lib":168}],392:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77821,43 +81125,41 @@ module.exports = function(traceIn, traceOut, layout, coerce, opts) { } }; -},{"../../lib":169}],392:[function(_dereq_,module,exports){ +},{"../../lib":168}],393:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, 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 Lib = _dereq_('../../lib'); var Registry = _dereq_('../../registry'); - module.exports = function handleXYDefaults(traceIn, traceOut, layout, coerce) { - var len, - x = coerce('x'), - y = coerce('y'); + var x = coerce('x'); + var y = coerce('y'); + var len; var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults'); handleCalendarDefaults(traceIn, traceOut, ['x', 'y'], layout); if(x) { + var xlen = Lib.minRowLength(x); if(y) { - len = Math.min(x.length, y.length); - } - else { - len = x.length; + len = Math.min(xlen, Lib.minRowLength(y)); + } else { + len = xlen; coerce('y0'); coerce('dy'); } - } - else { + } else { if(!y) return 0; - len = traceOut.y.length; + len = Lib.minRowLength(y); coerce('x0'); coerce('dx'); } @@ -77867,9 +81169,9 @@ module.exports = function handleXYDefaults(traceIn, traceOut, layout, coerce) { return len; }; -},{"../../registry":259}],393:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../registry":257}],394:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77878,6 +81180,7 @@ module.exports = function handleXYDefaults(traceIn, traceOut, layout, coerce) { 'use strict'; +var hovertemplateAttrs = _dereq_('../../components/fx/hovertemplate_attributes'); var scatterAttrs = _dereq_('../scatter/attributes'); var plotAttrs = _dereq_('../../plots/attributes'); var colorAttributes = _dereq_('../../components/colorscale/attributes'); @@ -77886,9 +81189,9 @@ var dash = _dereq_('../../components/drawing/attributes').dash; var extendFlat = _dereq_('../../lib/extend').extendFlat; -var scatterMarkerAttrs = scatterAttrs.marker, - scatterLineAttrs = scatterAttrs.line, - scatterMarkerLineAttrs = scatterMarkerAttrs.line; +var scatterMarkerAttrs = scatterAttrs.marker; +var scatterLineAttrs = scatterAttrs.line; +var scatterMarkerLineAttrs = scatterMarkerAttrs.line; module.exports = { a: { @@ -77968,11 +81271,12 @@ module.exports = { flags: ['a', 'b', 'c', 'text', 'name'] }), hoveron: scatterAttrs.hoveron, + hovertemplate: hovertemplateAttrs(), }; -},{"../../components/colorbar/attributes":51,"../../components/colorscale/attributes":57,"../../components/drawing/attributes":74,"../../lib/extend":163,"../../plots/attributes":211,"../scatter/attributes":366}],394:[function(_dereq_,module,exports){ +},{"../../components/colorbar/attributes":52,"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../components/fx/hovertemplate_attributes":89,"../../lib/extend":162,"../../plots/attributes":209,"../scatter/attributes":367}],395:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78045,16 +81349,16 @@ module.exports = function calc(gd, trace) { } calcMarkerSize(trace, serieslen); - calcColorscale(trace); + calcColorscale(gd, trace); arraysToCalcdata(cd, trace); calcSelection(cd, trace); return cd; }; -},{"../scatter/arrays_to_calcdata":365,"../scatter/calc":367,"../scatter/calc_selection":368,"../scatter/colorscale_calc":370,"fast-isnumeric":18}],395:[function(_dereq_,module,exports){ +},{"../scatter/arrays_to_calcdata":366,"../scatter/calc":368,"../scatter/calc_selection":369,"../scatter/colorscale_calc":370,"fast-isnumeric":18}],396:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78082,10 +81386,10 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } - var a = coerce('a'), - b = coerce('b'), - c = coerce('c'), - len; + var a = coerce('a'); + var b = coerce('b'); + var c = coerce('c'); + var len; // allow any one array to be missing, len is the minimum length of those // present. Note that after coerce data_array's are either Arrays (which @@ -78116,6 +81420,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('text'); coerce('hovertext'); + if(traceOut.hoveron !== 'fills') coerce('hovertemplate'); var defaultMode = len < constants.PTS_LINESONLY ? 'lines+markers' : 'lines'; coerce('mode', defaultMode); @@ -78156,9 +81461,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout Lib.coerceSelectionMarkerOpacity(traceOut, coerce); }; -},{"../../lib":169,"../scatter/constants":371,"../scatter/fillcolor_defaults":375,"../scatter/line_defaults":379,"../scatter/line_shape_defaults":381,"../scatter/marker_defaults":385,"../scatter/subtypes":390,"../scatter/text_defaults":391,"./attributes":393}],396:[function(_dereq_,module,exports){ +},{"../../lib":168,"../scatter/constants":371,"../scatter/fillcolor_defaults":376,"../scatter/line_defaults":380,"../scatter/line_shape_defaults":382,"../scatter/marker_defaults":386,"../scatter/subtypes":391,"../scatter/text_defaults":392,"./attributes":394}],397:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78188,9 +81493,9 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { return out; }; -},{}],397:[function(_dereq_,module,exports){ +},{}],398:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78221,10 +81526,10 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { // so easy and anyway we lost the information we would have needed to do // this inside scatterHover. if(newPointData.index === undefined) { - var yFracUp = 1 - (newPointData.y0 / pointData.ya._length), - xLen = pointData.xa._length, - xMin = xLen * yFracUp / 2, - xMax = xLen - xMin; + var yFracUp = 1 - (newPointData.y0 / pointData.ya._length); + var xLen = pointData.xa._length; + var xMin = xLen * yFracUp / 2; + var xMax = xLen - xMin; newPointData.x0 = Math.max(Math.min(newPointData.x0, xMax), xMin); newPointData.x1 = Math.max(Math.min(newPointData.x1, xMax), xMin); return scatterPointData; @@ -78243,26 +81548,25 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { var trace = newPointData.trace; var ternary = newPointData.subplot; var hoverinfo = cdi.hi || trace.hoverinfo; - var parts = hoverinfo.split('+'); var text = []; - function textPart(ax, val) { text.push(ax._hovertitle + ': ' + Axes.tickText(ax, val, 'hover').text); } - - if(parts.indexOf('all') !== -1) parts = ['a', 'b', 'c']; - if(parts.indexOf('a') !== -1) textPart(ternary.aaxis, cdi.a); - if(parts.indexOf('b') !== -1) textPart(ternary.baxis, cdi.b); - if(parts.indexOf('c') !== -1) textPart(ternary.caxis, cdi.c); - + if(!trace.hovertemplate) { + var parts = hoverinfo.split('+'); + if(parts.indexOf('all') !== -1) parts = ['a', 'b', 'c']; + if(parts.indexOf('a') !== -1) textPart(ternary.aaxis, cdi.a); + if(parts.indexOf('b') !== -1) textPart(ternary.baxis, cdi.b); + if(parts.indexOf('c') !== -1) textPart(ternary.caxis, cdi.c); + } newPointData.extraText = text.join('
    '); - + newPointData.hovertemplate = trace.hovertemplate; return scatterPointData; }; -},{"../../plots/cartesian/axes":214,"../scatter/hover":377}],398:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":212,"../scatter/hover":378}],399:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78295,9 +81599,9 @@ ScatterTernary.meta = { module.exports = ScatterTernary; -},{"../../plots/ternary":255,"../scatter/marker_colorbar":384,"../scatter/select":387,"../scatter/style":389,"./attributes":393,"./calc":394,"./defaults":395,"./event_data":396,"./hover":397,"./plot":399}],399:[function(_dereq_,module,exports){ +},{"../../plots/ternary":253,"../scatter/marker_colorbar":385,"../scatter/select":388,"../scatter/style":390,"./attributes":394,"./calc":395,"./defaults":396,"./event_data":397,"./hover":398,"./plot":400}],400:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78328,9 +81632,9 @@ module.exports = function plot(gd, ternary, moduleCalcData) { scatterPlot(gd, plotinfo, moduleCalcData, scatterLayer); }; -},{"../scatter/plot":386}],400:[function(_dereq_,module,exports){ +},{"../scatter/plot":387}],401:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78423,6 +81727,11 @@ module.exports = { pointpos: extendFlat({}, boxAttrs.pointpos, { }), + + width: extendFlat({}, boxAttrs.width, { + + }), + marker: boxAttrs.marker, text: boxAttrs.text, @@ -78497,7 +81806,7 @@ module.exports = { values: ['both', 'positive', 'negative'], dflt: 'both', - editType: 'plot', + editType: 'calc', }, @@ -78515,9 +81824,9 @@ module.exports = { } }; -},{"../../lib/extend":163,"../box/attributes":282}],401:[function(_dereq_,module,exports){ +},{"../../lib/extend":162,"../box/attributes":282}],402:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78543,18 +81852,10 @@ module.exports = function calc(gd, trace) { trace[trace.orientation === 'h' ? 'xaxis' : 'yaxis'] ); - var violinScaleGroupStats = fullLayout._violinScaleGroupStats; - var scaleGroup = trace.scalegroup; - var groupStats = violinScaleGroupStats[scaleGroup]; - if(!groupStats) { - groupStats = violinScaleGroupStats[scaleGroup] = { - maxWidth: 0, - maxCount: 0 - }; - } - var spanMin = Infinity; var spanMax = -Infinity; + var maxKDE = 0; + var maxCount = 0; for(var i = 0; i < cd.length; i++) { var cdi = cd[i]; @@ -78579,12 +81880,11 @@ module.exports = function calc(gd, trace) { for(var k = 0, t = span[0]; t < (span[1] + step / 2); k++, t += step) { var v = kde(t); - groupStats.maxWidth = Math.max(groupStats.maxWidth, v); cdi.density[k] = {v: v, t: t}; + maxKDE = Math.max(maxKDE, v); } - groupStats.maxCount = Math.max(groupStats.maxCount, vals.length); - + maxCount = Math.max(maxCount, vals.length); spanMin = Math.min(spanMin, span[0]); spanMax = Math.max(spanMax, span[1]); } @@ -78592,6 +81892,24 @@ module.exports = function calc(gd, trace) { var extremes = Axes.findExtremes(valAxis, [spanMin, spanMax], {padded: true}); trace._extremes[valAxis._id] = extremes; + if(trace.width) { + cd[0].t.maxKDE = maxKDE; + } else { + var violinScaleGroupStats = fullLayout._violinScaleGroupStats; + var scaleGroup = trace.scalegroup; + var groupStats = violinScaleGroupStats[scaleGroup]; + + if(groupStats) { + groupStats.maxKDE = Math.max(groupStats.maxKDE, maxKDE); + groupStats.maxCount = Math.max(groupStats.maxCount, maxCount); + } else { + violinScaleGroupStats[scaleGroup] = { + maxKDE: maxKDE, + maxCount: maxCount + }; + } + } + cd[0].t.labels.kde = Lib._(gd, 'kde:'); return cd; @@ -78641,7 +81959,9 @@ function calcSpan(trace, cdi, valAxis, bandwidth) { function calcSpanItem(index) { var s = spanIn[index]; - var sc = valAxis.d2c(s, 0, trace[cdi.valLetter + 'calendar']); + var sc = valAxis.type === 'multicategory' ? + valAxis.r2c(s) : + valAxis.d2c(s, 0, trace[cdi.valLetter + 'calendar']); return sc === BADNUM ? spanLoose[index] : sc; } @@ -78664,9 +81984,9 @@ function calcSpan(trace, cdi, valAxis, bandwidth) { return spanOut; } -},{"../../constants/numerical":151,"../../lib":169,"../../plots/cartesian/axes":214,"../box/calc":283,"./helpers":404}],402:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":168,"../../plots/cartesian/axes":212,"../box/calc":283,"./helpers":405}],403:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78687,8 +82007,6 @@ module.exports = function crossTraceCalc(gd, plotinfo) { var orientation = orientations[i]; var posAxis = orientation === 'h' ? ya : xa; var violinList = []; - var minPad = 0; - var maxPad = 0; for(var j = 0; j < calcdata.length; j++) { var cd = calcdata[j]; @@ -78702,21 +82020,16 @@ module.exports = function crossTraceCalc(gd, plotinfo) { trace.yaxis === ya._id ) { violinList.push(j); - - if(trace.points !== false) { - minPad = Math.max(minPad, trace.jitter - trace.pointpos - 1); - maxPad = Math.max(maxPad, trace.jitter + trace.pointpos - 1); - } } } - setPositionOffset('violin', gd, violinList, posAxis, [minPad, maxPad]); + setPositionOffset('violin', gd, violinList, posAxis); } }; -},{"../box/cross_trace_calc":284}],403:[function(_dereq_,module,exports){ +},{"../box/cross_trace_calc":284}],404:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78743,10 +82056,14 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(traceOut.visible === false) return; coerce('bandwidth'); - coerce('scalegroup', traceOut.name); - coerce('scalemode'); coerce('side'); + var width = coerce('width'); + if(!width) { + coerce('scalegroup', traceOut.name); + coerce('scalemode'); + } + var span = coerce('span'); var spanmodeDflt; if(Array.isArray(span)) spanmodeDflt = 'manual'; @@ -78771,9 +82088,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(!meanLineVisible) traceOut.meanline = {visible: false}; }; -},{"../../components/color":50,"../../lib":169,"../box/defaults":285,"./attributes":400}],404:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":168,"../box/defaults":285,"./attributes":401}],405:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78844,9 +82161,9 @@ exports.getKdeValue = function(calcItem, trace, valueDist) { exports.extractVal = function(o) { return o.v; }; -},{"../../lib":169}],405:[function(_dereq_,module,exports){ +},{"../../lib":168}],406:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78953,9 +82270,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return closeData; }; -},{"../../lib":169,"../../plots/cartesian/axes":214,"../box/hover":287,"./helpers":404}],406:[function(_dereq_,module,exports){ +},{"../../lib":168,"../../plots/cartesian/axes":212,"../box/hover":287,"./helpers":405}],407:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78986,9 +82303,9 @@ module.exports = { } }; -},{"../../plots/cartesian":225,"../box/select":292,"../scatter/style":389,"./attributes":400,"./calc":401,"./cross_trace_calc":402,"./defaults":403,"./hover":405,"./layout_attributes":407,"./layout_defaults":408,"./plot":409,"./style":410}],407:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../box/select":292,"../scatter/style":390,"./attributes":401,"./calc":402,"./cross_trace_calc":403,"./defaults":404,"./hover":406,"./layout_attributes":408,"./layout_defaults":409,"./plot":410,"./style":411}],408:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79012,9 +82329,9 @@ module.exports = { }) }; -},{"../../lib":169,"../box/layout_attributes":289}],408:[function(_dereq_,module,exports){ +},{"../../lib":168,"../box/layout_attributes":289}],409:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79034,9 +82351,9 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { boxLayoutDefaults._supply(layoutIn, layoutOut, fullData, coerce, 'violin'); }; -},{"../../lib":169,"../box/layout_defaults":290,"./layout_attributes":407}],409:[function(_dereq_,module,exports){ +},{"../../lib":168,"../box/layout_defaults":290,"./layout_attributes":408}],410:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79076,28 +82393,19 @@ module.exports = function plot(gd, plotinfo, cdViolins, violinLayer) { var t = cd0.t; var trace = cd0.trace; if(!plotinfo.isRangePlot) cd0.node3 = plotGroup; - var numViolins = fullLayout._numViolins; - var group = (fullLayout.violinmode === 'group' && numViolins > 1); - var groupFraction = 1 - fullLayout.violingap; - // violin max half width - var bdPos = t.bdPos = t.dPos * groupFraction * (1 - fullLayout.violingroupgap) / (group ? numViolins : 1); - // violin center offset - var bPos = t.bPos = group ? 2 * t.dPos * (-0.5 + (t.num + 0.5) / numViolins) * groupFraction : 0; - // half-width within which to accept hover for this violin - // always split the distance to the closest violin - t.wHover = t.dPos * (group ? groupFraction / numViolins : 1); if(trace.visible !== true || t.empty) { plotGroup.remove(); return; } + var bPos = t.bPos; + var bdPos = t.bdPos; var valAxis = plotinfo[t.valLetter + 'axis']; var posAxis = plotinfo[t.posLetter + 'axis']; var hasBothSides = trace.side === 'both'; var hasPositiveSide = hasBothSides || trace.side === 'positive'; var hasNegativeSide = hasBothSides || trace.side === 'negative'; - var groupStats = fullLayout._violinScaleGroupStats[trace.scalegroup]; var violins = plotGroup.selectAll('path.violin').data(Lib.identity); @@ -79113,15 +82421,15 @@ module.exports = function plot(gd, plotinfo, cdViolins, violinLayer) { var len = density.length; var posCenter = d.pos + bPos; var posCenterPx = posAxis.c2p(posCenter); - var scale; - switch(trace.scalemode) { - case 'width': - scale = groupStats.maxWidth / bdPos; - break; - case 'count': - scale = (groupStats.maxWidth / bdPos) * (groupStats.maxCount / d.pts.length); - break; + var scale; + if(trace.width) { + scale = t.maxKDE / bdPos; + } else { + var groupStats = fullLayout._violinScaleGroupStats[trace.scalegroup]; + scale = trace.scalemode === 'count' ? + (groupStats.maxKDE / bdPos) * (groupStats.maxCount / d.pts.length) : + groupStats.maxKDE / bdPos; } var pathPos, pathNeg, path; @@ -79234,9 +82542,9 @@ module.exports = function plot(gd, plotinfo, cdViolins, violinLayer) { }); }; -},{"../../components/drawing":75,"../../lib":169,"../box/plot":291,"../scatter/line_points":380,"./helpers":404,"d3":16}],410:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":168,"../box/plot":291,"../scatter/line_points":381,"./helpers":405,"d3":16}],411:[function(_dereq_,module,exports){ /** -* Copyright 2012-2018, Plotly, Inc. +* Copyright 2012-2019, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79289,5 +82597,5 @@ module.exports = function style(gd, cd) { }); }; -},{"../../components/color":50,"../scatter/style":389,"d3":16}]},{},[11])(11) +},{"../../components/color":51,"../scatter/style":390,"d3":16}]},{},[11])(11) }); diff --git a/static/babybuddy/js/graph.js.gz b/static/babybuddy/js/graph.js.gz index ffd830248350671aa0a1c3f17421b372b7c0e7de..cb6f2e06b8b8fd92b87fd0b95e4aa9c964867e71 100644 GIT binary patch literal 636016 zcmV(HJ8Qn$ENJ zv<+n*#j!(WGA9kQFue?CnEX7NhU+YxIT!0$m^%3~bY47rU@IK@q(0Q~DXSK#Bmf9Be z=Jm#H7-ykVfMjJ6qG%Fevcz_+s5Xnx;uwuRRXd>m+xeD>FXe&Oz-kI;tBCO8@J6(v#6Lh8R>3$A#71(-p-*T2<>7Y zay6re?l}57Z^z+!kuS&5;b9}G=SXvjfoLU#QE${gdB>*`@pm9z;fHs|us1&4JGcNY z%kngu<_F_@_Yj}w(FC}M*Qg(~+ecYCJ&L2rL1Rn>QUH-bkx%y=_+Rbk=FiS7x~v^L zwHaVa4IamNI-V!%yfqJ2QG9cJ@M;sTos(dl9Wo@6vRy@gX9)yg=jur z1?eJMAG_mCFq=i|1w7T7yd5W6Z!U6ZZE}(4KrCqRw=`kEJDw-gi%ddguLwK2$YT(d z<8`tQl}Z8T<>7VSnuXIO4XC?jnd4;w80=B9Jx!x*g9Wo?unAjfh?)>PP8m;Ui!f7* z!*He0j~K|@LQq(fKenBNxsx$4+raiU0s~}ppcw?I+i-?55BunCpJRIlA2KXZm z=Q%P=60LJUIJ^wkAkHS81th0EOM^um+^~j?S|In@;9R6xlEU!KgNr!F@+{?;r&!8z zfJ#}OVktXKlMIGEQcKG;OZgR$ODT%4HmFGqY?MVG)v`sRr3R?Wa*ZON)!Y%MKOZjYDc}wvvr9(^cu)4ejnJu_jfNz1lwg6vmqr9c~meLkv)?2Vyq`^cf zDl`iwk9itBtAYiy>?BC5CDh+skID9%TrL=4B#Y~ zo-fh_j2~q0Bz4?&Cv&il<7Q0H-Jx`Lhr-GJW%n*vre3Q>s_+|7TY0^G6@b2gnee

    7MaO76kHhOR{%I999&q->YRyuS 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

    tqASP_=PtFlARF1k;U+h7| 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�GT_|&`n3^AgGMm>nc=_>0$j@7NX}I5`kBxu) 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μ-TErFiqbpKtcN@Z-vk@-y zD4|nXwPQsOEu<}LP@3CFZ&Zm$!NX)fZV^9DD_a@m#}DzWq=v6GjJ^`65Xyu|qSMka z==w!DN3xO!Gs&xT5t&{i2nqtBBQmf_^-?8Q z()COK$hDq%U(ZeFdJV0B@n9Ius*7ZM-3>5fo3{h`lLH{|IqUgTj!&3GUK<{Snob_ zc|(jU-kh)Ca9_pX=o#ljX1f<@3Oz14-3@bW`@#y$Bf$IJ;N@X^X56sc2h2NQ#JZms z`Pe@(zRhv60VL(Y4FJxi!It`9$1fvYUiuN*h~2ruvIC0U`xlYT<+#l*fHm?#@4GvIq5$8(CFj-jBU7Y074PnGj#w*%4;TD&u{5?ZozddJuP`+=?4SwmhA%O?)!W zP_>gMicAKlgddUQfjBO{+oBj2R>ujXfOt3QTue1u4?xZrI{;gY>F9c~>j5+p!|*mL*gsG*_O2auc>bnAEDwz@Nm}v|KzokIT;&1?YEXWNDs}gZ(G98?}JUTf!{%~>n`s5Uw zyF>2h#jblr?I+{B`dH?$eI2k!P!Yzi6=Y=C5TmkOjA`0TtCE}La$XJh_9h^(t}vGP zjNmY*Yx!sJvD(Y4YL!)c-|zqC_d8A7@R!INz*K9%X*fCl9na8uWseD~gb6fS25-g3 znz5daz;GAwB*ZbC`xoBr#mI0QlJJO9Ba5oNrqE{Z1}{8RrrqR?W!kpCT~s|W$rC)7 zE4qNp1p!#VYuNp7S?= zkKJrv+pvgy?(mBb(K<$hB{wka&A6|>#I7Z7))Iqr79_mhL7>=tYe$xY`2F0($$eK||YEMEsMEJv;ES=_SR>?*Tj8OB<<<{*m*oaey0 z$;|I6+o8CrVn~>{C1IVAHvT=nynl5ajsC*M|JmIZ>M&oCkQ?rNHkQPNyw6iNr7A1RKI zES~qkvoM*l+d#5&@})InB_WgJEYtOLmuBxaa{)1p6DiY7kP(t-hcVO5Eo5v_<3vk1 zMzI;>)oGqBe%#z^)tfDPP4adr4msE-6CRL`Ym5qp;wMR)f~@yekB7CyG)A4Scb*82 zi*apZdAs#4Q5{k5Xzg?jpgMJ4b}AiC++qW}=eOTB9SxirgmA~jCS9@}C}H|#y+QJl z=Y?bAlq<$r!-{2MK(?9lZIFyqak1m4tw.^?(X3-N~Xn`%+K;o}| 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 z

    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 z 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æ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

  • uOY6#FS-1u=&vkNn$Zl@zr(1ez@m+<3PkMv*-e0C)NAy?1tFUN^pe9ZMbjX z*^kL)Ta(LHANTBO4T0&sF>YjK{lvGS?!GPJp4R&40JY?YQlD>Zeo6D-$jWW$wLFDT zIBmDZ`RW4fyKp--*rL;dwNwVdw0Cx9vP3w#uojkPw`!IK8xx+JENy0-D=gS!U#d5R z`oE5=aet!OM7W81{GmN#Qi0`{^Hr3Q)Jo>6MtvxuNt}ghW>j$a*fap|l$c~VXxlW| z3feEWZtZtpFH9~{l&ahx0k(fev2OSJ*6NaG8OacbHLYxs~w=|add=6Oecw37cT*#Nm(!Y7%>MvFP0ZQCD z{Y{;j^*1MZrlMZlmfm0mk-o64GnkcbDapXGY%$eXv2HaS-i>to60V+XNkijQJivO@ zeyv7ttUz$>`RadWeB2?Eqp}MzU)IRY@?rt^meBr`sNtz{HS~Z`x+#ZKz#0b4#uQ6q zTPI-VH5M7_X!TN`v3_5+6^kL|LIpFk`JvgrJUbgLnN(S|@Hjzcm_n*oX>`fj$m_K=`$Ow!0l5lA z#M1m0SCjw+ZxPdRIYP4u0gH)dJfFLLj)t*K|6s%eE0!?~iaaZiykVLzc>8+LwZV^! zU#f`{2I9Uk^RM#yhK(Khm#ix{R*j*Do~Jcv)c8WNqjTdCa5t#P32M>*0Eec3>q%W} z10iJWUc1kU>W_r9;sEk=LC9?e2UMo`EU_c+QecX-2lLsWT*;j3Vtl4L&O_W+>3Yt_ zlNI>6X6zDWJ;AZ<7QuQpa&`r}%{n`%%@<{xI1q9^DPq)B>2Igp^j3{SrN!$LdrWvv zH`#?H%4J|BL@IsDIzEY6LQ2O{;f_nkU}DF8ADD~^g{@5QAqf=4NrU*xbIZTQ=zhpu zLX(B+3GiBuAksymeVDXFCO2e-PdIOqQc^HG-|sMoKw=y*D9%w!xoocs)QCqNer-p5 zQBKZ&`8TlO`0wn{eUYMcOO@>7I}G-q|}c;E0&B~(G}NE-8O6v((Vo`iu9cQ ziC-Dps;)M+Q6xDe>S(R+enr+DXx!nMHj)*J%KPQt3au8KxL|1Y14AKjSON|~03jFw zYFkeb)js`7T@IkK%G7q1`$ghR3!CWHG+{awfidIKi5gzw%(wxM1VC8u9ZBv^fQY_K zn#d1EnUyxKF~&Zv`!vOFYWx1MRF_J1U8$}v)eTC~u+*&`kR|4!Z-9TuF^bXugY>MV z1<dIqKg?;&R91<~wIVP2eVl&l~ zMcX$a5PWrN9-qWOhNxjt@N3@DqBHMN0-x9 zZyiIWjus)Z1aLycyrDIt-q<=t+}9hVzv2v^zJ#M@iFc=Xg^CCY>sRt5u2%vdGBgp3W){yW1S^&H&7#^29>T`#)j5ff z+%=k+Us0Vq7*~DJ_AmcQRPd?ECK(1G?P?1*w0`3?I?rM3Wx#BE4|M%M{lvDy`}cLK zV&Z`w+D;sP;ah=}(V5N7pCUhm>tLI$Fm6b%8jT|BtNH!fXDngWNH2n+mqEL42_fVA z(2_7`vl~4#Aq{vMc^->8i9$zCKiIDSOT9D-)HEie98|e4MZ}xIl5Z(GU-ePVi^;e6 z1sz+$Jrev2t-c&h$MpK8udst9o%-UblFd+TnDcJbMl<_JI9H1LqebDwn=L8|996JX z24;xb(3Z)_!RQpYP+R$yCDa@HK;^lxB5b&-JKwDU^noHy+yz6R^B{dt;UrO=Qvbif z|2s{2>+s|m+a($qR08pEJFy4OK%(Jk2W*oQGPJwelNSjK^@Q({GQCGi)hAdeVu;?T z|G|01U_NvtKg4961j^;;HHXVh3Io{jw~`xr#lc>|NbrWgDW;xTRq;0{GI-O8DyQ|( zMU=VFnNcG$6rsO^gg!Da)2=uF~{2v5h2s=AACRgeHjGsnx=8 zON1}RAF^OjV3n`J!Ml;Gvsmp`1+KDH&2VUK?8xLz%nhxVtqPwj`Vz`pC>9=X@w<68^J+=av5@r)td)tj2cEN5qL1JsCZi9ONL26ZWoB9NR z^A-4)=$Th9WYm4@6kEo?wwzQJsuMY~he}u*KhXiE=m`zqyC+U-sifnv8*VjHRIAn7 zxyNvnF|U^;yjk~SIeqB>iOzgQ*p3!3%z9}@mnBqM08A7LoJr4mkPR?hgqhJUIUK2O zOvkg5>`kG3i$HGTKSFN6fUWb68>-`Ih$VDHyTruaq#AGWX4Djc_FI(Q4YOz6bxmJq zUEPmI5fF0p3?PH90{LAUqz7mOhIHH`^&?eY3<(%EB5q`>7$fo{Fj`dqUncS|DIbrx zw`dC90^pljo~Z3nf!13hc3h7<)`q5BD`BO%0wVpGq<}&tZ$bMj5DH&j*3#lfz{CLj z81q&7qrmY7t_D3re&jgPt*&G~mHJGuL@t>~XilE8gyR?}pglXjGd|$hqX*UZPBixy zEw1Src@19o%xmCZ#FJlB$_oKbZLSD(k1=;fK}BV&c@M~Hzn$;sA%wlYn7&B&H%_2J zwLHwMfF7R@f5?6$*K8>A{gLFo_RUO#ACf%(5I^qSry>d;DvGUxzq-F@2^07|1yUho zM?;dsIC>_KkEuU)w@sWzFmV!7r_1LKbL#VBGct?1MRpRqz%!%N;V9~3co|%K^bPbd z!0uC_p{6Lf4C24)h{c8yh?1ut;xTcLx%7T~hsL_cl zv0a7K}Wmkj^4XgNB72Rdq?-C9qZ@@M|2}Q zy4fLa@O^+$BmO?UL(wK{s85#9W{BZ{mbal-2 z<`8xaldQrLh0)BwYoa2o<4d3+tuh(?)uQ? zrou(YJr<*^kIE^@LFun8Z+b)^Jm}r!YH_*phl#)n4c>lJPR0?V2phK+#jv_2Kid|T zimpaw5@7-*j1l6^&^+}qyiqRCFQuK1J*kg1WysGYQO9|iGz#-l>4qpp9x)oH=I*<3 zpTOL$yY#7V9`uS-tFUP5EZjCwP5fU%qc$yrb}HSU6r_(O`*zH{wVbk>{ZMIw!Q#w;xQUf zpZh^(BApLFsMH&3A>N`OhN#haJKH%#L*F!*suEejRx7Ade3jgVO6sv(A0BF);4!F^ zw0s)xtGdUpi{KleD_;$KZ9do_P|JQWU&3iaZP@yY0`beS8Vw>4DDX*6FC}zaRardA z?fwr;IV~^}5`IJ?lI#-o8BjD%KW}Fb;X-mwwMobX|!hyIi*i5=M}3X9saLT2Yb`8vvGsJy7eZVLG6JZ zDFOs$QJ5MtfLucqhz@?fXVcn9rKjaOZ^f=^+DGwJbuOO0=3UrazrIc3nQ^``G!QdBF~_*c zEWl;{T?OZu9QZW`b6Mk%!?ePs0Y?}gOfxqFRg&mq{&q&HZoTdlX6cQYiP4&3C!z^- z>7SG3VdQmoeF%F)ki1d5@~Qtg>Vx%D6~^nUe`^hy2&YU`#My`&Z%%);SMy051+nnY zX3Mj1q->wc_9JBp(PD>3ZF2((rk;>NT~VQA+dSNcz!s)xZI_l=S$tvD+oy_`1>{o} zoJ|R0`1GrMLGLkZ_Z%ZQ6|HM^8{&X7=x!3a2a22)8jTG%>AC?D>i5&3yuP8&_hW%Qh-XP-*2P{rFkq0YvGe6gH^8?Q$zY0{$KKy=hSP#V8Y*A`=sK*dyb zPcK&x9FkSk#ORmPTt5sN5~#CR>)wj!wWrdXXPs0I(7FZK+@vUnfSvnx(m7oKF;GpN zQW!|=g)IlkU7j5Ep}IJ#BOdCUJX(%Q*H!N0G+`P5Yd+VR4QU63#!AiXG29wK?c8X` z=ctLx3$rZn z;ylw>wOFoEXqDl=2&=7ra0$!KDR4hj@g_io83e4G1dSNG2r1aJ+yrQ$`feIX>hBC~ z%CPrEAtDJm*(Kp@W|z$ggzTQOF)q326e9U*(O#BZ(?WnS$$mNMkCs(!gAoLC zRXuq$0og8!c?*n>r1q-gtkqUYw?Aor45@ahs*K*J?YqtF&fWH1$f@v2yxaM><3z#& ztM95Z_1rL-za1^_d_n?2S0ZPThssG=y)GR@x(D66cY-dc#dG%)!jt#luEPJLyOwK( zb}q`d<#@bXJ0Az_sLinZY5P;ZoljKqC!!hdyzjXY+5b6V=k4Dk%w5GW-JUGJY3NDe zYc%Qf2lbC#99=j-GfMejK3@*UGu6#XE<19q5Q(n~`?6r)3sdyLbBzNi|e@t9_?;SIaomN3VMaj(J)cinXVrAAOW4 z3*feFw|f_j^KrHxn!Xj*10ti2*!Ubt?Mst$!>wPY#PbbRZ0ES8EQK7?Ma(3%VDuS4 z5xy3RK0T6*>`BWFfu%2=$pcr=b zzW#z8WuY!|_<-}U?9m+||+4z|cqmpTS4$hEr38amo`7O#!w1RbuZCgIWNnGuo))t?qj z{RQdc4amIDN)z$ES11IBo{Q#a^AuOn!r5lZyH zAjW&}(MPc^0H<>OF4QjAU?s#ZGfcf|p{|#39e92@ZTe}?jM9jgZuxr`YSMW#lhGw* zdg%LX*XWTRO8gL!=C7Uf&@2UGI4o}(B9j25vthTj{98}Ug<-pVxF$w4%diE zTt}Q=d%ccPBZ^cCOiW zFg0oG8>?&QNu(XGo=`6&J-^~bjh0>lhwl%HNUU@>hwAs1sCyD!$HBDIJWvd$wx4Qb z2c`VZFVy%)B^tZN+o5%cL#}6^RXY`&d;4BtpH1znoCZM=Jt%F$R-*@U3%;O!R ze+QiL<78OiB(wT>*YMgAst69Y*pFYv^##%e;*7OXA4PxV(PZIabht*d9ngy0pq)-p z8yfYU4UM`kxO>59T-0|qF6yQZn1Z6dyCO|?9Op=w>Alz1wsx*~=lWaEtkk9K|EgK` zE=%4XqoIj8O0@xsIXbmriUIKU)hGS7E&59L+34(^&sM5nKA?YtD~xq^G$kM?6#d5)t_MB>zxutv zGyo$e8~7Vs2u$OH$-EjpQ>!oE|4yKWwwx}&KN+d4iEsda0Y@dE?=qNIPsg**#?`8v z4MyC9;q8ueE7;7Y<@&SHVs!y}TOWCo#J1+Ynj1|3Tlk@c{dP3CTvp>ZqwLV8eLbIz z3iffkS?qtLKsL)WBWw!rFs(M zjCM1*N&Q?ngYpF$lRJO0CAuIZ8$$XC`Q(`FxOd`qC}TLD916r>zu0jB$rnj-*IU%Y zS#Oxdw2p>5jbe}*Zax({hVZa8q2r^XX`gf4tpT?xcnhZe3M7)WX~DR3 z_L;OhMS9zPHkqB2_E&E|t(hwkk_L=ha-5xP73-)y7PfXlJFGx2Sf%>Ej~>v#yBo(m zavAH2+gMj$$A;*B&A){S2PY8d2A-pVMF6u`XsFeSnUj`qyFsLI#MK94hl8#@0L`hm z{*|g)Fud%mfBOId&dbpmZO_1=GV=iZu7G~r&wuS{hhFF(nOvrk0R>oq+PE_|fQ(`; zFsVUFx6lTIX-|WHq+qk^AqFtBdv5#b+3jbD$?KjaD12^uhN5tTBswAp5qHy*hGRpx z<*7fnGNdoiR(HVMiF_ueU&!&N(_S03E6o0&6EX_`xeO?+;=+)%px zEC&~(=j=M@*c-TL%=`SZK!ozsv^Sv5Vl+RKSlz#$9hmwK3fXj)>f$k4fPfU*2GdqiScf-Z!_z={py=2;X){c&&0nT@_SHMnn{yqnot6r!8>j z@oXl1Vn)`#zHPq8lk2N&7yM z_M#Ul8%g`VcMU=sQCfr=_~Vl9qmzG% zbDUdTg;jmvC9}1V`xbk7QJ9&9{-@IJ-olw25u-ABn=f=t$Qb2%LserGvJOY*%h3n~ z=i=KM*}a!hU6M9R-idE1@hu5)b6-sBzx-%|S-~lvSkuw!Vm|bhN|Fu}eblroYgRK` zRyH{g*nI0{>UB1rWflor;`sFm*kMz;`UsvrEMzPSWo+yNWON^ZL3MUwQu^)}g;}_o z!wT~CSrRjYRUVpHX*p<(X%#OnO`_fhiZWY@2a>4wp7zWR<(XvU{f;U%k^rIPcsGTa zNG%+ftwSzf3be6ibi&8v>b16SRor0h{hrUDF?sH8(O#1h%Ke{6aiv#6R$06T2SD_?%fU3XS`9voZqH1CI zb=OTk5wCEyF{Rx-%`Ayic9qF_E2quWaw(Vuz=bvxg%uZHJ7d)}0!lDb$9R`R2i<%1 zS$cUE6`s1wi(UGs;9x26+ibm6TR+v-L$&cuU3*#GrLR{vk+r@PUL)CexdpmruV=RE zd)}}nsU{&XOx+DD@+5Lalqk3^+fLNU5Zg#HI!@62(TCaXkEGg)2#bxrkkT-_b&B?k zt9I%yLAUV8^OMxsm+0$XcImA?Mz{1=AF-zz&FlgC**ZP$#R~Coku`);T-b8dA1j8A zKTUZ1Yco5r?=uI*7FmEewz$)vsao)(eCeg*HwNDP3%pzdC5WJfMMKzR+c}!hUQmak zR&FIoeKxynQg>~b?5@a8?;OF&Z2@*Z?-K6u6EeN`Q2|0gXGe)gtHi^MCnJPKVI9)w zG?Sp%1Nyaf>eREt=HQkW^6O}O$*Z=!+Fd@i)F?RG!;AvKK}dTF24)f)CQ+`*L_51ImOueFc@jx%@koD2XEueU`!B}6 z>SNBU^XI=}twqys?3e%i`M+}36l3xIvKU1!)@G_MSCvnm)W)cX^IN~=c*K-M&~O;6 z`xz1OiX&Td#w_Ewp?KeId-eS}a(iHGu7sspyqG=_w~#V9C@cc~ywZ%Hb4&Rb)Y+@X zGoFL)EGY-eAREZaAhU#JTn?2{IX=45!c0 ze^XLnuNm6AlB(h8;ghQ2s2C>|l9LTj!vCnh28`26V{;$XikdIS=VJ{0V`Dm%AiN-P zq0s^RNQ80mJw%h>!y6EDG0@MTrXBw+l+qKdvf76zznNx{TKr)B*rc`RVL#L2V0px^gJVCUvzPX32;@G@4zy9s0gL|ZSO?H3 z!JePQLOIiLw(Z1l-Q4w}PDKrhwxYGq2w_8FChN9KU&6O@(z5 zz`Vey6llN2csQ#jjsoxdE5ujfzQRr%sefDdu}*0-A>tt9o)x(ZgM6F;(OT7#yAB6e z@+=AF$x0oNMS+rO`v#MEAB|62H$vhu$f)iIwmbx-ogw0D5QKS`E*A{&*YoAHoQ&V8 zWy(ET>n#Y*e&|)JbVwT;KuGMJU>K-}S&K>>QprL)3PBP)`wD&GK}@EcB^DlEFmzUn zb`kOD1!!9Le^6eUvv>ji7U?3C2N@<@xt9T44Atv6u>XU%G2nJs4svajlk$^~Oj}1X zejNkfmGE5y-<9x?z7nKnJe<>I&sXT&8q41_od9aA6!BeVhcW@G<(%`|a=MFH&h^U{ zX}C&)BEBc}^QGc|2A65x4r~IzUIBC=Uv$Vm0Bjdts(;ay8ZakaW9Bkc{K;n!ANEs~ z^4UxE<2Ho$B&*{Ws)S?-d&W@RE+LCg_=F$uCr>XYt1($811FN=Q$X3G%8MAABCO4- zJfg(aUaGY*q7fX7#*-X1aX)(jwEye{kwtyAr{yAlftqcDa+OEQp=$1DFR|Q9BA@!g zaxaUzf@{?2C9YykHX7=yeKwwei})CKBSNaI)d~i5AE?#rEM>9Xb#1#FY!_n}3^z3H z>MLk>lW2DX?Y@k*YZ+J?1UuxY7E{GNCa@sIYMii|dMR9F+SrK`oipC7VILm^!HnL^ z7Z=xq`Q>UtVPVsK*q_gSp=O;Os+al8ZqcqLG2TPKC$r}kLe!R=IdtKHIRby zZpf4(hRjj-aC1eZe&y@5yb^Qu4b8OMmS5x>%|CtW?A|vKz?Wzs3RB#ljcQ|xR{T;k zWUS(s(TZPaPA;stmU^|jHtYv240qM~w8MODW74M`=2M$*?yS@&2F8~9#MDz44n9KI z;fAxWL|e_+5Qz5q4UCLFPB-0zEMOfR+#AVu#5kWIfX=q}^~j(P*Mk4%ogfg?iM8#- zI@O8L?qMxEvA%96s`=$oaTP=VnY>LIu_7zAx<;!=5z6qcnCHt;xq7r5q%J7b4$XG@ z-PCEP>Pm(+QYQU2X{W)(gPPfaU)z4=I5rr-%O3qqNT)4207*Yna_p#})u0`{iO23U z{MMfT`dIqslg7>t(*8THn@6ZKVk$bdqg-nyh1!^hk)xjwi(_kN&HmWBDU1`wRCMYn z_^V?ZJ&i!FXaI9##mGH$oz`L4nXlNRKdWuo04=O&8&W)CkjFBi}kePlpzI4K=*p zcsWppa*)M^7I+z~ZR6!&8OQ@%HIO3AaH+N(V!2=%%SM4x&An6ooM* z$ZomDhD`A2Jt=_9*-VO+l$!sJ(`AKER0W0jc*Jvt5YS9#zybIOexlFE-{G$=J-%Y{ z#wG&?@J=UJHo0;!+N1BQ5CYp%{$$zjn#>c03GN7QvJkXAs#KpH)~v!~@^C544Lk9A zwEKHUTE4{(#X|L-RoUUG*Lu>fTQ3O$6MhfkM%V&g@*I9uu`nkhGf1~)dd7y!i+->z z%89F~#_9C09cjU9P_QQG--V>JM#_8?l0Eb`>nkT1_gkS1JdkJWS6}BbFecpg-JyDT zcrI+;$8fH7ZyK*QRe^}blJ_UJ*t7E0T8tIs_tOPnU>ck%sR&mPdcrjZf z{_=IHM(7{N{I`kx1Bt&U@aJ=gO&k2dW(fYMcjjEa8&5A+7v&^JD~qOiIr_5~`O|_W z^lZHMnZG8-3C6Gz^l-bA$n}D!G1%GO)yvF>P?bRg{-}i|U&RvqU#g>q{Vp?%w*^VJ%UW?GWrJ zO}sH3(W^blXZ$---*Hwr7^yk|!#&`9*uapL8BHar#qhfpy-Yn@DP{nVQjyIc&u3@& zm>rF5o_d)T9f;_wBDiWd$C&GPKp*u#dCV?~jgD2{zmJd159On<@mV*SpXVBhTk^TL zFbM#%!X%Zl!qN)EFZizhlzfG}%~vKeJBxOX_sLn|(SJHx4vc;D4uRI8k}p7E!uJrS z`h72Jslhl?q-fxaKJKzSDXH_JD|nD;;Fc@TQhe18yH9>$NMyQ>J>L@J9rQ_X+x{X5 z@UFA2ALJdX-ZTkGkQ$wvxwRpELJ+tIm;gZWqCxUAFy<238oVdz6ZczbyHzTK%{_2XD z4(zbV?8N>(VzBE({{3$^k)i6%9E(8op4zLa< z*r7E-KF?yYV;&X4*n4m@RI}`6X2UqII6b7}c`snF_O|g_l>xbN%S2|z^oC7u=!nb_ z<#}S2IJUygmS+#_xh;JY+f~DX@HbeqY_@MYkp<@EL^mJKbh2G_zFb|*&zI%mV$06z z@26r5RcE5uLcLn|-bQ)(Xm2=x*Q07RT8?(=Qte^k-*ET1;Ns5w?~%)`kJ{dJ5fwxU zBOsElxKL~C>6RmBhvTN1wSN99Y20@?ov;*nRN3UadnkmQ(?Uz z=kc5xIA78OYvt3lfxjACTr{0ScpkbBL<$XGEh zWqOK&>ldM(g4SYtpDgn-Ql@(%pJt}*3wZ2h^o7|!9ylFVr~SdvX)=`|(;U0=q~4{W zG1r23;la$IT1!%(04Zi5?`5~0V%7=w-f^aJ#M;zOu~wsbwvlNd8y(Zlk5#HIBPukW zQ-##=w-`~hwMrP&p|Qvq-=?y$LS?4@X*7b^TNPQ$9cPWRbz3n76Rn*9O&*U`3uEw! zdbUaCjk7Q=jIOzw)B7n>9q9GVayVKR+b|S;GU!p2s#TooE%({w%m&c*QWajZ;f994 zgEX=hf#;3M{A~h6v@NQwUXK?~MrRoR1B$~=0Gt>$he!d$x8w5*2ZDdiY-nX&UIPE} zyry|Uiw~m@4>Ws#v}?7-g(*wq!U57GqSnSICu(0f32EOj{h~4OFt%Mf${LNjR;a&z zE7s*2i$h0q1SsBK*YA`O?F+Q(JZ)le*bvuZhr>!Y`&YV=m2P6&=7r`= zGck86yM*;FhI?=qxabR5yE^!WwelKcT6FQgy%?(-SFVaZP!&MDliR0*<-DqTLyf^P zv~hd^_GD^A%&x&wyDW9APM3T4K@i$%U0AbM4clmdquO!A8xPW(6y!V5ha$Pd+r=*o zoy?HX#R5&8AYusJF8Yz(-z|_jI|dNeT=oZ(vZ{D?lN|t9%`@Zb)_X3Hu0Fiy_^>qT z8gl%E6J1)$slq{+1wM0N0<^kx1fYXhGk;17UIS^zGrf7}inJ_GPY|_eVfMI*10a1f zz_yOD-EOd!hBYf==4bfTJ&8;MEORp>v!wU6y^V!yc)e4X*W^@lL;u7GFknvu;gS9t zD~9{WNAMgBRRi9+QNFt>!SMCck;lyAn@B;Y*{n#Kmvm9?Yg@j7Q)i~!F6DN4?t4#) zMCv^o=S*`8y~(ejQ#ZTp`x2w^Y;lP)oq07H3N8ujdW`9|U^6vBBqWWL1Q=E9RTIMT zl>VSm44q;97$AxuL?R^gmg8Jo>SU`B)7dg!Sl@9zH9uV!hzc06$(DG99X^sfZ=>-_ z;V7gqLtFE!6VJF<66UK}H6D)gAx+~#N@;NV#tRIh1zi8>Q1*+ifQ28dptNm~OL^XZ zkgAD`aGdC7AKb2knZs+~bhlhGNs(x@L^JvW7THm_hGig90!<(5vX2Xmq&&TR6Wx44 z+W^`Tt2vVQ`8Vb}_?jzGnn=RX)J7Iu-_|=3M8v`{Bh(IB{oJ{Y7QvKoTbuS!7{bkM zZAA>ht*9L0ixxn-93`l7mq5xKs)I1ms111=R?CJ`Ncr(LJvvbu;L^&dgsNX2wO|LO z_PooI01+?!3AmhWBahx^JAd1(rARG>1}znjzEEH}mCuHXnaJ zJm*}8PJKL@Ov2RPjUaSHBK_HXKGF9*FZ+w}vRaY<+pr-_t`h0C&gjJFt$TszZRWS5 z;qNBp;PuyYwKi~^HTeA^e6c2jB>W==A9J@M`q^lupr}?XkRTbsX@A88coc)vv!T5lL7eEV zkknt;{AwV@a5=cTZhec*N4kYC)n+7#egi!Tflt%EO4h`#>94`2nSm^2v}R#`*Xjyq z%t1El=4CWZ7R%9_@f@SMQ1#E6sMTn{zXoq3RjICArEw*sr^Lxon)19WP7`}VhBBs2 z!HYninY8MfMaJQ+j3u|%I)xs6kC7K?61o}EkFkAr39jPVYf__9O z<=0+Erllm)Onp}9_J-AG?log;qCz4WLItEd@arBGM(GPw>ZBP2$E!RBh!bxH1OS4y z^*Zr@Krb~%PG(S;qirp<6$r;`AX%j4*f zvoL{_SH+`Md?MF@*@3LvB_9ok@gr)j&lA`P$wAL@Y|}PGSn34WB~IYaQuRdb&xvzQ zod~C5p#dz@AYV_yf*{)aoub}rQV53<3>)Cx)*_Css^bAJJdFqZ(|&T~Yq=>@wR>s* z%m8U&O@rReNLBMdtaGQ`2MvGg-*xmHgUln5(T65e_Zr@pZ-ZNn-!##n5KBkM;VUgOs zcHF-lL(4a8905sL*^?_{AGWpQknM4-PM#CX&QK{~d&P9vbIXnWQoC*6ZO3r?R{8yn z-Hahc!7O!^>|hz7AIayu++bsqOhIEnnD^1YC?xmM2`N16U0|Sb$moN%AZGMcp$m*T zjs@0eQHVw3Tyl=NswQ3W#Q>viLnL#~KvVk{aLQxF7kvx13GI@$9sJMflzko^_&ZM% zDw{l`cUvkI$K&sK(tBrVi3hhkN||{*O{3CrDrfTnX9wVW!&reuAH%a#a?4f9c1i%T zugO?naDyq`Wx{T*wn)o_j3t1|TRf~X57&v0>x7V<)FC_J*iIz27ZY6?F9q`AgsL^jD=1rP^^VjHTVFS_Gye8)H49>ZM|Q6yi$5XE!_Zr?fTEp%q??O zbD16+7MZJ}PkM8N1K2UJ56v!mnDHr9E65p5CW1ZYav|5Ml^i)uhW8(2vC7;F8(8u$ z%4O0OA1F3`uB&wQt9#d%Iz!uKAdJ100g&LdEqJTt4$F~O{MbUBv|SB)NkBroj}hSU zXIZdzs|7x3*z(P+E3Q@ylIv7xikMPdy}~@vdR3`ioE(~o8x2?{P_pn- zrIU0}s*QxQo~j&F7lqUyaBh+~`Znl(sWv0W0EtWSU)0G`pLUqwiw$MdbyuAeU%KBF znl)#mnS5x%O8I~eSR==nE8J?`zZy7mE>E3CCw9M6J~C1?o47>CErV5es!$qGF+|qtS5fe#qKAX;);$ z4TFjiX4Mx~>%KPf-iIQg+i>~pk+(w>tAij25;rn_E0=bPAoV=69v?O9#j7TVTRdhLlRUHk9z^s+W5-NyVVk$DK;Vm3Rz z!w62fbk{|n^=u~i6uRZZz8T)~6F0fR^MHl+?`BL&Kw0eeDWP1Qq- z1H%Iq3&R;;Z9DTGgW(k%nvr{gxx>X3B1A0gDMq>lS3tSESjY>6ykYR0gjPu#$@`n+ z^Tnmj05hd9p>$>XH=oVajTiaDk!i9Z?jJ%dj|#)Hs?7}#1$Dji-!&m?qqBl1O@&Jv zHhQ=gO4GMYcgHZg?mDvAqbD1= z$W?XspxBM9x8_Au9=0d9)f;criHjuUo2cS%&(@rcl}zmWBlmpt1}4&j z`^f6cRx=vNt@U;zF4HH1otj$ehAmxV z4EJfq>(D)vU+mnUJt$YpCemS}ns`$lxddqQO_q)A2nfA-Tr5PJ9<4SkzU&yi)bN1BDc#8(IDix~fj5IJw?9TW1El ztb?5pb} zVzR4jFE$G~GtJrKfV1X0(e7o4OXU3B$HXNgZulYhPvm4yjt{nyDa|N@9U~*wB&_94 zAK_txhgpjCy}?_`p#Y=14L~~_VI^o-jN8qq#@wyTPpHPty0r~-*-s?4YgJ4)GjXUo5mr~+D&di z7+Zb>x+>bW1l3R+dBqJ{atz~hkJH{)eHCQdn>e+dKxH1?3tdgZ&N4zsfApXH4<7v| zdyYOQ-2dF+XLESV=zp*cZv#Plp^vNPbm)h`|QXEdZvM%+2hll zziy+B9T|=ZFc9B?x@Uhfo}DXZnf#^D1`R>q$vFz`(`3=5Qb$7}hlfIiwf7yFfudQKGqePOCmcVYSe6a!g?sOSlqG3p}5!>D5aLS z?j8>>HPpr0kJ&km-_blisVXfQj$xdXYPpC*W8#M0i-)jQB3h_UNl` z!qJnY9_RN7{GY%O*bjvlME=sB-}1a~!>;0<<$&S!um(C4%|wYKsTa~`kHc11R3sWm zP{}`0IXY(KlHd+YFCadLmKowB-S|IoBYrhlbro#~|~(5?h~@;`)N*oHZQh+t2EU{55$zTJmlbQ$18 zV!C{xt{s0pF??%XGid3emT|v7k6DFbZq$zBU-4OjtT;%+vYDA+i(C&a_T0mqM#dh+ z^n=r*<+9umer*wtE^hQ1f2NX>?xPx&zTL~~0f3E(nPVjMP?=U8-+GX~>cleocyyGl zNE6fQU%Et?%r+TMI($R1uyh3D zIN-X&jP^G6V{;Te4A@k}nHG^X`>Kvvoqrgo=369h!Qz~H?-?S~YDp>?Vs^8}S_uJ| z3ih}>UzSs*pnz6AhjIHN_COedAObbkvu?2@S3zRMrdFyIuo&Au>ddx{hwUG6BLq}L zr!_#Ye`R~^``FZVaeKPZr|E7kmbDJvTI=0yyr2@XvBo^M+3S`~3;?~sF1UMMOAV7N zoigM3NAAMpF36lJ7h0pyp=Y!jH(_$uC_A!bqwp9eC!MX(E=wUY7L^`T#djw&#M%l>H_}xDNZi2a0hDzhevri-gA56BL4&{qE@B9r~^Q zJ7mt3Gv~nA#MdNO)_&A>-*vI@pkyZ;8^IuGI7}`<$DucNL7;S0p2C;+<@|Cs%+J=k z%q`R!z6tT`rJ^JU-qZq*53_MZsZ!XO>Ujx4MqgKa`Nun$p3Q|;yg3_Bz<<7*NuY}o zQb51QtHCDa4~LyM5#z;YDjY=XtP?5Q8A;2KCnPI z*zqnKz`lzHtx2JkDAe~7 zG*48rTXSibsp`Z<74a_LL@H!mL=wZ{l{Br!0y|?uhYEO?tvc;7Oga4BrQaT@{-6gD z!dGe+6hMy(%^W+vbi)q0aaeDi&C39<-;47$dB+f&26jx%*gWt2_Fr ziGS$`$4~sqYJHT7Wm=L)Y2QUJ>97sj7_>gOd@y+a(0P5GH?Vm=UpyR5%F9`~sf#{h z&ql#Y=Y=~rWH^!cETl^N$IEgELXwd4ZfZWqI8C?;Cq9@@7bWAY=^KsQ{K;kA4zX$s za*wgt3+K8#1@e;L%uQozj^5@QCprk&u&o~b2dr5Fa@5FecM@^IOtbP*;BjgeC_Jl& z&7GsMtkp<} zjI*H}&6)d1t8#)q>r)?Mb1JE`IgQjIXcMhNP)62a2(vzo(q(g6q%1V_+QI9+s<=g~ zVYt!L6I@c9O23i{kKx9mp*qx1#kKHQV^4{8=uJ_OdItaH?8=~d#s;|qh)iMS_ z2mOX1o4x@HK3AwUP@aXOI)k3g;1)YWFA3qqoULOET*T3ZgGC|HKvU2e94u%9+U|72 zw=wGDW5p^D>pJSaR>hREbO)a48?L_V`VV2VHuZ4hKmujVC}vc#`WI=l1;MNKYn$R3 zVGkIzwPcB1>34qS-5WQ54R|wjYfauQZjJVfXn+NNa3F+=0>eafguk(gMstcJCsW1c zj3)E9=(+(!B~!A2ro?;qvTpX1uSi1^J$#s);rPR|21Z>b-~Btr!VL8RT5*%-727VITR6ShGPGqwgC>CZ;%`Y z_Wq{Z&11*ELrOIEW~?rcyt%WONZnxjuK=B&H8VnB=T_A5KMXj>h`7XW?~5@weZ;n~ z2+A?(7YRDIw?7sEQZ(}u2|=3*?-EkooTBRr|Jl$#HMsDF-fE3K1`2r{BU&*Nz?MZm z33()dgMYk@&<0MN3-{oLg4YORW~vCU+P3nmhcn}qZ{n4Yu70t0L+mb>$G$`s*Q&X| znL1f`V%#u@#m6n6XDF|C5XfnqT3NjNBnNWzsb%jUuqy?n23K0s?>I58d<&10Li@x* z3bc?U*B}CBcU+&59JZ&sbTg6{SH|#edSO&f_hhuCY$T#*d$YAHZP&7#83#DR4pDoh z$+VLz5b-y8=t=VY)pYK2`R9f{9dT;WvHLOUPs9&&oF8X-6hz)Ot99hauQrh*e*nzH zax^n~2-s6`sn!4(cPNQAgL0@<@H(?8qP2B*stpz()M7fCs;#$EZ9R=!wb8Zq;oK$kT%XB>ZY+S9%*EOt+QhXK+a8 zbrZ=RpAWz>o?^x}@NNH)EwR|WfGYUWJ91khtB^6zwaQ(F_coidj(}(T!66SU!-_08Krm6#b)pndRIhzfO!>lQx#3wQrM-UUL8hLU14vBif-3o zG>u+P>)o3bX7`Z$hKw)jZ4g?>Jcdwji}?gp`Of=vkCAEqaV>L&#z#p(Ntcjp!d$te zKGTya(X18xES2Z@>m1yl;;+7{5OVwNCCJ1TNdFu^&*AeN6x{F=ylj`!BZp<8RsqL) z@J|P@0B@fvOinLG>zut}D`Xnb=FMzX6lth)fI8m>1@6H6eS$iYr@bWiHy8ylp!hd7 zIADV41d#hN`NkL=y@_E9;osLRyw7WO(aF4s;h5GJi}m>RNq|mXs#MjK`kU6U8c<09 zjp%|UX_$PhrVA{shu zY-8ui3XuqN@O`v`iH4J@7UAbB9gR%lL&-G=6F@MP`s1Lg(;4>dQF~HWtFLCm(K-e4 zI{^YgbK!u2|0@^8)w~h>$esw$`Kapd!2yx0kH3YUW{#S53Cu?8(IAJZ1iG00X&OHS z>=%Wci+LZzzD*Tfhu~%8fg%H+mXxi7!1l+`A5R=b0j*Jh)li_7zDc16Yn;(l%t(v+ zR8EnfhNmjRy^jfjCa7#;8ZB=v)=pFE2gT<(4s5|Rt^EF_ClZ?_ zerT9JuoC^?S`YVVz2s|y{eA$IU=b#O4L6`iR8wH)OR z9^H*q3DhlcZcIGn;LHcdC-bvRo(MU;RUcHiEgz7o2k;oPayqKo7iE?A+pGDL`Pz@7;?}smQmmfZDAW|p zU_MbZF zFSX7KR>2V#Ep^cWJ(#%1a0b(tFntTNjfslks4H2+a@fjH=`CiYX6fm0bXHzYR$< zOGyM2MXT{_mx2mRx|3Qjb}6R7B%-MIzZ0g+h{d!C=P~rt)=mkO+b;*NT^4-lbam$$ z?9?PdGJ#m(4f5&Kct2+&eK4LK9P;Tw&CV}Z4x8oZ4FoH1ngT7Ad%&~LCTdsF*($Gv zb;h2>Jd}0G+-pdcDExjXr1eB~jxp4p?H@^yM*QVBXZbk(DktaB-cljZsRKpoBmC6B^A#D+ph-DhDz}6U^*JEd9+Zu{pIc zKxn$^xx23hzaxmGpboR!l%$5G2R!)-V!O0IzFQ=5hEu^=m~0;zJlq%aw>d;}+Dd%2 zodZwU|1l)7>In3vKjiY)}l26B_4L8XGzc zfKgfq+fo)4&wmnD*Qx?dfZKQOrojr71uU{#*)RX0a3B|uKtTw^R~Gsv2mF^78vy8? zqn%f51BEG^axEm?sxZmW7!tCAB!$H-)yHjP3`byIiHEp~y3%cb-09x^e8sz$ z7&fLoP`@U``>P5sknO(!xihf$1N?;GHl>2=Pv}wrpA$FV^<`(Eu4-7IqwA*hasam= zsN_&32c<5c)P*i};YwXlsS7A|!Q50S*aunnlMa?r#J>GeN9Ka#d7a&$>>a16qOc;? z>7?wd)fVcpCj?WgZzK4_2#XIjhd*%PGIxkbsIa0{Zb`I3M8Y-X4$x z`pF2szJ9LmQ0-X-p)1eE>vr|#+)4eM^lP`)w8WQWRuNU`^L8~_JzA;!{^e?vAJ{4n zARy;bdgn3XxO3NXyRS~ye=R49Q=3)u$#@8om?B{XqTMOj!a3MHt<(h;L)IROysz|q z%8FxihE8xLa#c=6MBe|8ym#Gh<46*O|LZAAIO{e_1VI!@Q5GrM-Utk|#`jx(nh`dBzs!$+h_ss50TSVn0GBPqUGBPqU za)7qQDe$>K6&&8mL?(?OX$(nM@^nT6c_aQyC;5l0TMopg^Xh|>|5dRNIRFcCSGBcy z>dRs}g!hw5p_oD4?W+%Dk7TNTIRLBr69M-mIfd6S68Swqhab(7RE+y`VhKA*^veGJ zz`yU<6ABoa1{@!*mQD=w0lE-jdrrjhZN#ldsK%h006%9JWv2X}5H@yS+NXi&usQFa zD=#~W>@7CFlzp{CYFe3B8F*TVR12}I4^Yx>Rp2*Zk+cnmnpcPyg+BVLv#oVB#$7l8 zcRC@2Q%vMCxsrU41=#+{e6KFk+*&`EIh6@pko#RORSs)@N!8$#Cotx>jbMcE^2V{%OJ0^$iWk=^UEKR!1 z55>Ie-cn>P!!ia8Fix)nMyyVVs4ie+<%OW^LXcMIXFpq32P82B##taY330SQ`pP6O zb(B?3UOVCwr6*rx6nN>MaYwHL-k~WRnF=*x-yECP9hxG7J;F{Mo!<2#57cfePzixb z45-+9yuuK|?tY-#FrSAsj~jd!EhPj+M=3_542(vZQixZ_?V|(@tQ;zpR{Yv>RoW7? zGEq(yNiDTDJOWkd5XI$1(K#jW_{g@SIQ6rE*1V^iq63e^ZAARHLK=5(1xmL8(%%y4 zZy7=lp_yC=HYXY3*Fdt{dyvd5OShX*4417dfznlgWLH{tT&XE@rDexeqwH9ZF)f(C zo?N*ixpMUpS!ME(NIDOt@K(#(`wb6iTP~H)4ore+MWON|}($Gz0 zZ%74~p46yMaK_6%kfB1ArI<{mY6aEQui82|yHixTpgjGpFO39DNfX2J^n+Ev&2K2o zS7?){_#2$HW|qTB;k;0x?^WH`EhV((U(cG|>YyK8+V7%+9qv28>{+vqUwYf$F2*5? zO_lX{yu<^lkBbJm4Wvsr@6#>>g60gpkQ?bFT@}|0^z=O9DgB|?&rh<3?SM|lcuVfH zI*Us+Z}{M2QRmjaJNj5x&vwG*jIjAZWKna>lfi_#f{MI{u3{O6WzBU62`2H>UPT$& zR4|F6FZH6yh$Mgw@^zM03!$)2i`kd6QC30N1%!w&VtFl*e0r#*Q_F#f(m?PD_)PRk zr0{Rwj&e&7iCUO%N5qnw7+H$bT{a1Q^BR=J<>S3qJ+Li82lN|fND%R_g^abSArPU7 zU{Oqwsp`5BUsIJMxyXK_fwybFZ{yiQi_y|gIJr{q; z0*3)p=IMA$CK3pvRg{Z=mSy1g+w0*4`+SLDoB)qyM%Z+nJ9Vn6L;*kEUQZS8OOC!VZ8~1U(re_w}NiNb@5k zjUg?SO{WRnz&jSDo9yWN--cA z#hVo^8HDZ(ZbuvN2B~z67lb0IM-N7x6g;cIdtJZ}5=HR(*lV&7LUsCfryfaQsjBgM zFRW_O7yh#oGAgLlKAl_@5tK?f;dKscfl2MQ1{nRdfvt=8=m<4h0YPg)u@sJLrZP>C zYob!KBx6#HTIs@umD6-9O8fR;>_odg2%YB?8~VlKaClk7OdZG_2e)F)VHT*W);&R9 zYG_NmY($^V{z$Lfdc6+B_P|0`yaYnms4Sb~>r77rYWY!6Gt1|_urt+FdltZthvQqO zo!t*j4S{3I!TQK^#cxN5%oI z^r~9Wd}QoUBf2||WkjfAqpWT#p)x^_&u&zl`2IMr=IKJ{Zyj7xJH4p0$VXT3SFEJy zzMW6uiDDVVbmHTEFBRPbtp2>gLcFXD%)_+;ovo-x{>{aO1DcQ5f zjGj*XFnu#!XcaK0>xEGlXEC^%^q)VcK#GH>yssz&yojVI^(`=5JS>Qc2VyQdP958AFZvnH3k9AFfI(E*9acv*x4))dNRL7RwW6<9 zXznL1jXkT4sidkMS@wqohCi-&P}LPCuQ1t(^D@B=-4hI}0^`53Sq*&vX^@N*g4=4~ zRz0!YK_+p`;|e!pi4~M^YKFA@D@H9T@?Gl?ENAEp6YbjLgBgjFkvm&` z=~mMecdt;q>V)tusGoTHQBZ8`D?1;1*XIk~G zu-Ld-Rk2>n<-AO^kQy^s6n`7#^3vh!z(-`G`aW)ZjD$FP-m& z*`%vXGrnJszjA_XIY8yj`z2jVS53fWdvMs@YKtlhDCXnt_K9im_v@1a!2862exyFJ zeahx&x>J$?YmI>3!ED~Vt>kGyABi%yrh6|0jSk|f%{J0}$A&sjOBBuSZFAgYU30{w zK(!_i?t&gj7urc_a_9}{CR9)w^yYYAO@8RHWf@U0+ue*pbb04V9)-ZNaYe)}Lw_VU z4bqIz2X*;P`leU2qo~_c)b1)8_7%>#kpBv!*EMRJUSA9BXrzIpeowOu?rBs{!Lu2D zcFm5g?#@N+f+Za;0^2zBX6m)tA>A7Fw-;R+l~>dTrF~eG74v~w|5}5i?B(*vH#a0G z)XpIA*vNgiW9auwqEGG0Ao6dALhp29mMW1`33Wi!5sM8(AG|0al)!*&Z7ImIn|78o zf>qWon|`8hS96xy0X1XZc9 zZa?*Q)H>B?Okbv;o^#+p7Tu9eVa59o{IuK2hC_aG=+^U>B;&AwwHS7(*@ zMP_Pu4STHRn!S+eWb5_PnY9f?{N59O?-hRU-My@abb<%%C#QABMi<;P2o8j~k$Ue> zk7^pzatCGZDIMV|i4)h?k|N2jMWEt!c1LteN@rudHAs|GfMHH9QCmvI%KulU{p8%AWFvOvbblLOdkY7va=});*oXZOuNHIS<;E893aKRw$3= zdQk`DY?H6BJxB(>F`2fazaEqQ@@`Fa(6qhEzdMfpzk_wPHPM5O%lIXVSe#1XrwT#? z6vk|SU3G5n#G^LHu*n@PrSI2hWpq=1LUqiq`qEj8{j3!pOGtAUX3J3Jz9O#N%}47k zm!n#pZ)9G#7!_hZ&-l4kJsCy~#$DdsEg^TE!=wmk#L|UW6+fBm9j*NARoz?k=Ag_G zWC7Af>{yMA=C*v_j`~lJLSg;_6+ZEw5&&sqM zU9Rff5x`HwI7cPQjK=5crm|arHdfWGoy<-hl@rtZ)&+@B0YymD69^O4 zbX+f8;;@2ZfB~<7IgEt}!$x~m9o#Mav7Y!WEQFNC*(6(JHY)XpIU)Xq2BQukON9C4JCb z=%+w*mO8}^;P%>__R7AQ`gd#k#rcqi2nG&<9CEcpulRHY&%Oq!R`!{>>=jtq6P=aQlzE7h;ZE*u#3pTqM5(@kCjfbG){ZPp$^Z;4Y}Nq)H9ZvQXeg!E zc9gaUh7()*A-QqW`_rtvkWNY%H`~0#Dy61-?_Ek!%_&0uo}9*ZUCazz-Qeqjx{*Tg z_`#pLje=18Yed?&#>A~PTO$E&k-I(!d_M8LQ(#Ahmt1XUY-f|B?c(yyEqIcyhi`=c z((uNbI~T~Mn5z!tO>ArG+;frJO${32A8cYM8FZHL<|ek9l5u@k6Pr6l0|4TV6z65az$9HKE7uR+4R0-KZ2_fBz4> zY_2n1!IO(6C0(S>7|REswIviWQqMx$V%fbsED6L_ZPAFs8h7Bk3JSS8w&XoGKViuY>*l1~j9~KPifuggXx0-Hy{drbSA;LDLNzSQaJI0k=Q~`C0A}Yu_ zhztH|fegNfu4xQUHtHAID2k5jsM+XRgyDu*n;I&{8!0qm6@C*&lnY@J4Xw4$R#NA* zSld>v+S*dVzfLexhHON)n)|KZh4&qX?3Y!6s1PiM~px5AxMLv&gOA>5_<^rc1sKJ8gcKE-~;E zZNsXDl0RnS>rwXhdKw2eUhQJj2xLxD*d)P^;VIukle3~A;ILRMiYfgTiE1-P$+olb zdIxrlh9m=CIiB~Ty%!Ryy?Q{-7H&RW_g6rN%<=Ez#`ApHhcFb`lK`ObBBRQy7xiLz zI%AYBpbPpPtDfXoEKj*>lcC~xzNi^+!6UK(l>>6eat0rd)=j@uRg z?UAt`b|(Xm?kjwRnRr;49CsX%Da6WBn@!-jxGyysYz1 z5}gBy1J5f*z@?t{Y#-8mUhz)UOx zd)9;k&dyYt6}yhTAMOYlbTPQnfO4AgpGP;IM#Em%@|nW&@qfRrgIcc(=)EQ8xtgFT z+lvNkM-f2Ig`{<$&f%zzJw3z^nX5%{QKr+{C}L&y^K~{u&tr(vBM);*cD{tnRyqzm z66}wVCltwiHmfW0`+W9RVCl!!(j}C6%$7|8rapA=&X)+u9$qPlC5j@SP~}ICRFy1F zi_0>rE(>y)B$Rp4lKR4Hh(dN)d1+GP;?h7>uLNxa52FoJ6PMn2mQr*Xyf9#C%%Wk! zQJy;R3uq#h4&_bD7+VyVw=U$mncV6E`K!>qU6?6T_XhPQfnt{Yw8M3eTY@JOQW&&@ z-~CRMexVZhBPCw<;SN+@!L!t+M|gY>5-Y|<{K&0K7Y45Ubc*6k^1o$p8ns~%xY)j} zl6fEM*I8PIsWRxsJeHrxfH!m7!q0A#33=@9zSl!524I@-%w9B zcP;7XX&h^5Ne_i*`GiisC&fkAl9ixkW6tY0yZC5y+~`JD)5?r5T}vsK;YE`zC0a-( zca>lf@?j{?-_Jvu3`!vZ_55TBVsw}uLbp_WZyZaU&9bFDG~y|sfXjExW$L`la7%8d z%Chnn^vEtdT!YvEyq@FMX^630QypP>h(TOa46R%uX-W*) zUs|KvfByVA*z!vH=ksvP<)-dRiDmf-OFs~~oH}tqDl8)4K&m(Rjzy?Nf zT|FaFc$w6mprbXlM=&c{n?Z488IJdCE3UP2*Y}G@GCOjv2%=em9e^bAEF%fV3*zz) z?7|SreRzbn!}lx;V7d6ouOD}>53sJ#OWc6z!!k=7f~32bt0f%kkyGdNg%2K_ zsX*V}J88$!6-xn9`Q2R8(W`JrgFSKszpw3Kh~#2eU%;3ODGDQe48MQ(JD6M|UCi0I zemR0+RWYr?g@7V97h|*A+m>O;Kge!3pVX`vIZ58+tT$fW*-=rtD4@4Uu#$#~7KZMM z(pN0KWS0SIj#2czw?J%@5k*fnQAI`+8`+pRumvrkM?xl#aLHvMNBc{RJpyY2REOWI z*pu40%Nj{x*(ApQFqSc(*OGxiW*4P0v7g3RLyxRTG$!)e&u zhS`nidtzcSzp~#SY`P<6ZiuOHCX~W*(c#9*T^;eUc%tpD{6W*zPl4IvFykqoyZ2#`t!_So{A9 z*zi5%Zlr)#|EZ`8EyKCCIT#ONbM?t|Th5wc2(Y8Ms(f?<)R^(^-<0g$Gn8j3xp#_9#}?jL9;!`mygm!jX` z+&WLoRNm<{d;^WW)mZ`i8BBt=lxX7MY6isE{P#Dc4J=CBdmptv|r5VN({x+WA!nyhjpm_mS_TQ zk=d_mbUCv4n0WjViLRF5>Ve9;Ui9;IcAe?iR9bi>q1aOihN2VY8-h=vmKIpy6L#Skf6;mN zAiVn4`f17L;rNuVxeA2$7U|icb=}&^BN=l@==J>gQAjd778QZ9LqkxksS0)Rm_h>B zz`Oy$ZE7g-16+NyQl?(Y$V;ibltl=5ei-Fe4D)`fy0zX03P(bS*SsqTYrSb4|3w3MA6QFodGlF^O*1z@(4a`1}UaB)rzUj zdd0l1{bKHxMCoy3J);Gkk{w2-68LN*VStx`Og5v5VrSSXX9l3b1Yv#dM+vmC`wm0s zT1j8Z;Rg74ollQHej#ATyn(14yMsdae8V}GXKqeh3BzoWgP~1UM??I$Zj9W4pZDc}xPwRc7jS??yYFLsZR11pv!%0BX*BC9=f`@4axwzo;A>~`0o%X;{RM^>#tckOv8)M$HN zYVXU#r=}`CA6Q}JZ#tN7imGjYX ztgKMnAm08=DRS#^Kq-GKr1|Y!32+M?>32wLhS&(+&QVRgo%YoobCEJayDyg2X_X_~ zMU4^0oVJU7aEmGVsgfFSSK20zP%PI;dT5w%AN1siHuQ6r?8&g&BjcZ`E;?1)|= zlEt#r63nnB^_G*v_!}#evQMnNQRZKE611s&zupFXl`I&txF^K{Pt<6ZGXyh||{p#dk9ax+om}jsdrXRy9u;xVF63lIJbXDcG z;Wk6aQj?B0?P6>nPfpYM10utg;P9c&a`7Xe{uobHdYe;xd-{_=X16S;(m@ujwaKW^nM$x;k)J|i~JVC4CTrtMH@^p^K$H7ZKM0oP#5#<2(AYpjL0 zDj z8{i|a`H6a|C_HGaOZ=IlrsoZT&<1i%cxbyLa1YuW&NZ0bdB?um4NVPh+$=*-1pk9% zNE^wa1kJBLCA}G@j=k&W<2@!H<$MU8rTeU*3Uh%dyQrAvu_r|C!QFSQ_(^g~Ge23v z!+sWvAt109|I_h(%BgcVfG^jk2kRGSy3}ew8E1Hm3j?d*KXi5b)OJ)`D@@&fb~SGH#?C~ek$0iQdT}wSutpLwzRpc3D57y zL!mKV)@wh8oMb{mep-^_9{yfY1dMCoI`sP0T(bj1is70IE(5M%t0x)M9SlSUR+k%~ zrIf!2Uw*W^<6r0zA`~Ih~ik37wZN zomZ01E04}AO$T()ydRyJ%~g-IBDB+hL(^rD&`X=pp-CsVH2e}Lx96%I4Ge|ZPmO(R zZi_p>q(T((8K+pj7P#bBnJI}m#!0_LQ`D5O;3_<0|EVsrIBHuHF1F?=Lk0PXhAa(b z_FAhOz)1PDaDdfF=_Ga|8lzQgD0s{*YV}q&IUv94qYJVP@8A>K4P5+O-t*!oyZS!< zrpZ`8$KY*rVnApFo(uC{wVtzM)4DynZ0;~vK$_0gdjf83jFU*9A^#V_QQzE;jK_NT zvY5f^p9`;to~_NpU>S$rULkw&L!s`dXuoZlf3kN< zO0K?@t1@6AHIF}`UZ%1zk_!hgHZDXfmNnqz)YVtKodZt$%%($cJ1wolH+GO~9=I0Z zt%|7F;A(3suH1_LSny%6M!+V%OLvO(H%3oFbstUaTPExf?*II)7ybQz`*9szezxxm zzkvI~fB)b7da24t;^_bUEfD4~7+3{I8Sh=OJ=?hO0)yGFcR#_~2#KwswkU+*v1E)M zxJ$(S`;|WZxCEWA#EaJ6(knW)1>JsvV2mAmdslrz1a6C=YriUM!kF>vk% zs1ehn*QZgF@A{1Q_^Uo`s4Vjk!E8D2DjL!^Vzqc$4oatNRQP{ zG!3Jo0f*6PYC~UXsK_{BN924DcTg+uVR&!E-Dp2|?5!=-sr4HqT*hI}*UN<%p{{_N z=2qk>dTalYQU3*10(}h=BoI*8PVlFExyyuy@-U>JQ~1+a z1~836!%;Ut|98{6Qo-cCWre!oAYEAEY?x2-S(cWPJUV>h^(==A-}7Q3m=MC6>km#r zunSuyyNs6dXL1^o0g4whalUlyKs#1fV0o8WdG}hR#z*xl8})1kc2CtS_^=|B4rCJPYG`RKQpg>8Jl8~nE~>wzzugF*@0Q> zirsn9g^&5M@iiIxgW`gscx#dIo;?qlQ#D_Bs5j}U4_Sq~VmgHDs9A_fG+jGrG0Zbkk?ba1c%T1g9vBBcw>s}(aZ;35y z#1U4gCF0`ybP{Xo=m`?cCY`jW)8+`U`esgWkeeU_b|x#{;56{=iY3k7K@B}`r*%NT zf&G{@9i~0laEQbtV4lgHvUDk1AQ?MmSOkBvtCrxt+SQ#`CxVAbodnAv8qD}SJ! zXF{0KsRgsdZ5pi=e@szS3v7!v%_zGP7$XFvi_xWwN{`uRW!BG@*{EyD+=vSH@eWnj zI?=?8lh012i(Z4ycn@2DCSsb#wzJA(YVO%-9I0R6 zP}}dIC%Huo(ab2XKwuLJed$q!pm$F>WYdSJbKbGSBho^qai{L~-xosD?sQ_`B32jw zSY;Cw3!`xygPmR`t)|0bauj%a`q90p@Qot5q=o9LT%BU}$Pjha?qD#QlrG!pH4|Rb z8cuW+Veg!IBuT>f%`*$|uDs1JX8CzON>QH5m)Q;@8SCUi|C;MxrT&$PU+Z>k27Bp{ zV9opOkl2+4namaa?GKW*)7>2$IAv7>!)E*3pXmV_TQUyMYxCK963T;6m~?QHy|$T_ zvlT{qi%yr(_crU`@h@CGGDpatbnyJa->4TCt#;{xI?-e8+D(YCo1jK|#w~>{Go=s76cTCRNrpO(0al^E2 z-BizIGj2VC6FgDpO?Ht&i8zcrwiA1H3rxm#1edh!k++YvyR=sKR`tQKdu^0(P`q!r zPEO`uwgA91xCZt5y`|gYk^ss0%n}UZCwM<&SCEO1F9p~A23%jWF4#@;*mW#bbPl}h zh!3*8m*HadY2Fn*N_j<*#;za_yGQ0)n0h(JceDJby%Nn=keiBY$NO?rOG!jCQQuQ;UmI{N`Npjt0T zXw`(kwXi)iGgGY1j?aFhs;oS@#{vrQgYnbCi8c1N1i5GuTYf=*w#6?}Y1Qwj=^*e{D|y*+Ud+Vwan(Ci zxrlWWXh^ndzE`hhhKnZw>MwdF;NUMT2AEZ_de_Oq31KkO_7TjrgIx^krKMC4Id~{!qCalqpCpM`AV1 zRkay3+p+DXKs8nuc5!b933W%>_-b2|urxANEWe5dU9m78d2+WX$N4Osw2{5CXcshP z)uqLuK2&(5qrjdBWm*R0y=xN33ZQjjQd%xS@RqSYO2I$BPiNznl9enI-7Z4uUt}N? z@fNUr%a)=uN&LltP`L`qDTX1S#qLA`Ba+e<&2ie>2G=ht~l57{Z)^`n(_6g6HX}I zs`t8Lv+P7rKR^s!`{7v6p}c8F!Jf6`W2+oBm)u8li5q2kU}d}Ty+G%auBz5GJY39W zP$vm}0F$kY5VxrrjC1691RD2t&nJq_Ju^*IN3boNkoO)QqUlE*Bs_}!uQ^h(0^5oC zV;4VU@S?vuME3@ewe623MDyeA;foth%{`IQnDBlWBd~G%h}-}e)bK$MJdv{UhX-** zP2s)R0&bo-<=iA43?&PJkF8`Y#bm0$c4V^~1WKbU!+7f%MPa{%Z>v~+Z#C(84QH_N z?kQmu%k@0$WGNX!Lc~yNLBUhQBRHBLTUPu(!y?Rl@E~r9TZ@>r(xiJdO32Sy3pki>b`rheF?NhCX~S_+cab(SzZS418(nv?zZP?G6rhcMrhg zckpa~UwrkV-RHaePe1!iB<&CO_Mh#FU(cWIij=3~NAmnxvIob&`_Bi@_Vz@@&-R`^ zeU?Dd?%u)k~>1WS%9|4d3WFT5=-P<8{cMmXqCV)TPdoCaeh|dQ5gJ?y((w10l^biZ|H zN7UKf{e3}a=p)c}fK(eC9PDC01|l2BMKtkr@D!Q`OrIU>E7U(==igPr@Q;l5Zb}u*}$6Mnq{5P)&)2Z{W)gEPOj(>5RXedY_G(6{__KF z43HHA;~s)>WNR7QR)Q0A$;F@qE*hu5h4p5sc!EMX#QpPpg7LdCB`foh3?VKO(rT2= zY(4kC^eqB4lvSg4;4+`%qYsBCzRI%V*VGjoqEYJm^X|%}&q|tjPrzu{gMZ}R)0Oo0 zVZ69fuLiJdno!>qF#%qAHCDyH6C0gANN=i{!L1zE9qIC61L^W1gGV%59_HyPcx5vQ zNSQ0KC(1Xn74x?|^_{BRa<{&M+wEN$e_Q-t*!b(qF?<)0OD`U~Tkjg&GXAAEPY^v= zP@K@E*Cf)C6EDDSEm;UBya_8(mj1=-|LQ{Ffis$3<)!Hi^Y}1=02NpGJgXbV;RJ#; zK-i6hihPVo=rQ3 z8Ion5&|lC*R#F>TL4cH9@fV)s*%N>FfG02pGxHFDV+1_u*;4#cN6o+fm0r`>wHzMi zbi|sFs`NMulKC=tN z;c!l2>({eQXaFJ0Udh^o%y&ux~?yEdCqcuFyq{w!K@ z9_WOJKA?5#W12V*7YAu}nOH9C0fIRtkXlF$9+J^}j@TI}ggXe1s`UWEau;X3KNdVH z@X9V^#)21G?)i{#=q*TlJ|wRYj_SY~RT$7Tktb`SaO0>Bf}?5)3mR3DM=-L3z{n07 zN7kp?<-i_UpJ+}Aq!?19?Z^U1gc}@LkkHY8{tchKL6NSF2%3;3o^lSP%gYvDyX)33 zh}_a23@qLsmDINvz`B118hRr^0v#u@5bNd0UQjf`FT^nVv@ZaAAde0xdm^PhTC!kD z@En}5m?K90A}gjCUFM>gy@JpJxRo=dU|UH{Ab;aDm%n8juxL{}ET+vL`C9a?wiMmr)>45-l>0*rfA?)N+hjIbVg)Nw|nr}UylvfBhc%o;Wj_wfms zb`Yz7lz8t>pmQy_40gWj^q_0VGo3Fx5?ZIHe~Gy?fG<#nI*}}$=+e5dEZgZBN#=?@ zs)p8!YnT&L1cjLC;kN4Kg`%xR6HC_S**Dfkx6hIB~QHqvxm%xMf50l}{Z_58Tk zz>kByH4GD!F`)Wxi@BxPZZ}y2MYCGHpySMG!LQ}WK?6s=?jTxxBnEmU2EpMLr44iF z!UN5bVQ$1)#CP-)xpAVTPOgn z_}P`JtWur$m?ZAxU#gT9*G5}m@6IB({Q$E}2BG1G8ARasy!{CS`tKdr_=K5G7zyXy z;NZ^HG2L{&6Jt%=xh-G^{gb7Vh=R8nZ|M_1wl}X*CLB>QWBRsDug> z1r6>d3K<}rgu{(7wv2I`qim|1R|IV9-bUCkyWi%xsLHAx+laX7INl$Rd1~WfTPru? zaRI+9@^O8Tff5Z|>kXI?9;Jo7lD3BU0_WCxqoshk#!!g>wYAba4Kl_8*x!^rW*EQ( z=Tyk16!+2Nli)b&q~dSKJC5;;+~xwfve)+=xp^0c!EE3G7>=l`fnn_30TA}Qs)3*k z;(_{nF4WXk_Hw^AT2T6&jqAD)G?`hzy10v8CNP}1f9~SHD@<4pSOl7+p&>_0o}*n@ zZN~WWjSm+LK*gR9VBFWlmStpJ`#gG})Y9(5qI<2DlSD>7s}p=wL8v0+_k zYOLH3wiA4)-7-S(vyc*J>l0{kTR?mgeFbM9BeX_#zrtoA$P=Ohh>r#4BQ#TXx4$C% zwk3W#8>y%&Z+VpyUU|!@JjRws#C#AV58E0M@4+_$ACVIb=HoZoZ&rK!fsp|=Fu)e@ z_X?PHj1(K=@IYNi7vveqW)syr0nrj&C*uDJD;RXbM{p1B8AsSw2_~bG^3+#!TJu_f zm>qC<*`1fg`wWxacUp{1ET1j@L{GF>X+Me1XXgTljJ`vGtL)&etf|*Bh5;+^ui45D z=ik4|1d}bY83gcxC#Ih{XL5-1I9;U96PBcrtB^Qzbtg>)Kv(xUp{BmlIqpU0OM7Wu z3f4Pc*=gpC+Bk*C4FKO7D-_s1iwF8ObnX&%vF@jTiqia!rX;$2W(=3jvFzJP4jqo& zS8a2R*GaT>zO-sW`JPB!d8yHeOVz-JR`+UX#r?P1HDqSsJ^YENu6EJT zpxQNE6B+vK9+9DiAmE3uGSbhP^Tb=+C_4~u$)#?wZmm>$r8A1M!t3^Dc&h6Ot{7xf zE4mo*wK+{>UF{^UL9HDUC!M)-K++oDB()l_mnq_qqU=$OywSm<=a)w&e8yow?qha` z^0!BmqRPgdK)IKgL#5$PnN`|xi!$qYWqyz8ykvSVkoF6H3CZe>q$;nh z0>6h82?TSui+MKd_+`Eq$yT{g_pl`I-SB!go@90zOp-B*Qo3to6?iEVWoxQT05MgP z;igN6&{O3(hSOqJEQ*$*4Ur{ zz7{6N1h-+SxD*3YW2{c}FxV<3;f6)|vqW<;NP{VKeq!9~UG0L|M86e9yK~xGbQ#$E zG{*N{aNp4RqXftTHP7&QH5b&}*tqLVtW89qY5Wf&#UGIrHVN<$;Ujbm#m+x;h~1&} zM|IPFae*VdW;EQUIrt*lH|EH|^i`9QHn^6d*nO-EIG1^^wd>pyue)qfeWwy8{p|7CX^x@kZ z5FbBZ9k6aTY=O9@%j z76WoA*%b@PUaZfzx^uFvEe7Oa;$+M9NPUJB&to9!Xue7hd* zoUxKKFX zm6q~>jI1vc6PXAsa2k3|PeE&CCRfAQFNDff>KSAB&=cOHmT7bJJ0120R0A% z&*c;H(y<)=>+-q@>Qi8s#Ty9*BKxlS&q{=-G z=_NK^JqcD{>FTREq?G#N+|o;$Mi99=?L|Xp51f*cI;0Mzq?8T`zZ4#TgRfos+M}<% zQ#Xdb&w2^13q8_rdw79B{29onfCDvlRSj8mcWsS5UgN-O>VW2Gt*o==2e>ULs<3tX zWoxkjt`eIG5^youtj6xfZR~E`#@@zlfO~ke4dd;km}k<{#r3HnKM}2*?_dhk;hW&n zvoBxe=jU0O%|=;OZ^3*Y5>2#f;VR`C9TIz616GVF34pqO1(t#LM$$~-nHBItfhj)@ zgTXzJ-F6OlPEO^G7%sdeys@Q0PMe6Oj!B&TV8b?WEcQ=ASoETb2-Sx2MgYIBUkvJq z6sC)k&OL`H*5%kCIDci_rD}QX2OMWlu45?KTQ3gw(N8C9+6LsZPVy!}iHlg~2t@y2cyZB@(Ly zx$1^AWJIXmr87(GoYn>bueD_oa%Gbd0#?ay=F`SsdDoGKt!K7hgGC;164krEVeebI zzYVOfq?I?^z;TBgpg)|Gy24Z>EL1o~C(tiKZsw8aL3L+eG*~9sKq7CRALBjPW>Bjd zP%8ihdgZU;t(UNKFfml2@$@SVO!Q={I=_1KYr6am)G~k(9mVJd9RF6BwHh>g|0#$G z^CC>bZiLB(euRTf9SH}HCt+l9cpDGH!LQ_E2($CPE{2H}#ttXfnRm@2OPzZj(B9yF z4GydZTeg)vv~%tIbx#jU-4sf#)dua|kB+N>)nLoEl81J#eZPJa2hniT{|`Heu3PTa z$^ej9va0^tDJ`AhzKFz11!0h0cUld=Z{msSHSMI|**=2Cv8!*MTnPC`9r^Vzy}lZO zJ>r4PvUI)YD=AeW&sPR!&2~bz)Qe}k`1 zDW<2?+wnKVabr}64;tKe< zxEVo{AzRx5_qt2#R=Hebg<5h^%<9#ew#%$BeVBz(!Tv$#IqRh=5LhztbcPxXSQ+Mf z=%ENr2Xd!qXdm?9=I?y3zf$gWoCpeZa&Z=39FEuW{_*i~C@v$K;7Bg;+ z&)nhH$mZ^48(ac;!71y{5pU+6h`9^<1HsRyHM4ik-h@qZry{&I-EQjga%WJ`C-$bJ zpjCh8y}mDaQ(Xrm+DS2T*<*uG9=j;rb4(hVs(Uuu7Gmg&uj|x=IU)6ROraw2SKx$2 zvx0NJ;wpKu74?L1O0}8}i&_Q&Yl<0sD*H~P30;?7La}n*iZu6q63lSqxN(MxrYoA6}1G?)Tos|)SUh70AWx$Psg;E$eOAV zqxvQocsW7tHe={oLk{-q&fE+~xOF-d5UtZ(lg1H;k+WTCg&W0A?||-abw>wNGl9{( zokJpa3MznFt74^n36uF$NiKD-HB&baL*0_Mb<3iv4$ZjpzBcsssTCmD(hj!wFffYh z1oiA&^Yf2(p>K7+{^%6fMgFLZIE8H>+o8gyA-#|9DS1CFX5;3ruR?wALcAE8!_wK_ z00ZXZvqP(3{!uvC-gXK4UgtHUy+pDNIy_F^N-I>`R=(4pN^FD6Y{QXk7)5skU)#J% ziBX7Qo$4XtcNS%i2E6TYaSIo~o3LJn2EmpJB4ZE8kMFT8UGiggu&12Fd<59QSd?e! zwLQ9?|D*e}9qv#~f1K{H>+x&_1{qqp3u*-i2URyd3W*{@lJ|7a-1TJBLKRu0v+mx2 zx{7MytkSpivk9ppLZ?|2xCSpuk)OLt+AN(~f;!jE5UTX6*=1Jdi&tYM=jJiG_5c2qjTpy+;9sttai65>KU=_;@1i#jIMZy*YKXAn{XGFgaY4))AI zJFLlg^S0Z>o3S7IBmn$)W8kqLup(G}R<+w-Op4K!*ffZ&n+zr${o==@T_~bhYE}t; zfEfQ&4#Uumu1-{a`Q4}QQ_G=*()uvV%KpfEc)-dA%DhS6*zTFz+X#D9T+bGI_6@3a5ZYd^bz7skLm&AttD@f`$m(%BjK&zzkp%F*LvE}w@~TgL1T zr%R&2*j^7uleDUI39FuFe%YLq6EnpuK;z2FLLr>n9>|pCsIh@Yl!vh`rpX5`EZ4*7 zata4pK;k-c!p>}{n@#77Rc&R=ZKy3}Ubr%3Hq>SNTfeT_l8F^OyiV#mV)%V&rE`HL z^#=#_MctzMMX!quC=&pC-y7be|eU>1hr)*>a^7 z;Fsp}COts>qQy!LVic)1TOcmV?F zjw;fL@)=f&6=8L45H|dq`_}migdP^ALqGzE>yvzJyA9fUgskej1O8H51!KWCyWihK z390AkFDH}Vf~hN|=4xshl-jZSmvkWgU~d0)^-n&qmJsC}<1h@;X9KPe@mu5EwYq&J zds&bV1~$$*3eT_?c1QJ{6Ei<$y_2h;%B{!vYK_+2X2w_#Mf`fRfgV`rQ-M;f)4^IU zXFEA_AyqoMHuP3u8e}PZx{QW%M_1o#2)A{Ohc(&<9Yy5J*gH4J~x#kW$78ex14}Jy6;W^kq9M zQ+43)4)z5e9`4ZQf)#wHvdAoAT|FXm3TzK%RUiDo^7EDKbL`$g5_rE6(}>w3us<|Y zz7)Cn@OoiSnJ|PmZ`Z&8Q;2}lmr@FUPl}Otqz%A*hkW8YunpPlSM39T4KajNrx(6) zgpR#RcnOi?^iDABk$XES#dU3n`g?9Wag%EuYii-BN6<>;wjvr41-ZaC28uOw5cF$D z3Bf$~r$zlJ{o3@YZMikgLJOsoy|i+4fJA*T?^_apHzw&QDJ}@9zt*m&x@1VycyfNj zNlH_}cda^C;?zA+@73|SE0NAokqM4c9S@)L@wi*dwhzO)o+BU9lLl_9?;TfUh_8H( z`Y5baEmpRVqNOv;%e*MzW`h$w#$CO5JYOrA6jR@k4N-Zo1Z8Fy9d8dvYoJ=XI~_9* zaXnPXs3lP@h}Z+2Nn|-upQrW$9$X&TBX6n&)4J<*4vmGDG0cz)k)ZB8D;KMVwG4~D zMLMjJwYtUjqE-y`Z9W?px5(}>@c7GOIv2b+ev8DSS%4N2$W-|L5h&GuiL#Y}c2XFr zRGB8(QpLFKV+desO3fF|(Twoz=El2*y^B9VYE(NhBLci-bHhF4?nfBtjU`*n2%d*W zaGg+dN6AoP{iZTo+HU7u#a_=JP`#ts!YL^7)^D{$Av1Sj;PtePF&>E;=K8}pqJ)6+ zvJevqqbdwNKfGY)Nzl~!<<;(-z4OpcHXAe3eps@gW3_dQQXaC=xg3aX6bj1l(VwTK z=na^#V!`+l*_W63WK4|e?PlxFchV}W9pZ-@43b8J0W|K}plES&O;Bpd5-Jwdk{+Am zJ?^jB%HYsugDQ!FZMG#Ox-0y{D2c7NGq`*tGlJ^xRx8Uvz;3W5sUoeFKTDt35=5mq@|UI;j!7U0ZsUjEzsS0l2<~0XXQsVW^(bH zOV_2aM^jJbzp8h*(q78timmB2=g7ukKshC>l~(Ss*FkSM!ZF_6ZO&|%Y8ahE1ntSX zj-lB=`y;F)fJ-=OD7ViYHx%U3ZGQcER+k;OlY7cv{~AcdC1;!qc3Qw?seulIBh;; zcTU)oo^$?44v&nHAfaa!A>T*NYa+oeBHbTZ8CnFltRyL8ovPYXGEkHsRtC9X{X7{kL$EB1>RyaCx)KeUSVnTl$>%k{S zHRiC2n!EUx>z?B_iyn4DAoY-6=-;xZ$F7GwA~(U6yO|wbX5(wI`4k*6uQKOV2Bj>y ztaHR1a>*A^bCgKon-5BVaU5y*{1UHf72bA*g0T&Fq;B)qSY;Rl8}G2Uqw)ZBeIie- zpqH5V(cB`rOC(#zg07MG@^lO?z73v^Oe~Jl*(jR`D&;do#T9v5y1)zO^k}F|*@~K~ zuqE;+v6gmD0grlh^s^}#XxWVlW)N89qbnBN8#B5=108N8Wj!$nP*L-%n7D~^eqZ0m zn$F$1COaMX>8=N>6I9cK$NgftzUL_!fT@#4_wAc>H8bx}Mpz-%`09g(triddDe@`B zf9;OJr6r<4%Z6(azI)^@IdYHftbs?4v%e$8to@WDS@=-ff&~Uq@xTt3u#heqMZ4Ne z*#K>WyN><`ujmadTOAfY+1{R=aw28k)J2wzK0oHK8nxsBFdenwfOVeSx$DEN)~};_ zc6MI>dCa_`th*gXk?-?$1m}<3D&cfhi>_@>LW*|Qt09*%hhU=F5szGq`0YkTWdqXEi!GpY{WK}T*ho|xia$3z89P>^Qt!X zgJ2424a1*(db<_wj2C6Dwk;GBNr3q(J5R4Ci|;WDbR4lWc_*gJTXL~J5VasQm7N6h z>4$VY&Sw`QVUH5NRNLq?4B3!iJbK7Ldv_)KNJ-xmqd$pX;+S&87|d5)2P$-+k}Hqun>jE-fPE@s ze@eq7CAl<12XQJqE~aS?y**@2aJtF1B@x4o%aVb#wP>)IY7zz65*3C`lkvLkb`W$Y z?t|#*Vn-EOW2*4=j64M4w-8(47#Isxrpko2*SUb5vh1<|g8nrfynz835;Pq$b_%f> z5J-uP|NNVRy_9Ad?m|xuiJWd6uB#lxB#=MM$0~lH2c{^;fNubf>fT#O!HJ;FVb(0_ zMHpy{%^9kvJ$r2KDj`U=oTEU+AK|;J2`Zm%u}46Y561vs8InbH*YE`gO?|-vV*TiL zAkn9~0wg6t`?Ls2{T?V^3cQjuU(EK{myWcmG);e(5O#Rknpne_52kUDJF#o>|secOg;=6;`=vV_BGx2Nh_LXe9BHPd8`MAu-_l$AHrohrZt z8N?ekXH`#F^>uCIeF0iPkwm{wXMuh5QmG4xe2HmkN_VXw18783N{QAzw1P8s?<=TC z%#gDsU|aVIg3-ANdL6b-+iPb5EU(h>fzOGa?k)iga)yzjwEzZMQ?OSGIbLfUPHJrE zFjM#2^Np=&)9u zZ-ueaW&>LGn&3N@;%N4E&Q3remzHI^>bi&VE%4GihkJwu($zU;8sM@u4qD~D9}d<| zC$jbS4X}7yAE2n&D^TJ%W6`;poHYATd)v3AF>`l+Te=zf?r5tnxbQcp<%VcCPg18( z_n503LM^G<53kuw-;c{=ea>YDY#u!@Xc z+Y8A%W%ChAF6heCMt*U*&|g$re}Zx?KI$TBp$^RNg5$Hm+74%Ka+7Xlu4wdv>os)k z2H$`fbjM!cNUV*1n)tAFUeVKF-J1bKcNX;yMbn}l1<)PD9m}<-2K%2l_V`rs!?9mA zV^0xwg7~jA{yz57Y&9&etIImOl{r#B!=GQNb9JmG6kGhO&)D%x{{Sr+-jUHprj`D+ z{CX*!`|t%sv`Vc4X|mi`xcAjX)aUZ$B%R`sGrlaevOmiVf)20WYCodZ6Nl9k&?Gu*ukrO9k8wr{iHRle9>r1R}dF+fqboS~osB)Kg~_rl7wla*UBa_mlmd)z zxv)S=65QlfKFlX%wCP-m-Dfs4xuff{B3fW9xXUyz`7X=GI76PWv2BT&uIjZ5mMGT{ zLJZ|mjFMIRlIwbr`v`)Xy%>Oz>|omB<>x!-UwF9JZBLYVkjUc0(cD4E>*^XneD1u& zIw#fml!)WVfgPW2e8!ss$AJ0s`Y5I_G+K3gD^*z(2zYNn3!o`FH`71dL!)WoA;D_y{&Gb?6UN8;je)kTe=^FoMDGjnPRnF0`+4Yrr| zHhJj~Drm-BS_TZaO*Wv)M&XiB8!EO^X3aAOMCuG(O`YJ=@6fUO?i zcIf`ph%S}!ir70|$p$yh=5vEJ2J6D6gpL=B^FYj75@LyU{)SPu<>JYGjaG+h4dto% zp|jAky!VIps%vPWS`HuONUVmitBWL9{%|c3&{*bQ zUiuR41B!>#X!YTRY7+(LWR_Y`qR`1$zD2=b()C`qk%_QmXV71qW3C4`>j} zpW0!G2T*OX%p{h#HkMjXS#dO1YtS@I?%Yz-k3f*-fE@YGJPe__0{65~$Ds0YFQj|O z7fQJH;p~D{Wn@0Gbg>p;i*!Bhviv`Z0*`n8+@1ZkiWPgQJPh))G-ZF1WwXEDhRec} zYh`+I;kS#src7*7)Ob*cr3yq@!{>$&xIydE^6RS89Q{0?jYS;Z&ytuYS3 zUemS>Knk-S@O4K?r?~dj`CDU{Xo8FdSTB6QdXi|TTcO9X3G<{A^DK)1a=3YqX^iL% zZ8N#W6w(<-ZdrUydle{aEa~ht&+we1tmD(bJGUNhin)Y0?{@w?bF&yK$UkWP((*|l zk}WONnN)zxm4$2M_spV#fYsb}0WZ*B&1LCi@voWKq|t03R|)~6Urq86vtnG-o564& z9EX=FZx?NCmd!-!42$t9V6)-#-Oe*!G2VJyt0I_{So5>#p_aOGwt61Tnq;EDOT5!^ z9PRD;5hWjo7#Kaa6^VU~*o^GT2#nQ*L#6; z;#|*Lk_N=LLFYJfXl44mRo7?J^(_)m7rj>`hcX`PLwhU0?s+z-?EnD~;3fRm`pgzOd@9QjsQcg3?;c6M}H z$J=I@x4N1FFJ!x*1=TXV8GThVVKoz{rj&Cv^UbE6QCbAI!YC%xKo7K(LF^hOm3GUU zQ)3TD6ziJ#$!liS^Daaf^>ou_uuKS;1M7ZUBR$u?kjC_A?RKell36s6KEk;>-x^#r zLEjwU!=_~IgEubqXCgl5g?49`e3YLmBL=w3i%uxZfibJ8r-d@6rDuxO#Vm&ts%g4( z>|4RvC$JM@T47Dc-=7LX;2St)K*p*UU1_5z%98-q=QgV<0VE`l48HchEFOI4##$%}kqKk4@9Z zHglRg&Own8UidO}r8CF}RHa6BP@amm(gxd}sjOENoeFjP7zz;-+QOI|e_!R~@hz3f zayNZej@uCHn%S~)0tWO_csH16yX1!yAKH4lXdZ&km)8YH$W%S}jlth1x z9D1y|B{;_SLV8-AK9~+=G5-xeyF}BIUJqWH<#84ladCp0BuY=aU|f z`VdZRoFX1S{y-Z>o{*?}W%6{8mu5Kv4zJdd2ztQ`Q2~z`2INjpelfjhanwwrUz!dx zF^Nk;&q6*hS|pV~dZ4Sgot&JmmHZr-2gci3A#VMAc9WGto2R<+v%7>x$f>qYO5#BM zM66_@FkXj5$|0CUR$jDOeO5lnR!t;Z4ctQ+Vxh!KZb32*%mWi7*-Dd)>MHuIfMir# zCxuA10+OvH$&kqqOd>06FGb|=mW-biM9Q6bpeBs;|bt!BWFXK|2E@2EIj~4hHV3djw8xFKDKs) z+~>>1k<-ZH*_ENuDomrLVwM4_^28;HRcz(a$Q`3F`*FUr8E!LX!_r8jl|`df!qb38 z+y}0XkJhe4Sz0!@j$3+^#g46f^6ELS=`6P;?&|TPdN0?ngXMWTw5eU7`4Bg}4A5_$D(RfS$QY!s>+abY7 zMfKN=D&m*4N~;I8@@aNyHCD7{N%gCPu})FdHwGl_0%JWog)Z*8*y$TJ{7OteoygJ zf$_HB*85j@e7ZXr47LY}_}{z1;1K`U7fAxPe6Pwv?oEn;Cl37_FC0&xUKbsaoLHZL zC_}Gn#p(|LfiRVJd`SvSY(0T4Bju}JRwi<+ZaA;rq;DifU(iM9L#${;&k7;1C?qA1 z{USP(0T7$LQ862{;<(AYNhijuDnJ<-nE-OSXlgj06h(<8qn#+p_TuOX{y~KKi8%)O zx9zm@w&~)XXdVkdU|IYCa|i>ks?~!I4WIz_7CR~5HNA`d{#R@^QA%IC13D#Pg7~FH zqF-a0&#o8Q$EEE-whsh=Kfe-f>p<7g_B-rkkhau+PFqT;qm)ZqSvpAD%i_9hO<9U? zFwH&`GaL>^2T1xJ`;NC74+ckdV-XmPy@Tv&w5>tMGPV@`euCM*)+p7&t{J9p1-*iU z1cc;61m9tDyTgMe!;D|d@J4^T(b2BCRC%1Py38w7(FTQO;sm`_BC#cXzXQB9f$0k< zEK6^~^;9>&^N?Y&JS5bR$YXdcYmwAjx6mZtr2r_sXqqi9i!p?Uq)Y!2TNXMEN-sS{ zPzF$0THY`e9)y(mnrmAu44y^?M}`3E9eHefT@mE5(rq`t5GKK^Fe3eFI`4W&m_Srk z>7{%5huwvBy~5za*mp=%X?pHOGQJQu#8mTiR)2J%U52pO4gsKejzUu&=9TnkG04AN zWccI}9dSC?=AeN4#nnAE*hNb&=&z6`)Dg}ZkpXV+(P<9hh_q{TVS}(yd&yHFVh)TC znj*x>F74kR=h(D`*mwD4lFM~+EgmjF*@+WLzMVjyPjbATDK?Iwyi-v}R{kQwk^-ta zjo}Y(s;=_66J1d8EN9_v%#OEIH))I1r4q54n(AR00iFf539wl*z~DF( z6`55z7W;wg=`brhD!`jlQI)kkd#Lf40h0J2he9_^irMQMu^|e~v#})s`8JX(r~<3U zsu_}7QU?1%Vhct67KWKYQajgr?*j8wkz8{VjGm;j?8)b1q`zQT;#zqamg82CGu}-$ zP;8NhcTDZ|iFF4v1e?Wyb0D=eDR2Kr#x*6MJOnqWzaBM1>Gim2m!(6)OCj;?-KuYz zH+9p)o<_gQH2I=&mZ0de*p=*#jL9L<(89z!L}ojE_%zekzpY8bR*=AWnzhDE9|*`U zdJAF>2cTxm{M-KCdVa301WtX371mfYq?X7CW4?A0HXd24#E)c106jp$zmjeWloq@( z>=0-X*hR?<_fc|t-Jrm3*|h`Bp6z1h!C;>XJ$=5L9rU7S&z>E?U%9gSb{)j&HP~;6ca=5C-fD^l$V}uW zKMf}*HR*c;JDoOL9(0xbw5D`Tx(gll3Lb1q+zTZh1gr1bsbZ(#!NfGD+-;U!`5gmY zyDrtiiS#Nwxu_qsZyd9nGI~v~CyTs`X2Jd^uY=bI)KsATw9%pD21A+!4?lUkw)Wdl z#ZO)xe)3(5hWSQbSB*ZIudT{Am#ShKeKKBK@v9WP5x{woz80|KeSAz|IW?$ZJ5b@u zzhB>RwwF`2e(J~Ot%(HKmgZ!jfI9q9=)P2C$7Pd|I|KH!e}&)g-e@1j2aM zw%n_oY2L|#DfNfN$cWJTPFWkFse`iERf)A2HsfL))865Cab1Ho(_iFlDgplR?&ZUT zfB^6SIe^XITNH@e_m&2tt}PHS;Q=zCq5kh%(V?YesA0a)tWoDH*36M+ppP?qO#8hW zCgo4ks7KF4$>nAFPUzKUN|f2p*IDIiRx%ZQ&F00d%H9b8+z!@%U)hg$T$f^p0CCUY zwz=Om(JU3|KoHk_gdvD`00>bUezE$&2Ns}A4Z8pG_WL(^z@&uRp=;$BceD9m^*<$9srCPv(g3#?0SJ zf}0i)aGSst!}oA2kbJ-)xt}fPMY*VA=NsWlSiGsDM|VK%yWTH%r@iFa;fe0^**Fs& zJnIpho`UTklgE$5LjF(1jo9<$VsnyJ2iv05REYU# zJ4(f#b+(G~>3ovGkWe&u(Wf7%NVW6jRv!Vt-U?$xMKATQ?kJ9S2g!c)Q+9bhPNRQK z7aw}jyJ9M~K(LJx8=doX7X6SxY_TYvjU%x-&||ViSw&sJ5(2FX4WLEz_1lB!%O74v z!&USz=~WheS&lAq(Tj162*7P6F{Wa)U(>H~bUhO!iN1UFE|Qs0kp17=EQ>A|i+Odp zvs0$G{fm5Yc|E+YvT{Vv6p9_=bf-cr=ZNGEBhSt>6sK$oe)INgL_(n(MSK0d zej?I#9&!2;-GzuxN1}_`Cq^=g9(utkpAx5hiqr zUw-4*+?BsFVZ3ya{p(+yEJmg!l7<{q?pRZKwOJ!r8-(6jUSR|T(Nj(Dqeplmfa!gi zPe55|LxQCvg1$#|EjI%?{H6$;qB!DmLfwiG;OVDQR5O1()|iEg#@*zf=`75c;3Kbt zBm96wj&YFQWYg_3Kb)=%Hc=K{)aW_A%QlU6BrkHzn27+>#g^h~EbtNGBS*N}!Sve&cAEox_FV#idMvMiEFhhNiQXf^{nt zWKlYjau%wtP<&HyjT^w0c){4~=N&wvn_Zcg)kTo{tw76FQ}y{9DAJAj%LaFR7FJ?w zt|02CAylg&4lrfxIR@{5!{7r4sQQvSC`mKsuq|kQT5yG&_~niY{+=?vyQbCa`=R)_!CPS#h`v`qz_3gFTQ>aHeBqWmlJo5i zy>ce|BXpp1n#-&=MwUwk@%js|%l-nvUM#U7OFP0rrh<5QBzO<5Amal?x7jedEy^p= z1+kJwvtj{pZC`zz3?!!iMwuGdKjgE;XXqH7jY(=eu0>p^0%DPQJ1X<}qG~Ajoxm); z$X;HiV%?m$1qow#{=~45SSUae!FinAX~-gxT2%-AWYAwm^7e?Bp<=C?ml>(%(QR7J zz{TkHG6Op+L4uhIG4_P~g_|PzO*UB(kipW@F?r7pk~Km6S%SUKhn2);*Ra_vO~U z-4Rw~h#El%*{JKfCOIrios`39sVO!o1Vet6jUYVoE$B?7xXD9Vq13^yLi`bHdTsONN9)>9t40pig7M|91x~HM_4Peb!)iO~(=j6& zTYV)TI2)UAi#B6fyNm#G_E>TT72;#oEoR?bPtJvqnd0$wG5axlPvMb`U_I0BR6LYA zP8$rdAe7^o3T>oQ#a@3hmNOphA!3Uzww2eg0Tqi$F{gQlN;DKb`QgX!zkBue>$6v1 zo!Vql{5cf@Om1bVN~|X!Vp%Q7i-GXz)3oxOECaVdwHU z#Z~rFi5h~@Bf=Q7UQgp&X4Um%;Rmsd)r4g`hU$7)36*Y`b*Z)n+c2J*T6!rHHE6MY z@EP;}Dw) zIvFcDhN;rYQ|cxXQXiS#dDdRQcqS%!1?IPvq)@eSSDj(Netd);{F4;M5-g+uN9H5=CAcV^M!$SHTir<*^e>J# zbbwevjH;`cSPURQ{h`XvuO~FdMWJ@f|0H?t7umVHCZ0Mc4rWXhU5JeU1U;2J_2|jY zBNiHt=tR3Lsbf8PUtL1v7f~L<&E?f0YO10h&GVN=8ga>m(O+n{W`wg$aLrfrlgl+M z!XP^-GczjLX6N? zau9Pn1GEk@O~L#6%~!A9{4?ktMLt%>sBix8`kPm;Uw;jaB$V{y*Z=bM%XgTvD{W5y z{PnxDci(>f=IrYqfBgPO+0(DfvM9;6){Sig$K;$zFnePKHR0R*Nc7*Krm;s`Del{9cER3byg-mkMBImImFXe2rePZw1e1s~P&K(;hhC!=#n@ zt}bYgAV--wKAAK(M`1 zEg&+*MIQi=)ngMNjVfs7qkD<7hC`OX6HVSNj>g+O$a1RJS;oCdAAn zs)3q1A18-V4d2j^sqlUr_hCa1`pc$7mHwcTrH&#strXMR1v!Zw9vs-Ktqkv@wrvO zSFpU9va8v0C3`stt9YbQB@@1jm;IzT9OpWj3GhGuhZ`F&yRe1}1L}0t2M7q2z)!jq zu7V@#8rmmeC4L`V7??o%8vC*n1E0DcLX)TLywaj@+(xlYz%+MBso!9 zA|Dz$wbnnMGZjh>=(tnm%a6TD@Cy}WQ`rE7HwNCOn0HxtaOzJ3vm<}|`oG>kKYsiC zoAtKUu#sE2Q79invqux$5C{>&QRRduqXgShIhO;<-?s!0H9M)>G zX%BblWUR=tf^;DxUknCGGE7P*!6~5O=h(TXaB`bXZoGOJ6q~v;ynu2_6_eKWu0}dS z_1o%1z_ss!0fqJ_s;>^_wL_{>9V$_X3g;_+#oXA0w&xouC+}pNUGw%_!pb$kj1e(08OsuuZI57U^;y8 zz?aziO3GWl%@6-l%K#|R=)5cCqDohu?W+gxPJ+c`vN%W63Q*M5u`)WaP8V~vy1Y*z zGoB0*|3qB2gYoJ`C@cW^E{ram5n9pz$Gsubm z9!H_8K4!PTO$Vs;@RSMVL!jFhx=ZKd^G1ofTPPErzRSrw8McZ4)%hZy8$(TegL#O? zp;Uqn+hIf;zbj*1M zN^KTz6x}6v1%bp~MOZyD9&HsfS+XV;guWhEXGBux<~stp)N@Fwxox#yHMT+gtnkKQ zB|I4?0;g2NYqLxQrY^7#_z=ag0YKwu^f#bIhwZ)T*0)J+PRPK1&B^@_^m~ zzR7}yq^?7`f4Mb)F@`d(t!ze1;ZJPnX{{f)9|(+WNzxgtg??SMts`R$u1YpHgE+@d zjWO~_!tP+Xz%aGR`WCMmp}M{2j&n$lW(#u7ND;y)n*l24ZDfHLS1~%5-DJl?FMD`~ zI4ZNJGJ9d>j>_B#GdY%pv|*13dQDfGPkht>3$NlEwVv$^4Uw~*d5iWuG-_wb3`RFw zjM0+>!+JE)Wo1XZZi`vaDU9_}sQN)#`oIP&NY)R`Vly{5O+AWSfi&!x%%s%lvw;mm ziVb_RMH-n>mRRNFwcIk0yCIvkqn89O%mgML&+S{tKz2eDOVt0kOUeoHI z;tUL>kSfa7JJ%6kjb~Hi2E}GPBv~j&4Af-(yM<+zXP4#6HdLsf51P@>;)?|6NY+`l zBuX+z%2ZF1b7whdWR;?bHtWK%H3TVc5!~k1yr*djwzVZxXx11HJe$UXC?_jLbEJ}z zeJtDcT*6?)xiN06lD=H=wj%NtW{tTrvbPTY?hc(NX-zQd*4)WTuhY?{kiiuG%~0qm z6uLeNdPwT;iWB}MoXkeWv9nHg=&0Pg_UwFy_3JXuoo%A=2b6}a_n#`$4(DvZH^3Xi z1eVKl(93e*Rptw{r@*J(VXSpYlInX&y6L#sa($Fp<%zA3p zv4pV80ZT6KNRyn%+!7OFa2BID2_~WTm<*6WnrfrWrnmCA1F66)nBo5aZVm*ioSqE7 z-E1gZ+k$1wsKROj;csu?GcA@>oS{xnuTqFzDka| zHh2N8VNC11l#zVG#XrSY_1bBcQRI*sY&K2h`X2fkois{pp`qfc1=;Du;fjp2(zwRm z$>^CE9G;tb#cJcNHEN=%)yA`fMk;tK=I2;J-;?84fmjk4Pagrh-P(IQV?q-zH9eGx zEt>Jt@g8>6ZJnT(*rT?aI7PFU8*vHeuy;&j5C2RTgD9dEUTEQ29{zh?wEGge;iG;$ zeM4M=6IORrT5!j};$_|##hs$KUhwq(fL!=b_r3^4;NQOa;fEjJm|?t)JBAZ$!z{@s zHQJPFo!w%n_D%QhAovW1{}w(UE2#H-p_}tGLD1EXCgxaUeNPj`?d>~B-Qt8{70b;R z-?4-SL!Um~Nuu7y)uZxmv&7RwT~;Q;{Iy)j%H`e+*mAX~wU@X$B8Xaf!s7<%f--Xr zeH{pu?~}_FSZuvy>jeO60Yx=4TD8OI$8mz1fbeP!YS&<+%lkb(^AwjHZJ%qrGWrRb zi{K3r_D~RO8z&H!tr8K3!QdpA0x77c&>}rMw17>u*=1y>HWUeTXOb;)gAT&QV3KX`(&{Y{h2sIq3_cOma}KGp7?FEQ^Z}>x2jeN*v}cO5WRzmGqFejgU$0}(e3s)m!C8Ef;$USHjBA)PXW{xZO$O1>I(pCJltkKnBUA6o zXtwE;n3&vxrAo0|&)LMCci;5#HH@H}*|LM@v83hjoa|e$Ji(-6U#}Rn`X&pVECsjx zewf4b$O$-Z0LX97r1BNW+Mo;_Ls%vm2ncD<;yfL|`VE@Ip)X}xqATThQ$pRrESWS9 zFvNi86)aawsu)^vEzDllU-Q@0SiMFSAC;?AUTMp!g?;ky0LCXBcO^Z`kY^!f1j@4o$JKA*nkh>IWcwjKxV$%t_!7w$_ZW)gzrZ0g4Wn#P1lFg(A6_D-T`HhNA=( z1WMHCct96`nPXc21^^~#d_q@(&}JY?=hB5OVg1HlEmPW` zfB61I@s(K0!u~Bd$RM6#1<$(*UmM8W)5eXj!WK6gW^50m59osjw1)rIK8UF)E$WQP zVe}45XxyOWNzH!?zWA`~weQIV{}FboZDSyv+??A4Q|zb0ocTgC>@O1vkYn|$ratb0 zodL#00!8HM0?b8WW>)%z`_gnQd3XTj-N zkOJETW|3lRX$=jX0iI`C<=a7;tb!4wIlsb96&e5d&D+?TcI$Jm5M49aPC4_zNDQf5 zKvjGqs9-$HcT%q5L$xikr#y;pFsuq1X6y4zyfcMADpC9iBWtDQpBmU(R+sT!#|z}( zPWGo?>X>8ynJ<;6f&v~nq^((riC3?9;7~}@+@uZjeRdT%OTN?|Y16!J18dh8+9jEp zLaO3g`=ltMDk1{#R&X+e=`pK^lNp24+I0^mDgGu6@B-v2ij~m(**|#k>MSO<7VBh7 z*v^xv;(H=zDFU6?)G=gmx*MFIpRr{T{jj=($$V?iUxYrVLVV^i0b>9C7|b0=DgMDn>x1H%ThYax@)%v>Wd@>}FyY%s*o#7oi^&;iQ_I>qPT>WRiUxMD zaSmK2wOLXCT|hYSMnK09zA8g&TH0RTfDqJ3D@Q{1@Iu%d2+*z?U1uUx1i2mo+9mVe zY(ViiSmvjlns`D?5l8s|X6fyo&kEr?jDX2?;M{3EiV>O9#f-$QYvnVhnj8NglVLo{ zMxcX_U&tJ;*Zwj!9U=Rh&m8yPgj-OSegNc0fc+p<$dfEpbVCIIM+cWhq#dqcczRzY z!H@GC6wz^PblPD1Yzn=}V6{x;DuRV9E*Fj}AFDB{nS#|uzeW?Zt0Nkwfh@Q;z@l2400-Zll=Ly_0l3w2+@;Qq5SDQl4K`*jKQbhaL^uzfHVMJwhJZ4Im+SqL zdCGrj`4lxR!m3V)ax)fiP?($bFbaw~0ys-zL%$o?Re)pi(Jh!*4}_oq9V*gU@fUTK zF$xa$N)TIxUgZH{5ihZd3Fv(k6sa2ZA|{^aZrRCU`0HAgm1cr?U)4Rm{>`O^Oq{mW zVNrO5lP1XaMzrAzKiWi4hAffX=M`cmN4@Wij#N;ux&%2fs_LECX&@q;U{3#D+S5N9 zF2yLlWhGvl-3S#ZKO-!$%79cdn!v^n>A&82(Ff`&smjK*CSQ!=83CpfiMqO{)gfs< zn4=-|F(yYAF|0EoS?D*rhxf-BNEx~t1zz9gMDKbwT+6H+QKMbCV;!Ia30mJ^X>(ag zb!y6kP7bP-N?nl7MWMVxvQ{&IYK^0F(@~6aF$lQ$H{mq`dIKxTzUJ1vR3qp$_iASJ zo;y*9S>&D+!c%18Cyb3z7BJa+e`T7Dm*j${onXiK7-S(7i1$Jn$H@<0)zD%~fN;qw zpH@16TLTJ~EA>Py6YEmR22ZIe;?x@TqSRH96)f10{e@I=gCzE6h7`t_!#~#K?IENk zlZ$kQ4>U~XwSo*cVM!=3Euc;4w|`WQpG^86HHyjt>#d1^>%~JUr%bWN4evqyXw5$x zYf%kn5m09`2LYFkCfUr0QPs^L0*k{%KP_W=e?s>c_kL`n?_cqzPzUS`i0Kj086=X; zlw*1d^AGLQT`OLV#q)OCT?)vEKeqG4T_lu%-ZX6H60RF$=ST~k2~W^8q4Ddr_vXcb zTBBK7DFVZg$rN!9t&;H5oC@Ys zd{1vmtsq|^$C$P#n|VlG+vJ2CZD@0QI8SkL5BU{7oZ8m6nuujjDd>Rjur&xlo60-4v1noy$Gw}^QTE@?pQGXVLa5!7wBgokM zbdHuW9tlqAeLsYSmd?>VXsZp)orADO>n(IaqXSCY$g7CfXj=C0RYa`nup;B$JURvL zJfxS0V0e;A`!fBQ0&&y0oy|tu_-p%bw$6L|JPyJ_N?#;19u-_|4^1PuriG^E`+Ivk z`_8ibzLQ&cvuT73BJ&)YKoj3O`O@DP2~mHLgGiugboX-8?*@%*xCr7J&5IZQwTrPL?P zV_@jPmC;%Ec|3)Mes17JA;2~)^mcz856y@AV!&YLx9N zwa6+ia$4o1IAXA_6`$c0AwJRSow?>VtAtrVVMI6`S78=vwNT%%rhJbhwd`WJlm`>< zfIzV|gUZQyACKmLNoHBpg84R{({*NY9%YNUW{io<`XZkS0zj`Kb(khb!Q{@6V#%vS zEv(`hdjUoh;E*oIR4{MbK3ZoLEYch#+W%g}bGKAHrw7SU9G%BNjVmewzkY^N$!tQm zP}y7zg{g|{C7{CYH4+G`?ixD)dSOWHwauZZu7q%**3Z#v168#|<;3yEf%gT3bfFG8 z&FE*%JNT5-&+j@X&1gwqUHJNizIyO=NnblBPG(%8H{w+?$R|L~9`ODHIdL@4`iNC1CORRnwRKHxBL|y&z z7nAr)&+rux4o#e3z5{0gaxG}$$mY*=I>CED!zL4hs_PC3{BiC)Tr0$XP9{i%lRZ})Eb0_Ya#DqujgGVroELee@x9ljP+))r8aY2X6Mn*$n^*XRi ze3QVQ{&|K^EW%#D{y*_0s-HhLnzA*|mlIHr=V^N|pz7mvkW2vE?_RxSZ4W*CX0TBN zi9}~+-(=^>VcC0O+*r2zm7wLHTZ8p*(w7oq}``dlYX~8xd&nvO$ zi)o&YX+i}h6V8xwuh0xO#~YMcv25xxrTm*@gaju$&ax^w=eGu2AgJ~R#>+UTR@BQ) z390yXlA$?yvBD_H#36zo_;$20dj<+5XUSj)QkU{S0)3wWeUCQfi;RgkU_%7V1U=r) z=?`512=L7f`BLjf9~G624SH^K%sv$$2phO)D5PZU5P^*i_dqAtAe6%@rXL$3!w$>S5mg8d${3~pnF&aQhxLf%K-_gc#i%Bcc_Y7(l5tk6K7DtZpQh~>8W{@`}2?zp{2F-^Pp~PVX(Z`kuxQ%~ zN^lg#R)DFkQ1I5eztkSu5!&csp!)LCBC0!aTX;76@kI zAcP%`NutiiF5NTn^3*Wsq~`QOsmV@vF7C`#9-b`(+mo%s-d=Od+lfHZz9gAh4oMFs zN$o)(`9P9`ea6<|PAAL~T0mYGcYk|p?f$l-`k(528UoN2gE6_c(URM3_Mcd=854{$I$$6*@oIa5z{gqk zQDTm8yp{o;LFQ2%8-g9{e7=nS@~W2O1@kjle;h-CdV z29~MQCtqo$r^`A4M0Z$zMVgNDlyXjZ!+e1Dcqh1ltsX}2POy<&I-(B@%_?g`5UAeb zLn|93lr{!u$>5`vylJ>{%QV)YsG~Kih)0zqQD_A=g%4SJF!t99yXR+kVy3}kY+BY| zHW=zKy?77l0+&F6D1&|?UoglJk8HZKIAcJr_^;`N(?_ACYtw96K%%5Of0@FN-3$#< z-!G`>O#r`7E<^Gduiz4}ljO3DQe6Jfx)T>$S(6B}kf(}=Uj0M3$)hZI`5^>|_{E61~0q!4O_-X@JIbemkUdT3#*?3(GCc5F5CyH~=gsH3evCbQ(? z<`MbNES=oG2R}irTXtcXd1tI8ps|DzQJZwcpoDeVRiG%K))c6>|2tIl&C6o!ATosV`{sF;elovIl1Wr=*+UQW(ZKi= z;|1Q0`^vpsnm{=mDYdjgif^!mml{(Xk50QI|GGzHVjfSD$b@=$8s!Uo-Q;YErjW8> zF#2}Yg@kVRf_JB?RcZG^FPD&HS&nQmk5PO0VfMr1TmO(BXEa`wHY4H!ZV$0K#v5DA zdDl5PvWZJc?7GBfSdwb%qR*B#Rh4~?Wv5=j=Sxm9rA!Cv&+sPq_^J`zkLu6y?)G@u zfdAH?$v37;nJ15=LWNCHF-GHCCm5G0 zjE4bApH!HFqF|y;kO3q7MY% zLn(eNJQ2b2zLEts2J3GML>LN&hfpZa8J#{lgX)mc04=a9!-H|@dS29v)8+<&bPu4}+`SAbg$?R?o*9gz}v>*3}6m*fNu zJV$SuSydZq;$~I{d5$40X3dDxdR|%w(~_ST@mPkb9K~QmR)%Zz6rdeOhEQKI zp&$`(IgGmgHi?GjD;^qKq|jL-OyEN zi}Jgv1FkQl{0yrBP%HYby0q#DC(nDH_*_bES8}z8CNp8KLb*GBUCHfAuD`NbzDFGH zQ~4Ib#P4p%|Ja?p?D{qaVG+Za_2F;7Ti{c>K#>gP0L?QbP&yfao;5*>ruL`}!yV6% zW5+1CF{E=gMNxy1cGzFXj6eY1#e?>ma91{_d=!1MUlDB~-oaL4dD7%4a*28LCROKy z>^nkH+UBZm44TpC_|R0UsDNdn<7Qax**evp*;?0LmrctYhL@mmd=?@R@Ek{IK8#v0 zcUmwYFdq0~oe#stU9-;;MCYJs)AIyg!3f}>XF(~V=9wUK&V~`%IAR;-D*)X}0K*h5 z;9z!Qc;3}eK;%@T!HRSUfn3`t8lCw6)U96KP>^qnpN6TxRMROw#U-^G0M65Ri274( z1VG%;b2uI@Ij?K-)a>t5y}qf}_v-bjUfmR_GLn3$n_VBLfZx8=<=WoVt$+C*Ib}$ALc=vuD^BOO%xY^=hHdN0m>F(%fCbde1)%t>-D;5-hyYv zVpC@Bx~!SnyAyuyU_*C8;T~Y_P>*wT}9j9Y?@$O8XRkjb_#d(C+3Ra{5 zHh9LDw{tY%uY)!_&Xt7Y-R2$p2VW<0$9}!(4oHmtsCtU=Av2nX7_5O_=2*;WUK=#o z(?oTgM*ZF08{<>pd4{j8(@PHQ_Df!{7(3Gp4m-+- zKWix3yDZv0?qJbQ)MMl;ZMy0Odna;jEp|3N;fNh>K*;aV5EuE=%#614mNxUKW*HpK zXE44#r&HH?&u;iHovT2%csa3IGX7##C6h?nB}CH+dK5S0PQz&lMeMZna44Q*>eM00 z14NdGHh!yQ!6X?axN-G4!EJ6RlhabU4a>JNJpIIin+})gh6Kqcuu&L{VO=yH z5}K^jz@XK)BQ%o(MFENdV7VC`+!2L(7EfpO9RpXCcIIb;eMA+g6~J2 z_FhvL=(+-3DS-JWL|7}TX!mA3L1c8!l5`f&24~Anb3TIG{`Y17BAZU0aajf{f9nZs z@%SHnzU1n^x_A}G?(LUSwXVVi$;b$^ZiY|Fo}U%y6Q7wW1y(8{mjS6O@5)^l6W5XSpbFoJ*5Ug^MU z7{Nbm^Tno~zaa0v$GALt8>qbjj61-gndr=>gR^uzoZ%(mJ2_1-EGe$JIlq%cpwUU0 zMT!egGaNog7nPTp;Ko>Ai$x+2cF01?`8zyR`G!p+*!fJwAS}4M18A#Q3J7UcoO^&IRelmfr z^%-=CgD8pWZdFf2f`MR99qME=Lcc7!q%Iq=vpxA-Bz$5MNJT~3N1)3$UHdkJzaxFRoP(XzBE*T+vwE0_~7NWnsc|+@;cTmV& zKV9;ae#bzXrZnuNaWe6tABCp_3=51vFoakSJ|-PIL)!M6_J!NHt^o zL-u12=LX(8H2H8emOC|jJFVVW!gN>$HUs*@C#%)XNWQx#C*IBv(>)~x_KPST?E`GS za`M8=QkK_Nu$q0;J8$mM$|4hxJ@T1HqzOh-JOw>@LYKy#M3AXp#m@dZR@gt2#HaRP zJO65;dZE|ih7-s-gojsN9pyP(eZeG{-x1f4&K`zG-qks;`IgBvk>rlAa!4qwf?j|s z)`-n&ohPsEh3MI3qyuM2Y%@0G$xb6nR&PR3mu#_b5pM#Zx1 zjbzHwW$gw{3T_Q6S!OPFADL10pM3oO=|liHZO&-3qm}Np%A}NadTCgIUc5x7)pTG+ zpThEB>U$F3j}?QrS=XW%J&sIN*cd3*r``8y{)UMK-(C7ITJ7~zdXLh3?|X8tI^f!T z>tj5bWFtfx$)+fw=lI;HJ^9O3vka1Vk$m-a&QHAZm6ugd&ZkFi7ZWySk-#S*3?SDU zT0Pcne|n9EdG`-%OtML96*PRLz-Uwkl@6(|_MI&`8Fm(gf`Fqb^~aG?+D8*F)IOP` zXk$Y&pW<1k`J^`YTUG#{MqT2|BYukJf}cDkh~&#awHZGwZ&q2gqUhJIGIdJIN4N$v zo_`Lf^LVmAE6mN}VXo&0z{Do+*q%Ze#~HB3F(AP}`&A6;%5g1(j5k+k~XXqDNk#?b0z85R6eLA{G>QTN5Mppy~TB-iWU+-1wj`ba#>Wc zpP(-&Q0Ze|aD&$&Em%C1bCy_6{8?X8$__kuog6bufsvr(y(&VDgLb(Ad~f76wu5Vy zQi&w~wz9z~4CL zH#3Sx;bz*dJ5cO<&VZa+f-`SSZd!O!&>lB=8*MBU2Mzj!Lzed+adT$*L3W*l{k7Ugfy`IYl2e zqKJ`Pbo884;1Q?GOi7*y2J-C&%BL+i<_5**54`I}jNI^fXsMuYTmrWhuOz6MF?ch@BlyQUdqm)D{E|NRB=psFO z?j$4b(k!8fac$velhspMX297_m+SOO>hyami|WYPkXDL}mqDEj@bUk9a>id-vgbWoml1Hx(yi<9nNEgp7PFa&ItnA> zUAd`IZsT(mZ)fp@BbnAqR&>2mhXZaFT8?uRtglbZ+1+)?F;F4!NWeVGn?b3EtQn%J zMWsPqvz`?8y$#VFb+{wLW=ASnang~;tyrauRVlr|rwFNxNh#gqP)~X~@mVB<7e2|J zjvB?^_c*BwBU%=;XQe7|r!_hAlx*!<5?HAl`Q!9>6d}rcr(A0nfFye+nP=dg+v#_& zYNm2Gg8Ao+a|6ZOYq`ubhF)Mh1HHQ*e~eWJ8=EDPfVMWVnOhiGImoF-Ez)G2XA5W^ zgf0v`SI5i5fE1f{O2ysxz^(6D-j(1YcY@4_*-m}|c&x!Yb z&tz6mOuUTvd7O}PC8R4-a1{xqiyje6+AI=t^{B0)sh{;PYqs*z&1M2=irMZo0fM&m$+KsA7h#(vzjd9MCiFSB#(}xA)zv~MbmliiargU(0K8(t}}Fi zrPwF6t|*Vu3xmS_@;Le~hdez%f^t(Ar4QV(Fq!Nb*q{gednXElX)RST)vom96` zfphQ1X?Ly3`s_2v`mBe`Dcm;{$-i@O3I@H9i z`f;r{Pv`jBo*W%#Q^_%kC9kGpE5O&!p!KLjwEP8Ls?{5Ao0MG0VFDK!C36fxRBzm< zKH{daPMcz9Tu-{qg`A18-$faa!X6&4I_wr+Z)@#Bp1VDT-3*lMHPp&a_Y{wH#kM&J zd|HwS8;R)9JUuEP`1sTZ!9Juw1R00wuJer%14&hmgNBVg-8jV@kN7T^#lGA9zIUMnM zwwrn3jTA{GGEbEuVTkrs8mDX&3i#ldA@Lrhq#48UiVXA1OzlqaI0y@}uado*nYt@* zYs@qG$QJ-pK&-#0WYvQ)l7^R{0FalH2hwuR12SZp4kfPzCm*RY$oulDA0VN-O zXNu3=;un#}F{4KWP;})4tw|LL1DlJo^p%S7&6JWL(bnfd^^G>1ayoGq=f<`Wbf=G# z>~f6EA^YKcnha7h4qDxR_g||tSjY*#GLM@ zTyJXGQCKX^yihVly}};ng`22F&Lm9CV*c|YS@3A#vQDSxKowkGtRwCQ2SdZS#^`!w z02$L%XlD&taAeZDI(80?Tb-&W8lSsZv~wiaMOI0$+X%25<(Ii~Wdn2of^JM^aLpxa zLAcp#-pjrTQl^5|+XvxAHQ zlbha!E(top7Kecti7hMC{?-JKHH4B=NqY;t$Q_+r=L2wZtFAnh^ouE0O$i1mD!FA? zDf+yNY@#wt<4JxAT?JW94@ujF0tX((1}!XYha9j4*$SDSFzJo`X%)IwX(|`iZWgB~ z`HTfTVQEc_1HxGg@4~=oO~Ta^D;o5f2O&FNvL7#T6Fq?(^wt|{e?cl^Jz9=Rmg#V{ zFRxo!)g81rNoS~I)E#okI8QnF`rIDwYelGO$STusJZ>Rrtqem^VHP5e%uX=#4y97W3rDh_81xi5et)q!$6*n$#(gI0s@saVbqv65M7 zkx@QCW)^y_ImL!?@@A!tb0EJr+%AgVxh%Qwiw;*zTmKv?ux50NTY){z;>Skeq<&Gh zi@D?VsU}Z>Z+Kd)AdaKUQ&l#EwtF_NgPY2hE4$=f6DmfP9t6(F92(H>r=kvmhU*XjJf09|&G8VtG#PbuMz~=bu zgL?-L__!85F!ZZ|p4E^07_2VKIC38zKH`rtJ}p@*P>`r1uTL0i@J553Bv8jk6yxDf z@qlg3f!9HOnOKs_a+uq;nh|K06ras@QSSMS@Xtx!nA@@!Nnpze0|aCB$}rA^r3t^!Hdng!rk2^Y3yjME+Zx(0i1=@s9J{d6PJOmy z0c33vfOxoyAWiM1V=S$k!AFA560~`i#fI+%-GP%^)||`v2PY&xMDbuw7Ibn&X|}T> zv8>zsS+*FRIW;)1*u!{fu8fs8elabEa=jwkSE$G_LM!;zjZX~*?>TUei}Js@;ThZ6 zeT}yZx?XLKgCQWykjh=Z!OB{`YF`I(4KSVo$3MREjj2)nv5_TctZ1N0HyXGvN@lpW zV`UDVzy~hbsUH}EwzR_pHp1kg7mtD2hRc@ORpEm&E{KZvGNEu@`6Gz-jWYGlpiAu) zFTwwgSSB`fNO4Py1R)y(ng#Tnq`&I_9XVcY4CW|ic>5xuZQSiD8D&XL%c0qfBTf4j z5B@;}>a+cXAKSsXbGn#Oi~5}}?{!9bo3i-KLBSTS?pb+TvqWpBN7mlTw?&LO^aGDy zzBx8q@Y|EKNo!K22HcIZUCW%Iw^o@Hix!5PnA7p4@lxH?JZPW#R4f?yl#6pKZ)t@M zSWMZloA07`_y+SyGkVwU$k!f*rtEZ1q7zdLUqljrUmIgZ;G2_&*OIZkDknS5mhiMh6juzKS|%Nv^wPkxhoyb8}DDFr{$r zY&wna+P-X1BF|E71h`=xIo#&M0io|}|{q~ou4OZ_cdKq zuubO(i0j$4b*tHiV`BhL@UuK8e@ik1Ezc8u-MK6OGkOqm#_}hNlYo z&j>=7uzcAAVfbO2FcWk=R9h)X50;~X;J2P3}J5jI!!~HV?Ob2O_ z`|s^kJk(s`waWo|pqMp;aq(hYC$YL)LmnX{s(m<{u`{UpzT z2|#C?=o6~H!EZDuz2i~Ung>-*y5F#ccQ4h|?MV*pTQP_YA4gqgLSA=WEC|!nX%wr5 zG;s7E<>%By-7rsWacpl>njSCH2bhvhFT2UH<@J#@bHbDCFAf$bvjwU!Kk^(Lk~zI4 zC-0@{rra-RAaEpL*BN`n#RZ2zOPGaN&^6xXSI8do17Sx&rfv_{IQ6rtD6_EoWyPTG z@nf&gW@+(AqRD==S*p!lZ-$kuywrLgU%VFR&{Tm$X}vNrE6a9=%z)*Qp(u}RfUt~& zgksGAs3ti&9uH>pY=#QGLjiJa2K~3NdzEs%s&YLSlq!%B%r?j_N||;%CO$rN0wQOx zRwKFg!m3w5?yZK*o3h)1#=fpZ+JsEK1J(k%cLV4ZXj}Pq6L<3k_%I#fB_WrKCw!#L zf#xK*5uV!9h>{p*#^azo_SMPA#By2bYQryF21gGif;m83&pVB|%$-=m^fHd?puyx+ z6k(y`!Xx9UkG_4xP(|jLJDyH$I2SrKqeJ8%D4#j5$0sj`Iy5rPOi>KbdesHQXQ5ZX zNu47F*;>A-^N%BEB_b3eipzB`c8wl0!U$&eQIFx<>>C!TWlfNHEy6`h5t?QMn`p)~ zqNv$b;s|@?1jh)kuITX(LE)(tPtc*8xCvQw2oiBw@&q* zt1gcaRCz;EkDAmma)5Pb=R_*@C}ra{Yjj4IBKCn8G45vCa75fg4Wt*fS}pv5KTjfd z&}X|>>4)AGR@zbpukaSpHDXv#H+}QSdR-fcQBZ z4~48`en%c-AnqiME@7BtmvQbclS)K4@xzjx#482 z#HZxWb@hE@8RHN$HY3IZarRWKg|(Dl~5{(M%!TyOTL8 z1dbJciygOdplp!OY3VX1W*TK9cw_I(gUu`FBhzp(VJb>;VD+$0OE=DZ!ypukPd5{& z83pq@r-;kuPA)sFSpo;7XKMtz0hECHezbHtv!-JlEAE)D!d}f zu2Dka6l0vfNt`bWUfyK5JXB}|uQtcYOba~b6-n_vmmh4q*a(b1!oZgKqF*VtYSSQE2O0*N=w~(idKGM>@ zC}NC(+zL!le9~IPZ}{?vG)1oY8r)* zD6PmvV{%J!S!(q>q63*Q(Ne2-8*-7PVkR_0s>s#zr2O?-I|+OoJ)B&HnG4FJFm4<6 zGJ|-|g4`?WE%!Z%No_-!zO33DVCI|PctUb-KIt+q)Yo4&qc^-D@mV1WnwM_kzC3Y( zq)pPB6MOtX$2@#dN5&jy*$fTks35)VYn?6VqPb#+;iRP3mtqkU-kNb#O3qjC4+uqn zfIp%q@DFH%f8_d2N#>WbnnO)0`I7&X*3`1p(5lK9_;y&lQCNgE>EjLmiP&?6?5@n? zM29~5ZvymRR-pf;8NFQXlYA#U)0dL3 z0Sn#^{Wo7~BAAinC=B+MLQ-GL%^mzZ4R;mP{T*Hfou*@yc_kM?{TNkxP{^@9O-zZ;XkS zw?+GN43*ToO)Yj9Faef2HlC)XgVBUdY)u=yS`6*26H_J+oB@seD>t#sksUetY&g?g zuEHA#BOz`RUDbwH^OTh@tux8|Igcqc-4>C@n0oWI6nvIgVe9-SyE|MU0>{AZFyg@2vZ zb-Pk`ndH826u!t@QMVhktLpN+#4@Yvc5j7qx4ge=;oSX<{&vgzdmEf@*Wd2S@m)>l z?#l7KO}pLCX!lP2?cRl-yDP`{Hg&t7(eAqawYK%aa!K#6b(&F+o|)&n@E-l_$WQwS zJ^$>OECPF?WREe_u_ns5kW~NiJCanlsoVXGcE6;gx)zChXdkaz3`fpM7Z>v<@LELmcL(Kil zm8v_4o6cv5xqrD*bq8_N`3y1lMMag!DW_C*eL>dc+?zzzYxIM@QChk9+AWb>|GfqL zH&d*>khH4qZ}&44jo(1Ax{X5jC8gDEX8wO~0Xx;2RG?>7Zvn5e*)24x|NGy^RR2$E zR9|TGcWW8-uR5msJ<6!xn?@BJQ;C>z$5dKIRcln`9#+AjySrQKt$DYWpQY#I@3J6k zG8=bq67^@P7}I4wdmqqR!yqb8mc`03#mq?Fph*$>^dT!iyP~P1XU0=84j~kJ<*7) z4d{AxuRTJp({FEp9((oI>U&VXWY}**fOVmP%mNl@ICg{iZVDie2w?I_E>QNd9$<~b z_Vxs$+l^sbU8Epwj29*b&_x^9`NG_}OL;4w=c?@{T|2w(%41Nr{mYnSLVOXYa+BCR zUH%Vd>6FC}iJs&l#^pRWn29i-&(IheE0{Hi-(u$eqHPY;VLlo!z2+-=(#ASD@(%C)ZN=O0POe}8!n4nBwzvtLySQ&B3+caRpZ|GM;CVGBZf*JP z1;H1R1iCj`7I+=2?A-4{7_>ul-(c)EgH>+PB4k{+_8Dvkaze$MNEf-{n%j_-1x=Bx zR?vW?L4}zDi5tT>{5_n3s?ASk7*B0ds~0oG@_%FDBUkU0@x#Q&{hZvw4ov0cdEJn5-O zC$)|W1V#puG!r`K!2?Cauc82K*#L(5Ve{`Cz>_xgzphx@k;(rm9Z39FMFg%I^qNBx zRI_5ZSes#@o!q9`_frHI93K^iCekWAc^A({cpiZJ#pBs5Ue+OD!RD&Y)2HG1zmWX| z9~E+B^x`3OIUYh-heIL+v`0kVrR>f7*j1qj386T#bY@#nME=!0IcL2U0W}oHn&ND; ziEH=0(kb9r+)W%eulUI1;vgEQ9}_wp8Kyv0R5)0+=WgO@e1NQOcb?{LNai6qa%ohG zIu3tv6cIohMsl9v_7l0!8^#b|n}W2P<;_7vhB&eeF;D087(mUO64hLmNwITR(m{7K z$3>C?^t~_>P?BT~1jsdVI7u)-8lBwmJ0USzW}~@zay5<8JYOVvSlOOR**;D(bdZ8X z$I;XVrYm%Y6sjnh5b}N=y$e!EJUuO>vFBVR9L_!-kEKLjD3Y9~^FktU2pZ&9!ZrCn z0Gfp|w$NC$>BfHoN=XAFZkG!RiQ%p8Btg<%iwI7&b+el`$jytRs|MPXmK9rAH5J;4vWqaA|c1BJ8K@RzD*~~=h+xU z*hRO!+wNjoiJL)x1bm%u+tOI<*({AG(bt$UCoengyWkGj>fgn@fRk1O^W*&6v??5@{ z=|rW+S2jJqQn2F5Fgv%v=$D?Ah{S+sRHr}a)DHB+F3~zhS&vO7dJAyMA&LenfyJQ! z{Q<4)6AhHnU0#WjPAQ`%kn}N3C48PqYAES$-(Mc% ziMzL-d}ZHlF*^&?_AOu0V<%&C)Q-$*#@K0@r2dw-U(~SJk5dYGL=?2_>O33uDcBN_ zt}|lYTbCB&C*diiN~*qZjZTtO;rF#1K_m1#F0rH>BPQC?CZqXB*q?0eBRtp0Cd<&!!(%`wcM>CR!C z@KzDHb(G+i=Uu1S+uJ+gIM(!95zGQe?4Gox=8qXj)p<((Ug+0P&OvirANwgsCWcKI zJ*C634te88Zw#eZW)0)Fy#!)=Pkgmuf_M(Q;TgsGC-)l+~E zFG%j?d~ecEqHgb?X`Tp+-RzjhA8A88qki|7(Ffs{QU8PGP~n8HNLf>i;l|ITHICG- zLwLojHY%w$Dyi1@tMyB&^{JX>=8uNkvX7b{=7aYs$~PqdA3Pvc*UlrSDv=8dp_2a@ z_M?a1`Vh`Vf)AtijJ(wFSOiLag|s$vv1veki}|Zz-6LS!s@;uA{lCWJbhrjC@1^Ia zCgApip5dh+d;q$52f77K3GnjrvVFPJ&SsEbaJ~$#sYYl zoUYv|%zvH3V$h7f=0DH)&ud74AFd>o66wDU0?}oCt+Gab)-#pW=Pd6wjG=x73P`)N z^QdQ6#3>Wxa0dKESGbdqi&fXhyyEZsX|MYv=1?J6{8| zuS?tc+HdFUTeS16*ba98S!p}Z{C1wL*^V$`r`_xJ_JP}8H=q{$eAwOV!OySF&(6ah z{(R<3kGweVF3=1~^PpR-`?NM=c~j~rD74n%eN;BBJ*?*0H~B@yjG%xX`2};)TP!H+ zOH)=6`REtt>!;}K5UaP(fEGLZoo1Bt@4OjZ@E5-9dT2X+T}12+?LEINdQ{D$n?e!> zJul?tC|Ej}cTvc@FnL9BWyg{pY<{YaNw%P3eJcWHIfMV-YDQb|C&$k}@%IINH@2d~ zpjKSpx~Ud?Kk!)uQX5+Z+KyLJb?m4*zQdr8gFzqTppW@$e8ZrR*BJC$qgOWQ;}wHG zR)an+NvNEZFOG1!A$JW2OQG+))#Mv^KP6$ zKPEGLSS=nUw;eQE&pTbmh&@y_Sd7pV-U^1(uP`dD(66r0FRieG1-!2P2F!3H0m9+A zkpQbJln`JIUivq{a!pqJK0dG7$++EnEKd!6D!T^WqL)+gv7*U*OW)6wLi)hbUwjjB?Z@Z`z6JI@!SQ_8Q^(vOvnqq729~HK@yo)gk$)# z-l`C&5Zu@|8m?=^FB+VFl^lsZjkdn_3w3eq52LNEV6#@yM~js?RNwQOJnz*(b8D{kQV_c55QnN3D16riX_)X^K*KGX zL4MkPS>jGv;%-^uK_L;ZqqZ6Ww}xmpinc{>rpX|U$80W+m(89iB2~-;2A^b;R!n{5 zcJmMv9p);1kIj1AgPj)cVA(F15fu8O2c%SVhDT&9h^tKsiskL{S}&N`l%WNE+6s{< za@^fuPj3ahL_=7wnM!V4yJ@?jSi8ZUy8t)OK(5um?yVX)xI+sEcWPlR=sa)Ng&uPF z3as<-Es&P2{<^R)ZUg(G40gC~h4n?ymvEd}VFu%DlH71~ZkJ*MO8_}Y^!Gg(dwiD- z)6;Yi2QQJGiVaM#aLLW=sc$Rt4x2g=8?|>Q?HnVWvQ;0O(i9I6<(d&b!@QBp8-;m& zm)8&S%z**#2;Ww(#($dLk@i@#6s($;&)pNxH%v>BC3l>W zrZ@2<9%rL$k+0n)g<;*+uB6r=lczxM)PSpA*}{1?$p&Y$3?yngxKkq@gcajHPUoN5 zod8BU_@2PetpbF&nFx;`p1TuqIYP^tMa;RV~LA1)_9QlIC`dfF&c z_OW=%8c4iVRsjDAHt*6CSsgu-*YbS<{wr}CtO82!Aih;KwGWPha2 zVB8^%ORp9<%#_|#m#M;8ueg&x5UYE(eAk<|l4B%V*rw?Dn>T-%qy}1hMviHvS)=N# zenEaQ#p%!$%})&QrcvKV^3f0E2hooW$cvjT41B=*8Ns!kFZw{4daK)DIr*n8Jlmwh z1w75fzhxUd`$Au7Z_cVanpbCC6ljpIlAY~5==#OV(icH#rZ3D0P2V$E6r0h-Eon;I z+kY07#-B;0@ygQU3M!3@R2tu&O5^IAiqcgbSM7qAirvD-C0=e)LYd&ia>i+&+;$ir z!v8meqvJyZ-kl%wmn&y32fs@vykZz*ZZ>kmb*16Tj#iW%1!emy%Jze@@nIBmr^yNv zMgMaeRkD|TX@ojO@@SR(qY59y4C6!7eqZ3Xj5mMt4EccZKVTbXVwK>EAAM!4?#_Qo ze~Jem^K3%a`DAw2>1_kZ);wzgv=(TpE&KDL#nyxvP-NU1ShQR5c$Cf3`Pq5iN++$K z;)|G_Ri7wy$*LB9eZ$Hx4RjuDM^nqn{M@ARdjaS;eE13T$jJ13nhZ4lzSZC$&vzKZ z?I&33{&Ajzww@o}k6?6R(E7%fIU);ZfQR4R6Ds?fm<-E)vZb$edFAdcvfY$3ey;^K z1$L8*M|Y`-45FD#N{q@&^j(R*E}>Y+V+hAjbJ~cYksZ^HEZUHq-@N&@T}mE&n5fUT z{MiHpxo{MjH3((|izQe$q!yYC3AIE$naOl_^kKm;QW+zi(N`IL$*|hSIk{!nxo28~ z*+_02GC?KXX(@vIr3^Q|^m;PCU5pXY>?T@yNCZ0#^4le3 zuA&x#bCM7NjiV<~r@aRY`4HN#_ppqV#Mc-o)#0crU#1w20kVqWQ~&{BM8vf|0#JSI z+7N9f(Kx*iZSC`$6p?vvw@`azYWJb`OltS4%lA$B8I&JM`Q1W!wT_%c+mECDvb_+S zwvj;_8?%iS(_3j5GCgp3$n-D|LZ&~%y?TMuyOz&)_B$suCvy7lIG7oJVNlC&kR$w% z$Gk+I*i~BAXXRvSKp0j$Qxo8fFf>e%tBkyvQ0eP9vH}59}tv=8yyHJZcqlzKXir`wbbzDYDzo80HkE7aH--OUn0b`JW59z3rU} zXm!Yf?>Rv(oP1A%JwiP%-Y}vZB9VhL@K#g#XPUELnK_FFiuEp<3gTQHlg(g@Qgi=` zc^cs(Cifw$rMrrF_+x?Qhh6BoD>EvVQMvsR2rUI6oLe9lW@f>`Sw50)Ty*%mxWrtn zx5WJQHY-dxHEvvKE>^8H7ysrf4cjwcDR?DILT-|XTYqE0?A9m!#k4(ow#0 zR4yDBhsZK&;kc+;IR5(O7mkZ^mFlzB4kf*1BP?5BVfvD_!imVr_2NQhTzKn+L?$2~ zj?;0L&FW`rUxS|EC~Z=ggmUhJg<=bYqRaSMXPlydRGD*~$t4;=5!ipAZ)fzUXus)+ z&vzFj^``WHbD+k_J1Be7^yKF|%%J}>MZ-ck`QJGhT$BqPeZB-uu2x7;yc|fbFyFA- z?F1)QG)x4$=^bRSeSEHR77x(#89@iqGO_Z@vn|(0h-Va!rskO2McuHSBIB*(>Rsmq-w2%@&+8pLI}6gf z4Jp?xDc3D2*DER4Q{_r-nF?q;D7N^Z0K9AwhcfM-@Uhmdt%hc_xRTS34XaJZ3-pCW zD=%%YRmpkcdM2;~$u!Ml15PBF@ z*af_xJ1TWM&2_!tCX~@N*CRbI6d7l6ATr7I?cjaoFStSNHhe2h|(99e&i zL12F3D0UbHQGzV=<2)VY6t%$~vj!1d2IFio#21UV4Up~rIO}hp$2m-j?QzF)V?QlYikJK)!gp&O0DU1WxF7^u~&u6N52ru(_ky60(0`>#;PU ze04bs15L)~Q&gAnx2aZODahnG;NG|Wm-gtvZ_p!a2Uhp2Im)M3qpb#&Hw+q29NiXR{|12lTLBD510V#W!8V=$BKB&1IrbtC4OFUQjF1}eP9~tw*&?9>40?VgkFv#_V*8WCPjeIaM~unb;{o*6 zwB)yyumc>+X}vDxs2qiAH2&ZZETBJOUmOw7_&gI&SYgB<3spn-eTe^EgPzKQZ;dt5 zUm}0{--~3njIP+=EnFypf)s`qMq!8vdF6VUPEHqiN4m`bTUUHRsTa+ke#V?O=LGAe zGne#5@om`jOq05M(DCTJhP)%I%DXi$Apod#uR*5=hY*@2Idq&?C;WSYe_5CV(2-VG z@9o}DUDRKX0A&67??Qn`pG5#S{&%C_!#mI~F#P>@A>_l}imu#92-qvFs$E70YcO87 zG5PRCd8kKr>bcXiC>hPj%onUsa&k*0@#dL7AZMqej%e2<EEf z3!%uakPLpUWHDc`h7-*D7U?H=KiD8bTbTo**JK|>-lat-rx2DWsLX(K+*)5;HA*f3 z;Ezvy&(1vx~^o+}##j4Dn6KW|P=z z1?MgyeTo+$*V-)!ajIhw8{IC_y<2wXB1DC??l1EcCiQZibye-7&(o`dJ-XfV-&uLv z^DZesMeG(wsT(NMrerUwJPW96pm>+zYkC?=Y$NBH-F_Vv)gEc%hz=T;-pBju2j-`D z0$>V{r0~cuJn~KjOyRy1?)!!No~4;7982NYFKi9bDs}Bx9XY&)O@G{9d(w|7v2hgiGnuA`D(s+Q;)9{|OE>UW4 zQO$Z3d`NR1+i^k^eKE-wvxMCUK-4EAiip8?Q1RfS`6(o|Ds~>7Cm_yfRHM-XROB(g z0!Df@!b@jE>p>%qGE=M?k0ZA1Zi^{AjaqG-TqNU~@sOdg*zp|JyxQ?`4Yx(`7d~2e zNO+#+xp9X`Cl_da+r(g?=2;Tb=&{z34?j$**Yb^paxjEdBK(-X(84qkohkLY&M zjJE#R?RK{s_?{n~ldfN^;dFDeiJ<)$&(2|8 zV6Zz2}=n1eOm1aczJ*Yk@0ZUJ37EB|K02;_(pqa-QXLPr`@~ zQy<%BL4wi+;|S**L0G(%l>C80PW;ddj4bO>8zotV(3+mu$A(Q0#-<^fnm-t+GhW)_ z&&C+*7(o5)ES;0_e+2-X!i$NdwO7wc-Sc`yGEBJM4otjv__50~u(!8$()^T82IIvr zc?pPO&p9Z|A@TNgBk-5Un?;w_`eS_1>F&kc=4pJo zbGoy-xuz9L1*ud@4g>R_fQFIL6=)c0lp~-eCbIBz-kMNBeA~cxen!dHPx84qV)|ZK znDb@;b0)HZZ2~##5=;9BTUhKH>=*D&PcCd8I-x%pcHX#-mDV@q+U1$XCY2+~ATi$S#l2V(7qjv5GRqL~FzFv0Jaie8 zd7dVd33fe+A0~U!<{%y>bJOtN>7yhTRMGHbK1&w4kfq~tG8hdCps_XV?LX=!l9A2g zF?H(U>0ZYrPENONJ^pPsbmr*6D#I=wOzf=NN%vYdGlc?%3pIJn;q( zZ=NjKU=!O{=~5U{z4TEw9ww6+kqL;j-|;eM@e=9!2><7$CkaE_-?fx58Ko6Ip2Z(i zY+=}cxUXBlKyi~f4#Yt}z&IO&QYJ0!?d|t_x}O={0}-VT1|AOCY;cD0`L`ZD+UX4j zDrc4qO+#LVoEQ*!;nAc0hq2B{VnN{Gv_Ck|2;?~EhT6LaJ3|k5$~4sLo$kW_ikV4i zCdi|o7g?I~AP$mYS7loEe*|P7?nq9OOsDCD*`~YuNT=r?mzE>?Zr%>lbA#RfBmAFE zPKwFdaAY~Qn>=zHcM3bn{w$@5-S6Q)$rvO1TbXkTT8xk!HRyaUbnW#H`mWYuaF(Yr zOBs_kiqlEn&t@61KmJcL&Olb%77moeL!PEqhY#&QYd#;wASrAH)8U|l|Fdbr-v^FW zC~=vf{Ts6Q@buI&q#>FI<1Cvb%VBaUBGaYM?O^Rc>Wg^9>(Y3_96A{84fX~qV}zaG z#R(#mN-wh6k}2yz%Pc$XB>M+ae;mWsW{A-;x03y2|1=KLVOaAshSWLTvzeC@A;QDK zsheQq1f~kiuhUbSF*vYRVv}Ko;gWbbJV^F+hLwk!NSwo>DbWiHW!N#ZR0lSShdr+h z58rSH|L12g`j0vZaBPrMUd4_}e}B-`8CF6-cRN->aF!Dhy-vRu`rSVZHO@hOT+Xsw)ThMuB^wOlJe`>IzO*ulFXEpv zCuoPDyt=HVr~=Y3%qY;qsOa!?&yF#zwMK$8{Q&!#a#%=%mSMJWjMwPLkxnatdY21cs&e(Sgd)0}`J?y+mc|;Q(c$V^_mzJdKwz z5NgUKJRJ%Nr%60Gn=VdInSgQskv88PS#gbSzR1rFqJ7Td&!$d>wvE%>cz0hK*Ag!|=G>H5AQnG+c2umY z9e4J6y`fDVU(liibcFv&swXfLA+Vmp`|+Mzay%gl#I%Cm6QN$lLgR^`$u`FZwHHfna2SIb4mOR`fhro}X zwp%-lY8UaiTZ^tgz%~?Lhs!CK5)Y*m&KPttVEkd&`H#FyjWPRpELT39iMC&O6@=a|Ffv_b z9I6AD$XNkkHH~L^@^YNTa~IfzBg}jse~(3f{WXfo(v3cXw}DlNCjUl0mX5q7W}%>8 zXn{`dHMV+Kp-|4C+9eS(CK&?aGvVo)9F z*A~sgq9!a24nnR%)JUiT?H!9RXKFi9MV|?oe~P=z@nX(48+2SRG0s%f5VBRAfTEMk zEbcx&nvxS4i&qn9DY_pKBHfPnc+<6Q-9#%nMZ|Exr$~>8t|0Iyy(6F7X89U6?&kox z#q>n)a8lYzJ!HCJd&XUbJ7wHN*+es?*A3GgUu`r`7`+vNYktrfHHpuUi|3@RO?T`06eryvW>*L53eQ6d-ALdtsOdDBuo!{{ zZQp);@%p=0Z{EE6>x=i_9lw44%?^?MAOFaI{l`D*ClBh0J|Y^4sM=GK^p2 z>DEzYySu+dyK7-o9%@WVAJP-quanV>t7%;ll_m2GU(ixTC{83aQJ|||CoWWq%WCba zT4(s!p{|5c1aD{wL!%ZdtwH+)8p35 zlTY32#!bKF9eM+0zXVDzs8#YifUM^ zN=z|WXRv(TyC>ke{7{1TI&9BZ+XeR12KUc_Ihx!d;?R^S`k_Cq}%7LHB?FQvN}Uz75Zy|84zs^m^sGCnNb z0ZNyH(jqxoNatF6-5o-VUM5vWrzirQVzgW*f<)u@R+f%}?c^k_3HE+vO ze(m3w#diK*CiHDta+ftctQrJ_7ijaQptXi#BVV~9EQh3Z@ zU2kLn#MG5sRU%{RDhAo^#R_NEd}J=D*&~GiqFwV!K)&fRcg*;PKwYeY`t4t)Q(wO| zHqE9y{lel5v{WNTR%E#M@Zb~xLlLD3`{z^BR^x*OV@c ztLYmSN7}O3p2laxF=bvBz@t#MO5&~cs(7h{71XtnH&N4Rkg%sH%U8OKl67n|m| z^7y+yZ=1uWpI{~aGeI;C99VVJYX1fUZj+9tYl2}75#Wq=d~Od>Ii>CbRY68*$9!}x z2dB?w*=3Fw?b!XC&P*@U$uPUzR7TUB(smkf&?DS3p5hFW=>EQD}Urbaiw##%`TrMsnj8vp8^cB;T&R`udN>z*i z3fv2`a&dlvd=Y)SDzf>-Q7<`2k^^dim2t2b<_zFhmw@ucc!kX=6iQCkS}}7c`X|aO zkxe0uD-{9g0S3z_`KESpd6dwPRchWdR6`wlS|cXF~5LaSf#5L7V8$(AA{|f(oxtAO?^aEeK zeg^4mkY`O`A0!VR0`4!nd&wjCqnGUe75@8@%MYNVhYuTj(wQ#YDZ?Ys&1UJ!F*!hFq!*_nWqjEz_s9PvSGLXFg($J@5auyZ>`{|F8SE>15~B zK6MYj#-|QR)F*G=9RKZ?C+~iK3%86KdApU|r~P(DFJKEu0?w>9nLnA&NnL7dCimh0 zr!f5LK2|tOp++%S%yZLjn9kr=kxrhK6MT2(jQ~u|`$Jt-1DWTSQ?&QXp3G+HDh%K( zofiCuu8s0vry*LO)hRotO1qU#Cb(IUJd3pjQ#;R>^Kj2Bu?%&5lTLIWDe6MP9nmMzl*iTk z0v+R~>D#>}0+?-(G+{nA2enC{o~`l$nk#oSHPs4 zrb8fOZ-R_Y zr#^ms3RVvOueC{A*Co=jCMpQ(ff`VLCXcvl2#?KGlwQ3-t`ZO3?px z{%HTiHvB8#FvWb#x7zDl?d`439Ak3h%jlni3kJ_OECnzzSM+P!r!Mru-5M3@`38IB zR(FeL{K8!*!>CO+o~4_V;old&0fG9N&HrbhN?2li*D#jA0iI)s710`t=nl*$8Qy#} zSb6aQF)~Z3#-yC&fh&<3ehI8UMyfqSv{ zrB>x%1{*xdVaj~OvakFs&<{)NW2`m$pK+JJ3`OEiq7q8qMc)3DO1b8!A^m+YT=mX;Xvq=|&t zz!jv6d5KTr_IwPt_ySm07sY5>hV;wbYpef`?ev9D$v^k*Tz!G|FH<1I=dfT0|ar*zM&@a#%?GK72x9Ve@ z4)U?=Bp}9E&mubAZ-IhS|5|7j!t#s%n$DYrq&EiIiPtZNbC}p0DE|nLP<3P3_YKy% ze$7(xS(Z;{`4A6l-?4%kH7`MJ@2y({?@o7TN=JTE77=&XDH`tf_j?cGyBm}lP;2jd zx0a_fff^5bP($ip?)DEJppNR%SD~W{DXCr-gSy6NTnw~w=*cqQLZ_52StmtJa5K6Z zFWR1+1pf(YiLCP>Y#MYBCl~4VdFBKgSd7On(-nuYJvK2`1>pCncB8lVry5{hrjK@(9Wmdd}BI&p3YNM9Izn79;?-4cszT8|FlnV*l4FP zF(X5x@yv;TC~`_nZZ!d#r5LFUHrBylP~sAzSp)`ZQFa~Z(`^Uevi5vq_F-g0lL99c z2_$8IqO0LHvc@IarUf4@ctj%Hhosc9GElbexVnG~jrxr))0GZ58eIV8lux)hx+lYy z7y#1LcD%-j^760e3V;P)Fm+7a7bktxbZwSI154zFJd##no*@ z2Piv3*;=lmN?toj@0V$ZH}|rreq2t|Nu^MX0VyX!X?xXNb)~CbdntVy>e~PibT*bR z(32)zCTB%^eCAeGU%dvG#bjLz`Yf9eZH)^^x;NxMx_j4p)r_tT3(F~XcFt5_)CPjFHU-Z zzZkPBJ9SYbJxri|x~#XSveTL&ydMDB-}ZFNJ@$(4adF=*KCA=Lhrx%!<=q+>Di2QF zAKJ9_1vlIH4=lae>6>?f@;7iE$`gEZFvyd=3a%wb0EFn>{@$bSo5+8pJCX87{(z{= zyZr}yNYH=#wHlpmqUYb_=RnlX0%l$_^+net#uDv+$e?{&n=sMpFhJ?^?z~8=XDCB? zSH2}-lKWek&P<-Mm__};QPju^*>9eeITM)Yl!t<(8%U#bq?sqLf0eYZG7d&xRf+q0eXO^x}E(kr31v z^fBOyL5JohMrv4*zL_;Y-<{HqJEPjWQ8`06_#gd&P}|jLsEzU))8)TKhRszNsWce< zNC^?h_Suk&?gSD|Yp|3QBa9Rm4XEFD^^G>C z*I%SxfVU{B+#3G#5b-kMG>gvzc{Hkjhs7M0 zlVLhK!%V zHV;L+h)fO&*|wH`Li9%&EzBJUvzd$u*EniPjym?nc0%wmq@g5=EZBq+_N`vPRoZST zlUM+P#y_F~vcvFH=9BCvxNqA$r_OXBtNIrzJ|4VpcigwvAF`aDf6ADtgBuT;Gyq?2 z)ar85FJFR@2iq-%(n3iL5KY&y+MpeAB{}D&Z$&HN*My%EJe+h`^gZNUHUIio(PxH( z5pCHVyiJ*?G1K(O88}Lac)*=lwLw!3uaT(*6Eet$DH1HObAYiYry#?-TZf1Muie{o-F+zKC1SMeZYE1F>nrp`@F?cqJaLS$%=qdb37MBUMVYgk z0j{%?(~dr@JMuPsPX`bFK-JtUph9Do*S$yK5=xC?b!nq$K79L$;WXU`*agc`bWJ$e zg5ObnbCn_y+Cm{FgKJt>ti^o=jNUUw?*St{3-HUu!!RZ^M3jQ)IXZcNdRVJQGC!`H zEYoFC)vK&Tl@(X1)gc)k3eHG8K_f(oVf4*6wWO!#UFQ;h^9P zK{#WjCdmue^eP~&njozdq*dCffeFpD5?YYg`5m>Dl&7EB3{8!It4L?r7y})bBa-ck zje+jGc~eV_I!CdgTF?|##Z)_{bB`frF8K%ro3j+ZNYtCsG$?OJvi~rvr90xt!0zBv zeAozuBnVCm_lSpEUhg!*YDU<_YjQ*2wl!xKE;`}XUS`2C&};Xcz*N4cIn-x2H1F(a z$*~!_fd6>K*SWW!qT`=_QUSBDN-+un!iBq3T(?@coef)oJm!Pzt*D{ktXzk)cxfkk zd@X4uVtxb}RO~)u?uIbl^)}4yxIB+gpb;%5^I{x*+?OGI?HSIbTwe!!S|)Sa5I7)! z(~2Hr*%+&LqCWne(cfFhS2k#1wU_`3AAXObmhb*8Y6**4bY?hNgRK};{5+E;7QhO1=XopqWW$NP`U>f-ZaeuegBP=8GhfS z;*fpgML;5BQPp^9wEPZHCf|xhqsLJT{;w~lGC4yVrgz00R>-cK>QTaBr$6-p`5XTD zQ#rx#eE28uR%pP`k}H*9iI0{uDqTpvQ_jT5>0k%BmWfb;@q6{Rk8V@-Jko%Db*k}B z5TH$2%TuNr-OOPKhRF_T6hR7%4K9s-2^|VD(%thP7OM^NFu}5xcbQxDR}Jk?4%*k7 zP-5qbCZx=ca{Nt@OEzk%!wn4xqu63xODE~9x$*FUChoC%td4ym4k2t@K5Ob4dRa^) zdHK$F%77Ez8M5=K^Bz#)Xi*6@&KEQWCT%+hM!R#Os2rRg#gh^TwbWB=02 zV!Z0t@xs~(e|0re?9dagkKa6#Wi~GiSJ$JKlh~xd(lhH=@WF8I+_8J;khB#IbQX1X zxBsw*)YJE0t>sx!y+(84Vkk+Z5$vySQBC-ZiBM3!EYIIi+Kdpvb$?!-0nvL#MpH~& zkx)xToqJZodRBdmR%*iAQ!pQ-n~TcihambJW2M3|OG%!FVx@`7MUkQr5`14dav_p3 zrE>-ZwLW0DSCl(pbK=8Q*dP-#HA7(zeZhb!;Cq14w6<`(PzenYuDwW`0iwrrm zI?XtV4N>z=@<<*9_B6b}IiQF*ll+QJF-ehv+ySxD=lOiDG$mPyisZC!^Hrl*kQ0D# z45VU0&pVohk=+@Mm9#?CuNERETKM>vN(lxiT&{`+&p1^i$3zU$D~kIzqRA{Nbdj#2 zHk*P*^JV%*v8@gSga>Vgm{Dgos4d6%Sz}))cLdvVEn_`Xv7Qi<=VwV)QO;9gwjmoKd?7|O4#HCQag zfZ_-2fL~_$s90*TqBqmDqx>gzxR_y(=D((6WtWAOJhKj%8UD@*(Ip{9gYVcH_I7An z$hfizT?kV3fRYu{j?5XR-`p98KPtcC8 zKm)kbq~%fWxSo0=X%jvcgwmes*sY;zx#o}73~)OrZe7Qy)_H%OM*<$>?+@a;?rQ^u z-@%jop!aWM@GoKvPDCloBv6C%3<#|huDF?&NHjqrwb$8DS3lEY5@TS#UeMv1p0jAh zfkBs}aSQNbGdUra)|skTi|KT{;_KANSooK~S^iHBKAofKPcgih9w-}en>3vRyUC~RSC ziB5DY=|D#yekrTxFnd^~i!WREpeL%FXRpfP2Q)*WNA=piA=7U%Y~+c80)I9c<=BA7OYL~C4?#qEjQ(EpW|}cwSF`Ka zoxE}U0GKXH&Il(`K(mHGE!-K&g2FN*95)Qw{1&79MJ;aIAERcM2@N^qUh=S0*Q3_N za*kLHdO@Eydb{N#8HaQ!DX&rLERval8?Kb-J=T8q9Z#!@&MLrkPv9I_UlL3sMGBum zt~B_}1rUpaaY3i~uo$7$7jP2pBI;uB=C}6=mBTunqhiB;FO4^ z!vtOhrTpanc7Y|?rOtK&+DPJlu809q(TSDO2=O~;eu{v(#)dp^q2F9|OprIR+-e#117`#+bj=ZAXyP(eEnWXKjm64fvDzMs)n+VK zVJub_i|cJn^_ysUG}`ZNWz{bocn=<8iAT~yF|loXU#lKEJCHm~c3}9V?QQ*W?2Y^w z{jaY10p**HVufp-vnH-L)E&k}C+gAPQnD z0LF=dja{!J9wa$AnP9@EIHr%QBI2C{{Z)%PNpRQu89TBNF=_*+Z z`B9(=*D6Z04726sSJ+%v?e1{^eKZfIbnQ9NWF)tS3gvW8{i;-C$h)X)rIkW3CL>(H z=0m=U+DzW5-0mck>*#*WO(_t9*?^hb;fELdLh1TAoqQn4xbC?Hc()Kl8bW}`OFb~^ zOqe#Mij?GeQx||T_62~gS&o?lTJ%b3IU|z4Fg;BkHHdMa{x>$ik0*Iw|6xnt=!)=% z@Tsu?Xu2H}=VH!@7A7lNCR&wZ$X{K{T5Nw~uXSlYQA|c9?7@7NR50@497&Uw*p8Hp z5ND^|Ic$`BhUMH%B2XY`!VQ3|Z89KKvq~C-qNbF0t;6VUO{TN_V^JLs17sSwZ(U8<4iI%=|%p44hwqomWe|b2y1fJD4Y`0F|Ghx@POMM~D0ExxD zX(R@H9*&}>*+sCYTDh{xMPGrFWY9VneO+C;>8njIzpKG1mji7stry0u%o}?)^vc|L z3H}#Q?dfIo`T6myNWBHuFnRJ5Ume$G>iWJ>WUG>Muc}E1Ds1VsTJXO57p@rBu*?u- zCQV3aKNzqa_~kmP76W{dUStS4tG5OGR25R;btzB;O)atd`x$J(Bu^T)bw}Ph^?8YY zx3~2*?h}?;MawP=2h6>TE>l1+YE)2?)}5E#>2edy6~auCBwBS@1mK^Drrl%a#q6M) zo|f}~j_%ARw<7QFteERsxPIu-Ol3l}I2@-{^*X)GW4pv}=QCl;r7?9fumZys{ zBhx?{?O4d@ zbEMh2(LWZ&oCJgE2<0zC1X0r6`Hmyx!|MgOpCT*DOEey+=12rnJ}}h+Wp7N+;V)+D zQ7mZW|N5ag+k`;yfU+$bN9sbC1)XM?j6GPyMJDs9iYYXJTN*A92xN9I@$UeCk& z@ybU6d+wfFS5@a;M$lTMq%ObeM32iTz0i=_LVO3?8Lg^Ckp>|H?O?w@vUB5+nJUL7 z54SG$C>|v;AywrPIrmmGGxB0GVa=8(3r~$&J=$nM&KRpefhLY}OhZFU4>_&qkZPn2 zs4!tD5`H;RI!rPMS7I)oEkV)%Wew*nE>Sr>YodKZj+_dQ0%`@?n2K_&Yl`et_9OT1 ztk=bp^rT+DUXc*$w_RV$Wv@?A6UxKb z)jiP9`Yu}TsoE^s-Bcak!8TQ&ms5DY=}!*b+llT+`=UKms5j>jt+n;8S5$__&a5lr z@Oow8@8UPH=GlRh2CMj!GN3j~9W3caeG4PzBMdkudc1Q*`UlvscY$ z<%hhh-9%heTGM6Af9=?#fSbkM5IH$_u)(N68nSdxkt8~b3O6=IC7-1v*R>O9BHWon zOKwp02|_a7BLv|JKnAA@GF2Y=Z|fl4*RG@VI6CQ}#{9%6c}2$wMWt_d%z9wIzoh8m z6(+=p@oFGEi;RPExR`lMeOO0f36EeW#PW^!2`Qb|!=Jyk+lw7`Hq(^#Az^7-GAJG2 z=okxm#oCpV2AlVgQX~=9F%89^F!$&au3cq1&<|X3_^|YKj-C2#G~+aMHzX}vVuk+bXbWpeSKHHt1#SWyW$`w$mRYSqly$TTBV4pYCLFExn{#szEx}8 z_JT07@PR|MUI5Fvi?%wuz=n+rRF4>wf5nxROV-Zwch~fbX7#{s6?vf2mTwbGmFbac zb5w&pvXW8dv@<$7+5$o2q7d~&xV;2?g4?v1RLZIt?z;Y{m{s%c@S+%JsC}z%5!xn8 z99^IP_W~`I`vx;UhT>D;(Q?|8fnvBl+b(*KoAXm$$Ddg**|&_uwNH4NNl-7BI-bvP zq;2y~1fDh5=j;;hrT6JlaF5<}@}fE_9Of9YWtaF@-!=sH)hh-I5bwwyfHgo%)zHx2c_qO^5uV)GPi>?}}4XKQ$iWfAfd| z^F*2cYE2Aq_Z8EPehzd*^px(3ydFqM&^8F%19Ep)P!pX%d(*EAKotidSbrB|GL1%5 zKh07mv_8gam-~m*9C)@lqpTSrP7msRjQ#{S!Tso;xH|tU9g9{U@w5sR7v`^ z(0|>w8>ChK%Q7t1_$AE)<_0_n}HeGDVjmWw;>uKk3U97I#qh6O_yN?)ho6TK^qiJ1l3f6V= z&aQVhm+;|LZo06S(6sFy&+c@qJy1KS_zWix*U>c%1EtOHUQta8;9MSooA0zC5}6+C zInV|$O!(&to!=$2!!0Il%}V*0?O|lHn`1X;>@IGDU1&u@iZWOwWLBEN*Bv~_!)BIF zDs`D+@I11acU8`)H)o|Xo^YjFhKsP~FH%KU`It1$n6CiXEmo%*uNVJvtPLX^%@H1~ zM1}C-Nex6{G_FlA+3BH)JUb1v)w*RiXDzQ{d)2dY6wOshdCEpjO}D>%#Q3pw$)jD5 z&p`s*ny+b=r@PZ|U3hfTT4>7gr4x=#P zP*sXy19w#N*gsbE{YJywgw*v;!(p1UC{~Q~UL*OX$rUZ7=F8zeX0$UqvL0(e zFVNtv!~V%?0^0UdjCp_<#V(K++iW}U^claoFcv25kjgjGwTU+D+I6FYSS)OS{I`*K z0hG=;Z_0C(!<25Z8lY9x8s+hf^1 z64SL6np?EEzQGw)QzeZ>naHuGQSB-K3PZ=RW5% z!+TffCkYc?hA=wwyB`Z=OqXEgQoa2Kb{p;ke^ehi07)&z* zG-#EMa(EU|)ryAl6AF=im1AUl6^jVI8e=XU`pXF>`PmadwLduTnXAe zIdyrcYt@R5_8bir$Hnw7GvEx8hHGBMyjIOB*{%2K>o&N>r$+sCKvkbiz*leTL+Z%Fxw4-QyDYgnlFPEv(|E}wTb(L_<*9&%P)?E4|OKT@b1K@lLAS3Q8AE|d*w&C{c>M2Pe zo@g3QB83mt=9Vj`r9v8;Iw1>$5PR2{T(dA4o@!&BEo)sNe>eluZYA9T3`xc}n~~B) zyJ@8WXHI826N-9~2n4)AQZU2*5UVS6GX*{l#X?sX)*9U6L$90`ld$71tol{1N0bgq zMG^`Wlbw)!+%=r0%Zo%&nBfb!I0o2mDau3ZzFIMqY!c!+E2`Q={(3=q$F+WN*9d)d zjix|;fVr%!4A8_tj%|?T*k~6{X`0dY!l74oqijhFpRI_xnZTHd75*-P8D1k$9Y@?Hfv{a!DXue*+7d} zzx2Y6x?P%`?s+S4O?q}^j`0VK?C(N_l_(ax1_Vogl@(VF6_La8ASxy}TZU_UV0G

    `$6fBa^BGg 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

    aoOct?lt=AmLIlNcz5(0sNxmkK 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

    %wGD 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� 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%0A0tjtNW%GDEF-` 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 z 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

    &QCgqT!Kur1gDr*-|sXhe`41B62r#?*^WuW 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

    |kpR3z)D0LPyw9#*1V@#f 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 qP^t8al>(@&(P>2-&q?Bl&7x7O)4GUp3 znl=r!=S7-KRZMVv*kXkoI4}djYRL~K*ui% zeq@)?#@A^yf9byQ$pAytAsiL*9jJVJ+j^~6L8tYqr4Mb3?LcHFHf5V92{o5(_bO>N zA14o*#AX8EvC)T(N>_sQ75eu!({t3GaQZ6Du;4_2X3CBFk$R8e={pc_lms@<@V+K} zPTVq9*#=dchCf}7yX7if!kGd=C@(Mj$@sd@#{H&+5Z9Yd+5vg6OHGX|NY3y5hUXwH z!JB4A5S1;$c=&HX3ehd(Y>dGyW1a=w8dSpqqp~KL6&_~X zcmh~x$d_Z9P3H&tMyKREq*P`0Zcj`zT3<%dT>HL44 z<7S;|Gurv&nH?P_TcmBh9<*Wio0r9Z-@ZD{D@2!DKj9DA5rDT+w*UYu3G-GM(A$-& z*hqoMf^GqLWAfy*qa>c<$MrQDI#g(pUAABWDarF0X5WOf8$WyR8)JrBFlKlgj2Yf- zyQefXet8^?y*JyZWA|w*mNns3Tgs%nFFvh3e-bY94r^i;!*;Zb@K0ZZ9ercc$;9P> zjA{Q>9)d=0Mkgj{(fd1(5@>Hc;$m(h;K8@4!D3^ydWOY1v^v5?S6BQQIf(idh(5sC2Od1C>{6%iQtXvm zjQNXYahadxlsz;dL16)m7o`YD*1!}@QP8IN0pg|GKp_O=Dwf&BdMfA!;^RezhSBE3 zYYr_|Zb3JhO^3<$t+a}Er3ixzCN(QtdC+zxQiqTN1tx_Q?S_SAIxo@o<5wb!0!MKB z>3n=yEO7|9oMCx8Ey||mZ$TG_t~eEwWvAbgnzPq*>*?~euIn17WkEc-$aEXZ)f2f-i&1j8wV@$(uGBX`s3hx(RHp-KV9tuws+bu#%@gj$B&pD1S7Rq7p+4DY;-@?5rmJL{ zfyiW%*I@uoK(W8-Yz%8^P94S>*~@WJthhEs*G37LWJSmC7NDVz8ar{Q1Jz=1{3CH#YRCTdD% z8Qn0=u+DK{{EDu3yXFCde3iIIFm!Jlm+9^0gU4GrQc(fY zXL$xFy(mMa6Qq_8w!{6N;Cfh8JDrRyZEWZ^`6u$pPJeheR$IIbGY4;XU}XdK1?j=Nz2qB zR6C(<(j}F|#Vh+Nz?sxQ@X%K1KF3&^d)e$B#xs-@UNd*a2(FjK`~nUW`}P1E$J`G_ z_F=Y69L=T*T%?$=n0gG7--|W-(@+2qUf~&5R3TOgtJtO&n03X32Tt$}jenkRFzJE7 ze9qm0qeMsF%gJR-zmvPp4&}KHM&%jDsJS&+}Cd_X@^M zLeC{8LZF!NVxBBBdTN>j+;j9J;+d7%>K6bCOCQ%s+n9Q-(O;nsuNEpFjp^RT8p8c% zRlpVSQi=N2PrO$V1m#E}%y;36KkTCNQaK1HEp(p3+EREg9pdsom!=OV(?(^2{u#=` z_x;~NhU%x~0=MI_597e^qqDD1&!3`>-%RJH=P-b!E|FM*!@(mpq|~oKtEEjbpnM1J z68z)mADsd7Mx>1RbhHkfWm1KViW^a~XA^(P8HZs;`D)MOj0x9y*i!3x$E%b+o+ACm zWFYQKm3q#RG`IaG8ls6=#aqV23fnB7b51Rim2iUKpc;Ur+?k|w6leHPI`?M@P-cr| zL3$ubr;D**_|25S7Aus%VcLsn+WgZ%lKdzV*#Q3@2{ITw?AOFnq$~J!W7cC?{Wuw1 zB&Rd4fK1T?AnLDC;>S$+7YnNdMu|%@aO0I%^)wP+QNCC4(TOR`HJSjmr@e)#@gOi~ zz%xu5Y%%h0OF18MSRTM!50dVY!F)i9u00sK>@Jv{%O4$;rW>Suy1k?>1>aO~U& zvODO1!&ZMoMwVBDqlJp^bRQ+?w>7>#4FraS!n5Z*d^1!M}u1U||SlFyES=>A)R zjrNl-4!sP-JD>}a1oTnzP$s1*J)cv7R9P0Drd#U2A=z~eZ;Mq_HQ^UK_^q%CvEy$m zg;lFota6jQ?@d_alzm=9DYrnopjG%;9$L}uv;$U!K-#gY-ugXY)#t+~Ryiiqgr}zt zlg#q;xpoy2)wBHK0&WIW<(a^Q&Df^+ z(2ZnC_cTtVUD7Xx>cwPJXDN@=>&m^>CL6OM8?HYMQ0}`rsPMd!=aqS`*QiEOh7n3J ztRLh<_h>W1F&{V`)}$icA3XeuRDP)O+b5OZk?U2Ba7MB(FlG23{D3(oRZr1X5g|Eu zqoD_SM_SeJdOMJ4^^=PK$)M?~SW;SK^rl;43C`7T?oSnRy7?AF)>rw(9D2Jykum!l zjMq9ef*QhLhMpG*j^L$_ii;&(@VFh%*f$^+5PAXn|kOxq3HAd_Q6I_%gftX%*J8H&6LrlOox3y@xk1*OCQ* zn+0n7E^QH@jl6aGig743nGkRt$}1FI zEGTL3G{zR!WL3rYu%FnULslkhxby7V+EvwJ?yHXvmVEQ|8dWZYhop(X{i8p)ul@li zzzpzP$juoWnyS=kYJV7G8Y?>3!d4Rw?_-|Z`;^mXU0Nd*+26?`hwen^v_7pgPPy;B z?~We_T*xx{wr1P@4%5dxyE>(A5=$VjLQHHllKn=MBk?ogD^VvZ+4v|M4E87+>n&Px z(N=F!b`N^l=2Y`F6fVv8gtI|L{L<8y;VK(2XPj6zVbPb^A^H--JE?`R!#_62jK;}s zO%d7M5?5o;+r-xNK>EBj5SfgE;wyh+HWXL%wne)QAL`DdrI2*+CidSQNBC4)g+<@b1j|AfspN@J0b?uH}JZ1gTtT}BfZA#L!u`wvk<2}bh6~h zd|`|}xvyse<$ebg%KS%DDLsrPQ}V+z4Df zsj9hd*Lh=0Db0PIbzmR4RyS;aEL;@8neD}0N6`^_!9l$!sJKl5-5W9FvRLMSU}At4 z)Sy$pD5f@DXVeXyBrhCR<^YiY7$lgLp0eDfDyLkhv?<6X|EC@@LRhqA-H3Oj#^YK- zq`D_71ui9P_E*-6<1AZUv!*?gPERgAK*5K|U)rs^?^x9wHpP)%lmCOUA?gR9u1bAo zHsP81%{w!P!I?R1J2Ss|X9lgB=0o-qLz&!w9;w2(j>xI{t^HK}=B-ZrRQ;w;)o;gJ z3QF6mD$G97EysU;2@(tc>0fV}A=hk|Fu=fWDPGnMZ%LHu!(tz?Xhs5b9ozwS9augI zsxoif%r|c4oBGW4G;r%SyG+BAD^#c2R6NHXtPDuUfH;b}r_(C4)wD2i>VooSV|Dqm zz)JB_n_CxbLx@4fNGTU5VFH}7a#l?8^Geb%pjw&={`hg^M#O=yaY<8YiBC`H^8%*} z(|&++=<59s&z%;qJm@I1w~Sy9HXbMi1AW)WDO<1bcQ{@ktVxP6Z@+!!&3;M??`G6H z(iHeMWwJ+~W1Cf|7fwJ@Zn>VlRt6?6TE^2qs1M=O@bSm=Mc#64|0>T0_{JFr zaO2(yXUi;oyS?arh~#MNbY*SRt0HHM3<_1bDU7#e!_5Y5Ss^3%(l_PgYVQL$!Fwp? zy@iL7=pO0AV$)^H!14?;kVrJCc|6%Nzr*v*XWOREKpw;s_D$72AwJOn4X(o{#DZrf zi4*Da?;BbITuuk;NR~*Ncr9Xx)PM=7SIm`Kp-FpE^H8bjF1$rQwR((g7n-ke3R2i( zGMiT_IDqWr*vKZYwCC-F zbp_Co+Nk5}q=KMbj}#&GM4h@X-`ruxhEmexm6ZvBA!QU5aiUD!XtJWt!mR~Zq{nPP zqkvdI-{*5oX0cMqVB&gLun|4V%x8m==5hSdi<5v z(dE81@g1P?*L5Sq@Us+)070)Kuc7-S*PbpuVi7tZcX!+iENyC@4?F5M&hfs*|Kkbr z$9m>iBp{~zI!8>7i#1-Q<7qK|d!3hlfM^XZ+HeBZ%VT1hO-&BwX897IYZh-_%=fub zz>3{yVwQ_ZRtEJn)WqPiPKE*P=?dCzdqC3H>yF5SGrV$$y28+I4UA*`t1}#P_|?7f1biRkns2 zUGVw~s?#rm#nL7z3%}4{R;NpsuWk^`CsGSbxjPgI?M2SiwJKJ>7mRVE?+M-a*ChQM9As z+h*zVEgTVicI>q<(^ocId_1VaNZ*xarBf z$903SKrbbCWfMpc?{TJJgCB`dzj8RG4{xGqg-0!sZDa$vGtPb(OF zmbtn|$Q+Uc(aaz+`P@<1k@Eb4MZS(($_E>Bl0I|94bda~^h?=!HCqe1vWM@y9{; z!KzwhUM{*FzSQe%=6tc*>0@nQZ>28Aorpp(UhpO3;%{@|C>D8~y=R0)4v4 zOMFiPFIYYn z2v+I%EveAsBO+~q6A~GKhwe15Z^O3%rwE6SG}`eYGx*AEiD5ahVW|ch7CGr$VbYt+ z&gpF@Kwmqje3d&7??%Nz&n4am|2DrlgDVPBYBs=mqyjwk&XdoZYm* zIQ_^Rb=y1R5LXs^SL_kFhGST6yQh}p|5wa|MCgWza6RJK9L}fd#WXK zxLeEu(VvtEN+UP=6jE#A!%pvvU9?tBhp%mx?AS&JAfHalZBuAlCj4MM0jb;;W>PS- zVs(yhp7egS4C}SMQK3i3Pd5))Beh~m^{BkVpriLYx$-hyWX+R{QUIR{;0mW$bfi-* zB#BJtl1S#&CI5ZNKdw5bu@ABUcKR;l<#ze38Su52a1`Iey3bPJF@}SOvB?kL>#UKh z94W4^`{zxc9`=(zYkPa6!t$uxQGQ-Ef9+XO06#GA#6H5OKkwl?!X6$G2QGIG(nj;G zQ=ckNlauV>=S zDNoU%*gbp)(v9=3k;-N=dF#uIZXX}j9Ws-Oi6Z^WCSFoq&-ZkHefrMR4$!t~*04yE9Im9a$|mn^_J{BHmV$*{X6Lt@-K}n( z9Ty8{LSOx_U8md3F5q`>&8JKx`47^^beW|M+=y%TKEA-`JI_*}d7idQwO~#)N)a2m z$Q|~mX`i+nzS=kMKs#!EZu+guw%5=uP%L&kO8>3$87ltAD4fIfSygrBc1OhVk%#kx z5Ibw5_=u~OXh8fsl$Lf}Wx+eX@NcyT5!~Ch1yS*5y9o4-$a05??t&}PHtKx?9tjEw z`mpnae?=JfBnbD8-{0?e24i>mKjZMd!_L3&sl@n+cU;APBB|o;G5j;u&G1|P8!h!t z-w|&l4c7C&PRL&;0n48)^=byej#yU<`WX}NEyk8p@&?YxRVZiYcv^j$NCw9W3uq-9;+ z-SpS=IqwnT7SA`|T7GZzXxP8En|U7Ees*gw?7Foa8h)a^uvx-E|A~j@anwM6Z*=qt z`RrM<_`T7?&xYi4@!5y!bCH)nA|=Vk+9BXPEm!+_Ip;UVd7#z54;wt)WR1=e<8%pI zkf-y5bmM#_zJB`ckAMFm=IJ0ibRcs8fv7j&*2YbIeMWZZz)gI8wj%4ab)cP&zp=O& zdPkV&ujw2}m(a1$@5FCkuZq{kQ&A74eZ2KZ@alDG-qCtlKSq2<73pg(xz24Jqboc= zcIQmH!TI6B4=%D5);D-QanJ@ER8ON9ZO1y6QHH|SPL=Ic=}s8=xk(3@Xv_Lsau9O} z9aC>KH1r_C!N{|6n$4|~-fQu$RAFeG@+)CKE89as$tn6oD!O4Li3N|gXbP%(xmZbr z$}4<^Kh2EXn)c!A`Y>?~+F79gJ*7Zzm12QU&#xw^`)yx0?;{a5KA|NnG6n&?8Ur!P zmR&ujaiw?5jCT=6QEgOoTV)LG9l_}IEM`roU)-TXHkq40b@p`t}9f|Xoim9H9n z9fpbeos|;=2g_Zl7%=p>C5Opr{x-w30PB)-`@p5)MX{B?hTeGg6U(3uxO}Ew5pJ<8~a>A$5UE4>V&&63O>(7 z#R29;3+Um2a;O-OAkGI!zRV3;OFd8{boEjEd@Bt#Zp=W3?Lo*55IhX<_B)*TjThk$ zWIwXH1H#Bxe1!BO^IL)mxQEY2bi-Hn-uF6gC(M9nT!$J6q{2hW;elzBbVEu1 zl)8uojA5W?UrPKonMj@&Viv-H2xwAtW6{T&a!28sTJBuZ-1?OeICi+3x+(4_XZ8oh5p~l+PRVrhAaHFjevI%O zgyX2pE1b_SIm=)t=0s$WR2aV1T8U| z%MkcMS)&{u;rm|Diti4t(P46V&x?fE;itbOPhY&SwJSLEai4Db!?r{yd1K-e81xMf z%1l%9x0pPFcKt!{Yg&1XG>$C%+vKsozOhYsn|#H2oM38i8yEiV{{C(Y|F*X9W^MeL zz&d@EyoG=E_uqM)ur8)%X6SDu8pOY_i`2AgK)|;<;h825O>2bzc|%#T9)wHn56d6d z0)-&OrcnQUkMk-@3EJfxT$U=dRJ??X-s=CiJxkZ>lwwk5!o zf7AB)?sW1LA0#1VmQgT)PfL~X-B;I(|o09I1q9|Tmf8O-8(4{A= z5<=k*mmh4L&d1plRrizzY=wn0FwrVpRAthol+oz|?r6@n3c?w)9B0KQE7_QdYX;rF zrLOj>s%lT|h?f~Wy1vXPIouiQtjeUkEY`qpp8?;(`Og-_rS!!qf%z5mK^qKg*|k|w zuISDwxt526!JQLMdw+?fpQ_8@`YyS;FR@1hxBDDfOc5*Gnbop43Kg20*g6;rH)&<0 z%RpqhD)^269EWM2UVi(MYXouuJUf1|$mZYCN<3Cb|7CJSEDI*fq5!tdiF=6zi8-3e zyspC6ZeQ~Gc)Ffsw8}|$#d*GPuhA(x!>W8;{_Y+MPJFNOo)`$-^?aI@QoRqIdr@ae zX|M4#Q*|#)3QPs}us`K3wr!W$MY^0IfSy@U_su9Q*>&wQKBHi5924;~-FvSA`zZDZ zgm-dbVd@7C`&@P;gLp5xn>?l``MCYdiT%lzOIBrI+%mhnCk0oG>*F70^{U5*hOOTa z*20qPX_@gOQMeGm*OfWtS9zJAO*4O4YD>e8n%E~?u*zRB>iLn;lMXJ^l2s2vaA@tk z*Iev`-YKV;IPUXVtmPaH565A+lE{`Ytw6Oa9K@}jYnK8Iddrq8${&Krs@1G92nGnBMzmuK+bc_t;_6!+4vK9cxtrW zm~rbndC}c4_hB&BMZi}vFjW&6WMY7WsT`P)2WnIJxpGS_2h}F|a`(wHOZh5cP3wjh zLWKTge}6yuc|A`iM`OFSxOz6b>;>HU**Rr~$771tw)M&tH{TLHZ&>7IhWWFHgHK)J zM-?=WZvi`oUX3<Rf9gjWaw5!+qzd$k>bF7 zLa(1Z)EWW7%uqdb*P-hJ#>cbkfm#pAJ^FHq2r;SUBj^Pxr01|nITlS@uZn#NddH-^ zKq;~dGzU^?-xLF?Cs?GHDy7WUSWFY`ivv%Qo1&HHPxf*&aWqOJOz2N31Lx?d*iAQK z`T<;>bQ3ZD$QEN%4}3x`Z2>-fNxXcswZ{m~K~j!p^|tYR0l=)?R=e1Z>I2mlN=KPz z4I!kJhN!nlr6ohNF=bR;zSZfLg_5)W#AfIPDu4!4?BEoBrY)%j`R|J;RXQN2J zE|!Q|XOw){6it(K&|Jq4i$qZMiu=hTTki9B(qKZ$fvDr`Re9t42VP>zEk-jXFG?oO zq)9frwUlQsgO5DfkH!J+JMu8`WIufeG)+p&yH-PN!MO0|u(F@E>pt)dw&oWR09O%S zX`hoPNoOBx!K+6YLE5WT3EW9Gz18&ThO^Dwjphr<3(4{0Hbv0gPUwV%dH4vH-%n2* z)YAam(~U9VHCZlUMXD6mV3XP+luxHqU{S5@h-78xAbto5dM`LB8<3f5F--H-3jL)} z(S`zb#<{ueQKNOkqakN5JYo#brcuW{MO+60H>gqBKJl^ z=adxYZH&32+#4MY(WNNj-GRC59+A_K=fi=IKWASe&xr&*ipa;vIHJIVFW`aiQ3Dg= zWMQ9wsBTBCzC_JQznW}qj*V_&pM)xj=P}2F_rml~tMuZPw5VACTT}LY@j)hi+jHhi zanvS02Bk;7?TPEadVncQi3NJh(4WLav~4to&VGx`BVGphhuNzL18ABwCGWK@QF8NiqKSQt{xvrjUM?C~1ySDH{8L6)&W*H8!L?EF0@AFiDzW0*D?M<& zVki$aWq;NTQ1}sSn=!^GHrB-k3ALvB4k{jv?+k(n=l7g{O6|-eOn}NsdYMa*s!RPmHgo&c50)$uh=4HpE~a zp>oM9@f)9%iF2!Y*|bc}PgiI_=;;NXckP1@>I<{u47@ecz~Xb+=Kt;x>D~yFdGC(8 z_eP(7QsWJYA`CxBiqIf_{PfGK*Ds#`_}#0QKfd^V1fSVgb&obM(M7uCkm{1^-%Zyg z{EcE2>PIjw$AW%LFF@j3UCv6^U9w*V-B!gkTcX7@xrc@HQ0ebvG4caMAtT4t$ydP3 zpoWS#$a{MdAoYuZFiH*wl28Z6y96-~Ie#k27auX7kKsar0f9>biML+EGci`7Wp-f{ zw6;5lz1JATJydJNfn4~BS9x}gOUs^%+reUr-j$@s#fo3BlH?_6i*i!=H24Bqe9619 zc?BN;nDP{$<7Rm`-O&eo(~)kV76d?d$^oeZjSk9c8a_@ivs*gN|48lqvYw{mn0h~1 zuIDALzEKhO8Qs%4TqJXhl$x!lt9&t4j<2MDDM_!^c9AWMvit=p<~Jr50paKK^Fk|m zDAK^ZV16u!D6lUp|D{aWdSY1RjdFXJHm{T#C`{d7Qw2$%(_?Kz@t_2j6SFbDuw99U zFoM2cGDaNwk2r}d6>M7+B|I(HGx&epsbgRJh{FXT05)A;-}s$VSb%fd7nbPhy!sk# zTBWK=5~$Vkc~bwjKUKN{7v&JPt1HM{cmunSK6d@R*Z{x6I$|19r%S+SHpI;f3qmT7 z(@?CnLVHs&-xrOCS8rW9S$ETj0OY&jU+nIIZ&w4?-Ro+fdP3SoTVO-TY&3)-h_hdN zU_r#)xgi)K02dE>&}icsO@hTeZmL_P0kl;x((TxY5}5pNJS+iT3>7F`kPvvHDO?q( z;X~?)cZu?GCb~nuq-^IMXgII5Q%|N18^#=uTR+XxDRrLYAlr7twTW(o zhRquR9klb`aa$3yA&=o>M?)F2_{Zj_p{Q@1Sl>D)UzH%g!PytdDEn5vY4gQI*vH)X zEC18qo}%#d76#Lg?XYj-!#eL_Q+P;pR6wU-`)U7Ei=B*2RHfXMi{<9svKIxN152@7 z(J3L#A>0wcq$y5JAEw~4kfmsF5RE#%-oz9yv}CBj3dV0)l-eg!HNvJ4-L>OgFRZS zh#TGqcPF+S!asGpikm{N$Yzkn3T!m5QPQP<4?qk(?2&8gFiz0bWw+y|xFE$hjk{B; zgX&$Qt8S30$$WR9iiojjc`!hAO6NP_*uInV&o5zXc+ zT$t=HY=oEKQ2r`lu1x2ib;9`$m993BdtR*6=K@dK$9Kg%6S9XEW~2Nv5I7eS>N5!) zu&|e9V^gZTYhxG5#Rp*^MCylqmRVo<<&fX^WQ{XVZ5Xa?uD$1YX8}DauEl`(5Ankz z=gS;@+>5vDx|;%4rc)_Uwx673;}o@tja^|FzHNbFS>;%)!*<+nRz~hhh zY#=LEHv_V3Kbp!0n>{$;_g*|)Xfa2rz#vDgqr-5se-xQ!yJLSS&Z@bMSygNVi6 z@KdP}`m#8iqV$b1`Y6+T`>Fh`Ca!PZW5nvWFoP=jIMI;6-0M2sfdt;VqU+DWeyw!&bE9Hp57p2eu8aIJB|8aRAfc zEWbKbuZHH8Zj1q#^a|rH@c{;2cI}a)hw6MCP-`z(Q@=m9HH^i&`0&%u$cpmtFE6pW zml(ePIlIV9rcgnnrM$7W{xn`zELuElw^~}eC7@#4%x}LNUr)dFrg|+UQiBepy^r@H z)~2BwbM*0kZ24~Jh`tH&ZfN{#>GTTYpIUlSd{je!j5mvSrJ~yLPN=gbgMYlItux?t zZ>x;!x#D((TN2LeCHn0Opl{fNU`o~~>y2iOXa!bN>ZWAm!3>6x+V<#TDD5J{=&Gm+ zOs%dZD_}yrib0%;!#0oU0-Qdg$RpFvh8o}3=Tu=)Qt%{9&xXyug)dD^_WPi!F;X(}Lyp&kZMa{yBWUed zh2fkvQgGKZd$Sk+Am!>y4#3g3;%@wB3s!J-G*2$^2qF~@)ZN|y8g)AlD26#vNM+9l zg}8s6F3VTmJqu^WFmITH@*Cql_d~Y2EGFF!b;C$|Dg)+qHPdT=ynVa=8JGs zxA>&a7U3%jZ1EU8eENlb>N9Wf?sEbbaFY0(Ao-jrKK?us3KMX5_>`b3UKpPpk?8Zu zU!qSWKn6aTeHU13$>$E;@jK*8lfvFDSvvwZ`x1xmNK;BdLQ1Q>gxt{fljr9~jfO4I zf6D;DxD95GsFETnA}n9T4n8aN?dT(*gua;G0H)6}R?xs4&(Qya95$#0&tsaNWmBZ` z?>-4P0rz;7z6HT-0bia?GIX=FAI~lGK{jx+q2YF(w9GmA-{gjx{8^m6fd#%HMZ-_4 z=qnqL8@#bLkQ@41jDPOVFcKe-4mFTHa@}i|UGP*BB_{TPCty|U0@2GT%o&4xyNzw< z_+~G>-2mb%;;MI?+$5tdO=%MzCs)VGjk*giS7_Tnl1LRn$1Bd65Kg>v$<^m-EI22Q z#blaYXkybM&}Y#THP((pNu9g+Ahj`Q2>c>6@r}pXVkM@B_3E;+DrZ2@!=%e@v~ag! z{)&<~r_Ny~hEP3a7Lbu`S^*iIk_cSUMSkeiM721y&mMiS{Z;t{ox`arGU<0|0 zMH99v6wdF=K&q1}%mls11l>QFbR2<*ZW%qklLOr`d$6N|Y*iSLKu&2TnDBTS|Cx(s zF=1^Ev_wz@WdrdIvazO9I3WtOF!_xLf*-)9hs1P5&6zK#O)dPRah+7BMsG|zzWajq zIoNjpe|zt`-Nuomi~i?Rly%k_01^lil+?CC+gh?@b!)e5=~!yd^l)*@MO2Y03qYY! z01325@4oYk$V=p<08n<%*|X$cGZs;m8I{+_$hdrQ+jiKBE%>wYqNDSa@QNPfMPWq6 z13%IYgB*>ngc53LlPKY@!sEe1jU05kBLwEo=;3ic#ee?v2mjfR{}`G0<3i8WslxvH zAZdIzib^t&2@tf#rzr$FXt0_Pf5(FEu!2mkZwh1x!_7`Z z(9}i(vrrK8t!-huqU*W`h(VIgqmVA4TkJq)pQ3j~HJFaa1ga-P$Goi-u)c|@H_;W7 zHMg<9B`9>KiD8@4u%T%qAI)u=8f5h_85rB8*4^yaILZdeU!@tsxOw5x;{+HoS+kqf zqU6XRw#w#<5~t3amoFI@W{wBT&@agE0;qqb7|{KcKZ>5{h#xM;eX6n(VA`yd@t%J9 zG__r~;)4lHAy2m~{?xRXO`Zw~6}yZlB-lK=H_`rajGBojq7gs;e|!K zHuPUA0+uaLBJyLj6$WF0jN9t9=;F<6Jp<9>qRs59jd-=5>pV5%lX(|ylZk2Q-G<+7 z{C9JV&6%p*M={|=p!J^i2sFQ;?-a>crq%36az+#f7bjGCd1=)1I98#0J{*G2-p>#$ z`p_NGWDG*f52y_%o{iPra6eB5Gus$ z0@IK}3=oD3rz`951G8v0DRG(36{DyTo6uMwR`tOIR6M%|5m2HUSjZ4-wf)MOhGSxI zQGG!Y4QQsg*BjEyS_A``(OJ-JTb#f9eGV}|>Soi*QAGsMXZ3DW-v)#Eb7n!R0# zYJLHXN?NOm^17!gs^yuWOskHoeg(Q%TwVIyT}|Obtjm;()n~fct4aQ~@jg2{*xn?{xn_y@*TZSeag!N|U-Y}qjyvs&eK_j3Y_DpcE z+AvxsgH3Z4ZHl}g&qGuxD(LhTzieu3`AxloZ=^P%p@1e-Eh8ed-&nEPASQh^7l^eu zA=&$oQ#Yx7v1M!0&al1OHS^3BcTImGShiT|sWssEx0v_SJ;6WKcd#SW>?%T706m`W zKCL{>!FfTn&%Bz2OPmJJ)-YT>)synfECqW6s!pr3q}br!jdW_}icgrmQ8*9N?7I`K z7sS%Mujbm#Q>}%rHOgwak>M77#?K%Ie)bCr4l`#aJHvtTlST>aH^n|P5~KeIxt zuLgNOVeqQxK;c2NZl^L2k9yt}$x_%07+4jwvk*8J@dsGTfZDn!^Ii}a?9USQunM|H z=<%K(dcr&XH2f&50kDE3rsze!=w~%)$jQAFJOcg;y=A>rs{>^sS9--OF>H^rCmai? z1QFY#S#d zA-!$+#KwJMv*i=byn0_6wmbs!#qsQ`2*MZ>-;P#P);=UTvaGPb?*g3%&u5o)r`JX} zb$U5&dfuWkHYw^9_cvD(btGsHjy~TEIFLXe5ad=ruP2);1g9&Rw)I}1y+HJ}!09F4 zn%YsQfT8+zSn@Pk?z!=m^3fCCVWY#)raY~n{8D$QB}W5 z6l$wmt^NSQ$NC9i3)H{I>i>u8wy6Hy$a5!%^fP_l7V4+V(5043NBRGp3iq7>*ARge zH}&E@>sW~WjaN{zWMy#$?pZBK^oyjzG2Nqdngzv!H=Hzak%P`4d&3+Tks0}gT1@t1 zh(buQaBD$VKc-DNxn|IyaXw!f6(LsavKeImUN4YXarx*Vie9Jw4~+4@J74x%BBFV* ze8zvpQEGO;C}`rMWUy^S=vavw>mK(!%2tEUUDWFYUV&M&Yyj846M=ntrLo{y&ARw) zSI+>yl9gx$T4@!(Wu<)G+ao-iqEj#qiF*h+1F1=!Q3H?gJq_h#9Df;2sHt_@G{sug zWS8+>ghx&1Wv?0WWnPs^RswPrV&|IDKaRa2q26Ig!aIOB1~hOO13&~>$c#7*->mTF z5b5R*DR&SA8rll{Q!7)rxzWXj#~F|ZEF+il_bsF^4=w&t)gLU8%-(HoHMr1IVu=ZG60?)1bO0>CvxiR^ zDL-$l)*@C|SdCaykAPq1-4^=HFu{0pWC2iY|5B&*Y9cCyy<)iQx>^!+jj#mMcPy;0 z^!*BJDt&2Eo4Mt}lzgLafAPAC?mjwRGtfDlMqnX2xdeCE;j)v_z^u){iT0{k}qc*p0TBdDI(U1Gl={3=!MrB zs+lUvZ@ht=RZ}%SytWvv!@gr?@P;7uvkpx}$JGQY%mmQBdvlRDC78qaR6q6|2y&wM z%Z9RuRkVW7hokE-Wdt(lOzk@LT}Gd^~rAt7$*BpBmHuGZ*M~{<@tE(J1IM{zT`03wrj5 zHPqQC^B%)?BnG1;irS2u_gO!>(<@JIfFd^Kvo7Y*OwX)-nm2@?EUFahQD>(Qx4-i4 zjQ(`|5vdF!5AZKO-P|U#)$~acI;1U4nc*AXK7RVc-@XTyo1ie@r(EL2%Rj$;^5Xfc zu#9=`mwNl^#ot~d`pML~$9`sBneU(f;1@a+g?6|>Hsuv5`U$$HVX+C9_~^L+R3X*O z*E$|n|K1;OWfxb}Ziz+A<;aT=50i-X^ddm3U%#lY*iXUFp(mdnmB?DL=I?LqFU*P8*0T3>Olq1O)*-slsBX z{T*c!92kduA>Au|JnX_p!{#EaWfnO6&Np(7sMSRUv6x)_vU#;GC+f5HqNrw+-1cnU z-<)I1!p*~Je%Lt0+kZh-$!xG%&R5GYe@IQRf@%cZl<-SJBS+kz{{7vo5WoJS7?k+= zqP}^xbWOhl7IMcpej!9(JB6^t!K4-;sAWnOZxolBob#4dbR^-TDk#tDY^)gDQZu}F zsx8LpMEHyXE%C;?lckgKCD>G5+5ByD0{D}zq?c#+{loNGZAbe_n z%DmAF>tE-SU|DsW>S~5G@tUkw)$FOEZ=3Rcz7`MBAp27cF;r>TQ9k${@EGfO6Z)7)SEZVO zZUky)oyLl@&{GTo4xA}X&~3sKAaE57?D>IzpzlXlT~bO4#%H@O)t0!@LA!lQQ2@Jj z_S1Ji{#|_-33M(G8_I3t`Qm9SDHb{$wwtVM8pR(gf@3t+bBB~}vDE{kA=1?o$K`WA ziYHXB)hW{p`9X5YSi^B2WB)ats(3vU=GqQ`ddvZiFXxn=JmEgZ*? z6g>n?S3GMb^}Gz*O2_BF{Tn8$wg03M&+huJ&~K;NT|PhWX8QLx*|CzxeaUAONIAXi zC~0JZ2QiUcYm%G&N%poXtf}S05B2YKECCmRg_7zd{K_|`#3ogOOsz^vZKdGer|N@Y zA|pZM1{{zfWuz{2>`EPbYzn2YQq(%epIbNRfyunDE0|#FI2YTMuKmLv%7FE{*>N?iecL~T`PBJn{dh%q%*X^6`eAy?V=G8Ks zbDASEc%L1gXGgTn0(R|63{heel~66^{9?~c>Na7hRjclB&E4g19cF3)9&Y&2#ys+Y znPQ3rDd)zHtp7F%XcWSi+z0w={nj~f4v66rN%gReZzS8!gMYhbave7<_KBT_-_YPF zGI*#qk-H!S$?Mc=k0`=_A#tAxS<;-`?}4cb-@KC~&jH}-F+;7Mcs>`F=b*&Ul#mW0 zGLWDpejr3on;TG#ttoYQ&my z(P^@G`9dAs)l_||d++ElJNe%yUuN?)gy|>m7JylU8`QIBy#t}|ld1arJDd0FRHR$f zURIU4(Nkihi*k7ba2yur>3YZl4-j`D7A{Y0K0!@jk}s|hzc5xGyh5%zzcKlObTjO( z!7ElUEr_28Qc=`FPmw1eY3-_I9KlEcQTIAL?K6V61@P98KIDu6YO+5A@udqzg=R<7 zVKTP0rkT%OU1OXVt*PmO_E*y00^LRt@+D zu&=77oB(N&5Wpzj5x4H~az%F)Rbsi^7>ZYQUGy#b{F8h+T}>v3KdMcAQ?mY5@v1{g zA*%2H6g!5H7c6KKR0GfB9PYl6#PEXpgQ0pZd)&&s)ecNJiO-i$pzQFEoJ30a2T89) zvlLZ1T9J{LHGkqceIU|icKIyn>l34|kCeVXIASLpe1i(mA4BuUiTUIHc`VNJ*CCR8 zX8I}sTg?CLt%!;bfPAjTOMOfIUr))U!#yf(T%{pb@@k|VdGy$v>F@S4P3t`AfGq+K z0;i7^mnkDHSelR zT|D8LNH(I{;GMOV(x2a!JS&hR6v?z0gH!2=(TSG@>9XPX?kDDEDf%nJ`2Xv_v|Rm- z;qd%qh%y^lW{5J(=fWv9*FLL}=dU<+$fSGy%qxMFyzv-luPsW&!EEQ#5=E2yow`SI z8t$^Zt!NL3r?TJv!(p%GhNQ_39oeBHtDkN>vhrb)?1zY_Gc#8b*)@qG*YDKQRu?D| zinMAIO4FiJPa5L!1gAT$SMy0(^o7g^H})Hsvd zm!Ez+r&YCaz_%>VVJ}hsq`mw}FPIo2PrH{Ys=veD*^5WhFpW)76xcrK$rLs$BeiVnZOM=Gz7X&@#lTTI4qtvXUiG3T2H}$K!7w$IC-4 ztv+8Vj`hF81l*D}?xt4L$E=;(te-dlHd?yB-}2gfiS1lwQM1*|y~Y`&+J2&BXU{0w zCGMmq<6H^U;92;S!ZPC7IgBx%OwXC2^$a217=C=hkK-vh%R`q#Ph7a?sjBJ$zr=8Qbc} z9&$@TSmRLfHcTZXJ_khq+1UVH^i_D#ZTN9sncO8E8`rV!%OdLBq zKL*>M(Z_OXk@{$I zGvIP072TC2Pt21cT{pOVZ{HXD*$8`v6Ovq$Y(Gp6PYJ_=Ek7g5kfH*rx(6?R^mM2-&cN1jEHsK7La zKU}sIkI7cJswLt)FY@twILy5#PXdNVn$bn`QH*8)`X`C5oy37@wtFXu{++}zb+RAY zF6m_VwG`V?f?JXd@xAPB^h@=v!^6|4ljT}TNE0%sEb2L#THz={hyXo6!oO6cJk5)u z?L2T3M00=2P$5gEIg%hChVHHa71Lho_a?YpY~;Pd&Tw15*IvK(?ZVCo8m@8gURXW= zLrj)y-)7CTdhugP+2?{C=b4<^SR+jr$ChJqGZ`DjxfiGT#$Jjj=cm>dTh(d|bK`GS zvgq(_nS>K>bDEdKC_}p7Bxfm=pA?|n5c>Sbm9XkTa^jmz{5M2fy|KidhASL-wWwc( z`T=RaYBRVAYgDVrO%3>C4ql$tq?u71Bv92ma|I=CwEjAef@yE+KHELWK}Fq8F6uRd zt|1YOI^xv)fu2sKnQ*nhbq33#f;*8;Ib+|i^&ka$k)Awey1s^_C(jb0KHLaWLVbeb z8%fGjq&zYjaE}!BE>Xjl#~%qkt;PdJ9R~2@TiPK8j2*1BcMYjq)%mXO5s(p<^-a!+ zYh#qLh0aqz+Fy!|v~z;Ec33kMt&l~3rnW#!(6-zBXSOq1FSHTAhhZM-G*7hazLyT? zB$Ep*5bnCO7&Xh#6ytM_6g4#h;30S*!GbA(hs6f&>ZMjZ~8T0F;!rix}pC*2bahsI+b#mC$QdRuN!Tmb40{}3D*mDVN zU85H#KA0R|$)9P6lcDlnuZ_KB%iW9}B$_3CSAHTEUTBTuh&F$8xuQ8q?55C<^%=tZ zy=9fFVZAQZF*l?2oL!Wgnocly#PTUNvIDD6wJ=OwI-qGN4(UuvK$gaPi`mLeMX)BR z6}oj-iZXmIxn8T$a7UEu^%j%@kC3ds3);XRHDe*JA=K7$^5H9`ZFLtdBSDB!CbJmj z2hoIf(NJ8rUQlQO^YGn6-6Bs!w>h7w+!`-o%VtaN?{PiF_9ml!PF@IP7CU5+o?DEF z(N~jBTRQ+F{-XNF3K!ywjq&+i){AD}(Q(oiT^Rzg%bu<0zXPm9cv9VNnchZ1ybZiX zNL!kp&wKlvx}r0OJc2#T$^Nb%?_yZtI^oMCTp%tfSV40s`$8QJSGf+aNl=u_O0FBb zSi}O_v2LQVG2Hk+#6X#6f8RZ7QZ^4SQc^mnZ^f^Tz`pTcZ^fA3LoyOV5xKi$3y8oZ zLVKRYH#sc+e15?9o}>p{gwwXuw6L*bg84xrUC-Ie@bQZmUOa(8H9bfm z4;5{IL%zp9%N1}u4>B_P#d?&is+z4Ne1wfb*?nu{YgjORD|#NOe^><1#`u? znxYhivpLEY$MY$qfm(i!Y@y6$Ni(>(|r%OebEsaj-KUfvyC}|bJ-ju zl`i>2Ewy6ffb8i$2HuiU#7})Ab*=0UMX|@w-%_k`K-ujB+ntXWnjA4+^3X)daqanZ z_*o!fwJA&-ZJr`Q+g=@ZQs2=?Ba`p$ZKR;Z_+BFGz+~g56;a?tXruIqQxg&xl{9fA zQ0Hns3rovFU+}FZ0&1=Rj%vWJH<5Z?D9Y8dJ6AWxPehiZKoiKG`5SR#s0T9mLL5eJc{QPhUMF%+4NiAIyIRz%d7m_T`XN1eE|6HscMKvxQ-kBvN3a~< zm*t!juQb`e5%VgG!)2{F8N%U+49f9u=Yy!pS7Qpx`t^egb%I*9d5w>FauT_Js`mZa zHVi>xLs@UV^j;qO75_HV>0y!-0#%k{T4ngu%#J4O~EH!{1iR^uP z^U(7|Fg}-8D@~4BN^-f9{gQ>x=*Mnj`Rz&SOYxt@Vo6<&-TQsQRs00J1YNCqFElNQ&VZ$CcJ~~ zf(G@nkV{;j`;On+R(Q&ApTGe8qHCFZ-p?*l9{ben$Lec&Vi$RZzEy=TS_+wfZ>Hvr z!lAA$ANEpFYNm4KS7Q_zFu{f?%orbFgArVd7Cpot!`S@r+c}jQ*L^CgI7cLH}P+8HjV9`-Cmk3Nt zFaX5NF5ptMC=uII4EWHd(>iY&B{nvm)C^0MdajnLA;hCgB0dq~KzO#kv*D_qL)ZuE zFGD;BEfs~D)dc~%dcZk6h6dLk@(w|x1j}0QMC^AnQ*6OWBbz4}UD7|wtRKCvxwlCc zFB*}og{e=p$oMdtVy$5mrhwna#J1e2A&5E>(@9>J6TNF4^`tFOGmKyd`LgN#PZm+K zYJT8bnnXstRQJTgs?qm121itT#^m0mOrhFwQr&*%#21oxmaDR+-v{j2!agxGvYbT~ z?-$!{HVEZq==0arKg(ycuD5O-)~sC~{L`tlk@W7z@>0F$Hv>Fas0T>t=okB*U?fE` zB=108Q9s)Lg3;N>?-ZwN`kc-I3~FM$+7y4et_mdf0rHiNwwJgS7nIdF2ahZ&#Z_?x z9|#uBGf9{d`CQ$%_{;%uf^Rrv%9O(Jz{75QHlxTV(FZIyy0_tjoiOXWUH;c+HykVDD6I)Y0zBqRJ^kln#U)mi!0+MGx_Y(@_I2t)3mt%B!4!(|B~7M^Uv7h}M^v zO}SKS%fML2qUU(SrAdCp2?o^?TGW&5vLxgYo507MI%?n+jp1mZq%MIq^l&49S|XWsQR`ZU z?dh606&kK_h5X#AGq#Q{+SoUZAdM#sb_AvD3s3#~qx6+!H9qO6xU zFIp+O52>6Miiqz)x_uuG;@lR$Xm@uyE#9xm=nA+oq{WlWQJokJ?e7@ogn7fn%A8!Drs?>VcLEvobPz9}1qPl?Co zNEhk!21_cn)kX?+Zku(qZ*<5n@(q5`Ax64~my~-Qil&#dCu*ROv+{|OuW=AaAr_gA zm1t|rIGOVKr630>`?8|YVxtJsi4rObwqT`Brp`|QyAv8ftwU3J)Ra7L2(zgJt-p<$;&eiRVCwYUkb>4SVRxQrA zXFAB=>HrJaZ=0}Cxld6FHzmHRd+Pi0a9Sw>gyE#VYjDV@y);o>dr1JYX88;bNi_Pr zxXm2+*|yy334rys?-@TYfLi=FN<7u}oSbg31j?W!N9L52tC&cU_bY)ox^e?W!}AgPaexDI?x9cc>uJsFQlE23aS*#4u^hBfTag?DNpm8Y{32pV}h`Dh? zu6$(6BD(ce1{q$7(O6AsEyK ze>p2@%U6=;7X2(@m)Kt6L75o;$ZQ^(^O#-kY~SzMwhxKRhdV8MQRCLtQn7MAV!M&~ zpPx&V^`a^af;y~Y2ixWd)kcbQbkBiLpKP)mP(EDNhm6ONQ{>Ez^~m_)yZ?A& zoc)wYR^l-GDpPFzP`2k%cP%i^Vcp6dqIRgr^pyG4qkW zy~D^QW9X&Cs$?t^EirA|WOBB0o*p$08lcxg%g~zC zj+no!$k8&6j6is6b_Ek7?g_{rccX+;tSO)?Eiw&f1$yk=qsoU=$YT?ADR#8XI&bgN zJQAJQy@Cg32XjEDz#o2T4llzsVK^mtnP6oeCok45_c8mYS~Pt#Y!OeFRs<)QzorwK zdc!5;d$h|dVNPaqvf!UBok8Vy6P;N>&>B8s~l95n*7h&8_(NT%Y`{+ zsn|unut%-=aMNCgUd!@xql#&%;50I}{Wv~a%j0cF+GMJ#!a!1~ew3 ze~S)&`?u#Wp28pRyVu#{AD(99lV=A@pWok2?i=^~)9~HX%DEho7y);n$4e<#==dd< zB?=m7SDO^YYmzj=r<+dC|Bm(I1TR?vK5quCC`kb~Wlo5d7aP5CUO8lN0%J2fqH2Bw z$j2)ZfW2)1V)v;#Vm(9b`LVpFGwo~Z(Qe+nV!d3Lx;5dhXCJw#P5K}D-xD5)@hbI5ycImp=NYOGQflg%{-|)-?|9{L*BcCGiJi zCs0(5Ik@dLhoMpS4ZaS(vXg1EF3l?FSmA#~tey0TL{o`u#H`Y(h+R7&*!_*J{aWEZ zQ)jhtGO%32Eq49PEp_YepiV!S2^-_U=wDcTtC4qCpe3G=Imt${EOEhOzNdY;dHboU zSv94d`V1UkF{LBi*IY4ui0G?nS886J8OU_VsGU$v}FTYDQ^VG1#-^;DO-BG_Ho@UgPEGsRw_wt0>3_O@4*E(xxIZHxHBE@WZ8noXG3yCK+u&Z|nN`rBT? z%6z00BMc2{zVsYw{o;pPNP>})0RyXTC~TAwHk83H%^_bi*m`1Ed@ojf88X@?61#>Z z7fNXPa8zLJa2&r&Kn=aPSYW3iGl3vazAs8@@0gDCS$`L`jv?O;%gamk2X2!y%Gf~R zbcgKK;?do*G!J}Jkmv+`+Vmk|*fibRZrgOW+DVx&z}nLa@1#Optjf;!$Nl5~jQvx$ z$OrB;`EGJQN}F!qY`MqVyW=r)&0z~{>+VC#*JFNdG?wkVSbg(MXOiJOm`e5@j8En; zy3)*?egvd;*o5`YCLEu;r0rj;TftsUXgeNAtD=Ngn4d>%B4W)8X$aLaS~Y;B))_VH z%QiY16wAO|>LAZKV$>HEBraT5+A2S@f%)$#OJqK)SjVI8tT&5%?vg1q2IXERdu(Zr zu28dcOujDJ3c!|3;KU&5C>I)JFO8Q>8%5V9efghM%O&Dx7x_OoIus(Ct)>?q-Y4Gy z0y}kLe~C@uZ7{wXBXKy(Ls<6aZzIYG;pkw$qma)Ce2^JVE6(4qyOs@H6Gm(dCaol6 z9Uxr^toV5QaXoip8YHdXv0wXRyCfBso?A!Kj{~*H8e+Skv0$|BzXi$M3@C#rrT3u+ zY3?b-7aPqpM5#3@+pvTpCKG_Xy;faf)si~RQnKky2grdcUCX& z+T??+szT@DK!)nR0g#`umlRAQ_DicKzbbd`XT5q_S2VV=um}B1SNV<`k)8PU(T3+9 zo;fs6T5lv6J6ZEt%HwHhXX-M82*p%Yh(5dwP6}a{C0G_l1ZY2JHb*8!7E#({cM-tV zS>C19)x0AmjhanboJGw^y2xjiG71*$tyQB6dIci()Gm=aIRwt%gH9LTnob za84z2Fa~IK=#jyRHOQ2z_)-E$R?FYEl3oNW$(;rN`ZX1+t%4`eJE}qNO2cLEBQU<4 zn5qZkbdR?9kScB5K4F{vI=pCNzp0*x8Tl(HU{$6j=jd#PN zWJCW}a9uUe2#?735i@ZH0|qPVCQ&m!yB=IAc}*R8*YJ5b4Lw-nkNmshD9}}Z#K(4g zLN(+!_M@Hl`*QP4{oO*@#5g$D+aKu_&JjzZ5=ky_#3+)mayxhJg|34@u}j$9qja}_ z)vbt}5bW_^6-|p`Q}>_+b;v<-DqgBbF_r4vp&y17aXxFq2DAD;IqxKZ9{s>1d(-U0 z)9Q!1C|f*o+dQBg9%y}|{mW#$z9MS8&Uo13T5s4HLsr2fTi&an$C0u1{Rs(j3e#74 zELCYYuzs;6`+dZPJPo|)8|9(qMyFuw@Xpe6adx2yWYPf=?3y|Z`q`aocBv}iVt5C8 zDI*9TO2urVr4yNq6fKn1r~9Eg`N#Q+5RCzuO(Yi-I0L#IK8{j|CrHH~;G0d>RmUg7 zwAGP*hg=R7&r^r_oxb)dy<-D1?qo1`;)LAv627Tyyd^WuRXHmc6qTlX6OSB*;?FIh zbTRZ_)jUV<{uBNBT2_YhcZ^$E4Bn!dFDR;c@Yciypc*{L&eXmBZB?jKd_#YnpE-)> zx*dvZvS{ySsuOEUB%TzEdqvgEp%f~d@5Wn#NqnN3le!)FD@gS6QOw1&k$bjJ5-xw3 zJ`>b;w#2gct!ZKW&C&~Zp`&=3s>Ykj+mfjoK1#NRE8s04jlL#2=WC;N2%;+n^w@J0 zHz9-8$CR|FvJ-v7fkMVanoU*rmp#;+zN(X(VHHY2e1AHOjwTf!IoK{}5^a((`^Mq_ zs_5;gMB*^E`YU~stnN%dHE|+(U}yog z07Ryg;4Rl+^I06ZFFBts`WE^tWfEkz-`NBNdmZV9P2R2lFLE3XtT+b`DNeD8{Un8ehPwjjFleQ)b<#8ssVz5q3 z6AEpdsjwJqQioNr5xf~_=J`w`C+!FbPpA(A!dj2`>w1)})yf-Xn-8g_wJkh-XQZ(f zZqp{*WxJR59vTDZ6A!;HK=6#!7Bsg_oytKii=Xkho)N}3&Og#q{Hz1e3<<@jfn&I#hLmk0O)X0 z=xfGAs18duL%~#{O{~{ddBaehM!5tUK6bR%5FfvIWS{_=8c6sE0A-{0O}=p-HXnIp z#)CidHRZ4H!q*rW$4kVJQm&@dkk-1`mQZ#b=knLPvf5AyBKRzy)+=z1wybQF9N zu}`C}-5GuUFp&=}L^}hV_lbFKVC3$MP99S7G=aHxXLSFIWBts4tKr#61mD-cQ{2br z2*&U8PZq|{jL8;6=yrHH8D86M%6u_?_neM+dspRH0C}_%cXwq6<3b$Xx&JP8@Qc^M z(JwF5GGx)6&z7$W9xp(X#ouf3RUaqdkG|D63O?J^hx{9Xy!KSl zy+_`6s`$dA1_;k9tF5A855{buQNEk*8Ez`)eI7u00cCa_Vz z_*C;8&b9UJvAQ5r{B);Y0N9qCKH-c>*GuI4#t&ql$Jzze{f?jt);ODQs7hC zSSWa%XSB4K;MQy@Q(@YY0jxKM20_qJ`yoQhn1q2tPyVkW>y&Ty;AiF@0{m+_3lL;u z9%ww1M77tVqqfs$`lXMo^;uY@w;vIm&n&=8RwH0)1Vp6G^)$eZS~SZy`iKg0Wt+@+ zFB2hS_6474I%BOFo!)J7{O!?Zn?fXouY`}jryar`C_2@pasDh;3r>)vCx4tz#!A+w z6>yMtplcXi@}ks9HnAx+nV(VpX9~h5m<0P6SP?XiPf#F5nDD@qtpD<_I*~TZ(`t(o z(j37NF}0l1-QY`EStLB`^uD8hjyz#QeC{vxg#A$2h5hDTJ>fezoVpiPy^va@(2t$m z%Heb$T%27s1`V1mv0GEQ$-Nu9APGM&DJ#%l;2~ zEu|>^J9%|b@vEBPqw4Ignu5E0#b;`S#ZuS|o`fWvA_g}N1KEZV22}ry@iGF2L8%gzP`;*no1 z4ZgZDllm5S>*kSX;hA9p&c<|sXNWvFyQ=M`w#M`9O3ftlc&THw#%5^TqG6ylGNUzd zqA0{CFW>-e%OfoOP-FR0rAI!`EG{P^KamaJkwflMAgmn-Asqm{>=7m;Q`2(YNruNm zLZvIblTy9Id7HqBdQfpg*(mEo609lsjD(7>xzfF?L%%zbH^^spXPntu=WRe3)Y-q} z&0}te<~vmJ+_%T3?FCiy(v78Q8+rOjk>s@1o@_q-U;iZ*Xq&OX@7TE$8}PHwbIq@| z27ihcZwp{@2Ot3{D&i*Dt84(7bN2do;zOw2WwXUx>ZpxH2LD zE1a=uxG5azM2>1tL+HiO)qRHS0XQ9Uf`6Pbox>Y&7Mr^X@Ym{;ZaYH-y{BsCw-$>I>BJj z0guS9(xFOfIReSnXIlN)LhOdxRW6q#AyD+kbzV(!%BOwc?dMh=5dGx7~EKlZ?w_uw%=%GvOJQu9Wffdl<%>}p~#I3h58nYh7VFvj(rx?U56T6~C}p0Xs@`9di&Osz5AVY>V$F3McY3Gb8oO`RQI%%yD!w zcw5cpYTa5)HT@XB_id7uWlwYrVB+ZAuUQ`sep`w5w;w(Zj36OmYaN&E;;El|h%{SY z{*m=ZWc~SwL_7QE2@-w<Flm~NEZW50 zfoUhBI8BPKaq1gNeF*S@fuP+5QQvI$t@WVf2R65Pk+2z4f2?(8B0Z|MHiKL{}OxYO%4q4P}pl9!p$8wtvS+CDT1H z6%1B_h&Kdn89%&vjaPWE2@+cXquP?ynJSL>pZ-DcwUPWG-oByueEX+(V`gjQ|7=gb zmoViACVFRS|MK{gJvz5#yK9?TgYGqQM^O}^sgENc9h~v%;lYKz2i`&MjfJQ+i0T@j zRxi5#foX-dZGTKVd>7iT*Q{hyvC$icr({X4!6k)x@1Lnwbq!f6ds$PYh&D{)mq>kZiv-w))?O*F(}lM#`;$+0+3$H_+v&pa zAAkQi|Ak2@@bcHfDPi4_e%#{4rsF4h!PlSYI2h9gReY=1ZsKN0Y-bXr>@xMuqDfOv z_3%tJxDSN5bJJU~($|6Ck>Wicef|2 z(iXq}sX8thuXXLWBzL)fbz~0~m$O*)HdRCYA4R$(st~t*Y#(pc8i}ObErc%eMa%a? zGOA>PNRc=1_EB7URR^f0hmAr;if5C2nNHcv@1an!1^oeM>DqKc&Vm-o`d&Uob($y3 zLWcKBGTlUZ@j;!|sqF@mk36l<1XAND>mUU6E#*8Bc~W5B(eL3pBiGet}=v=r~d*Gn$<*NJGa-P0nRNkWF}zXrX=AKI7h+b%_*4{@6w-7F-x$ zSkk`Wf>26spEs1~`wLrloKo%dZH~~sMR^pyZFVgON50Hp7q4ZWxDJkDj)}*P!P|`eRlI}(t6mu_(ehQ2i zaj(%nw_@19mXZA@1q3!aAU--5_|MoTIt0deK2^*vJ`18g>Zkp7eQ-k5x-)t>?BCf> zwo_$4@88)&2)i@-{DF)W;{m}<{l0k|3ZP2HA96!tdG^le{-0P!{os?m;#bWNt7!?0 zULnX{=FRf3YG(X~uGA!Zt3CL{PGHM*!Oien+Ot~ZCaJ7>Q^Qre;4IO}%LWyDyR4}) z;nNtwU;Tb9;=PjJR%PDWSQS~5`OIsi!E3JyEEBJ+F@dXQklK_(JLG;k_j~t@y(NCl zvF}WgJ_KN0jed^Bt~~#+H3S6hajDRyZiJHOl4{0>gFDlvGB5UldcgYp8-i!Zpo?yfkL70u9jIiFlJ(pjH`15;Eq>9%CPa`p>l5Z6oOP}Ig7 z@%zN{S#k=gXc)QO^mhn(YE!=(F2J=#s>(%GHbR|bG(e|*)TzvcrE7?Uz*wc>8gy6-ng9fgCEwv$O&_3Kj!m4#VItL~qDxuyF^zU2I zC06tKWV6kZraww8wYD^U2sxoSj6rJgqtN9NpK(p*zcraCeOWF{kGZr-UWgYL^2J!Z z7|R#VaD|g%GC_RMj3aDprtu3a`S!_{R`CHet!4xZrHx>;3+u*0=FGtfX6lqd;EoP| zA#@yWM<%r9992M?V+vcauwMY_ zK`|l6@llK@jS~3W91vkC^ey^#MOb=SQ(et$_zrOyk_#&f$p!}rM3Bs~P06t}YK5_H zgyvS4D>z^nyQ>G6%A#Z*86;J?iyih@7^$<1SlZUr$Gv2Q@lMJ9xf*lUkA7U3l`T)h88;AZ&WCs!d}g^GhhumDTjvylAA0hTFF=t9TRcj z3*wp@ySJZuF4Zq(q!8PA;?ay`gWa(FWtGZOg2*^3LWqL*yD>Lz-bc1;Ve9Gbo1vf-<{V}T82 z{Ckckp5pbF@oQi71j3sCoj^oJ0skWb7F(NGir1j*>*>F|Pq(E%eTsfM?ea1tuqA@4 zyTr}rOB+Uj%dkMHGE1D2pAOba^rYr+W$926Zs#(62fv9K?iQ7dr5Q+{wzR-^^{KsSc zc-#`9p}`rkK@MpvQ?PXOLDl)h_tewG=hV~jX#zh>y+4)lgkOHb@PoYRiCebZF=;Z) z_4M(&Z1po6=Suo(s(f~Y46QqTQ9)LML}Talv-Nd8>1P}IFBO>z2zSxqSEh<{s-jNp zrX@guLsAeJf@g?+qM!kZ{1-vy&dQragCr3Tyj5F>DK%l9u~UeJLt-!rb=l+$g>rUS!p%m07vBWw+Xoc*gM&wx_OPuxrQFDTs8tj<)YNNKjEfc7`P<0 zOcd$KYNA~X!5Z>D-RlTZomQS&a;gx@h#P61>02W(V<}XAGgJR8tFcuNV}bZE#<-pW zd;$0we2>Ouq8jHDb)hZ_)*cfvoP5|gXbHe}s@Z`Espn=>s}1TgvQp+4Vs8|2i&d9e zd{c>YTK3kN*}#h|Xfu7!Bpw}P->#MpK}$^`4LUxFz_cJ$_&H##W{i3vq zm8j&}mJAAhPkA}0{9XI$qwFLsmak2*L#pH%?OX%b7H3$A_+5J!56bk3V6RV!rj>j+8FR-_M%3*d7kdgeg z&|c1Rgqb=4GhWS0(y?L5^WMGK@D5p4OKc{Bsv#>BVQ4&xq2axci{NM9bnlhYCVN-T zy7lM*cvrc!YxbQhKF|5Uv#$p5Xk5}=M1GtS6xutjJsv6SSCQ!E>pt8BJyj1fFVKA` zUk~20+65y4(5q2~JhC{Z2a0>Xr#r7Ef%pkN%gIqHy0KA729G~J0DE?O#! zs!V0Oo>PEgnHoJyJ&83-TRzm(oYt>^)-*j8@nwjw9S7y*w4BVRPqfPenn|N391=? zy6x5|Qz}IOIF{bmj4xJDP-Cu&f_ReZ2_nPW3~LN+z-7`kO-%Vd6inHOk`UniHroqB z_-TPw-u7iGlBjF%*8ZpH@mu4V7FOcz@`gf>vkr0UPDB}wmw2t4p!q{w4oHgFQ{NNO zwmXoio>~OU@(TD#%tcK>c)F8QHN#RU+5bg(g=m$&ZPMYSdS8OohTSV^IQU%P|0Lbl z{Avl#q}zf3tcNKrl3Ci&BKbUv=L^q$qdct~JpMAFJHjJvivJSij-;{)4G`0cM}NX2 z!yUiGhp657!SP~We(KlvS0UeUGhrCWmYX<=uva6mgMP+k;py>IBr-I?W=~8+v+!K> zp1ZrQPELdP>KWz#)t3#rB^AZ$bCQo9;QQ4>I3g>kof=vM}G5#DcL1{as=Kcb4FR=gi8Nd;)NMU`Ao;iZREp^eu&diJjPFc z;Xwokp%AvXD3lCT<9I}MY12V5dqw<(aecQ4@H6XuQWCse`h%Ft*;RXpVdwVIjQAo) z5T!m?k{22hn2Y)@GK|KCu3Jc@l!yn@1wMX2=K1WSTi4W=OODK6kjyg8XRCaYXeAf? zm`0j5rrQTr6-Aj=%W{h5MPY`zQa*#^6@L0d|CZ%#@$-)#{gyz@5DVM1gn=^rhPH)^ zu^iu0_Cpl(+4jk32S(ovx1^i)lm2gQoTx&wj9e8W+R^eH5$Py$Shn*h^@mBj*b++n zONFzoodUmatxnYE^_C`>60IamxTdWkqtZEA*uJ8uV9i}!V~{N~Zx2(pMbaV4b&IrwFyu+q$Trx>wS^xsV;ht%iTjEF&EIBbFA~klLQa;nBX=5uqe9Nzf9d3oqTaZm(Jm*dgi^4z#1Zh)c3GT>Nen(CbWhYEwOChb*$TU6spci+cLJaCnyXNcT%Jk2q|pGRFEwww*SJn<@Z($$i%XD@EORQAM*4*dEVdV7SL{lXPm(-y zl$;gtGgnUKD(@D7AV}lBmaOy z_wt}6by0hQP0!J;3Np;8h0@iyUb*9VCL^rTP ztL7P|x$L4Cc?G*ivnY@k9>N41-tD}urzHUlsR5X&QCJ{17iIfG-1~~0fjHSZ);IMg z0`HToCrUFGL`fzx9-(*dDUQM{AcVmF_33wAnnOLG!6LxS7wY_}mVRvdtd~gC^&YET zQ8E*wrbGSsD(jkQy2rzNl%4cWv-kJzq3pe{Gak%1f!DPnq*~lv1|#7(!ociq=`oXd zt@;&>rtR3-d*T|`qwHEWXp}8KB*)JuORS^)tMr;j)5YL8P$0`xtap!o)Hfq1vBfQ$ zu^-cq`ep;fVGm#q<+QXX4AS9!r=NB0em(O(t07LK(**st5id86S=E#1j8O%2Vl^;X0P-F6=Y8OY5HH{k8>K|UJ?%Z2lx`5hx z!@>OrU+P)aLq8lGKm0Pgi*SFgGOur#@Zs^`BuEOdKA8|&V{@Pjn>w$}ScdCM zm(T8~*PA;`@xbP;DredA|L;czbI!AQT`#g<>I=Av7G*P5w+h3~oB5*5ty`#e@Wk0d zHxHzyKClToGc|m*OkrYFb85q5mExc8B6f>l1{_(Uxc>j%D^_fMWyO!xOP3(wp+PdTvC^+sR*9=V?D?`D8DivkPn zWKgyMSdC-{bgy+6h?=*sBMM}gYNtRm)|NEHmOS%D^|;sfhk4jL4>5BHFa(!$%CP&7 zRX#Z+@Q_28rm*S9?_GT3YC7FKUVHbRC96ja9;O>w5E+@K9f%tb$p{S)v}bS#?P{ue zTJ*00GR)0>1d(p&#c0;k2On21x}o104IP@C7XY`@*U{(>pspc5AT7t<89g|DKYckUANOAAy@bacD0*Z=%zsd_2>u;auYy13QOX@;1fZK4ttY*s;j#3elH@QpLlz7>i(J9PY z=pY2X<~yoOuj2B!@Q`%E6es3?pP5^3%lot@O#a?lQ3p$^Du@oLitVL0w)BQd2St;~ zpY4pZr~NOfl*x9$SPxF#<~l?yo!ZeZ6)PF>6MejDQ?il<1X;CUA!qf{DIV=2a}?=G zK=Iyw6x-7?x>N`K&vYW9erASVyV`Jyr5?W~7*?@rMNdG( zXfr*!-bj;;$-sDslGeXOHGtj?@}dZ_CS8u{*faf#R};rt?6aDFoiEDEY7Otk z4|1FoO}{%QYT?xDxI60Mv#3Y9uyWZijnWTsqriSWZ{zR z#!xl&CQ{YDWfzXF9SJr0UT68Y>wx>sUlRf6?sGl2vD8D-T^nB#1KwyG3EfI^e2h!V z*6}g5qXDwDw+)b~9gmW&9uJk@U^O0I8{~ilB#Vb( zaLR+@V-hwV{2^?lGV2{FA#-z4W{N3g?@8OB zJIsz)RBryUSawg0y8P91b-3ui)f9IR6=PMuukrt$u&U?Z7~W(8KM1T)2l<9LKY?0G z&FZ=XV;T2rVEQ9?RbTgtEplz?uV z_tjh=(U0Gi5VQS=rYC(3_l7I-a z=}5J~#JyN|TJ(}$^>tfyLswW7>Gt<>rhAQPhfVR7d+HSRc7-8FbKo2IYTb`N=^p)x zDlce(k9<1(@I&O+qB`_MjaRvNwU&!pJU*3Wxvj?rB!YjQ*-<%96dpR&ePuMmSu-atMic`RfPj=Tx~q5n^Fg@OG_a=e5Q*f^sKH+;$~Vdo7AQ(Ln!O zbsOYQ`%8ca=jBYjFPnYPvZVJ^)RyoNmtD4hBc<9nUv_1?dPxTz?-Lkn;N*&0T5ig| z$&OPRayC2&;GkFwzVVA}5=G|rcsGB{S&MnC|52Q+O>@5E;J2S)=7=GWm9X=)Y+zq& z^F`QnqMMcr>}y>$9GDNO{IsH-n_cZ(Z)xXxdpkE<+8K87!$CAz9=c%+c_b!?`tl9@ z0tebb3#*Hse&wDH&y(}T$Ed`3BhSDf1(oA3ukog{V?br~^SA~6`$T4&Z4Hjm$hK6CS|X~Z>(U64HBt5` zHBEsq04;|S6zlipNQy^Lc6~VARXN@eY`M_rgI&9y?}^Eij-P za<@0g=g``*5kzDm9gHV=qi$J7>W)9IPeoS)irQ|6x51&&Sq}#f6W?A}%dSL*3EmT> zpff@-)&LP|Tu(1BXp{P?8UwBqYIITNt{LL7|i2I@Wzgqv1%HxzP?)j~jji zE{CvN_ZlE_*H;0^9N$q(f@@LDJ+$sS0sNfikTl`={m;6dlDf~t^a6lx6k%3u2ftJd z;pCy^5e7f*U3B0=vnMfKG(mCOIh-6^9J#DU|KblddRmPh9;3d#yLGwRdE4SZ7oCrL zc*prfyG#OpI{X(o>LA2h3Vk2z8J8p;jz_D9Tr>iMx7>y8jdp%U=CIqINGCCnI3teR znKrHWFF)1wUfh=}vAAy*?5=(Abdld6&TX6bXu)Nq|7Zek6f z{YK-{JO-~E7urN&U6Mm<(_SbK9~;YHS_X3~saNMdBm#$gTun00Y5d#l+Nc_exx&urQDMO0 z-q)+=&klRT!XB)q&QdAiJ=_bw!jW60LlmAMwsGtWb}#EL2Q#=RkM zow6pQG_Fv-=VMCF!zr(j$%42(H(ip@Db6X0gpENarM1@JYt>U&bvd{(*_~XMOh^4z zAH}12&>9=`nTZWT5)1>TB0f*m~C{n^n*_sCZ{dFOVn~6Q!TaL z<;}N>OTDfNk_MBmLQ#!Z8W!wz#h4tDhD{CPh*%V{h|mujQ*2K{7J@9XZ})}-It#&n z&I1IRYs-J!JPNHb{J923nq&PiSa<~w%}T8WNsTE*I$@9yI$_fC(xtlFxh5&-u)Ms4 zCZ$iwFb~mI#Rd*p2OQR9{V?g3JD#8!wz6IomghrZ()( zTEbBQ>*WNoIS_3r{atb%GkSp6YyXt;Uw7rniNXW%lQ8YoPLSSL7m5-~m@PJsEuK zMDYMicKq80Si>n*I`j2mHayMVo6#opr0Vc+=a9eu*dags|6$10;C;l9+w(3t-t4_% zCKRp|9Wo2k*N~}8oe13_c}e_dr_FS06R@YSiYk8ZoxV&bO>=yGam53=$)tC z8`R0RCl$RSG_CgF;yr!J*z`f2P)8fk*&>0<4g=b_tOjv_Jq!trQ*jzyBVVlz{KmnaoK28JgZ0(S^uZrh`2|0~ z#=+j~*q#38&eW+CeiER5=UcyfD2Fa;!`APmKGx5Uw|}qYa~>{bHA5yMRnk7x8cNDZ z^sSoPS@G{mE`P6hUDw`Z5b+8~ev43`81%?+=?~Ts^4F+!Bl>SY?&?VPxZm2Vk@qXT z+To;Ub~-0a+S_XF{a^~zMN^lGIQ%}TO^d>9D4Jj zQa8#4@H^?ENG5p1D9%!Y+Lt7ts=2PKBC~g3C|WNk)!5f5q0Qjz+b_6Uq?TAy+#zazEzjM;w0Xde`S!e9V7>5_W;5Ath4cKNxa4+wHSvZk0&DaT6v+glq&Rj@XXD05?5wN8 zOWb!gFv?_Y!7;h$4EL!S^a6kpl1&)fk_!SG=#r;y?Qi8T(r6Qgk~zEFWS5Ws>5K? zWt`>o}uwdZ4|I?H*AdqNKOSXWONg-|y3o v+jUhF?AfQ7)E++STskNs{WyWHXNS!y2D}b095}EKYcFye6A+|zMQZ5 diff --git a/static/babybuddy/js/vendor.748ffa77dc7a.js.gz b/static/babybuddy/js/vendor.748ffa77dc7a.js.gz deleted file mode 100644 index 3c474031588a9a412d4a70bb17af08a0c86f6b34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170803 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 diff --git a/static/babybuddy/js/vendor.748ffa77dc7a.js b/static/babybuddy/js/vendor.9c126bd7589e.js similarity index 82% rename from static/babybuddy/js/vendor.748ffa77dc7a.js rename to static/babybuddy/js/vendor.9c126bd7589e.js index ad5ab400..9b13ad30 100644 --- a/static/babybuddy/js/vendor.748ffa77dc7a.js +++ b/static/babybuddy/js/vendor.9c126bd7589e.js @@ -10365,7 +10365,7 @@ return jQuery; /**! * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.14.3 + * @version 1.14.7 * @license * Copyright (c) 2016 Federico Zivolo and contributors * @@ -10468,7 +10468,8 @@ function getStyleComputedProperty(element, property) { return []; } // NOTE: 1 DOM access here - var css = getComputedStyle(element, null); + var window = element.ownerDocument.defaultView; + var css = window.getComputedStyle(element, null); return property ? css[property] : css; } @@ -10556,7 +10557,7 @@ function getOffsetParent(element) { var noOffsetParent = isIE(10) ? document.body : null; // NOTE: 1 DOM access here - var offsetParent = element.offsetParent; + var offsetParent = element.offsetParent || null; // Skip hidden elements which don't have an offsetParent while (offsetParent === noOffsetParent && element.nextElementSibling) { offsetParent = (element = element.nextElementSibling).offsetParent; @@ -10568,9 +10569,9 @@ function getOffsetParent(element) { return element ? element.ownerDocument.documentElement : document.documentElement; } - // .offsetParent will return the closest TD or TABLE in case + // .offsetParent will return the closest TH, TD or TABLE in case // no offsetParent is present, I hate this job... - if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { + if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { return getOffsetParent(offsetParent); } @@ -10708,10 +10709,10 @@ function getBordersSize(styles, axis) { } function getSize(axis, body, html, computedStyle) { - return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0); + return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); } -function getWindowSizes() { +function getWindowSizes(document) { var body = document.body; var html = document.documentElement; var computedStyle = isIE(10) && getComputedStyle(html); @@ -10828,7 +10829,7 @@ function getBoundingClientRect(element) { }; // subtract scrollbar size from sizes - var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {}; + var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; var width = sizes.width || element.clientWidth || result.right - result.left; var height = sizes.height || element.clientHeight || result.bottom - result.top; @@ -10863,7 +10864,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) { var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); // In cases where the parent is fixed, we must ignore negative scroll in offset calc - if (fixedPosition && parent.nodeName === 'HTML') { + if (fixedPosition && isHTML) { parentRect.top = Math.max(parentRect.top, 0); parentRect.left = Math.max(parentRect.left, 0); } @@ -10938,7 +10939,11 @@ function isFixed(element) { if (getStyleComputedProperty(element, 'position') === 'fixed') { return true; } - return isFixed(getParentNode(element)); + var parentNode = getParentNode(element); + if (!parentNode) { + return false; + } + return isFixed(parentNode); } /** @@ -11001,7 +11006,7 @@ function getBoundaries(popper, reference, padding, boundariesElement) { // In case of HTML, we need a different computation if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { - var _getWindowSizes = getWindowSizes(), + var _getWindowSizes = getWindowSizes(popper.ownerDocument), height = _getWindowSizes.height, width = _getWindowSizes.width; @@ -11016,10 +11021,12 @@ function getBoundaries(popper, reference, padding, boundariesElement) { } // Add paddings - boundaries.left += padding; - boundaries.top += padding; - boundaries.right -= padding; - boundaries.bottom -= padding; + padding = padding || 0; + var isPaddingNumber = typeof padding === 'number'; + boundaries.left += isPaddingNumber ? padding : padding.left || 0; + boundaries.top += isPaddingNumber ? padding : padding.top || 0; + boundaries.right -= isPaddingNumber ? padding : padding.right || 0; + boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; return boundaries; } @@ -11116,9 +11123,10 @@ function getReferenceOffsets(state, popper, reference) { * @returns {Object} object containing width and height properties */ function getOuterSizes(element) { - var styles = getComputedStyle(element); - var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom); - var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight); + var window = element.ownerDocument.defaultView; + var styles = window.getComputedStyle(element); + var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); + var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); var result = { width: element.offsetWidth + y, height: element.offsetHeight + x @@ -11344,7 +11352,7 @@ function getSupportedPropertyName(property) { } /** - * Destroy the popper + * Destroys the popper. * @method * @memberof Popper */ @@ -11451,7 +11459,7 @@ function removeEventListeners(reference, state) { /** * It will remove resize/scroll events and won't recalculate popper position - * when they are triggered. It also won't trigger onUpdate callback anymore, + * when they are triggered. It also won't trigger `onUpdate` callback anymore, * unless you call `update` method manually. * @method * @memberof Popper @@ -11568,6 +11576,57 @@ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { return options; } +/** + * @function + * @memberof Popper.Utils + * @argument {Object} data - The data object generated by `update` method + * @argument {Boolean} shouldRound - If the offsets should be rounded at all + * @returns {Object} The popper's position offsets rounded + * + * The tale of pixel-perfect positioning. It's still not 100% perfect, but as + * good as it can be within reason. + * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 + * + * Low DPI screens cause a popper to be blurry if not using full pixels (Safari + * as well on High DPI screens). + * + * Firefox prefers no rounding for positioning and does not have blurriness on + * high DPI screens. + * + * Only horizontal placement and left/right values need to be considered. + */ +function getRoundedOffsets(data, shouldRound) { + var _data$offsets = data.offsets, + popper = _data$offsets.popper, + reference = _data$offsets.reference; + var round = Math.round, + floor = Math.floor; + + var noRound = function noRound(v) { + return v; + }; + + var referenceWidth = round(reference.width); + var popperWidth = round(popper.width); + + var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; + var isVariation = data.placement.indexOf('-') !== -1; + var sameWidthParity = referenceWidth % 2 === popperWidth % 2; + var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; + + var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; + var verticalToInteger = !shouldRound ? noRound : round; + + return { + left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), + top: verticalToInteger(popper.top), + bottom: verticalToInteger(popper.bottom), + right: horizontalToInteger(popper.right) + }; +} + +var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); + /** * @function * @memberof Modifiers @@ -11598,15 +11657,7 @@ function computeStyle(data, options) { position: popper.position }; - // Avoid blurry text by using full pixel integers. - // For pixel-perfect positioning, top/bottom prefers rounded - // values, while left/right prefers floored values. - var offsets = { - left: Math.floor(popper.left), - top: Math.round(popper.top), - bottom: Math.round(popper.bottom), - right: Math.floor(popper.right) - }; + var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); var sideA = x === 'bottom' ? 'top' : 'bottom'; var sideB = y === 'right' ? 'left' : 'right'; @@ -11628,12 +11679,22 @@ function computeStyle(data, options) { var left = void 0, top = void 0; if (sideA === 'bottom') { - top = -offsetParentRect.height + offsets.bottom; + // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar) + // and not the bottom of the html element + if (offsetParent.nodeName === 'HTML') { + top = -offsetParent.clientHeight + offsets.bottom; + } else { + top = -offsetParentRect.height + offsets.bottom; + } } else { top = offsets.top; } if (sideB === 'right') { - left = -offsetParentRect.width + offsets.right; + if (offsetParent.nodeName === 'HTML') { + left = -offsetParent.clientWidth + offsets.right; + } else { + left = -offsetParentRect.width + offsets.right; + } } else { left = offsets.left; } @@ -11742,7 +11803,7 @@ function arrow(data, options) { // // extends keepTogether behavior making sure the popper and its - // reference have enough pixels in conjuction + // reference have enough pixels in conjunction // // top/left side @@ -11812,7 +11873,7 @@ function getOppositeVariation(variation) { * - `top-end` (on top of reference, right aligned) * - `right-start` (on right of reference, top aligned) * - `bottom` (on bottom, centered) - * - `auto-right` (on the side with more space available, alignment depends by placement) + * - `auto-end` (on the side with more space available, alignment depends by placement) * * @static * @type {Array} @@ -12354,7 +12415,7 @@ var modifiers = { * The `offset` modifier can shift your popper on both its axis. * * It accepts the following units: - * - `px` or unitless, interpreted as pixels + * - `px` or unit-less, interpreted as pixels * - `%` or `%r`, percentage relative to the length of the reference element * - `%p`, percentage relative to the length of the popper element * - `vw`, CSS viewport width unit @@ -12362,7 +12423,7 @@ var modifiers = { * * For length is intended the main axis relative to the placement of the popper.
    * This means that if the placement is `top` or `bottom`, the length will be the - * `width`. In case of `left` or `right`, it will be the height. + * `width`. In case of `left` or `right`, it will be the `height`. * * You can provide a single value (as `Number` or `String`), or a pair of values * as `String` divided by a comma or one (or more) white spaces.
    @@ -12383,7 +12444,7 @@ var modifiers = { * ``` * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap * > with their reference element, unfortunately, you will have to disable the `flip` modifier. - * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373) + * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). * * @memberof modifiers * @inner @@ -12404,7 +12465,7 @@ var modifiers = { /** * Modifier used to prevent the popper from being positioned outside the boundary. * - * An scenario exists where the reference itself is not within the boundaries.
    + * A scenario exists where the reference itself is not within the boundaries.
    * We can say it has "escaped the boundaries" — or just "escaped".
    * In this case we need to decide whether the popper should either: * @@ -12434,23 +12495,23 @@ var modifiers = { /** * @prop {number} padding=5 * Amount of pixel used to define a minimum distance between the boundaries - * and the popper this makes sure the popper has always a little padding + * and the popper. This makes sure the popper always has a little padding * between the edges of its container */ padding: 5, /** * @prop {String|HTMLElement} boundariesElement='scrollParent' - * Boundaries used by the modifier, can be `scrollParent`, `window`, + * Boundaries used by the modifier. Can be `scrollParent`, `window`, * `viewport` or any DOM element. */ boundariesElement: 'scrollParent' }, /** - * Modifier used to make sure the reference and its popper stay near eachothers - * without leaving any gap between the two. Expecially useful when the arrow is - * enabled and you want to assure it to point to its reference element. - * It cares only about the first axis, you can still have poppers with margin + * Modifier used to make sure the reference and its popper stay near each other + * without leaving any gap between the two. Especially useful when the arrow is + * enabled and you want to ensure that it points to its reference element. + * It cares only about the first axis. You can still have poppers with margin * between the popper and its reference element. * @memberof modifiers * @inner @@ -12468,7 +12529,7 @@ var modifiers = { * This modifier is used to move the `arrowElement` of the popper to make * sure it is positioned between the reference element and its popper element. * It will read the outer size of the `arrowElement` node to detect how many - * pixels of conjuction are needed. + * pixels of conjunction are needed. * * It has no effect if no `arrowElement` is provided. * @memberof modifiers @@ -12507,7 +12568,7 @@ var modifiers = { * @prop {String|Array} behavior='flip' * The behavior used to change the popper's placement. It can be one of * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid - * placements (with optional variations). + * placements (with optional variations) */ behavior: 'flip', /** @@ -12517,9 +12578,9 @@ var modifiers = { padding: 5, /** * @prop {String|HTMLElement} boundariesElement='viewport' - * The element which will define the boundaries of the popper position, - * the popper will never be placed outside of the defined boundaries - * (except if keepTogether is enabled) + * The element which will define the boundaries of the popper position. + * The popper will never be placed outside of the defined boundaries + * (except if `keepTogether` is enabled) */ boundariesElement: 'viewport' }, @@ -12583,8 +12644,8 @@ var modifiers = { fn: computeStyle, /** * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3d transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties. + * If true, it uses the CSS 3D transformation to position the popper. + * Otherwise, it will use the `top` and `left` properties */ gpuAcceleration: true, /** @@ -12611,7 +12672,7 @@ var modifiers = { * Note that if you disable this modifier, you must make sure the popper element * has its position set to `absolute` before Popper.js can do its work! * - * Just disable this modifier and define you own to achieve the desired effect. + * Just disable this modifier and define your own to achieve the desired effect. * * @memberof modifiers * @inner @@ -12628,27 +12689,27 @@ var modifiers = { /** * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3d transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties. + * If true, it uses the CSS 3D transformation to position the popper. + * Otherwise, it will use the `top` and `left` properties */ gpuAcceleration: undefined } }; /** - * The `dataObject` is an object containing all the informations used by Popper.js - * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks. + * The `dataObject` is an object containing all the information used by Popper.js. + * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. * @name dataObject * @property {Object} data.instance The Popper.js instance * @property {String} data.placement Placement applied to popper * @property {String} data.originalPlacement Placement originally defined on init * @property {Boolean} data.flipped True if popper has been flipped by flip modifier - * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper. + * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier - * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`) + * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) + * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) * @property {Object} data.boundaries Offsets of the popper boundaries - * @property {Object} data.offsets The measurements of popper, reference and arrow elements. + * @property {Object} data.offsets The measurements of popper, reference and arrow elements * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 @@ -12656,9 +12717,9 @@ var modifiers = { /** * Default options provided to Popper.js constructor.
    - * These can be overriden using the `options` argument of Popper.js.
    - * To override an option, simply pass as 3rd argument an object with the same - * structure of this object, example: + * These can be overridden using the `options` argument of Popper.js.
    + * To override an option, simply pass an object with the same + * structure of the `options` object, as the 3rd argument. For example: * ``` * new Popper(ref, pop, { * modifiers: { @@ -12672,7 +12733,7 @@ var modifiers = { */ var Defaults = { /** - * Popper's placement + * Popper's placement. * @prop {Popper.placements} placement='bottom' */ placement: 'bottom', @@ -12684,7 +12745,7 @@ var Defaults = { positionFixed: false, /** - * Whether events (resize, scroll) are initially enabled + * Whether events (resize, scroll) are initially enabled. * @prop {Boolean} eventsEnabled=true */ eventsEnabled: true, @@ -12698,17 +12759,17 @@ var Defaults = { /** * Callback called when the popper is created.
    - * By default, is set to no-op.
    + * By default, it is set to no-op.
    * Access Popper.js instance with `data.instance`. * @prop {onCreate} */ onCreate: function onCreate() {}, /** - * Callback called when the popper is updated, this callback is not called + * Callback called when the popper is updated. This callback is not called * on the initialization/creation of the popper, but only on subsequent * updates.
    - * By default, is set to no-op.
    + * By default, it is set to no-op.
    * Access Popper.js instance with `data.instance`. * @prop {onUpdate} */ @@ -12716,7 +12777,7 @@ var Defaults = { /** * List of modifiers used to modify the offsets before they are applied to the popper. - * They provide most of the functionalities of Popper.js + * They provide most of the functionalities of Popper.js. * @prop {modifiers} */ modifiers: modifiers @@ -12736,10 +12797,10 @@ var Defaults = { // Methods var Popper = function () { /** - * Create a new Popper.js instance + * Creates a new Popper.js instance. * @class Popper * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper - * @param {HTMLElement} popper - The HTML element used as popper. + * @param {HTMLElement} popper - The HTML element used as the popper * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) * @return {Object} instance - The generated Popper.js instance */ @@ -12835,7 +12896,7 @@ var Popper = function () { } /** - * Schedule an update, it will run on the next UI update available + * Schedules an update. It will run on the next UI update available. * @method scheduleUpdate * @memberof Popper */ @@ -12872,7 +12933,7 @@ var Popper = function () { * new Popper(referenceObject, popperNode); * ``` * - * NB: This feature isn't supported in Internet Explorer 10 + * NB: This feature isn't supported in Internet Explorer 10. * @name referenceObject * @property {Function} data.getBoundingClientRect * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. @@ -12893,15 +12954,15 @@ return Popper; //# sourceMappingURL=popper.js.map /*! - * Bootstrap v4.1.3 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) : typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) : - (factory((global.bootstrap = {}),global.jQuery,global.Popper)); -}(this, (function (exports,$,Popper) { 'use strict'; + (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper)); +}(this, function (exports, $, Popper) { 'use strict'; $ = $ && $.hasOwnProperty('default') ? $['default'] : $; Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper; @@ -12964,3851 +13025,4341 @@ return Popper; /** * -------------------------------------------------------------------------- - * Bootstrap (v4.1.3): util.js + * Bootstrap (v4.3.1): util.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ + /** + * ------------------------------------------------------------------------ + * Private TransitionEnd Helpers + * ------------------------------------------------------------------------ + */ - var Util = function ($$$1) { + var TRANSITION_END = 'transitionend'; + var MAX_UID = 1000000; + var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) + + function toType(obj) { + return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); + } + + function getSpecialTransitionEndEvent() { + return { + bindType: TRANSITION_END, + delegateType: TRANSITION_END, + handle: function handle(event) { + if ($(event.target).is(this)) { + return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params + } + + return undefined; // eslint-disable-line no-undefined + } + }; + } + + function transitionEndEmulator(duration) { + var _this = this; + + var called = false; + $(this).one(Util.TRANSITION_END, function () { + called = true; + }); + setTimeout(function () { + if (!called) { + Util.triggerTransitionEnd(_this); + } + }, duration); + return this; + } + + function setTransitionEndSupport() { + $.fn.emulateTransitionEnd = transitionEndEmulator; + $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); + } + /** + * -------------------------------------------------------------------------- + * Public Util Api + * -------------------------------------------------------------------------- + */ + + + var Util = { + TRANSITION_END: 'bsTransitionEnd', + getUID: function getUID(prefix) { + do { + // eslint-disable-next-line no-bitwise + prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here + } while (document.getElementById(prefix)); + + return prefix; + }, + getSelectorFromElement: function getSelectorFromElement(element) { + var selector = element.getAttribute('data-target'); + + if (!selector || selector === '#') { + var hrefAttr = element.getAttribute('href'); + selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; + } + + try { + return document.querySelector(selector) ? selector : null; + } catch (err) { + return null; + } + }, + getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { + if (!element) { + return 0; + } // Get transition-duration of the element + + + var transitionDuration = $(element).css('transition-duration'); + var transitionDelay = $(element).css('transition-delay'); + var floatTransitionDuration = parseFloat(transitionDuration); + var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found + + if (!floatTransitionDuration && !floatTransitionDelay) { + return 0; + } // If multiple durations are defined, take the first + + + transitionDuration = transitionDuration.split(',')[0]; + transitionDelay = transitionDelay.split(',')[0]; + return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; + }, + reflow: function reflow(element) { + return element.offsetHeight; + }, + triggerTransitionEnd: function triggerTransitionEnd(element) { + $(element).trigger(TRANSITION_END); + }, + // TODO: Remove in v5 + supportsTransitionEnd: function supportsTransitionEnd() { + return Boolean(TRANSITION_END); + }, + isElement: function isElement(obj) { + return (obj[0] || obj).nodeType; + }, + typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { + for (var property in configTypes) { + if (Object.prototype.hasOwnProperty.call(configTypes, property)) { + var expectedTypes = configTypes[property]; + var value = config[property]; + var valueType = value && Util.isElement(value) ? 'element' : toType(value); + + if (!new RegExp(expectedTypes).test(valueType)) { + throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); + } + } + } + }, + findShadowRoot: function findShadowRoot(element) { + if (!document.documentElement.attachShadow) { + return null; + } // Can find the shadow root otherwise it'll return the document + + + if (typeof element.getRootNode === 'function') { + var root = element.getRootNode(); + return root instanceof ShadowRoot ? root : null; + } + + if (element instanceof ShadowRoot) { + return element; + } // when we don't find a shadow root + + + if (!element.parentNode) { + return null; + } + + return Util.findShadowRoot(element.parentNode); + } + }; + setTransitionEndSupport(); + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'alert'; + var VERSION = '4.3.1'; + var DATA_KEY = 'bs.alert'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var Selector = { + DISMISS: '[data-dismiss="alert"]' + }; + var Event = { + CLOSE: "close" + EVENT_KEY, + CLOSED: "closed" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + ALERT: 'alert', + FADE: 'fade', + SHOW: 'show' /** * ------------------------------------------------------------------------ - * Private TransitionEnd Helpers + * Class Definition * ------------------------------------------------------------------------ */ - var TRANSITION_END = 'transitionend'; - var MAX_UID = 1000000; - var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) - function toType(obj) { - return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); - } + }; - function getSpecialTransitionEndEvent() { - return { - bindType: TRANSITION_END, - delegateType: TRANSITION_END, - handle: function handle(event) { - if ($$$1(event.target).is(this)) { - return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params - } + var Alert = + /*#__PURE__*/ + function () { + function Alert(element) { + this._element = element; + } // Getters - return undefined; // eslint-disable-line no-undefined - } - }; - } - function transitionEndEmulator(duration) { + var _proto = Alert.prototype; + + // Public + _proto.close = function close(element) { + var rootElement = this._element; + + if (element) { + rootElement = this._getRootElement(element); + } + + var customEvent = this._triggerCloseEvent(rootElement); + + if (customEvent.isDefaultPrevented()) { + return; + } + + this._removeElement(rootElement); + }; + + _proto.dispose = function dispose() { + $.removeData(this._element, DATA_KEY); + this._element = null; + } // Private + ; + + _proto._getRootElement = function _getRootElement(element) { + var selector = Util.getSelectorFromElement(element); + var parent = false; + + if (selector) { + parent = document.querySelector(selector); + } + + if (!parent) { + parent = $(element).closest("." + ClassName.ALERT)[0]; + } + + return parent; + }; + + _proto._triggerCloseEvent = function _triggerCloseEvent(element) { + var closeEvent = $.Event(Event.CLOSE); + $(element).trigger(closeEvent); + return closeEvent; + }; + + _proto._removeElement = function _removeElement(element) { var _this = this; - var called = false; - $$$1(this).one(Util.TRANSITION_END, function () { - called = true; + $(element).removeClass(ClassName.SHOW); + + if (!$(element).hasClass(ClassName.FADE)) { + this._destroyElement(element); + + return; + } + + var transitionDuration = Util.getTransitionDurationFromElement(element); + $(element).one(Util.TRANSITION_END, function (event) { + return _this._destroyElement(element, event); + }).emulateTransitionEnd(transitionDuration); + }; + + _proto._destroyElement = function _destroyElement(element) { + $(element).detach().trigger(Event.CLOSED).remove(); + } // Static + ; + + Alert._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var $element = $(this); + var data = $element.data(DATA_KEY); + + if (!data) { + data = new Alert(this); + $element.data(DATA_KEY, data); + } + + if (config === 'close') { + data[config](this); + } }); - setTimeout(function () { - if (!called) { - Util.triggerTransitionEnd(_this); - } - }, duration); - return this; - } - - function setTransitionEndSupport() { - $$$1.fn.emulateTransitionEnd = transitionEndEmulator; - $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); - } - /** - * -------------------------------------------------------------------------- - * Public Util Api - * -------------------------------------------------------------------------- - */ - - - var Util = { - TRANSITION_END: 'bsTransitionEnd', - getUID: function getUID(prefix) { - do { - // eslint-disable-next-line no-bitwise - prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here - } while (document.getElementById(prefix)); - - return prefix; - }, - getSelectorFromElement: function getSelectorFromElement(element) { - var selector = element.getAttribute('data-target'); - - if (!selector || selector === '#') { - selector = element.getAttribute('href') || ''; - } - - try { - return document.querySelector(selector) ? selector : null; - } catch (err) { - return null; - } - }, - getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { - if (!element) { - return 0; - } // Get transition-duration of the element - - - var transitionDuration = $$$1(element).css('transition-duration'); - var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found - - if (!floatTransitionDuration) { - return 0; - } // If multiple durations are defined, take the first - - - transitionDuration = transitionDuration.split(',')[0]; - return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER; - }, - reflow: function reflow(element) { - return element.offsetHeight; - }, - triggerTransitionEnd: function triggerTransitionEnd(element) { - $$$1(element).trigger(TRANSITION_END); - }, - // TODO: Remove in v5 - supportsTransitionEnd: function supportsTransitionEnd() { - return Boolean(TRANSITION_END); - }, - isElement: function isElement(obj) { - return (obj[0] || obj).nodeType; - }, - typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { - for (var property in configTypes) { - if (Object.prototype.hasOwnProperty.call(configTypes, property)) { - var expectedTypes = configTypes[property]; - var value = config[property]; - var valueType = value && Util.isElement(value) ? 'element' : toType(value); - - if (!new RegExp(expectedTypes).test(valueType)) { - throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); - } - } - } - } - }; - setTransitionEndSupport(); - return Util; - }($); - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.3): alert.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - - var Alert = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'alert'; - var VERSION = '4.1.3'; - var DATA_KEY = 'bs.alert'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var Selector = { - DISMISS: '[data-dismiss="alert"]' - }; - var Event = { - CLOSE: "close" + EVENT_KEY, - CLOSED: "closed" + EVENT_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - ALERT: 'alert', - FADE: 'fade', - SHOW: 'show' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - }; - var Alert = - /*#__PURE__*/ - function () { - function Alert(element) { - this._element = element; - } // Getters - - - var _proto = Alert.prototype; - - // Public - _proto.close = function close(element) { - var rootElement = this._element; - - if (element) { - rootElement = this._getRootElement(element); - } - - var customEvent = this._triggerCloseEvent(rootElement); - - if (customEvent.isDefaultPrevented()) { - return; - } - - this._removeElement(rootElement); - }; - - _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - this._element = null; - }; // Private - - - _proto._getRootElement = function _getRootElement(element) { - var selector = Util.getSelectorFromElement(element); - var parent = false; - - if (selector) { - parent = document.querySelector(selector); - } - - if (!parent) { - parent = $$$1(element).closest("." + ClassName.ALERT)[0]; - } - - return parent; - }; - - _proto._triggerCloseEvent = function _triggerCloseEvent(element) { - var closeEvent = $$$1.Event(Event.CLOSE); - $$$1(element).trigger(closeEvent); - return closeEvent; - }; - - _proto._removeElement = function _removeElement(element) { - var _this = this; - - $$$1(element).removeClass(ClassName.SHOW); - - if (!$$$1(element).hasClass(ClassName.FADE)) { - this._destroyElement(element); - - return; - } - - var transitionDuration = Util.getTransitionDurationFromElement(element); - $$$1(element).one(Util.TRANSITION_END, function (event) { - return _this._destroyElement(element, event); - }).emulateTransitionEnd(transitionDuration); - }; - - _proto._destroyElement = function _destroyElement(element) { - $$$1(element).detach().trigger(Event.CLOSED).remove(); - }; // Static - - - Alert._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $element = $$$1(this); - var data = $element.data(DATA_KEY); - - if (!data) { - data = new Alert(this); - $element.data(DATA_KEY, data); - } - - if (config === 'close') { - data[config](this); - } - }); - }; - - Alert._handleDismiss = function _handleDismiss(alertInstance) { - return function (event) { - if (event) { - event.preventDefault(); - } - - alertInstance.close(this); - }; - }; - - _createClass(Alert, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }]); - - return Alert; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $$$1.fn[NAME] = Alert._jQueryInterface; - $$$1.fn[NAME].Constructor = Alert; - - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Alert._jQueryInterface; - }; - - return Alert; - }($); - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.3): button.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - - var Button = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'button'; - var VERSION = '4.1.3'; - var DATA_KEY = 'bs.button'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var ClassName = { - ACTIVE: 'active', - BUTTON: 'btn', - FOCUS: 'focus' - }; - var Selector = { - DATA_TOGGLE_CARROT: '[data-toggle^="button"]', - DATA_TOGGLE: '[data-toggle="buttons"]', - INPUT: 'input', - ACTIVE: '.active', - BUTTON: '.btn' - }; - var Event = { - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, - FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY) - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Button = - /*#__PURE__*/ - function () { - function Button(element) { - this._element = element; - } // Getters - - - var _proto = Button.prototype; - - // Public - _proto.toggle = function toggle() { - var triggerChangeEvent = true; - var addAriaPressed = true; - var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0]; - - if (rootElement) { - var input = this._element.querySelector(Selector.INPUT); - - if (input) { - if (input.type === 'radio') { - if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) { - triggerChangeEvent = false; - } else { - var activeElement = rootElement.querySelector(Selector.ACTIVE); - - if (activeElement) { - $$$1(activeElement).removeClass(ClassName.ACTIVE); - } - } - } - - if (triggerChangeEvent) { - if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { - return; - } - - input.checked = !this._element.classList.contains(ClassName.ACTIVE); - $$$1(input).trigger('change'); - } - - input.focus(); - addAriaPressed = false; - } - } - - if (addAriaPressed) { - this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE)); - } - - if (triggerChangeEvent) { - $$$1(this._element).toggleClass(ClassName.ACTIVE); - } - }; - - _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - this._element = null; - }; // Static - - - Button._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); - - if (!data) { - data = new Button(this); - $$$1(this).data(DATA_KEY, data); - } - - if (config === 'toggle') { - data[config](); - } - }); - }; - - _createClass(Button, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }]); - - return Button; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { - event.preventDefault(); - var button = event.target; - - if (!$$$1(button).hasClass(ClassName.BUTTON)) { - button = $$$1(button).closest(Selector.BUTTON); - } - - Button._jQueryInterface.call($$$1(button), 'toggle'); - }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { - var button = $$$1(event.target).closest(Selector.BUTTON)[0]; - $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $$$1.fn[NAME] = Button._jQueryInterface; - $$$1.fn[NAME].Constructor = Button; - - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Button._jQueryInterface; - }; - - return Button; - }($); - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.3): carousel.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - - var Carousel = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'carousel'; - var VERSION = '4.1.3'; - var DATA_KEY = 'bs.carousel'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key - - var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key - - var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch - - var Default = { - interval: 5000, - keyboard: true, - slide: false, - pause: 'hover', - wrap: true - }; - var DefaultType = { - interval: '(number|boolean)', - keyboard: 'boolean', - slide: '(boolean|string)', - pause: '(string|boolean)', - wrap: 'boolean' - }; - var Direction = { - NEXT: 'next', - PREV: 'prev', - LEFT: 'left', - RIGHT: 'right' - }; - var Event = { - SLIDE: "slide" + EVENT_KEY, - SLID: "slid" + EVENT_KEY, - KEYDOWN: "keydown" + EVENT_KEY, - MOUSEENTER: "mouseenter" + EVENT_KEY, - MOUSELEAVE: "mouseleave" + EVENT_KEY, - TOUCHEND: "touchend" + EVENT_KEY, - LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - CAROUSEL: 'carousel', - ACTIVE: 'active', - SLIDE: 'slide', - RIGHT: 'carousel-item-right', - LEFT: 'carousel-item-left', - NEXT: 'carousel-item-next', - PREV: 'carousel-item-prev', - ITEM: 'carousel-item' - }; - var Selector = { - ACTIVE: '.active', - ACTIVE_ITEM: '.active.carousel-item', - ITEM: '.carousel-item', - NEXT_PREV: '.carousel-item-next, .carousel-item-prev', - INDICATORS: '.carousel-indicators', - DATA_SLIDE: '[data-slide], [data-slide-to]', - DATA_RIDE: '[data-ride="carousel"]' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Carousel = - /*#__PURE__*/ - function () { - function Carousel(element, config) { - this._items = null; - this._interval = null; - this._activeElement = null; - this._isPaused = false; - this._isSliding = false; - this.touchTimeout = null; - this._config = this._getConfig(config); - this._element = $$$1(element)[0]; - this._indicatorsElement = this._element.querySelector(Selector.INDICATORS); - - this._addEventListeners(); - } // Getters - - - var _proto = Carousel.prototype; - - // Public - _proto.next = function next() { - if (!this._isSliding) { - this._slide(Direction.NEXT); - } - }; - - _proto.nextWhenVisible = function nextWhenVisible() { - // Don't call next when the page isn't visible - // or the carousel or its parent isn't visible - if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') { - this.next(); - } - }; - - _proto.prev = function prev() { - if (!this._isSliding) { - this._slide(Direction.PREV); - } - }; - - _proto.pause = function pause(event) { - if (!event) { - this._isPaused = true; - } - - if (this._element.querySelector(Selector.NEXT_PREV)) { - Util.triggerTransitionEnd(this._element); - this.cycle(true); - } - - clearInterval(this._interval); - this._interval = null; - }; - - _proto.cycle = function cycle(event) { - if (!event) { - this._isPaused = false; - } - - if (this._interval) { - clearInterval(this._interval); - this._interval = null; - } - - if (this._config.interval && !this._isPaused) { - this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); - } - }; - - _proto.to = function to(index) { - var _this = this; - - this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); - - var activeIndex = this._getItemIndex(this._activeElement); - - if (index > this._items.length - 1 || index < 0) { - return; - } - - if (this._isSliding) { - $$$1(this._element).one(Event.SLID, function () { - return _this.to(index); - }); - return; - } - - if (activeIndex === index) { - this.pause(); - this.cycle(); - return; - } - - var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; - - this._slide(direction, this._items[index]); - }; - - _proto.dispose = function dispose() { - $$$1(this._element).off(EVENT_KEY); - $$$1.removeData(this._element, DATA_KEY); - this._items = null; - this._config = null; - this._element = null; - this._interval = null; - this._isPaused = null; - this._isSliding = null; - this._activeElement = null; - this._indicatorsElement = null; - }; // Private - - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, config); - Util.typeCheckConfig(NAME, config, DefaultType); - return config; - }; - - _proto._addEventListeners = function _addEventListeners() { - var _this2 = this; - - if (this._config.keyboard) { - $$$1(this._element).on(Event.KEYDOWN, function (event) { - return _this2._keydown(event); - }); - } - - if (this._config.pause === 'hover') { - $$$1(this._element).on(Event.MOUSEENTER, function (event) { - return _this2.pause(event); - }).on(Event.MOUSELEAVE, function (event) { - return _this2.cycle(event); - }); - - if ('ontouchstart' in document.documentElement) { - // If it's a touch-enabled device, mouseenter/leave are fired as - // part of the mouse compatibility events on first tap - the carousel - // would stop cycling until user tapped out of it; - // here, we listen for touchend, explicitly pause the carousel - // (as if it's the second time we tap on it, mouseenter compat event - // is NOT fired) and after a timeout (to allow for mouse compatibility - // events to fire) we explicitly restart cycling - $$$1(this._element).on(Event.TOUCHEND, function () { - _this2.pause(); - - if (_this2.touchTimeout) { - clearTimeout(_this2.touchTimeout); - } - - _this2.touchTimeout = setTimeout(function (event) { - return _this2.cycle(event); - }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval); - }); - } - } - }; - - _proto._keydown = function _keydown(event) { - if (/input|textarea/i.test(event.target.tagName)) { - return; - } - - switch (event.which) { - case ARROW_LEFT_KEYCODE: - event.preventDefault(); - this.prev(); - break; - - case ARROW_RIGHT_KEYCODE: - event.preventDefault(); - this.next(); - break; - - default: - } - }; - - _proto._getItemIndex = function _getItemIndex(element) { - this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : []; - return this._items.indexOf(element); - }; - - _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { - var isNextDirection = direction === Direction.NEXT; - var isPrevDirection = direction === Direction.PREV; - - var activeIndex = this._getItemIndex(activeElement); - - var lastItemIndex = this._items.length - 1; - var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; - - if (isGoingToWrap && !this._config.wrap) { - return activeElement; - } - - var delta = direction === Direction.PREV ? -1 : 1; - var itemIndex = (activeIndex + delta) % this._items.length; - return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; - }; - - _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { - var targetIndex = this._getItemIndex(relatedTarget); - - var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM)); - - var slideEvent = $$$1.Event(Event.SLIDE, { - relatedTarget: relatedTarget, - direction: eventDirectionName, - from: fromIndex, - to: targetIndex - }); - $$$1(this._element).trigger(slideEvent); - return slideEvent; - }; - - _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { - if (this._indicatorsElement) { - var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE)); - $$$1(indicators).removeClass(ClassName.ACTIVE); - - var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; - - if (nextIndicator) { - $$$1(nextIndicator).addClass(ClassName.ACTIVE); - } - } - }; - - _proto._slide = function _slide(direction, element) { - var _this3 = this; - - var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); - - var activeElementIndex = this._getItemIndex(activeElement); - - var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); - - var nextElementIndex = this._getItemIndex(nextElement); - - var isCycling = Boolean(this._interval); - var directionalClassName; - var orderClassName; - var eventDirectionName; - - if (direction === Direction.NEXT) { - directionalClassName = ClassName.LEFT; - orderClassName = ClassName.NEXT; - eventDirectionName = Direction.LEFT; - } else { - directionalClassName = ClassName.RIGHT; - orderClassName = ClassName.PREV; - eventDirectionName = Direction.RIGHT; - } - - if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) { - this._isSliding = false; - return; - } - - var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); - - if (slideEvent.isDefaultPrevented()) { - return; - } - - if (!activeElement || !nextElement) { - // Some weirdness is happening, so we bail - return; - } - - this._isSliding = true; - - if (isCycling) { - this.pause(); - } - - this._setActiveIndicatorElement(nextElement); - - var slidEvent = $$$1.Event(Event.SLID, { - relatedTarget: nextElement, - direction: eventDirectionName, - from: activeElementIndex, - to: nextElementIndex - }); - - if ($$$1(this._element).hasClass(ClassName.SLIDE)) { - $$$1(nextElement).addClass(orderClassName); - Util.reflow(nextElement); - $$$1(activeElement).addClass(directionalClassName); - $$$1(nextElement).addClass(directionalClassName); - var transitionDuration = Util.getTransitionDurationFromElement(activeElement); - $$$1(activeElement).one(Util.TRANSITION_END, function () { - $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); - $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); - _this3._isSliding = false; - setTimeout(function () { - return $$$1(_this3._element).trigger(slidEvent); - }, 0); - }).emulateTransitionEnd(transitionDuration); - } else { - $$$1(activeElement).removeClass(ClassName.ACTIVE); - $$$1(nextElement).addClass(ClassName.ACTIVE); - this._isSliding = false; - $$$1(this._element).trigger(slidEvent); - } - - if (isCycling) { - this.cycle(); - } - }; // Static - - - Carousel._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); - - var _config = _objectSpread({}, Default, $$$1(this).data()); - - if (typeof config === 'object') { - _config = _objectSpread({}, _config, config); - } - - var action = typeof config === 'string' ? config : _config.slide; - - if (!data) { - data = new Carousel(this, _config); - $$$1(this).data(DATA_KEY, data); - } - - if (typeof config === 'number') { - data.to(config); - } else if (typeof action === 'string') { - if (typeof data[action] === 'undefined') { - throw new TypeError("No method named \"" + action + "\""); - } - - data[action](); - } else if (_config.interval) { - data.pause(); - data.cycle(); - } - }); - }; - - Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { - var selector = Util.getSelectorFromElement(this); - - if (!selector) { - return; - } - - var target = $$$1(selector)[0]; - - if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) { - return; - } - - var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data()); - - var slideIndex = this.getAttribute('data-slide-to'); - - if (slideIndex) { - config.interval = false; - } - - Carousel._jQueryInterface.call($$$1(target), config); - - if (slideIndex) { - $$$1(target).data(DATA_KEY).to(slideIndex); - } - - event.preventDefault(); - }; - - _createClass(Carousel, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }]); - - return Carousel; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); - $$$1(window).on(Event.LOAD_DATA_API, function () { - var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE)); - - for (var i = 0, len = carousels.length; i < len; i++) { - var $carousel = $$$1(carousels[i]); - - Carousel._jQueryInterface.call($carousel, $carousel.data()); - } - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $$$1.fn[NAME] = Carousel._jQueryInterface; - $$$1.fn[NAME].Constructor = Carousel; - - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Carousel._jQueryInterface; - }; - - return Carousel; - }($); - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.3): collapse.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - - var Collapse = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'collapse'; - var VERSION = '4.1.3'; - var DATA_KEY = 'bs.collapse'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var Default = { - toggle: true, - parent: '' - }; - var DefaultType = { - toggle: 'boolean', - parent: '(string|element)' - }; - var Event = { - SHOW: "show" + EVENT_KEY, - SHOWN: "shown" + EVENT_KEY, - HIDE: "hide" + EVENT_KEY, - HIDDEN: "hidden" + EVENT_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - SHOW: 'show', - COLLAPSE: 'collapse', - COLLAPSING: 'collapsing', - COLLAPSED: 'collapsed' - }; - var Dimension = { - WIDTH: 'width', - HEIGHT: 'height' - }; - var Selector = { - ACTIVES: '.show, .collapsing', - DATA_TOGGLE: '[data-toggle="collapse"]' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Collapse = - /*#__PURE__*/ - function () { - function Collapse(element, config) { - this._isTransitioning = false; - this._element = element; - this._config = this._getConfig(config); - this._triggerArray = $$$1.makeArray(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); - var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); - - for (var i = 0, len = toggleList.length; i < len; i++) { - var elem = toggleList[i]; - var selector = Util.getSelectorFromElement(elem); - var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { - return foundElem === element; - }); - - if (selector !== null && filterElement.length > 0) { - this._selector = selector; - - this._triggerArray.push(elem); - } - } - - this._parent = this._config.parent ? this._getParent() : null; - - if (!this._config.parent) { - this._addAriaAndCollapsedClass(this._element, this._triggerArray); - } - - if (this._config.toggle) { - this.toggle(); - } - } // Getters - - - var _proto = Collapse.prototype; - - // Public - _proto.toggle = function toggle() { - if ($$$1(this._element).hasClass(ClassName.SHOW)) { - this.hide(); - } else { - this.show(); - } - }; - - _proto.show = function show() { - var _this = this; - - if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) { - return; - } - - var actives; - var activesData; - - if (this._parent) { - actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) { - return elem.getAttribute('data-parent') === _this._config.parent; - }); - - if (actives.length === 0) { - actives = null; - } - } - - if (actives) { - activesData = $$$1(actives).not(this._selector).data(DATA_KEY); - - if (activesData && activesData._isTransitioning) { - return; - } - } - - var startEvent = $$$1.Event(Event.SHOW); - $$$1(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - if (actives) { - Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide'); - - if (!activesData) { - $$$1(actives).data(DATA_KEY, null); - } - } - - var dimension = this._getDimension(); - - $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); - this._element.style[dimension] = 0; - - if (this._triggerArray.length) { - $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); - } - - this.setTransitioning(true); - - var complete = function complete() { - $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW); - _this._element.style[dimension] = ''; - - _this.setTransitioning(false); - - $$$1(_this._element).trigger(Event.SHOWN); - }; - - var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); - var scrollSize = "scroll" + capitalizedDimension; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - this._element.style[dimension] = this._element[scrollSize] + "px"; - }; - - _proto.hide = function hide() { - var _this2 = this; - - if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) { - return; - } - - var startEvent = $$$1.Event(Event.HIDE); - $$$1(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - var dimension = this._getDimension(); - - this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; - Util.reflow(this._element); - $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); - var triggerArrayLength = this._triggerArray.length; - - if (triggerArrayLength > 0) { - for (var i = 0; i < triggerArrayLength; i++) { - var trigger = this._triggerArray[i]; - var selector = Util.getSelectorFromElement(trigger); - - if (selector !== null) { - var $elem = $$$1([].slice.call(document.querySelectorAll(selector))); - - if (!$elem.hasClass(ClassName.SHOW)) { - $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); - } - } - } - } - - this.setTransitioning(true); - - var complete = function complete() { - _this2.setTransitioning(false); - - $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); - }; - - this._element.style[dimension] = ''; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - }; - - _proto.setTransitioning = function setTransitioning(isTransitioning) { - this._isTransitioning = isTransitioning; - }; - - _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - this._config = null; - this._parent = null; - this._element = null; - this._triggerArray = null; - this._isTransitioning = null; - }; // Private - - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, config); - config.toggle = Boolean(config.toggle); // Coerce string values - - Util.typeCheckConfig(NAME, config, DefaultType); - return config; - }; - - _proto._getDimension = function _getDimension() { - var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH); - return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; - }; - - _proto._getParent = function _getParent() { - var _this3 = this; - - var parent = null; - - if (Util.isElement(this._config.parent)) { - parent = this._config.parent; // It's a jQuery object - - if (typeof this._config.parent.jquery !== 'undefined') { - parent = this._config.parent[0]; - } - } else { - parent = document.querySelector(this._config.parent); - } - - var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; - var children = [].slice.call(parent.querySelectorAll(selector)); - $$$1(children).each(function (i, element) { - _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); - }); - return parent; - }; - - _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { - if (element) { - var isOpen = $$$1(element).hasClass(ClassName.SHOW); - - if (triggerArray.length) { - $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); - } - } - }; // Static - - - Collapse._getTargetFromElement = function _getTargetFromElement(element) { - var selector = Util.getSelectorFromElement(element); - return selector ? document.querySelector(selector) : null; - }; - - Collapse._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $this = $$$1(this); - var data = $this.data(DATA_KEY); - - var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); - - if (!data && _config.toggle && /show|hide/.test(config)) { - _config.toggle = false; - } - - if (!data) { - data = new Collapse(this, _config); - $this.data(DATA_KEY, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Collapse, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }]); - - return Collapse; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { - // preventDefault only for
    elements (which change the URL) not inside the collapsible element - if (event.currentTarget.tagName === 'A') { - event.preventDefault(); - } - - var $trigger = $$$1(this); - var selector = Util.getSelectorFromElement(this); - var selectors = [].slice.call(document.querySelectorAll(selector)); - $$$1(selectors).each(function () { - var $target = $$$1(this); - var data = $target.data(DATA_KEY); - var config = data ? 'toggle' : $trigger.data(); - - Collapse._jQueryInterface.call($target, config); - }); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $$$1.fn[NAME] = Collapse._jQueryInterface; - $$$1.fn[NAME].Constructor = Collapse; - - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Collapse._jQueryInterface; - }; - - return Collapse; - }($); - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.3): dropdown.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - - var Dropdown = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'dropdown'; - var VERSION = '4.1.3'; - var DATA_KEY = 'bs.dropdown'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - - var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key - - var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key - - var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key - - var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key - - var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) - - var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); - var Event = { - HIDE: "hide" + EVENT_KEY, - HIDDEN: "hidden" + EVENT_KEY, - SHOW: "show" + EVENT_KEY, - SHOWN: "shown" + EVENT_KEY, - CLICK: "click" + EVENT_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, - KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, - KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - DISABLED: 'disabled', - SHOW: 'show', - DROPUP: 'dropup', - DROPRIGHT: 'dropright', - DROPLEFT: 'dropleft', - MENURIGHT: 'dropdown-menu-right', - MENULEFT: 'dropdown-menu-left', - POSITION_STATIC: 'position-static' - }; - var Selector = { - DATA_TOGGLE: '[data-toggle="dropdown"]', - FORM_CHILD: '.dropdown form', - MENU: '.dropdown-menu', - NAVBAR_NAV: '.navbar-nav', - VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' - }; - var AttachmentMap = { - TOP: 'top-start', - TOPEND: 'top-end', - BOTTOM: 'bottom-start', - BOTTOMEND: 'bottom-end', - RIGHT: 'right-start', - RIGHTEND: 'right-end', - LEFT: 'left-start', - LEFTEND: 'left-end' - }; - var Default = { - offset: 0, - flip: true, - boundary: 'scrollParent', - reference: 'toggle', - display: 'dynamic' - }; - var DefaultType = { - offset: '(number|string|function)', - flip: 'boolean', - boundary: '(string|element)', - reference: '(string|element)', - display: 'string' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Dropdown = - /*#__PURE__*/ - function () { - function Dropdown(element, config) { - this._element = element; - this._popper = null; - this._config = this._getConfig(config); - this._menu = this._getMenuElement(); - this._inNavbar = this._detectNavbar(); - - this._addEventListeners(); - } // Getters - - - var _proto = Dropdown.prototype; - - // Public - _proto.toggle = function toggle() { - if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this._element); - - var isActive = $$$1(this._menu).hasClass(ClassName.SHOW); - - Dropdown._clearMenus(); - - if (isActive) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $$$1.Event(Event.SHOW, relatedTarget); - $$$1(parent).trigger(showEvent); - - if (showEvent.isDefaultPrevented()) { - return; - } // Disable totally Popper.js for Dropdown in Navbar - - - if (!this._inNavbar) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); - } - - var referenceElement = this._element; - - if (this._config.reference === 'parent') { - referenceElement = parent; - } else if (Util.isElement(this._config.reference)) { - referenceElement = this._config.reference; // Check if it's jQuery element - - if (typeof this._config.reference.jquery !== 'undefined') { - referenceElement = this._config.reference[0]; - } - } // If boundary is not `scrollParent`, then set position to `static` - // to allow the menu to "escape" the scroll parent's boundaries - // https://github.com/twbs/bootstrap/issues/24251 - - - if (this._config.boundary !== 'scrollParent') { - $$$1(parent).addClass(ClassName.POSITION_STATIC); - } - - this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); - } // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - - if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { - $$$1(document.body).children().on('mouseover', null, $$$1.noop); - } - - this._element.focus(); - - this._element.setAttribute('aria-expanded', true); - - $$$1(this._menu).toggleClass(ClassName.SHOW); - $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget)); - }; - - _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - $$$1(this._element).off(EVENT_KEY); - this._element = null; - this._menu = null; - - if (this._popper !== null) { - this._popper.destroy(); - - this._popper = null; - } - }; - - _proto.update = function update() { - this._inNavbar = this._detectNavbar(); - - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - }; // Private - - - _proto._addEventListeners = function _addEventListeners() { - var _this = this; - - $$$1(this._element).on(Event.CLICK, function (event) { - event.preventDefault(); - event.stopPropagation(); - - _this.toggle(); - }); - }; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config); - Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); - return config; - }; - - _proto._getMenuElement = function _getMenuElement() { - if (!this._menu) { - var parent = Dropdown._getParentFromElement(this._element); - - if (parent) { - this._menu = parent.querySelector(Selector.MENU); - } - } - - return this._menu; - }; - - _proto._getPlacement = function _getPlacement() { - var $parentDropdown = $$$1(this._element.parentNode); - var placement = AttachmentMap.BOTTOM; // Handle dropup - - if ($parentDropdown.hasClass(ClassName.DROPUP)) { - placement = AttachmentMap.TOP; - - if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { - placement = AttachmentMap.TOPEND; - } - } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { - placement = AttachmentMap.RIGHT; - } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { - placement = AttachmentMap.LEFT; - } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { - placement = AttachmentMap.BOTTOMEND; - } - - return placement; - }; - - _proto._detectNavbar = function _detectNavbar() { - return $$$1(this._element).closest('.navbar').length > 0; - }; - - _proto._getPopperConfig = function _getPopperConfig() { - var _this2 = this; - - var offsetConf = {}; - - if (typeof this._config.offset === 'function') { - offsetConf.fn = function (data) { - data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); - return data; - }; - } else { - offsetConf.offset = this._config.offset; - } - - var popperConfig = { - placement: this._getPlacement(), - modifiers: { - offset: offsetConf, - flip: { - enabled: this._config.flip - }, - preventOverflow: { - boundariesElement: this._config.boundary - } - } // Disable Popper.js if we have a static display - - }; - - if (this._config.display === 'static') { - popperConfig.modifiers.applyStyle = { - enabled: false - }; - } - - return popperConfig; - }; // Static - - - Dropdown._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); - - var _config = typeof config === 'object' ? config : null; - - if (!data) { - data = new Dropdown(this, _config); - $$$1(this).data(DATA_KEY, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - Dropdown._clearMenus = function _clearMenus(event) { - if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { - return; - } - - var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); - - for (var i = 0, len = toggles.length; i < len; i++) { - var parent = Dropdown._getParentFromElement(toggles[i]); - - var context = $$$1(toggles[i]).data(DATA_KEY); - var relatedTarget = { - relatedTarget: toggles[i] - }; - - if (event && event.type === 'click') { - relatedTarget.clickEvent = event; - } - - if (!context) { - continue; - } - - var dropdownMenu = context._menu; - - if (!$$$1(parent).hasClass(ClassName.SHOW)) { - continue; - } - - if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) { - continue; - } - - var hideEvent = $$$1.Event(Event.HIDE, relatedTarget); - $$$1(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - continue; - } // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - - if ('ontouchstart' in document.documentElement) { - $$$1(document.body).children().off('mouseover', null, $$$1.noop); - } - - toggles[i].setAttribute('aria-expanded', 'false'); - $$$1(dropdownMenu).removeClass(ClassName.SHOW); - $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget)); - } - }; - - Dropdown._getParentFromElement = function _getParentFromElement(element) { - var parent; - var selector = Util.getSelectorFromElement(element); - - if (selector) { - parent = document.querySelector(selector); - } - - return parent || element.parentNode; - }; // eslint-disable-next-line complexity - - - Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { - // If not input/textarea: - // - And not a key in REGEXP_KEYDOWN => not a dropdown command - // If input/textarea: - // - If space key => not a dropdown command - // - If key is other than escape - // - If key is not up or down => not a dropdown command - // - If trigger inside the menu => not a dropdown command - if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { - return; - } - - event.preventDefault(); - event.stopPropagation(); - - if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this); - - var isActive = $$$1(parent).hasClass(ClassName.SHOW); - - if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { - if (event.which === ESCAPE_KEYCODE) { - var toggle = parent.querySelector(Selector.DATA_TOGGLE); - $$$1(toggle).trigger('focus'); - } - - $$$1(this).trigger('click'); - return; - } - - var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS)); - - if (items.length === 0) { - return; - } - - var index = items.indexOf(event.target); - - if (event.which === ARROW_UP_KEYCODE && index > 0) { - // Up - index--; - } - - if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { - // Down - index++; - } - - if (index < 0) { - index = 0; - } - - items[index].focus(); - }; - - _createClass(Dropdown, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType; - } - }]); - - return Dropdown; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { - event.preventDefault(); - event.stopPropagation(); - - Dropdown._jQueryInterface.call($$$1(this), 'toggle'); - }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { - e.stopPropagation(); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $$$1.fn[NAME] = Dropdown._jQueryInterface; - $$$1.fn[NAME].Constructor = Dropdown; - - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Dropdown._jQueryInterface; - }; - - return Dropdown; - }($, Popper); - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.3): modal.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - - var Modal = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'modal'; - var VERSION = '4.1.3'; - var DATA_KEY = 'bs.modal'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - - var Default = { - backdrop: true, - keyboard: true, - focus: true, - show: true - }; - var DefaultType = { - backdrop: '(boolean|string)', - keyboard: 'boolean', - focus: 'boolean', - show: 'boolean' - }; - var Event = { - HIDE: "hide" + EVENT_KEY, - HIDDEN: "hidden" + EVENT_KEY, - SHOW: "show" + EVENT_KEY, - SHOWN: "shown" + EVENT_KEY, - FOCUSIN: "focusin" + EVENT_KEY, - RESIZE: "resize" + EVENT_KEY, - CLICK_DISMISS: "click.dismiss" + EVENT_KEY, - KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, - MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, - MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - SCROLLBAR_MEASURER: 'modal-scrollbar-measure', - BACKDROP: 'modal-backdrop', - OPEN: 'modal-open', - FADE: 'fade', - SHOW: 'show' - }; - var Selector = { - DIALOG: '.modal-dialog', - DATA_TOGGLE: '[data-toggle="modal"]', - DATA_DISMISS: '[data-dismiss="modal"]', - FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', - STICKY_CONTENT: '.sticky-top' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Modal = - /*#__PURE__*/ - function () { - function Modal(element, config) { - this._config = this._getConfig(config); - this._element = element; - this._dialog = element.querySelector(Selector.DIALOG); - this._backdrop = null; - this._isShown = false; - this._isBodyOverflowing = false; - this._ignoreBackdropClick = false; - this._scrollbarWidth = 0; - } // Getters - - - var _proto = Modal.prototype; - - // Public - _proto.toggle = function toggle(relatedTarget) { - return this._isShown ? this.hide() : this.show(relatedTarget); - }; - - _proto.show = function show(relatedTarget) { - var _this = this; - - if (this._isTransitioning || this._isShown) { - return; - } - - if ($$$1(this._element).hasClass(ClassName.FADE)) { - this._isTransitioning = true; - } - - var showEvent = $$$1.Event(Event.SHOW, { - relatedTarget: relatedTarget - }); - $$$1(this._element).trigger(showEvent); - - if (this._isShown || showEvent.isDefaultPrevented()) { - return; - } - - this._isShown = true; - - this._checkScrollbar(); - - this._setScrollbar(); - - this._adjustDialog(); - - $$$1(document.body).addClass(ClassName.OPEN); - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { - return _this.hide(event); - }); - $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { - $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { - if ($$$1(event.target).is(_this._element)) { - _this._ignoreBackdropClick = true; - } - }); - }); - - this._showBackdrop(function () { - return _this._showElement(relatedTarget); - }); - }; - - _proto.hide = function hide(event) { - var _this2 = this; - + Alert._handleDismiss = function _handleDismiss(alertInstance) { + return function (event) { if (event) { event.preventDefault(); } - if (this._isTransitioning || !this._isShown) { - return; - } - - var hideEvent = $$$1.Event(Event.HIDE); - $$$1(this._element).trigger(hideEvent); - - if (!this._isShown || hideEvent.isDefaultPrevented()) { - return; - } - - this._isShown = false; - var transition = $$$1(this._element).hasClass(ClassName.FADE); - - if (transition) { - this._isTransitioning = true; - } - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $$$1(document).off(Event.FOCUSIN); - $$$1(this._element).removeClass(ClassName.SHOW); - $$$1(this._element).off(Event.CLICK_DISMISS); - $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $$$1(this._element).one(Util.TRANSITION_END, function (event) { - return _this2._hideModal(event); - }).emulateTransitionEnd(transitionDuration); - } else { - this._hideModal(); - } + alertInstance.close(this); }; - - _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY); - this._config = null; - this._element = null; - this._dialog = null; - this._backdrop = null; - this._isShown = null; - this._isBodyOverflowing = null; - this._ignoreBackdropClick = null; - this._scrollbarWidth = null; - }; - - _proto.handleUpdate = function handleUpdate() { - this._adjustDialog(); - }; // Private - - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, config); - Util.typeCheckConfig(NAME, config, DefaultType); - return config; - }; - - _proto._showElement = function _showElement(relatedTarget) { - var _this3 = this; - - var transition = $$$1(this._element).hasClass(ClassName.FADE); - - if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { - // Don't move modal's DOM position - document.body.appendChild(this._element); - } - - this._element.style.display = 'block'; - - this._element.removeAttribute('aria-hidden'); - - this._element.scrollTop = 0; - - if (transition) { - Util.reflow(this._element); - } - - $$$1(this._element).addClass(ClassName.SHOW); - - if (this._config.focus) { - this._enforceFocus(); - } - - var shownEvent = $$$1.Event(Event.SHOWN, { - relatedTarget: relatedTarget - }); - - var transitionComplete = function transitionComplete() { - if (_this3._config.focus) { - _this3._element.focus(); - } - - _this3._isTransitioning = false; - $$$1(_this3._element).trigger(shownEvent); - }; - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); - } else { - transitionComplete(); - } - }; - - _proto._enforceFocus = function _enforceFocus() { - var _this4 = this; - - $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop - .on(Event.FOCUSIN, function (event) { - if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) { - _this4._element.focus(); - } - }); - }; - - _proto._setEscapeEvent = function _setEscapeEvent() { - var _this5 = this; - - if (this._isShown && this._config.keyboard) { - $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) { - if (event.which === ESCAPE_KEYCODE) { - event.preventDefault(); - - _this5.hide(); - } - }); - } else if (!this._isShown) { - $$$1(this._element).off(Event.KEYDOWN_DISMISS); - } - }; - - _proto._setResizeEvent = function _setResizeEvent() { - var _this6 = this; - - if (this._isShown) { - $$$1(window).on(Event.RESIZE, function (event) { - return _this6.handleUpdate(event); - }); - } else { - $$$1(window).off(Event.RESIZE); - } - }; - - _proto._hideModal = function _hideModal() { - var _this7 = this; - - this._element.style.display = 'none'; - - this._element.setAttribute('aria-hidden', true); - - this._isTransitioning = false; - - this._showBackdrop(function () { - $$$1(document.body).removeClass(ClassName.OPEN); - - _this7._resetAdjustments(); - - _this7._resetScrollbar(); - - $$$1(_this7._element).trigger(Event.HIDDEN); - }); - }; - - _proto._removeBackdrop = function _removeBackdrop() { - if (this._backdrop) { - $$$1(this._backdrop).remove(); - this._backdrop = null; - } - }; - - _proto._showBackdrop = function _showBackdrop(callback) { - var _this8 = this; - - var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; - - if (this._isShown && this._config.backdrop) { - this._backdrop = document.createElement('div'); - this._backdrop.className = ClassName.BACKDROP; - - if (animate) { - this._backdrop.classList.add(animate); - } - - $$$1(this._backdrop).appendTo(document.body); - $$$1(this._element).on(Event.CLICK_DISMISS, function (event) { - if (_this8._ignoreBackdropClick) { - _this8._ignoreBackdropClick = false; - return; - } - - if (event.target !== event.currentTarget) { - return; - } - - if (_this8._config.backdrop === 'static') { - _this8._element.focus(); - } else { - _this8.hide(); - } - }); - - if (animate) { - Util.reflow(this._backdrop); - } - - $$$1(this._backdrop).addClass(ClassName.SHOW); - - if (!callback) { - return; - } - - if (!animate) { - callback(); - return; - } - - var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); - } else if (!this._isShown && this._backdrop) { - $$$1(this._backdrop).removeClass(ClassName.SHOW); - - var callbackRemove = function callbackRemove() { - _this8._removeBackdrop(); - - if (callback) { - callback(); - } - }; - - if ($$$1(this._element).hasClass(ClassName.FADE)) { - var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - - $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); - } else { - callbackRemove(); - } - } else if (callback) { - callback(); - } - }; // ---------------------------------------------------------------------- - // the following methods are used to handle overflowing modals - // todo (fat): these should probably be refactored out of modal.js - // ---------------------------------------------------------------------- - - - _proto._adjustDialog = function _adjustDialog() { - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - - if (!this._isBodyOverflowing && isModalOverflowing) { - this._element.style.paddingLeft = this._scrollbarWidth + "px"; - } - - if (this._isBodyOverflowing && !isModalOverflowing) { - this._element.style.paddingRight = this._scrollbarWidth + "px"; - } - }; - - _proto._resetAdjustments = function _resetAdjustments() { - this._element.style.paddingLeft = ''; - this._element.style.paddingRight = ''; - }; - - _proto._checkScrollbar = function _checkScrollbar() { - var rect = document.body.getBoundingClientRect(); - this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; - this._scrollbarWidth = this._getScrollbarWidth(); - }; - - _proto._setScrollbar = function _setScrollbar() { - var _this9 = this; - - if (this._isBodyOverflowing) { - // Note: DOMNode.style.paddingRight returns the actual value or '' if not set - // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set - var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); - var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding - - $$$1(fixedContent).each(function (index, element) { - var actualPadding = element.style.paddingRight; - var calculatedPadding = $$$1(element).css('padding-right'); - $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); - }); // Adjust sticky content margin - - $$$1(stickyContent).each(function (index, element) { - var actualMargin = element.style.marginRight; - var calculatedMargin = $$$1(element).css('margin-right'); - $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); - }); // Adjust body padding - - var actualPadding = document.body.style.paddingRight; - var calculatedPadding = $$$1(document.body).css('padding-right'); - $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); - } - }; - - _proto._resetScrollbar = function _resetScrollbar() { - // Restore fixed content padding - var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); - $$$1(fixedContent).each(function (index, element) { - var padding = $$$1(element).data('padding-right'); - $$$1(element).removeData('padding-right'); - element.style.paddingRight = padding ? padding : ''; - }); // Restore sticky content - - var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT)); - $$$1(elements).each(function (index, element) { - var margin = $$$1(element).data('margin-right'); - - if (typeof margin !== 'undefined') { - $$$1(element).css('margin-right', margin).removeData('margin-right'); - } - }); // Restore body padding - - var padding = $$$1(document.body).data('padding-right'); - $$$1(document.body).removeData('padding-right'); - document.body.style.paddingRight = padding ? padding : ''; - }; - - _proto._getScrollbarWidth = function _getScrollbarWidth() { - // thx d.walsh - var scrollDiv = document.createElement('div'); - scrollDiv.className = ClassName.SCROLLBAR_MEASURER; - document.body.appendChild(scrollDiv); - var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; - document.body.removeChild(scrollDiv); - return scrollbarWidth; - }; // Static - - - Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); - - var _config = _objectSpread({}, Default, $$$1(this).data(), typeof config === 'object' && config ? config : {}); - - if (!data) { - data = new Modal(this, _config); - $$$1(this).data(DATA_KEY, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](relatedTarget); - } else if (_config.show) { - data.show(relatedTarget); - } - }); - }; - - _createClass(Modal, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }]); - - return Modal; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { - var _this10 = this; - - var target; - var selector = Util.getSelectorFromElement(this); - - if (selector) { - target = document.querySelector(selector); - } - - var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data()); - - if (this.tagName === 'A' || this.tagName === 'AREA') { - event.preventDefault(); - } - - var $target = $$$1(target).one(Event.SHOW, function (showEvent) { - if (showEvent.isDefaultPrevented()) { - // Only register focus restorer if modal will actually get shown - return; - } - - $target.one(Event.HIDDEN, function () { - if ($$$1(_this10).is(':visible')) { - _this10.focus(); - } - }); - }); - - Modal._jQueryInterface.call($$$1(target), config, this); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $$$1.fn[NAME] = Modal._jQueryInterface; - $$$1.fn[NAME].Constructor = Modal; - - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Modal._jQueryInterface; }; - return Modal; - }($); + _createClass(Alert, null, [{ + key: "VERSION", + get: function get() { + return VERSION; + } + }]); + return Alert; + }(); /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.3): tooltip.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ */ - var Tooltip = function ($$$1) { + + $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Alert._jQueryInterface; + $.fn[NAME].Constructor = Alert; + + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Alert._jQueryInterface; + }; + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME$1 = 'button'; + var VERSION$1 = '4.3.1'; + var DATA_KEY$1 = 'bs.button'; + var EVENT_KEY$1 = "." + DATA_KEY$1; + var DATA_API_KEY$1 = '.data-api'; + var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1]; + var ClassName$1 = { + ACTIVE: 'active', + BUTTON: 'btn', + FOCUS: 'focus' + }; + var Selector$1 = { + DATA_TOGGLE_CARROT: '[data-toggle^="button"]', + DATA_TOGGLE: '[data-toggle="buttons"]', + INPUT: 'input:not([type="hidden"])', + ACTIVE: '.active', + BUTTON: '.btn' + }; + var Event$1 = { + CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1, + FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1) /** * ------------------------------------------------------------------------ - * Constants + * Class Definition * ------------------------------------------------------------------------ */ - var NAME = 'tooltip'; - var VERSION = '4.1.3'; - var DATA_KEY = 'bs.tooltip'; - var EVENT_KEY = "." + DATA_KEY; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var CLASS_PREFIX = 'bs-tooltip'; - var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - var DefaultType = { - animation: 'boolean', - template: 'string', - title: '(string|element|function)', - trigger: 'string', - delay: '(number|object)', - html: 'boolean', - selector: '(string|boolean)', - placement: '(string|function)', - offset: '(number|string)', - container: '(string|element|boolean)', - fallbackPlacement: '(string|array)', - boundary: '(string|element)' - }; - var AttachmentMap = { - AUTO: 'auto', - TOP: 'top', - RIGHT: 'right', - BOTTOM: 'bottom', - LEFT: 'left' - }; - var Default = { - animation: true, - template: '

    ', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - selector: false, - placement: 'top', - offset: 0, - container: false, - fallbackPlacement: 'flip', - boundary: 'scrollParent' - }; - var HoverState = { - SHOW: 'show', - OUT: 'out' - }; - var Event = { - HIDE: "hide" + EVENT_KEY, - HIDDEN: "hidden" + EVENT_KEY, - SHOW: "show" + EVENT_KEY, - SHOWN: "shown" + EVENT_KEY, - INSERTED: "inserted" + EVENT_KEY, - CLICK: "click" + EVENT_KEY, - FOCUSIN: "focusin" + EVENT_KEY, - FOCUSOUT: "focusout" + EVENT_KEY, - MOUSEENTER: "mouseenter" + EVENT_KEY, - MOUSELEAVE: "mouseleave" + EVENT_KEY - }; - var ClassName = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector = { - TOOLTIP: '.tooltip', - TOOLTIP_INNER: '.tooltip-inner', - ARROW: '.arrow' - }; - var Trigger = { - HOVER: 'hover', - FOCUS: 'focus', - CLICK: 'click', - MANUAL: 'manual' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ + }; + + var Button = + /*#__PURE__*/ + function () { + function Button(element) { + this._element = element; + } // Getters + + + var _proto = Button.prototype; + + // Public + _proto.toggle = function toggle() { + var triggerChangeEvent = true; + var addAriaPressed = true; + var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0]; + + if (rootElement) { + var input = this._element.querySelector(Selector$1.INPUT); + + if (input) { + if (input.type === 'radio') { + if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) { + triggerChangeEvent = false; + } else { + var activeElement = rootElement.querySelector(Selector$1.ACTIVE); + + if (activeElement) { + $(activeElement).removeClass(ClassName$1.ACTIVE); + } + } + } + + if (triggerChangeEvent) { + if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { + return; + } + + input.checked = !this._element.classList.contains(ClassName$1.ACTIVE); + $(input).trigger('change'); + } + + input.focus(); + addAriaPressed = false; + } + } + + if (addAriaPressed) { + this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE)); + } + + if (triggerChangeEvent) { + $(this._element).toggleClass(ClassName$1.ACTIVE); + } }; - var Tooltip = - /*#__PURE__*/ - function () { - function Tooltip(element, config) { + _proto.dispose = function dispose() { + $.removeData(this._element, DATA_KEY$1); + this._element = null; + } // Static + ; + + Button._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY$1); + + if (!data) { + data = new Button(this); + $(this).data(DATA_KEY$1, data); + } + + if (config === 'toggle') { + data[config](); + } + }); + }; + + _createClass(Button, null, [{ + key: "VERSION", + get: function get() { + return VERSION$1; + } + }]); + + return Button; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { + event.preventDefault(); + var button = event.target; + + if (!$(button).hasClass(ClassName$1.BUTTON)) { + button = $(button).closest(Selector$1.BUTTON); + } + + Button._jQueryInterface.call($(button), 'toggle'); + }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { + var button = $(event.target).closest(Selector$1.BUTTON)[0]; + $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type)); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME$1] = Button._jQueryInterface; + $.fn[NAME$1].Constructor = Button; + + $.fn[NAME$1].noConflict = function () { + $.fn[NAME$1] = JQUERY_NO_CONFLICT$1; + return Button._jQueryInterface; + }; + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME$2 = 'carousel'; + var VERSION$2 = '4.3.1'; + var DATA_KEY$2 = 'bs.carousel'; + var EVENT_KEY$2 = "." + DATA_KEY$2; + var DATA_API_KEY$2 = '.data-api'; + var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2]; + var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key + + var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key + + var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch + + var SWIPE_THRESHOLD = 40; + var Default = { + interval: 5000, + keyboard: true, + slide: false, + pause: 'hover', + wrap: true, + touch: true + }; + var DefaultType = { + interval: '(number|boolean)', + keyboard: 'boolean', + slide: '(boolean|string)', + pause: '(string|boolean)', + wrap: 'boolean', + touch: 'boolean' + }; + var Direction = { + NEXT: 'next', + PREV: 'prev', + LEFT: 'left', + RIGHT: 'right' + }; + var Event$2 = { + SLIDE: "slide" + EVENT_KEY$2, + SLID: "slid" + EVENT_KEY$2, + KEYDOWN: "keydown" + EVENT_KEY$2, + MOUSEENTER: "mouseenter" + EVENT_KEY$2, + MOUSELEAVE: "mouseleave" + EVENT_KEY$2, + TOUCHSTART: "touchstart" + EVENT_KEY$2, + TOUCHMOVE: "touchmove" + EVENT_KEY$2, + TOUCHEND: "touchend" + EVENT_KEY$2, + POINTERDOWN: "pointerdown" + EVENT_KEY$2, + POINTERUP: "pointerup" + EVENT_KEY$2, + DRAG_START: "dragstart" + EVENT_KEY$2, + LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2, + CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2 + }; + var ClassName$2 = { + CAROUSEL: 'carousel', + ACTIVE: 'active', + SLIDE: 'slide', + RIGHT: 'carousel-item-right', + LEFT: 'carousel-item-left', + NEXT: 'carousel-item-next', + PREV: 'carousel-item-prev', + ITEM: 'carousel-item', + POINTER_EVENT: 'pointer-event' + }; + var Selector$2 = { + ACTIVE: '.active', + ACTIVE_ITEM: '.active.carousel-item', + ITEM: '.carousel-item', + ITEM_IMG: '.carousel-item img', + NEXT_PREV: '.carousel-item-next, .carousel-item-prev', + INDICATORS: '.carousel-indicators', + DATA_SLIDE: '[data-slide], [data-slide-to]', + DATA_RIDE: '[data-ride="carousel"]' + }; + var PointerType = { + TOUCH: 'touch', + PEN: 'pen' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Carousel = + /*#__PURE__*/ + function () { + function Carousel(element, config) { + this._items = null; + this._interval = null; + this._activeElement = null; + this._isPaused = false; + this._isSliding = false; + this.touchTimeout = null; + this.touchStartX = 0; + this.touchDeltaX = 0; + this._config = this._getConfig(config); + this._element = element; + this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS); + this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; + this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); + + this._addEventListeners(); + } // Getters + + + var _proto = Carousel.prototype; + + // Public + _proto.next = function next() { + if (!this._isSliding) { + this._slide(Direction.NEXT); + } + }; + + _proto.nextWhenVisible = function nextWhenVisible() { + // Don't call next when the page isn't visible + // or the carousel or its parent isn't visible + if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { + this.next(); + } + }; + + _proto.prev = function prev() { + if (!this._isSliding) { + this._slide(Direction.PREV); + } + }; + + _proto.pause = function pause(event) { + if (!event) { + this._isPaused = true; + } + + if (this._element.querySelector(Selector$2.NEXT_PREV)) { + Util.triggerTransitionEnd(this._element); + this.cycle(true); + } + + clearInterval(this._interval); + this._interval = null; + }; + + _proto.cycle = function cycle(event) { + if (!event) { + this._isPaused = false; + } + + if (this._interval) { + clearInterval(this._interval); + this._interval = null; + } + + if (this._config.interval && !this._isPaused) { + this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); + } + }; + + _proto.to = function to(index) { + var _this = this; + + this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); + + var activeIndex = this._getItemIndex(this._activeElement); + + if (index > this._items.length - 1 || index < 0) { + return; + } + + if (this._isSliding) { + $(this._element).one(Event$2.SLID, function () { + return _this.to(index); + }); + return; + } + + if (activeIndex === index) { + this.pause(); + this.cycle(); + return; + } + + var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; + + this._slide(direction, this._items[index]); + }; + + _proto.dispose = function dispose() { + $(this._element).off(EVENT_KEY$2); + $.removeData(this._element, DATA_KEY$2); + this._items = null; + this._config = null; + this._element = null; + this._interval = null; + this._isPaused = null; + this._isSliding = null; + this._activeElement = null; + this._indicatorsElement = null; + } // Private + ; + + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, Default, config); + Util.typeCheckConfig(NAME$2, config, DefaultType); + return config; + }; + + _proto._handleSwipe = function _handleSwipe() { + var absDeltax = Math.abs(this.touchDeltaX); + + if (absDeltax <= SWIPE_THRESHOLD) { + return; + } + + var direction = absDeltax / this.touchDeltaX; // swipe left + + if (direction > 0) { + this.prev(); + } // swipe right + + + if (direction < 0) { + this.next(); + } + }; + + _proto._addEventListeners = function _addEventListeners() { + var _this2 = this; + + if (this._config.keyboard) { + $(this._element).on(Event$2.KEYDOWN, function (event) { + return _this2._keydown(event); + }); + } + + if (this._config.pause === 'hover') { + $(this._element).on(Event$2.MOUSEENTER, function (event) { + return _this2.pause(event); + }).on(Event$2.MOUSELEAVE, function (event) { + return _this2.cycle(event); + }); + } + + if (this._config.touch) { + this._addTouchEventListeners(); + } + }; + + _proto._addTouchEventListeners = function _addTouchEventListeners() { + var _this3 = this; + + if (!this._touchSupported) { + return; + } + + var start = function start(event) { + if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { + _this3.touchStartX = event.originalEvent.clientX; + } else if (!_this3._pointerEvent) { + _this3.touchStartX = event.originalEvent.touches[0].clientX; + } + }; + + var move = function move(event) { + // ensure swiping with one touch and not pinching + if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { + _this3.touchDeltaX = 0; + } else { + _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; + } + }; + + var end = function end(event) { + if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { + _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; + } + + _this3._handleSwipe(); + + if (_this3._config.pause === 'hover') { + // If it's a touch-enabled device, mouseenter/leave are fired as + // part of the mouse compatibility events on first tap - the carousel + // would stop cycling until user tapped out of it; + // here, we listen for touchend, explicitly pause the carousel + // (as if it's the second time we tap on it, mouseenter compat event + // is NOT fired) and after a timeout (to allow for mouse compatibility + // events to fire) we explicitly restart cycling + _this3.pause(); + + if (_this3.touchTimeout) { + clearTimeout(_this3.touchTimeout); + } + + _this3.touchTimeout = setTimeout(function (event) { + return _this3.cycle(event); + }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); + } + }; + + $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) { + return e.preventDefault(); + }); + + if (this._pointerEvent) { + $(this._element).on(Event$2.POINTERDOWN, function (event) { + return start(event); + }); + $(this._element).on(Event$2.POINTERUP, function (event) { + return end(event); + }); + + this._element.classList.add(ClassName$2.POINTER_EVENT); + } else { + $(this._element).on(Event$2.TOUCHSTART, function (event) { + return start(event); + }); + $(this._element).on(Event$2.TOUCHMOVE, function (event) { + return move(event); + }); + $(this._element).on(Event$2.TOUCHEND, function (event) { + return end(event); + }); + } + }; + + _proto._keydown = function _keydown(event) { + if (/input|textarea/i.test(event.target.tagName)) { + return; + } + + switch (event.which) { + case ARROW_LEFT_KEYCODE: + event.preventDefault(); + this.prev(); + break; + + case ARROW_RIGHT_KEYCODE: + event.preventDefault(); + this.next(); + break; + + default: + } + }; + + _proto._getItemIndex = function _getItemIndex(element) { + this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : []; + return this._items.indexOf(element); + }; + + _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { + var isNextDirection = direction === Direction.NEXT; + var isPrevDirection = direction === Direction.PREV; + + var activeIndex = this._getItemIndex(activeElement); + + var lastItemIndex = this._items.length - 1; + var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; + + if (isGoingToWrap && !this._config.wrap) { + return activeElement; + } + + var delta = direction === Direction.PREV ? -1 : 1; + var itemIndex = (activeIndex + delta) % this._items.length; + return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; + }; + + _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { + var targetIndex = this._getItemIndex(relatedTarget); + + var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM)); + + var slideEvent = $.Event(Event$2.SLIDE, { + relatedTarget: relatedTarget, + direction: eventDirectionName, + from: fromIndex, + to: targetIndex + }); + $(this._element).trigger(slideEvent); + return slideEvent; + }; + + _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { + if (this._indicatorsElement) { + var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE)); + $(indicators).removeClass(ClassName$2.ACTIVE); + + var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; + + if (nextIndicator) { + $(nextIndicator).addClass(ClassName$2.ACTIVE); + } + } + }; + + _proto._slide = function _slide(direction, element) { + var _this4 = this; + + var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); + + var activeElementIndex = this._getItemIndex(activeElement); + + var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); + + var nextElementIndex = this._getItemIndex(nextElement); + + var isCycling = Boolean(this._interval); + var directionalClassName; + var orderClassName; + var eventDirectionName; + + if (direction === Direction.NEXT) { + directionalClassName = ClassName$2.LEFT; + orderClassName = ClassName$2.NEXT; + eventDirectionName = Direction.LEFT; + } else { + directionalClassName = ClassName$2.RIGHT; + orderClassName = ClassName$2.PREV; + eventDirectionName = Direction.RIGHT; + } + + if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) { + this._isSliding = false; + return; + } + + var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); + + if (slideEvent.isDefaultPrevented()) { + return; + } + + if (!activeElement || !nextElement) { + // Some weirdness is happening, so we bail + return; + } + + this._isSliding = true; + + if (isCycling) { + this.pause(); + } + + this._setActiveIndicatorElement(nextElement); + + var slidEvent = $.Event(Event$2.SLID, { + relatedTarget: nextElement, + direction: eventDirectionName, + from: activeElementIndex, + to: nextElementIndex + }); + + if ($(this._element).hasClass(ClassName$2.SLIDE)) { + $(nextElement).addClass(orderClassName); + Util.reflow(nextElement); + $(activeElement).addClass(directionalClassName); + $(nextElement).addClass(directionalClassName); + var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); + + if (nextElementInterval) { + this._config.defaultInterval = this._config.defaultInterval || this._config.interval; + this._config.interval = nextElementInterval; + } else { + this._config.interval = this._config.defaultInterval || this._config.interval; + } + + var transitionDuration = Util.getTransitionDurationFromElement(activeElement); + $(activeElement).one(Util.TRANSITION_END, function () { + $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE); + $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName); + _this4._isSliding = false; + setTimeout(function () { + return $(_this4._element).trigger(slidEvent); + }, 0); + }).emulateTransitionEnd(transitionDuration); + } else { + $(activeElement).removeClass(ClassName$2.ACTIVE); + $(nextElement).addClass(ClassName$2.ACTIVE); + this._isSliding = false; + $(this._element).trigger(slidEvent); + } + + if (isCycling) { + this.cycle(); + } + } // Static + ; + + Carousel._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY$2); + + var _config = _objectSpread({}, Default, $(this).data()); + + if (typeof config === 'object') { + _config = _objectSpread({}, _config, config); + } + + var action = typeof config === 'string' ? config : _config.slide; + + if (!data) { + data = new Carousel(this, _config); + $(this).data(DATA_KEY$2, data); + } + + if (typeof config === 'number') { + data.to(config); + } else if (typeof action === 'string') { + if (typeof data[action] === 'undefined') { + throw new TypeError("No method named \"" + action + "\""); + } + + data[action](); + } else if (_config.interval && _config.ride) { + data.pause(); + data.cycle(); + } + }); + }; + + Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { + var selector = Util.getSelectorFromElement(this); + + if (!selector) { + return; + } + + var target = $(selector)[0]; + + if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) { + return; + } + + var config = _objectSpread({}, $(target).data(), $(this).data()); + + var slideIndex = this.getAttribute('data-slide-to'); + + if (slideIndex) { + config.interval = false; + } + + Carousel._jQueryInterface.call($(target), config); + + if (slideIndex) { + $(target).data(DATA_KEY$2).to(slideIndex); + } + + event.preventDefault(); + }; + + _createClass(Carousel, null, [{ + key: "VERSION", + get: function get() { + return VERSION$2; + } + }, { + key: "Default", + get: function get() { + return Default; + } + }]); + + return Carousel; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler); + $(window).on(Event$2.LOAD_DATA_API, function () { + var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE)); + + for (var i = 0, len = carousels.length; i < len; i++) { + var $carousel = $(carousels[i]); + + Carousel._jQueryInterface.call($carousel, $carousel.data()); + } + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME$2] = Carousel._jQueryInterface; + $.fn[NAME$2].Constructor = Carousel; + + $.fn[NAME$2].noConflict = function () { + $.fn[NAME$2] = JQUERY_NO_CONFLICT$2; + return Carousel._jQueryInterface; + }; + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME$3 = 'collapse'; + var VERSION$3 = '4.3.1'; + var DATA_KEY$3 = 'bs.collapse'; + var EVENT_KEY$3 = "." + DATA_KEY$3; + var DATA_API_KEY$3 = '.data-api'; + var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3]; + var Default$1 = { + toggle: true, + parent: '' + }; + var DefaultType$1 = { + toggle: 'boolean', + parent: '(string|element)' + }; + var Event$3 = { + SHOW: "show" + EVENT_KEY$3, + SHOWN: "shown" + EVENT_KEY$3, + HIDE: "hide" + EVENT_KEY$3, + HIDDEN: "hidden" + EVENT_KEY$3, + CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3 + }; + var ClassName$3 = { + SHOW: 'show', + COLLAPSE: 'collapse', + COLLAPSING: 'collapsing', + COLLAPSED: 'collapsed' + }; + var Dimension = { + WIDTH: 'width', + HEIGHT: 'height' + }; + var Selector$3 = { + ACTIVES: '.show, .collapsing', + DATA_TOGGLE: '[data-toggle="collapse"]' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Collapse = + /*#__PURE__*/ + function () { + function Collapse(element, config) { + this._isTransitioning = false; + this._element = element; + this._config = this._getConfig(config); + this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); + var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE)); + + for (var i = 0, len = toggleList.length; i < len; i++) { + var elem = toggleList[i]; + var selector = Util.getSelectorFromElement(elem); + var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { + return foundElem === element; + }); + + if (selector !== null && filterElement.length > 0) { + this._selector = selector; + + this._triggerArray.push(elem); + } + } + + this._parent = this._config.parent ? this._getParent() : null; + + if (!this._config.parent) { + this._addAriaAndCollapsedClass(this._element, this._triggerArray); + } + + if (this._config.toggle) { + this.toggle(); + } + } // Getters + + + var _proto = Collapse.prototype; + + // Public + _proto.toggle = function toggle() { + if ($(this._element).hasClass(ClassName$3.SHOW)) { + this.hide(); + } else { + this.show(); + } + }; + + _proto.show = function show() { + var _this = this; + + if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) { + return; + } + + var actives; + var activesData; + + if (this._parent) { + actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) { + if (typeof _this._config.parent === 'string') { + return elem.getAttribute('data-parent') === _this._config.parent; + } + + return elem.classList.contains(ClassName$3.COLLAPSE); + }); + + if (actives.length === 0) { + actives = null; + } + } + + if (actives) { + activesData = $(actives).not(this._selector).data(DATA_KEY$3); + + if (activesData && activesData._isTransitioning) { + return; + } + } + + var startEvent = $.Event(Event$3.SHOW); + $(this._element).trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { + return; + } + + if (actives) { + Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); + + if (!activesData) { + $(actives).data(DATA_KEY$3, null); + } + } + + var dimension = this._getDimension(); + + $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING); + this._element.style[dimension] = 0; + + if (this._triggerArray.length) { + $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true); + } + + this.setTransitioning(true); + + var complete = function complete() { + $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW); + _this._element.style[dimension] = ''; + + _this.setTransitioning(false); + + $(_this._element).trigger(Event$3.SHOWN); + }; + + var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); + var scrollSize = "scroll" + capitalizedDimension; + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); + this._element.style[dimension] = this._element[scrollSize] + "px"; + }; + + _proto.hide = function hide() { + var _this2 = this; + + if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) { + return; + } + + var startEvent = $.Event(Event$3.HIDE); + $(this._element).trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { + return; + } + + var dimension = this._getDimension(); + + this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; + Util.reflow(this._element); + $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW); + var triggerArrayLength = this._triggerArray.length; + + if (triggerArrayLength > 0) { + for (var i = 0; i < triggerArrayLength; i++) { + var trigger = this._triggerArray[i]; + var selector = Util.getSelectorFromElement(trigger); + + if (selector !== null) { + var $elem = $([].slice.call(document.querySelectorAll(selector))); + + if (!$elem.hasClass(ClassName$3.SHOW)) { + $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false); + } + } + } + } + + this.setTransitioning(true); + + var complete = function complete() { + _this2.setTransitioning(false); + + $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN); + }; + + this._element.style[dimension] = ''; + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); + }; + + _proto.setTransitioning = function setTransitioning(isTransitioning) { + this._isTransitioning = isTransitioning; + }; + + _proto.dispose = function dispose() { + $.removeData(this._element, DATA_KEY$3); + this._config = null; + this._parent = null; + this._element = null; + this._triggerArray = null; + this._isTransitioning = null; + } // Private + ; + + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, Default$1, config); + config.toggle = Boolean(config.toggle); // Coerce string values + + Util.typeCheckConfig(NAME$3, config, DefaultType$1); + return config; + }; + + _proto._getDimension = function _getDimension() { + var hasWidth = $(this._element).hasClass(Dimension.WIDTH); + return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; + }; + + _proto._getParent = function _getParent() { + var _this3 = this; + + var parent; + + if (Util.isElement(this._config.parent)) { + parent = this._config.parent; // It's a jQuery object + + if (typeof this._config.parent.jquery !== 'undefined') { + parent = this._config.parent[0]; + } + } else { + parent = document.querySelector(this._config.parent); + } + + var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; + var children = [].slice.call(parent.querySelectorAll(selector)); + $(children).each(function (i, element) { + _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); + }); + return parent; + }; + + _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { + var isOpen = $(element).hasClass(ClassName$3.SHOW); + + if (triggerArray.length) { + $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); + } + } // Static + ; + + Collapse._getTargetFromElement = function _getTargetFromElement(element) { + var selector = Util.getSelectorFromElement(element); + return selector ? document.querySelector(selector) : null; + }; + + Collapse._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var $this = $(this); + var data = $this.data(DATA_KEY$3); + + var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {}); + + if (!data && _config.toggle && /show|hide/.test(config)) { + _config.toggle = false; + } + + if (!data) { + data = new Collapse(this, _config); + $this.data(DATA_KEY$3, data); + } + + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + + data[config](); + } + }); + }; + + _createClass(Collapse, null, [{ + key: "VERSION", + get: function get() { + return VERSION$3; + } + }, { + key: "Default", + get: function get() { + return Default$1; + } + }]); + + return Collapse; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) { + // preventDefault only for elements (which change the URL) not inside the collapsible element + if (event.currentTarget.tagName === 'A') { + event.preventDefault(); + } + + var $trigger = $(this); + var selector = Util.getSelectorFromElement(this); + var selectors = [].slice.call(document.querySelectorAll(selector)); + $(selectors).each(function () { + var $target = $(this); + var data = $target.data(DATA_KEY$3); + var config = data ? 'toggle' : $trigger.data(); + + Collapse._jQueryInterface.call($target, config); + }); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME$3] = Collapse._jQueryInterface; + $.fn[NAME$3].Constructor = Collapse; + + $.fn[NAME$3].noConflict = function () { + $.fn[NAME$3] = JQUERY_NO_CONFLICT$3; + return Collapse._jQueryInterface; + }; + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME$4 = 'dropdown'; + var VERSION$4 = '4.3.1'; + var DATA_KEY$4 = 'bs.dropdown'; + var EVENT_KEY$4 = "." + DATA_KEY$4; + var DATA_API_KEY$4 = '.data-api'; + var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4]; + var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key + + var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key + + var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key + + var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key + + var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key + + var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) + + var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); + var Event$4 = { + HIDE: "hide" + EVENT_KEY$4, + HIDDEN: "hidden" + EVENT_KEY$4, + SHOW: "show" + EVENT_KEY$4, + SHOWN: "shown" + EVENT_KEY$4, + CLICK: "click" + EVENT_KEY$4, + CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4, + KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4, + KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4 + }; + var ClassName$4 = { + DISABLED: 'disabled', + SHOW: 'show', + DROPUP: 'dropup', + DROPRIGHT: 'dropright', + DROPLEFT: 'dropleft', + MENURIGHT: 'dropdown-menu-right', + MENULEFT: 'dropdown-menu-left', + POSITION_STATIC: 'position-static' + }; + var Selector$4 = { + DATA_TOGGLE: '[data-toggle="dropdown"]', + FORM_CHILD: '.dropdown form', + MENU: '.dropdown-menu', + NAVBAR_NAV: '.navbar-nav', + VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' + }; + var AttachmentMap = { + TOP: 'top-start', + TOPEND: 'top-end', + BOTTOM: 'bottom-start', + BOTTOMEND: 'bottom-end', + RIGHT: 'right-start', + RIGHTEND: 'right-end', + LEFT: 'left-start', + LEFTEND: 'left-end' + }; + var Default$2 = { + offset: 0, + flip: true, + boundary: 'scrollParent', + reference: 'toggle', + display: 'dynamic' + }; + var DefaultType$2 = { + offset: '(number|string|function)', + flip: 'boolean', + boundary: '(string|element)', + reference: '(string|element)', + display: 'string' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Dropdown = + /*#__PURE__*/ + function () { + function Dropdown(element, config) { + this._element = element; + this._popper = null; + this._config = this._getConfig(config); + this._menu = this._getMenuElement(); + this._inNavbar = this._detectNavbar(); + + this._addEventListeners(); + } // Getters + + + var _proto = Dropdown.prototype; + + // Public + _proto.toggle = function toggle() { + if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) { + return; + } + + var parent = Dropdown._getParentFromElement(this._element); + + var isActive = $(this._menu).hasClass(ClassName$4.SHOW); + + Dropdown._clearMenus(); + + if (isActive) { + return; + } + + var relatedTarget = { + relatedTarget: this._element + }; + var showEvent = $.Event(Event$4.SHOW, relatedTarget); + $(parent).trigger(showEvent); + + if (showEvent.isDefaultPrevented()) { + return; + } // Disable totally Popper.js for Dropdown in Navbar + + + if (!this._inNavbar) { /** * Check for Popper dependency * Popper - https://popper.js.org */ if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)'); - } // private + throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); + } + + var referenceElement = this._element; + + if (this._config.reference === 'parent') { + referenceElement = parent; + } else if (Util.isElement(this._config.reference)) { + referenceElement = this._config.reference; // Check if it's jQuery element + + if (typeof this._config.reference.jquery !== 'undefined') { + referenceElement = this._config.reference[0]; + } + } // If boundary is not `scrollParent`, then set position to `static` + // to allow the menu to "escape" the scroll parent's boundaries + // https://github.com/twbs/bootstrap/issues/24251 - this._isEnabled = true; - this._timeout = 0; - this._hoverState = ''; - this._activeTrigger = {}; - this._popper = null; // Protected + if (this._config.boundary !== 'scrollParent') { + $(parent).addClass(ClassName$4.POSITION_STATIC); + } - this.element = element; - this.config = this._getConfig(config); - this.tip = null; - - this._setListeners(); - } // Getters + this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); + } // If this is a touch-enabled device we add extra + // empty mouseover listeners to the body's immediate children; + // only needed because of broken event delegation on iOS + // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - var _proto = Tooltip.prototype; + if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) { + $(document.body).children().on('mouseover', null, $.noop); + } + + this._element.focus(); + + this._element.setAttribute('aria-expanded', true); + + $(this._menu).toggleClass(ClassName$4.SHOW); + $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); + }; + + _proto.show = function show() { + if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) { + return; + } + + var relatedTarget = { + relatedTarget: this._element + }; + var showEvent = $.Event(Event$4.SHOW, relatedTarget); + + var parent = Dropdown._getParentFromElement(this._element); + + $(parent).trigger(showEvent); + + if (showEvent.isDefaultPrevented()) { + return; + } + + $(this._menu).toggleClass(ClassName$4.SHOW); + $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); + }; + + _proto.hide = function hide() { + if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) { + return; + } + + var relatedTarget = { + relatedTarget: this._element + }; + var hideEvent = $.Event(Event$4.HIDE, relatedTarget); + + var parent = Dropdown._getParentFromElement(this._element); + + $(parent).trigger(hideEvent); + + if (hideEvent.isDefaultPrevented()) { + return; + } + + $(this._menu).toggleClass(ClassName$4.SHOW); + $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); + }; + + _proto.dispose = function dispose() { + $.removeData(this._element, DATA_KEY$4); + $(this._element).off(EVENT_KEY$4); + this._element = null; + this._menu = null; + + if (this._popper !== null) { + this._popper.destroy(); + + this._popper = null; + } + }; + + _proto.update = function update() { + this._inNavbar = this._detectNavbar(); + + if (this._popper !== null) { + this._popper.scheduleUpdate(); + } + } // Private + ; + + _proto._addEventListeners = function _addEventListeners() { + var _this = this; + + $(this._element).on(Event$4.CLICK, function (event) { + event.preventDefault(); + event.stopPropagation(); + + _this.toggle(); + }); + }; + + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config); + Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); + return config; + }; + + _proto._getMenuElement = function _getMenuElement() { + if (!this._menu) { + var parent = Dropdown._getParentFromElement(this._element); + + if (parent) { + this._menu = parent.querySelector(Selector$4.MENU); + } + } + + return this._menu; + }; + + _proto._getPlacement = function _getPlacement() { + var $parentDropdown = $(this._element.parentNode); + var placement = AttachmentMap.BOTTOM; // Handle dropup + + if ($parentDropdown.hasClass(ClassName$4.DROPUP)) { + placement = AttachmentMap.TOP; + + if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { + placement = AttachmentMap.TOPEND; + } + } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) { + placement = AttachmentMap.RIGHT; + } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) { + placement = AttachmentMap.LEFT; + } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { + placement = AttachmentMap.BOTTOMEND; + } + + return placement; + }; + + _proto._detectNavbar = function _detectNavbar() { + return $(this._element).closest('.navbar').length > 0; + }; + + _proto._getOffset = function _getOffset() { + var _this2 = this; + + var offset = {}; + + if (typeof this._config.offset === 'function') { + offset.fn = function (data) { + data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {}); + return data; + }; + } else { + offset.offset = this._config.offset; + } + + return offset; + }; + + _proto._getPopperConfig = function _getPopperConfig() { + var popperConfig = { + placement: this._getPlacement(), + modifiers: { + offset: this._getOffset(), + flip: { + enabled: this._config.flip + }, + preventOverflow: { + boundariesElement: this._config.boundary + } + } // Disable Popper.js if we have a static display - // Public - _proto.enable = function enable() { - this._isEnabled = true; }; - _proto.disable = function disable() { - this._isEnabled = false; + if (this._config.display === 'static') { + popperConfig.modifiers.applyStyle = { + enabled: false + }; + } + + return popperConfig; + } // Static + ; + + Dropdown._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY$4); + + var _config = typeof config === 'object' ? config : null; + + if (!data) { + data = new Dropdown(this, _config); + $(this).data(DATA_KEY$4, data); + } + + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + + data[config](); + } + }); + }; + + Dropdown._clearMenus = function _clearMenus(event) { + if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { + return; + } + + var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE)); + + for (var i = 0, len = toggles.length; i < len; i++) { + var parent = Dropdown._getParentFromElement(toggles[i]); + + var context = $(toggles[i]).data(DATA_KEY$4); + var relatedTarget = { + relatedTarget: toggles[i] + }; + + if (event && event.type === 'click') { + relatedTarget.clickEvent = event; + } + + if (!context) { + continue; + } + + var dropdownMenu = context._menu; + + if (!$(parent).hasClass(ClassName$4.SHOW)) { + continue; + } + + if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { + continue; + } + + var hideEvent = $.Event(Event$4.HIDE, relatedTarget); + $(parent).trigger(hideEvent); + + if (hideEvent.isDefaultPrevented()) { + continue; + } // If this is a touch-enabled device we remove the extra + // empty mouseover listeners we added for iOS support + + + if ('ontouchstart' in document.documentElement) { + $(document.body).children().off('mouseover', null, $.noop); + } + + toggles[i].setAttribute('aria-expanded', 'false'); + $(dropdownMenu).removeClass(ClassName$4.SHOW); + $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); + } + }; + + Dropdown._getParentFromElement = function _getParentFromElement(element) { + var parent; + var selector = Util.getSelectorFromElement(element); + + if (selector) { + parent = document.querySelector(selector); + } + + return parent || element.parentNode; + } // eslint-disable-next-line complexity + ; + + Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { + // If not input/textarea: + // - And not a key in REGEXP_KEYDOWN => not a dropdown command + // If input/textarea: + // - If space key => not a dropdown command + // - If key is other than escape + // - If key is not up or down => not a dropdown command + // - If trigger inside the menu => not a dropdown command + if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { + return; + } + + event.preventDefault(); + event.stopPropagation(); + + if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) { + return; + } + + var parent = Dropdown._getParentFromElement(this); + + var isActive = $(parent).hasClass(ClassName$4.SHOW); + + if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { + if (event.which === ESCAPE_KEYCODE) { + var toggle = parent.querySelector(Selector$4.DATA_TOGGLE); + $(toggle).trigger('focus'); + } + + $(this).trigger('click'); + return; + } + + var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)); + + if (items.length === 0) { + return; + } + + var index = items.indexOf(event.target); + + if (event.which === ARROW_UP_KEYCODE && index > 0) { + // Up + index--; + } + + if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { + // Down + index++; + } + + if (index < 0) { + index = 0; + } + + items[index].focus(); + }; + + _createClass(Dropdown, null, [{ + key: "VERSION", + get: function get() { + return VERSION$4; + } + }, { + key: "Default", + get: function get() { + return Default$2; + } + }, { + key: "DefaultType", + get: function get() { + return DefaultType$2; + } + }]); + + return Dropdown; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) { + event.preventDefault(); + event.stopPropagation(); + + Dropdown._jQueryInterface.call($(this), 'toggle'); + }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) { + e.stopPropagation(); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME$4] = Dropdown._jQueryInterface; + $.fn[NAME$4].Constructor = Dropdown; + + $.fn[NAME$4].noConflict = function () { + $.fn[NAME$4] = JQUERY_NO_CONFLICT$4; + return Dropdown._jQueryInterface; + }; + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME$5 = 'modal'; + var VERSION$5 = '4.3.1'; + var DATA_KEY$5 = 'bs.modal'; + var EVENT_KEY$5 = "." + DATA_KEY$5; + var DATA_API_KEY$5 = '.data-api'; + var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5]; + var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key + + var Default$3 = { + backdrop: true, + keyboard: true, + focus: true, + show: true + }; + var DefaultType$3 = { + backdrop: '(boolean|string)', + keyboard: 'boolean', + focus: 'boolean', + show: 'boolean' + }; + var Event$5 = { + HIDE: "hide" + EVENT_KEY$5, + HIDDEN: "hidden" + EVENT_KEY$5, + SHOW: "show" + EVENT_KEY$5, + SHOWN: "shown" + EVENT_KEY$5, + FOCUSIN: "focusin" + EVENT_KEY$5, + RESIZE: "resize" + EVENT_KEY$5, + CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5, + KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5, + MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5, + MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5, + CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 + }; + var ClassName$5 = { + SCROLLABLE: 'modal-dialog-scrollable', + SCROLLBAR_MEASURER: 'modal-scrollbar-measure', + BACKDROP: 'modal-backdrop', + OPEN: 'modal-open', + FADE: 'fade', + SHOW: 'show' + }; + var Selector$5 = { + DIALOG: '.modal-dialog', + MODAL_BODY: '.modal-body', + DATA_TOGGLE: '[data-toggle="modal"]', + DATA_DISMISS: '[data-dismiss="modal"]', + FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', + STICKY_CONTENT: '.sticky-top' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Modal = + /*#__PURE__*/ + function () { + function Modal(element, config) { + this._config = this._getConfig(config); + this._element = element; + this._dialog = element.querySelector(Selector$5.DIALOG); + this._backdrop = null; + this._isShown = false; + this._isBodyOverflowing = false; + this._ignoreBackdropClick = false; + this._isTransitioning = false; + this._scrollbarWidth = 0; + } // Getters + + + var _proto = Modal.prototype; + + // Public + _proto.toggle = function toggle(relatedTarget) { + return this._isShown ? this.hide() : this.show(relatedTarget); + }; + + _proto.show = function show(relatedTarget) { + var _this = this; + + if (this._isShown || this._isTransitioning) { + return; + } + + if ($(this._element).hasClass(ClassName$5.FADE)) { + this._isTransitioning = true; + } + + var showEvent = $.Event(Event$5.SHOW, { + relatedTarget: relatedTarget + }); + $(this._element).trigger(showEvent); + + if (this._isShown || showEvent.isDefaultPrevented()) { + return; + } + + this._isShown = true; + + this._checkScrollbar(); + + this._setScrollbar(); + + this._adjustDialog(); + + this._setEscapeEvent(); + + this._setResizeEvent(); + + $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) { + return _this.hide(event); + }); + $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () { + $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) { + if ($(event.target).is(_this._element)) { + _this._ignoreBackdropClick = true; + } + }); + }); + + this._showBackdrop(function () { + return _this._showElement(relatedTarget); + }); + }; + + _proto.hide = function hide(event) { + var _this2 = this; + + if (event) { + event.preventDefault(); + } + + if (!this._isShown || this._isTransitioning) { + return; + } + + var hideEvent = $.Event(Event$5.HIDE); + $(this._element).trigger(hideEvent); + + if (!this._isShown || hideEvent.isDefaultPrevented()) { + return; + } + + this._isShown = false; + var transition = $(this._element).hasClass(ClassName$5.FADE); + + if (transition) { + this._isTransitioning = true; + } + + this._setEscapeEvent(); + + this._setResizeEvent(); + + $(document).off(Event$5.FOCUSIN); + $(this._element).removeClass(ClassName$5.SHOW); + $(this._element).off(Event$5.CLICK_DISMISS); + $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS); + + if (transition) { + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $(this._element).one(Util.TRANSITION_END, function (event) { + return _this2._hideModal(event); + }).emulateTransitionEnd(transitionDuration); + } else { + this._hideModal(); + } + }; + + _proto.dispose = function dispose() { + [window, this._element, this._dialog].forEach(function (htmlElement) { + return $(htmlElement).off(EVENT_KEY$5); + }); + /** + * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` + * Do not move `document` in `htmlElements` array + * It will remove `Event.CLICK_DATA_API` event that should remain + */ + + $(document).off(Event$5.FOCUSIN); + $.removeData(this._element, DATA_KEY$5); + this._config = null; + this._element = null; + this._dialog = null; + this._backdrop = null; + this._isShown = null; + this._isBodyOverflowing = null; + this._ignoreBackdropClick = null; + this._isTransitioning = null; + this._scrollbarWidth = null; + }; + + _proto.handleUpdate = function handleUpdate() { + this._adjustDialog(); + } // Private + ; + + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, Default$3, config); + Util.typeCheckConfig(NAME$5, config, DefaultType$3); + return config; + }; + + _proto._showElement = function _showElement(relatedTarget) { + var _this3 = this; + + var transition = $(this._element).hasClass(ClassName$5.FADE); + + if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { + // Don't move modal's DOM position + document.body.appendChild(this._element); + } + + this._element.style.display = 'block'; + + this._element.removeAttribute('aria-hidden'); + + this._element.setAttribute('aria-modal', true); + + if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) { + this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0; + } else { + this._element.scrollTop = 0; + } + + if (transition) { + Util.reflow(this._element); + } + + $(this._element).addClass(ClassName$5.SHOW); + + if (this._config.focus) { + this._enforceFocus(); + } + + var shownEvent = $.Event(Event$5.SHOWN, { + relatedTarget: relatedTarget + }); + + var transitionComplete = function transitionComplete() { + if (_this3._config.focus) { + _this3._element.focus(); + } + + _this3._isTransitioning = false; + $(_this3._element).trigger(shownEvent); }; - _proto.toggleEnabled = function toggleEnabled() { - this._isEnabled = !this._isEnabled; - }; + if (transition) { + var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); + $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); + } else { + transitionComplete(); + } + }; - _proto.toggle = function toggle(event) { - if (!this._isEnabled) { + _proto._enforceFocus = function _enforceFocus() { + var _this4 = this; + + $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop + .on(Event$5.FOCUSIN, function (event) { + if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) { + _this4._element.focus(); + } + }); + }; + + _proto._setEscapeEvent = function _setEscapeEvent() { + var _this5 = this; + + if (this._isShown && this._config.keyboard) { + $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) { + if (event.which === ESCAPE_KEYCODE$1) { + event.preventDefault(); + + _this5.hide(); + } + }); + } else if (!this._isShown) { + $(this._element).off(Event$5.KEYDOWN_DISMISS); + } + }; + + _proto._setResizeEvent = function _setResizeEvent() { + var _this6 = this; + + if (this._isShown) { + $(window).on(Event$5.RESIZE, function (event) { + return _this6.handleUpdate(event); + }); + } else { + $(window).off(Event$5.RESIZE); + } + }; + + _proto._hideModal = function _hideModal() { + var _this7 = this; + + this._element.style.display = 'none'; + + this._element.setAttribute('aria-hidden', true); + + this._element.removeAttribute('aria-modal'); + + this._isTransitioning = false; + + this._showBackdrop(function () { + $(document.body).removeClass(ClassName$5.OPEN); + + _this7._resetAdjustments(); + + _this7._resetScrollbar(); + + $(_this7._element).trigger(Event$5.HIDDEN); + }); + }; + + _proto._removeBackdrop = function _removeBackdrop() { + if (this._backdrop) { + $(this._backdrop).remove(); + this._backdrop = null; + } + }; + + _proto._showBackdrop = function _showBackdrop(callback) { + var _this8 = this; + + var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : ''; + + if (this._isShown && this._config.backdrop) { + this._backdrop = document.createElement('div'); + this._backdrop.className = ClassName$5.BACKDROP; + + if (animate) { + this._backdrop.classList.add(animate); + } + + $(this._backdrop).appendTo(document.body); + $(this._element).on(Event$5.CLICK_DISMISS, function (event) { + if (_this8._ignoreBackdropClick) { + _this8._ignoreBackdropClick = false; + return; + } + + if (event.target !== event.currentTarget) { + return; + } + + if (_this8._config.backdrop === 'static') { + _this8._element.focus(); + } else { + _this8.hide(); + } + }); + + if (animate) { + Util.reflow(this._backdrop); + } + + $(this._backdrop).addClass(ClassName$5.SHOW); + + if (!callback) { return; } - if (event) { - var dataKey = this.constructor.DATA_KEY; - var context = $$$1(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $$$1(event.currentTarget).data(dataKey, context); - } - - context._activeTrigger.click = !context._activeTrigger.click; - - if (context._isWithActiveTrigger()) { - context._enter(null, context); - } else { - context._leave(null, context); - } - } else { - if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) { - this._leave(null, this); - - return; - } - - this._enter(null, this); - } - }; - - _proto.dispose = function dispose() { - clearTimeout(this._timeout); - $$$1.removeData(this.element, this.constructor.DATA_KEY); - $$$1(this.element).off(this.constructor.EVENT_KEY); - $$$1(this.element).closest('.modal').off('hide.bs.modal'); - - if (this.tip) { - $$$1(this.tip).remove(); + if (!animate) { + callback(); + return; } - this._isEnabled = null; - this._timeout = null; - this._hoverState = null; - this._activeTrigger = null; + var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); + $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); + } else if (!this._isShown && this._backdrop) { + $(this._backdrop).removeClass(ClassName$5.SHOW); - if (this._popper !== null) { - this._popper.destroy(); - } - - this._popper = null; - this.element = null; - this.config = null; - this.tip = null; - }; - - _proto.show = function show() { - var _this = this; - - if ($$$1(this.element).css('display') === 'none') { - throw new Error('Please use show on visible elements'); - } - - var showEvent = $$$1.Event(this.constructor.Event.SHOW); - - if (this.isWithContent() && this._isEnabled) { - $$$1(this.element).trigger(showEvent); - var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element); - - if (showEvent.isDefaultPrevented() || !isInTheDom) { - return; - } - - var tip = this.getTipElement(); - var tipId = Util.getUID(this.constructor.NAME); - tip.setAttribute('id', tipId); - this.element.setAttribute('aria-describedby', tipId); - this.setContent(); - - if (this.config.animation) { - $$$1(tip).addClass(ClassName.FADE); - } - - var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; - - var attachment = this._getAttachment(placement); - - this.addAttachmentClass(attachment); - var container = this.config.container === false ? document.body : $$$1(document).find(this.config.container); - $$$1(tip).data(this.constructor.DATA_KEY, this); - - if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) { - $$$1(tip).appendTo(container); - } - - $$$1(this.element).trigger(this.constructor.Event.INSERTED); - this._popper = new Popper(this.element, tip, { - placement: attachment, - modifiers: { - offset: { - offset: this.config.offset - }, - flip: { - behavior: this.config.fallbackPlacement - }, - arrow: { - element: Selector.ARROW - }, - preventOverflow: { - boundariesElement: this.config.boundary - } - }, - onCreate: function onCreate(data) { - if (data.originalPlacement !== data.placement) { - _this._handlePopperPlacementChange(data); - } - }, - onUpdate: function onUpdate(data) { - _this._handlePopperPlacementChange(data); - } - }); - $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - if ('ontouchstart' in document.documentElement) { - $$$1(document.body).children().on('mouseover', null, $$$1.noop); - } - - var complete = function complete() { - if (_this.config.animation) { - _this._fixTransition(); - } - - var prevHoverState = _this._hoverState; - _this._hoverState = null; - $$$1(_this.element).trigger(_this.constructor.Event.SHOWN); - - if (prevHoverState === HoverState.OUT) { - _this._leave(null, _this); - } - }; - - if ($$$1(this.tip).hasClass(ClassName.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(this.tip); - $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - } - }; - - _proto.hide = function hide(callback) { - var _this2 = this; - - var tip = this.getTipElement(); - var hideEvent = $$$1.Event(this.constructor.Event.HIDE); - - var complete = function complete() { - if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { - tip.parentNode.removeChild(tip); - } - - _this2._cleanTipClass(); - - _this2.element.removeAttribute('aria-describedby'); - - $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN); - - if (_this2._popper !== null) { - _this2._popper.destroy(); - } + var callbackRemove = function callbackRemove() { + _this8._removeBackdrop(); if (callback) { callback(); } }; - $$$1(this.element).trigger(hideEvent); + if ($(this._element).hasClass(ClassName$5.FADE)) { + var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - if (hideEvent.isDefaultPrevented()) { - return; - } - - $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - if ('ontouchstart' in document.documentElement) { - $$$1(document.body).children().off('mouseover', null, $$$1.noop); - } - - this._activeTrigger[Trigger.CLICK] = false; - this._activeTrigger[Trigger.FOCUS] = false; - this._activeTrigger[Trigger.HOVER] = false; - - if ($$$1(this.tip).hasClass(ClassName.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(tip); - $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); + $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); } else { - complete(); + callbackRemove(); + } + } else if (callback) { + callback(); + } + } // ---------------------------------------------------------------------- + // the following methods are used to handle overflowing modals + // todo (fat): these should probably be refactored out of modal.js + // ---------------------------------------------------------------------- + ; + + _proto._adjustDialog = function _adjustDialog() { + var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + + if (!this._isBodyOverflowing && isModalOverflowing) { + this._element.style.paddingLeft = this._scrollbarWidth + "px"; + } + + if (this._isBodyOverflowing && !isModalOverflowing) { + this._element.style.paddingRight = this._scrollbarWidth + "px"; + } + }; + + _proto._resetAdjustments = function _resetAdjustments() { + this._element.style.paddingLeft = ''; + this._element.style.paddingRight = ''; + }; + + _proto._checkScrollbar = function _checkScrollbar() { + var rect = document.body.getBoundingClientRect(); + this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; + this._scrollbarWidth = this._getScrollbarWidth(); + }; + + _proto._setScrollbar = function _setScrollbar() { + var _this9 = this; + + if (this._isBodyOverflowing) { + // Note: DOMNode.style.paddingRight returns the actual value or '' if not set + // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set + var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); + var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding + + $(fixedContent).each(function (index, element) { + var actualPadding = element.style.paddingRight; + var calculatedPadding = $(element).css('padding-right'); + $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); + }); // Adjust sticky content margin + + $(stickyContent).each(function (index, element) { + var actualMargin = element.style.marginRight; + var calculatedMargin = $(element).css('margin-right'); + $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); + }); // Adjust body padding + + var actualPadding = document.body.style.paddingRight; + var calculatedPadding = $(document.body).css('padding-right'); + $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); + } + + $(document.body).addClass(ClassName$5.OPEN); + }; + + _proto._resetScrollbar = function _resetScrollbar() { + // Restore fixed content padding + var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); + $(fixedContent).each(function (index, element) { + var padding = $(element).data('padding-right'); + $(element).removeData('padding-right'); + element.style.paddingRight = padding ? padding : ''; + }); // Restore sticky content + + var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT)); + $(elements).each(function (index, element) { + var margin = $(element).data('margin-right'); + + if (typeof margin !== 'undefined') { + $(element).css('margin-right', margin).removeData('margin-right'); + } + }); // Restore body padding + + var padding = $(document.body).data('padding-right'); + $(document.body).removeData('padding-right'); + document.body.style.paddingRight = padding ? padding : ''; + }; + + _proto._getScrollbarWidth = function _getScrollbarWidth() { + // thx d.walsh + var scrollDiv = document.createElement('div'); + scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER; + document.body.appendChild(scrollDiv); + var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + } // Static + ; + + Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { + return this.each(function () { + var data = $(this).data(DATA_KEY$5); + + var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {}); + + if (!data) { + data = new Modal(this, _config); + $(this).data(DATA_KEY$5, data); } - this._hoverState = ''; - }; - - _proto.update = function update() { - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - }; // Protected - - - _proto.isWithContent = function isWithContent() { - return Boolean(this.getTitle()); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $$$1(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var tip = this.getTipElement(); - this.setElementContent($$$1(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle()); - $$$1(tip).removeClass(ClassName.FADE + " " + ClassName.SHOW); - }; - - _proto.setElementContent = function setElementContent($element, content) { - var html = this.config.html; - - if (typeof content === 'object' && (content.nodeType || content.jquery)) { - // Content is a DOM node or a jQuery - if (html) { - if (!$$$1(content).parent().is($element)) { - $element.empty().append(content); - } - } else { - $element.text($$$1(content).text()); - } - } else { - $element[html ? 'html' : 'text'](content); - } - }; - - _proto.getTitle = function getTitle() { - var title = this.element.getAttribute('data-original-title'); - - if (!title) { - title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; - } - - return title; - }; // Private - - - _proto._getAttachment = function _getAttachment(placement) { - return AttachmentMap[placement.toUpperCase()]; - }; - - _proto._setListeners = function _setListeners() { - var _this3 = this; - - var triggers = this.config.trigger.split(' '); - triggers.forEach(function (trigger) { - if (trigger === 'click') { - $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { - return _this3.toggle(event); - }); - } else if (trigger !== Trigger.MANUAL) { - var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; - var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; - $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) { - return _this3._enter(event); - }).on(eventOut, _this3.config.selector, function (event) { - return _this3._leave(event); - }); + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); } - $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () { - return _this3.hide(); - }); - }); - - if (this.config.selector) { - this.config = _objectSpread({}, this.config, { - trigger: 'manual', - selector: '' - }); - } else { - this._fixTitle(); + data[config](relatedTarget); + } else if (_config.show) { + data.show(relatedTarget); } - }; + }); + }; - _proto._fixTitle = function _fixTitle() { - var titleType = typeof this.element.getAttribute('data-original-title'); + _createClass(Modal, null, [{ + key: "VERSION", + get: function get() { + return VERSION$5; + } + }, { + key: "Default", + get: function get() { + return Default$3; + } + }]); - if (this.element.getAttribute('title') || titleType !== 'string') { - this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); - this.element.setAttribute('title', ''); + return Modal; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) { + var _this10 = this; + + var target; + var selector = Util.getSelectorFromElement(this); + + if (selector) { + target = document.querySelector(selector); + } + + var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data()); + + if (this.tagName === 'A' || this.tagName === 'AREA') { + event.preventDefault(); + } + + var $target = $(target).one(Event$5.SHOW, function (showEvent) { + if (showEvent.isDefaultPrevented()) { + // Only register focus restorer if modal will actually get shown + return; + } + + $target.one(Event$5.HIDDEN, function () { + if ($(_this10).is(':visible')) { + _this10.focus(); } - }; + }); + }); - _proto._enter = function _enter(event, context) { + Modal._jQueryInterface.call($(target), config, this); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME$5] = Modal._jQueryInterface; + $.fn[NAME$5].Constructor = Modal; + + $.fn[NAME$5].noConflict = function () { + $.fn[NAME$5] = JQUERY_NO_CONFLICT$5; + return Modal._jQueryInterface; + }; + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): tools/sanitizer.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; + var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; + var DefaultWhitelist = { + // Global attributes allowed on any supplied element below. + '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], + a: ['target', 'href', 'title', 'rel'], + area: [], + b: [], + br: [], + col: [], + code: [], + div: [], + em: [], + hr: [], + h1: [], + h2: [], + h3: [], + h4: [], + h5: [], + h6: [], + i: [], + img: ['src', 'alt', 'title', 'width', 'height'], + li: [], + ol: [], + p: [], + pre: [], + s: [], + small: [], + span: [], + sub: [], + sup: [], + strong: [], + u: [], + ul: [] + /** + * A pattern that recognizes a commonly useful subset of URLs that are safe. + * + * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts + */ + + }; + var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi; + /** + * A pattern that matches safe data URLs. Only matches image, video and audio types. + * + * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts + */ + + var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i; + + function allowedAttribute(attr, allowedAttributeList) { + var attrName = attr.nodeName.toLowerCase(); + + if (allowedAttributeList.indexOf(attrName) !== -1) { + if (uriAttrs.indexOf(attrName) !== -1) { + return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); + } + + return true; + } + + var regExp = allowedAttributeList.filter(function (attrRegex) { + return attrRegex instanceof RegExp; + }); // Check if a regular expression validates the attribute. + + for (var i = 0, l = regExp.length; i < l; i++) { + if (attrName.match(regExp[i])) { + return true; + } + } + + return false; + } + + function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { + if (unsafeHtml.length === 0) { + return unsafeHtml; + } + + if (sanitizeFn && typeof sanitizeFn === 'function') { + return sanitizeFn(unsafeHtml); + } + + var domParser = new window.DOMParser(); + var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); + var whitelistKeys = Object.keys(whiteList); + var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); + + var _loop = function _loop(i, len) { + var el = elements[i]; + var elName = el.nodeName.toLowerCase(); + + if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { + el.parentNode.removeChild(el); + return "continue"; + } + + var attributeList = [].slice.call(el.attributes); + var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); + attributeList.forEach(function (attr) { + if (!allowedAttribute(attr, whitelistedAttributes)) { + el.removeAttribute(attr.nodeName); + } + }); + }; + + for (var i = 0, len = elements.length; i < len; i++) { + var _ret = _loop(i, len); + + if (_ret === "continue") continue; + } + + return createdDocument.body.innerHTML; + } + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME$6 = 'tooltip'; + var VERSION$6 = '4.3.1'; + var DATA_KEY$6 = 'bs.tooltip'; + var EVENT_KEY$6 = "." + DATA_KEY$6; + var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; + var CLASS_PREFIX = 'bs-tooltip'; + var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); + var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; + var DefaultType$4 = { + animation: 'boolean', + template: 'string', + title: '(string|element|function)', + trigger: 'string', + delay: '(number|object)', + html: 'boolean', + selector: '(string|boolean)', + placement: '(string|function)', + offset: '(number|string|function)', + container: '(string|element|boolean)', + fallbackPlacement: '(string|array)', + boundary: '(string|element)', + sanitize: 'boolean', + sanitizeFn: '(null|function)', + whiteList: 'object' + }; + var AttachmentMap$1 = { + AUTO: 'auto', + TOP: 'top', + RIGHT: 'right', + BOTTOM: 'bottom', + LEFT: 'left' + }; + var Default$4 = { + animation: true, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + selector: false, + placement: 'top', + offset: 0, + container: false, + fallbackPlacement: 'flip', + boundary: 'scrollParent', + sanitize: true, + sanitizeFn: null, + whiteList: DefaultWhitelist + }; + var HoverState = { + SHOW: 'show', + OUT: 'out' + }; + var Event$6 = { + HIDE: "hide" + EVENT_KEY$6, + HIDDEN: "hidden" + EVENT_KEY$6, + SHOW: "show" + EVENT_KEY$6, + SHOWN: "shown" + EVENT_KEY$6, + INSERTED: "inserted" + EVENT_KEY$6, + CLICK: "click" + EVENT_KEY$6, + FOCUSIN: "focusin" + EVENT_KEY$6, + FOCUSOUT: "focusout" + EVENT_KEY$6, + MOUSEENTER: "mouseenter" + EVENT_KEY$6, + MOUSELEAVE: "mouseleave" + EVENT_KEY$6 + }; + var ClassName$6 = { + FADE: 'fade', + SHOW: 'show' + }; + var Selector$6 = { + TOOLTIP: '.tooltip', + TOOLTIP_INNER: '.tooltip-inner', + ARROW: '.arrow' + }; + var Trigger = { + HOVER: 'hover', + FOCUS: 'focus', + CLICK: 'click', + MANUAL: 'manual' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Tooltip = + /*#__PURE__*/ + function () { + function Tooltip(element, config) { + /** + * Check for Popper dependency + * Popper - https://popper.js.org + */ + if (typeof Popper === 'undefined') { + throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); + } // private + + + this._isEnabled = true; + this._timeout = 0; + this._hoverState = ''; + this._activeTrigger = {}; + this._popper = null; // Protected + + this.element = element; + this.config = this._getConfig(config); + this.tip = null; + + this._setListeners(); + } // Getters + + + var _proto = Tooltip.prototype; + + // Public + _proto.enable = function enable() { + this._isEnabled = true; + }; + + _proto.disable = function disable() { + this._isEnabled = false; + }; + + _proto.toggleEnabled = function toggleEnabled() { + this._isEnabled = !this._isEnabled; + }; + + _proto.toggle = function toggle(event) { + if (!this._isEnabled) { + return; + } + + if (event) { var dataKey = this.constructor.DATA_KEY; - context = context || $$$1(event.currentTarget).data(dataKey); + var context = $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $$$1(event.currentTarget).data(dataKey, context); + $(event.currentTarget).data(dataKey, context); } - if (event) { - context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; - } - - if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { - context._hoverState = HoverState.SHOW; - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.SHOW; - - if (!context.config.delay || !context.config.delay.show) { - context.show(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.SHOW) { - context.show(); - } - }, context.config.delay.show); - }; - - _proto._leave = function _leave(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $$$1(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $$$1(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; - } + context._activeTrigger.click = !context._activeTrigger.click; if (context._isWithActiveTrigger()) { + context._enter(null, context); + } else { + context._leave(null, context); + } + } else { + if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) { + this._leave(null, this); + return; } - clearTimeout(context._timeout); - context._hoverState = HoverState.OUT; + this._enter(null, this); + } + }; - if (!context.config.delay || !context.config.delay.hide) { - context.hide(); + _proto.dispose = function dispose() { + clearTimeout(this._timeout); + $.removeData(this.element, this.constructor.DATA_KEY); + $(this.element).off(this.constructor.EVENT_KEY); + $(this.element).closest('.modal').off('hide.bs.modal'); + + if (this.tip) { + $(this.tip).remove(); + } + + this._isEnabled = null; + this._timeout = null; + this._hoverState = null; + this._activeTrigger = null; + + if (this._popper !== null) { + this._popper.destroy(); + } + + this._popper = null; + this.element = null; + this.config = null; + this.tip = null; + }; + + _proto.show = function show() { + var _this = this; + + if ($(this.element).css('display') === 'none') { + throw new Error('Please use show on visible elements'); + } + + var showEvent = $.Event(this.constructor.Event.SHOW); + + if (this.isWithContent() && this._isEnabled) { + $(this.element).trigger(showEvent); + var shadowRoot = Util.findShadowRoot(this.element); + var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); + + if (showEvent.isDefaultPrevented() || !isInTheDom) { return; } - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.OUT) { - context.hide(); - } - }, context.config.delay.hide); - }; - - _proto._isWithActiveTrigger = function _isWithActiveTrigger() { - for (var trigger in this._activeTrigger) { - if (this._activeTrigger[trigger]) { - return true; - } - } - - return false; - }; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), typeof config === 'object' && config ? config : {}); - - if (typeof config.delay === 'number') { - config.delay = { - show: config.delay, - hide: config.delay - }; - } - - if (typeof config.title === 'number') { - config.title = config.title.toString(); - } - - if (typeof config.content === 'number') { - config.content = config.content.toString(); - } - - Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); - return config; - }; - - _proto._getDelegateConfig = function _getDelegateConfig() { - var config = {}; - - if (this.config) { - for (var key in this.config) { - if (this.constructor.Default[key] !== this.config[key]) { - config[key] = this.config[key]; - } - } - } - - return config; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $$$1(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); - - if (tabClass !== null && tabClass.length) { - $tip.removeClass(tabClass.join('')); - } - }; - - _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { - var popperInstance = popperData.instance; - this.tip = popperInstance.popper; - - this._cleanTipClass(); - - this.addAttachmentClass(this._getAttachment(popperData.placement)); - }; - - _proto._fixTransition = function _fixTransition() { var tip = this.getTipElement(); - var initConfigAnimation = this.config.animation; + var tipId = Util.getUID(this.constructor.NAME); + tip.setAttribute('id', tipId); + this.element.setAttribute('aria-describedby', tipId); + this.setContent(); - if (tip.getAttribute('x-placement') !== null) { - return; + if (this.config.animation) { + $(tip).addClass(ClassName$6.FADE); } - $$$1(tip).removeClass(ClassName.FADE); - this.config.animation = false; - this.hide(); - this.show(); - this.config.animation = initConfigAnimation; - }; // Static + var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; + var attachment = this._getAttachment(placement); - Tooltip._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); + this.addAttachmentClass(attachment); - var _config = typeof config === 'object' && config; + var container = this._getContainer(); - if (!data && /dispose|hide/.test(config)) { - return; - } + $(tip).data(this.constructor.DATA_KEY, this); - if (!data) { - data = new Tooltip(this, _config); - $$$1(this).data(DATA_KEY, data); - } + if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { + $(tip).appendTo(container); + } - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); + $(this.element).trigger(this.constructor.Event.INSERTED); + this._popper = new Popper(this.element, tip, { + placement: attachment, + modifiers: { + offset: this._getOffset(), + flip: { + behavior: this.config.fallbackPlacement + }, + arrow: { + element: Selector$6.ARROW + }, + preventOverflow: { + boundariesElement: this.config.boundary } - - data[config](); - } - }); - }; - - _createClass(Tooltip, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }, { - key: "NAME", - get: function get() { - return NAME; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY; - } - }, { - key: "Event", - get: function get() { - return Event; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType; - } - }]); - - return Tooltip; - }(); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - - $$$1.fn[NAME] = Tooltip._jQueryInterface; - $$$1.fn[NAME].Constructor = Tooltip; - - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Tooltip._jQueryInterface; - }; - - return Tooltip; - }($, Popper); - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.3): popover.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - - var Popover = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'popover'; - var VERSION = '4.1.3'; - var DATA_KEY = 'bs.popover'; - var EVENT_KEY = "." + DATA_KEY; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var CLASS_PREFIX = 'bs-popover'; - var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - - var Default = _objectSpread({}, Tooltip.Default, { - placement: 'right', - trigger: 'click', - content: '', - template: '' - }); - - var DefaultType = _objectSpread({}, Tooltip.DefaultType, { - content: '(string|element|function)' - }); - - var ClassName = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector = { - TITLE: '.popover-header', - CONTENT: '.popover-body' - }; - var Event = { - HIDE: "hide" + EVENT_KEY, - HIDDEN: "hidden" + EVENT_KEY, - SHOW: "show" + EVENT_KEY, - SHOWN: "shown" + EVENT_KEY, - INSERTED: "inserted" + EVENT_KEY, - CLICK: "click" + EVENT_KEY, - FOCUSIN: "focusin" + EVENT_KEY, - FOCUSOUT: "focusout" + EVENT_KEY, - MOUSEENTER: "mouseenter" + EVENT_KEY, - MOUSELEAVE: "mouseleave" + EVENT_KEY - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Popover = - /*#__PURE__*/ - function (_Tooltip) { - _inheritsLoose(Popover, _Tooltip); - - function Popover() { - return _Tooltip.apply(this, arguments) || this; - } - - var _proto = Popover.prototype; - - // Overrides - _proto.isWithContent = function isWithContent() { - return this.getTitle() || this._getContent(); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $$$1(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events - - this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); - - var content = this._getContent(); - - if (typeof content === 'function') { - content = content.call(this.element); - } - - this.setElementContent($tip.find(Selector.CONTENT), content); - $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); - }; // Private - - - _proto._getContent = function _getContent() { - return this.element.getAttribute('data-content') || this.config.content; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $$$1(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); - - if (tabClass !== null && tabClass.length > 0) { - $tip.removeClass(tabClass.join('')); - } - }; // Static - - - Popover._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); - - var _config = typeof config === 'object' ? config : null; - - if (!data && /destroy|hide/.test(config)) { - return; - } - - if (!data) { - data = new Popover(this, _config); - $$$1(this).data(DATA_KEY, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); + }, + onCreate: function onCreate(data) { + if (data.originalPlacement !== data.placement) { + _this._handlePopperPlacementChange(data); } - - data[config](); + }, + onUpdate: function onUpdate(data) { + return _this._handlePopperPlacementChange(data); } }); - }; + $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra + // empty mouseover listeners to the body's immediate children; + // only needed because of broken event delegation on iOS + // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - _createClass(Popover, null, [{ - key: "VERSION", - // Getters - get: function get() { - return VERSION; + if ('ontouchstart' in document.documentElement) { + $(document.body).children().on('mouseover', null, $.noop); } - }, { - key: "Default", - get: function get() { - return Default; - } - }, { - key: "NAME", - get: function get() { - return NAME; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY; - } - }, { - key: "Event", - get: function get() { - return Event; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType; - } - }]); - - return Popover; - }(Tooltip); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - - $$$1.fn[NAME] = Popover._jQueryInterface; - $$$1.fn[NAME].Constructor = Popover; - - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Popover._jQueryInterface; - }; - - return Popover; - }($); - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.3): scrollspy.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - - var ScrollSpy = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'scrollspy'; - var VERSION = '4.1.3'; - var DATA_KEY = 'bs.scrollspy'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var Default = { - offset: 10, - method: 'auto', - target: '' - }; - var DefaultType = { - offset: 'number', - method: 'string', - target: '(string|element)' - }; - var Event = { - ACTIVATE: "activate" + EVENT_KEY, - SCROLL: "scroll" + EVENT_KEY, - LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - DROPDOWN_ITEM: 'dropdown-item', - DROPDOWN_MENU: 'dropdown-menu', - ACTIVE: 'active' - }; - var Selector = { - DATA_SPY: '[data-spy="scroll"]', - ACTIVE: '.active', - NAV_LIST_GROUP: '.nav, .list-group', - NAV_LINKS: '.nav-link', - NAV_ITEMS: '.nav-item', - LIST_ITEMS: '.list-group-item', - DROPDOWN: '.dropdown', - DROPDOWN_ITEMS: '.dropdown-item', - DROPDOWN_TOGGLE: '.dropdown-toggle' - }; - var OffsetMethod = { - OFFSET: 'offset', - POSITION: 'position' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var ScrollSpy = - /*#__PURE__*/ - function () { - function ScrollSpy(element, config) { - var _this = this; - - this._element = element; - this._scrollElement = element.tagName === 'BODY' ? window : element; - this._config = this._getConfig(config); - this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS); - this._offsets = []; - this._targets = []; - this._activeTarget = null; - this._scrollHeight = 0; - $$$1(this._scrollElement).on(Event.SCROLL, function (event) { - return _this._process(event); - }); - this.refresh(); - - this._process(); - } // Getters - - - var _proto = ScrollSpy.prototype; - - // Public - _proto.refresh = function refresh() { - var _this2 = this; - - var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; - var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; - var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; - this._offsets = []; - this._targets = []; - this._scrollHeight = this._getScrollHeight(); - var targets = [].slice.call(document.querySelectorAll(this._selector)); - targets.map(function (element) { - var target; - var targetSelector = Util.getSelectorFromElement(element); - - if (targetSelector) { - target = document.querySelector(targetSelector); - } - - if (target) { - var targetBCR = target.getBoundingClientRect(); - - if (targetBCR.width || targetBCR.height) { - // TODO (fat): remove sketch reliance on jQuery position/offset - return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector]; - } - } - - return null; - }).filter(function (item) { - return item; - }).sort(function (a, b) { - return a[0] - b[0]; - }).forEach(function (item) { - _this2._offsets.push(item[0]); - - _this2._targets.push(item[1]); - }); - }; - - _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - $$$1(this._scrollElement).off(EVENT_KEY); - this._element = null; - this._scrollElement = null; - this._config = null; - this._selector = null; - this._offsets = null; - this._targets = null; - this._activeTarget = null; - this._scrollHeight = null; - }; // Private - - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {}); - - if (typeof config.target !== 'string') { - var id = $$$1(config.target).attr('id'); - - if (!id) { - id = Util.getUID(NAME); - $$$1(config.target).attr('id', id); - } - - config.target = "#" + id; - } - - Util.typeCheckConfig(NAME, config, DefaultType); - return config; - }; - - _proto._getScrollTop = function _getScrollTop() { - return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; - }; - - _proto._getScrollHeight = function _getScrollHeight() { - return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); - }; - - _proto._getOffsetHeight = function _getOffsetHeight() { - return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; - }; - - _proto._process = function _process() { - var scrollTop = this._getScrollTop() + this._config.offset; - - var scrollHeight = this._getScrollHeight(); - - var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); - - if (this._scrollHeight !== scrollHeight) { - this.refresh(); - } - - if (scrollTop >= maxScroll) { - var target = this._targets[this._targets.length - 1]; - - if (this._activeTarget !== target) { - this._activate(target); - } - - return; - } - - if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { - this._activeTarget = null; - - this._clear(); - - return; - } - - var offsetLength = this._offsets.length; - - for (var i = offsetLength; i--;) { - var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); - - if (isActiveTarget) { - this._activate(this._targets[i]); - } - } - }; - - _proto._activate = function _activate(target) { - this._activeTarget = target; - - this._clear(); - - var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style - - - queries = queries.map(function (selector) { - return selector + "[data-target=\"" + target + "\"]," + (selector + "[href=\"" + target + "\"]"); - }); - var $link = $$$1([].slice.call(document.querySelectorAll(queries.join(',')))); - - if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { - $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); - $link.addClass(ClassName.ACTIVE); - } else { - // Set triggered link as active - $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active - // With both