]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Labels are now optional for the time scale.
authoretimberg <evert.timberg@gmail.com>
Mon, 19 Oct 2015 23:20:08 +0000 (19:20 -0400)
committeretimberg <evert.timberg@gmail.com>
Mon, 19 Oct 2015 23:20:08 +0000 (19:20 -0400)
samples/line-time-point-data.html [new file with mode: 0644]
src/scales/scale.time.js

diff --git a/samples/line-time-point-data.html b/samples/line-time-point-data.html
new file mode 100644 (file)
index 0000000..d820120
--- /dev/null
@@ -0,0 +1,164 @@
+<!doctype html>
+<html>
+
+<head>
+    <title>Time Scale Point Data</title>
+    <script src="../node_modules/moment/min/moment.min.js"></script>
+    <script src="../Chart.js"></script>
+    <script src="../node_modules/jquery/dist/jquery.min.js"></script>
+    <style>
+        canvas {
+            -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, .5);
+        }
+    </style>
+</head>
+
+<body>
+    <div style="width:100%;">
+        <canvas id="canvas" style="width:100%;height:100%"></canvas>
+    </div>
+    <br>
+    <br>
+    <button id="randomizeData">Randomize Data</button>
+    <button id="addData">Add Data</button>
+    <button id="removeData">Remove Data</button>
+    <div>
+        <h3>Legend</h3>
+        <div id="legendContainer">
+        </div>
+    </div>
+    <script>
+        var randomScalingFactor = function() {
+            return Math.round(Math.random() * 100 * (Math.random() > 0.5 ? -1 : 1));
+        };
+        var randomColorFactor = function() {
+            return Math.round(Math.random() * 255);
+        };
+        var randomColor = function(opacity) {
+            return 'rgba(' + randomColorFactor() + ',' + randomColorFactor() + ',' + randomColorFactor() + ',' + (opacity || '.3') + ')';
+        };
+        var newDate = function(days) {
+            var date = new Date();
+            return date.setDate(date.getDate() + days);
+        };
+        var newTimestamp = function(days) {
+            return Date.now() - days * 100000;
+        };
+
+        var config = {
+            type: 'line',
+            data: {
+                datasets: [{
+                    label: "Dataset with point data",
+                    data: [{
+                        x: "12/31/2014 06:00",
+                        y: randomScalingFactor()
+                    }, {
+                        x: "01/04/2015 13:00",
+                        y: randomScalingFactor()
+                    }, {
+                        x: "01/07/2015 01:15",
+                        y: randomScalingFactor()
+                    }, {
+                        x: "01/15/2015 01:15",
+                        y: randomScalingFactor()
+                    }],
+                    fill: false
+                }]
+            },
+            options: {
+                responsive: true,
+                scales: {
+                    xAxes: [{
+                        type: "time",
+                        display: true,
+                        time: {
+                            format: 'MM/DD/YYYY HH:mm',
+                            // round: 'day'
+                        },
+                        scaleLabel: {
+                            show: true,
+                            labelString: 'Date'
+                        }
+                    }, ],
+                    yAxes: [{
+                        display: true,
+                        scaleLabel: {
+                            show: true,
+                            labelString: 'value'
+                        }
+                    }]
+                },
+                elements: {
+                    line: {
+                        tension: 0.3
+                    }
+                },
+            }
+        };
+
+        $.each(config.data.datasets, function(i, dataset) {
+            dataset.borderColor = randomColor(0.4);
+            dataset.backgroundColor = randomColor(0.5);
+            dataset.pointBorderColor = randomColor(0.7);
+            dataset.pointBackgroundColor = randomColor(0.5);
+            dataset.pointBorderWidth = 1;
+        });
+
+        console.log(config.data);
+
+        window.onload = function() {
+            var ctx = document.getElementById("canvas").getContext("2d");
+            window.myLine = new Chart(ctx, config);
+
+            updateLegend();
+        };
+
+        function updateLegend() {
+            $legendContainer = $('#legendContainer');
+            $legendContainer.empty();
+            $legendContainer.append(window.myLine.generateLegend());
+        }
+
+        $('#randomizeData').click(function() {
+            $.each(config.data.datasets, function(i, dataset) {
+                dataset.data = dataset.data.map(function() {
+                    return randomScalingFactor();
+                });
+            });
+
+            window.myLine.update();
+            updateLegend();
+        });
+
+        $('#addData').click(function() {
+            if (config.data.datasets.length > 0) {
+                var newTime = myLine.scales['x-axis-0'].labelMoments[0][myLine.scales['x-axis-0'].labelMoments[0].length - 1]
+                    .clone()
+                    .add(1, 'day')
+                    .format('MM/DD/YYYY HH:mm');
+
+                for (var index = 0; index < config.data.datasets.length; ++index) {
+                    config.data.datasets[index].data.push({
+                        x: newTime,
+                        y: randomScalingFactor()
+                    });
+                }
+
+                window.myLine.update();
+                updateLegend();
+            }
+        });
+
+        $('#removeData').click(function() {
+            config.data.datasets.forEach(function(dataset, datasetIndex) {
+                dataset.data.pop();
+            });
+
+            window.myLine.update();
+            updateLegend();
+        });
+    </script>
+</body>
+
+</html>
index 2ed211528b7fc5fe0c0e314cf3b6dc04cbfef47d..ad1365dda747974a856c34a09df629b766b41874 100644 (file)
                        // Only parse these once. If the dataset does not have data as x,y pairs, we will use
                        // these 
                        var scaleLabelMoments = [];
