]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Fix pie custom tooltip sample 2659/head
authorEvert Timberg <evert.timberg+github@gmail.com>
Sat, 28 May 2016 14:48:33 +0000 (10:48 -0400)
committerEvert Timberg <evert.timberg+github@gmail.com>
Sat, 28 May 2016 14:48:33 +0000 (10:48 -0400)
samples/pie-customTooltips.html

index 2de9c897efa0780518a3af5b4ee118e3b766f906..2f59165398340f26353c0b5002eaf979ef054907 100644 (file)
         text-align: center;
     }
     #chartjs-tooltip {
-        opacity: 1;
-        position: absolute;
-        background: rgba(0, 0, 0, .7);
-        color: white;
-        padding: 3px;
-        border-radius: 3px;
-        -webkit-transition: all .1s ease;
-        transition: all .1s ease;
-        pointer-events: none;
-        -webkit-transform: translate(-50%, 0);
-        transform: translate(-50%, 0);
+      opacity: 1;
+      position: absolute;
+      background: rgba(0, 0, 0, .7);
+      color: white;
+      border-radius: 3px;
+      -webkit-transition: all .1s ease;
+      transition: all .1s ease;
+      pointer-events: none;
+      -webkit-transform: translate(-50%, 0);
+      transform: translate(-50%, 0);
     }
-    #chartjs-tooltip.below {
-        -webkit-transform: translate(-50%, 0);
-        transform: translate(-50%, 0);
-    }
-    #chartjs-tooltip.below:before {
-        border: solid;
-        border-color: #111 transparent;
-        border-color: rgba(0, 0, 0, .8) transparent;
-        border-width: 0 8px 8px 8px;
-        bottom: 1em;
-        content: "";
-        display: block;
-        left: 50%;
-        position: absolute;
-        z-index: 99;
-        -webkit-transform: translate(-50%, -100%);
-        transform: translate(-50%, -100%);
-    }
-    #chartjs-tooltip.above {
-        -webkit-transform: translate(-50%, -100%);
-        transform: translate(-50%, -100%);
-    }
-    #chartjs-tooltip.above:before {
-        border: solid;
-        border-color: #111 transparent;
-        border-color: rgba(0, 0, 0, .8) transparent;
-        border-width: 8px 8px 0 8px;
-        bottom: 1em;
-        content: "";
-        display: block;
-        left: 50%;
-        top: 100%;
-        position: absolute;
-        z-index: 99;
-        -webkit-transform: translate(-50%, 0);
-        transform: translate(-50%, 0);
+
+    .chartjs-tooltip-key {
+      display: inline-block;
+      width: 10px;
+      height: 10px;
     }
     </style>
 </head>
 
 <body>
-    <div id="canvas-holder">
+    <div id="canvas-holder" style="width: 50px;">
         <canvas id="chart-area1" width="50" height="50" />
     </div>
-    <div id="canvas-holder">
+    <div id="canvas-holder" style="width: 300px;">
         <canvas id="chart-area2" width="300" height="300" />
     </div>
 
 
 
     <script>
