You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/09/28 15:14:41 UTC
[09/69] [abbrv] stratos git commit: Removed tenantId from queries and
refactore jaggery files
http://git-wip-us.apache.org/repos/asf/stratos/blob/9c1fdc75/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Status/Member_Status/js/igviz.js
----------------------------------------------------------------------
diff --git a/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Status/Member_Status/js/igviz.js b/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Status/Member_Status/js/igviz.js
new file mode 100644
index 0000000..d30d7a6
--- /dev/null
+++ b/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Status/Member_Status/js/igviz.js
@@ -0,0 +1,3545 @@
+(function () {
+
+ var igviz = window.igviz || {};
+
+ igviz.version = '1.0.0';
+
+ igviz.val = 0;
+ window.igviz = igviz;
+ var persistedData = [];
+ var maxValueForUpdate;
+ var singleNumSvg;
+ var singleNumCurveSvg;
+ var mapChart;
+ var mapSVG;
+ var worldMapCodes;
+ var usaMapCodes;
+
+ /*************************************************** Initializtion functions ***************************************************************************************************/
+
+
+ igviz.draw = function (canvas, config, dataTable) {
+ var chart = new Chart(canvas, config, dataTable);
+
+ if (config.chartType == "singleNumber") {
+ this.drawSingleNumberDiagram(chart);
+ } else if (config.chartType == "map") {
+ this.drawMap(canvas, config, dataTable);
+ } else if (config.chartType == "tabular") {
+ this.drawTable(canvas, config, dataTable);
+ } else if (config.chartType == "arc") {
+ this.drawArc(canvas, config, dataTable);
+ } else if (config.chartType == "drill") {
+ this.drillDown(0, canvas, config, dataTable, dataTable);
+ }
+ return chart;
+ //return
+ };
+
+ igviz.setUp = function (canvas, config, dataTable) {
+ var chartObject = new Chart(canvas, config, dataTable);
+
+ if (config.chartType == "bar") {
+ this.drawBarChart(chartObject, canvas, config, dataTable);
+ } else if (config.chartType == "scatter") {
+ this.drawScatterPlot(chartObject);
+ } else if (config.chartType == "line") {
+ this.drawLineChart(chartObject);
+ } else if (config.chartType == "area") {
+ this.drawAreaChart(chartObject);
+ }
+ return chartObject;
+ };
+
+
+ /*************************************************** Line chart ***************************************************************************************************/
+
+ igviz.drawLineChart = function (chartObj) {
+ divId = chartObj.canvas;
+ chartConfig = chartObj.config;
+ dataTable = chartObj.dataTable;
+ // table=setData(dataTable,chartConfig)
+
+ xString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.xAxis])
+ yStrings = [];
+ for (i = 0; i < chartConfig.yAxis.length; i++) {
+ yStrings[i] = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.yAxis[i]])
+
+ }
+
+
+ xScaleConfig = {
+ "index": chartConfig.xAxis,
+ "schema": dataTable.metadata,
+ "name": "x",
+ "range": "width",
+ "zero": false,
+ "clamp": false,
+ "field": xString
+ }
+
+ yScaleConfig = {
+ "index": chartConfig.yAxis[0],
+ "schema": dataTable.metadata,
+ "name": "y",
+ "range": "height",
+ "nice": true,
+ "field": yStrings[0]
+ }
+
+ var xScale = setScale(xScaleConfig)
+ var yScale = setScale(yScaleConfig);
+
+ var xAxisConfig = {
+ "type": "x",
+ "scale": "x",
+ "angle": -35,
+ "title": dataTable.metadata.names[chartConfig.xAxis],
+ "grid": true,
+ "dx": -10,
+ "dy": 10,
+ "align": "right",
+ "titleDy": 10,
+ "titleDx": 0
+ }
+ var yAxisConfig = {
+ "type": "y",
+ "scale": "y",
+ "angle": 0,
+ "title": "values",
+ "grid": true,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": -10,
+ "titleDx": 0
+ }
+ var xAxis = setAxis(xAxisConfig);
+ var yAxis = setAxis(yAxisConfig);
+
+ if (chartConfig.interpolationMode == undefined) {
+ chartConfig.interpolationMode = "monotone";
+ }
+ var spec = {
+ "width": chartConfig.width - 160,
+ "height": chartConfig.height,
+ // "padding":{"top":40,"bottom":60,'left':90,"right":150},
+ "data": [
+ {
+ "name": "table"
+
+ }
+ ],
+ "scales": [
+ xScale, yScale,
+ {
+ "name": "color", "type": "ordinal", "range": "category20"
+ }
+ ],
+ "axes": [xAxis, yAxis
+ ],
+ "legends": [
+ {
+
+ "orient": "right",
+ "fill": "color",
+ "title": "Legend",
+ "values": [],
+ "properties": {
+ "title": {
+ "fontSize": {"value": 14}
+ },
+ "labels": {
+ "fontSize": {"value": 12}
+ },
+ "symbols": {
+ "stroke": {"value": "transparent"}
+ },
+ "legend": {
+ "stroke": {"value": "steelblue"},
+ "strokeWidth": {"value": 1.5}
+
+ }
+ }
+ }
+ ],
+
+ "marks": []
+ }
+
+ for (i = 0; i < chartConfig.yAxis.length; i++) {
+ markObj = {
+ "type": "line",
+ "key": xString,
+ "from": {"data": "table"},
+ "properties": {
+ "enter": {
+ "x": {"value": 400},
+ "interpolate": {"value": chartConfig.interpolationMode},
+ "y": {"scale": "y:prev", "field": yStrings[i]},
+ "stroke": {"scale": "color", "value": dataTable.metadata.names[chartConfig.yAxis[i]]},
+ "strokeWidth": {"value": 1.5}
+ },
+ "update": {
+ "x": {"scale": "x", "field": xString},
+ "y": {"scale": "y", "field": yStrings[i]}
+ },
+ "exit": {
+ "x": {"value": -20},
+ "y": {"scale": "y", "field": yStrings[i]}
+ }
+ }
+ };
+ pointObj = {
+ "type": "symbol",
+ "from": {"data": "table"},
+ "properties": {
+ "enter": {
+ "x": {"scale": "x", "field": xString},
+ "y": {"scale": "y", "field": yStrings[i]},
+ "fill": {
+ "scale": "color", "value": dataTable.metadata.names[chartConfig.yAxis[i]]
+ //"fillOpacity": {"value": 0.5}
+ },
+ "update": {
+ //"size": {"scale":"r","field":rString},
+ // "stroke": {"value": "transparent"}
+ },
+ "hover": {
+ "size": {"value": 300},
+ "stroke": {"value": "white"}
+ }
+ }
+ }
+ }
+
+
+ spec.marks.push(markObj);
+ spec.marks.push(pointObj);
+ spec.legends[0].values.push(dataTable.metadata.names[chartConfig.yAxis[i]])
+
+ }
+
+
+ chartObj.toolTipFunction = [];
+ chartObj.toolTipFunction[0] = function (event, item) {
+
+ console.log(tool, event, item);
+ if (item.mark.marktype == 'symbol') {
+ xVar = dataTable.metadata.names[chartConfig.xAxis]
+ yVar = dataTable.metadata.names[chartConfig.yAxis]
+
+ contentString = '<table><tr><td> X </td><td> (' + xVar + ') </td><td>' + item.datum.data[xVar] + '</td></tr>' + '<tr><td> Y </td><td> (' + yVar + ') </td><td>' + item.datum.data[yVar] + '</td></tr></table>';
+
+
+ tool.html(contentString).style({
+ 'left': event.pageX + 10 + 'px',
+ 'top': event.pageY + 10 + 'px',
+ 'opacity': 1
+ })
+ tool.selectAll('tr td').style('padding', "3px");
+ }
+ }
+
+ chartObj.toolTipFunction[1] = function (event, item) {
+
+ tool.html("").style({'left': event.pageX + 10 + 'px', 'top': event.pageY + 10 + 'px', 'opacity': 0})
+
+ }
+
+ chartObj.spec = spec;
+ chartObj.toolTip = true;
+ chartObj.spec = spec;
+
+ }
+
+
+ /*************************************************** Bar chart ***************************************************************************************************/
+ igviz.drawBarChart = function (mychart, divId, chartConfig, dataTable) {
+ // console.log(this);
+ divId = mychart.canvas;
+ chartConfig = mychart.config;
+ dataTable = mychart.dataTable;
+ if (chartConfig.hasOwnProperty("groupedBy")) {
+ var format = "grouped";
+ if (chartConfig.hasOwnProperty("format")) {
+ format = chartConfig.format;
+
+ }
+ if (format == "grouped") {
+ console.log("groupedDFJSDFKSD:JFKDJF");
+ if (chartConfig.orientation == 'H') {
+ console.log('horizontal');
+ return this.drawGroupedBarChart(mychart);
+
+ }
+ return this.drawGroupedBarChartVertical(mychart);
+ }
+ else {
+ return this.drawStackedBarChart(mychart);
+ }
+ }
+
+ var xString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.xAxis]);
+ var yString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.yAxis])
+
+ xScaleConfig = {
+ "index": chartConfig.xAxis,
+ "schema": dataTable.metadata,
+ "name": "x",
+ "zero": false,
+ "range": "width",
+ "round": true,
+ "field": xString
+ }
+
+ yScaleConfig = {
+ "index": chartConfig.yAxis,
+ "schema": dataTable.metadata,
+ "name": "y",
+ "range": "height",
+ "nice": true,
+ "field": yString
+ }
+
+ var xScale = setScale(xScaleConfig)
+ var yScale = setScale(yScaleConfig);
+
+ var xAxisConfig = {
+ "type": "x",
+ "scale": "x",
+ "angle": -35,
+ "title": dataTable.metadata.names[chartConfig.xAxis],
+ "grid": false,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": 30,
+ "titleDx": 0
+ }
+ var yAxisConfig = {
+ "type": "y",
+ "scale": "y",
+ "angle": 0,
+ "title": dataTable.metadata.names[chartConfig.yAxis],
+ "grid": true,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": -35,
+ "titleDx": 0
+ }
+ var xAxis = setAxis(xAxisConfig);
+ var yAxis = setAxis(yAxisConfig);
+
+ if (chartConfig.barColor == undefined) {
+ chartConfig.barColor = "steelblue";
+ }
+
+// console.log(table)
+ var spec = {
+
+ "width": chartConfig.width - 150,
+ //"padding":{'top':30,"left":80,"right":80,'bottom':60},
+ "height": chartConfig.height,
+ "data": [
+ {
+ "name": "table"
+ }
+ ],
+ "scales": [
+ xScale,
+ yScale
+ ],
+ "axes": [
+ xAxis,
+ yAxis
+
+
+ ],
+ "marks": [
+ {
+ "key": xString,
+ "type": "rect",
+ "from": {"data": "table"},
+ "properties": {
+ "enter": {
+ "x": {"scale": "x", "field": xString},
+ "width": {"scale": "x", "band": true, "offset": -10},
+ "y": {"scale": "y:prev", "field": yString, "duration": 2000},
+ "y2": {"scale": "y", "value": 0}
+
+ },
+ "update": {
+ "x": {"scale": "x", "field": xString},
+ "y": {"scale": "y", "field": yString},
+ "y2": {"scale": "y", "value": 0},
+ "fill": {"value": chartConfig.barColor}
+ },
+ "exit": {
+ "x": {"value": 0},
+ "y": {"scale": "y:prev", "field": yString},
+ "y2": {"scale": "y", "value": 0}
+ },
+
+ "hover": {
+
+ "fill": {'value': 'orange'}
+ }
+
+ }
+ }
+ ]
+ }
+
+
+// var data = {table: table}
+
+ mychart.originalWidth = chartConfig.width;
+ mychart.originalHeight = chartConfig.height;
+
+ mychart.spec = spec;
+ //mychart.data = data;
+ //mychart.table = table;
+ ////vg.parse.spec(spec, function (chart) {
+ // mychart.chart = chart({
+ // el: divId,
+ // renderer: 'svg',
+ // data: data,
+ // hover: false
+ //
+ // }).update();
+ //
+ // // mychart.chart.data(data).update();
+ // //self.counter=0;
+ // //console.log('abc');
+ // //setInterval(updateTable,1500);
+ //
+ //});
+ };
+
+ igviz.drawStackedBarChart = function (chartObj) {
+
+ var chartConfig = chartObj.config;
+ var dataTable = chartObj.dataTable;
+ // var table = setData(dataTable,chartConfig);
+ divId = chartObj.canvas;
+
+
+ xString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.xAxis])
+ yStrings = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.yAxis]);
+
+ groupedBy = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.groupedBy]);
+
+ // console.log(table,xString,yStrings,groupedBy);
+ // sortDataSet(table);
+
+ cat = {
+ "index": chartConfig.groupedBy,
+ "schema": dataTable.metadata,
+ "name": "cat",
+ "range": "width",
+ "field": groupedBy,
+ "padding": 0.2
+ }
+
+
+ val = {
+ "index": chartConfig.yAxis,
+ "schema": dataTable.metadata,
+ "name": "val",
+ "range": "height",
+ "dataFrom": "stats",
+ "field": "sum",
+ "nice": true
+ }
+
+
+ var cScale = setScale(cat)
+ var vScale = setScale(val);
+
+ var xAxisConfig = {
+ "type": "x",
+ "scale": "cat",
+ "angle": 0,
+ "title": dataTable.metadata.names[chartConfig.groupedBy],
+ "grid": false,
+ "dx": -10,
+ "dy": 10,
+ "align": "right",
+ "titleDy": 10,
+ "titleDx": 0
+ }
+ var yAxisConfig = {
+ "type": "y",
+ "scale": "val",
+ "angle": 0,
+ "title": dataTable.metadata.names[chartConfig.yAxis],
+ "grid": false,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": -10,
+ "titleDx": 0
+ }
+ var xAxis = setAxis(xAxisConfig);
+ var yAxis = setAxis(yAxisConfig);
+
+
+ spec = {
+ "width": chartConfig.width - 160,
+ "height": chartConfig.height - 100,
+ "padding": {"top": 10, "left": 60, "bottom": 60, "right": 100},
+ "data": [
+ {
+ "name": "table"
+ },
+ {
+ "name": "stats",
+ "source": "table",
+ "transform": [
+ {"type": "facet", "keys": [groupedBy]},
+ {"type": "stats", "value": yStrings}
+ ]
+ }
+ ],
+ "scales": [
+ cScale,
+ vScale,
+ {
+ "name": "color",
+ "type": "ordinal",
+ "range": "category20"
+ }
+ ],
+ "legends": [
+ {
+ "orient": {"value": "right"},
+ "fill": "color",
+ "title": dataTable.metadata.names[chartConfig.xAxis],
+ "values": [],
+ "properties": {
+ "title": {
+ "fontSize": {"value": 14}
+ },
+ "labels": {
+ "fontSize": {"value": 12}
+ },
+ "symbols": {
+ "stroke": {"value": "transparent"}
+ },
+ "legend": {
+ "stroke": {"value": "steelblue"},
+ "strokeWidth": {"value": 0.5}
+
+
+ }
+ }
+ }
+ ],
+
+ "axes": [
+ xAxis, yAxis
+ ],
+
+ "marks": [
+ {
+ "type": "group",
+ "from": {
+ "data": "table",
+ "transform": [
+ {"type": "facet", "keys": [xString]},
+ {"type": "stack", "point": groupedBy, "height": yStrings}
+ ]
+ },
+ "marks": [
+ {
+ "type": "rect",
+ "properties": {
+ "enter": {
+ "x": {"scale": "cat", "field": groupedBy},
+ "width": {"scale": "cat", "band": true, "offset": -1},
+ "y": {"scale": "val", "field": "y"},
+ "y2": {"scale": "val", "field": "y2"},
+ "fill": {"scale": "color", "field": xString}
+ },
+ "update": {
+ "fillOpacity": {"value": 1}
+ },
+ "hover": {
+ "fillOpacity": {"value": 0.5}
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+
+ chartObj.legend = true;
+ chartObj.legendIndex = chartConfig.xAxis;
+ chartObj.spec = spec;
+
+ }
+
+ igviz.drawGroupedBarChart = function (chartObj) {
+ var chartConfig = chartObj.config;
+ var dataTable = chartObj.dataTable;
+ // var table = setData(dataTable,chartConfig);
+ divId = chartObj.canvas;
+
+
+ xString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.xAxis])
+ yStrings = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.yAxis]);
+
+ groupedBy = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.groupedBy]);
+
+ // console.log(table,xString,yStrings,groupedBy);
+ // sortDataSet(table);
+
+ cat = {
+ "index": chartConfig.groupedBy,
+ "schema": dataTable.metadata,
+ "name": "cat",
+ "range": "height",
+ "field": groupedBy,
+ "padding": 0.2
+ }
+
+
+ val = {
+ "index": chartConfig.yAxis,
+ "schema": dataTable.metadata,
+ "name": "val",
+ "range": "width",
+ "round": 'true',
+ "field": yStrings,
+ "nice": true
+ }
+
+
+ var cScale = setScale(cat)
+ var vScale = setScale(val);
+
+ var xAxisConfig = {
+ "type": "x",
+ "scale": "val",
+ "angle": -35,
+ "title": dataTable.metadata.names[chartConfig.yAxis],
+ "grid": true,
+ "dx": -10,
+ "dy": 10,
+ "align": "right",
+ "titleDy": 10,
+ "titleDx": 0
+ }
+ var yAxisConfig = {
+ "type": "y",
+ "scale": "cat",
+ "angle": 0,
+ "tickSize": 0,
+ "tickPadding": 8,
+ "title": dataTable.metadata.names[chartConfig.groupedBy],
+ "grid": false,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": -10,
+ "titleDx": 0
+ }
+ var xAxis = setAxis(xAxisConfig);
+ var yAxis = setAxis(yAxisConfig);
+
+
+ spec = {
+ "width": chartConfig.width,
+ "height": chartConfig.height,
+
+ "data": [
+ {
+ "name": "table"
+ }
+ ],
+ "scales": [
+ cScale, vScale,
+ {
+ "name": "color",
+ "type": "ordinal",
+ "range": "category20"
+ }
+ ],
+ "axes": [
+ xAxis, yAxis
+ ],
+ "legends": [
+ {
+ "orient": {"value": "right"},
+ "fill": "color",
+ "title": dataTable.metadata.names[chartConfig.xAxis],
+ "values": [],
+ "properties": {
+ "title": {
+ "fontSize": {"value": 14}
+ },
+ "labels": {
+ "fontSize": {"value": 12}
+ },
+ "symbols": {
+ "stroke": {"value": "transparent"}
+ },
+ "legend": {
+ "stroke": {"value": "steelblue"},
+ "strokeWidth": {"value": 0.5}
+
+
+ }
+ }
+ }
+ ],
+
+
+ "marks": [
+ {
+ "type": "group",
+ "from": {
+ "data": "table",
+ "transform": [{"type": "facet", "keys": [groupedBy]}]
+ },
+ "properties": {
+ "enter": {
+ "y": {"scale": "cat", "field": "key"},
+ "height": {"scale": "cat", "band": true}
+ }
+ },
+ "scales": [
+ {
+ "name": "pos",
+ "type": "ordinal",
+ "range": "height",
+ "domain": {"field": xString}
+ }
+ ],
+ "marks": [
+ {
+ "type": "rect",
+ "properties": {
+ "enter": {
+ "y": {"scale": "pos", "field": xString},
+ "height": {"scale": "pos", "band": true},
+ "x": {"scale": "val", "field": yStrings},
+ "x2": {"scale": "val", "value": 0},
+ "fill": {"scale": "color", "field": xString}
+ },
+ "hover": {
+ "fillOpacity": {"value": 0.5}
+ }
+ ,
+
+ "update": {
+ "fillOpacity": {"value": 1}
+ }
+ }
+ },
+ //{
+ // "type": "text",
+ // "properties": {
+ // "enter": {
+ // "y": {"scale": "pos", "field": xString},
+ // "dy": {"scale": "pos", "band": true, "mult": 0.5},
+ // "x": {"scale": "val", "field": yStrings, "offset": -4},
+ // "fill": {"value": "white"},
+ // "align": {"value": "right"},
+ // "baseline": {"value": "middle"},
+ // "text": {"field": xString}
+ // }
+ // }
+ //}
+ ]
+ }
+ ]
+ }
+
+ chartObj.legend = true;
+ chartObj.legendIndex = chartConfig.xAxis;
+ chartObj.spec = spec;
+
+ }
+
+ igviz.drawGroupedBarChartVertical = function (chartObj) {
+ var chartConfig = chartObj.config;
+ var dataTable = chartObj.dataTable;
+ // var table = setData(dataTable,chartConfig);
+ divId = chartObj.canvas;
+
+
+ xString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.xAxis])
+ yStrings = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.yAxis]);
+
+ groupedBy = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.groupedBy]);
+
+ // console.log(table,xString,yStrings,groupedBy);
+ // sortDataSet(table);
+
+ cat = {
+ "index": chartConfig.groupedBy,
+ "schema": dataTable.metadata,
+ "name": "cat",
+ "range": "width",
+ "field": groupedBy,
+ "padding": 0.2
+ }
+
+
+ val = {
+ "index": chartConfig.yAxis,
+ "schema": dataTable.metadata,
+ "name": "val",
+ "range": "height",
+ "round": 'true',
+ "field": yStrings,
+ "nice": true
+ }
+
+
+ var cScale = setScale(cat)
+ var vScale = setScale(val);
+
+ var yAxisConfig = {
+ "type": "y",
+ "scale": "val",
+ "angle": -35,
+ "title": dataTable.metadata.names[chartConfig.yAxis],
+ "grid": true,
+ "dx": -10,
+ "dy": 10,
+ "align": "right",
+ "titleDy": 10,
+ "titleDx": 0
+ }
+ var xAxisConfig = {
+ "type": "x",
+ "scale": "cat",
+ "angle": 0,
+ "tickSize": 0,
+ "tickPadding": 8,
+ "title": dataTable.metadata.names[chartConfig.groupedBy],
+ "grid": false,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": -10,
+ "titleDx": 0
+ }
+ var xAxis = setAxis(xAxisConfig);
+ var yAxis = setAxis(yAxisConfig);
+
+
+ spec = {
+ "width": chartConfig.width - 150,
+ "height": chartConfig.height,
+ "data": [
+ {
+ "name": "table"
+ }
+ ],
+ "scales": [
+ cScale, vScale,
+ {
+ "name": "color",
+ "type": "ordinal",
+ "range": "category20"
+ }
+ ],
+ "axes": [
+ xAxis, yAxis
+ ],
+ "legends": [
+ {
+ "orient": {"value": "right"},
+ "fill": "color",
+ "title": dataTable.metadata.names[chartConfig.xAxis],
+ "values": [],
+ "properties": {
+ "title": {
+ "fontSize": {"value": 14}
+ },
+ "labels": {
+ "fontSize": {"value": 12}
+ },
+ "symbols": {
+ "stroke": {"value": "transparent"}
+ },
+ "legend": {
+ "stroke": {"value": "steelblue"},
+ "strokeWidth": {"value": 0.5}
+
+
+ }
+ }
+ }
+ ],
+
+
+ "marks": [
+ {
+ "type": "group",
+ "from": {
+ "data": "table",
+ "transform": [{"type": "facet", "keys": [groupedBy]}]
+ },
+ "properties": {
+ "enter": {
+ "x": {"scale": "cat", "field": "key"},
+ "width": {"scale": "cat", "band": true}
+ }
+ },
+ "scales": [
+ {
+ "name": "pos",
+ "type": "ordinal",
+ "range": "width",
+ "domain": {"field": xString}
+ }
+ ],
+ "marks": [
+ {
+ "type": "rect",
+ "properties": {
+ "enter": {
+ "x": {"scale": "pos", "field": xString},
+ "width": {"scale": "pos", "band": true},
+ "y": {"scale": "val", "field": yStrings},
+ "y2": {"scale": "val", "value": 0},
+ "fill": {"scale": "color", "field": xString}
+ },
+ "hover": {
+ "fillOpacity": {"value": 0.5}
+ }
+ ,
+
+ "update": {
+ "fillOpacity": {"value": 1}
+ }
+ }
+ },
+ //{
+ // "type": "text",
+ // "properties": {
+ // "enter": {
+ // "y": {"scale": "pos", "field": xString},
+ // "dy": {"scale": "pos", "band": true, "mult": 0.5},
+ // "x": {"scale": "val", "field": yStrings, "offset": -4},
+ // "fill": {"value": "white"},
+ // "align": {"value": "right"},
+ // "baseline": {"value": "middle"},
+ // "text": {"field": xString}
+ // }
+ // }
+ //}
+ ]
+ }
+ ]
+ }
+
+ chartObj.legend = true;
+ chartObj.legendIndex = chartConfig.xAxis;
+ chartObj.spec = spec;
+
+ }
+
+
+ /*************************************************** Area chart ***************************************************************************************************/
+
+ igviz.drawAreaChart = function (chartObj) {
+ // var padding = chartConfig.padding;
+ var chartConfig = chartObj.config;
+ var dataTable = chartObj.dataTable;
+
+ if (chartConfig.yAxis.constructor === Array) {
+ return this.drawMultiAreaChart(chartObj)
+ }
+ if (chartConfig.hasOwnProperty("areaVar")) {
+ return this.drawStackedAreaChart(chartObj);
+ }
+
+ divId = chartObj.canvas;
+
+
+ xString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.xAxis])
+ yStrings = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.yAxis]);
+
+ // console.log(table,xString,yStrings);
+ // sortDataSet(table);
+
+ xScaleConfig = {
+ "index": chartConfig.xAxis,
+ "schema": dataTable.metadata,
+ "name": "x",
+ "zero": false,
+ "range": "width",
+ "field": xString
+ }
+
+
+ yScaleConfig = {
+ "index": chartConfig.yAxis,
+ "schema": dataTable.metadata,
+ "name": "y",
+ "range": "height",
+ "field": yStrings
+ }
+
+
+ var xScale = setScale(xScaleConfig)
+ var yScale = setScale(yScaleConfig);
+
+ var xAxisConfig = {
+ "type": "x",
+ "scale": "x",
+ "angle": -35,
+ "title": dataTable.metadata.names[chartConfig.xAxis],
+ "grid": true,
+ "dx": -10,
+ "dy": 10,
+ "align": "right",
+ "titleDy": 10,
+ "titleDx": 0
+ }
+ var yAxisConfig = {
+ "type": "y",
+ "scale": "y",
+ "angle": 0,
+ "title": dataTable.metadata.names[chartConfig.yAxis],
+ "grid": true,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": -10,
+ "titleDx": 0
+ }
+ var xAxis = setAxis(xAxisConfig);
+ var yAxis = setAxis(yAxisConfig);
+
+ if (chartConfig.interpolationMode == undefined) {
+ chartConfig.interpolationMode = "monotone"
+ }
+
+
+ var spec = {
+ "width": chartConfig.width - 100,
+ "height": chartConfig.height,
+ // "padding":{"top":40,"bottom":60,'left':60,"right":40},
+ "data": [
+ {
+ "name": "table"
+
+ }
+ ],
+ "scales": [
+ xScale, yScale,
+ {
+ "name": "color", "type": "ordinal", "range": "category10"
+ }
+ ],
+
+ "axes": [xAxis, yAxis]
+ ,
+
+ "marks": [
+ {
+ "type": "area",
+ "key": xString,
+ "from": {"data": "table"},
+ "properties": {
+ "enter": {
+ "x": {"scale": "x", "field": xString},
+ "interpolate": {"value": chartConfig.interpolationMode},
+
+ "y": {"scale": "y", "field": yStrings},
+ "y2": {"scale": "y", "value": 0},
+ "fill": {"scale": "color", "value": 2},
+ "fillOpacity": {"value": 0.5}
+ },
+ "update": {
+ "fillOpacity": {"value": 0.5}
+
+ },
+ "hover": {
+ "fillOpacity": {"value": 0.2}
+
+ }
+
+ }
+ },
+ {
+ "type": "line",
+ "key": xString,
+
+ "from": {"data": "table"},
+ "properties": {
+ "enter": {
+ "x": {"value": 400},
+ "interpolate": {"value": chartConfig.interpolationMode},
+ "y": {"scale": "y:prev", "field": yStrings},
+ "stroke": {"scale": "color", "value": 2},
+ "strokeWidth": {"value": 1.5}
+ },
+ "update": {
+ "x": {"scale": "x", "field": xString},
+ "y": {"scale": "y", "field": yStrings}
+ },
+ "exit": {
+ "x": {"value": -20},
+ "y": {"scale": "y", "field": yStrings}
+ }
+ }
+ },
+ {
+ "type": "symbol",
+ "from": {"data": "table"},
+ "properties": {
+ "enter": {
+ "x": {"scale": "x", "field": xString},
+ "y": {"scale": "y", "field": yStrings},
+ "fill": {"scale": "color", "value": 2},
+ "size": {"value": 50}
+ //"fillOpacity": {"value": 0.5}
+ },
+ "update": {
+ "size": {"value": 50}
+
+ //"size": {"scale":"r","field":rString},
+ // "stroke": {"value": "transparent"}
+ },
+ "hover": {
+ "size": {"value": 100},
+ "stroke": {"value": "white"}
+ }
+ }
+ }
+
+ ]
+ }
+
+ chartObj.toolTipFunction = [];
+ chartObj.toolTipFunction[0] = function (event, item) {
+
+
+ console.log(tool, event, item);
+ if (item.mark.marktype == 'symbol') {
+
+
+ xVar = dataTable.metadata.names[chartConfig.xAxis]
+ yVar = dataTable.metadata.names[chartConfig.yAxis]
+
+ contentString = '<table><tr><td> X </td><td> (' + xVar + ') </td><td>' + item.datum.data[xVar] + '</td></tr>' + '<tr><td> Y </td><td> (' + yVar + ') </td><td>' + item.datum.data[yVar] + '</td></tr></table>';
+
+
+ tool.html(contentString).style({
+ 'left': event.pageX + 10 + 'px',
+ 'top': event.pageY + 10 + 'px',
+ 'opacity': 1
+ })
+ tool.selectAll('tr td').style('padding', "3px");
+ }
+ }
+
+ chartObj.toolTipFunction[1] = function (event, item) {
+
+ tool.html("").style({'left': event.pageX + 10 + 'px', 'top': event.pageY + 10 + 'px', 'opacity': 0})
+
+ }
+
+ chartObj.spec = spec;
+ chartObj.toolTip = true;
+ chartObj.spec = spec;
+
+
+ };
+
+ igviz.drawMultiAreaChart = function (chartObj) {
+
+ divId = chartObj.canvas;
+ chartConfig = chartObj.config;
+ dataTable = chartObj.dataTable;
+ // table=setData(dataTable,chartConfig)
+
+ xString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.xAxis])
+ yStrings = [];
+ for (i = 0; i < chartConfig.yAxis.length; i++) {
+ yStrings[i] = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.yAxis[i]])
+
+ }
+
+
+ xScaleConfig = {
+ "index": chartConfig.xAxis,
+ "schema": dataTable.metadata,
+ "name": "x",
+ "range": "width",
+ "clamp": false,
+ "field": xString
+ }
+
+ yScaleConfig = {
+ "index": chartConfig.yAxis[0],
+ "schema": dataTable.metadata,
+ "name": "y",
+ "range": "height",
+ "nice": true,
+ "field": yStrings[0]
+ }
+
+ var xScale = setScale(xScaleConfig)
+ var yScale = setScale(yScaleConfig);
+
+ var xAxisConfig = {
+ "type": "x",
+ "scale": "x",
+ "angle": -35,
+ "title": dataTable.metadata.names[chartConfig.xAxis],
+ "grid": true,
+ "dx": -10,
+ "dy": 10,
+ "align": "left",
+ "titleDy": 10,
+ "titleDx": 0
+ }
+ var yAxisConfig = {
+ "type": "y",
+ "scale": "y",
+ "angle": 0,
+ "title": "values",
+ "grid": true,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": -10,
+ "titleDx": 0
+ }
+ var xAxis = setAxis(xAxisConfig);
+ var yAxis = setAxis(yAxisConfig);
+
+
+ if (chartConfig.interpolationMode == undefined) {
+ chartConfig.interpolationMode = "monotone";
+ }
+
+
+ var spec = {
+ "width": chartConfig.width - 160,
+ "height": chartConfig.height,
+ // "padding":{"top":40,"bottom":60,'left':60,"right":145},
+ "data": [
+ {
+ "name": "table"
+
+ }
+ ],
+ "scales": [
+ xScale, yScale,
+ {
+ "name": "color", "type": "ordinal", "range": "category20"
+ }
+ ],
+ "legends": [
+ {
+
+ "orient": "right",
+ "fill": "color",
+ "title": "Area",
+ "values": [],
+ "properties": {
+ "title": {
+ "fontSize": {"value": 14}
+ },
+ "labels": {
+ "fontSize": {"value": 12}
+ },
+ "symbols": {
+ "stroke": {"value": "transparent"}
+ },
+ "legend": {
+ "stroke": {"value": "steelblue"},
+ "strokeWidth": {"value": 1.5}
+
+ }
+ }
+ }
+ ],
+ "axes": [xAxis, yAxis]
+ ,
+
+ "marks": []
+ }
+
+ for (i = 0; i < chartConfig.yAxis.length; i++) {
+ areaObj = {
+ "type": "area",
+ "key": xString,
+ "from": {"data": "table"},
+ "properties": {
+ "enter": {
+ "x": {"scale": "x", "field": xString},
+ "interpolate": {"value": chartConfig.interpolationMode},
+ "y": {"scale": "y", "field": yStrings[i]},
+ "y2": {"scale": "y", "value": 0},
+ "fill": {"scale": "color", "value": dataTable.metadata.names[chartConfig.yAxis[i]]},
+ "fillOpacity": {"value": 0.5}
+ },
+ "update": {
+ "fillOpacity": {"value": 0.5}
+
+ },
+ "hover": {
+ "fillOpacity": {"value": 0.2}
+ }
+
+ }
+ }
+
+ lineObj = {
+ "type": "line",
+ "key": xString,
+ "from": {"data": "table"},
+ "properties": {
+ "enter": {
+ "x": {"value": 400},
+ "interpolate": {"value": chartConfig.interpolationMode},
+ "y": {"scale": "y:prev", "field": yStrings[i]},
+ "stroke": {"scale": "color", "value": dataTable.metadata.names[chartConfig.yAxis[i]]},
+ "strokeWidth": {"value": 1.5}
+ },
+ "update": {
+ "x": {"scale": "x", "field": xString},
+ "y": {"scale": "y", "field": yStrings[i]}
+ },
+ "exit": {
+ "x": {"value": -20},
+ "y": {"scale": "y", "field": yStrings[i]}
+ }
+ }
+ }
+
+
+ pointObj = {
+ "type": "symbol",
+ "from": {"data": "table"},
+ "properties": {
+ "enter": {
+ "x": {"scale": "x", "field": xString},
+ "y": {"scale": "y", "field": yStrings[i]},
+ "fill": {"scale": "color", "value": dataTable.metadata.names[chartConfig.yAxis[i]]},
+ "size": {"value": 50}
+ //"fillOpacity": {"value": 0.5}
+ },
+ "update": {
+ "size": {"value": 50}
+ //"size": {"scale":"r","field":rString},
+ // "stroke": {"value": "transparent"}
+ },
+ "hover": {
+ "size": {"value": 100},
+ "stroke": {"value": "white"}
+ }
+ }
+ }
+
+
+ spec.marks.push(areaObj);
+
+ spec.marks.push(pointObj);
+ spec.marks.push(lineObj);
+ spec.legends[0].values.push(dataTable.metadata.names[chartConfig.yAxis[i]])
+
+ }
+
+
+ chartObj.toolTipFunction = [];
+ chartObj.toolTipFunction[0] = function (event, item) {
+
+ a = 4
+
+ console.log(tool, event, item);
+ if (item.mark.marktype == 'symbol') {
+ // window.alert(a);
+
+ xVar = dataTable.metadata.names[chartConfig.xAxis]
+ yVar = dataTable.metadata.names[chartConfig.yAxis]
+
+ contentString = '<table><tr><td> X </td><td> (' + xVar + ') </td><td>' + item.datum.data[xVar] + '</td></tr>' + '<tr><td> Y </td><td> (' + yVar + ') </td><td>' + item.datum.data[yVar] + '</td></tr></table>';
+
+
+ tool.html(contentString).style({
+ 'left': event.pageX + 10 + 'px',
+ 'top': event.pageY + 10 + 'px',
+ 'opacity': 1
+ })
+ tool.selectAll('tr td').style('padding', "3px");
+ }
+ }
+
+ chartObj.toolTipFunction[1] = function (event, item) {
+
+ tool.html("").style({'left': event.pageX + 10 + 'px', 'top': event.pageY + 10 + 'px', 'opacity': 0})
+
+ }
+
+ chartObj.spec = spec;
+ chartObj.toolTip = true;
+ chartObj.spec = spec;
+
+ chartObj.spec = spec;
+
+
+ };
+
+ igviz.drawStackedAreaChart = function (chartObj) {
+
+ var chartConfig = chartObj.config;
+ var dataTable = chartObj.dataTable;
+ // var table = setData(dataTable,chartConfig);
+ divId = chartObj.canvas;
+
+
+ areaString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.areaVar])
+ yStrings = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.yAxis]);
+
+ xString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.xAxis]);
+
+ // console.log(table,xString,yStrings,groupedBy);
+ // sortDataSet(table);
+
+ cat = {
+ "index": chartConfig.xAxis,
+ "schema": dataTable.metadata,
+ "name": "cat",
+ "range": "width",
+ "field": xString,
+ "padding": 0.2,
+ "zero": false,
+ "nice": true
+ }
+
+
+ val = {
+ "index": chartConfig.yAxis,
+ "schema": dataTable.metadata,
+ "name": "val",
+ "range": "height",
+ "dataFrom": "stats",
+ "field": "sum",
+ "nice": true
+ }
+
+
+ var cScale = setScale(cat)
+ var vScale = setScale(val);
+
+ var xAxisConfig = {
+ "type": "x",
+ "scale": "cat",
+ "angle": 0,
+ "title": dataTable.metadata.names[chartConfig.xAxis],
+ "grid": true,
+ "dx": -10,
+ "dy": 10,
+ "align": "left",
+ "titleDy": 10,
+ "titleDx": 0
+ }
+ var yAxisConfig = {
+ "type": "y",
+ "scale": "val",
+ "angle": 0,
+ "title": dataTable.metadata.names[chartConfig.yAxis],
+ "grid": true,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": -10,
+ "titleDx": 0
+ }
+ var xAxis = setAxis(xAxisConfig);
+ var yAxis = setAxis(yAxisConfig);
+
+
+ spec = {
+ "width": chartConfig.width - 160,
+ "height": chartConfig.height - 100,
+ "padding": {"top": 10, "left": 60, "bottom": 60, "right": 100},
+ "data": [
+ {
+ "name": "table"
+ },
+ {
+ "name": "stats",
+ "source": "table",
+ "transform": [
+ {"type": "facet", "keys": [xString]},
+ {"type": "stats", "value": yStrings}
+ ]
+ }
+ ],
+ "scales": [
+ cScale,
+ vScale,
+ {
+ "name": "color",
+ "type": "ordinal",
+ "range": "category20"
+ }
+ ],
+ "legends": [
+ {
+ "orient": {"value": "right"},
+ "fill": "color",
+ "title": dataTable.metadata.names[chartConfig.areaVar
+ ],
+ "values": [],
+ "properties": {
+ "title": {
+ "fontSize": {"value": 14}
+ },
+ "labels": {
+ "fontSize": {"value": 12}
+ },
+ "symbols": {
+ "stroke": {"value": "transparent"}
+ },
+ "legend": {
+ "stroke": {"value": "steelblue"},
+ "strokeWidth": {"value": 0.5}
+
+
+ }
+ }
+ }
+ ],
+
+ "axes": [
+ xAxis, yAxis
+ ],
+ "marks": [
+ {
+ "type": "group",
+ "from": {
+ "data": "table",
+ "transform": [
+ {"type": "facet", "keys": [areaString]},
+ {"type": "stack", "point": xString, "height": yStrings}
+ ]
+ },
+ "marks": [
+ {
+ "type": "area",
+ "properties": {
+ "enter": {
+ "interpolate": {"value": "monotone"},
+ "x": {"scale": "cat", "field": xString},
+ "y": {"scale": "val", "field": "y"},
+ "y2": {"scale": "val", "field": "y2"},
+ "fill": {"scale": "color", "field": areaString},
+ "fillOpacity": {"value": 0.8}
+
+ },
+ "update": {
+ "fillOpacity": {"value": 0.8}
+ },
+ "hover": {
+ "fillOpacity": {"value": 0.5}
+ }
+ }
+ },
+ {
+ "type": "line",
+ "properties": {
+ "enter": {
+ "x": {"scale": "cat", "field": xString},
+ //"x": {"value": 400},
+ "interpolate": {"value": "monotone"},
+ "y": {"scale": "val", "field": "y"},
+ "stroke": {"scale": "color", "field": areaString},
+ "strokeWidth": {"value": 3}
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+
+ chartObj.spec = spec;
+ chartObj.legend = true;
+ chartObj.legendIndex = chartConfig.areaVar;
+
+
+ }
+
+
+ /*************************************************** Arc chart ***************************************************************************************************/
+
+
+ igviz.drawArc = function (divId, chartConfig, dataTable) {
+
+ radialProgress(divId)
+ .label(dataTable.metadata.names[chartConfig.percentage])
+ .diameter(200)
+ .value(dataTable.data[0][chartConfig.percentage])
+ .render();
+
+
+ function radialProgress(parent) {
+ var _data = null,
+ _duration = 1000,
+ _selection,
+ _margin = {
+ top: 0,
+ right: 0,
+ bottom: 30,
+ left: 0
+ },
+ __width = chartConfig.width,
+ __height = chartConfig.height,
+ _diameter,
+ _label = "",
+ _fontSize = 10;
+
+
+ var _mouseClick;
+
+ var _value = 0,
+ _minValue = 0,
+ _maxValue = 100;
+
+ var _currentArc = 0,
+ _currentArc2 = 0,
+ _currentValue = 0;
+
+ var _arc = d3.svg.arc()
+ .startAngle(0 * (Math.PI / 180)); //just radians
+
+ var _arc2 = d3.svg.arc()
+ .startAngle(0 * (Math.PI / 180))
+ .endAngle(0); //just radians
+
+
+ _selection = d3.select(parent);
+
+
+ function component() {
+
+ _selection.each(function (data) {
+
+ // Select the svg element, if it exists.
+ var svg = d3.select(this).selectAll("svg").data([data]);
+
+ var enter = svg.enter().append("svg").attr("class", "radial-svg").append("g");
+
+ measure();
+
+ svg.attr("width", __width)
+ .attr("height", __height);
+
+
+ var background = enter.append("g").attr("class", "component")
+ .attr("cursor", "pointer")
+ .on("click", onMouseClick);
+
+
+ _arc.endAngle(360 * (Math.PI / 180))
+
+ background.append("rect")
+ .attr("class", "background")
+ .attr("width", _width)
+ .attr("height", _height);
+
+ background.append("path")
+ .attr("transform", "translate(" + _width / 2 + "," + _width / 2 + ")")
+ .attr("d", _arc);
+
+ background.append("text")
+ .attr("class", "label")
+ .attr("transform", "translate(" + _width / 2 + "," + (_width + _fontSize) + ")")
+ .text(_label);
+
+ //outer g element that wraps all other elements
+ var gx = chartConfig.width / 2 - _width / 2;
+ var gy = (chartConfig.height / 2 - _height / 2) - 17;
+ var g = svg.select("g")
+ .attr("transform", "translate(" + gx + "," + gy + ")");
+
+
+ _arc.endAngle(_currentArc);
+ enter.append("g").attr("class", "arcs");
+ var path = svg.select(".arcs").selectAll(".arc").data(data);
+ path.enter().append("path")
+ .attr("class", "arc")
+ .attr("transform", "translate(" + _width / 2 + "," + _width / 2 + ")")
+ .attr("d", _arc);
+
+ //Another path in case we exceed 100%
+ var path2 = svg.select(".arcs").selectAll(".arc2").data(data);
+ path2.enter().append("path")
+ .attr("class", "arc2")
+ .attr("transform", "translate(" + _width / 2 + "," + _width / 2 + ")")
+ .attr("d", _arc2);
+
+
+ enter.append("g").attr("class", "labels");
+ var label = svg.select(".labels").selectAll(".labelArc").data(data);
+ label.enter().append("text")
+ .attr("class", "labelArc")
+ .attr("y", _width / 2 + _fontSize / 3)
+ .attr("x", _width / 2)
+ .attr("cursor", "pointer")
+ .attr("width", _width)
+ // .attr("x",(3*_fontSize/2))
+ .text(function (d) {
+ return Math.round((_value - _minValue) / (_maxValue - _minValue) * 100) + "%"
+ })
+ .style("font-size", _fontSize + "px")
+ .on("click", onMouseClick);
+
+ path.exit().transition().duration(500).attr("x", 1000).remove();
+
+
+ layout(svg);
+
+ function layout(svg) {
+
+ var ratio = (_value - _minValue) / (_maxValue - _minValue);
+ var endAngle = Math.min(360 * ratio, 360);
+ endAngle = endAngle * Math.PI / 180;
+
+ path.datum(endAngle);
+ path.transition().duration(_duration)
+ .attrTween("d", arcTween);
+
+ if (ratio > 1) {
+ path2.datum(Math.min(360 * (ratio - 1), 360) * Math.PI / 180);
+ path2.transition().delay(_duration).duration(_duration)
+ .attrTween("d", arcTween2);
+ }
+
+ label.datum(Math.round(ratio * 100));
+ label.transition().duration(_duration)
+ .tween("text", labelTween);
+
+ }
+
+ });
+
+ function onMouseClick(d) {
+ if (typeof _mouseClick == "function") {
+ _mouseClick.call();
+ }
+ }
+ }
+
+ function labelTween(a) {
+ var i = d3.interpolate(_currentValue, a);
+ _currentValue = i(0);
+
+ return function (t) {
+ _currentValue = i(t);
+ this.textContent = Math.round(i(t)) + "%";
+ }
+ }
+
+ function arcTween(a) {
+ var i = d3.interpolate(_currentArc, a);
+
+ return function (t) {
+ _currentArc = i(t);
+ return _arc.endAngle(i(t))();
+ };
+ }
+
+ function arcTween2(a) {
+ var i = d3.interpolate(_currentArc2, a);
+
+ return function (t) {
+ return _arc2.endAngle(i(t))();
+ };
+ }
+
+
+ function measure() {
+ _width = _diameter - _margin.right - _margin.left - _margin.top - _margin.bottom;
+ _height = _width;
+ _fontSize = _width * .2;
+ _arc.outerRadius(_width / 2);
+ _arc.innerRadius(_width / 2 * .85);
+ _arc2.outerRadius(_width / 2 * .85);
+ _arc2.innerRadius(_width / 2 * .85 - (_width / 2 * .15));
+ }
+
+
+ component.render = function () {
+ measure();
+ component();
+ return component;
+ }
+
+ component.value = function (_) {
+ if (!arguments.length) return _value;
+ _value = [_];
+ _selection.datum([_value]);
+ return component;
+ }
+
+
+ component.margin = function (_) {
+ if (!arguments.length) return _margin;
+ _margin = _;
+ return component;
+ };
+
+ component.diameter = function (_) {
+ if (!arguments.length) return _diameter
+ _diameter = _;
+ return component;
+ };
+
+ component.minValue = function (_) {
+ if (!arguments.length) return _minValue;
+ _minValue = _;
+ return component;
+ };
+
+ component.maxValue = function (_) {
+ if (!arguments.length) return _maxValue;
+ _maxValue = _;
+ return component;
+ };
+
+ component.label = function (_) {
+ if (!arguments.length) return _label;
+ _label = _;
+ return component;
+ };
+
+ component._duration = function (_) {
+ if (!arguments.length) return _duration;
+ _duration = _;
+ return component;
+ }
+
+ component.onClick = function (_) {
+ if (!arguments.length) return _mouseClick;
+ _mouseClick = _;
+ return component;
+ }
+
+ return component;
+
+ };
+
+ };
+
+
+ /*************************************************** Scatter chart ***************************************************************************************************/
+
+ igviz.drawScatterPlot = function (chartObj) {
+ divId = chartObj.canvas;
+ chartConfig = chartObj.config;
+ dataTable = chartObj.dataTable;
+ // table=setData(dataTable,chartConfig)
+
+ xString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.xAxis])
+ yString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.yAxis])
+ rString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.pointSize])
+ cString = "data." + createAttributeNames(dataTable.metadata.names[chartConfig.pointColor])
+
+
+ xScaleConfig = {
+ "index": chartConfig.xAxis,
+ "schema": dataTable.metadata,
+ "name": "x",
+ "range": "width",
+ "zero": false,
+ "field": xString
+
+ }
+
+ rScaleConfig = {
+ "index": chartConfig.pointSize,
+ "range": [0, 576],
+ "schema": dataTable.metadata,
+ "name": "r",
+ "field": rString
+ }
+ cScaleConfig = {
+ "index": chartConfig.pointColor,
+ "schema": dataTable.metadata,
+ "name": "c",
+ "range": [chartConfig.minColor, chartConfig.maxColor],
+ "field": cString
+ }
+
+ yScaleConfig = {
+ "index": chartConfig.yAxis,
+ "schema": dataTable.metadata,
+ "name": "y",
+ "range": "height",
+ "nice": true,
+ "field": yString
+ }
+
+ var xScale = setScale(xScaleConfig)
+ var yScale = setScale(yScaleConfig);
+ var rScale = setScale(rScaleConfig);
+ var cScale = setScale(cScaleConfig)
+
+ var xAxisConfig = {
+ "type": "x",
+ "scale": "x",
+ "angle": -35,
+ "title": dataTable.metadata.names[chartConfig.xAxis],
+ "grid": true,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": 25,
+ "titleDx": 0
+ }
+ var yAxisConfig = {
+ "type": "y",
+ "scale": "y",
+ "angle": 0,
+ "title": "values",
+ "grid": true,
+ "dx": 0,
+ "dy": 0,
+ "align": "right",
+ "titleDy": -30,
+ "titleDx": 0
+ }
+ var xAxis = setAxis(xAxisConfig);
+ var yAxis = setAxis(yAxisConfig);
+
+ var spec = {
+ "width": chartConfig.width - 130,
+ "height": chartConfig.height,
+ //"padding":{"top":40,"bottom":60,'left':60,"right":60},
+ "data": [
+ {
+ "name": "table"
+
+ }
+ ],
+ "scales": [
+ xScale, yScale,
+ {
+ "name": "color", "type": "ordinal", "range": "category20"
+ },
+ rScale, cScale
+ ],
+ "axes": [xAxis, yAxis
+ ],
+ //"legends": [
+ // {
+ //
+ // "orient": "right",
+ // "fill": "color",
+ // "title": "Legend",
+ // "values": [],
+ // "properties": {
+ // "title": {
+ // "fontSize": {"value": 14}
+ // },
+ // "labels": {
+ // "fontSize": {"value": 12}
+ // },
+ // "symbols": {
+ // "stroke": {"value": "transparent"}
+ // },
+ // "legend": {
+ // "stroke": {"value": "steelblue"},
+ // "strokeWidth": {"value": 1.5}
+ //
+ // }
+ // }
+ // }],
+
+
+ // "scales": [
+ // {
+ // "name": "x",
+ // "nice": true,
+ // "range": "width",
+ // "domain": {"data": "iris", "field": "data.sepalWidth"}
+ // },
+ // {
+ // "name": "y",
+ // "nice": true,
+ // "range": "height",
+ // "domain": {"data": "iris", "field": "data.petalLength"}
+ // },
+ // {
+ // "name": "c",
+ // "type": "ordinal",
+ // "domain": {"data": "iris", "field": "data.species"},
+ // "range": ["#800", "#080", "#008"]
+ // }
+ //],
+ // "axes": [
+ // {"type": "x", "scale": "x", "offset": 5, "ticks": 5, "title": "Sepal Width"},
+ // {"type": "y", "scale": "y", "offset": 5, "ticks": 5, "title": "Petal Length"}
+ //],
+ // "legends": [
+ // {
+ // "fill": "c",
+ // "title": "Species",
+ // "offset": 0,
+ // "properties": {
+ // "symbols": {
+ // "fillOpacity": {"value": 0.5},
+ // "stroke": {"value": "transparent"}
+ // }
+ // }
+ // }
+ //],
+ "marks": [
+ {
+ "type": "symbol",
+ "from": {"data": "table"},
+ "properties": {
+ "enter": {
+ "x": {"scale": "x", "field": xString},
+ "y": {"scale": "y", "field": yString},
+ "fill": {"scale": "c", "field": cString}
+ //"fillOpacity": {"value": 0.5}
+ },
+ "update": {
+ "size": {"scale": "r", "field": rString}
+ // "stroke": {"value": "transparent"}
+ },
+ "hover": {
+ "size": {"value": 300},
+ "stroke": {"value": "white"}
+ }
+ }
+ }
+ ]
+ }
+ chartObj.toolTipFunction = [];
+ chartObj.toolTipFunction[0] = function (event, item) {
+ console.log(tool, event, item);
+ xVar = dataTable.metadata.names[chartConfig.xAxis]
+ yVar = dataTable.metadata.names[chartConfig.yAxis]
+ pSize = dataTable.metadata.names[chartConfig.pointSize]
+ pColor = dataTable.metadata.names[chartConfig.pointColor]
+
+ contentString = '<table><tr><td> X </td><td> (' + xVar + ') </td><td>' + item.datum.data[xVar] + '</td></tr>' + '<tr><td> Y </td><td> (' + yVar + ') </td><td>' + item.datum.data[yVar] + '</td></tr>' + '<tr><td> Size </td><td> (' + pSize + ') </td><td>' + item.datum.data[pSize] + '</td></tr>' + '<tr><td bgcolor="' + item.fill + '"> </td><td> (' + pColor + ') </td><td>' + item.datum.data[pColor] + '</td></tr>' +
+ '</table>';
+
+
+ tool.html(contentString).style({
+ 'left': event.pageX + 10 + 'px',
+ 'top': event.pageY + 10 + 'px',
+ 'opacity': 1
+ })
+ tool.selectAll('tr td').style('padding', "3px");
+
+ }
+
+ chartObj.toolTipFunction[1] = function (event, item) {
+
+ tool.html("").style({'left': event.pageX + 10 + 'px', 'top': event.pageY + 10 + 'px', 'opacity': 0})
+
+ }
+
+ chartObj.spec = spec;
+ chartObj.toolTip = true;
+ }
+
+
+ /*************************************************** Single Number chart ***************************************************************************************************/
+
+ igviz.drawSingleNumberDiagram = function (chartObj) {
+
+ divId = chartObj.canvas;
+ chartConfig = chartObj.config;
+ dataTable = chartObj.dataTable;
+
+ //Width and height
+ var w = chartConfig.width;
+ var h = chartConfig.height;
+ var padding = chartConfig.padding;
+
+ var svgID = divId + "_svg";
+ //Remove current SVG if it is already there
+ d3.select(svgID).remove();
+
+ //Create SVG element
+ singleNumSvg = d3.select(divId)
+ .append("svg")
+ .attr("id", svgID.replace("#", ""))
+ .attr("width", w)
+ .attr("height", h);
+
+
+ singleNumSvg.append("rect")
+ .attr("id", "rect")
+ .attr("width", w)
+ .attr("height", h);
+
+ /*singleNumCurveSvg = d3.select(divId)
+ .append("svg")
+ .attr("id", svgID.replace("#",""))
+ .attr("width", 207)
+ .attr("height", 161);*/
+
+ };
+
+
+ /*************************************************** Table chart ***************************************************************************************************/
+
+ var cnt = 0;
+
+ igviz.drawTable = function (divId, chartConfig, dataTable) {
+
+ //remove the current table if it is already exist
+ d3.select(divId).select("table").remove();
+
+ var rowLabel = dataTable.metadata.names;
+
+ //append the Table to the div
+ var table = d3.select(divId).append("table").attr('class', 'table table-bordered');
+
+ //create the table head
+ thead = table.append("thead");
+ tbody = table.append("tbody")
+
+ //Append the header to the table
+ thead.append("tr")
+ .selectAll("th")
+ .data(rowLabel)
+ .enter()
+ .append("th")
+ .text(function (d) {
+ return d;
+ });
+ };
+
+ /*************************************************** map ***************************************************************************************************/
+ function loadWorldMapCodes() {
+ var fileName = document.location.protocol + "//" + document.location.host + '/portal/geojson/countryInfo/';
+ $.ajaxSetup({async: false});
+ $.getJSON(fileName, function (json) {
+ worldMapCodes = json;
+ });
+ $.ajaxSetup({async: true});
+ }
+
+ function loadUSAMapCodes() {
+ var fileName = document.location.protocol + "//" + document.location.host + '/portal/geojson/usaInfo/';
+ $.ajaxSetup({async: false});
+ $.getJSON(fileName, function (json) {
+ usaMapCodes = json;
+ });
+ $.ajaxSetup({async: true});
+ }
+
+ function getMapCode(name, region) {
+ if (region == "usa") {
+ $.each(usaMapCodes, function (i, location) {
+ if (usaMapCodes[name] != null && usaMapCodes[name] != "") {
+ name = "US" + usaMapCodes[name];
+ }
+ });
+
+ } else {
+ $.each(worldMapCodes, function (i, location) {
+ if (name.toUpperCase() == location["name"].toUpperCase()) {
+ name = location["alpha-3"];
+ }
+ });
+ }
+ return name;
+ };
+
+ igviz.drawMap = function (divId, chartConfig, dataTable) {
+
+ var fileName;
+ var width = chartConfig.width;
+ var height = chartConfig.height;
+ var xAxis = chartConfig.xAxis;
+ var yAxis = chartConfig.yAxis;
+
+ if (chartConfig.region == "usa") {
+ fileName = document.location.protocol + "//" + document.location.host + '/portal/geojson/usa/';
+ loadUSAMapCodes();
+ mapChart = d3.geomap.choropleth()
+ .geofile(fileName)
+ .projection(d3.geo.albersUsa)
+ .unitId(xAxis)
+ .width(width)
+ .height(height)
+ .colors(colorbrewer.RdPu[chartConfig.legendGradientLevel])
+ .column(yAxis)
+ .scale([width / 1.1])
+ .translate([width / 2, height / 2.2])
+ .legend(true);
+
+
+ } else {
+ fileName = document.location.protocol + "//" + document.location.host + '/portal/geojson/world/';
+
+ var scaleDivision = 5.5;
+ var widthDivision = 2;
+ var heightDivision = 2;
+
+ if (chartConfig.region == "europe") {
+
+ scaleDivision = width / height;
+ widthDivision = 3;
+ heightDivision = 0.8;
+
+ }
+ loadWorldMapCodes();
+ mapChart = d3.geomap.choropleth()
+ .geofile(fileName)
+ .unitId(xAxis)
+ .width(width)
+ .height(height)
+ .colors(colorbrewer.RdPu[chartConfig.legendGradientLevel])
+ .column(yAxis)
+ .scale([width / scaleDivision])
+ .translate([width / widthDivision, height / heightDivision])
+ .legend(true);
+ }
+ };
+
+
+ /*************************************************** Bar chart Drill Dowining Function ***************************************************************************************************/
+
+ igviz.drillDown = function drillDown(index, divId, chartConfig, dataTable, originaltable) {
+ // console.log(dataTable,chartConfig,divId);
+ if (index == 0) {
+ d3.select(divId).append('div').attr({id: 'links', height: 20, 'bgcolor': 'blue'})
+ d3.select(divId).append('div').attr({id: 'chartDiv'})
+ chartConfig.height = chartConfig.height - 20;
+ divId = "#chartDiv";
+ }
+ var currentChartConfig = JSON.parse(JSON.stringify(chartConfig));
+ var current_x = 0;
+ if (index < chartConfig.xAxis.length)
+ current_x = chartConfig.xAxis[index].index
+ else
+ current_x = chartConfig.xAxis[index - 1].child;
+
+ var current_y = chartConfig.yAxis;
+ var currentData = {
+ metadata: {
+ names: [dataTable.metadata.names[current_x], dataTable.metadata.names[current_y]],
+ types: [dataTable.metadata.types[current_x], dataTable.metadata.types[current_y]]
+ },
+ data: []
+ }
+
+ var tempData = [];
+ for (i = 0; i < dataTable.data.length; i++) {
+ name = dataTable.data[i][current_x];
+ currentYvalue = dataTable.data[i][current_y];
+ isFound = false;
+ var j = 0;
+ for (; j < tempData.length; j++) {
+ if (tempData[j][0] === name) {
+ isFound = true;
+ break;
+ }
+ }
+ if (isFound) {
+ tempData[j][1] += currentYvalue;
+ console.log(name, currentYvalue, tempData[j][1]);
+ } else {
+ console.log("create", name, currentYvalue);
+ tempData.push([name, currentYvalue])
+ }
+ }
+
+ currentData.data = tempData;
+ currentChartConfig.xAxis = 0;
+ currentChartConfig.yAxis = 1;
+ currentChartConfig.chartType = 'bar';
+
+
+ var x = this.setUp(divId, currentChartConfig, currentData);
+ x.plot(currentData.data, function () {
+
+ var filters = d3.select('#links .root').on('click', function () {
+ d3.select("#links").html('');
+ igviz.drillDown(0, divId, chartConfig, originaltable, originaltable);
+
+ })
+
+
+ var filters = d3.select('#links').selectAll('.filter');
+ filters.on('click', function (d, i) {
+
+ filtersList = filters.data();
+
+ console.log(filtersList)
+ var filterdDataset = [];
+ var selectionObj = JSON.parse(JSON.stringify(originaltable));
+ itr = 0;
+ for (l = 0; l < originaltable.data.length; l++) {
+ isFiltered = true;
+ for (k = 0; k <= i; k++) {
+
+ if (originaltable.data[l][filtersList[k][0]] !== filtersList[k][1]) {
+ isFiltered = false;
+ break;
+ }
+ }
+ if (isFiltered) {
+ filterdDataset[itr++] = originaltable.data[l];
+ }
+
+ }
+
+ d3.selectAll('#links g').each(function (d, indx) {
+ if (indx > i) {
+ this.remove();
+ }
+ })
+
+
+ selectionObj.data = filterdDataset;
+
+ igviz.drillDown(i + 1, divId, chartConfig, selectionObj, originaltable, true);
+
+
+ });
+
+
+ if (index < chartConfig.xAxis.length) {
+ console.log(x);
+ d3.select(x.chart._el).selectAll('g.type-rect rect').on('click', function (d, i) {
+ // console.log(d, i, this);
+ console.log(d, i);
+ var selectedName = d.datum.data[x.dataTable.metadata.names[x.config.xAxis]];
+ // console.log(selectedName);
+ var selectedCurrentData = JSON.parse(JSON.stringify(dataTable));
+ var innerText;
+
+ var links = d3.select('#links').append('g').append('text').text(dataTable.metadata.names[current_x] + " : ").attr({
+
+ "font-size": "10px",
+ "x": 10,
+ "y": 20
+
+ });
+
+ d3.select('#links:first-child').selectAll('text').attr('class', 'root');
+
+ d3.select('#links g:last-child').append('span').data([[current_x, selectedName]]).attr('class', 'filter').text(selectedName + " > ")
+
+ var l = selectedCurrentData.data.length;
+ var newdata = [];
+ b = 0;
+ for (a = 0; a < l; a++) {
+ if (selectedCurrentData.data[a][current_x] === selectedName) {
+ newdata[b++] = selectedCurrentData.data[a];
+ }
+ }
+
+
+ selectedCurrentData.data = newdata;
+
+
+ igviz.drillDown(index + 1, divId, chartConfig, selectedCurrentData, originaltable, true);
+
+
+ });
+
+ }
+ });
+
+
+ }
+
+
+ /*************************************************** Specification Generation method ***************************************************************************************************/
+
+
+ function setScale(scaleConfig) {
+ var scale = {"name": scaleConfig.name};
+
+ console.log(scaleConfig.schema, scaleConfig.index);
+
+ dataFrom = "table";
+
+ scale.range = scaleConfig.range;
+
+
+ switch (scaleConfig.schema.types[scaleConfig.index]) {
+ case 'T':
+ scale["type"] = 'time'
+
+ break;
+
+ case 'C':
+ scale["type"] = 'ordinal'
+ if (scale.name === "c") {
+ scale.range = "category20";
+ }
+
+ break;
+ case 'N':
+ scale["type"] = 'linear'
+
+ break;
+ }
+ if (scaleConfig.hasOwnProperty("dataFrom")) {
+ dataFrom = scaleConfig.dataFrom;
+ }
+
+ scale.range = scaleConfig.range;
+ scale.domain = {"data": dataFrom, "field": scaleConfig.field}
+
+ //optional attributes
+ if (scaleConfig.hasOwnProperty("round")) {
+ scale["round"] = scaleConfig.round;
+ }
+
+ if (scaleConfig.hasOwnProperty("nice")) {
+ scale["nice"] = scaleConfig.nice;
+ }
+
+ if (scaleConfig.hasOwnProperty("padding")) {
+ scale["padding"] = scaleConfig.padding;
+ }
+
+ if (scaleConfig.hasOwnProperty("reverse")) {
+ scale["reverse"] = scaleConfig.reverse;
+ }
+
+ if (scaleConfig.hasOwnProperty("sort")) {
+ scale["sort"] = scaleConfig.sort;
+ }
+
+ if (scale.name == 'x' && scale.type == 'linear') {
+ scale.sort = true;
+ }
+ if (scaleConfig.hasOwnProperty("clamp")) {
+ scale["clamp"] = scaleConfig.clamp;
+ }
+
+
+ if (scaleConfig.hasOwnProperty("zero")) {
+ scale["zero"] = scaleConfig.zero;
+ }
+ console.log(scale);
+ return scale;
+
+ }
+
+ function setAxis(axisConfig) {
+
+ console.log("Axis", axisConfig);
+
+ axis = {
+ "type": axisConfig.type,
+ "scale": axisConfig.scale,
+ 'title': axisConfig.title,
+ "grid": axisConfig.grid,
+
+ "properties": {
+ "ticks": {
+ // "stroke": {"value": "steelblue"}
+ },
+ "majorTicks": {
+ "strokeWidth": {"value": 2}
+ },
+ "labels": {
+ // "fill": {"value": "steelblue"},
+ "angle": {"value": axisConfig.angle},
+ // "fontSize": {"value": 14},
+ "align": {"value": axisConfig.align},
+ "baseline": {"value": "middle"},
+ "dx": {"value": axisConfig.dx},
+ "dy": {"value": axisConfig.dy}
+ },
+ "title": {
+ "fontSize": {"value": 16},
+
+ "dx": {'value': axisConfig.titleDx},
+ "dy": {'value': axisConfig.titleDy}
+ },
+ "axis": {
+ "stroke": {"value": "#333"},
+ "strokeWidth": {"value": 1.5}
+ }
+
+ }
+
+ }
+
+ if (axisConfig.hasOwnProperty("tickSize")) {
+ axis["tickSize"] = axisConfig.tickSize;
+ }
+
+
+ if (axisConfig.hasOwnProperty("tickPadding")) {
+ axis["tickPadding"] = axisConfig.tickPadding;
+ }
+
+ console.log("SpecAxis", axis);
+ return axis;
+ }
+
+ function setLegends(chartConfig, schema) {
+
+ }
+
+ function setData(dataTableObj, chartConfig, schema) {
+
+ var table = [];
+ for (i = 0; i < dataTableObj.length; i++) {
+ var ptObj = {};
+ namesArray = schema.names;
+ for (j = 0; j < namesArray.length; j++) {
+ if (schema.types[j] == 'T') {
+ ptObj[createAttributeNames(namesArray[j])] = new Date(dataTableObj[i][j]);
+ } else
+ ptObj[createAttributeNames(namesArray[j])] = dataTableObj[i][j];
+ }
+
+ table[i] = ptObj;
+ }
+
+ return table;
+ }
+
+ function createAttributeNames(str) {
+ return str.replace(' ', '_');
+ }
+
+ function setGenericAxis(axisConfig, spec) {
+ MappingObj = {};
+ MappingObj["tickSize"] = "tickSize";
+ MappingObj["tickPadding"] = "tickPadding";
+ MappingObj["title"] = "title";
+ MappingObj["grid"] = "grid";
+ MappingObj["offset"] = "offset";
+ MappingObj["ticks"] = "ticks";
+
+ MappingObj["labelColor"] = "fill";
+ MappingObj["labelAngle"] = "angle";
+ MappingObj["labelAlign"] = "align";
+ MappingObj["labelFontSize"] = "fontSize";
+ MappingObj["labelDx"] = "dx";
+ MappingObj["labelDy"] = "dy";
+ MappingObj["labelBaseLine"] = "baseline";
+
+ MappingObj["titleDx"] = "dx";
+ MappingObj["titleDy"] = "dy";
+ MappingObj["titleFontSize"] = "fontSize";
+
+ MappingObj["axisColor"] = "stroke";
+ MappingObj["axisWidth"] = "strokeWidth";
+
+ MappingObj["tickColor"] = "ticks.stroke";
+ MappingObj["tickWidth"] = "ticks.strokeWidth";
+
+
+ console.log("previous Axis", spec)
+ for (var propt in axisConfig) {
+
+ if (propt == "tickSize" || propt == "tickPadding")
+ continue;
+
+ if (axisConfig.hasOwnProperty(propt)) {
+
+ if (propt.indexOf("label") == 0)
+ spec.properties.labels[MappingObj[propt]].value = axisConfig[propt];
+ else if (propt.indexOf("ticks") == 0)
+ spec.properties.ticks[MappingObj[propt]].value = axisConfig[propt];
+ else if (propt.indexOf("title") == 0)
+ spec.properties.title[MappingObj[propt]].value = axisConfig[propt];
+ else if (propt.indexOf("axis") == 0)
+ spec.properties.axis[MappingObj[propt]].value = axisConfig[propt];
+ else
+ spec[MappingObj[propt]] = axisConfig[propt];
+ }
+ }
+
+ console.log("NEW SPEC", spec);
+ }
+
+ function createScales(dataset, chartConfig, dataTable) {
+ //Create scale functions
+
+ var xScale;
+ var yScale;
+ var colorScale;
+ if (dataTable.metadata.types[chartConfig.xAxis] == 'N') {
+ xScale = d3.scale.linear()
+ .domain([0, d3.max(dataset, function (d) {
+ return d.data[d.config.xAxis];
+ })])
+ .range([chartConfig.padding, chartConfig.width - chartConfig.padding]);
+ } else {
+ xScale = d3.scale.ordinal()
+ .domain(dataset.map(function (d) {
+ return d.data[chartConfig.xAxis];
+ }))
+ .rangeRoundBands([chartConfig.padding, chartConfig.width - chartConfig.padding], .1)
+ }
+
+ //TODO hanle case r and color are missing
+
+ if (dataTable.metadata.types[chartConfig.yAxis] == 'N') {
+
<TRUNCATED>