-                       helpers.each(this.data.labels, function(label, index) {
-                               var labelMoment = this.parseTime(label);
-                               if (this.options.time.round) {
-                                       labelMoment.startOf(this.options.time.round);
-                               }
-                               scaleLabelMoments.push(labelMoment);
-                       }, this);
+                       if (this.data.labels && this.data.labels.length > 0) {
+                               helpers.each(this.data.labels, function(label, index) {
+                                       var labelMoment = this.parseTime(label);
+                                       if (this.options.time.round) {
+                                               labelMoment.startOf(this.options.time.round);
+                                       }
+                                       scaleLabelMoments.push(labelMoment);
+                               }, this);
 
-                       this.firstTick = moment.min.call(this, scaleLabelMoments);
-                       this.lastTick = moment.max.call(this, scaleLabelMoments);
+                               this.firstTick = moment.min.call(this, scaleLabelMoments);
+                               this.lastTick = moment.max.call(this, scaleLabelMoments);
+                       } else {
+                               this.firstTick = null;
+                               this.lastTick = null;
+                       }
 
                        helpers.each(this.data.datasets, function(dataset, datasetIndex) {
                                var momentsForDataset = [];
                                                momentsForDataset.push(labelMoment);
 
                                                // May have gone outside the scale ranges, make sure we keep the first and last ticks updated
-                                               this.firstTick = moment.min(this.firstTick, labelMoment);
-                                               this.lastTick = moment.max(this.lastTick, labelMoment);
+                                               this.firstTick = this.firstTick !== null ? moment.min(this.firstTick, labelMoment) : labelMoment;
+                                               this.lastTick = this.lastTick !== null ? moment.max(this.lastTick, labelMoment) : labelMoment;
                                        }, this);
                                } else {
                                        // We have no labels. Use the ones from the scale
                },
                // Get tooltip label
                getLabelForIndex: function(index, datasetIndex) {
-                       var label = this.data.labels[index];
+                       var label = this.data.labels && index < this.data.labels.length ? this.data.labels[index] : '';
 
                        if (typeof this.data.datasets[datasetIndex].data[0] === 'object') {
                                label = this.getRightValue(this.data.datasets[datasetIndex].data[index]);