|
|
|
@ -64,8 +64,13 @@ function chartModel(id,name,renderer,datasources)
@@ -64,8 +64,13 @@ function chartModel(id,name,renderer,datasources)
|
|
|
|
|
this.getChartSVGWithPlot=function () |
|
|
|
|
{ |
|
|
|
|
console.log("using Plot"); |
|
|
|
|
//copy ChartElements to marks:
|
|
|
|
|
var marksArray=new Array(); |
|
|
|
|
//first empty marks:
|
|
|
|
|
for(var k=0;k< this.options["marks"].length;k++) |
|
|
|
|
{ |
|
|
|
|
delete this.options["marks"][k]; |
|
|
|
|
} |
|
|
|
|
//copy ChartElements to marks:
|
|
|
|
|
for(var k=0;k< this.chartElements.length;k++) |
|
|
|
|
{ |
|
|
|
|
marksArray[k]=renderChartElementWithPlot(this.chartElements[k]); |
|
|
|
@ -172,8 +177,9 @@ var isDefault=true;
@@ -172,8 +177,9 @@ var isDefault=true;
|
|
|
|
|
for(var j=0;j < rsColumnMetaData[datasource].length;j++) |
|
|
|
|
{ |
|
|
|
|
if(rsColumnMetaData[datasource][j].colcaption.trim() !=""
|
|
|
|
|
&& ( |
|
|
|
|
isMeasure==false || rsColumnMetaData[datasource][j].coltype == 4 || rsColumnMetaData[datasource][j].coltype == 3) |
|
|
|
|
//&& (
|
|
|
|
|
// isMeasure==false || rsColumnMetaData[datasource][j].coltype == 4 || rsColumnMetaData[datasource][j].coltype == 3)
|
|
|
|
|
//
|
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
//console.log("feld "+rsColumnMetaData[j].nr+selectionRsMetaData[j].targetColumn);
|
|
|
|
@ -339,8 +345,10 @@ function renderChart(chartDiv,currentChartModel)
@@ -339,8 +345,10 @@ function renderChart(chartDiv,currentChartModel)
|
|
|
|
|
var renderer=document.getElementById('fldVizRenderer').value; |
|
|
|
|
var mySVG=currentChartModel.getChartSVG(); |
|
|
|
|
document.getElementById(chartDiv).innerHTML=""; |
|
|
|
|
if(typeof mySVG === 'object') |
|
|
|
|
{ |
|
|
|
|
document.getElementById(chartDiv).appendChild(mySVG); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function prepareSelectionForm() |
|
|
|
@ -434,7 +442,7 @@ function createChartElementConfig1Form(renderer,elemID)
@@ -434,7 +442,7 @@ function createChartElementConfig1Form(renderer,elemID)
|
|
|
|
|
selVizTypeElem.onchange= function () {
|
|
|
|
|
createChartElementsConfig2Form(renderer); |
|
|
|
|
}; |
|
|
|
|
fillSelectOptions(selVizTypeElem,getPossibleVizTypes(renderer),true); |
|
|
|
|
fillSelectOptions(selVizTypeElem,getPossibleVizTypes(renderer),false); |
|
|
|
|
fieldVizTypeElem.appendChild(selVizTypeElem); |
|
|
|
|
elementVizTypeDiv.appendChild(fieldVizTypeElem); |
|
|
|
|
|
|
|
|
@ -462,11 +470,26 @@ function createChartElementsConfig2Form(renderer)
@@ -462,11 +470,26 @@ function createChartElementsConfig2Form(renderer)
|
|
|
|
|
const saveBtn = document.createElement("input"); |
|
|
|
|
saveBtn.type="BUTTON"; |
|
|
|
|
saveBtn.value="Übernehmen"; |
|
|
|
|
saveBtn.classList.add("button"); |
|
|
|
|
saveBtn.classList.add("is-small"); |
|
|
|
|
|
|
|
|
|
saveBtn.onclick =function() { |
|
|
|
|
saveChartElementConfig() |
|
|
|
|
} |
|
|
|
|
saveBtnDiv.appendChild(saveBtn); |
|
|
|
|
elementDivBox.appendChild(saveBtnDiv); |
|
|
|
|
//remove:
|
|
|
|
|
const removeBtnDiv = document.createElement("div"); |
|
|
|
|
const removeBtn = document.createElement("input"); |
|
|
|
|
removeBtn.type="BUTTON"; |
|
|
|
|
removeBtn.value="Entfernen"; |
|
|
|
|
removeBtn.classList.add("button"); |
|
|
|
|
removeBtn.classList.add("is-small"); |
|
|
|
|
removeBtn.onclick =function() { |
|
|
|
|
removeChartElementConfig() |
|
|
|
|
} |
|
|
|
|
removeBtnDiv.appendChild(removeBtn); |
|
|
|
|
elementDivBox.appendChild(removeBtnDiv); |
|
|
|
|
formChartElementConfig2Div.appendChild(elementDivBox); |
|
|
|
|
|
|
|
|
|
/*columnsDiv.appendChild(columnDiv); |
|
|
|
@ -512,6 +535,16 @@ function saveChartElementConfig()
@@ -512,6 +535,16 @@ function saveChartElementConfig()
|
|
|
|
|
//myVizType.elementTypeProperties=null;
|
|
|
|
|
//TODO: Existenz abfangen, hier wird einfach hinzugefügt:
|
|
|
|
|
myChartModel.chartElements.push(myVizType); |
|
|
|
|
//Reset Elements Form
|
|
|
|
|
elemID++; |
|
|
|
|
document.getElementById("chartElementID").value=elemID; |
|
|
|
|
document.getElementById("chartElementVizType").value=""; |
|
|
|
|
var formChartElementConfig2Div=document.getElementById("ChartElementConfig2Div"); |
|
|
|
|
while (formChartElementConfig2Div.firstChild) { |
|
|
|
|
formChartElementConfig2Div.removeChild(formChartElementConfig2Div.firstChild); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
renderChart('chartDiv',myChartModel); |
|
|
|
|
|
|
|
|
|
/*var marksArray=new Array(); |
|
|
|
|
marksArray[elemID]=Plot.barX(rs_table0, |
|
|
|
@ -524,19 +557,41 @@ function saveChartElementConfig()
@@ -524,19 +557,41 @@ function saveChartElementConfig()
|
|
|
|
|
chartOptions["marks"].push(marksArray);*/ |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
function removeChartElementConfig() |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
var propertyCounter=myChartModel.chartElements.length; |
|
|
|
|
var elemID=document.getElementById("chartElementID").value; |
|
|
|
|
if(propertyCounter>0) |
|
|
|
|
{ |
|
|
|
|
/*var filtered=myChartModel.chartElements.filter(obj => obj.nr !== propertyCounter-1); |
|
|
|
|
myChartModel.chartElements=filtered;*/ |
|
|
|
|
delete myChartModel.chartElements[propertyCounter-1]; |
|
|
|
|
elemID--; |
|
|
|
|
document.getElementById("chartElementID").value=elemID; |
|
|
|
|
|
|
|
|
|
renderChart('chartDiv',myChartModel); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function resetChartPropertiesForm() |
|
|
|
|
{ |
|
|
|
|
myChartModel=new chartModel(1,"",document.getElementById("fldVizRenderer").value,rsTableMetaData); |
|
|
|
|
renderChart('chartDiv',myChartModel); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
function getPossibleVizTypes(renderer) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
var possibleVizTypes=new Array(); |
|
|
|
|
for(var k=0;k < vizTypes.length;k++) |
|
|
|
|
{ |
|
|
|
|
var isDefault=true; |
|
|
|
|
if(vizTypes[k].rendererUniquename==renderer) |
|
|
|
|
{ |
|
|
|
|
var newVizType = new possibleVizType( //nr,value,name,explanation,isDefault
|
|
|
|
|
k,vizTypes[k].uniquename,vizTypes[k].caption,'',isDefault); |
|
|
|
|
k,vizTypes[k].uniquename,vizTypes[k].caption,'',false); |
|
|
|
|
possibleVizTypes.push(newVizType); |
|
|
|
|
isDefault=false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -909,6 +964,7 @@ function renderGeneralChartPropertiesForm(formDiv,myCommonChartProperties,render
@@ -909,6 +964,7 @@ function renderGeneralChartPropertiesForm(formDiv,myCommonChartProperties,render
|
|
|
|
|
{ |
|
|
|
|
if((myCommonChartProperties[k].groupVariableName=="layout" |
|
|
|
|
|| myCommonChartProperties[k].groupVariableName=="style" |
|
|
|
|
|| myCommonChartProperties[k].groupVariableName=="x" |
|
|
|
|
) |
|
|
|
|
&& myCommonChartProperties[k].rendererUniquename==renderer) |
|
|
|
|
divBox.appendChild(renderChartPropertyField(myCommonChartProperties[k])); |
|
|
|
@ -1155,6 +1211,7 @@ if(!isMandatory)
@@ -1155,6 +1211,7 @@ if(!isMandatory)
|
|
|
|
|
//add an empty option:
|
|
|
|
|
var o=new Option("",""); |
|
|
|
|
myCombo.options[optionCounter]=o; |
|
|
|
|
selectedOption=optionCounter; |
|
|
|
|
optionCounter++; |
|
|
|
|
} |
|
|
|
|
for(var j=0;j < myValues.length;j++) |
|
|
|
@ -1322,47 +1379,51 @@ var myDiv=document.getElementById(chartDivElem);
@@ -1322,47 +1379,51 @@ var myDiv=document.getElementById(chartDivElem);
|
|
|
|
|
function renderChartElementWithPlot(chartElem) |
|
|
|
|
{ |
|
|
|
|
var plotMark=new Object;
|
|
|
|
|
if(chartElem) |
|
|
|
|
{ |
|
|
|
|
var chartType=chartElem.vizTypeUniquename; |
|
|
|
|
/* |
|
|
|
|
var selectionRsMetaData=[]; |
|
|
|
|
var selectionRs=[]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
selectionRsMetaData=fillSelectionResultMetaData(); |
|
|
|
|
|
|
|
|
|
selectionRs=fillSelectionResult(selectionRsMetaData); |
|
|
|
|
*/ |
|
|
|
|
var myDatasourceRs=rs[chartElem.datasource]; |
|
|
|
|
var optionString="{\"dummy\": \"1\""; |
|
|
|
|
for(var k=0;k<chartElem.elementTypeProperties.length;k++) |
|
|
|
|
{ |
|
|
|
|
if(chartElem.elementTypeProperties[k].propertyValue!="") |
|
|
|
|
{ |
|
|
|
|
optionString+=",\""+chartElem.elementTypeProperties[k].vizTypePropertyUniquename+"\":\""+chartElem.elementTypeProperties[k].propertyValue+"\""; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
optionString+=" }"; |
|
|
|
|
|
|
|
|
|
console.log("Mark-option for "+chartType+":"+ optionString); |
|
|
|
|
var markOptions=JSON.parse(optionString);
|
|
|
|
|
switch (chartType) |
|
|
|
|
{ |
|
|
|
|
case "sample": |
|
|
|
|
makeSample(); |
|
|
|
|
break; |
|
|
|
|
case "bar_x": |
|
|
|
|
plotMark=renderBarXwithPlot(chartElem); |
|
|
|
|
plotMark=Plot.barX(myDatasourceRs,markOptions); |
|
|
|
|
break; |
|
|
|
|
case "bar_x_stacked": |
|
|
|
|
makeBarXStacked(chartDivElem,selectionRs); |
|
|
|
|
plotMark=Plot.barX(myDatasourceRs,markOptions); |
|
|
|
|
break; |
|
|
|
|
case "bar_x_alt": |
|
|
|
|
makeBarX(svg,data); |
|
|
|
|
break; |
|
|
|
|
case "bar_y": |
|
|
|
|
makeBarY(chartDivElem,selectionRs); |
|
|
|
|
plotMark=Plot.barY(myDatasourceRs,markOptions); |
|
|
|
|
break; |
|
|
|
|
case "area_y": |
|
|
|
|
makeAreaY(chartDivElem,selectionRs); |
|
|
|
|
plotMark=Plot.areaY(myDatasourceRs,markOptions); |
|
|
|
|
break; |
|
|
|
|
case "dot": |
|
|
|
|
makeDot(chartDivElem,selectionRs); |
|
|
|
|
plotMark=Plot.dot(myDatasourceRs,markOptions); |
|
|
|
|
break; |
|
|
|
|
case "line": |
|
|
|
|
makeLine(chartDivElem,selectionRs); |
|
|
|
|
plotMark=Plot.line(myDatasourceRs,markOptions); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
alert("Please select a chart type"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return plotMark; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1540,6 +1601,7 @@ function makeSample()
@@ -1540,6 +1601,7 @@ function makeSample()
|
|
|
|
|
} |
|
|
|
|
function getChartOptions(categoryDim1,categoryDim2,measureDim,marksArray,chartOrientationVertical) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
var options; |
|
|
|
|
//var categoryDim1=document.getElementById("viz_dimension1").value;
|
|
|
|
|
//var categoryDim2=document.getElementById("viz_dimension2").value;
|
|
|
|
@ -1620,6 +1682,7 @@ function getChartOptions(categoryDim1,categoryDim2,measureDim,marksArray,chartOr
@@ -1620,6 +1682,7 @@ function getChartOptions(categoryDim1,categoryDim2,measureDim,marksArray,chartOr
|
|
|
|
|
return options; |
|
|
|
|
} |
|
|
|
|
function makeBarX(chartDivElem,selectionRs) { |
|
|
|
|
//OBSOLETE
|
|
|
|
|
var categoryDim=document.getElementById("viz_dimension1").value; |
|
|
|
|
//var categoryDim2=document.getElementById("viz_dimension2").value;
|
|
|
|
|
var measureDim=document.getElementById("viz_measure1").value; |
|
|
|
@ -1638,12 +1701,16 @@ function makeBarX(chartDivElem,selectionRs) {
@@ -1638,12 +1701,16 @@ function makeBarX(chartDivElem,selectionRs) {
|
|
|
|
|
var svgPlot=Plot.plot(options); |
|
|
|
|
document.getElementById(chartDivElem).appendChild(svgPlot); |
|
|
|
|
} |
|
|
|
|
function renderBarXwithPlot(chartElem) { |
|
|
|
|
function renderBarXwithPlot(chartElem,markOptions,myDatasourceRs) { |
|
|
|
|
//OBSOLETE
|
|
|
|
|
var barXPlot=new Object; |
|
|
|
|
barXPlot=Plot.barX(myDatasourceRs, markOptions ); |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
var categoryDim=""; |
|
|
|
|
var measureDim=""; |
|
|
|
|
var fillval=""; |
|
|
|
|
var myDatasourceRs=rs[chartElem.datasource]; |
|
|
|
|
|
|
|
|
|
for(var k=0;k<chartElem.elementTypeProperties.length;k++) |
|
|
|
|
{ |
|
|
|
|
if(chartElem.elementTypeProperties[k].vizTypePropertyUniquename=="viz_dimension1") |
|
|
|
@ -1662,10 +1729,12 @@ function renderBarXwithPlot(chartElem) {
@@ -1662,10 +1729,12 @@ function renderBarXwithPlot(chartElem) {
|
|
|
|
|
fill: fillval |
|
|
|
|
} |
|
|
|
|
); |
|
|
|
|
*/ |
|
|
|
|
return barXPlot; |
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
function makeBarXStacked(chartDivElem,selectionRs) { |
|
|
|
|
//OBSOLETE
|
|
|
|
|
var categoryDim1=document.getElementById("y_horizontal").value; |
|
|
|
|
var categoryDim2=document.getElementById("stroke_bar").value; |
|
|
|
|
var measureDim=document.getElementById("x_horizontal").value; |
|
|
|
@ -1697,6 +1766,7 @@ function makeBarXStacked(chartDivElem,selectionRs) {
@@ -1697,6 +1766,7 @@ function makeBarXStacked(chartDivElem,selectionRs) {
|
|
|
|
|
document.getElementById(chartDivElem).appendChild(svgPlot); |
|
|
|
|
} |
|
|
|
|
function makeBarY(chartDivElem,selectionRs) { |
|
|
|
|
//OBSOLETE
|
|
|
|
|
var categoryDim=document.getElementById("viz_dimension1").value; |
|
|
|
|
var measureDim=document.getElementById("viz_measure1").value; |
|
|
|
|
var marksArray=new Array(); |
|
|
|
@ -1711,6 +1781,36 @@ function makeBarY(chartDivElem,selectionRs) {
@@ -1711,6 +1781,36 @@ function makeBarY(chartDivElem,selectionRs) {
|
|
|
|
|
|
|
|
|
|
document.getElementById(chartDivElem).appendChild(Plot.plot(options)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function renderBarYwithPlot(chartElem) { |
|
|
|
|
//OBSOLETE
|
|
|
|
|
var barYPlot=new Object; |
|
|
|
|
var categoryDim=""; |
|
|
|
|
var measureDim=""; |
|
|
|
|
var fillval=""; |
|
|
|
|
var myDatasourceRs=rs[chartElem.datasource]; |
|
|
|
|
for(var k=0;k<chartElem.elementTypeProperties.length;k++) |
|
|
|
|
{ |
|
|
|
|
if(chartElem.elementTypeProperties[k].vizTypePropertyUniquename=="viz_dimension1") |
|
|
|
|
categoryDim=chartElem.elementTypeProperties[k].propertyValue; |
|
|
|
|
if(chartElem.elementTypeProperties[k].vizTypePropertyUniquename=="viz_measure1") |
|
|
|
|
measureDim=chartElem.elementTypeProperties[k].propertyValue; |
|
|
|
|
if(chartElem.elementTypeProperties[k].vizTypePropertyUniquename=="fill") |
|
|
|
|
fillval=chartElem.elementTypeProperties[k].propertyValue; |
|
|
|
|
} |
|
|
|
|
if(fillval=="") |
|
|
|
|
fillval="blue"; |
|
|
|
|
barYPlot=Plot.barY(myDatasourceRs, |
|
|
|
|
{ |
|
|
|
|
y: measureDim,
|
|
|
|
|
x: categoryDim, |
|
|
|
|
fill: fillval |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
); |
|
|
|
|
return barYPlot; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
function makeAreaY(chartDivElem,selectionRs) { |
|
|
|
|
var categoryDim=document.getElementById("viz_dimension1").value; |
|
|
|
|
var measureDim=document.getElementById("viz_measure1").value; |
|
|
|
@ -1819,7 +1919,7 @@ function getCommonChartProperty(name)
@@ -1819,7 +1919,7 @@ function getCommonChartProperty(name)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function showSrcCode() |
|
|
|
|
function showSrcCode(renderer) |
|
|
|
|
{ |
|
|
|
|
var myChartDiv= document.getElementById("chartDiv2"); |
|
|
|
|
var mySrcDiv=document.getElementById("chartSVGsrc"); |
|
|
|
@ -1830,18 +1930,42 @@ var mySrcDiv=document.getElementById("chartSVGsrc");
@@ -1830,18 +1930,42 @@ var mySrcDiv=document.getElementById("chartSVGsrc");
|
|
|
|
|
|
|
|
|
|
var numberOfChildNodes=myChartDiv.childNodes.length; |
|
|
|
|
var svg_xml =""; |
|
|
|
|
for (var i=0;i<numberOfChildNodes;i++) |
|
|
|
|
{ |
|
|
|
|
var myNode=myChartDiv.childNodes[i]; |
|
|
|
|
if(myNode.nodeName=="svg") |
|
|
|
|
{ |
|
|
|
|
var mySvg=myNode; //document.getElementById("chartSVG");
|
|
|
|
|
// Extract the data as SVG text string
|
|
|
|
|
svg_xml = (new XMLSerializer).serializeToString(mySvg); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
//alert(svg_xml);
|
|
|
|
|
document.getElementById("chartSrc").innerHTML=svg_xml; |
|
|
|
|
|
|
|
|
|
if(numberOfChildNodes>0) |
|
|
|
|
{ |
|
|
|
|
switch (renderer) { |
|
|
|
|
case "plot": |
|
|
|
|
var myFigure=myChartDiv.childNodes[0]; |
|
|
|
|
if(myFigure.childNodes.length>0) |
|
|
|
|
{ |
|
|
|
|
var mySvg=myFigure.childNodes[0]; |
|
|
|
|
svg_xml = (new XMLSerializer).serializeToString(mySvg); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case "d3js": |
|
|
|
|
for (var i=0;i<numberOfChildNodes;i++) |
|
|
|
|
{ |
|
|
|
|
var myNode=myChartDiv.childNodes[i]; |
|
|
|
|
if(myNode.nodeName=="svg") |
|
|
|
|
{ |
|
|
|
|
var mySvg=myNode; //document.getElementById("chartSVG");
|
|
|
|
|
// Extract the data as SVG text string
|
|
|
|
|
svg_xml = (new XMLSerializer).serializeToString(mySvg); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
document.getElementById("chartSrc").innerHTML="Unbekannter Renderer"; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
document.getElementById("chartSrc").innerHTML=svg_xml; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
document.getElementById("chartSrc").innerHTML="Kein Quellcode gefunden"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//document.getElementById("chartSVGsrc").style.visibility="visible";
|
|
|
|
|
/* |
|
|
|
|
const selection = window.getSelection(); |
|
|
|
|