You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sv...@apache.org on 2006/11/10 10:15:40 UTC
svn commit: r473277 [45/45] - in
/myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource:
./ src/ src/animation/ src/cal/ src/charting/ src/charting/svg/
src/charting/vml/ src/collections/ src/crypto/ src/data/ src/data/...
Modified: myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/widget/vml/Chart.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/widget/vml/Chart.js?view=diff&rev=473277&r1=473276&r2=473277
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/widget/vml/Chart.js (original)
+++ myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/widget/vml/Chart.js Fri Nov 10 01:15:01 2006
@@ -8,419 +8,632 @@
http://dojotoolkit.org/community/licensing.shtml
*/
-dojo.provide("dojo.widget.vml.Chart");
-
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.Chart");
-dojo.require("dojo.math");
-dojo.require("dojo.html");
-//dojo.require("dojo.vml");
-dojo.require("dojo.graphics.color");
-
-dojo.widget.vml.Chart=function(){
- dojo.widget.Chart.call(this);
- dojo.widget.HtmlWidget.call(this);
-};
-dojo.inherits(dojo.widget.vml.Chart, dojo.widget.HtmlWidget);
-dojo.lang.extend(dojo.widget.vml.Chart, {
- // widget props
- templatePath:null,
- templateCssPath:null,
-
- // state
- _isInitialized:false,
- hasData:false,
-
- // chart props
- vectorNode:null,
- plotArea:null,
- dataGroup:null,
- axisGroup:null,
-
- properties:{
- height:400, // defaults, will resize to the domNode.
- width:600,
- 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
- }
- }
- }
- },
-
- fillInTemplate:function(args,frag){
- this.initialize();
- this.render();
- },
- parseData:function(){
- },
- initialize:function(){
- // parse the data first.
- this.parseData();
-
- // render the body of the chart, not the chart data.
- if(this.vectorNode){ this.destroy(); }
- this.vectorNode=document.createElement("div");
- this.vectorNode.style.width=this.properties.width+"px";
- this.vectorNode.style.height=this.properties.height+"px";
- this.vectorNode.style.position="relative";
- this.domNode.appendChild(this.vectorNode);
-
- var plotWidth=this.properties.width-this.properties.padding.left-this.properties.padding.right;
- var plotHeight=this.properties.height-this.properties.padding.top-this.properties.padding.bottom;
-
- this.plotArea=document.createElement("div");
- this.plotArea.style.position="absolute";
- this.plotArea.style.backgroundColor="#fff";
- this.plotArea.style.top=(this.properties.padding.top)-2+"px";
- this.plotArea.style.left=(this.properties.padding.left-1)+"px";
- this.plotArea.style.width=plotWidth+"px";
- this.plotArea.style.height=plotHeight+"px";
- this.vectorNode.appendChild(this.plotArea);
-
- this.dataGroup=document.createElement("div");
- this.dataGroup.style.position="relative";
- this.plotArea.appendChild(this.dataGroup);
-
- // clipping rects, what a fucking pain.
- var bg=this.domNode.style.backgroundColor;
- var r=document.createElement("v:rect");
- r.setAttribute("fillcolor", bg);
- r.setAttribute("stroked", "false");
- r.style.position="absolute";
- r.style.top=(-1*this.properties.padding.top)-1+"px";
- r.style.left=(-1*this.properties.padding.left)+"px";
- r.style.width=(this.properties.width-3)+"px";
- r.style.height=(this.properties.padding.top)-2+"px";
- this.vectorNode.appendChild(r);
-
- r=document.createElement("v:rect");
- r.setAttribute("fillcolor", bg);
- r.setAttribute("stroked", "false");
- r.style.position="absolute";
- r.style.top=plotHeight-2+"px";
- r.style.left=(-1*this.properties.padding.left)+"px";
- r.style.width=(this.properties.width-3)+"px";
- r.style.height=(this.properties.padding.bottom)-2+"px"; // fixme: check this.
- this.vectorNode.appendChild(r);
-
- r=document.createElement("v:rect");
- r.setAttribute("fillcolor", bg);
- r.setAttribute("stroked", "false");
- r.style.position="absolute";
- r.style.top="-2px";
- r.style.left=(-1*this.properties.padding.left)+"px";
- r.style.width=(this.properties.padding.left-1)+"px";
- r.style.height=plotHeight+"px";
- this.vectorNode.appendChild(r);
-
- r=document.createElement("v:rect");
- r.setAttribute("fillcolor", bg);
- r.setAttribute("stroked", "false");
- r.style.position="absolute";
- r.style.top="-2px";
- r.style.right=(-1*this.properties.padding.right)+1+"px";
- r.style.width=(this.properties.padding.right-1)+"px";
- r.style.height=plotHeight+"px";
- this.vectorNode.appendChild(r);
- // end clipping rects. god that sucks, i wish VML had clipping outside of that crap vmlframe...
-
- this.axisGroup=document.createElement("div");
- this.axisGroup.style.position="relative";
- this.plotArea.appendChild(this.axisGroup);
-
- var stroke=1;
-
- // x axis
- var line=document.createElement("v:line");
- var y=dojo.widget.vml.Chart.Plotter.getY(this.properties.axes.x.plotAt, this);
- line.setAttribute("from", this.properties.padding.left-stroke + "," + y);
- line.setAttribute("to", plotWidth + "," + y);
- line.style.position="absolute";
- line.style.antialias="false";
- line.setAttribute("strokecolor", "#666");
- line.setAttribute("strokeweight", stroke*2+"px");
- this.axisGroup.appendChild(line);
-
- // y axis
- var line=document.createElement("v:line");
- var y=dojo.widget.vml.Chart.Plotter.getX(this.properties.axes.y.plotAt, this);
- line.setAttribute("from", y+","+this.properties.padding.top);
- line.setAttribute("to", y+","+this.properties.height-this.properties.padding.bottom);
- line.style.position="absolute";
- line.style.antialias="false";
- line.setAttribute("strokecolor", "#666");
- line.setAttribute("strokeweight", stroke*2+"px");
- this.axisGroup.appendChild(line);
-
- // labels
- var size=10;
-
- // x axis labels.
- var t=document.createElement("div");
- t.style.position="absolute";
- t.style.top=(this.properties.height-this.properties.padding.bottom+size+2)+"px";
- t.style.left=this.properties.padding.left+"px";
- t.style.fontFamily="sans-serif";
- t.style.fontSize=size+"px";
- t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.x.range.min),2);
- this.axisGroup.appendChild(t);
-
- t=document.createElement("div");
- t.style.position="absolute";
- t.style.top=(this.properties.height-this.properties.padding.bottom+size+2)+"px";
- t.style.left=(this.properties.width-this.properties.padding.right-(size/2))+"px";
- t.style.fontFamily="sans-serif";
- t.style.fontSize=size+"px";
- t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.x.range.max),2);
- this.axisGroup.appendChild(t);
-
- // y axis labels.
- t=document.createElement("div");
- t.style.position="absolute";
- t.style.top=-1*(size/2)+"px";
- t.style.right=(plotWidth+4)+"px";
- t.style.fontFamily="sans-serif";
- t.style.fontSize=size+"px";
- t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.y.range.max),2);
- this.axisGroup.appendChild(t);
-
- t=document.createElement("div");
- t.style.position="absolute";
- t.style.top=(this.properties.height-this.properties.padding.bottom)+"px";
- t.style.right=(plotWidth+4)+"px";
- t.style.fontFamily="sans-serif";
- t.style.fontSize=size+"px";
- t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.y.range.min),2);
- this.axisGroup.appendChild(t);
-
- // this is last.
- this.assignColors();
- this._isInitialized=true;
- },
- destroy:function(){
- while(this.domNode.childNodes.length>0){
- this.domNode.removeChild(this.domNode.childNodes[0]);
- }
- this.vectorNode=this.plotArea=this.dataGroup=this.axisGroup=null;
- },
- render:function(){
- if (this.dataGroup){
- while(this.dataGroup.childNodes.length>0){
- this.dataGroup.removeChild(this.dataGroup.childNodes[0]);
- }
- } else {
- this.initialize();
- }
- for(var i=0; i<this.series.length; i++){
- dojo.widget.vml.Chart.Plotter.plot(this.series[i], this);
- }
- }
-});
-
-dojo.widget.vml.Chart.Plotter=new function(){
- var _this=this;
- var plotters = {};
- var types=dojo.widget.Chart.PlotTypes;
-
- this.getX=function(value, chart){
- var v=parseFloat(value);
- var min=chart.properties.axes.x.range.min;
- var max=chart.properties.axes.x.range.max;
- var ofst=0-min;
- min+=ofst; max+=ofst; v+=ofst;
-
- var xmin=chart.properties.padding.left;
- var xmax=chart.properties.width-chart.properties.padding.right;
- var x=(v*((xmax-xmin)/max))+xmin;
- return x;
- };
- this.getY=function(value, chart){
- var v=parseFloat(value);
- var max=chart.properties.axes.y.range.max;
- var min=chart.properties.axes.y.range.min;
- var ofst=0;
- if(min<0)ofst+=Math.abs(min);
- min+=ofst; max+=ofst; v+=ofst;
-
- var ymin=chart.properties.height-chart.properties.padding.bottom;
- var ymax=chart.properties.padding.top;
- var y=(((ymin-ymax)/(max-min))*(max-v))+ymax;
- return y;
- };
-
- this.addPlotter=function(name, func){
- plotters[name]=func;
- };
- this.plot=function(series, chart){
- if (series.values.length==0) return;
- if (series.plotType && plotters[series.plotType]){
- return plotters[series.plotType](series, chart);
- }
- else if (chart.plotType && plotters[chart.plotType]){
- return plotters[chart.plotType](series, chart);
- }
- };
-
- // plotting
- plotters[types.Bar]=function(series, chart){
- var space=1;
- var lastW = 0;
- for (var i=0; i<series.values.length; i++){
- var x=_this.getX(series.values[i].x, chart);
- var w;
- if (i==series.values.length-1){
- w=lastW;
- } else{
- w=_this.getX(series.values[i+1].x, chart)-x-space;
- lastW=w;
- }
- x-=(w/2);
-
- var yA=_this.getY(chart.properties.axes.x.plotAt, chart);
- var y=_this.getY(series.values[i].value, chart);
- var h=Math.abs(yA-y);
- if (parseFloat(series.values[i].value)<chart.properties.axes.x.plotAt){
- var oy=yA;
- yA=y;
- y=oy;
- }
-
- var bar=document.createElement("v:rect");
- bar.style.position="absolute";
- bar.style.top=x+"px";
- bar.style.left=y+"px";
- bar.style.width=w+"px";
- bar.style.height=h+"px";
- bar.setAttribute("fillColor", series.color);
- bar.setAttribute("title", series.label + ": " + series.values[i].value);
- bar.setAttribute("coordsize", chart.properties.width + "," + chart.properties.height);
- var fill=document.createElement("v:fill");
- fill.setAttribute("opacity", "0.9");
- bar.appendChild(fill);
- chart.dataGroup.appendChild(bar);
- }
- };
- plotters[types.Line]=function(series, chart){
- var tension=3;
-
- var line=document.createElement("v:shape");
- line.setAttribute("strokeweight", "2px");
- line.setAttribute("strokecolor", series.color);
- line.setAttribute("fillcolor", "none");
- line.setAttribute("filled", "false");
- line.setAttribute("title", series.label);
- line.setAttribute("coordsize", chart.properties.width + "," + chart.properties.height);
- line.style.position="absolute";
- line.style.top="0px";
- line.style.left="0px";
- line.style.width= chart.properties.width+"px";
- line.style.height=chart.properties.height+"px";
- var stroke=document.createElement("v:stroke");
- stroke.setAttribute("opacity", "0.85");
- line.appendChild(stroke);
-
- var path = [];
- for (var i=0; i<series.values.length; i++){
- var x = _this.getX(series.values[i].x, chart)
- var y = _this.getY(series.values[i].value, chart);
-
- if (i==0){
- path.push("m");
- path.push(x+","+y);
- }else{
- var lastx=_this.getX(series.values[i-1].x, chart);
- var lasty=_this.getY(series.values[i-1].value, chart);
- var dx=x-lastx;
-
- path.push("v");
- var cx=x-(tension-1)*(dx/tension);
- path.push(cx+",0");
- cx=x-(dx/tension);
- path.push(cx+","+y-lasty);
- path.push(dx, y-lasty);
- }
- }
- line.setAttribute("path", path.join(" ")+" e");
- chart.dataGroup.appendChild(line);
- };
- plotters[types.Scatter]=function(series, chart){
- var r=8;
- for (var i=0; i<series.values.length; i++){
- var x=_this.getX(series.values[i].x, chart);
- var y=_this.getY(series.values[i].value, chart);
- var mod=r/2;
-
- var point=document.createElement("v:rect");
- point.setAttribute("fillcolor", series.color);
- point.setAttribute("strokecolor", series.color);
- point.setAttribute("title", series.label + ": " + series.values[i].value);
- point.style.position="absolute";
- point.style.rotation="45";
- point.style.top=(y-mod)+"px";
- point.style.left=(x-mod)+"px";
- point.style.width=r+"px";
- point.style.height=r+"px";
- var fill=document.createElement("v:fill");
- fill.setAttribute("opacity", "0.5");
- point.appendChild(fill);
- chart.dataGroup.appendChild(point);
- }
- };
- plotters[types.Bubble]=function(series, chart){
- // added param for series[n].value: size
- var minR=1;
-
- // do this off the x axis?
- var min=chart.properties.axes.x.range.min;
- var max=chart.properties.axes.x.range.max;
- var ofst=0-min;
-
- min+=ofst; max+=ofst;
- var xmin=chart.properties.padding.left;
- var xmax=chart.properties.width-chart.properties.padding.right;
- var factor=(max-min)/(xmax-xmin)*25;
-
- for (var i=0; i<series.values.length; i++){
- var size = series.values[i].size;
- if (isNaN(parseFloat(size))) size=minR;
- var mod=(parseFloat(size)*factor)/2;
-
- var point=document.createElement("v:oval");
- point.setAttribute("strokecolor", series.color);
- point.setAttribute("fillcolor", series.color);
- point.setAttribute("title", series.label + ": " + series.values[i].value + " (" + size + ")");
- point.style.position="absolute";
- point.style.top=(_this.getY(series.values[i].value, chart)-mod) + "px";
- point.style.left=(_this.getX(series.values[i].x, chart)-mod) + "px";
- point.style.width=mod+"px";
- point.style.height=mod+"px";
- chart.dataGroup.appendChild(point);
- }
- };
-}();
+dojo.provide("dojo.widget.vml.Chart");
+
+dojo.require("dojo.widget.HtmlWidget");
+dojo.require("dojo.widget.Chart");
+dojo.require("dojo.math");
+dojo.require("dojo.html.layout");
+dojo.require("dojo.gfx.color");
+
+dojo.widget.defineWidget(
+ "dojo.widget.vml.Chart",
+ [dojo.widget.HtmlWidget, dojo.widget.Chart],
+ function(){
+ // summary
+ // initializes the VML 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
+ if(this.vectorNode){ this.destroy(); }
+ this.vectorNode=document.createElement("div");
+ this.vectorNode.style.width=this.properties.width+"px";
+ this.vectorNode.style.height=this.properties.height+"px";
+ this.vectorNode.style.position="relative";
+ this.domNode.appendChild(this.vectorNode);
+ },
+ drawPlotArea:function(){
+ // summary
+ // Draws the plot area for the chart
+ var plotWidth=this.properties.width-this.properties.padding.left-this.properties.padding.right;
+ var plotHeight=this.properties.height-this.properties.padding.top-this.properties.padding.bottom;
+
+ if(this.plotArea){
+ this.plotArea.parentNode.removeChild(this.plotArea);
+ this.plotArea=null;
+ }
+ this.plotArea=document.createElement("div");
+ this.plotArea.style.position="absolute";
+ this.plotArea.style.backgroundColor="#fff";
+ this.plotArea.style.top=(this.properties.padding.top)-2+"px";
+ this.plotArea.style.left=(this.properties.padding.left-1)+"px";
+ this.plotArea.style.width=plotWidth+"px";
+ this.plotArea.style.height=plotHeight+"px";
+ this.plotArea.style.clip="rect(0 "+plotWidth+" "+plotHeight+" 0)";
+ this.vectorNode.appendChild(this.plotArea);
+ },
+ drawDataGroup:function(){
+ // summary
+ // Draws the data group for the chart
+ var plotWidth=this.properties.width-this.properties.padding.left-this.properties.padding.right;
+ var plotHeight=this.properties.height-this.properties.padding.top-this.properties.padding.bottom;
+
+ if(this.dataGroup){
+ this.dataGroup.parentNode.removeChild(this.dataGroup);
+ this.dataGroup=null;
+ }
+ this.dataGroup=document.createElement("div");
+ this.dataGroup.style.position="absolute";
+ this.dataGroup.setAttribute("title", "Data Group");
+ this.dataGroup.style.top="0px";
+ this.dataGroup.style.left="0px";
+ this.dataGroup.style.width=plotWidth+"px";
+ this.dataGroup.style.height=plotHeight+"px";
+ this.plotArea.appendChild(this.dataGroup);
+ },
+ drawAxes:function(){
+ // summary
+ // Draws the axes for the chart
+ var plotWidth=this.properties.width-this.properties.padding.left-this.properties.padding.right;
+ var plotHeight=this.properties.height-this.properties.padding.top-this.properties.padding.bottom;
+
+ if(this.axisGroup){
+ this.axisGroup.parentNode.removeChild(this.axisGroup);
+ this.axisGroup=null;
+ }
+ this.axisGroup=document.createElement("div");
+ this.axisGroup.style.position="absolute";
+ this.axisGroup.setAttribute("title", "Axis Group");
+ this.axisGroup.style.top="0px";
+ this.axisGroup.style.left="0px";
+ this.axisGroup.style.width=plotWidth+"px";
+ this.axisGroup.style.height=plotHeight+"px";
+ this.plotArea.appendChild(this.axisGroup);
+ var stroke=1;
+
+ // x axis
+ var line=document.createElement("v:line");
+ var y=dojo.widget.vml.Chart.Plotter.getY(this.properties.axes.x.plotAt, this);
+ line.setAttribute("from", "0px,"+y+"px");
+ line.setAttribute("to", plotWidth+"px,"+y+"px");
+ line.style.position="absolute";
+ line.style.top="0px";
+ line.style.left="0px";
+ line.style.antialias="false";
+ line.setAttribute("strokecolor", "#666");
+ line.setAttribute("strokeweight", stroke*2+"px");
+ this.axisGroup.appendChild(line);
+
+ // y axis
+ var line=document.createElement("v:line");
+ var x=dojo.widget.vml.Chart.Plotter.getX(this.properties.axes.y.plotAt, this);
+ line.setAttribute("from", x+"px,0px");
+ line.setAttribute("to", x+"px,"+plotHeight+"px");
+ line.style.position="absolute";
+ line.style.top="0px";
+ line.style.left="0px";
+ line.style.antialias="false";
+ line.setAttribute("strokecolor", "#666");
+ line.setAttribute("strokeweight", stroke*2+"px");
+ this.axisGroup.appendChild(line);
+
+ // labels
+ var size=10;
+
+ // x axis labels.
+ var t=document.createElement("div");
+ t.style.position="absolute";
+ t.style.top=(this.properties.height-this.properties.padding.bottom)+"px";
+ t.style.left=this.properties.padding.left+"px";
+ t.style.fontFamily="sans-serif";
+ t.style.fontSize=size+"px";
+ t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.x.range.min),2);
+ this.vectorNode.appendChild(t);
+
+ t=document.createElement("div");
+ t.style.position="absolute";
+ t.style.top=(this.properties.height-this.properties.padding.bottom)+"px";
+ t.style.left=(this.properties.width-this.properties.padding.right-size)+"px";
+ t.style.fontFamily="sans-serif";
+ t.style.fontSize=size+"px";
+ t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.x.range.max),2);
+ this.vectorNode.appendChild(t);
+
+ // y axis labels.
+ t=document.createElement("div");
+ t.style.position="absolute";
+ t.style.top=(size/2)+"px";
+ t.style.left="0px";
+ t.style.width=this.properties.padding.left + "px";
+ t.style.textAlign="right";
+ t.style.paddingRight="4px";
+ t.style.fontFamily="sans-serif";
+ t.style.fontSize=size+"px";
+ t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.y.range.max),2);
+ this.vectorNode.appendChild(t);
+
+ t=document.createElement("div");
+ t.style.position="absolute";
+ t.style.top=(this.properties.height-this.properties.padding.bottom-size)+"px";
+ t.style.left="0px";
+ t.style.width=this.properties.padding.left + "px";
+ t.style.textAlign="right";
+ t.style.paddingRight="4px";
+ t.style.fontFamily="sans-serif";
+ t.style.fontSize=size+"px";
+ t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.y.range.min),2);
+ this.vectorNode.appendChild(t);
+ },
+
+ 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;
+ }
+ }
+
+ // set up the chart; each is a method so that it can be selectively overridden.
+ this.drawVectorNode();
+ this.drawPlotArea();
+ this.drawDataGroup();
+ this.drawAxes();
+
+ // this is last.
+ this.assignColors();
+ this._isInitialized=true;
+ },
+ destroy:function(){
+ // summary
+ // Node cleanup
+ while(this.domNode.childNodes.length>0){
+ this.domNode.removeChild(this.domNode.childNodes[0]);
+ }
+ this.vectorNode=this.plotArea=this.dataGroup=this.axisGroup=null;
+ },
+ render:function(){
+ // summary
+ // Draws the data on the chart
+ if (this.dataGroup){
+ while(this.dataGroup.childNodes.length>0){
+ this.dataGroup.removeChild(this.dataGroup.childNodes[0]);
+ }
+ } else {
+ this.init();
+ }
+ for(var i=0; i<this.series.length; i++){
+ dojo.widget.vml.Chart.Plotter.plot(this.series[i], this);
+ }
+ },
+ postCreate:function(){
+ // summary
+ // Parse any data if included with the chart, and kick off the rendering.
+ var table=this.domNode.getElementsByTagName("table")[0];
+ if (table){
+ var ranges=this.parseProperties(table);
+ var bRangeX=false;
+ var bRangeY=false;
+
+ // fix the axes
+ var axisValues = this.parseData(table);
+ if(!bRangeX){
+ this.properties.axes.x.range={min:axisValues.x.min, max:axisValues.x.max};
+ }
+ if(!bRangeY){
+ this.properties.axes.y.range={min:axisValues.y.min, max:axisValues.y.max};
+ }
+ this.setAxesPlot(table);
+
+ // table values should be populated, now pop it off.
+ this.domNode.removeChild(table);
+ }
+ if(this.series.length>0){
+ this.render();
+ }
+ }
+});
+
+dojo.widget.vml.Chart.Plotter=new function(){
+ // summary
+ // Singleton for plotting series of data.
+ var self=this;
+ var plotters = {};
+ var types=dojo.widget.Chart.PlotTypes;
+
+ this.getX=function(/* string||number */value, /* dojo.widget.Chart */chart){
+ // summary
+ // Calculate the x coord on the passed chart for the passed value
+ var v=parseFloat(value);
+ var min=chart.properties.axes.x.range.min;
+ var max=chart.properties.axes.x.range.max;
+ var ofst=0-min;
+ min+=ofst; max+=ofst; v+=ofst;
+
+ var xmin = 0;
+ var xmax=chart.properties.width-chart.properties.padding.left-chart.properties.padding.right;
+ var x=(v*((xmax-xmin)/max))+xmin;
+ return x;
+ };
+ this.getY=function(/* string||number */value, /* dojo.widget.Chart */chart){
+ // summary
+ // Calculate the y coord on the passed chart for the passed value
+ var v=parseFloat(value);
+ var max=chart.properties.axes.y.range.max;
+ var min=chart.properties.axes.y.range.min;
+ var ofst=0;
+ if(min<0)ofst+=Math.abs(min);
+ min+=ofst; max+=ofst; v+=ofst;
+
+ var ymin=chart.properties.height-chart.properties.padding.top-chart.properties.padding.bottom;
+ var ymax = 0;
+ var y=(((ymin-ymax)/(max-min))*(max-v))+ymax;
+ return y;
+ };
+
+ this.addPlotter=function(/* string */name, /* function */func){
+ // summary
+ // add a custom plotter function to this object.
+ plotters[name]=func;
+ };
+ this.plot=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
+ // summary
+ // plot the passed series.
+ if (series.values.length==0) return; // void
+ if (series.plotType && plotters[series.plotType]){
+ return plotters[series.plotType](series, chart); // void
+ }
+ else if (chart.plotType && plotters[chart.plotType]){
+ return plotters[chart.plotType](series, chart); // void
+ }
+ };
+
+ // plotting
+ plotters["bar"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
+ // summary
+ // plot the passed series as a set of bars.
+ var space=1;
+ var lastW = 0;
+ var ys = [];
+ var yAxis=self.getY(chart.properties.axes.x.plotAt, chart);
+ var yA = yAxis;
+ for (var i=0; i<series.values.length; i++){
+ var x=self.getX(series.values[i].x, chart);
+ var w;
+ if (i==series.values.length-1){
+ w=lastW;
+ } else{
+ w=self.getX(series.values[i+1].x, chart)-x-space;
+ lastW=w;
+ }
+ x-=(w/2);
+
+ var y=self.getY(series.values[i].value, chart);
+ var h=Math.abs(yA-y);
+ if (parseFloat(series.values[i].value) < chart.properties.axes.x.plotAt){
+ y=yA;
+ }
+
+ var bar=document.createElement("v:rect");
+ bar.style.position="absolute";
+ bar.style.top=y+"px";
+ bar.style.left=x+"px";
+ bar.style.width=w+"px";
+ bar.style.height=h+"px";
+ bar.setAttribute("fillColor", series.color);
+ bar.setAttribute("stroked", "false");
+ bar.style.antialias="false";
+ bar.setAttribute("title", series.label + " (" + i + "): " + series.values[i].value);
+ var fill=document.createElement("v:fill");
+ fill.setAttribute("opacity", "0.9");
+ bar.appendChild(fill);
+ chart.dataGroup.appendChild(bar);
+ }
+ };
+ plotters["line"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
+ // summary
+ // plot the passed series as a line with tensioning
+ var tension=1.5;
+
+ var line=document.createElement("v:shape");
+ line.setAttribute("strokeweight", "2px");
+ line.setAttribute("strokecolor", series.color);
+ line.setAttribute("fillcolor", "none");
+ line.setAttribute("filled", "false");
+ line.setAttribute("title", series.label);
+ line.setAttribute("coordsize", chart.properties.width + "," + chart.properties.height);
+ line.style.position="absolute";
+ line.style.top="0px";
+ line.style.left="0px";
+ line.style.width= chart.properties.width+"px";
+ line.style.height=chart.properties.height+"px";
+ var stroke=document.createElement("v:stroke");
+ stroke.setAttribute("opacity", "0.85");
+ line.appendChild(stroke);
+
+ var path = [];
+ for (var i=0; i<series.values.length; i++){
+ var x = Math.round(self.getX(series.values[i].x, chart));
+ var y = Math.round(self.getY(series.values[i].value, chart));
+
+ if (i==0){
+ path.push("m");
+ path.push(x+","+y);
+ }else{
+ var lastx=Math.round(self.getX(series.values[i-1].x, chart));
+ var lasty=Math.round(self.getY(series.values[i-1].value, chart));
+ var dx=x-lastx;
+ var dy=y-lasty;
+
+ path.push("c");
+ var cx=Math.round((x-(tension-1)*(dx/tension)));
+ path.push(cx+","+lasty);
+ cx=Math.round((x-(dx/tension)));
+ path.push(cx+","+y);
+ path.push(x+","+y);
+ }
+ }
+ line.setAttribute("path", path.join(" ")+" e");
+ chart.dataGroup.appendChild(line);
+ };
+ plotters["area"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
+ // summary
+ // plot the passed series as an area with tensioning.
+ var tension=1.5;
+
+ var line=document.createElement("v:shape");
+ line.setAttribute("strokeweight", "1px");
+ line.setAttribute("strokecolor", series.color);
+ line.setAttribute("fillcolor", series.color);
+ line.setAttribute("title", series.label);
+ line.setAttribute("coordsize", chart.properties.width + "," + chart.properties.height);
+ line.style.position="absolute";
+ line.style.top="0px";
+ line.style.left="0px";
+ line.style.width= chart.properties.width+"px";
+ line.style.height=chart.properties.height+"px";
+ var stroke=document.createElement("v:stroke");
+ stroke.setAttribute("opacity", "0.8");
+ line.appendChild(stroke);
+ var fill=document.createElement("v:fill");
+ fill.setAttribute("opacity", "0.4");
+ line.appendChild(fill);
+
+ var path = [];
+ for (var i=0; i<series.values.length; i++){
+ var x = Math.round(self.getX(series.values[i].x, chart));
+ var y = Math.round(self.getY(series.values[i].value, chart));
+
+ if (i==0){
+ path.push("m");
+ path.push(x+","+y);
+ }else{
+ var lastx=Math.round(self.getX(series.values[i-1].x, chart));
+ var lasty=Math.round(self.getY(series.values[i-1].value, chart));
+ var dx=x-lastx;
+ var dy=y-lasty;
+
+ path.push("c");
+ var cx=Math.round((x-(tension-1)*(dx/tension)));
+ path.push(cx+","+lasty);
+ cx=Math.round((x-(dx/tension)));
+ path.push(cx+","+y);
+ path.push(x+","+y);
+ }
+ }
+ path.push("l");
+ path.push(x + "," + self.getY(0, chart));
+ path.push("l");
+ path.push(self.getX(0, chart) + "," + self.getY(0,chart));
+ line.setAttribute("path", path.join(" ")+" x e");
+ chart.dataGroup.appendChild(line);
+ };
+ plotters["scatter"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
+ // summary
+ // plot the passed series as a scatter chart
+ var r=6;
+ for (var i=0; i<series.values.length; i++){
+ var x=self.getX(series.values[i].x, chart);
+ var y=self.getY(series.values[i].value, chart);
+ var mod=r/2;
+
+ var point=document.createElement("v:rect");
+ point.setAttribute("fillcolor", series.color);
+ point.setAttribute("strokecolor", series.color);
+ point.setAttribute("title", series.label + ": " + series.values[i].value);
+ point.style.position="absolute";
+ point.style.rotation="45";
+ point.style.top=(y-mod)+"px";
+ point.style.left=(x-mod)+"px";
+ point.style.width=r+"px";
+ point.style.height=r+"px";
+ var fill=document.createElement("v:fill");
+ fill.setAttribute("opacity", "0.6");
+ point.appendChild(fill);
+ chart.dataGroup.appendChild(point);
+ }
+ };
+ plotters["bubble"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
+ // summary
+ // plot the passed series as a series of bubbles (scatter with 3rd dimension)
+ // added param for series[n].value: size
+ var minR=1;
+
+ // do this off the x axis?
+ var min=chart.properties.axes.x.range.min;
+ var max=chart.properties.axes.x.range.max;
+ var ofst=0-min;
+
+ min+=ofst; max+=ofst;
+ var xmin=chart.properties.padding.left;
+ var xmax=chart.properties.width-chart.properties.padding.right;
+ var factor=(max-min)/(xmax-xmin)*25;
+
+ for (var i=0; i<series.values.length; i++){
+ var size = series.values[i].size;
+ if (isNaN(parseFloat(size))) size=minR;
+
+ var radius=(parseFloat(size)*factor)/2;
+ var diameter=radius * 2;
+ var cx=self.getX(series.values[i].x, chart);
+ var cy=self.getY(series.values[i].value, chart);
+
+ var top=cy-radius;
+ var left=cx-radius;
+
+ var point=document.createElement("v:oval");
+ point.setAttribute("fillcolor", series.color);
+ point.setAttribute("title", series.label + ": " + series.values[i].value + " (" + size + ")");
+ point.setAttribute("stroked", "false");
+ point.style.position="absolute";
+
+ point.style.top=top+"px";
+ point.style.left=left+"px";
+ point.style.width=diameter+"px";
+ point.style.height=diameter+"px";
+
+ var fill=document.createElement("v:fill");
+ fill.setAttribute("opacity", "0.8");
+ point.appendChild(fill);
+
+ chart.dataGroup.appendChild(point);
+ }
+ };
+}();
Modified: myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/Parse.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/Parse.js?view=diff&rev=473277&r1=473276&r2=473277
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/Parse.js (original)
+++ myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/Parse.js Fri Nov 10 01:15:01 2006
@@ -9,99 +9,143 @@
*/
dojo.provide("dojo.xml.Parse");
-
dojo.require("dojo.dom");
//TODO: determine dependencies
// currently has dependency on dojo.xml.DomUtil nodeTypes constants...
-/* generic method for taking a node and parsing it into an object
-
-TODO: WARNING: This comment is wrong!
-
-For example, the following xml fragment
-
-<foo bar="bar">
- <baz xyzzy="xyzzy"/>
-</foo>
-
-can be described as:
-
-dojo.???.foo = {}
-dojo.???.foo.bar = {}
-dojo.???.foo.bar.value = "bar";
-dojo.???.foo.baz = {}
-dojo.???.foo.baz.xyzzy = {}
-dojo.???.foo.baz.xyzzy.value = "xyzzy"
-
+/*
+ generic class for taking a node and parsing it into an object
*/
+
// using documentFragment nomenclature to generalize in case we don't want to require passing a collection of nodes with a single parent
+
dojo.xml.Parse = function(){
- function getDojoTagName (node) {
- var tagName = node.tagName;
- if (tagName.substr(0,5).toLowerCase() != "dojo:") {
-
- if (tagName.substr(0,4).toLowerCase() == "dojo") {
- // FIXME: this assuumes tag names are always lower case
- return "dojo:" + tagName.substring(4).toLowerCase();
- }
-
- // allow lower-casing
- var djt = node.getAttribute("dojoType") || node.getAttribute("dojotype");
- if (djt) { return "dojo:" + djt.toLowerCase(); }
-
- if (node.getAttributeNS && node.getAttributeNS(dojo.dom.dojoml,"type")) {
- return "dojo:" + node.getAttributeNS(dojo.dom.dojoml,"type").toLowerCase();
- }
- try {
- // FIXME: IE really really doesn't like this, so we squelch
- // errors for it
- djt = node.getAttribute("dojo:type");
- } catch (e) { /* FIXME: log? */ }
+ // supported dojoTagName's:
+ //
+ // <prefix:tag> => prefix:tag
+ // <dojo:tag> => dojo:tag
+ // <dojoTag> => dojo:tag
+ // <tag dojoType="type"> => dojo:type
+ // <tag dojoType="prefix:type"> => prefix:type
+ // <tag dojo:type="type"> => dojo:type
+ // <tag class="classa dojo-type classb"> => dojo:type
+
+ // get normalized (lowercase) tagName
+ // some browsers report tagNames in lowercase no matter what
+ function getTagName(node){
+ return ((node)&&(node.tagName) ? node.tagName.toLowerCase() : '');
+ }
- if (djt) { return "dojo:"+djt.toLowerCase(); }
-
- if (!dj_global["djConfig"] || !djConfig["ignoreClassNames"]) {
- // FIXME: should we make this optionally enabled via djConfig?
- var classes = node.className||node.getAttribute("class");
- // FIXME: following line, without check for existence of classes.indexOf
- // breaks firefox 1.5's svg widgets
- if (classes && classes.indexOf && classes.indexOf("dojo-") != -1) {
- var aclasses = classes.split(" ");
- for(var x=0; x<aclasses.length; x++){
- if (aclasses[x].length > 5 && aclasses[x].indexOf("dojo-") >= 0) {
- return "dojo:"+aclasses[x].substr(5).toLowerCase();
- }
+ // locate dojo qualified tag name
+ function getDojoTagName(node){
+ var tagName = getTagName(node);
+ if (!tagName){
+ return '';
+ }
+ // any registered tag
+ if((dojo.widget)&&(dojo.widget.tags[tagName])){
+ return tagName;
+ }
+ // <prefix:tag> => prefix:tag
+ var p = tagName.indexOf(":");
+ if(p>=0){
+ return tagName;
+ }
+ // <dojo:tag> => dojo:tag
+ if(tagName.substr(0,5) == "dojo:"){
+ return tagName;
+ }
+ if(dojo.render.html.capable && dojo.render.html.ie && node.scopeName != 'HTML'){
+ return node.scopeName.toLowerCase() + ':' + tagName;
+ }
+ // <dojoTag> => dojo:tag
+ if(tagName.substr(0,4) == "dojo"){
+ // FIXME: this assumes tag names are always lower case
+ return "dojo:" + tagName.substring(4);
+ }
+ // <tag dojoType="prefix:type"> => prefix:type
+ // <tag dojoType="type"> => dojo:type
+ var djt = node.getAttribute("dojoType") || node.getAttribute("dojotype");
+ if(djt){
+ if (djt.indexOf(":")<0){
+ djt = "dojo:"+djt;
+ }
+ return djt.toLowerCase();
+ }
+ // <tag dojo:type="type"> => dojo:type
+ djt = node.getAttributeNS && node.getAttributeNS(dojo.dom.dojoml,"type");
+ if(djt){
+ return "dojo:" + djt.toLowerCase();
+ }
+ // <tag dojo:type="type"> => dojo:type
+ try{
+ // FIXME: IE really really doesn't like this, so we squelch errors for it
+ djt = node.getAttribute("dojo:type");
+ }catch(e){
+ // FIXME: log?
+ }
+ if(djt){ return "dojo:"+djt.toLowerCase(); }
+ // <tag class="classa dojo-type classb"> => dojo:type
+ if((!dj_global["djConfig"])|| (djConfig["ignoreClassNames"])){
+ // FIXME: should we make this optionally enabled via djConfig?
+ var classes = node.className||node.getAttribute("class");
+ // FIXME: following line, without check for existence of classes.indexOf
+ // breaks firefox 1.5's svg widgets
+ if((classes )&&(classes.indexOf)&&(classes.indexOf("dojo-")!=-1)){
+ var aclasses = classes.split(" ");
+ for(var x=0, c=aclasses.length; x<c; x++){
+ if(aclasses[x].slice(0, 5) == "dojo-"){
+ return "dojo:"+aclasses[x].substr(5).toLowerCase();
}
}
}
-
}
- return tagName.toLowerCase();
+ // no dojo-qualified name
+ return '';
}
this.parseElement = function(node, hasParentNodeSet, optimizeForDojoML, thisIdx){
- // if parseWidgets="false" don't search inside this node for widgets
- if (node.getAttribute("parseWidgets") == "false") {
- return {};
- }
-
- // TODO: make this namespace aware
var parsedNodeSet = {};
+
+ var tagName = getTagName(node);
+ //There's a weird bug in IE where it counts end tags, e.g. </dojo:button> as nodes that should be parsed. Ignore these
+ if((tagName)&&(tagName.indexOf("/")==0)){
+ return null;
+ }
+
+ // look for a dojoml qualified name
+ // process dojoml only when optimizeForDojoML is true
+ var process = true;
+ if(optimizeForDojoML){
+ var dojoTagName = getDojoTagName(node);
+ tagName = dojoTagName || tagName;
+ process = Boolean(dojoTagName);
+ }
+
+ if(node && node.getAttribute && node.getAttribute("parseWidgets") && node.getAttribute("parseWidgets") == "false") {
+ return {};
+ }
- var tagName = getDojoTagName(node);
parsedNodeSet[tagName] = [];
- if((!optimizeForDojoML)||(tagName.substr(0,4).toLowerCase()=="dojo")){
- var attributeSet = parseAttributes(node);
+ var pos = tagName.indexOf(":");
+ if(pos>0){
+ var ns = tagName.substring(0,pos);
+ parsedNodeSet["ns"] = ns;
+ // honor user namespace filters
+ if((dojo.ns)&&(!dojo.ns.allow(ns))){process=false;}
+ }
+
+ if(process){
+ var attributeSet = this.parseAttributes(node);
for(var attr in attributeSet){
if((!parsedNodeSet[tagName][attr])||(typeof parsedNodeSet[tagName][attr] != "array")){
parsedNodeSet[tagName][attr] = [];
}
parsedNodeSet[tagName][attr].push(attributeSet[attr]);
- }
-
+ }
// FIXME: we might want to make this optional or provide cloning instead of
// referencing, but for now, we include a node reference to allow
// instantiated components to figure out their "roots"
@@ -109,14 +153,14 @@
parsedNodeSet.tagName = tagName;
parsedNodeSet.index = thisIdx||0;
}
-
+
var count = 0;
- var tcn, i = 0, nodes = node.childNodes;
- while(tcn = nodes[i++]){
+ for(var i = 0; i < node.childNodes.length; i++){
+ var tcn = node.childNodes.item(i);
switch(tcn.nodeType){
case dojo.dom.ELEMENT_NODE: // element nodes, call this function recursively
count++;
- var ctn = getDojoTagName(tcn);
+ var ctn = getDojoTagName(tcn) || getTagName(tcn);
if(!parsedNodeSet[ctn]){
parsedNodeSet[ctn] = [];
}
@@ -127,7 +171,7 @@
}
break;
case dojo.dom.TEXT_NODE: // if a single text node is the child, treat it as an attribute
- if(node.childNodes.length == 1) {
+ if(node.childNodes.length == 1){
parsedNodeSet[tagName].push({ value: node.childNodes.item(0).nodeValue });
}
break;
@@ -157,32 +201,35 @@
}
}
//return (hasParentNodeSet) ? parsedNodeSet[node.tagName] : parsedNodeSet;
+ //if(parsedNodeSet.tagName)dojo.debug("parseElement: RETURNING NODE WITH TAGNAME "+parsedNodeSet.tagName);
return parsedNodeSet;
- }
+ };
/* parses a set of attributes on a node into an object tree */
- function parseAttributes(node) {
- // TODO: make this namespace aware
+ this.parseAttributes = function(node){
var parsedAttributeSet = {};
var atts = node.attributes;
// TODO: should we allow for duplicate attributes at this point...
// would any of the relevant dom implementations even allow this?
var attnode, i=0;
- while(attnode=atts[i++]) {
+ while((attnode=atts[i++])){
if((dojo.render.html.capable)&&(dojo.render.html.ie)){
if(!attnode){ continue; }
- if( (typeof attnode == "object")&&
+ if((typeof attnode == "object")&&
(typeof attnode.nodeValue == 'undefined')||
(attnode.nodeValue == null)||
(attnode.nodeValue == '')){
continue;
}
}
- var nn = (attnode.nodeName.indexOf("dojo:") == -1) ? attnode.nodeName : attnode.nodeName.split("dojo:")[1];
+
+ var nn = attnode.nodeName.split(":");
+ nn = (nn.length == 2) ? nn[1] : attnode.nodeName;
+
parsedAttributeSet[nn] = {
value: attnode.nodeValue
};
}
return parsedAttributeSet;
- }
-}
+ };
+};
Added: myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/XslTransform.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/XslTransform.js?view=auto&rev=473277
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/XslTransform.js (added)
+++ myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/XslTransform.js Fri Nov 10 01:15:01 2006
@@ -0,0 +1,188 @@
+/*
+ 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.xml.XslTransform");
+
+dojo.xml.XslTransform = function(/*String*/ xsltUri) {
+ // summary:
+ // dojo.xml.XslTransform is a convenience object that takes the URI String
+ // of an XSL file as a constructor argument.
+ // After each transformation all parameters will be cleared.
+
+ // Note this is supported by IE and Mozilla ONLY.
+
+ dojo.debug("XslTransform is supported by Internet Explorer and Mozilla, with limited support in Opera 9 (no document function support).");
+ var IS_IE = window.ActiveXObject ? true : false;
+ var ACTIVEX_DOMS = [
+ "Msxml2.DOMDocument.5.0",
+ "Msxml2.DOMDocument.4.0",
+ "Msxml2.DOMDocument.3.0",
+ "MSXML2.DOMDocument",
+ "MSXML.DOMDocument",
+ "Microsoft.XMLDOM"
+ ];
+ var ACTIVEX_FT_DOMS = [
+ "Msxml2.FreeThreadedDOMDocument.5.0",
+ "MSXML2.FreeThreadedDOMDocument.4.0",
+ "MSXML2.FreeThreadedDOMDocument.3.0"
+ ];
+ var ACTIVEX_TEMPLATES = [
+ "Msxml2.XSLTemplate.5.0",
+ "Msxml2.XSLTemplate.4.0",
+ "MSXML2.XSLTemplate.3.0"
+ ];
+
+ function getActiveXImpl(activeXArray) {
+ for (var i=0; i < activeXArray.length; i++) {
+ try {
+ var testObj = new ActiveXObject(activeXArray[i]);
+ if (testObj) {
+ return activeXArray[i];
+ }
+ } catch (e) {}
+ }
+ dojo.raise("Could not find an ActiveX implementation in:\n\n " + activeXArray);
+ }
+
+ if (xsltUri == null || xsltUri == undefined) {
+ dojo.raise("You must pass the URI String for the XSL file to be used!");
+ return false;
+ }
+
+ var xsltDocument = null;
+ var xsltProcessor = null;
+ if (IS_IE) {
+ xsltDocument = new ActiveXObject(getActiveXImpl(ACTIVEX_FT_DOMS));
+ xsltDocument.async = false;
+ } else {
+ xsltProcessor = new XSLTProcessor();
+ xsltDocument = document.implementation.createDocument("", "", null);
+ xsltDocument.addEventListener("load", onXslLoad, false);
+ }
+ xsltDocument.load(xsltUri);
+
+ if (IS_IE) {
+ var xslt = new ActiveXObject(getActiveXImpl(ACTIVEX_TEMPLATES));
+ xslt.stylesheet = xsltDocument;
+ xsltProcessor = xslt.createProcessor();
+ }
+
+ function onXslLoad() {
+ xsltProcessor.importStylesheet(xsltDocument);
+ }
+
+ function getResultDom(xmlDoc, params) {
+ if (IS_IE) {
+ addIeParams(params);
+ var result = getIeResultDom(xmlDoc);
+ removeIeParams(params);
+ return result;
+ } else {
+ return getMozillaResultDom(xmlDoc, params);
+ }
+ }
+
+ function addIeParams(params) {
+ if (params != null) {
+ for (var i=0; i<params.length; i++)
+ xsltProcessor.addParameter(params[i][0], params[i][1]);
+ }
+ }
+
+ function removeIeParams(params) {
+ if (params != null) {
+ for (var i=0; i<params.length; i++)
+ xsltProcessor.addParameter(params[i][0], "");
+ }
+ }
+
+ function getIeResultDom(xmlDoc) {
+ xsltProcessor.input = xmlDoc;
+ var outDoc = new ActiveXObject(getActiveXImpl(ACTIVEX_DOMS));
+ outDoc.async = false;
+ outDoc.validateOnParse = false;
+ xsltProcessor.output = outDoc;
+ xsltProcessor.transform();
+ if (outDoc.parseError.errorCode != 0) {
+ var err = outDoc.parseError;
+ dojo.raise("err.errorCode: " + err.errorCode + "\n\nerr.reason: " + err.reason + "\n\nerr.url: " + err.url + "\n\nerr.srcText: " + err.srcText);
+ }
+ return outDoc;
+ }
+
+ function getIeResultStr(xmlDoc, params) {
+ xsltProcessor.input = xmlDoc;
+ xsltProcessor.transform();
+ return xsltProcessor.output;
+ }
+
+ function addMozillaParams(params) {
+ if (params != null) {
+ for (var i=0; i<params.length; i++)
+ xsltProcessor.setParameter(null, params[i][0], params[i][1]);
+ }
+ }
+
+ function getMozillaResultDom(xmlDoc, params) {
+ addMozillaParams(params);
+ var resultDoc = xsltProcessor.transformToDocument(xmlDoc);
+ xsltProcessor.clearParameters();
+ return resultDoc;
+ }
+
+ function getMozillaResultStr(xmlDoc, params, parentDoc) {
+ addMozillaParams(params);
+ var resultDoc = xsltProcessor.transformToFragment(xmlDoc, parentDoc);
+ var serializer = new XMLSerializer();
+ xsltProcessor.clearParameters();
+ return serializer.serializeToString(resultDoc);
+ }
+
+ this.getResultString = function(/*XMLDocument*/ xmlDoc, /*2 Dimensional Array*/params, /*HTMLDocument*/parentDoc) {
+ var content = null;
+ if (IS_IE) {
+ addIeParams(params);
+ content = getIeResultStr(xmlDoc, params);
+ removeIeParams(params);
+ } else {
+ content = getMozillaResultStr(xmlDoc, params, parentDoc);
+ }
+ //dojo.debug(content);
+ return content;
+ };
+
+ this.transformToContentPane = function(/*XMLDocument*/ xmlDoc, /*2 Dimensional Array*/params, /*ContentPane*/contentPane, /*HTMLDocument*/parentDoc) {
+ var content = this.getResultString(xmlDoc, params, parentDoc);
+ contentPane.setContent(content);
+ };
+
+ this.transformToRegion = function(/*XMLDocument*/ xmlDoc, /*2 Dimensional Array*/params, /*HTMLElement*/region, /*HTMLDocument*/parentDoc) {
+ try {
+ var content = this.getResultString(xmlDoc, params, parentDoc);
+ region.innerHTML = content;
+ } catch (e) {
+ dojo.raise(e.message + "\n\n xsltUri: " + xsltUri)
+ }
+ };
+
+ this.transformToDocument = function(/*XMLDocument*/ xmlDoc, /*2 Dimensional Array*/params) {
+ return getResultDom(xmlDoc, params);
+ }
+
+ this.transformToWindow = function(/*XMLDocument*/ xmlDoc, /*2 Dimensional Array*/params, /*HTMLDocument*/windowDoc, /*HTMLDocument*/parentDoc) {
+ try {
+ windowDoc.open();
+ windowDoc.write(this.getResultString(xmlDoc, params, parentDoc));
+ windowDoc.close();
+ } catch (e) {
+ dojo.raise(e.message + "\n\n xsltUri: " + xsltUri)
+ }
+ };
+};
Propchange: myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/XslTransform.js
------------------------------------------------------------------------------
svn:keywords = "Id Author LastChangedDate LastChangedBy LastChangedRevision"
Propchange: myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/XslTransform.js
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/__package__.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/__package__.js?view=diff&rev=473277&r1=473276&r2=473277
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/__package__.js (original)
+++ myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/src/xml/__package__.js Fri Nov 10 01:15:01 2006
@@ -10,9 +10,9 @@
dojo.require("dojo.xml.Parse");
dojo.kwCompoundRequire({
- common: ["dojo.xml.domUtil"],
- browser: ["dojo.xml.htmlUtil"],
- dashboard: ["dojo.xml.htmlUtil"],
+ common: ["dojo.dom"],
+ browser: ["dojo.html.*"],
+ dashboard: ["dojo.html.*"],
svg: ["dojo.xml.svgUtil"]
});
dojo.provide("dojo.xml.*");
Added: myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/storage_dialog.swf
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/storage_dialog.swf?view=auto&rev=473277
==============================================================================
Binary file - no diff available.
Propchange: myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/storage_dialog.swf
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/version.txt
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/version.txt?view=diff&rev=473277&r1=473276&r2=473277
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/version.txt (original)
+++ myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/dojo/resource/version.txt Fri Nov 10 01:15:01 2006
@@ -1,2 +1,2 @@
-keeDOJO library version 0.3.1
+keeDOJO library version 0.4
kitchen sink release