helpers.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. AmCharts.RB.Helpers = {
  2. create_unit: function(num, unit)
  3. {
  4. // If the number doesn't end with a unit already, add the given one
  5. return num.toString().match(/\d$/) ? num + unit : num;
  6. },
  7. add_container_if_needed: function(id, width, height)
  8. {
  9. var container = document.getElementById(id);
  10. if (!container) {
  11. container = document.createElement("DIV");
  12. container.className = 'chart';
  13. container.id = id;
  14. if (width) container.style.width = this.create_unit(width, 'px');
  15. container.style.height = this.create_unit(height, 'px');
  16. // Add the container before the last script
  17. var scripts = document.getElementsByTagName('script');
  18. var this_script = scripts[scripts.length - 1];
  19. this_script.parentNode.insertBefore(container, this_script);
  20. }
  21. return container;
  22. },
  23. add_blanket: function(container)
  24. {
  25. var wrapper = document.createElement("DIV"),
  26. blanket = document.createElement("DIV"),
  27. blanket_container = document.createElement("DIV"),
  28. blanket_outer = document.createElement("DIV"),
  29. blanket_inner = document.createElement("DIV");
  30. wrapper.className = 'chart-wrapper';
  31. wrapper.id = container.id + "_wrapper";
  32. wrapper.style.width = container.style.width;
  33. wrapper.style.minHeight = container.style.height;
  34. container.style.width = '100%';
  35. blanket.className = 'chart-blanket';
  36. blanket.style.display = 'none';
  37. container.parentNode.insertBefore(wrapper, container);
  38. blanket_inner.className = 'chart-blanket-inner';
  39. blanket_outer.appendChild(blanket_inner);
  40. blanket_container.appendChild(blanket_outer);
  41. blanket.appendChild(blanket_container);
  42. wrapper.appendChild(blanket);
  43. wrapper.appendChild(container);
  44. },
  45. get_wrapper: function(container)
  46. {
  47. var wrapper = container;
  48. while (wrapper && (" " + wrapper.className + " ").indexOf(" chart-wrapper ") < 0) {
  49. wrapper = wrapper.parentElement;
  50. }
  51. return wrapper;
  52. },
  53. get_blanket: function(container)
  54. {
  55. var wrapper = this.get_wrapper(container);
  56. return getElementsByClassName('chart-blanket', wrapper)[0];
  57. },
  58. add_loading_indicator: function(container, message, image_path) {
  59. var loading_div = document.createElement("DIV"),
  60. loading_image = document.createElement("IMG"),
  61. loading = document.createTextNode(message),
  62. blanket = this.get_blanket(container),
  63. blanket_inner = blanket.childNodes[0].childNodes[0].childNodes[0];
  64. loading_div.className = 'chart-loading';
  65. loading_image.className = 'chart-loading-image';
  66. loading_image.src = image_path;
  67. loading_div.appendChild(loading);
  68. blanket.style.display = '';
  69. blanket_inner.innerHTML = "";
  70. blanket_inner.appendChild(loading_div);
  71. blanket_inner.appendChild(loading_image);
  72. },
  73. hide_loading_indicator: function(chart) {
  74. // If data is updated but still empty, keep the indicator up
  75. if (!chart.dataProvider.length) return;
  76. var container = chart.container.div,
  77. blanket = AmCharts.RB.Helpers.get_blanket(container);
  78. if (blanket) blanket.style.display = 'none';
  79. },
  80. // If the chart is provided by a remote provider which is loaded immediately (not defered),
  81. // and the provider has loaded before the chart has, reload the chart with the data
  82. load_from_immediate_provider: function(chart) {
  83. if (chart.remoteProvider && chart.remoteProvider.loaded() && !chart.dataProvider.length)
  84. {
  85. new AmCharts.RB.Chart(chart).load_data(chart.remoteProvider.data);
  86. }
  87. },
  88. add_legend_div: function(id, main_div) {
  89. var legend = document.getElementById(id);
  90. if (!legend) {
  91. legend = document.createElement("DIV");
  92. legend.className = 'chart-legend';
  93. legend.id = id;
  94. legend.style.width = main_div.getWidth() + 'px';
  95. var wrapper = main_div.parentNode;
  96. if (main_div.nextSibling) {
  97. wrapper.insertBefore(legend, main_div.nextSibling);
  98. }
  99. else {
  100. wrapper.appendChild(legend);
  101. }
  102. }
  103. return legend;
  104. }
  105. }