📄 chart.js
字号:
/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.widget.svg.Chart");dojo.require("dojo.widget.HtmlWidget");dojo.require("dojo.widget.Chart");dojo.require("dojo.html.layout");dojo.require("dojo.math");dojo.require("dojo.svg");dojo.require("dojo.gfx.color");dojo.require("dojo.json");dojo.widget.defineWidget( "dojo.widget.svg.Chart", [dojo.widget.HtmlWidget, dojo.widget.Chart], function(){ // summary // initializes the SVG version of Chart. this.templatePath=null; this.templateCssPath=null; this._isInitialize=false; this.hasData=false; this.vectorNode=null; this.plotArea=null; this.dataGroup=null; this.axisGroup=null; this.properties={ height:0, // defaults, will resize to the domNode. width:0, defaultWidth:600, defaultHeight:400, plotType:null, padding:{ top:10, bottom:2, left:60, right:30 }, axes:{ x:{ plotAt:0, label:"", unitLabel:"", unitType:Number, nUnitsToShow:10, range:{ min:0, max:200 } }, y:{ plotAt:0, label:"", unitLabel:"", unitType:Number, nUnitsToShow:10, range:{ min:0, max:200 } } } }; }, { parseProperties:function(/* HTMLElement */node){ // summary // Parse the properties off the main tag var bRangeX=false; var bRangeY=false; if (node.getAttribute("width")){ this.properties.width=node.getAttribute("width"); } if (node.getAttribute("height")){ this.properties.height=node.getAttribute("height"); } if (node.getAttribute("plotType")){ this.properties.plotType=node.getAttribute("plotType"); } if (node.getAttribute("padding")){ if (node.getAttribute("padding").indexOf(",") > -1) var p=node.getAttribute("padding").split(","); else var p=node.getAttribute("padding").split(" "); if (p.length==1){ var pad=parseFloat(p[0]); this.properties.padding.top=pad; this.properties.padding.right=pad; this.properties.padding.bottom=pad; this.properties.padding.left=pad; } else if(p.length==2){ var padV=parseFloat(p[0]); var padH=parseFloat(p[1]); this.properties.padding.top=padV; this.properties.padding.right=padH; this.properties.padding.bottom=padV; this.properties.padding.left=padH; } else if(p.length==4){ this.properties.padding.top=parseFloat(p[0]); this.properties.padding.right=parseFloat(p[1]); this.properties.padding.bottom=parseFloat(p[2]); this.properties.padding.left=parseFloat(p[3]); } } if (node.getAttribute("rangeX")){ var p=node.getAttribute("rangeX"); if (p.indexOf(",")>-1) p=p.split(","); else p=p.split(" "); this.properties.axes.x.range.min=parseFloat(p[0]); this.properties.axes.x.range.max=parseFloat(p[1]); bRangeX=true; } if (node.getAttribute("rangeY")){ var p=node.getAttribute("rangeY"); if (p.indexOf(",")>-1) p=p.split(","); else p=p.split(" "); this.properties.axes.y.range.min=parseFloat(p[0]); this.properties.axes.y.range.max=parseFloat(p[1]); bRangeY=true; } return { rangeX:bRangeX, rangeY:bRangeY }; }, setAxesPlot:function(/* HTMLElement */table){ // summary // figure out where to plot the axes if (table.getAttribute("axisAt")){ var p=table.getAttribute("axisAt"); if (p.indexOf(",")>-1) p=p.split(","); else p=p.split(" "); // x axis if (!isNaN(parseFloat(p[0]))){ this.properties.axes.x.plotAt=parseFloat(p[0]); } else if (p[0].toLowerCase()=="ymin"){ this.properties.axes.x.plotAt=this.properties.axes.y.range.min; } else if (p[0].toLowerCase()=="ymax"){ this.properties.axes.x.plotAt=this.properties.axes.y.range.max; } // y axis if (!isNaN(parseFloat(p[1]))){ this.properties.axes.y.plotAt=parseFloat(p[1]); } else if (p[1].toLowerCase()=="xmin"){ this.properties.axes.y.plotAt=this.properties.axes.x.range.min; } else if (p[1].toLowerCase()=="xmax"){ this.properties.axes.y.plotAt=this.properties.axes.x.range.max; } } else { this.properties.axes.x.plotAt=this.properties.axes.y.range.min; this.properties.axes.y.plotAt=this.properties.axes.x.range.min; } }, drawVectorNode:function(){ // summary // Draws the main canvas for the chart dojo.svg.g.suspend(); if(this.vectorNode) this.destroy(); this.vectorNode=document.createElementNS(dojo.svg.xmlns.svg, "svg"); this.vectorNode.setAttribute("width", this.properties.width); this.vectorNode.setAttribute("height", this.properties.height); dojo.svg.g.resume(); }, drawPlotArea:function(){ // summary // Draws the plot area for the chart dojo.svg.g.suspend(); if(this.plotArea){ this.plotArea.parentNode.removeChild(this.plotArea); this.plotArea=null; } var defs = document.createElementNS(dojo.svg.xmlns.svg, "defs"); var clip = document.createElementNS(dojo.svg.xmlns.svg, "clipPath"); clip.setAttribute("id","plotClip"+this.widgetId); var rect = document.createElementNS(dojo.svg.xmlns.svg, "rect"); rect.setAttribute("x", this.properties.padding.left); rect.setAttribute("y", this.properties.padding.top); rect.setAttribute("width", this.properties.width-this.properties.padding.left-this.properties.padding.right); rect.setAttribute("height", this.properties.height-this.properties.padding.top-this.properties.padding.bottom); clip.appendChild(rect); defs.appendChild(clip); this.vectorNode.appendChild(defs); // the plot background. this.plotArea = document.createElementNS(dojo.svg.xmlns.svg, "g"); this.vectorNode.appendChild(this.plotArea); var rect = document.createElementNS(dojo.svg.xmlns.svg, "rect"); rect.setAttribute("x", this.properties.padding.left); rect.setAttribute("y", this.properties.padding.top); rect.setAttribute("width", this.properties.width-this.properties.padding.left-this.properties.padding.right); rect.setAttribute("height", this.properties.height-this.properties.padding.top-this.properties.padding.bottom); rect.setAttribute("fill", "#fff"); this.plotArea.appendChild(rect); dojo.svg.g.resume(); }, drawDataGroup:function(){ // summary // Draws the data group for the chart dojo.svg.g.suspend(); if(this.dataGroup){ this.dataGroup.parentNode.removeChild(this.dataGroup); this.dataGroup=null; } this.dataGroup = document.createElementNS(dojo.svg.xmlns.svg, "g"); this.dataGroup.setAttribute("style","clip-path:url(#plotClip"+this.widgetId+");"); this.plotArea.appendChild(this.dataGroup); dojo.svg.g.resume(); }, drawAxes:function(){ // summary // Draws the axes for the chart dojo.svg.g.suspend(); if(this.axisGroup){ this.axisGroup.parentNode.removeChild(this.axisGroup); this.axisGroup=null; } // axis group this.axisGroup = document.createElementNS(dojo.svg.xmlns.svg, "g"); this.plotArea.appendChild(this.axisGroup); // x axis var stroke=1; var line = document.createElementNS(dojo.svg.xmlns.svg, "line"); var y=dojo.widget.svg.Chart.Plotter.getY(this.properties.axes.x.plotAt, this); line.setAttribute("y1", y); line.setAttribute("y2", y); line.setAttribute("x1",this.properties.padding.left-stroke); line.setAttribute("x2",this.properties.width-this.properties.padding.right); line.setAttribute("style","stroke:#000;stroke-width:"+stroke+";"); this.axisGroup.appendChild(line); // x axis units. // (min and max) var textSize=10; var text = document.createElementNS(dojo.svg.xmlns.svg, "text"); text.setAttribute("x", this.properties.padding.left); text.setAttribute("y", this.properties.height-this.properties.padding.bottom+textSize+2); text.setAttribute("style", "text-anchor:middle;font-size:"+textSize+"px;fill:#000;"); text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.x.range.min),2))); this.axisGroup.appendChild(text); var text = document.createElementNS(dojo.svg.xmlns.svg, "text"); text.setAttribute("x", this.properties.width-this.properties.padding.right-(textSize/2)); text.setAttribute("y", this.properties.height-this.properties.padding.bottom+textSize+2); text.setAttribute("style", "text-anchor:middle;font-size:"+textSize+"px;fill:#000;"); text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.x.range.max),2))); this.axisGroup.appendChild(text); // y axis var line=document.createElementNS(dojo.svg.xmlns.svg, "line"); var x=dojo.widget.svg.Chart.Plotter.getX(this.properties.axes.y.plotAt, this); line.setAttribute("x1", x); line.setAttribute("x2", x); line.setAttribute("y1", this.properties.padding.top); line.setAttribute("y2", this.properties.height-this.properties.padding.bottom); line.setAttribute("style", "stroke:#000;stroke-width:"+stroke+";"); this.axisGroup.appendChild(line); // y axis units var text = document.createElementNS(dojo.svg.xmlns.svg, "text"); text.setAttribute("x", this.properties.padding.left-4); text.setAttribute("y", this.properties.height-this.properties.padding.bottom); text.setAttribute("style", "text-anchor:end;font-size:"+textSize+"px;fill:#000;"); text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.y.range.min),2))); this.axisGroup.appendChild(text); var text = document.createElementNS(dojo.svg.xmlns.svg, "text"); text.setAttribute("x", this.properties.padding.left-4); text.setAttribute("y", this.properties.padding.top+(textSize/2)); text.setAttribute("style", "text-anchor:end;font-size:"+textSize+"px;fill:#000;"); text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.y.range.max),2))); this.axisGroup.appendChild(text); dojo.svg.g.resume(); }, init:function(){ // summary // Initialize the chart if(!this.properties.width || !this.properties.height){ var box=dojo.html.getContentBox(this.domNode); if(!this.properties.width){ this.properties.width=(box.width<32)?this.properties.defaultWidth:box.width; } if(!this.properties.height){ this.properties.height=(box.height<32)?this.properties.defaultHeight:box.height; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -