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

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.charting.PlotArea");
  9. dojo.require("dojo.lang.common");
  10. dojo.require("dojo.gfx.color");
  11. dojo.require("dojo.gfx.color.hsl");
  12. dojo.require("dojo.charting.Plot");
  13. dojo.charting.PlotArea = function () {
  14. var id = "dojo-charting-plotarea-" + dojo.charting.PlotArea.count++;
  15. this.getId = function () {
  16. return id;
  17. };
  18. this.setId = function (key) {
  19. id = key;
  20. };
  21. this.areaType = "standard";
  22. this.plots = [];
  23. this.size = {width:600, height:400};
  24. this.padding = {top:10, right:10, bottom:20, left:20};
  25. this.nodes = {main:null, area:null, background:null, axes:null, plots:null};
  26. this._color = {h:140, s:120, l:120, step:27};
  27. };
  28. dojo.charting.PlotArea.count = 0;
  29. dojo.extend(dojo.charting.PlotArea, {nextColor:function () {
  30. var rgb = dojo.gfx.color.hsl2rgb(this._color.h, this._color.s, this._color.l);
  31. this._color.h = (this._color.h + this._color.step) % 360;
  32. while (this._color.h < 140) {
  33. this._color.h += this._color.step;
  34. }
  35. return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]);
  36. }, getArea:function () {
  37. return {left:this.padding.left, right:this.size.width - this.padding.right, top:this.padding.top, bottom:this.size.height - this.padding.bottom, toString:function () {
  38. var a = [this.top, this.right, this.bottom, this.left];
  39. return "[" + a.join() + "]";
  40. }};
  41. }, getAxes:function () {
  42. var axes = {};
  43. for (var i = 0; i < this.plots.length; i++) {
  44. var plot = this.plots[i];
  45. axes[plot.axisX.getId()] = {axis:plot.axisX, drawAgainst:plot.axisY, plot:plot, plane:"x"};
  46. axes[plot.axisY.getId()] = {axis:plot.axisY, drawAgainst:plot.axisX, plot:plot, plane:"y"};
  47. }
  48. return axes;
  49. }, getLegendInfo:function () {
  50. var a = [];
  51. for (var i = 0; i < this.plots.length; i++) {
  52. for (var j = 0; j < this.plots[i].series.length; j++) {
  53. var data = this.plots[i].series[j].data;
  54. a.push({label:data.label, color:data.color});
  55. }
  56. }
  57. return a;
  58. }, setAxesRanges:function () {
  59. var ranges = {};
  60. var axes = {};
  61. for (var i = 0; i < this.plots.length; i++) {
  62. var plot = this.plots[i];
  63. var ranges = plot.getRanges();
  64. var x = ranges.x;
  65. var y = ranges.y;
  66. var ax, ay;
  67. if (!axes[plot.axisX.getId()]) {
  68. axes[plot.axisX.getId()] = plot.axisX;
  69. ranges[plot.axisX.getId()] = {upper:x.upper, lower:x.lower};
  70. }
  71. ax = ranges[plot.axisX.getId()];
  72. ax.upper = Math.max(ax.upper, x.upper);
  73. ax.lower = Math.min(ax.lower, x.lower);
  74. if (!axes[plot.axisY.getId()]) {
  75. axes[plot.axisY.getId()] = plot.axisY;
  76. ranges[plot.axisY.getId()] = {upper:y.upper, lower:y.lower};
  77. }
  78. ay = ranges[plot.axisY.getId()];
  79. ay.upper = Math.max(ay.upper, y.upper);
  80. ay.lower = Math.min(ay.lower, y.lower);
  81. }
  82. for (var p in axes) {
  83. axes[p].range = ranges[p];
  84. }
  85. }, render:function (kwArgs, applyToData) {
  86. if (!this.nodes.main || !this.nodes.area || !this.nodes.background || !this.nodes.plots || !this.nodes.axes) {
  87. this.initialize();
  88. }
  89. this.resize();
  90. for (var i = 0; i < this.plots.length; i++) {
  91. var plot = this.plots[i];
  92. if (plot.dataNode) {
  93. this.nodes.plots.removeChild(plot.dataNode);
  94. }
  95. var target = this.initializePlot(plot);
  96. switch (plot.renderType) {
  97.   case dojo.charting.RenderPlotSeries.Grouped:
  98. if (plot.series[0]) {
  99. target.appendChild(plot.series[0].plotter(this, plot, kwArgs, applyToData));
  100. }
  101. break;
  102.   case dojo.charting.RenderPlotSeries.Singly:
  103.   default:
  104. for (var j = 0; j < plot.series.length; j++) {
  105. var series = plot.series[j];
  106. var data = series.data.evaluate(kwArgs);
  107. target.appendChild(series.plotter(data, this, plot, applyToData));
  108. }
  109. }
  110. this.nodes.plots.appendChild(target);
  111. }
  112. }, destroy:function () {
  113. for (var i = 0; i < this.plots.length; i++) {
  114. this.plots[i].destroy();
  115. }
  116. for (var p in this.nodes) {
  117. var node = this.nodes[p];
  118. if (!node) {
  119. continue;
  120. }
  121. if (!node.childNodes) {
  122. continue;
  123. }
  124. while (node.childNodes.length > 0) {
  125. node.removeChild(node.childNodes[0]);
  126. }
  127. this.nodes[p] = null;
  128. }
  129. }});
  130. dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.PlotArea");
  131. dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.PlotArea");