Chart.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:6k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.widget.Chart");
  9. dojo.require("dojo.widget.*");
  10. dojo.require("dojo.gfx.color");
  11. dojo.require("dojo.gfx.color.hsl");
  12. dojo.declare("dojo.widget.Chart", null, function () {
  13. this.series = [];
  14. }, {isContainer:false, assignColors:function () {
  15. var hue = 30;
  16. var sat = 120;
  17. var lum = 120;
  18. var steps = Math.round(330 / this.series.length);
  19. for (var i = 0; i < this.series.length; i++) {
  20. var c = dojo.gfx.color.hsl2rgb(hue, sat, lum);
  21. if (!this.series[i].color) {
  22. this.series[i].color = dojo.gfx.color.rgb2hex(c[0], c[1], c[2]);
  23. }
  24. hue += steps;
  25. }
  26. }, parseData:function (table) {
  27. var thead = table.getElementsByTagName("thead")[0];
  28. var tbody = table.getElementsByTagName("tbody")[0];
  29. if (!(thead && tbody)) {
  30. dojo.raise("dojo.widget.Chart: supplied table must define a head and a body.");
  31. }
  32. var columns = thead.getElementsByTagName("tr")[0].getElementsByTagName("th");
  33. for (var i = 1; i < columns.length; i++) {
  34. var key = "column" + i;
  35. var label = columns[i].innerHTML;
  36. var plotType = columns[i].getAttribute("plotType") || "line";
  37. var color = columns[i].getAttribute("color");
  38. var ds = new dojo.widget.Chart.DataSeries(key, label, plotType, color);
  39. this.series.push(ds);
  40. }
  41. var rows = tbody.rows;
  42. var xMin = Number.MAX_VALUE, xMax = Number.MIN_VALUE;
  43. var yMin = Number.MAX_VALUE, yMax = Number.MIN_VALUE;
  44. var ignore = ["accesskey", "align", "bgcolor", "class", "colspan", "height", "id", "nowrap", "rowspan", "style", "tabindex", "title", "valign", "width"];
  45. for (var i = 0; i < rows.length; i++) {
  46. var row = rows[i];
  47. var cells = row.cells;
  48. var x = Number.MIN_VALUE;
  49. for (var j = 0; j < cells.length; j++) {
  50. if (j == 0) {
  51. x = parseFloat(cells[j].innerHTML);
  52. xMin = Math.min(xMin, x);
  53. xMax = Math.max(xMax, x);
  54. } else {
  55. var ds = this.series[j - 1];
  56. var y = parseFloat(cells[j].innerHTML);
  57. yMin = Math.min(yMin, y);
  58. yMax = Math.max(yMax, y);
  59. var o = {x:x, value:y};
  60. var attrs = cells[j].attributes;
  61. for (var k = 0; k < attrs.length; k++) {
  62. var attr = attrs.item(k);
  63. var bIgnore = false;
  64. for (var l = 0; l < ignore.length; l++) {
  65. if (attr.nodeName.toLowerCase() == ignore[l]) {
  66. bIgnore = true;
  67. break;
  68. }
  69. }
  70. if (!bIgnore) {
  71. o[attr.nodeName] = attr.nodeValue;
  72. }
  73. }
  74. ds.add(o);
  75. }
  76. }
  77. }
  78. return {x:{min:xMin, max:xMax}, y:{min:yMin, max:yMax}};
  79. }});
  80. dojo.declare("dojo.widget.Chart.DataSeries", null, function (key, label, plotType, color) {
  81. this.id = "DataSeries" + dojo.widget.Chart.DataSeries.count++;
  82. this.key = key;
  83. this.label = label || this.id;
  84. this.plotType = plotType || "line";
  85. this.color = color;
  86. this.values = [];
  87. }, {add:function (v) {
  88. if (v.x == null || v.value == null) {
  89. dojo.raise("dojo.widget.Chart.DataSeries.add: v must have both an 'x' and 'value' property.");
  90. }
  91. this.values.push(v);
  92. }, clear:function () {
  93. this.values = [];
  94. }, createRange:function (len) {
  95. var idx = this.values.length - 1;
  96. var length = (len || this.values.length);
  97. return {"index":idx, "length":length, "start":Math.max(idx - length, 0)};
  98. }, getMean:function (len) {
  99. var range = this.createRange(len);
  100. if (range.index < 0) {
  101. return 0;
  102. }
  103. var t = 0;
  104. var c = 0;
  105. for (var i = range.index; i >= range.start; i--) {
  106. var n = parseFloat(this.values[i].value);
  107. if (!isNaN(n)) {
  108. t += n;
  109. c++;
  110. }
  111. }
  112. t /= Math.max(c, 1);
  113. return t;
  114. }, getMovingAverage:function (len) {
  115. var range = this.createRange(len);
  116. if (range.index < 0) {
  117. return 0;
  118. }
  119. var t = 0;
  120. var c = 0;
  121. for (var i = range.index; i >= range.start; i--) {
  122. var n = parseFloat(this.values[i].value);
  123. if (!isNaN(n)) {
  124. t += n;
  125. c++;
  126. }
  127. }
  128. t /= Math.max(c, 1);
  129. return t;
  130. }, getVariance:function (len) {
  131. var range = this.createRange(len);
  132. if (range.index < 0) {
  133. return 0;
  134. }
  135. var t = 0;
  136. var s = 0;
  137. var c = 0;
  138. for (var i = range.index; i >= range.start; i--) {
  139. var n = parseFloat(this.values[i].value);
  140. if (!isNaN(n)) {
  141. t += n;
  142. s += Math.pow(n, 2);
  143. c++;
  144. }
  145. }
  146. return (s / c) - Math.pow(t / c, 2);
  147. }, getStandardDeviation:function (len) {
  148. return Math.sqrt(this.getVariance(len));
  149. }, getMax:function (len) {
  150. var range = this.createRange(len);
  151. if (range.index < 0) {
  152. return 0;
  153. }
  154. var t = 0;
  155. for (var i = range.index; i >= range.start; i--) {
  156. var n = parseFloat(this.values[i].value);
  157. if (!isNaN(n)) {
  158. t = Math.max(n, t);
  159. }
  160. }
  161. return t;
  162. }, getMin:function (len) {
  163. var range = this.createRange(len);
  164. if (range.index < 0) {
  165. return 0;
  166. }
  167. var t = 0;
  168. for (var i = range.index; i >= range.start; i--) {
  169. var n = parseFloat(this.values[i].value);
  170. if (!isNaN(n)) {
  171. t = Math.min(n, t);
  172. }
  173. }
  174. return t;
  175. }, getMedian:function (len) {
  176. var range = this.createRange(len);
  177. if (range.index < 0) {
  178. return 0;
  179. }
  180. var a = [];
  181. for (var i = range.index; i >= range.start; i--) {
  182. var n = parseFloat(this.values[i].value);
  183. if (!isNaN(n)) {
  184. var b = false;
  185. for (var j = 0; j < a.length && !b; j++) {
  186. if (n == a[j]) {
  187. b = true;
  188. }
  189. }
  190. if (!b) {
  191. a.push(n);
  192. }
  193. }
  194. }
  195. a.sort();
  196. if (a.length > 0) {
  197. return a[Math.ceil(a.length / 2)];
  198. }
  199. return 0;
  200. }, getMode:function (len) {
  201. var range = this.createRange(len);
  202. if (range.index < 0) {
  203. return 0;
  204. }
  205. var o = {};
  206. var ret = 0;
  207. var m = 0;
  208. for (var i = range.index; i >= range.start; i--) {
  209. var n = parseFloat(this.values[i].value);
  210. if (!isNaN(n)) {
  211. if (!o[this.values[i].value]) {
  212. o[this.values[i].value] = 1;
  213. } else {
  214. o[this.values[i].value]++;
  215. }
  216. }
  217. }
  218. for (var p in o) {
  219. if (m < o[p]) {
  220. m = o[p];
  221. ret = p;
  222. }
  223. }
  224. return parseFloat(ret);
  225. }});
  226. dojo.requireIf(dojo.render.svg.capable, "dojo.widget.svg.Chart");
  227. dojo.requireIf(!dojo.render.svg.capable && dojo.render.vml.capable, "dojo.widget.vml.Chart");