Browse Source

Dynamische Elemente und Resultsets #5

makro_datasrc
Daniel Quathamer 2 years ago
parent
commit
055a4f32a1
  1. 206
      superx/xml/js/viz/viz_functions.js
  2. 8
      superx/xml/viz_html_chart.xsl

206
superx/xml/js/viz/viz_functions.js

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

8
superx/xml/viz_html_chart.xsl

@ -2026,8 +2026,8 @@ rs[</xsl:text><xsl:value-of select="$tableId"/><xsl:text>].push(new dataRow_</xs
<!--footer (BF nach unten verschoben)--> <!--footer (BF nach unten verschoben)-->
<footer class="card-footer"> <footer class="card-footer">
<p class="card-footer-item"><button class="button is-link is-outlined is-small" type="submit">Speichern</button></p> <p class="card-footer-item"><button class="button is-link is-outlined is-small" type="submit" onClick="alert('noch nicht implementiert)');">Speichern</button></p>
<p class="card-footer-item"><button class="button is-link is-outlined is-small" type="reset">Zurücksetzen</button></p> <p class="card-footer-item"><button class="button is-link is-outlined is-small" type="reset" onClick="return resetChartPropertiesForm();">Zurücksetzen</button></p>
</footer> </footer>
</xsl:template> </xsl:template>
@ -2048,7 +2048,7 @@ rs[</xsl:text><xsl:value-of select="$tableId"/><xsl:text>].push(new dataRow_</xs
</span> </span>
</button>--> </button>-->
<a <a
onClick="showChartDiv('chartDiv2'); createChart('chartDiv2');"> onClick="showChartDiv('chartDiv2'); renderChart('chartDiv2',myChartModel);">
<span class="icon"> <span class="icon">
<img src="../images/icons/more.svg" title="Laden" /> <img src="../images/icons/more.svg" title="Laden" />
</span> </span>
@ -2080,7 +2080,7 @@ rs[</xsl:text><xsl:value-of select="$tableId"/><xsl:text>].push(new dataRow_</xs
</span> </span>
</button>--> </button>-->
<a <a
onClick="showSrcCode();"> onClick="showSrcCode(myChartModel.renderer);">
<span class="icon"> <span class="icon">
<img src="../images/icons/more.svg" title="Laden" /> <img src="../images/icons/more.svg" title="Laden" />
</span> </span>

Loading…
Cancel
Save