analyser.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /* global Chart */
  2. 'use strict';
  3. (function() {
  4. Chart.plugins.register({
  5. id: 'samples-filler-analyser',
  6. beforeInit: function(chart, options) {
  7. this.element = document.getElementById(options.target);
  8. },
  9. afterUpdate: function(chart) {
  10. var datasets = chart.data.datasets;
  11. var element = this.element;
  12. var stats = [];
  13. var meta, i, ilen, dataset;
  14. if (!element) {
  15. return;
  16. }
  17. for (i = 0, ilen = datasets.length; i < ilen; ++i) {
  18. meta = chart.getDatasetMeta(i).$filler;
  19. if (meta) {
  20. dataset = datasets[i];
  21. stats.push({
  22. fill: dataset.fill,
  23. target: meta.fill,
  24. visible: meta.visible,
  25. index: i
  26. });
  27. }
  28. }
  29. this.element.innerHTML = '<table>' +
  30. '<tr>' +
  31. '<th>Dataset</th>' +
  32. '<th>Fill</th>' +
  33. '<th>Target (visibility)</th>' +
  34. '</tr>' +
  35. stats.map(function(stat) {
  36. var target = stat.target;
  37. var row =
  38. '<td><b>' + stat.index + '</b></td>' +
  39. '<td>' + JSON.stringify(stat.fill) + '</td>';
  40. if (target === false) {
  41. target = 'none';
  42. } else if (isFinite(target)) {
  43. target = 'dataset ' + target;
  44. } else {
  45. target = 'boundary "' + target + '"';
  46. }
  47. if (stat.visible) {
  48. row += '<td>' + target + '</td>';
  49. } else {
  50. row += '<td>(hidden)</td>';
  51. }
  52. return '<tr>' + row + '</tr>';
  53. }).join('') + '</table>';
  54. }
  55. });
  56. }());