]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
AutoSkip in update (#6355)
authorBen McCann <322311+benmccann@users.noreply.github.com>
Sat, 7 Sep 2019 11:24:31 +0000 (04:24 -0700)
committerEvert Timberg <evert.timberg+github@gmail.com>
Sat, 7 Sep 2019 11:24:31 +0000 (07:24 -0400)
* AutoSkip in update

* Address review comments

* Add v3 to TODO

* Address review comments

* Remove unrelated code cleanup

src/core/core.scale.js

index 4dcd62680e47c9295ba856f269f17f5a522316d0..97a62f5695e00881f5035ced668c7608d411f20b 100644 (file)
@@ -250,8 +250,17 @@ var Scale = Element.extend({
                helpers.callback(this.options.beforeUpdate, [this]);
        },
 
+       /**
+        * @param {number} maxWidth - the max width in pixels
+        * @param {number} maxHeight - the max height in pixels
+        * @param {object} margins - the space between the edge of the other scales and edge of the chart
+        *   This space comes from two sources:
+        *     - padding - space that's required to show the labels at the edges of the scale
+        *     - thickness of scales or legends in another orientation
+        */
        update: function(maxWidth, maxHeight, margins) {
                var me = this;
+               var tickOpts = me.options.ticks;
                var i, ilen, labels, label, ticks, tick;
 
                // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)
@@ -271,7 +280,6 @@ var Scale = Element.extend({
                me._maxLabelLines = 0;
                me.longestLabelWidth = 0;
                me.longestTextCache = me.longestTextCache || {};
-               me._ticksToDraw = null;
                me._gridLineItems = null;
                me._labelItems = null;
 
@@ -312,7 +320,7 @@ var Scale = Element.extend({
 
                me.ticks = labels;   // BACKWARD COMPATIBILITY
 
-               // IMPORTANT: from this point, we consider that `this.ticks` will NEVER change!
+               // IMPORTANT: below this point, we consider that `this.ticks` will NEVER change!
 
                // BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)
                for (i = 0, ilen = labels.length; i < ilen; ++i) {
@@ -344,9 +352,13 @@ var Scale = Element.extend({
                me.beforeFit();
                me.fit();
                me.afterFit();
-               //
+               // Auto-skip
+               me._ticksToDraw = tickOpts.display && tickOpts.autoSkip ? me._autoSkip(me._ticks) : me._ticks;
+
                me.afterUpdate();
 
+               // TODO(v3): remove minSize as a public property and return value from all layout boxes. It is unused
+               // make maxWidth and maxHeight private
                return me.minSize;
 
        },
@@ -508,6 +520,7 @@ var Scale = Element.extend({
                        height: 0
                };
 
+               var chart = me.chart;
                var opts = me.options;
                var tickOpts = opts.ticks;
                var scaleLabelOpts = opts.scaleLabel;
@@ -593,8 +606,13 @@ var Scale = Element.extend({
 
                me.handleMargins();
 
-               me.width = minSize.width;
-               me.height = minSize.height;
+               if (isHorizontal) {
+                       me.width = me._length = chart.width - me.margins.left - me.margins.right;
+                       me.height = minSize.height;
+               } else {
+                       me.width = minSize.width;
+                       me.height = me._length = chart.height - me.margins.top - me.margins.bottom;
+               }
        },
 
        /**
@@ -870,25 +888,6 @@ var Scale = Element.extend({
                return false;
        },
 
-       _getTicksToDraw: function() {
-               var me = this;
-               var optionTicks = me.options.ticks;
-               var ticks = me._ticksToDraw;
-
-               if (ticks) {
-                       return ticks;
-               }
-
-               ticks = me.getTicks();
-
-               if (optionTicks.display && optionTicks.autoSkip) {
-                       ticks = me._autoSkip(ticks);
-               }
-
-               me._ticksToDraw = ticks;
-               return ticks;
-       },
-
        /**
         * @private
         */
@@ -900,8 +899,9 @@ var Scale = Element.extend({
                var position = options.position;
                var offsetGridLines = gridLines.offsetGridLines;
                var isHorizontal = me.isHorizontal();
-               var ticks = me._getTicksToDraw();
+               var ticks = me._ticksToDraw;
                var ticksLength = ticks.length + (offsetGridLines ? 1 : 0);
+
                var tl = getTickMarkLength(gridLines);
                var items = [];
                var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;
@@ -1008,7 +1008,7 @@ var Scale = Element.extend({
                var position = options.position;
                var isMirrored = optionTicks.mirror;
                var isHorizontal = me.isHorizontal();
-               var ticks = me._getTicksToDraw();
+               var ticks = me._ticksToDraw;
                var fonts = parseTickFontOptions(optionTicks);
                var tickPadding = optionTicks.padding;
                var tl = getTickMarkLength(options.gridLines);