-    Chart.defaults.global.customTooltips = function(tooltip) {
+    Chart.defaults.global.tooltips.custom = function(tooltip) {
 
        // Tooltip Element
-        var tooltipEl = $('#chartjs-tooltip');
-
-        // Hide if no tooltip
-        if (!tooltip) {
-            tooltipEl.css({
-                opacity: 0
-            });
-            return;
-        }
-
-        // Set caret Position
-        tooltipEl.removeClass('above below');
-        tooltipEl.addClass(tooltip.yAlign);
+      var tooltipEl = $('#chartjs-tooltip');
 
-        // Set Text
-        tooltipEl.html(tooltip.text);
+      if (!tooltipEl[0]) {
+        $('body').append('<div id="chartjs-tooltip"></div>');
+        tooltipEl = $('#chartjs-tooltip');
+      }
 
-        // Find Y Location on page
-        var top;
+      // Hide if no tooltip
+      if (!tooltip.opacity) {
+        tooltipEl.css({
+          opacity: 0
+        });
+        $('.chartjs-wrap canvas')
+          .each(function(index, el) {
+            $(el).css('cursor', 'default');
+          });
+        return;
+      }
+
+      $(this._chart.canvas).css('cursor', 'pointer');
+
+      // Set caret Position
+      tooltipEl.removeClass('above below no-transform');
+      if (tooltip.yAlign) {
+        tooltipEl.addClass(tooltip.yAlign);
+      } else {
+        tooltipEl.addClass('no-transform');
+      }
+
+      // Set Text
+      if (tooltip.body) {
+        var innerHtml = [
+          (tooltip.beforeTitle || []).join('\n'), (tooltip.title || []).join('\n'), (tooltip.afterTitle || []).join('\n'), (tooltip.beforeBody || []).join('\n'), (tooltip.body || []).join('\n'), (tooltip.afterBody || []).join('\n'), (tooltip.beforeFooter || [])
+          .join('\n'), (tooltip.footer || []).join('\n'), (tooltip.afterFooter || []).join('\n')
+        ];
+        tooltipEl.html(innerHtml.join('\n'));
+      }
+
+      // Find Y Location on page
+      var top = 0;
+      if (tooltip.yAlign) {
         if (tooltip.yAlign == 'above') {
-            top = tooltip.y - tooltip.caretHeight - tooltip.caretPadding;
+          top = tooltip.y - tooltip.caretHeight - tooltip.caretPadding;
         } else {
-            top = tooltip.y + tooltip.caretHeight + tooltip.caretPadding;
+          top = tooltip.y + tooltip.caretHeight + tooltip.caretPadding;
         }
-
-        //Function to find absolution position of the element and not just it's relative position
-        function getPosition (element) {
-            var top = 0, left = 0;
-            do {
-                top += element.offsetTop || 0;
-                left += element.offsetLeft || 0;
-                element = element.offsetParent;
-            } while (element);
-
-            return {
-                top: top,
-                left: left
-            };
-        };
-
-        //Finding absolute position of the chart canvas
-        var position = getPosition(tooltip.chart.canvas)
-        
-        // Display, position, and set styles for font
-        tooltipEl.css({
-            opacity: 1,
-            left: position.left + tooltip.x + 'px',
-            top: position.top + top + 'px',
-            fontFamily: tooltip.fontFamily,
-            fontSize: tooltip.fontSize,
-            fontStyle: tooltip.fontStyle,
-        });
+      }
+
+      var position = $(this._chart.canvas)[0].getBoundingClientRect();
+
+      // Display, position, and set styles for font
+      tooltipEl.css({
+        opacity: 1,
+        width: tooltip.width ? (tooltip.width + 'px') : 'auto',
+        left: position.left + tooltip.x + 'px',
+        top: position.top + top + 'px',
+        fontFamily: tooltip._fontFamily,
+        fontSize: tooltip.fontSize,
+        fontStyle: tooltip._fontStyle,
+        padding: tooltip.yPadding + 'px ' + tooltip.xPadding + 'px',
+      });
     };
 
-    var pieData = [{
-        value: 300,
-        color: "#F7464A",
-        highlight: "#FF5A5E",
-        label: "Red"
-    }, {
-        value: 50,
-        color: "#46BFBD",
-        highlight: "#5AD3D1",
-        label: "Green"
-    }, {
-        value: 100,
-        color: "#FDB45C",
-        highlight: "#FFC870",
-        label: "Yellow"
-    }, {
-        value: 40,
-        color: "#949FB1",
-        highlight: "#A8B3C5",
-        label: "Grey"
-    }, {
-        value: 120,
-        color: "#4D5360",
-        highlight: "#616774",
-        label: "Dark Grey"
-    }];
+    var config = {
+        type: 'pie',
+        data: {
+            datasets: [{
+                data: [300, 50, 100, 40, 10],
+                backgroundColor: [
+                    "#F7464A",
+                    "#46BFBD",
+                    "#FDB45C",
+                    "#949FB1",
+                    "#4D5360",
+                ],
+            }],
+            labels: [
+                "Red",
+                "Green",
+                "Yellow",
+                "Grey",
+                "Dark Grey"
+            ]
+        },
+        options: {
+            responsive: true,
+            legend: {
+                display: false
+            },
+            tooltips: {
+                enabled: false,
+            }
+        }
+    };
 
     window.onload = function() {
         var ctx1 = document.getElementById("chart-area1").getContext("2d");
-        window.myPie = new Chart(ctx1).Pie(pieData);
+        window.myPie = new Chart(ctx1, config);
 
         var ctx2 = document.getElementById("chart-area2").getContext("2d");
-        window.myPie = new Chart(ctx2).Pie(pieData);
+        window.myPie = new Chart(ctx2, config);
     };
     </script>
 </body>