chartkick 4.0.3 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +4 -4
- data/lib/chartkick/version.rb +1 -1
- data/vendor/assets/javascripts/Chart.bundle.js +465 -251
- data/vendor/assets/javascripts/chartkick.js +18 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e28ff576b7b488cc3ca1add95bf96832461189f5b085816e67d9923fdf13494
|
4
|
+
data.tar.gz: 282c01fdc0d199d4dd9d17a0aa887a67a0d8ce52df584a46d172e636496ad25e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a450c12a1973131b412d99525d400d2910e63e24edb93cb6ce27670dc6a1eaf70e13dfec9829a67cae6afcf4e77737eea2c442232c00bdd3c5d5e7b126a1a93
|
7
|
+
data.tar.gz: 3d59060b8e7dd24f3239dccc0b7079a66e3d1351a1e565e948e46faa2a2b28a462ee6d91b99602a334f91861ea2cf3a77419bf0c86677a83c278b4f97ef3d4fb
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -29,7 +29,7 @@ yarn add chartkick chart.js
|
|
29
29
|
And in `app/javascript/packs/application.js`, add:
|
30
30
|
|
31
31
|
```js
|
32
|
-
|
32
|
+
import "chartkick/chart.js"
|
33
33
|
```
|
34
34
|
|
35
35
|
For Rails 5 / Sprockets, in `app/assets/javascripts/application.js`, add:
|
@@ -430,7 +430,7 @@ yarn add chartkick chart.js
|
|
430
430
|
And in `app/javascript/packs/application.js`, add:
|
431
431
|
|
432
432
|
```js
|
433
|
-
|
433
|
+
import "chartkick/chart.js"
|
434
434
|
```
|
435
435
|
|
436
436
|
For Rails 5 / Sprockets, in `app/assets/javascripts/application.js`, add:
|
@@ -457,7 +457,7 @@ yarn add chartkick
|
|
457
457
|
And in `app/javascript/packs/application.js`, add:
|
458
458
|
|
459
459
|
```js
|
460
|
-
|
460
|
+
import "chartkick"
|
461
461
|
```
|
462
462
|
|
463
463
|
For Rails 5 / Sprockets, in `app/assets/javascripts/application.js`, add:
|
@@ -485,7 +485,7 @@ yarn add chartkick highcharts
|
|
485
485
|
And in `app/javascript/packs/application.js`, add:
|
486
486
|
|
487
487
|
```js
|
488
|
-
|
488
|
+
import "chartkick/highcharts"
|
489
489
|
```
|
490
490
|
|
491
491
|
For Rails 5 / Sprockets, download [highcharts.js](https://code.highcharts.com/highcharts.js) into `vendor/assets/javascripts` (or use `yarn add highcharts` in Rails 5.1+), and in `app/assets/javascripts/application.js`, add:
|
data/lib/chartkick/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Chart.js v3.1
|
2
|
+
* Chart.js v3.2.1
|
3
3
|
* https://www.chartjs.org
|
4
4
|
* (c) 2021 Chart.js Contributors
|
5
5
|
* Released under the MIT License
|
@@ -9,7 +9,7 @@
|
|
9
9
|
* (c) 2021 chartjs-adapter-date-fns Contributors
|
10
10
|
* Released under the MIT license
|
11
11
|
*
|
12
|
-
* date-fns v2.
|
12
|
+
* date-fns v2.21.1
|
13
13
|
* https://date-fns.org
|
14
14
|
* (c) 2020 Sasha Koss and Lesha Koss
|
15
15
|
* Released under the MIT License
|
@@ -594,6 +594,31 @@
|
|
594
594
|
return typeof value === 'function';
|
595
595
|
};
|
596
596
|
|
597
|
+
var setsEqual = function setsEqual(a, b) {
|
598
|
+
if (a.size !== b.size) {
|
599
|
+
return false;
|
600
|
+
}
|
601
|
+
|
602
|
+
var _iterator = _createForOfIteratorHelper(a),
|
603
|
+
_step;
|
604
|
+
|
605
|
+
try {
|
606
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
607
|
+
var item = _step.value;
|
608
|
+
|
609
|
+
if (!b.has(item)) {
|
610
|
+
return false;
|
611
|
+
}
|
612
|
+
}
|
613
|
+
} catch (err) {
|
614
|
+
_iterator.e(err);
|
615
|
+
} finally {
|
616
|
+
_iterator.f();
|
617
|
+
}
|
618
|
+
|
619
|
+
return true;
|
620
|
+
};
|
621
|
+
|
597
622
|
var PI = Math.PI;
|
598
623
|
var TAU = 2 * PI;
|
599
624
|
var PITAU = TAU + PI;
|
@@ -2107,18 +2132,18 @@
|
|
2107
2132
|
return value;
|
2108
2133
|
};
|
2109
2134
|
|
2110
|
-
var
|
2111
|
-
|
2135
|
+
var _iterator2 = _createForOfIteratorHelper(keys),
|
2136
|
+
_step2;
|
2112
2137
|
|
2113
2138
|
try {
|
2114
|
-
for (
|
2115
|
-
var prop =
|
2139
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
2140
|
+
var prop = _step2.value;
|
2116
2141
|
ret[prop] = numberOrZero$1(read(prop));
|
2117
2142
|
}
|
2118
2143
|
} catch (err) {
|
2119
|
-
|
2144
|
+
_iterator2.e(err);
|
2120
2145
|
} finally {
|
2121
|
-
|
2146
|
+
_iterator2.f();
|
2122
2147
|
}
|
2123
2148
|
|
2124
2149
|
return ret;
|
@@ -2561,19 +2586,19 @@
|
|
2561
2586
|
|
2562
2587
|
value = [];
|
2563
2588
|
|
2564
|
-
var
|
2565
|
-
|
2589
|
+
var _iterator3 = _createForOfIteratorHelper(arr),
|
2590
|
+
_step3;
|
2566
2591
|
|
2567
2592
|
try {
|
2568
|
-
for (
|
2569
|
-
var item =
|
2593
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
2594
|
+
var item = _step3.value;
|
2570
2595
|
var resolver = createSubResolver(scopes, _proxy, prop, item);
|
2571
2596
|
value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));
|
2572
2597
|
}
|
2573
2598
|
} catch (err) {
|
2574
|
-
|
2599
|
+
_iterator3.e(err);
|
2575
2600
|
} finally {
|
2576
|
-
|
2601
|
+
_iterator3.f();
|
2577
2602
|
}
|
2578
2603
|
}
|
2579
2604
|
|
@@ -2589,12 +2614,12 @@
|
|
2589
2614
|
};
|
2590
2615
|
|
2591
2616
|
function addScopes(set, parentScopes, key, parentFallback) {
|
2592
|
-
var
|
2593
|
-
|
2617
|
+
var _iterator4 = _createForOfIteratorHelper(parentScopes),
|
2618
|
+
_step4;
|
2594
2619
|
|
2595
2620
|
try {
|
2596
|
-
for (
|
2597
|
-
var parent =
|
2621
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
2622
|
+
var parent = _step4.value;
|
2598
2623
|
var scope = getScope(key, parent);
|
2599
2624
|
|
2600
2625
|
if (scope) {
|
@@ -2609,9 +2634,9 @@
|
|
2609
2634
|
}
|
2610
2635
|
}
|
2611
2636
|
} catch (err) {
|
2612
|
-
|
2637
|
+
_iterator4.e(err);
|
2613
2638
|
} finally {
|
2614
|
-
|
2639
|
+
_iterator4.f();
|
2615
2640
|
}
|
2616
2641
|
|
2617
2642
|
return false;
|
@@ -2659,12 +2684,12 @@
|
|
2659
2684
|
function _resolveWithPrefixes(prop, prefixes, scopes, proxy) {
|
2660
2685
|
var value;
|
2661
2686
|
|
2662
|
-
var
|
2663
|
-
|
2687
|
+
var _iterator5 = _createForOfIteratorHelper(prefixes),
|
2688
|
+
_step5;
|
2664
2689
|
|
2665
2690
|
try {
|
2666
|
-
for (
|
2667
|
-
var prefix =
|
2691
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
2692
|
+
var prefix = _step5.value;
|
2668
2693
|
value = _resolve(readKey(prefix, prop), scopes);
|
2669
2694
|
|
2670
2695
|
if (defined(value)) {
|
@@ -2672,19 +2697,19 @@
|
|
2672
2697
|
}
|
2673
2698
|
}
|
2674
2699
|
} catch (err) {
|
2675
|
-
|
2700
|
+
_iterator5.e(err);
|
2676
2701
|
} finally {
|
2677
|
-
|
2702
|
+
_iterator5.f();
|
2678
2703
|
}
|
2679
2704
|
}
|
2680
2705
|
|
2681
2706
|
function _resolve(key, scopes) {
|
2682
|
-
var
|
2683
|
-
|
2707
|
+
var _iterator6 = _createForOfIteratorHelper(scopes),
|
2708
|
+
_step6;
|
2684
2709
|
|
2685
2710
|
try {
|
2686
|
-
for (
|
2687
|
-
var scope =
|
2711
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
2712
|
+
var scope = _step6.value;
|
2688
2713
|
|
2689
2714
|
if (!scope) {
|
2690
2715
|
continue;
|
@@ -2697,9 +2722,9 @@
|
|
2697
2722
|
}
|
2698
2723
|
}
|
2699
2724
|
} catch (err) {
|
2700
|
-
|
2725
|
+
_iterator6.e(err);
|
2701
2726
|
} finally {
|
2702
|
-
|
2727
|
+
_iterator6.f();
|
2703
2728
|
}
|
2704
2729
|
}
|
2705
2730
|
|
@@ -2716,33 +2741,33 @@
|
|
2716
2741
|
function resolveKeysFromAllScopes(scopes) {
|
2717
2742
|
var set = new Set();
|
2718
2743
|
|
2719
|
-
var
|
2720
|
-
|
2744
|
+
var _iterator7 = _createForOfIteratorHelper(scopes),
|
2745
|
+
_step7;
|
2721
2746
|
|
2722
2747
|
try {
|
2723
|
-
for (
|
2724
|
-
var scope =
|
2748
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
2749
|
+
var scope = _step7.value;
|
2725
2750
|
|
2726
|
-
var
|
2751
|
+
var _iterator8 = _createForOfIteratorHelper(Object.keys(scope).filter(function (k) {
|
2727
2752
|
return !k.startsWith('_');
|
2728
2753
|
})),
|
2729
|
-
|
2754
|
+
_step8;
|
2730
2755
|
|
2731
2756
|
try {
|
2732
|
-
for (
|
2733
|
-
var key =
|
2757
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
2758
|
+
var key = _step8.value;
|
2734
2759
|
set.add(key);
|
2735
2760
|
}
|
2736
2761
|
} catch (err) {
|
2737
|
-
|
2762
|
+
_iterator8.e(err);
|
2738
2763
|
} finally {
|
2739
|
-
|
2764
|
+
_iterator8.f();
|
2740
2765
|
}
|
2741
2766
|
}
|
2742
2767
|
} catch (err) {
|
2743
|
-
|
2768
|
+
_iterator7.e(err);
|
2744
2769
|
} finally {
|
2745
|
-
|
2770
|
+
_iterator7.f();
|
2746
2771
|
}
|
2747
2772
|
|
2748
2773
|
return _toConsumableArray(set);
|
@@ -3558,12 +3583,12 @@
|
|
3558
3583
|
var start = segments[0].start;
|
3559
3584
|
var i = start;
|
3560
3585
|
|
3561
|
-
var
|
3562
|
-
|
3586
|
+
var _iterator9 = _createForOfIteratorHelper(segments),
|
3587
|
+
_step9;
|
3563
3588
|
|
3564
3589
|
try {
|
3565
|
-
for (
|
3566
|
-
var segment =
|
3590
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
3591
|
+
var segment = _step9.value;
|
3567
3592
|
var prevStyle = void 0,
|
3568
3593
|
style = void 0;
|
3569
3594
|
var prev = points[start % count];
|
@@ -3602,9 +3627,9 @@
|
|
3602
3627
|
}
|
3603
3628
|
}
|
3604
3629
|
} catch (err) {
|
3605
|
-
|
3630
|
+
_iterator9.e(err);
|
3606
3631
|
} finally {
|
3607
|
-
|
3632
|
+
_iterator9.f();
|
3608
3633
|
}
|
3609
3634
|
|
3610
3635
|
return result;
|
@@ -3644,6 +3669,7 @@
|
|
3644
3669
|
callbacks.forEach(function (fn) {
|
3645
3670
|
return fn({
|
3646
3671
|
chart: chart,
|
3672
|
+
initial: anims.initial,
|
3647
3673
|
numSteps: numSteps,
|
3648
3674
|
currentStep: Math.min(date - anims.start, numSteps)
|
3649
3675
|
});
|
@@ -3712,6 +3738,8 @@
|
|
3712
3738
|
anims.running = false;
|
3713
3739
|
|
3714
3740
|
me._notify(chart, anims, date, 'complete');
|
3741
|
+
|
3742
|
+
anims.initial = false;
|
3715
3743
|
}
|
3716
3744
|
|
3717
3745
|
remaining += items.length;
|
@@ -3732,6 +3760,7 @@
|
|
3732
3760
|
if (!anims) {
|
3733
3761
|
anims = {
|
3734
3762
|
running: false,
|
3763
|
+
initial: true,
|
3735
3764
|
items: [],
|
3736
3765
|
listeners: {
|
3737
3766
|
complete: [],
|
@@ -4331,6 +4360,28 @@
|
|
4331
4360
|
return subStack[indexValue] || (subStack[indexValue] = {});
|
4332
4361
|
}
|
4333
4362
|
|
4363
|
+
function getLastIndexInStack(stack, vScale, positive) {
|
4364
|
+
var _iterator2 = _createForOfIteratorHelper(vScale.getMatchingVisibleMetas('bar').reverse()),
|
4365
|
+
_step2;
|
4366
|
+
|
4367
|
+
try {
|
4368
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
4369
|
+
var meta = _step2.value;
|
4370
|
+
var value = stack[meta.index];
|
4371
|
+
|
4372
|
+
if (positive && value > 0 || !positive && value < 0) {
|
4373
|
+
return meta.index;
|
4374
|
+
}
|
4375
|
+
}
|
4376
|
+
} catch (err) {
|
4377
|
+
_iterator2.e(err);
|
4378
|
+
} finally {
|
4379
|
+
_iterator2.f();
|
4380
|
+
}
|
4381
|
+
|
4382
|
+
return null;
|
4383
|
+
}
|
4384
|
+
|
4334
4385
|
function updateStacks(controller, parsed) {
|
4335
4386
|
var chart = controller.chart,
|
4336
4387
|
meta = controller._cachedMeta;
|
@@ -4351,6 +4402,8 @@
|
|
4351
4402
|
var itemStacks = item._stacks || (item._stacks = {});
|
4352
4403
|
stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);
|
4353
4404
|
stack[datasetIndex] = value;
|
4405
|
+
stack._top = getLastIndexInStack(stack, vScale, true);
|
4406
|
+
stack._bottom = getLastIndexInStack(stack, vScale, false);
|
4354
4407
|
}
|
4355
4408
|
}
|
4356
4409
|
|
@@ -4388,12 +4441,12 @@
|
|
4388
4441
|
function clearStacks(meta, items) {
|
4389
4442
|
items = items || meta._parsed;
|
4390
4443
|
|
4391
|
-
var
|
4392
|
-
|
4444
|
+
var _iterator3 = _createForOfIteratorHelper(items),
|
4445
|
+
_step3;
|
4393
4446
|
|
4394
4447
|
try {
|
4395
|
-
for (
|
4396
|
-
var parsed =
|
4448
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
4449
|
+
var parsed = _step3.value;
|
4397
4450
|
var stacks = parsed._stacks;
|
4398
4451
|
|
4399
4452
|
if (!stacks || stacks[meta.vScale.id] === undefined || stacks[meta.vScale.id][meta.index] === undefined) {
|
@@ -4403,9 +4456,9 @@
|
|
4403
4456
|
delete stacks[meta.vScale.id][meta.index];
|
4404
4457
|
}
|
4405
4458
|
} catch (err) {
|
4406
|
-
|
4459
|
+
_iterator3.e(err);
|
4407
4460
|
} finally {
|
4408
|
-
|
4461
|
+
_iterator3.f();
|
4409
4462
|
}
|
4410
4463
|
}
|
4411
4464
|
|
@@ -4601,6 +4654,7 @@
|
|
4601
4654
|
if (me._parsing === false) {
|
4602
4655
|
meta._parsed = data;
|
4603
4656
|
meta._sorted = true;
|
4657
|
+
parsed = data;
|
4604
4658
|
} else {
|
4605
4659
|
if (isArray(data[start])) {
|
4606
4660
|
parsed = me.parseArrayData(meta, data, start, count);
|
@@ -5181,7 +5235,14 @@
|
|
5181
5235
|
var i, ilen, curr, prev;
|
5182
5236
|
|
5183
5237
|
var updateMinAndPrev = function updateMinAndPrev() {
|
5184
|
-
|
5238
|
+
if (curr === 32767 || curr === -32768) {
|
5239
|
+
return;
|
5240
|
+
}
|
5241
|
+
|
5242
|
+
if (defined(prev)) {
|
5243
|
+
min = Math.min(min, Math.abs(curr - prev) || min);
|
5244
|
+
}
|
5245
|
+
|
5185
5246
|
prev = curr;
|
5186
5247
|
};
|
5187
5248
|
|
@@ -5190,6 +5251,8 @@
|
|
5190
5251
|
updateMinAndPrev();
|
5191
5252
|
}
|
5192
5253
|
|
5254
|
+
prev = undefined;
|
5255
|
+
|
5193
5256
|
for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {
|
5194
5257
|
curr = scale.getPixelForTick(i);
|
5195
5258
|
updateMinAndPrev();
|
@@ -5412,9 +5475,11 @@
|
|
5412
5475
|
|
5413
5476
|
var ipixels = me._calculateBarIndexPixels(i, ruler);
|
5414
5477
|
|
5478
|
+
var stack = (parsed._stacks || {})[vScale.axis];
|
5415
5479
|
var properties = {
|
5416
5480
|
horizontal: horizontal,
|
5417
5481
|
base: vpixels.base,
|
5482
|
+
enableBorderRadius: !stack || isFloatBar(parsed._custom) || me.index === stack._top || me.index === stack._bottom,
|
5418
5483
|
x: horizontal ? vpixels.head : ipixels.center,
|
5419
5484
|
y: horizontal ? ipixels.center : vpixels.head,
|
5420
5485
|
height: horizontal ? ipixels.size : undefined,
|
@@ -5473,8 +5538,8 @@
|
|
5473
5538
|
}
|
5474
5539
|
}, {
|
5475
5540
|
key: "_getStackIndex",
|
5476
|
-
value: function _getStackIndex(datasetIndex, name) {
|
5477
|
-
var stacks = this._getStacks(datasetIndex);
|
5541
|
+
value: function _getStackIndex(datasetIndex, name, dataIndex) {
|
5542
|
+
var stacks = this._getStacks(datasetIndex, dataIndex);
|
5478
5543
|
|
5479
5544
|
var index = name !== undefined ? stacks.indexOf(name) : -1;
|
5480
5545
|
return index === -1 ? stacks.length - 1 : index;
|
@@ -5588,14 +5653,15 @@
|
|
5588
5653
|
var me = this;
|
5589
5654
|
var scale = ruler.scale;
|
5590
5655
|
var options = me.options;
|
5656
|
+
var skipNull = options.skipNull;
|
5591
5657
|
var maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);
|
5592
5658
|
var center, size;
|
5593
5659
|
|
5594
5660
|
if (ruler.grouped) {
|
5595
|
-
var stackCount =
|
5661
|
+
var stackCount = skipNull ? me._getStackCount(index) : ruler.stackCount;
|
5596
5662
|
var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);
|
5597
5663
|
|
5598
|
-
var stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack);
|
5664
|
+
var stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack, skipNull ? index : undefined);
|
5599
5665
|
|
5600
5666
|
center = range.start + range.chunk * stackIndex + range.chunk / 2;
|
5601
5667
|
size = Math.min(maxBarThickness, range.chunk * range.ratio);
|
@@ -7994,7 +8060,10 @@
|
|
7994
8060
|
minor: {},
|
7995
8061
|
major: {},
|
7996
8062
|
align: 'center',
|
7997
|
-
crossAlign: 'near'
|
8063
|
+
crossAlign: 'near',
|
8064
|
+
showLabelBackdrop: false,
|
8065
|
+
backdropColor: 'rgba(255, 255, 255, 0.75)',
|
8066
|
+
backdropPadding: 2
|
7998
8067
|
}
|
7999
8068
|
});
|
8000
8069
|
defaults.route('scale.ticks', 'color', '', 'color');
|
@@ -8320,6 +8389,7 @@
|
|
8320
8389
|
_this4.labelRotation = undefined;
|
8321
8390
|
_this4.min = undefined;
|
8322
8391
|
_this4.max = undefined;
|
8392
|
+
_this4._range = undefined;
|
8323
8393
|
_this4.ticks = [];
|
8324
8394
|
_this4._gridLineItems = null;
|
8325
8395
|
_this4._labelItems = null;
|
@@ -8476,6 +8546,7 @@
|
|
8476
8546
|
me.beforeDataLimits();
|
8477
8547
|
me.determineDataLimits();
|
8478
8548
|
me.afterDataLimits();
|
8549
|
+
me._range = _addGrace(me, me.options.grace);
|
8479
8550
|
me._dataLimitsCached = true;
|
8480
8551
|
}
|
8481
8552
|
|
@@ -8613,6 +8684,14 @@
|
|
8613
8684
|
tick = ticks[i];
|
8614
8685
|
tick.label = callback(tickOpts.callback, [tick.value, i, ticks], me);
|
8615
8686
|
}
|
8687
|
+
|
8688
|
+
for (i = 0; i < ilen; i++) {
|
8689
|
+
if (isNullOrUndef(ticks[i].label)) {
|
8690
|
+
ticks.splice(i, 1);
|
8691
|
+
ilen--;
|
8692
|
+
i--;
|
8693
|
+
}
|
8694
|
+
}
|
8616
8695
|
}
|
8617
8696
|
}, {
|
8618
8697
|
key: "afterTickToLabelConversion",
|
@@ -8900,7 +8979,9 @@
|
|
8900
8979
|
first: valueAt(0),
|
8901
8980
|
last: valueAt(length - 1),
|
8902
8981
|
widest: valueAt(widest),
|
8903
|
-
highest: valueAt(highest)
|
8982
|
+
highest: valueAt(highest),
|
8983
|
+
widths: widths,
|
8984
|
+
heights: heights
|
8904
8985
|
};
|
8905
8986
|
}
|
8906
8987
|
}, {
|
@@ -9012,7 +9093,7 @@
|
|
9012
9093
|
var ticksLength = ticks.length + (offset ? 1 : 0);
|
9013
9094
|
var tl = getTickMarkLength(grid);
|
9014
9095
|
var items = [];
|
9015
|
-
var borderOpts = grid.setContext(me.getContext(
|
9096
|
+
var borderOpts = grid.setContext(me.getContext());
|
9016
9097
|
var axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;
|
9017
9098
|
var axisHalfWidth = axisWidth / 2;
|
9018
9099
|
|
@@ -9235,6 +9316,44 @@
|
|
9235
9316
|
textOffset = (1 - lineCount) * lineHeight / 2;
|
9236
9317
|
}
|
9237
9318
|
|
9319
|
+
var backdrop = void 0;
|
9320
|
+
|
9321
|
+
if (optsAtIndex.showLabelBackdrop) {
|
9322
|
+
var labelPadding = toPadding(optsAtIndex.backdropPadding);
|
9323
|
+
var height = labelSizes.heights[i];
|
9324
|
+
var width = labelSizes.widths[i];
|
9325
|
+
var top = y + textOffset - labelPadding.top;
|
9326
|
+
var left = x - labelPadding.left;
|
9327
|
+
|
9328
|
+
switch (textBaseline) {
|
9329
|
+
case 'middle':
|
9330
|
+
top -= height / 2;
|
9331
|
+
break;
|
9332
|
+
|
9333
|
+
case 'bottom':
|
9334
|
+
top -= height;
|
9335
|
+
break;
|
9336
|
+
}
|
9337
|
+
|
9338
|
+
switch (textAlign) {
|
9339
|
+
case 'center':
|
9340
|
+
left -= width / 2;
|
9341
|
+
break;
|
9342
|
+
|
9343
|
+
case 'right':
|
9344
|
+
left -= width;
|
9345
|
+
break;
|
9346
|
+
}
|
9347
|
+
|
9348
|
+
backdrop = {
|
9349
|
+
left: left,
|
9350
|
+
top: top,
|
9351
|
+
width: width + labelPadding.width,
|
9352
|
+
height: height + labelPadding.height,
|
9353
|
+
color: optsAtIndex.backdropColor
|
9354
|
+
};
|
9355
|
+
}
|
9356
|
+
|
9238
9357
|
items.push({
|
9239
9358
|
rotation: rotation,
|
9240
9359
|
label: label,
|
@@ -9245,7 +9364,8 @@
|
|
9245
9364
|
textOffset: textOffset,
|
9246
9365
|
textAlign: textAlign,
|
9247
9366
|
textBaseline: textBaseline,
|
9248
|
-
translation: [x, y]
|
9367
|
+
translation: [x, y],
|
9368
|
+
backdrop: backdrop
|
9249
9369
|
});
|
9250
9370
|
}
|
9251
9371
|
|
@@ -9410,9 +9530,6 @@
|
|
9410
9530
|
var me = this;
|
9411
9531
|
var grid = me.options.grid;
|
9412
9532
|
var ctx = me.ctx;
|
9413
|
-
var chart = me.chart;
|
9414
|
-
var borderOpts = grid.setContext(me.getContext());
|
9415
|
-
var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;
|
9416
9533
|
|
9417
9534
|
var items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));
|
9418
9535
|
|
@@ -9465,33 +9582,43 @@
|
|
9465
9582
|
}
|
9466
9583
|
}
|
9467
9584
|
}
|
9585
|
+
}
|
9586
|
+
}, {
|
9587
|
+
key: "drawBorder",
|
9588
|
+
value: function drawBorder() {
|
9589
|
+
var me = this;
|
9590
|
+
var chart = me.chart,
|
9591
|
+
ctx = me.ctx,
|
9592
|
+
grid = me.options.grid;
|
9593
|
+
var borderOpts = grid.setContext(me.getContext());
|
9594
|
+
var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;
|
9468
9595
|
|
9469
|
-
if (axisWidth) {
|
9470
|
-
|
9471
|
-
|
9472
|
-
var x1, x2, y1, y2;
|
9596
|
+
if (!axisWidth) {
|
9597
|
+
return;
|
9598
|
+
}
|
9473
9599
|
|
9474
|
-
|
9475
|
-
|
9476
|
-
|
9477
|
-
y1 = y2 = borderValue;
|
9478
|
-
} else {
|
9479
|
-
y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2;
|
9480
|
-
y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;
|
9481
|
-
x1 = x2 = borderValue;
|
9482
|
-
}
|
9600
|
+
var lastLineWidth = grid.setContext(me.getContext(0)).lineWidth;
|
9601
|
+
var borderValue = me._borderValue;
|
9602
|
+
var x1, x2, y1, y2;
|
9483
9603
|
|
9484
|
-
|
9485
|
-
|
9486
|
-
|
9487
|
-
|
9488
|
-
|
9489
|
-
|
9490
|
-
|
9491
|
-
|
9492
|
-
color: borderOpts.borderColor
|
9493
|
-
});
|
9604
|
+
if (me.isHorizontal()) {
|
9605
|
+
x1 = _alignPixel(chart, me.left, axisWidth) - axisWidth / 2;
|
9606
|
+
x2 = _alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;
|
9607
|
+
y1 = y2 = borderValue;
|
9608
|
+
} else {
|
9609
|
+
y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2;
|
9610
|
+
y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;
|
9611
|
+
x1 = x2 = borderValue;
|
9494
9612
|
}
|
9613
|
+
|
9614
|
+
ctx.save();
|
9615
|
+
ctx.lineWidth = borderOpts.borderWidth;
|
9616
|
+
ctx.strokeStyle = borderOpts.borderColor;
|
9617
|
+
ctx.beginPath();
|
9618
|
+
ctx.moveTo(x1, y1);
|
9619
|
+
ctx.lineTo(x2, y2);
|
9620
|
+
ctx.stroke();
|
9621
|
+
ctx.restore();
|
9495
9622
|
}
|
9496
9623
|
}, {
|
9497
9624
|
key: "drawLabels",
|
@@ -9519,6 +9646,12 @@
|
|
9519
9646
|
var item = items[i];
|
9520
9647
|
var tickFont = item.font;
|
9521
9648
|
var label = item.label;
|
9649
|
+
|
9650
|
+
if (item.backdrop) {
|
9651
|
+
ctx.fillStyle = item.backdrop.color;
|
9652
|
+
ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);
|
9653
|
+
}
|
9654
|
+
|
9522
9655
|
var y = item.textOffset;
|
9523
9656
|
renderText(ctx, label, 0, y, tickFont, item);
|
9524
9657
|
}
|
@@ -9581,6 +9714,7 @@
|
|
9581
9714
|
|
9582
9715
|
me.drawBackground();
|
9583
9716
|
me.drawGrid(chartArea);
|
9717
|
+
me.drawBorder();
|
9584
9718
|
me.drawTitle();
|
9585
9719
|
me.drawLabels(chartArea);
|
9586
9720
|
}
|
@@ -9592,7 +9726,7 @@
|
|
9592
9726
|
var tz = opts.ticks && opts.ticks.z || 0;
|
9593
9727
|
var gz = opts.grid && opts.grid.z || 0;
|
9594
9728
|
|
9595
|
-
if (!me._isVisible() ||
|
9729
|
+
if (!me._isVisible() || me.draw !== Scale.prototype.draw) {
|
9596
9730
|
return [{
|
9597
9731
|
z: tz,
|
9598
9732
|
draw: function draw(chartArea) {
|
@@ -9608,6 +9742,11 @@
|
|
9608
9742
|
me.drawGrid(chartArea);
|
9609
9743
|
me.drawTitle();
|
9610
9744
|
}
|
9745
|
+
}, {
|
9746
|
+
z: gz + 1,
|
9747
|
+
draw: function draw() {
|
9748
|
+
me.drawBorder();
|
9749
|
+
}
|
9611
9750
|
}, {
|
9612
9751
|
z: tz,
|
9613
9752
|
draw: function draw(chartArea) {
|
@@ -9640,6 +9779,15 @@
|
|
9640
9779
|
var opts = this.options.ticks.setContext(this.getContext(index));
|
9641
9780
|
return toFont(opts.font);
|
9642
9781
|
}
|
9782
|
+
}, {
|
9783
|
+
key: "_maxDigits",
|
9784
|
+
value: function _maxDigits() {
|
9785
|
+
var me = this;
|
9786
|
+
|
9787
|
+
var fontSize = me._resolveTickFontOptions(0).lineHeight;
|
9788
|
+
|
9789
|
+
return me.isHorizontal() ? me.width / fontSize / 0.7 : me.height / fontSize;
|
9790
|
+
}
|
9643
9791
|
}]);
|
9644
9792
|
|
9645
9793
|
return Scale;
|
@@ -9965,12 +10113,12 @@
|
|
9965
10113
|
value: function _notify(descriptors, chart, hook, args) {
|
9966
10114
|
args = args || {};
|
9967
10115
|
|
9968
|
-
var
|
9969
|
-
|
10116
|
+
var _iterator4 = _createForOfIteratorHelper(descriptors),
|
10117
|
+
_step4;
|
9970
10118
|
|
9971
10119
|
try {
|
9972
|
-
for (
|
9973
|
-
var descriptor =
|
10120
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
10121
|
+
var descriptor = _step4.value;
|
9974
10122
|
var plugin = descriptor.plugin;
|
9975
10123
|
var method = plugin[hook];
|
9976
10124
|
var params = [chart, args, descriptor.options];
|
@@ -9980,9 +10128,9 @@
|
|
9980
10128
|
}
|
9981
10129
|
}
|
9982
10130
|
} catch (err) {
|
9983
|
-
|
10131
|
+
_iterator4.e(err);
|
9984
10132
|
} finally {
|
9985
|
-
|
10133
|
+
_iterator4.f();
|
9986
10134
|
}
|
9987
10135
|
|
9988
10136
|
return true;
|
@@ -10189,14 +10337,16 @@
|
|
10189
10337
|
options.scales = mergeScaleConfig(config, options);
|
10190
10338
|
}
|
10191
10339
|
|
10192
|
-
function
|
10193
|
-
|
10194
|
-
var data = config.data = config.data || {
|
10195
|
-
datasets: [],
|
10196
|
-
labels: []
|
10197
|
-
};
|
10340
|
+
function initData(data) {
|
10341
|
+
data = data || {};
|
10198
10342
|
data.datasets = data.datasets || [];
|
10199
10343
|
data.labels = data.labels || [];
|
10344
|
+
return data;
|
10345
|
+
}
|
10346
|
+
|
10347
|
+
function initConfig(config) {
|
10348
|
+
config = config || {};
|
10349
|
+
config.data = initData(config.data);
|
10200
10350
|
initOptions(config);
|
10201
10351
|
return config;
|
10202
10352
|
}
|
@@ -10247,7 +10397,7 @@
|
|
10247
10397
|
return this._config.data;
|
10248
10398
|
},
|
10249
10399
|
set: function set(data) {
|
10250
|
-
this._config.data = data;
|
10400
|
+
this._config.data = initData(data);
|
10251
10401
|
}
|
10252
10402
|
}, {
|
10253
10403
|
key: "options",
|
@@ -10396,18 +10546,18 @@
|
|
10396
10546
|
options = _attachContext(resolver, context, subResolver);
|
10397
10547
|
}
|
10398
10548
|
|
10399
|
-
var
|
10400
|
-
|
10549
|
+
var _iterator5 = _createForOfIteratorHelper(names),
|
10550
|
+
_step5;
|
10401
10551
|
|
10402
10552
|
try {
|
10403
|
-
for (
|
10404
|
-
var prop =
|
10553
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
10554
|
+
var prop = _step5.value;
|
10405
10555
|
result[prop] = options[prop];
|
10406
10556
|
}
|
10407
10557
|
} catch (err) {
|
10408
|
-
|
10558
|
+
_iterator5.e(err);
|
10409
10559
|
} finally {
|
10410
|
-
|
10560
|
+
_iterator5.f();
|
10411
10561
|
}
|
10412
10562
|
|
10413
10563
|
return result;
|
@@ -10459,27 +10609,27 @@
|
|
10459
10609
|
isScriptable = _descriptors2.isScriptable,
|
10460
10610
|
isIndexable = _descriptors2.isIndexable;
|
10461
10611
|
|
10462
|
-
var
|
10463
|
-
|
10612
|
+
var _iterator6 = _createForOfIteratorHelper(names),
|
10613
|
+
_step6;
|
10464
10614
|
|
10465
10615
|
try {
|
10466
|
-
for (
|
10467
|
-
var prop =
|
10616
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
10617
|
+
var prop = _step6.value;
|
10468
10618
|
|
10469
10619
|
if (isScriptable(prop) && isFunction(proxy[prop]) || isIndexable(prop) && isArray(proxy[prop])) {
|
10470
10620
|
return true;
|
10471
10621
|
}
|
10472
10622
|
}
|
10473
10623
|
} catch (err) {
|
10474
|
-
|
10624
|
+
_iterator6.e(err);
|
10475
10625
|
} finally {
|
10476
|
-
|
10626
|
+
_iterator6.f();
|
10477
10627
|
}
|
10478
10628
|
|
10479
10629
|
return false;
|
10480
10630
|
}
|
10481
10631
|
|
10482
|
-
var version = "3.1
|
10632
|
+
var version = "3.2.1";
|
10483
10633
|
var KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];
|
10484
10634
|
|
10485
10635
|
function positionIsHorizontal(position, axis) {
|
@@ -10917,6 +11067,13 @@
|
|
10917
11067
|
var animsDisabled = me._animationsDisabled = !me.options.animation;
|
10918
11068
|
me.ensureScalesHaveIDs();
|
10919
11069
|
me.buildOrUpdateScales();
|
11070
|
+
var existingEvents = new Set(Object.keys(me._listeners));
|
11071
|
+
var newEvents = new Set(me.options.events);
|
11072
|
+
|
11073
|
+
if (!setsEqual(existingEvents, newEvents)) {
|
11074
|
+
me.unbindEvents();
|
11075
|
+
me.bindEvents();
|
11076
|
+
}
|
10920
11077
|
|
10921
11078
|
me._plugins.invalidate();
|
10922
11079
|
|
@@ -11408,7 +11565,7 @@
|
|
11408
11565
|
return;
|
11409
11566
|
}
|
11410
11567
|
|
11411
|
-
|
11568
|
+
me._listeners = {};
|
11412
11569
|
each(listeners, function (listener, type) {
|
11413
11570
|
me.platform.removeEventListener(me, type, listener);
|
11414
11571
|
});
|
@@ -11950,23 +12107,30 @@
|
|
11950
12107
|
return _steppedLineTo;
|
11951
12108
|
}
|
11952
12109
|
|
11953
|
-
if (options.tension) {
|
12110
|
+
if (options.tension || options.cubicInterpolationMode === 'monotone') {
|
11954
12111
|
return _bezierCurveTo;
|
11955
12112
|
}
|
11956
12113
|
|
11957
12114
|
return lineTo;
|
11958
12115
|
}
|
11959
12116
|
|
11960
|
-
function pathVars(points, segment
|
11961
|
-
params =
|
12117
|
+
function pathVars(points, segment) {
|
12118
|
+
var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
11962
12119
|
var count = points.length;
|
11963
|
-
var start =
|
11964
|
-
|
12120
|
+
var _params$start = params.start,
|
12121
|
+
paramsStart = _params$start === void 0 ? 0 : _params$start,
|
12122
|
+
_params$end = params.end,
|
12123
|
+
paramsEnd = _params$end === void 0 ? count - 1 : _params$end;
|
12124
|
+
var segmentStart = segment.start,
|
12125
|
+
segmentEnd = segment.end;
|
12126
|
+
var start = Math.max(paramsStart, segmentStart);
|
12127
|
+
var end = Math.min(paramsEnd, segmentEnd);
|
12128
|
+
var outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;
|
11965
12129
|
return {
|
11966
12130
|
count: count,
|
11967
12131
|
start: start,
|
11968
12132
|
loop: segment.loop,
|
11969
|
-
ilen: end < start ? count + end - start : end - start
|
12133
|
+
ilen: end < start && !outside ? count + end - start : end - start
|
11970
12134
|
};
|
11971
12135
|
}
|
11972
12136
|
|
@@ -12082,7 +12246,7 @@
|
|
12082
12246
|
function _getSegmentMethod(line) {
|
12083
12247
|
var opts = line.options;
|
12084
12248
|
var borderDash = opts.borderDash && opts.borderDash.length;
|
12085
|
-
var useFastPath = !line._decimated && !line._loop && !opts.tension && !opts.stepped && !borderDash;
|
12249
|
+
var useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;
|
12086
12250
|
return useFastPath ? fastPathSegment : pathSegment;
|
12087
12251
|
}
|
12088
12252
|
|
@@ -12091,7 +12255,7 @@
|
|
12091
12255
|
return _steppedInterpolation;
|
12092
12256
|
}
|
12093
12257
|
|
12094
|
-
if (options.tension) {
|
12258
|
+
if (options.tension || options.cubicInterpolationMode === 'monotone') {
|
12095
12259
|
return _bezierInterpolation;
|
12096
12260
|
}
|
12097
12261
|
|
@@ -12119,12 +12283,12 @@
|
|
12119
12283
|
|
12120
12284
|
var segmentMethod = _getSegmentMethod(line);
|
12121
12285
|
|
12122
|
-
var
|
12123
|
-
|
12286
|
+
var _iterator7 = _createForOfIteratorHelper(segments),
|
12287
|
+
_step7;
|
12124
12288
|
|
12125
12289
|
try {
|
12126
|
-
for (
|
12127
|
-
var segment =
|
12290
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
12291
|
+
var segment = _step7.value;
|
12128
12292
|
setStyle(ctx, options, segment.style);
|
12129
12293
|
ctx.beginPath();
|
12130
12294
|
|
@@ -12138,9 +12302,9 @@
|
|
12138
12302
|
ctx.stroke();
|
12139
12303
|
}
|
12140
12304
|
} catch (err) {
|
12141
|
-
|
12305
|
+
_iterator7.e(err);
|
12142
12306
|
} finally {
|
12143
|
-
|
12307
|
+
_iterator7.f();
|
12144
12308
|
}
|
12145
12309
|
}
|
12146
12310
|
|
@@ -12188,7 +12352,7 @@
|
|
12188
12352
|
var me = this;
|
12189
12353
|
var options = me.options;
|
12190
12354
|
|
12191
|
-
if (options.tension && !options.stepped && !me._pointsUpdated) {
|
12355
|
+
if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !me._pointsUpdated) {
|
12192
12356
|
var loop = options.spanGaps ? me._loop : me._fullLoop;
|
12193
12357
|
|
12194
12358
|
_updateBezierControlPoints(me._points, options, chartArea, loop);
|
@@ -12293,21 +12457,21 @@
|
|
12293
12457
|
start = start || 0;
|
12294
12458
|
count = count || me.points.length - start;
|
12295
12459
|
|
12296
|
-
var
|
12297
|
-
|
12460
|
+
var _iterator8 = _createForOfIteratorHelper(segments),
|
12461
|
+
_step8;
|
12298
12462
|
|
12299
12463
|
try {
|
12300
|
-
for (
|
12301
|
-
var segment =
|
12464
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
12465
|
+
var segment = _step8.value;
|
12302
12466
|
loop &= segmentMethod(ctx, me, segment, {
|
12303
12467
|
start: start,
|
12304
12468
|
end: start + count - 1
|
12305
12469
|
});
|
12306
12470
|
}
|
12307
12471
|
} catch (err) {
|
12308
|
-
|
12472
|
+
_iterator8.e(err);
|
12309
12473
|
} finally {
|
12310
|
-
|
12474
|
+
_iterator8.f();
|
12311
12475
|
}
|
12312
12476
|
|
12313
12477
|
return !!loop;
|
@@ -12560,15 +12724,19 @@
|
|
12560
12724
|
}
|
12561
12725
|
|
12562
12726
|
function parseBorderRadius(bar, maxW, maxH) {
|
12727
|
+
var _bar$getProps2 = bar.getProps(['enableBorderRadius']),
|
12728
|
+
enableBorderRadius = _bar$getProps2.enableBorderRadius;
|
12729
|
+
|
12563
12730
|
var value = bar.options.borderRadius;
|
12564
12731
|
var o = toTRBLCorners(value);
|
12565
12732
|
var maxR = Math.min(maxW, maxH);
|
12566
12733
|
var skip = parseBorderSkipped(bar);
|
12734
|
+
var enableBorder = enableBorderRadius || isObject(value);
|
12567
12735
|
return {
|
12568
|
-
topLeft: skipOrLimit(skip.top || skip.left, o.topLeft, 0, maxR),
|
12569
|
-
topRight: skipOrLimit(skip.top || skip.right, o.topRight, 0, maxR),
|
12570
|
-
bottomLeft: skipOrLimit(skip.bottom || skip.left, o.bottomLeft, 0, maxR),
|
12571
|
-
bottomRight: skipOrLimit(skip.bottom || skip.right, o.bottomRight, 0, maxR)
|
12736
|
+
topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),
|
12737
|
+
topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),
|
12738
|
+
bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),
|
12739
|
+
bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)
|
12572
12740
|
};
|
12573
12741
|
}
|
12574
12742
|
|
@@ -12712,6 +12880,7 @@
|
|
12712
12880
|
borderSkipped: 'start',
|
12713
12881
|
borderWidth: 0,
|
12714
12882
|
borderRadius: 0,
|
12883
|
+
enableBorderRadius: true,
|
12715
12884
|
pointStyle: undefined
|
12716
12885
|
};
|
12717
12886
|
BarElement.defaultRoutes = {
|
@@ -12842,16 +13011,20 @@
|
|
12842
13011
|
return decimated;
|
12843
13012
|
}
|
12844
13013
|
|
13014
|
+
function cleanDecimatedDataset(dataset) {
|
13015
|
+
if (dataset._decimated) {
|
13016
|
+
var data = dataset._data;
|
13017
|
+
delete dataset._decimated;
|
13018
|
+
delete dataset._data;
|
13019
|
+
Object.defineProperty(dataset, 'data', {
|
13020
|
+
value: data
|
13021
|
+
});
|
13022
|
+
}
|
13023
|
+
}
|
13024
|
+
|
12845
13025
|
function cleanDecimatedData(chart) {
|
12846
13026
|
chart.data.datasets.forEach(function (dataset) {
|
12847
|
-
|
12848
|
-
var data = dataset._data;
|
12849
|
-
delete dataset._decimated;
|
12850
|
-
delete dataset._data;
|
12851
|
-
Object.defineProperty(dataset, 'data', {
|
12852
|
-
value: data
|
12853
|
-
});
|
12854
|
-
}
|
13027
|
+
cleanDecimatedDataset(dataset);
|
12855
13028
|
});
|
12856
13029
|
}
|
12857
13030
|
|
@@ -12925,6 +13098,7 @@
|
|
12925
13098
|
count = _getStartAndCountOfVi2.count;
|
12926
13099
|
|
12927
13100
|
if (count <= 4 * availableWidth) {
|
13101
|
+
cleanDecimatedDataset(dataset);
|
12928
13102
|
return;
|
12929
13103
|
}
|
12930
13104
|
|
@@ -13396,12 +13570,12 @@
|
|
13396
13570
|
var tpoints = target.points;
|
13397
13571
|
var parts = [];
|
13398
13572
|
|
13399
|
-
var
|
13400
|
-
|
13573
|
+
var _iterator9 = _createForOfIteratorHelper(segments),
|
13574
|
+
_step9;
|
13401
13575
|
|
13402
13576
|
try {
|
13403
|
-
for (
|
13404
|
-
var segment =
|
13577
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
13578
|
+
var segment = _step9.value;
|
13405
13579
|
var bounds = getBounds(property, points[segment.start], points[segment.end], segment.loop);
|
13406
13580
|
|
13407
13581
|
if (!target.segments) {
|
@@ -13416,22 +13590,22 @@
|
|
13416
13590
|
|
13417
13591
|
var targetSegments = _boundSegments(target, bounds);
|
13418
13592
|
|
13419
|
-
var
|
13420
|
-
|
13593
|
+
var _iterator10 = _createForOfIteratorHelper(targetSegments),
|
13594
|
+
_step10;
|
13421
13595
|
|
13422
13596
|
try {
|
13423
|
-
for (
|
13424
|
-
var tgt =
|
13597
|
+
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
13598
|
+
var tgt = _step10.value;
|
13425
13599
|
var subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);
|
13426
13600
|
|
13427
13601
|
var fillSources = _boundSegment(segment, points, subBounds);
|
13428
13602
|
|
13429
|
-
var
|
13430
|
-
|
13603
|
+
var _iterator11 = _createForOfIteratorHelper(fillSources),
|
13604
|
+
_step11;
|
13431
13605
|
|
13432
13606
|
try {
|
13433
|
-
for (
|
13434
|
-
var fillSource =
|
13607
|
+
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
13608
|
+
var fillSource = _step11.value;
|
13435
13609
|
parts.push({
|
13436
13610
|
source: fillSource,
|
13437
13611
|
target: tgt,
|
@@ -13440,21 +13614,21 @@
|
|
13440
13614
|
});
|
13441
13615
|
}
|
13442
13616
|
} catch (err) {
|
13443
|
-
|
13617
|
+
_iterator11.e(err);
|
13444
13618
|
} finally {
|
13445
|
-
|
13619
|
+
_iterator11.f();
|
13446
13620
|
}
|
13447
13621
|
}
|
13448
13622
|
} catch (err) {
|
13449
|
-
|
13623
|
+
_iterator10.e(err);
|
13450
13624
|
} finally {
|
13451
|
-
|
13625
|
+
_iterator10.f();
|
13452
13626
|
}
|
13453
13627
|
}
|
13454
13628
|
} catch (err) {
|
13455
|
-
|
13629
|
+
_iterator9.e(err);
|
13456
13630
|
} finally {
|
13457
|
-
|
13631
|
+
_iterator9.f();
|
13458
13632
|
}
|
13459
13633
|
|
13460
13634
|
return parts;
|
@@ -13494,16 +13668,16 @@
|
|
13494
13668
|
|
13495
13669
|
var segments = _segments(line, target, property);
|
13496
13670
|
|
13497
|
-
var
|
13498
|
-
|
13671
|
+
var _iterator12 = _createForOfIteratorHelper(segments),
|
13672
|
+
_step12;
|
13499
13673
|
|
13500
13674
|
try {
|
13501
|
-
for (
|
13502
|
-
var
|
13503
|
-
src =
|
13504
|
-
tgt =
|
13505
|
-
start =
|
13506
|
-
end =
|
13675
|
+
for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
|
13676
|
+
var _step12$value = _step12.value,
|
13677
|
+
src = _step12$value.source,
|
13678
|
+
tgt = _step12$value.target,
|
13679
|
+
start = _step12$value.start,
|
13680
|
+
end = _step12$value.end;
|
13507
13681
|
var _src$style = src.style;
|
13508
13682
|
_src$style = _src$style === void 0 ? {} : _src$style;
|
13509
13683
|
var _src$style$background = _src$style.backgroundColor,
|
@@ -13535,9 +13709,9 @@
|
|
13535
13709
|
ctx.restore();
|
13536
13710
|
}
|
13537
13711
|
} catch (err) {
|
13538
|
-
|
13712
|
+
_iterator12.e(err);
|
13539
13713
|
} finally {
|
13540
|
-
|
13714
|
+
_iterator12.f();
|
13541
13715
|
}
|
13542
13716
|
}
|
13543
13717
|
|
@@ -13548,7 +13722,7 @@
|
|
13548
13722
|
below = cfg.below,
|
13549
13723
|
area = cfg.area,
|
13550
13724
|
scale = cfg.scale;
|
13551
|
-
var property = line._loop ? 'angle' :
|
13725
|
+
var property = line._loop ? 'angle' : cfg.axis;
|
13552
13726
|
ctx.save();
|
13553
13727
|
|
13554
13728
|
if (property === 'x' && below !== above) {
|
@@ -13582,7 +13756,8 @@
|
|
13582
13756
|
function drawfill(ctx, source, area) {
|
13583
13757
|
var target = getTarget(source);
|
13584
13758
|
var line = source.line,
|
13585
|
-
scale = source.scale
|
13759
|
+
scale = source.scale,
|
13760
|
+
axis = source.axis;
|
13586
13761
|
var lineOpts = line.options;
|
13587
13762
|
var fillOption = lineOpts.fill;
|
13588
13763
|
var color = lineOpts.backgroundColor;
|
@@ -13601,7 +13776,8 @@
|
|
13601
13776
|
above: above,
|
13602
13777
|
below: below,
|
13603
13778
|
area: area,
|
13604
|
-
scale: scale
|
13779
|
+
scale: scale,
|
13780
|
+
axis: axis
|
13605
13781
|
});
|
13606
13782
|
unclipArea(ctx);
|
13607
13783
|
}
|
@@ -13625,6 +13801,7 @@
|
|
13625
13801
|
index: i,
|
13626
13802
|
fill: decodeFill(line, i, count),
|
13627
13803
|
chart: chart,
|
13804
|
+
axis: meta.controller.options.indexAxis,
|
13628
13805
|
scale: meta.vScale,
|
13629
13806
|
line: line
|
13630
13807
|
};
|
@@ -13644,19 +13821,37 @@
|
|
13644
13821
|
source.fill = resolveTarget(sources, i, options.propagate);
|
13645
13822
|
}
|
13646
13823
|
},
|
13647
|
-
|
13824
|
+
beforeDraw: function beforeDraw(chart, _args, options) {
|
13825
|
+
var draw = options.drawTime === 'beforeDraw';
|
13648
13826
|
var metasets = chart.getSortedVisibleDatasetMetas();
|
13649
13827
|
var area = chart.chartArea;
|
13650
13828
|
|
13651
13829
|
for (var i = metasets.length - 1; i >= 0; --i) {
|
13652
13830
|
var source = metasets[i].$filler;
|
13653
13831
|
|
13654
|
-
if (source) {
|
13655
|
-
|
13832
|
+
if (!source) {
|
13833
|
+
continue;
|
13834
|
+
}
|
13656
13835
|
|
13657
|
-
|
13658
|
-
|
13659
|
-
|
13836
|
+
source.line.updateControlPoints(area);
|
13837
|
+
|
13838
|
+
if (draw) {
|
13839
|
+
drawfill(chart.ctx, source, area);
|
13840
|
+
}
|
13841
|
+
}
|
13842
|
+
},
|
13843
|
+
beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {
|
13844
|
+
if (options.drawTime !== 'beforeDatasetsDraw') {
|
13845
|
+
return;
|
13846
|
+
}
|
13847
|
+
|
13848
|
+
var metasets = chart.getSortedVisibleDatasetMetas();
|
13849
|
+
|
13850
|
+
for (var i = metasets.length - 1; i >= 0; --i) {
|
13851
|
+
var source = metasets[i].$filler;
|
13852
|
+
|
13853
|
+
if (source) {
|
13854
|
+
drawfill(chart.ctx, source, chart.chartArea);
|
13660
13855
|
}
|
13661
13856
|
}
|
13662
13857
|
},
|
@@ -13926,12 +14121,12 @@
|
|
13926
14121
|
|
13927
14122
|
var left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);
|
13928
14123
|
|
13929
|
-
var
|
13930
|
-
|
14124
|
+
var _iterator13 = _createForOfIteratorHelper(hitboxes),
|
14125
|
+
_step13;
|
13931
14126
|
|
13932
14127
|
try {
|
13933
|
-
for (
|
13934
|
-
var hitbox =
|
14128
|
+
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
14129
|
+
var hitbox = _step13.value;
|
13935
14130
|
|
13936
14131
|
if (row !== hitbox.row) {
|
13937
14132
|
row = hitbox.row;
|
@@ -13943,21 +14138,21 @@
|
|
13943
14138
|
left += hitbox.width + padding;
|
13944
14139
|
}
|
13945
14140
|
} catch (err) {
|
13946
|
-
|
14141
|
+
_iterator13.e(err);
|
13947
14142
|
} finally {
|
13948
|
-
|
14143
|
+
_iterator13.f();
|
13949
14144
|
}
|
13950
14145
|
} else {
|
13951
14146
|
var col = 0;
|
13952
14147
|
|
13953
14148
|
var top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);
|
13954
14149
|
|
13955
|
-
var
|
13956
|
-
|
14150
|
+
var _iterator14 = _createForOfIteratorHelper(hitboxes),
|
14151
|
+
_step14;
|
13957
14152
|
|
13958
14153
|
try {
|
13959
|
-
for (
|
13960
|
-
var _hitbox =
|
14154
|
+
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
14155
|
+
var _hitbox = _step14.value;
|
13961
14156
|
|
13962
14157
|
if (_hitbox.col !== col) {
|
13963
14158
|
col = _hitbox.col;
|
@@ -13969,9 +14164,9 @@
|
|
13969
14164
|
top += _hitbox.height + padding;
|
13970
14165
|
}
|
13971
14166
|
} catch (err) {
|
13972
|
-
|
14167
|
+
_iterator14.e(err);
|
13973
14168
|
} finally {
|
13974
|
-
|
14169
|
+
_iterator14.f();
|
13975
14170
|
}
|
13976
14171
|
}
|
13977
14172
|
}
|
@@ -14571,6 +14766,10 @@
|
|
14571
14766
|
};
|
14572
14767
|
},
|
14573
14768
|
nearest: function nearest(items, eventPosition) {
|
14769
|
+
if (!items.length) {
|
14770
|
+
return false;
|
14771
|
+
}
|
14772
|
+
|
14574
14773
|
var x = eventPosition.x;
|
14575
14774
|
var y = eventPosition.y;
|
14576
14775
|
var minDistance = Number.POSITIVE_INFINITY;
|
@@ -15520,9 +15719,11 @@
|
|
15520
15719
|
}, {
|
15521
15720
|
key: "_positionChanged",
|
15522
15721
|
value: function _positionChanged(active, e) {
|
15523
|
-
var
|
15524
|
-
|
15525
|
-
|
15722
|
+
var caretX = this.caretX,
|
15723
|
+
caretY = this.caretY,
|
15724
|
+
options = this.options;
|
15725
|
+
var position = positioners[options.position].call(this, active, e);
|
15726
|
+
return position !== false && (caretX !== position.x || caretY !== position.y);
|
15526
15727
|
}
|
15527
15728
|
}]);
|
15528
15729
|
|
@@ -15901,7 +16102,9 @@
|
|
15901
16102
|
max = generationOptions.max,
|
15902
16103
|
precision = generationOptions.precision,
|
15903
16104
|
count = generationOptions.count,
|
15904
|
-
maxTicks = generationOptions.maxTicks
|
16105
|
+
maxTicks = generationOptions.maxTicks,
|
16106
|
+
maxDigits = generationOptions.maxDigits,
|
16107
|
+
horizontal = generationOptions.horizontal;
|
15905
16108
|
var unit = step || 1;
|
15906
16109
|
var maxSpaces = maxTicks - 1;
|
15907
16110
|
var rmin = dataRange.min,
|
@@ -15909,6 +16112,7 @@
|
|
15909
16112
|
var minDefined = !isNullOrUndef(min);
|
15910
16113
|
var maxDefined = !isNullOrUndef(max);
|
15911
16114
|
var countDefined = !isNullOrUndef(count);
|
16115
|
+
var minSpacing = (rmax - rmin) / maxDigits;
|
15912
16116
|
var spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;
|
15913
16117
|
var factor, niceMin, niceMax, numSpaces;
|
15914
16118
|
|
@@ -15968,7 +16172,7 @@
|
|
15968
16172
|
j++;
|
15969
16173
|
}
|
15970
16174
|
|
15971
|
-
if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min,
|
16175
|
+
if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, minSpacing * (horizontal ? ('' + min).length : 1))) {
|
15972
16176
|
j++;
|
15973
16177
|
}
|
15974
16178
|
}
|
@@ -15980,7 +16184,7 @@
|
|
15980
16184
|
}
|
15981
16185
|
|
15982
16186
|
if (maxDefined) {
|
15983
|
-
if (almostEquals(ticks[ticks.length - 1].value, max,
|
16187
|
+
if (almostEquals(ticks[ticks.length - 1].value, max, minSpacing * (horizontal ? ('' + max).length : 1))) {
|
15984
16188
|
ticks[ticks.length - 1].value = max;
|
15985
16189
|
} else {
|
15986
16190
|
ticks.push({
|
@@ -16114,9 +16318,12 @@
|
|
16114
16318
|
max: opts.max,
|
16115
16319
|
precision: tickOpts.precision,
|
16116
16320
|
step: tickOpts.stepSize,
|
16117
|
-
count: tickOpts.count
|
16321
|
+
count: tickOpts.count,
|
16322
|
+
maxDigits: me._maxDigits(),
|
16323
|
+
horizontal: me.isHorizontal()
|
16118
16324
|
};
|
16119
|
-
var
|
16325
|
+
var dataRange = me._range || me;
|
16326
|
+
var ticks = generateTicks$1(numericGeneratorOptions, dataRange);
|
16120
16327
|
|
16121
16328
|
if (opts.bounds === 'ticks') {
|
16122
16329
|
_setMinAndMaxByKey(ticks, me, 'value');
|
@@ -16896,6 +17103,9 @@
|
|
16896
17103
|
ctx.restore();
|
16897
17104
|
}
|
16898
17105
|
}
|
17106
|
+
}, {
|
17107
|
+
key: "drawBorder",
|
17108
|
+
value: function drawBorder() {}
|
16899
17109
|
}, {
|
16900
17110
|
key: "drawLabels",
|
16901
17111
|
value: function drawLabels() {
|
@@ -16962,8 +17172,6 @@
|
|
16962
17172
|
startAngle: 0,
|
16963
17173
|
ticks: {
|
16964
17174
|
showLabelBackdrop: true,
|
16965
|
-
backdropColor: 'rgba(255,255,255,0.75)',
|
16966
|
-
backdropPadding: 2,
|
16967
17175
|
callback: Ticks.formatters.numeric
|
16968
17176
|
},
|
16969
17177
|
pointLabels: {
|
@@ -17047,10 +17255,10 @@
|
|
17047
17255
|
}
|
17048
17256
|
|
17049
17257
|
var adapter = scale._adapter;
|
17050
|
-
var
|
17051
|
-
|
17052
|
-
round =
|
17053
|
-
isoWeekday =
|
17258
|
+
var _scale$_parseOpts = scale._parseOpts,
|
17259
|
+
parser = _scale$_parseOpts.parser,
|
17260
|
+
round = _scale$_parseOpts.round,
|
17261
|
+
isoWeekday = _scale$_parseOpts.isoWeekday;
|
17054
17262
|
var value = input;
|
17055
17263
|
|
17056
17264
|
if (typeof parser === 'function') {
|
@@ -17175,6 +17383,7 @@
|
|
17175
17383
|
_this18._majorUnit = undefined;
|
17176
17384
|
_this18._offsets = {};
|
17177
17385
|
_this18._normalized = false;
|
17386
|
+
_this18._parseOpts = undefined;
|
17178
17387
|
return _this18;
|
17179
17388
|
}
|
17180
17389
|
|
@@ -17184,6 +17393,11 @@
|
|
17184
17393
|
var time = scaleOpts.time || (scaleOpts.time = {});
|
17185
17394
|
var adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);
|
17186
17395
|
mergeIf(time.displayFormats, adapter.formats());
|
17396
|
+
this._parseOpts = {
|
17397
|
+
parser: time.parser,
|
17398
|
+
round: time.round,
|
17399
|
+
isoWeekday: time.isoWeekday
|
17400
|
+
};
|
17187
17401
|
|
17188
17402
|
_get(_getPrototypeOf(TimeScale.prototype), "init", this).call(this, scaleOpts);
|
17189
17403
|
|
@@ -17766,8 +17980,8 @@
|
|
17766
17980
|
*
|
17767
17981
|
* @param {Date|Number} date - the date to be changed
|
17768
17982
|
* @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
|
17769
|
-
* @returns {Date} the new date with the days added
|
17770
|
-
* @throws {TypeError} 2 arguments required
|
17983
|
+
* @returns {Date} - the new date with the days added
|
17984
|
+
* @throws {TypeError} - 2 arguments required
|
17771
17985
|
*
|
17772
17986
|
* @example
|
17773
17987
|
* // Add 10 days to 1 September 2014:
|
@@ -17831,7 +18045,7 @@
|
|
17831
18045
|
}
|
17832
18046
|
|
17833
18047
|
var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for
|
17834
|
-
// month, day, etc. For example, new Date(2020,
|
18048
|
+
// month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and
|
17835
18049
|
// new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we
|
17836
18050
|
// want except that dates will wrap around the end of a month, meaning that
|
17837
18051
|
// new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So
|
@@ -17943,12 +18157,12 @@
|
|
17943
18157
|
*
|
17944
18158
|
* @example
|
17945
18159
|
* // The start of a week for 2 September 2014 11:55:00:
|
17946
|
-
*
|
18160
|
+
* const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))
|
17947
18161
|
* //=> Sun Aug 31 2014 00:00:00
|
17948
18162
|
*
|
17949
18163
|
* @example
|
17950
18164
|
* // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:
|
17951
|
-
*
|
18165
|
+
* const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })
|
17952
18166
|
* //=> Mon Sep 01 2014 00:00:00
|
17953
18167
|
*/
|
17954
18168
|
|
@@ -18891,6 +19105,36 @@
|
|
18891
19105
|
return result === 0 ? 0 : result;
|
18892
19106
|
}
|
18893
19107
|
|
19108
|
+
/**
|
19109
|
+
* @name startOfMinute
|
19110
|
+
* @category Minute Helpers
|
19111
|
+
* @summary Return the start of a minute for the given date.
|
19112
|
+
*
|
19113
|
+
* @description
|
19114
|
+
* Return the start of a minute for the given date.
|
19115
|
+
* The result will be in the local timezone.
|
19116
|
+
*
|
19117
|
+
* ### v2.0.0 breaking changes:
|
19118
|
+
*
|
19119
|
+
* - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
|
19120
|
+
*
|
19121
|
+
* @param {Date|Number} date - the original date
|
19122
|
+
* @returns {Date} the start of a minute
|
19123
|
+
* @throws {TypeError} 1 argument required
|
19124
|
+
*
|
19125
|
+
* @example
|
19126
|
+
* // The start of a minute for 1 December 2014 22:15:45.400:
|
19127
|
+
* const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))
|
19128
|
+
* //=> Mon Dec 01 2014 22:15:00
|
19129
|
+
*/
|
19130
|
+
|
19131
|
+
function startOfMinute(dirtyDate) {
|
19132
|
+
requiredArgs(1, arguments);
|
19133
|
+
var date = toDate(dirtyDate);
|
19134
|
+
date.setSeconds(0, 0);
|
19135
|
+
return date;
|
19136
|
+
}
|
19137
|
+
|
18894
19138
|
/**
|
18895
19139
|
* @name startOfQuarter
|
18896
19140
|
* @category Quarter Helpers
|
@@ -21121,7 +21365,7 @@
|
|
21121
21365
|
* | | ss | 00, 01, ..., 59 | |
|
21122
21366
|
* | Fraction of second | S | 0, 1, ..., 9 | |
|
21123
21367
|
* | | SS | 00, 01, ..., 99 | |
|
21124
|
-
* | | SSS | 000,
|
21368
|
+
* | | SSS | 000, 001, ..., 999 | |
|
21125
21369
|
* | | SSSS | ... | 3 |
|
21126
21370
|
* | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |
|
21127
21371
|
* | | XX | -0800, +0530, Z | |
|
@@ -23536,36 +23780,6 @@
|
|
23536
23780
|
return date;
|
23537
23781
|
}
|
23538
23782
|
|
23539
|
-
/**
|
23540
|
-
* @name startOfMinute
|
23541
|
-
* @category Minute Helpers
|
23542
|
-
* @summary Return the start of a minute for the given date.
|
23543
|
-
*
|
23544
|
-
* @description
|
23545
|
-
* Return the start of a minute for the given date.
|
23546
|
-
* The result will be in the local timezone.
|
23547
|
-
*
|
23548
|
-
* ### v2.0.0 breaking changes:
|
23549
|
-
*
|
23550
|
-
* - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
|
23551
|
-
*
|
23552
|
-
* @param {Date|Number} date - the original date
|
23553
|
-
* @returns {Date} the start of a minute
|
23554
|
-
* @throws {TypeError} 1 argument required
|
23555
|
-
*
|
23556
|
-
* @example
|
23557
|
-
* // The start of a minute for 1 December 2014 22:15:45.400:
|
23558
|
-
* const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))
|
23559
|
-
* //=> Mon Dec 01 2014 22:15:00
|
23560
|
-
*/
|
23561
|
-
|
23562
|
-
function startOfMinute(dirtyDate) {
|
23563
|
-
requiredArgs(1, arguments);
|
23564
|
-
var date = toDate(dirtyDate);
|
23565
|
-
date.setSeconds(0, 0);
|
23566
|
-
return date;
|
23567
|
-
}
|
23568
|
-
|
23569
23783
|
/**
|
23570
23784
|
* @name startOfSecond
|
23571
23785
|
* @category Second Helpers
|