utils.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. 'use strict';
  2. (function(global) {
  3. var Samples = global.Samples || (global.Samples = {});
  4. var Color = global.Color;
  5. function fallback(/* values ... */) {
  6. var ilen = arguments.length;
  7. var i = 0;
  8. var v;
  9. for (; i < ilen; ++i) {
  10. v = arguments[i];
  11. if (v !== undefined) {
  12. return v;
  13. }
  14. }
  15. }
  16. Samples.COLORS = [
  17. '#FF3784',
  18. '#36A2EB',
  19. '#4BC0C0',
  20. '#F77825',
  21. '#9966FF',
  22. '#00A8C6',
  23. '#379F7A',
  24. '#CC2738',
  25. '#8B628A',
  26. '#8FBE00',
  27. '#606060'
  28. ];
  29. // Adapted from http://indiegamr.com/generate-repeatable-random-numbers-in-js/
  30. Samples.srand = function(seed) {
  31. this._seed = seed;
  32. };
  33. Samples.rand = function(min, max) {
  34. var seed = this._seed;
  35. min = min === undefined ? 0 : min;
  36. max = max === undefined ? 1 : max;
  37. this._seed = (seed * 9301 + 49297) % 233280;
  38. return min + (this._seed / 233280) * (max - min);
  39. };
  40. Samples.numbers = function(config) {
  41. var cfg = config || {};
  42. var min = fallback(cfg.min, 0);
  43. var max = fallback(cfg.max, 1);
  44. var from = fallback(cfg.from, []);
  45. var count = fallback(cfg.count, 8);
  46. var decimals = fallback(cfg.decimals, 8);
  47. var continuity = fallback(cfg.continuity, 1);
  48. var dfactor = Math.pow(10, decimals) || 0;
  49. var data = [];
  50. var i, value;
  51. for (i = 0; i < count; ++i) {
  52. value = (from[i] || 0) + this.rand(min, max);
  53. if (this.rand() <= continuity) {
  54. data.push(Math.round(dfactor * value) / dfactor);
  55. } else {
  56. data.push(null);
  57. }
  58. }
  59. return data;
  60. };
  61. Samples.color = function(offset) {
  62. var count = Samples.COLORS.length;
  63. var index = offset === undefined ? ~~Samples.rand(0, count) : offset;
  64. return Samples.COLORS[index % count];
  65. };
  66. Samples.colors = function(config) {
  67. var cfg = config || {};
  68. var color = cfg.color || Samples.color(0);
  69. var count = cfg.count !== undefined ? cfg.count : 8;
  70. var method = cfg.mode ? Color.prototype[cfg.mode] : null;
  71. var values = [];
  72. var i, f, v;
  73. for (i = 0; i < count; ++i) {
  74. f = i / count;
  75. if (method) {
  76. v = method.call(Color(color), f).rgbString();
  77. } else {
  78. v = Samples.color(i);
  79. }
  80. values.push(v);
  81. }
  82. return values;
  83. };
  84. Samples.transparentize = function(color, opacity) {
  85. var alpha = opacity === undefined ? 0.5 : 1 - opacity;
  86. return Color(color).alpha(alpha).rgbString();
  87. };
  88. // INITIALIZATION
  89. Samples.srand(Date.now());
  90. var root = (function() {
  91. var scripts = document.getElementsByTagName('script');
  92. var script = scripts[scripts.length - 1];
  93. var path = script.src;
  94. return path.substr(0, path.lastIndexOf('/') + 1);
  95. }());
  96. window.addEventListener('DOMContentLoaded', function load() {
  97. window.removeEventListener('DOMContentLoaded', load, true);
  98. var header = document.getElementById('header');
  99. var info = global.SAMPLE_INFO;
  100. if (header && info) {
  101. var group = info.group;
  102. var name = info.name;
  103. var desc = info.desc;
  104. document.title = name + (group ? ' / ' + group : '') + ' / chartjs-plugin-datalabels';
  105. header.innerHTML =
  106. '<div class="scope">' +
  107. '<a href="' + root + 'index.html">&laquo; chartjs-plugin-datalabels</a>' +
  108. '</div>' +
  109. '<div class="title">' +
  110. '<span class="group">' + group + ' / </span>' +
  111. '<span class="name">' + name + '</span>' +
  112. (desc ? '<div class="desc">' + desc + '</div>' : '') +
  113. '</div>';
  114. }
  115. }, true);
  116. // Google Analytics
  117. /* eslint-disable */
  118. if (['localhost', '127.0.0.1'].indexOf(document.location.hostname) === -1) {
  119. (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  120. (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  121. m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  122. })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  123. ga('create', 'UA-99068522-2', 'auto');
  124. ga('send', 'pageview');
  125. }
  126. /* eslint-enable */
  127. }(this));