]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Use maxOverflow as minimum layout padding (#8650)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Tue, 16 Mar 2021 20:32:29 +0000 (22:32 +0200)
committerGitHub <noreply@github.com>
Tue, 16 Mar 2021 20:32:29 +0000 (16:32 -0400)
* Use maxOverflow as minimum layout padding

* fixes

83 files changed:
src/controllers/controller.line.js
src/core/core.controller.js
src/core/core.interaction.js
src/core/core.layouts.js
src/elements/element.point.js
src/helpers/helpers.canvas.js
test/fixtures/controller.line/clip/default-y-max.png
test/fixtures/controller.line/clip/default-y.png
test/fixtures/controller.line/non-numeric-y.png
test/fixtures/controller.line/point-style-offscreen-canvas.png
test/fixtures/controller.line/point-style.png
test/fixtures/controller.line/pointBackgroundColor/indexable.png
test/fixtures/controller.line/pointBackgroundColor/scriptable.png
test/fixtures/controller.line/pointBackgroundColor/value.png
test/fixtures/controller.line/pointBorderColor/indexable.png
test/fixtures/controller.line/pointBorderColor/scriptable.png
test/fixtures/controller.line/pointBorderColor/value.png
test/fixtures/controller.line/pointBorderWidth/indexable.png
test/fixtures/controller.line/pointBorderWidth/scriptable.png
test/fixtures/controller.line/pointBorderWidth/value.png
test/fixtures/controller.line/pointStyle/indexable.png
test/fixtures/controller.line/pointStyle/scriptable.png
test/fixtures/controller.line/pointStyle/value.png
test/fixtures/controller.line/radius/indexable.png
test/fixtures/controller.line/radius/scriptable.png
test/fixtures/controller.line/radius/value.png
test/fixtures/controller.line/rotation/indexable.png
test/fixtures/controller.line/rotation/scriptable.png
test/fixtures/controller.line/rotation/value.png
test/fixtures/controller.line/showLine/false.png
test/fixtures/controller.line/stacking/stacked-scatter.png
test/fixtures/controller.scatter/showLine/true.png
test/fixtures/controller.scatter/showLine/undefined.png
test/fixtures/core.layouts/hidden-vertical-boxes.png
test/fixtures/core.layouts/no-boxes-all-padding.js
test/fixtures/core.layouts/no-boxes-all-padding.png
test/fixtures/core.layouts/refit-vertical-boxes.png
test/fixtures/core.scale/autoSkip/fit-after.png
test/fixtures/core.scale/cartesian-axis-border-settings.png
test/fixtures/core.scale/label-align-end.png
test/fixtures/core.scale/label-align-start.png
test/fixtures/core.scale/x-axis-position-dynamic.png
test/fixtures/element.line/default.png
test/fixtures/element.line/skip/first-span.png
test/fixtures/element.line/skip/first.png
test/fixtures/element.line/skip/last-span.png
test/fixtures/element.line/skip/last.png
test/fixtures/element.line/stepped/after.png
test/fixtures/element.line/stepped/before.png
test/fixtures/element.line/stepped/default.png
test/fixtures/element.line/stepped/middle.png
test/fixtures/element.line/tension/default.png
test/fixtures/element.line/tension/one.png
test/fixtures/element.line/tension/zero.png
test/fixtures/plugin.filler/fill-line-dataset-interpolated.png
test/fixtures/plugin.tooltip/positioning.js
test/fixtures/plugin.tooltip/positioning.png
test/fixtures/scale.time/autoskip-major.png
test/fixtures/scale.time/custom-parser.png
test/fixtures/scale.time/data-ty.png
test/fixtures/scale.time/data-xy.png
test/fixtures/scale.time/negative-times.png
test/fixtures/scale.time/source-auto-linear.png
test/fixtures/scale.time/source-data-linear.png
test/fixtures/scale.time/source-labels-linear-offset-min-max.png
test/fixtures/scale.time/source-labels-linear.png
test/fixtures/scale.time/ticks-reverse-linear-min-max.png
test/fixtures/scale.time/ticks-reverse-linear.png
test/fixtures/scale.time/ticks-reverse-offset.png
test/fixtures/scale.time/ticks-reverse.png
test/fixtures/scale.timeseries/normalize.png
test/fixtures/scale.timeseries/source-auto.png
test/fixtures/scale.timeseries/source-data-offset-min-max.png
test/fixtures/scale.timeseries/source-data.png
test/fixtures/scale.timeseries/source-labels-offset-min-max.png
test/fixtures/scale.timeseries/source-labels.png
test/fixtures/scale.timeseries/ticks-reverse-max.png
test/fixtures/scale.timeseries/ticks-reverse-min-max.png
test/fixtures/scale.timeseries/ticks-reverse-min.png
test/fixtures/scale.timeseries/ticks-reverse.png
test/specs/controller.bar.tests.js
test/specs/controller.line.tests.js
test/specs/core.controller.tests.js

index 82b8894dd34d3b28400c186cef87a06a48bee27d..04670d151475fa15cb296705e81a8678efbe8f6a 100644 (file)
@@ -86,13 +86,14 @@ export default class LineController extends DatasetController {
   getMaxOverflow() {
     const me = this;
     const meta = me._cachedMeta;
-    const border = meta.dataset.options.borderWidth || 0;
+    const dataset = meta.dataset;
+    const border = dataset.options && dataset.options.borderWidth || 0;
     const data = meta.data || [];
     if (!data.length) {
       return border;
     }
-    const firstPoint = data[0].size();
-    const lastPoint = data[data.length - 1].size();
+    const firstPoint = data[0].size(me.resolveDataElementOptions(0));
+    const lastPoint = data[data.length - 1].size(me.resolveDataElementOptions(data.length - 1));
     return Math.max(border, firstPoint, lastPoint) / 2;
   }
 
index cf2c195b7914b30dfbce1ac8cb75d393a322df6d..ded583f079685071651d5361c02dee8a401b6cec 100644 (file)
@@ -474,15 +474,17 @@ class Chart {
     me.notifyPlugins('beforeElementsUpdate');
 
     // Make sure all dataset controllers have correct meta data counts
+    let minPadding = 0;
     for (let i = 0, ilen = me.data.datasets.length; i < ilen; i++) {
       const {controller} = me.getDatasetMeta(i);
       const reset = !animsDisabled && newControllers.indexOf(controller) === -1;
       // New controllers will be reset after the layout pass, so we only want to modify
       // elements added to new datasets
       controller.buildOrUpdateElements(reset);
+      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);
     }
-
-    me._updateLayout();
+    me._minPadding = minPadding;
+    me._updateLayout(minPadding);
 
     // Only reset the controllers if we have animations
     if (!animsDisabled) {
@@ -513,14 +515,14 @@ class Chart {
         * hook, in which case, plugins will not be called on `afterLayout`.
         * @private
         */
-  _updateLayout() {
+  _updateLayout(minPadding) {
     const me = this;
 
     if (me.notifyPlugins('beforeLayout', {cancelable: true}) === false) {
       return;
     }
 
-    layouts.update(me, me.width, me.height);
+    layouts.update(me, me.width, me.height, minPadding);
 
     const area = me.chartArea;
     const noArea = area.width <= 0 || area.height <= 0;
@@ -1087,7 +1089,7 @@ class Chart {
     callCallback(options.onHover || hoverOptions.onHover, [e, active, me], me);
 
     if (e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu') {
-      if (_isPointInArea(e, me.chartArea)) {
+      if (_isPointInArea(e, me.chartArea, me._minPadding)) {
         callCallback(options.onClick, [e, active, me], me);
       }
     }
index 10db9f487de90542882c279f47e75327ededc8f7..b96764923852dbf646c43863127b3a44a49f72d7 100644 (file)
@@ -128,7 +128,7 @@ function getDistanceMetricForAxis(axis) {
 function getIntersectItems(chart, position, axis, useFinalPosition) {
   const items = [];
 
-  if (!_isPointInArea(position, chart.chartArea)) {
+  if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {
     return items;
   }
 
@@ -156,7 +156,7 @@ function getNearestItems(chart, position, axis, intersect, useFinalPosition) {
   let minDistance = Number.POSITIVE_INFINITY;
   let items = [];
 
-  if (!_isPointInArea(position, chart.chartArea)) {
+  if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {
     return items;
   }
 
index eba4250d789c3f88ff2177c70e3b66d0e538c3be..006521251e5242f99c2a5db38e4049203b438ce7 100644 (file)
@@ -306,8 +306,9 @@ export default {
         * @param {Chart} chart - the chart
         * @param {number} width - the width to fit into
         * @param {number} height - the height to fit into
+   * @param {number} minPadding - minimum padding required for each side of chart area
         */
-  update(chart, width, height) {
+  update(chart, width, height, minPadding) {
     if (!chart) {
       return;
     }
@@ -366,8 +367,10 @@ export default {
       vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,
       hBoxMaxHeight: availableHeight / 2
     });
+    const maxPadding = Object.assign({}, padding);
+    updateMaxPadding(maxPadding, toPadding(minPadding));
     const chartArea = Object.assign({
-      maxPadding: Object.assign({}, padding),
+      maxPadding,
       w: availableWidth,
       h: availableHeight,
       x: padding.left,
index 30932624ef4dace9a291a55ea170f168bd601d27..2d34d1b740ee982a8939c007e31333d53ba5f4c9 100644 (file)
@@ -41,9 +41,10 @@ export default class PointElement extends Element {
     return {x, y};
   }
 
-  size() {
-    const options = this.options || {};
-    const radius = Math.max(options.radius, options.hoverRadius) || 0;
+  size(options) {
+    options = options || this.options || {};
+    let radius = options.radius || 0;
+    radius = Math.max(radius, radius && options.hoverRadius || 0);
     const borderWidth = radius && options.borderWidth || 0;
     return (radius + borderWidth) * 2;
   }
index 158f8af2d3a3a69ea388e8dfe487918f1f97e741..e3344e6dd413c1edc8455064b7ec6cdef7f288a9 100644 (file)
@@ -244,14 +244,15 @@ export function drawPoint(ctx, options, x, y) {
  * Returns true if the point is inside the rectangle
  * @param {object} point - The point to test
  * @param {object} area - The rectangle
+ * @param {number} [margin] - allowed margin
  * @returns {boolean}
  * @private
  */
-export function _isPointInArea(point, area) {
-  const epsilon = 0.5; // margin - to match rounded decimals
+export function _isPointInArea(point, area, margin) {
+  margin = margin || 0.5; // margin - default is to match rounded decimals
 
-  return point.x > area.left - epsilon && point.x < area.right + epsilon &&
-               point.y > area.top - epsilon && point.y < area.bottom + epsilon;
+  return point.x > area.left - margin && point.x < area.right + margin &&
+               point.y > area.top - margin && point.y < area.bottom + margin;
 }
 
 export function clipArea(ctx, area) {
index be188dec95e62997f632c3feccd4d519da24bfe2..cb41b2e71f9e22cf0527b59f2834e364270efc09 100644 (file)
Binary files a/test/fixtures/controller.line/clip/default-y-max.png and b/test/fixtures/controller.line/clip/default-y-max.png differ
index 2def4c523d82f870443aca5caa1968dd09f34f5b..745b998707447195e2b5b8ecd57804df3e2ced17 100644 (file)
Binary files a/test/fixtures/controller.line/clip/default-y.png and b/test/fixtures/controller.line/clip/default-y.png differ
index 856197ab7bb0bfc4c507d58cf496b0347b86db83..33b21168bfe4f5e1aa5361056743cb6dd5d52ae5 100644 (file)
Binary files a/test/fixtures/controller.line/non-numeric-y.png and b/test/fixtures/controller.line/non-numeric-y.png differ
index 8faa96e4ab2ab05f2d328e4cc35ec19f5d542c7c..47b1d29fe5c6388c98d5ddd0e7fbbb88bf320abd 100644 (file)
Binary files a/test/fixtures/controller.line/point-style-offscreen-canvas.png and b/test/fixtures/controller.line/point-style-offscreen-canvas.png differ
index 8faa96e4ab2ab05f2d328e4cc35ec19f5d542c7c..47b1d29fe5c6388c98d5ddd0e7fbbb88bf320abd 100644 (file)
Binary files a/test/fixtures/controller.line/point-style.png and b/test/fixtures/controller.line/point-style.png differ
index d4157964479b9d3ed8cc0270d0627e2a201969a0..7757776ea5442111946c1de34d23240b7a9d2573 100644 (file)
Binary files a/test/fixtures/controller.line/pointBackgroundColor/indexable.png and b/test/fixtures/controller.line/pointBackgroundColor/indexable.png differ
index c366b6cfadfc7c83395b015d927cb639a60068b0..990540d6c636cdf9b5bde2fba834ed18355e59a7 100644 (file)
Binary files a/test/fixtures/controller.line/pointBackgroundColor/scriptable.png and b/test/fixtures/controller.line/pointBackgroundColor/scriptable.png differ
index 88c75c897713c03ce56bc4f44390333af3c5f21e..d16d591cbf8d28ee4a008cb7277cabfb15cf2a38 100644 (file)
Binary files a/test/fixtures/controller.line/pointBackgroundColor/value.png and b/test/fixtures/controller.line/pointBackgroundColor/value.png differ
index c50bdf045357a655529f3bf4710c6977658a78ef..707fe6062ed1ceaff02ec63f36a842d4ed3038df 100644 (file)
Binary files a/test/fixtures/controller.line/pointBorderColor/indexable.png and b/test/fixtures/controller.line/pointBorderColor/indexable.png differ
index 6366828ecfc5316b9953dff892bf64e15fbcb224..ce409a3b49de1c44bff225897d472b1177989eaa 100644 (file)
Binary files a/test/fixtures/controller.line/pointBorderColor/scriptable.png and b/test/fixtures/controller.line/pointBorderColor/scriptable.png differ
index 6bfde92f541608c606a5ea1b4988de691a6827e3..760d4ca369493a1afd6732aa447daa4fd61f09ac 100644 (file)
Binary files a/test/fixtures/controller.line/pointBorderColor/value.png and b/test/fixtures/controller.line/pointBorderColor/value.png differ
index b38c1b6b94d112701deb4d8f59d5010455bc0ae2..12a342cd3155c494c4898616b8679096a538580c 100644 (file)
Binary files a/test/fixtures/controller.line/pointBorderWidth/indexable.png and b/test/fixtures/controller.line/pointBorderWidth/indexable.png differ
index 7bb6b1b3c779607db82bf4d1a8825986a0c64559..19c9a5035ab9909ca960a828a3902c07ec56389a 100644 (file)
Binary files a/test/fixtures/controller.line/pointBorderWidth/scriptable.png and b/test/fixtures/controller.line/pointBorderWidth/scriptable.png differ
index 0b8f38c1d62bd16f190a519710df3009cc801d0d..8c051e611d89513e26a438782941f40238649425 100644 (file)
Binary files a/test/fixtures/controller.line/pointBorderWidth/value.png and b/test/fixtures/controller.line/pointBorderWidth/value.png differ
index 9534602ab2d480bba84eec3648773715d5522a18..184aaf56c34a3f7f3a0859e587dfcf57b9bf7d52 100644 (file)
Binary files a/test/fixtures/controller.line/pointStyle/indexable.png and b/test/fixtures/controller.line/pointStyle/indexable.png differ
index 970439ee7855f6b2b331801bceb7b733de3c6745..9caac5b96e9438d1325922be4acb5447b2f5c622 100644 (file)
Binary files a/test/fixtures/controller.line/pointStyle/scriptable.png and b/test/fixtures/controller.line/pointStyle/scriptable.png differ
index c8c488166a4f8951f474d8932ad9b9c892acc034..ccdc6437ebc48162ea14fb53167c8afe17a6e805 100644 (file)
Binary files a/test/fixtures/controller.line/pointStyle/value.png and b/test/fixtures/controller.line/pointStyle/value.png differ
index 6de4062614dbd5059e1252f7a9cbd9327be70286..f1b035faf1cc6de2134a9548fd687878ccb3c366 100644 (file)
Binary files a/test/fixtures/controller.line/radius/indexable.png and b/test/fixtures/controller.line/radius/indexable.png differ
index 4ee9c9f1f99fcd3450d77f29c238a7f883dd4ad5..c162a9bfacd3f7a43184c845fe6b16c970f39e91 100644 (file)
Binary files a/test/fixtures/controller.line/radius/scriptable.png and b/test/fixtures/controller.line/radius/scriptable.png differ
index 3ad5310d8fc5fd976dcb15e7cc68f2303092da72..4b235bcd94428309667ae6ec151d9b7814793835 100644 (file)
Binary files a/test/fixtures/controller.line/radius/value.png and b/test/fixtures/controller.line/radius/value.png differ
index e6c71897a6a1b2387cd186756eeeb715d8daef52..66e080d908d8949e1b11c8328960392ed5c08e84 100644 (file)
Binary files a/test/fixtures/controller.line/rotation/indexable.png and b/test/fixtures/controller.line/rotation/indexable.png differ
index 29571fad7d6af5310c4cb72f617d9dca69be96c1..4bc6c674a1c8dcaf03b9236bbe32bac313a0ff73 100644 (file)
Binary files a/test/fixtures/controller.line/rotation/scriptable.png and b/test/fixtures/controller.line/rotation/scriptable.png differ
index 3c1f82d6f9305930b44cbd0e7d78f70e6dbeb7ab..8423874d8d4549652627587706e80285c1f40279 100644 (file)
Binary files a/test/fixtures/controller.line/rotation/value.png and b/test/fixtures/controller.line/rotation/value.png differ
index 2d2ac9a3ac7d30d765133a784b1f7852e18ef49b..3d920d71ec3842bd34f78fc9e4aec067fe95f53a 100644 (file)
Binary files a/test/fixtures/controller.line/showLine/false.png and b/test/fixtures/controller.line/showLine/false.png differ
index c7f8dd7f044f0709911b1b4d7c528d62eb104454..3cb6ce32dbf8df8d0b359d052e76c6386d9b31ed 100644 (file)
Binary files a/test/fixtures/controller.line/stacking/stacked-scatter.png and b/test/fixtures/controller.line/stacking/stacked-scatter.png differ
index 78bd3ac4f034092cb5f34e6207c6d7f096b0dccd..21ff96d8c07b9dbc96d251e076a14a8de59ca4fd 100644 (file)
Binary files a/test/fixtures/controller.scatter/showLine/true.png and b/test/fixtures/controller.scatter/showLine/true.png differ
index 4e01c86f4168e927d69e5720c775262b445b65d6..4297f50e3949137be15d32d3c1b460e53d8f6cbf 100644 (file)
Binary files a/test/fixtures/controller.scatter/showLine/undefined.png and b/test/fixtures/controller.scatter/showLine/undefined.png differ
index 5746067d33c48166161e6866e592b5dcc568808d..3142b96f39632464a066523c9a9eae5d5446d118 100644 (file)
Binary files a/test/fixtures/core.layouts/hidden-vertical-boxes.png and b/test/fixtures/core.layouts/hidden-vertical-boxes.png differ
index ae8500851befc1eff340f5e4e1b62f3b7a35adfe..b50d67210d120c9ea2a58a138756ed649f7c23dd 100644 (file)
@@ -6,6 +6,7 @@ module.exports = {
       datasets: [{
         data: [0],
         radius: 16,
+        borderWidth: 0,
         backgroundColor: 'red'
       }],
     },
index 6bade811f6d75d98a1af9dfb2972314406220838..0e0eefef1579d42981d1c1b2b57fbdd7804e5e99 100644 (file)
Binary files a/test/fixtures/core.layouts/no-boxes-all-padding.png and b/test/fixtures/core.layouts/no-boxes-all-padding.png differ
index 045f73b4c8ba3066c1b228eae587ae55013d57c5..e18af5ca6653f90d0ad0d827fef1dc49285a0c03 100644 (file)
Binary files a/test/fixtures/core.layouts/refit-vertical-boxes.png and b/test/fixtures/core.layouts/refit-vertical-boxes.png differ
index 78bf463b7ab1b334f9fc69746b7d219533737dfb..cfc1b7a42a569a334683e4cb3965048721fa42c1 100644 (file)
Binary files a/test/fixtures/core.scale/autoSkip/fit-after.png and b/test/fixtures/core.scale/autoSkip/fit-after.png differ
index 390096f5cfa9248e7726fa89ae5d7a9aa9de937a..a36dd25354226699c8b3657ac09731c7b780badb 100644 (file)
Binary files a/test/fixtures/core.scale/cartesian-axis-border-settings.png and b/test/fixtures/core.scale/cartesian-axis-border-settings.png differ
index 13d72d25d35fd0ff3c07c83f6194e609c121b72e..8581fc922c6cccf2afd90bafb86b540594605188 100644 (file)
Binary files a/test/fixtures/core.scale/label-align-end.png and b/test/fixtures/core.scale/label-align-end.png differ
index ad7c280f4d54db7fd6d228067ca4f9fe21c9ef36..13098ae904f449999bff195708b15c87643ee17c 100644 (file)
Binary files a/test/fixtures/core.scale/label-align-start.png and b/test/fixtures/core.scale/label-align-start.png differ
index 856730964553ee02e3a8d6030630180b11dc413d..cfee585b6ca08f19252adc8614104522323a7564 100644 (file)
Binary files a/test/fixtures/core.scale/x-axis-position-dynamic.png and b/test/fixtures/core.scale/x-axis-position-dynamic.png differ
index adf64009b170b576c3202a9ee87c607cf2dc5165..714ee8683268199cab8979a598dfff3ea9424347 100644 (file)
Binary files a/test/fixtures/element.line/default.png and b/test/fixtures/element.line/default.png differ
index 1c2d454cac065cf2fdf3f3e0cff60f576c9de3f1..8d8b5c43cb7d4f4a3a9849b4709454a56a10f89c 100644 (file)
Binary files a/test/fixtures/element.line/skip/first-span.png and b/test/fixtures/element.line/skip/first-span.png differ
index 1c2d454cac065cf2fdf3f3e0cff60f576c9de3f1..8d8b5c43cb7d4f4a3a9849b4709454a56a10f89c 100644 (file)
Binary files a/test/fixtures/element.line/skip/first.png and b/test/fixtures/element.line/skip/first.png differ
index 23990d1efe0fe03e5dda963f0c85c6857a472423..172fe4eeea370042c0b362dc56d578fb1b671118 100644 (file)
Binary files a/test/fixtures/element.line/skip/last-span.png and b/test/fixtures/element.line/skip/last-span.png differ
index 23990d1efe0fe03e5dda963f0c85c6857a472423..172fe4eeea370042c0b362dc56d578fb1b671118 100644 (file)
Binary files a/test/fixtures/element.line/skip/last.png and b/test/fixtures/element.line/skip/last.png differ
index 1fda475d1262e5d3273f956ce4dc1cb65300708e..9c546bf2f4d57e0dbfdd6bda6055b1f68d58d053 100644 (file)
Binary files a/test/fixtures/element.line/stepped/after.png and b/test/fixtures/element.line/stepped/after.png differ
index d7e464072a42a82d3bf2971ad676f25595174046..ca84977548f1144a833113c0e6d54054e7e08034 100644 (file)
Binary files a/test/fixtures/element.line/stepped/before.png and b/test/fixtures/element.line/stepped/before.png differ
index d7e464072a42a82d3bf2971ad676f25595174046..ca84977548f1144a833113c0e6d54054e7e08034 100644 (file)
Binary files a/test/fixtures/element.line/stepped/default.png and b/test/fixtures/element.line/stepped/default.png differ
index d605617023fbbf9c1f3fc5ba630166b0e421362d..e1f8adfeba04a36836bc8741457163d2a480ca4a 100644 (file)
Binary files a/test/fixtures/element.line/stepped/middle.png and b/test/fixtures/element.line/stepped/middle.png differ
index 1b1515894f469324e1e273a9cd73b1b724739fa2..3131b7694ec90b6f15ffc387634cb12b7eee08dc 100644 (file)
Binary files a/test/fixtures/element.line/tension/default.png and b/test/fixtures/element.line/tension/default.png differ
index d1773c5f46e7aa048c830e4d2cd15e387836243e..c01085a7a0e91d98be5b04258ff8b7e7c0cb34c1 100644 (file)
Binary files a/test/fixtures/element.line/tension/one.png and b/test/fixtures/element.line/tension/one.png differ
index 1b1515894f469324e1e273a9cd73b1b724739fa2..3131b7694ec90b6f15ffc387634cb12b7eee08dc 100644 (file)
Binary files a/test/fixtures/element.line/tension/zero.png and b/test/fixtures/element.line/tension/zero.png differ
index fab42a40710b7960d0bb457661800e42cf23b7b0..f99a3f2ceabbfff45ff71eb8eda505cc698c1073 100644 (file)
Binary files a/test/fixtures/plugin.filler/fill-line-dataset-interpolated.png and b/test/fixtures/plugin.filler/fill-line-dataset-interpolated.png differ
index c30ff3e82c5c24d07b3d9df249f8052858aed58a..494bada5fceabd26b5eac052a9170a1a93812df8 100644 (file)
@@ -12,7 +12,8 @@ module.exports = {
       datasets: [{
         data,
         backgroundColor: 'red',
-        radius: 8
+        radius: 1,
+        hoverRadius: 0
       }],
     },
     options: {
index da095f7e7fcb4434cc171971e3329960dade5915..40d27568bf3402fd516241b4a408d76f7298c0e0 100644 (file)
Binary files a/test/fixtures/plugin.tooltip/positioning.png and b/test/fixtures/plugin.tooltip/positioning.png differ
index 3014277a8b4543d7226ee7256206430b2b85c407..6888ad6367e06607cf21bc692e92ac148fa03db2 100644 (file)
Binary files a/test/fixtures/scale.time/autoskip-major.png and b/test/fixtures/scale.time/autoskip-major.png differ
index 710178b186212acf67dcc4f299cc9f9f13dddb01..4c41f5ad0a23bc5c5d4852f10aa9bdc2f02e551f 100644 (file)
Binary files a/test/fixtures/scale.time/custom-parser.png and b/test/fixtures/scale.time/custom-parser.png differ
index acb6dd5a44ab69b375fde322e58326af844febff..db373eb14483162b03b390e39e81d907dafaa960 100644 (file)
Binary files a/test/fixtures/scale.time/data-ty.png and b/test/fixtures/scale.time/data-ty.png differ
index acb6dd5a44ab69b375fde322e58326af844febff..db373eb14483162b03b390e39e81d907dafaa960 100644 (file)
Binary files a/test/fixtures/scale.time/data-xy.png and b/test/fixtures/scale.time/data-xy.png differ
index e655a234d5e3a6450c0640e2def0c7ef769df51a..7f0a88149d78a561b214e34c61de97ded95e2dad 100644 (file)
Binary files a/test/fixtures/scale.time/negative-times.png and b/test/fixtures/scale.time/negative-times.png differ
index bedfde067f3d65c04047dc46939e3326f41b3351..004842c4628c5ce92215218dabe3d8da002d18ac 100644 (file)
Binary files a/test/fixtures/scale.time/source-auto-linear.png and b/test/fixtures/scale.time/source-auto-linear.png differ
index a86d1954fcca9a6027e2dbfc17ba61dd7e6c138c..bfff4d84647c26dd49ede92b3f4752cb116236f6 100644 (file)
Binary files a/test/fixtures/scale.time/source-data-linear.png and b/test/fixtures/scale.time/source-data-linear.png differ
index 29fae000ff0acf3fa477a233355b4bad724d9d3b..3d7ed5d5de347c229f34ecfa9efedffdb0217dcb 100644 (file)
Binary files a/test/fixtures/scale.time/source-labels-linear-offset-min-max.png and b/test/fixtures/scale.time/source-labels-linear-offset-min-max.png differ
index a86d1954fcca9a6027e2dbfc17ba61dd7e6c138c..bfff4d84647c26dd49ede92b3f4752cb116236f6 100644 (file)
Binary files a/test/fixtures/scale.time/source-labels-linear.png and b/test/fixtures/scale.time/source-labels-linear.png differ
index dbdfa5ed0a5a75a2f9b78d9c84e9dfe8fed6a177..5638c06dfd961a36110dcaeb3fc39d9978592440 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-reverse-linear-min-max.png and b/test/fixtures/scale.time/ticks-reverse-linear-min-max.png differ
index b229b7785286fa3e50475438917f2a2b98297b30..10c62a2f9dfb04ed246163e60e4d0c931bf531ab 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-reverse-linear.png and b/test/fixtures/scale.time/ticks-reverse-linear.png differ
index 7889c1bcce2bd0abc6ff37ff7799a97fa767b12c..4744479f4748660ce6304a9734f15b616d538545 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-reverse-offset.png and b/test/fixtures/scale.time/ticks-reverse-offset.png differ
index ee07e8e74cfc7c06774ee176cc89fb3ff43ecbfe..383e5eec114b3a55f953fb39aaef62fa9b1be468 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-reverse.png and b/test/fixtures/scale.time/ticks-reverse.png differ
index 22077797be6727ab24da957c101da77b33e0b7a3..37d90a43fab03a1e2ac423c030755ea044f6fa2d 100644 (file)
Binary files a/test/fixtures/scale.timeseries/normalize.png and b/test/fixtures/scale.timeseries/normalize.png differ
index f9ee22d3ba4d5714b2ff60089877ad65c58b6689..c1a9facf675f277115c5eebb2b1a87570a5a5391 100644 (file)
Binary files a/test/fixtures/scale.timeseries/source-auto.png and b/test/fixtures/scale.timeseries/source-auto.png differ
index 50c26b7b041f01a9dabf3aa0a7701aaa5ea20c4d..35c9509047882a7c57c32cd7392e13db3eac56fa 100644 (file)
Binary files a/test/fixtures/scale.timeseries/source-data-offset-min-max.png and b/test/fixtures/scale.timeseries/source-data-offset-min-max.png differ
index b03f6c67c1ffd883b8c2786c9f2c8d8292495b58..f1f8665fd4a1a8f6dd2a6f2ebe5c86d014549777 100644 (file)
Binary files a/test/fixtures/scale.timeseries/source-data.png and b/test/fixtures/scale.timeseries/source-data.png differ
index 50c26b7b041f01a9dabf3aa0a7701aaa5ea20c4d..35c9509047882a7c57c32cd7392e13db3eac56fa 100644 (file)
Binary files a/test/fixtures/scale.timeseries/source-labels-offset-min-max.png and b/test/fixtures/scale.timeseries/source-labels-offset-min-max.png differ
index b03f6c67c1ffd883b8c2786c9f2c8d8292495b58..f1f8665fd4a1a8f6dd2a6f2ebe5c86d014549777 100644 (file)
Binary files a/test/fixtures/scale.timeseries/source-labels.png and b/test/fixtures/scale.timeseries/source-labels.png differ
index 342559558ae203d9663f2b40605d4bfdfcb78355..6ba3fabb45fa6506ca94968639b475486b3eb775 100644 (file)
Binary files a/test/fixtures/scale.timeseries/ticks-reverse-max.png and b/test/fixtures/scale.timeseries/ticks-reverse-max.png differ
index ff993eca6bafe418dd9d57d5118db8acc96bd572..490c68dda26a1ca46af93cc17f2d6fb576550def 100644 (file)
Binary files a/test/fixtures/scale.timeseries/ticks-reverse-min-max.png and b/test/fixtures/scale.timeseries/ticks-reverse-min-max.png differ
index f044b6fc193b7f22e21a5d256d57ec3ef78d58cf..340557d4baf0fa6f61d662e16cc3784f2af9b5b2 100644 (file)
Binary files a/test/fixtures/scale.timeseries/ticks-reverse-min.png and b/test/fixtures/scale.timeseries/ticks-reverse-min.png differ
index 8b673965b7e8ac9096167514baf03387a2715555..5de56dcd1a4dcb0cd3f890229db75e7d9b166e8c 100644 (file)
Binary files a/test/fixtures/scale.timeseries/ticks-reverse.png and b/test/fixtures/scale.timeseries/ticks-reverse.png differ
index 6be8eb1ede7c53277a790e58f83dceecaef895fc..f9decfe4f6fb73efdb99da1dbb34c77c12c7d78c 100644 (file)
@@ -691,9 +691,9 @@ describe('Chart.controllers.bar', function() {
     var bar2 = meta.data[1];
 
     expect(bar1.x).toBeCloseToPixel(179);
-    expect(bar1.y).toBeCloseToPixel(114);
-    expect(bar2.x).toBeCloseToPixel(435);
-    expect(bar2.y).toBeCloseToPixel(0);
+    expect(bar1.y).toBeCloseToPixel(117);
+    expect(bar2.x).toBeCloseToPixel(431);
+    expect(bar2.y).toBeCloseToPixel(4);
   });
 
   it('should get the bar points for hidden dataset', function() {
index 9878eca185ea00fd45414cba622f37aa8ed91d61..df0d7a14f73782157d7525b0cca5930c144fc7c2 100644 (file)
@@ -142,8 +142,8 @@ describe('Chart.controllers.line', function() {
     expect(meta._parsed.length).toBe(2);
 
     [
-      {x: 0, y: 512},
-      {x: 171, y: 0}
+      {x: 5, y: 507},
+      {x: 171, y: 5}
     ].forEach(function(expected, i) {
       expect(meta.data[i].x).toBeCloseToPixel(expected.x);
       expect(meta.data[i].y).toBeCloseToPixel(expected.y);
@@ -192,7 +192,7 @@ describe('Chart.controllers.line', function() {
     var meta = chart.getDatasetMeta(0);
     // 1 point
     var point = meta.data[0];
-    expect(point.x).toBeCloseToPixel(0);
+    expect(point.x).toBeCloseToPixel(5);
 
     // 2 points
     chart.data.labels = ['One', 'Two'];
@@ -201,8 +201,8 @@ describe('Chart.controllers.line', function() {
 
     var points = meta.data;
 
-    expect(points[0].x).toBeCloseToPixel(0);
-    expect(points[1].x).toBeCloseToPixel(512);
+    expect(points[0].x).toBeCloseToPixel(5);
+    expect(points[1].x).toBeCloseToPixel(507);
 
     // 3 points
     chart.data.labels = ['One', 'Two', 'Three'];
@@ -211,9 +211,9 @@ describe('Chart.controllers.line', function() {
 
     points = meta.data;
 
-    expect(points[0].x).toBeCloseToPixel(0);
+    expect(points[0].x).toBeCloseToPixel(5);
     expect(points[1].x).toBeCloseToPixel(256);
-    expect(points[2].x).toBeCloseToPixel(512);
+    expect(points[2].x).toBeCloseToPixel(507);
 
     // 4 points
     chart.data.labels = ['One', 'Two', 'Three', 'Four'];
@@ -222,10 +222,10 @@ describe('Chart.controllers.line', function() {
 
     points = meta.data;
 
-    expect(points[0].x).toBeCloseToPixel(0);
+    expect(points[0].x).toBeCloseToPixel(5);
     expect(points[1].x).toBeCloseToPixel(171);
     expect(points[2].x).toBeCloseToPixel(340);
-    expect(points[3].x).toBeCloseToPixel(512);
+    expect(points[3].x).toBeCloseToPixel(507);
   });
 
   it('should update elements when the y scale is stacked', function() {
@@ -261,10 +261,10 @@ describe('Chart.controllers.line', function() {
     var meta0 = chart.getDatasetMeta(0);
 
     [
-      {x: 0, y: 146},
-      {x: 171, y: 439},
-      {x: 341, y: 146},
-      {x: 512, y: 439}
+      {x: 5, y: 148},
+      {x: 171, y: 435},
+      {x: 341, y: 148},
+      {x: 507, y: 435}
     ].forEach(function(values, i) {
       expect(meta0.data[i].x).toBeCloseToPixel(values.x);
       expect(meta0.data[i].y).toBeCloseToPixel(values.y);
@@ -273,10 +273,10 @@ describe('Chart.controllers.line', function() {
     var meta1 = chart.getDatasetMeta(1);
 
     [
-      {x: 0, y: 0},
-      {x: 171, y: 73},
-      {x: 341, y: 146},
-      {x: 512, y: 497}
+      {x: 5, y: 5},
+      {x: 171, y: 76},
+      {x: 341, y: 148},
+      {x: 507, y: 492}
     ].forEach(function(values, i) {
       expect(meta1.data[i].x).toBeCloseToPixel(values.x);
       expect(meta1.data[i].y).toBeCloseToPixel(values.y);
@@ -326,10 +326,10 @@ describe('Chart.controllers.line', function() {
     var meta0 = chart.getDatasetMeta(0);
 
     [
-      {x: 0, y: 146},
-      {x: 171, y: 439},
-      {x: 341, y: 146},
-      {x: 512, y: 439}
+      {x: 5, y: 148},
+      {x: 171, y: 435},
+      {x: 341, y: 148},
+      {x: 507, y: 435}
     ].forEach(function(values, i) {
       expect(meta0.data[i].x).toBeCloseToPixel(values.x);
       expect(meta0.data[i].y).toBeCloseToPixel(values.y);
@@ -338,10 +338,10 @@ describe('Chart.controllers.line', function() {
     var meta1 = chart.getDatasetMeta(1);
 
     [
-      {x: 0, y: 0},
-      {x: 171, y: 73},
-      {x: 341, y: 146},
-      {x: 512, y: 497}
+      {x: 5, y: 5},
+      {x: 171, y: 76},
+      {x: 341, y: 148},
+      {x: 507, y: 492}
     ].forEach(function(values, i) {
       expect(meta1.data[i].x).toBeCloseToPixel(values.x);
       expect(meta1.data[i].y).toBeCloseToPixel(values.y);
@@ -406,10 +406,10 @@ describe('Chart.controllers.line', function() {
     var meta0 = chart.getDatasetMeta(0);
 
     [
-      {x: 0, y: 146},
-      {x: 171, y: 439},
-      {x: 341, y: 146},
-      {x: 512, y: 439}
+      {x: 5, y: 148},
+      {x: 171, y: 435},
+      {x: 341, y: 148},
+      {x: 507, y: 435}
     ].forEach(function(values, i) {
       expect(meta0.data[i].x).toBeCloseToPixel(values.x);
       expect(meta0.data[i].y).toBeCloseToPixel(values.y);
@@ -418,10 +418,10 @@ describe('Chart.controllers.line', function() {
     var meta1 = chart.getDatasetMeta(1);
 
     [
-      {x: 0, y: 0},
-      {x: 171, y: 73},
-      {x: 341, y: 146},
-      {x: 512, y: 497}
+      {x: 5, y: 5},
+      {x: 171, y: 76},
+      {x: 341, y: 148},
+      {x: 507, y: 492}
     ].forEach(function(values, i) {
       expect(meta1.data[i].x).toBeCloseToPixel(values.x);
       expect(meta1.data[i].y).toBeCloseToPixel(values.y);
@@ -462,10 +462,10 @@ describe('Chart.controllers.line', function() {
     var meta0 = chart.getDatasetMeta(0);
 
     [
-      {x: 0, y: 146},
-      {x: 171, y: 439},
-      {x: 341, y: 146},
-      {x: 512, y: 439}
+      {x: 5, y: 148},
+      {x: 171, y: 435},
+      {x: 341, y: 148},
+      {x: 507, y: 435}
     ].forEach(function(values, i) {
       expect(meta0.data[i].x).toBeCloseToPixel(values.x);
       expect(meta0.data[i].y).toBeCloseToPixel(values.y);
@@ -474,10 +474,10 @@ describe('Chart.controllers.line', function() {
     var meta1 = chart.getDatasetMeta(1);
 
     [
-      {x: 0, y: 0},
-      {x: 171, y: 73},
-      {x: 341, y: 146},
-      {x: 512, y: 497}
+      {x: 5, y: 5},
+      {x: 171, y: 76},
+      {x: 341, y: 148},
+      {x: 507, y: 492}
     ].forEach(function(values, i) {
       expect(meta1.data[i].x).toBeCloseToPixel(values.x);
       expect(meta1.data[i].y).toBeCloseToPixel(values.y);
index 9be597bf3ca0ba86d735da82e3c0d7a25a46f3fe..08436e93bc1cc6ecd559876cee336fd49803ae89 100644 (file)
@@ -275,6 +275,30 @@ describe('Chart', function() {
       expect(chart.getActiveElements()).toEqual([{datasetIndex: 0, index: 1, element: point}]);
     });
 
+    it('should activate element on hover when minPadding pixels outside chart area', async function() {
+      var chart = acquireChart({
+        type: 'line',
+        data: {
+          labels: ['A', 'B', 'C', 'D'],
+          datasets: [{
+            data: [10, 20, 30, 100],
+            hoverRadius: 0
+          }],
+        },
+        options: {
+          scales: {
+            x: {display: false},
+            y: {display: false}
+          }
+        }
+      });
+
+      var point = chart.getDatasetMeta(0).data[0];
+
+      await jasmine.triggerMouseEvent(chart, 'mousemove', {x: 1, y: point.y});
+      expect(chart.getActiveElements()).toEqual([{datasetIndex: 0, index: 0, element: point}]);
+    });
+
     it('should not activate elements when hover is disabled', async function() {
       var chart = acquireChart({
         type: 'line',