summaryrefslogtreecommitdiff
path: root/js/dojo-1.6/dojox/charting/widget/Legend.xd.js
diff options
context:
space:
mode:
authorTristan Zur <tzur@web.web.ccwn.org>2014-03-27 22:27:47 +0100
committerTristan Zur <tzur@web.web.ccwn.org>2014-03-27 22:27:47 +0100
commitb62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch)
tree86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /js/dojo-1.6/dojox/charting/widget/Legend.xd.js
Initial commit of intern.ccwn.org contentsHEADmaster
Diffstat (limited to 'js/dojo-1.6/dojox/charting/widget/Legend.xd.js')
-rw-r--r--js/dojo-1.6/dojox/charting/widget/Legend.xd.js186
1 files changed, 186 insertions, 0 deletions
diff --git a/js/dojo-1.6/dojox/charting/widget/Legend.xd.js b/js/dojo-1.6/dojox/charting/widget/Legend.xd.js
new file mode 100644
index 0000000..6a3574f
--- /dev/null
+++ b/js/dojo-1.6/dojox/charting/widget/Legend.xd.js
@@ -0,0 +1,186 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.charting.widget.Legend"],
+["require", "dijit._Widget"],
+["require", "dijit._Templated"],
+["require", "dojox.lang.functional.array"],
+["require", "dojox.lang.functional.fold"]],
+defineResource: function(dojo, dijit, dojox){if(!dojo._hasResource["dojox.charting.widget.Legend"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.widget.Legend"] = true;
+dojo.provide("dojox.charting.widget.Legend");
+
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+
+dojo.require("dojox.lang.functional.array");
+dojo.require("dojox.lang.functional.fold");
+
+dojo.declare("dojox.charting.widget.Legend", [dijit._Widget, dijit._Templated], {
+ // summary: A legend for a chart. A legend contains summary labels for
+ // each series of data contained in the chart.
+ //
+ // Set the horizontal attribute to boolean false to layout legend labels vertically.
+ // Set the horizontal attribute to a number to layout legend labels in horizontal
+ // rows each containing that number of labels (except possibly the last row).
+ //
+ // (Line or Scatter charts (colored lines with shape symbols) )
+ // -o- Series1 -X- Series2 -v- Series3
+ //
+ // (Area/Bar/Pie charts (letters represent colors))
+ // [a] Series1 [b] Series2 [c] Series3
+
+ chartRef: "",
+ horizontal: true,
+ swatchSize: 18,
+
+ templateString: "<table dojoAttachPoint='legendNode' class='dojoxLegendNode' role='group' aria-label='chart legend'><tbody dojoAttachPoint='legendBody'></tbody></table>",
+
+ legendNode: null,
+ legendBody: null,
+
+ postCreate: function(){
+ if(!this.chart){
+ if(!this.chartRef){ return; }
+ this.chart = dijit.byId(this.chartRef);
+ if(!this.chart){
+ var node = dojo.byId(this.chartRef);
+ if(node){
+ this.chart = dijit.byNode(node);
+ }else{
+ console.log("Could not find chart instance with id: " + this.chartRef);
+ return;
+ }
+ }
+ this.series = this.chart.chart.series;
+ }else{
+ this.series = this.chart.series;
+ }
+
+ this.refresh();
+ },
+ refresh: function(){
+ // summary: regenerates the legend to reflect changes to the chart
+
+ var df = dojox.lang.functional;
+
+ // cleanup
+ if(this._surfaces){
+ dojo.forEach(this._surfaces, function(surface){
+ surface.destroy();
+ });
+ }
+ this._surfaces = [];
+ while(this.legendBody.lastChild){
+ dojo.destroy(this.legendBody.lastChild);
+ }
+
+ if(this.horizontal){
+ dojo.addClass(this.legendNode, "dojoxLegendHorizontal");
+ // make a container <tr>
+ this._tr = dojo.create("tr", null, this.legendBody);
+ this._inrow = 0;
+ }
+
+ var s = this.series;
+ if(s.length == 0){
+ return;
+ }
+ if(s[0].chart.stack[0].declaredClass == "dojox.charting.plot2d.Pie"){
+ var t = s[0].chart.stack[0];
+ if(typeof t.run.data[0] == "number"){
+ var filteredRun = df.map(t.run.data, "Math.max(x, 0)");
+ if(df.every(filteredRun, "<= 0")){
+ return;
+ }
+ var slices = df.map(filteredRun, "/this", df.foldl(filteredRun, "+", 0));
+ dojo.forEach(slices, function(x, i){
+ this._addLabel(t.dyn[i], t._getLabel(x * 100) + "%");
+ }, this);
+ }else{
+ dojo.forEach(t.run.data, function(x, i){
+ this._addLabel(t.dyn[i], x.legend || x.text || x.y);
+ }, this);
+ }
+ }else{
+ dojo.forEach(s, function(x){
+ this._addLabel(x.dyn, x.legend || x.name);
+ }, this);
+ }
+ },
+ _addLabel: function(dyn, label){
+ // create necessary elements
+ var wrapper = dojo.create("td"),
+ icon = dojo.create("div", null, wrapper),
+ text = dojo.create("label", null, wrapper),
+ div = dojo.create("div", {
+ style: {
+ "width": this.swatchSize + "px",
+ "height":this.swatchSize + "px",
+ "float": "left"
+ }
+ }, icon);
+ dojo.addClass(icon, "dojoxLegendIcon dijitInline");
+ dojo.addClass(text, "dojoxLegendText");
+ // create a skeleton
+ if(this._tr){
+ // horizontal
+ this._tr.appendChild(wrapper);
+ if(++this._inrow === this.horizontal){
+ // make a fresh container <tr>
+ this._tr = dojo.create("tr", null, this.legendBody);
+ this._inrow = 0;
+ }
+ }else{
+ // vertical
+ var tr = dojo.create("tr", null, this.legendBody);
+ tr.appendChild(wrapper);
+ }
+
+ // populate the skeleton
+ this._makeIcon(div, dyn);
+ text.innerHTML = String(label);
+ },
+ _makeIcon: function(div, dyn){
+ var mb = { h: this.swatchSize, w: this.swatchSize };
+ var surface = dojox.gfx.createSurface(div, mb.w, mb.h);
+ this._surfaces.push(surface);
+ if(dyn.fill){
+ // regions
+ surface.createRect({x: 2, y: 2, width: mb.w - 4, height: mb.h - 4}).
+ setFill(dyn.fill).setStroke(dyn.stroke);
+ }else if(dyn.stroke || dyn.marker){
+ // draw line
+ var line = {x1: 0, y1: mb.h / 2, x2: mb.w, y2: mb.h / 2};
+ if(dyn.stroke){
+ surface.createLine(line).setStroke(dyn.stroke);
+ }
+ if(dyn.marker){
+ // draw marker on top
+ var c = {x: mb.w / 2, y: mb.h / 2};
+ if(dyn.stroke){
+ surface.createPath({path: "M" + c.x + " " + c.y + " " + dyn.marker}).
+ setFill(dyn.stroke.color).setStroke(dyn.stroke);
+ }else{
+ surface.createPath({path: "M" + c.x + " " + c.y + " " + dyn.marker}).
+ setFill(dyn.color).setStroke(dyn.color);
+ }
+ }
+ }else{
+ // nothing
+ surface.createRect({x: 2, y: 2, width: mb.w - 4, height: mb.h - 4}).
+ setStroke("black");
+ surface.createLine({x1: 2, y1: 2, x2: mb.w - 2, y2: mb.h - 2}).setStroke("black");
+ surface.createLine({x1: 2, y1: mb.h - 2, x2: mb.w - 2, y2: 2}).setStroke("black");
+ }
+ }
+});
+
+}
+
+}};});