/* SuperX-VIZ Modul (c) 2023 Daniel Quathamer */ function chartModel(id,name,renderer,datasources) { this.version="0.2b"; this.id=id; this.name=name; this.renderer=renderer; this.dataSources=datasources; //this.globalProperties=globalproperties; this.targetDiv=""; //only for d3 this.chartElements=new Array(); this.chartPropertiesUsed=new Array(); this.dataTransformation=new Array(); } function possibleVizType(elemID,value,name,explanation,isDefault ) { this.elemID=elemID; this.value=value; this.name=name; this.explanation=explanation; this.isDefault=isDefault; } function usedVizType(elemID,vizTypeUniquename,caption,datasource ) { this.elemID=elemID; this.vizTypeUniquename=vizTypeUniquename; this.caption=caption; this.datasource=datasource; this.elementTypeProperties=new Array(); } function usedVizProperty(name,vizPropertyVariablename,propertyValue,propUnit ) { this.name=name; this.vizPropertyVariablename=vizPropertyVariablename; this.propertyValue=propertyValue; this.propUnit=propUnit; } function usedVizTypeProperty(nr,vizTypePropertyUniquename,caption,propertyValue,propertyType ) { this.nr=nr; this.vizTypePropertyUniquename=vizTypePropertyUniquename; this.caption=caption; this.propertyValue=propertyValue; this.propertyType=propertyType; } function dataTransformationCol(tableId,colname,colfunction) { this.tableId=tableId; this.colname=colname; this.colfunction=colfunction; } function selectionRowMetaData(nr,targetColumn,colname,colcaption,coltype,colfunction) { this.nr=nr; this.targetColumn=targetColumn; this.colname=colname; this.colcaption=colcaption; this.coltype=coltype; this.colfunction=colfunction; } function selectionPropertyValue(nr,name,value,isDefault ) { this.nr=nr; this.name=name; this.value=value; this.isDefault=isDefault; } function dimFunction(nr,name,value,isDefault ) { this.nr=nr; this.name=name; this.value=value; this.isDefault=isDefault; } function dimensionProperty(name,caption,explanation,isMeasure,isMandatory,datasource) { this.name=name; this.caption=caption; this.isMeasure=isMeasure; this.isMandatory=isMandatory; this.explanation=explanation; this.datasource=datasource; this.getValueResultset = function () { var valueOptions=[]; var optionCounter=0; //selectionRsMetaData=fillSelectionResultMetaData(); //console.log("felder"+selectionRsMetaData.length); var isDefault=false; 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) // ) { //console.log("feld "+rsColumnMetaData[j].nr+selectionRsMetaData[j].targetColumn); var o=new selectionPropertyValue(rsColumnMetaData[datasource][j].nr,rsColumnMetaData[datasource][j].colcaption,rsColumnMetaData[datasource][j].colname,isDefault); valueOptions[optionCounter]=o; optionCounter++; if(isDefault) isDefault=false; } } return valueOptions; } } function selectionProperty(name,caption,isDynamic,isMeasure,isMandatory,staticValues,defaultValue,optionalFunction) { /*OBSOLETE*/ this.name=name; this.caption=caption; this.isDynamic=isDynamic; this.isMeasure=isMeasure; this.staticValues=staticValues; this.isMandatory=isMandatory; this.defaultValue=defaultValue; this.optionalFunction=optionalFunction; this.getValueResultset = function () { var valueOptions=[]; var optionCounter=0; if(isDynamic) { for(var j=0;j < rsMetaData.length;j++) { var isDefault=false; if(rsMetaData[j].colcaption.trim() !="" && (isMeasure==false || rsMetaData[j].coltype == 4 || rsMetaData[j].coltype == 3) ) { if(rsMetaData[j].colcaption==defaultValue) isDefault=true; var o=new selectionPropertyValue(rsMetaData[j].nr,rsMetaData[j].colcaption,rsMetaData[j].colname,isDefault); valueOptions[optionCounter]=o; optionCounter++; } } } else { var staticValuesArray = staticValues.split(/\|/); for(var k=0;k < staticValuesArray.length;k++) { var isDefault=false; if(rsMetaData[j].colcaption==defaultValue) isDefault=true; var o=new selectionPropertyValue(k,staticValuesArray[k],staticValuesArray[k],isDefault); valueOptions[k]=o; } } return valueOptions; } } /*Transfer form to model: */ function updateChartModel() { var myChartPropertiesUsed=new Array(); //first empty properties: /*for(var k=0;k< myChartModel.chartPropertiesUsed.length;k++) { myChartModel.chartPropertiesUsed[k].pop(); }*/ if(document.getElementById("chartName").value=="") document.getElementById("chartName").value=vizInitialName; var chartName=document.getElementById("chartName").value; //myChartModel.options.caption=chartName; if(myChartModel.renderer=="") myChartModel.renderer=document.getElementById("fldVizRenderer").value; var myCaption=new usedVizProperty("caption","caption",chartName); myChartPropertiesUsed.push(myCaption); //var myForm=document.forms["chartPropertiesForm"]; for(var k=0;k < commonChartProperties.length;k++) { if(getCommonChartProperty(commonChartProperties[k].name)!="") { var myProp=new usedVizProperty(commonChartProperties[k].name,commonChartProperties[k].variableName,getCommonChartProperty(commonChartProperties[k].name),commonChartProperties[k].propUnit); myChartPropertiesUsed.push(myProp); } } //first Collect all groups: myChartModel.chartPropertiesUsed=myChartPropertiesUsed; //Update the source Code TEXTAREA: updateChartModelCode(myChartModel); return myChartModel; } function renderChart(chartDiv,currentChartModel,datasource,title) { if(!datasource) var datasource=0; if(!title) var title=document.getElementById("chartName").value; /*if(document.getElementById("chartName").value=="") document.getElementById("chartName").value=vizInitialName;*/ if(currentChartModel.chartElements.length>0 && currentChartModel.chartElements[0]) { renderChartSVGFromModel(currentChartModel,chartDiv,datasource,title); } else document.getElementById(chartDiv).innerHTML=""+ ""; // } function prepareSelectionForm() { var selectionProperties=[]; var myProp= new selectionProperty("dimension1","Dimension 1",true,false,true,null,null,true); selectionProperties[0]=myProp; var myProp= new selectionProperty("dimension2","Dimension 2",true,false,false,null,null,true); selectionProperties[1]=myProp; var myProp= new selectionProperty("measure1","Maß",true,true,true,null,null,true); selectionProperties[2]=myProp; return selectionProperties; } function generateFormFieldHtml(labelText,fieldname,tooltiptext,inputElem) { var zs="
"; zs+="
"+labelText+"
"; zs+="
"; zs+="
"; //zs+=""; zs+=getOuterHTML(inputElem); zs+="
"; //Ende field body zs+="
";//Ende field return zs; } function getOuterHTML(element) { var container = document.createElement("div"); container.appendChild(element.cloneNode(true)); return container.innerHTML; } function createChartElementConfig1Form(renderer,elemID) { //first empty form: var formChartElementConfig1=document.getElementById("ChartElementConfig1Div"); while (formChartElementConfig1.firstChild) { formChartElementConfig1.removeChild(formChartElementConfig1.firstChild); } var formChartElementConfig2=document.getElementById("ChartElementConfig2Div"); while (formChartElementConfig2.firstChild) { formChartElementConfig2.removeChild(formChartElementConfig2.firstChild); } //reset ElemID: document.getElementById("chartElementID").value=elemID; //any previous values? var myChartElem=null; if(myChartModel.chartElements && elemID !="") { var filtered=myChartModel.chartElements.filter(obj => obj.elemID == elemID); var myChartElem=filtered[0]; } //First Datasource: //const elementDatasourceDiv=document.createElement("div"); /* const fieldDatasourceElem = document.createElement("div"); fieldDatasourceElem.classList.add("field"); fieldDatasourceElem.classList.add("is-horizontal"); //label: const labelDatasourceElem = document.createElement("div"); labelDatasourceElem.classList.add("field-label"); labelDatasourceElem.classList.add("is-small"); const labelDatasource = document.createElement("label"); labelDatasource.classList.add("label"); labelDatasource.classList.add("is-required"); labelDatasource.classList.add("is-small"); labelDatasource.classList.add("has-tooltip-right"); labelDatasource.setAttribute("data-tooltip","Datenquelle für das Diagrammelement"); const textnode = document.createTextNode("Datenquelle"); labelDatasource.appendChild(textnode); labelDatasourceElem.appendChild(labelDatasource); fieldDatasourceElem.appendChild(labelDatasourceElem); const selDatasourceFbodyElem = document.createElement("div"); selDatasourceFbodyElem.classList.add("field-body"); const selDatasourceElem = document.createElement("select"); selDatasourceElem.name="chartElementDatasource"; selDatasourceElem.id="chartElementDatasource"; selDatasourceElem.classList.add("select"); selDatasourceElem.classList.add("is-small"); selDatasourceElem.style.width="100px"; selDatasourceElem.onchange= function () { createChartElementsConfig2Form(renderer); }; fillSelectOptions(selDatasourceElem,rsTableMetaData,true,(myChartElem!=null?myChartElem.datasource:null)); selDatasourceFbodyElem.appendChild(selDatasourceElem); fieldDatasourceElem.appendChild(selDatasourceFbodyElem); formChartElementConfig1.appendChild(fieldDatasourceElem);*/ const selDatasourceElem = document.createElement("select"); selDatasourceElem.name="chartElementDatasource"; selDatasourceElem.id="chartElementDatasource"; selDatasourceElem.classList.add("select"); selDatasourceElem.classList.add("is-small"); //selDatasourceElem.style.width="100px"; fillSelectOptions(selDatasourceElem,rsTableMetaData,true,(myChartElem!=null?myChartElem.datasource:null)); var datasourceFieldHtml=""; if(rsTableMetaData.length==1) { //wenn nur ein Resultset da ist, kann es ausgeblendet bleiben: selDatasourceElem.style="display:none;"; datasourceFieldHtml=getOuterHTML(selDatasourceElem); } else { datasourceFieldHtml=generateFormFieldHtml("Datenquelle","chartElementDatasource","Datenquelle für das Diagrammelement, bei Makroberichten wählen Sie die Tabellennnummer",selDatasourceElem); } const selVizTypeElem = document.createElement("select"); selVizTypeElem.name="chartElementVizType"; selVizTypeElem.id="chartElementVizType"; selVizTypeElem.classList.add("select"); selVizTypeElem.classList.add("is-small"); //selVizTypeElem.style.width="100px"; fillSelectOptions(selVizTypeElem,getPossibleVizTypes(renderer),false,(myChartElem!=null?myChartElem.vizTypeUniquename:null)); var vizTypeFieldHtml=generateFormFieldHtml("Grafikelement-Typ","chartElementVizType","Art des Grafikelements",selVizTypeElem); formChartElementConfig1.innerHTML=datasourceFieldHtml+vizTypeFieldHtml; //add onchange: document.getElementById("chartElementDatasource").addEventListener( 'change', function() { createChartElementsConfig2Form(renderer); }, false ); document.getElementById("chartElementVizType").addEventListener( 'change', function() { createChartElementsConfig2Form(renderer); }, false ); //Then vizType: /* const fieldVizTypeElem = document.createElement("div"); fieldVizTypeElem.classList.add("field"); fieldVizTypeElem.classList.add("is-horizontal"); //label: const labelVizTypeElem = document.createElement("div"); labelVizTypeElem.classList.add("field-label"); labelVizTypeElem.classList.add("is-small"); const labelVizType = document.createElement("label"); labelVizType.classList.add("label"); labelVizType.classList.add("is-required"); labelVizType.classList.add("is-small"); labelVizType.classList.add("has-tooltip-right"); labelVizType.setAttribute("data-tooltip","Art des Grafikelements"); const textnodeVizType = document.createTextNode("Grafikelement-Typ"); labelVizType.appendChild(textnodeVizType); labelVizTypeElem.appendChild(labelVizType); fieldVizTypeElem.appendChild(labelVizTypeElem); const selVizTypeFbodyElem = document.createElement("div"); selVizTypeFbodyElem.classList.add("field-body"); const selVizTypeElem = document.createElement("select"); selVizTypeElem.name="chartElementVizType"; selVizTypeElem.id="chartElementVizType"; selVizTypeElem.classList.add("select"); selVizTypeElem.classList.add("is-small"); selVizTypeElem.style.width="100px"; selVizTypeElem.onchange= function () { createChartElementsConfig2Form(renderer); }; fillSelectOptions(selVizTypeElem,getPossibleVizTypes(renderer),false,(myChartElem!=null?myChartElem.vizTypeUniquename:null)); selVizTypeFbodyElem.appendChild(selVizTypeElem); fieldVizTypeElem.appendChild(selVizTypeFbodyElem); formChartElementConfig1.appendChild(fieldVizTypeElem); */ //display Element if already saved: if(elemID!="") createChartElementsConfig2Form(renderer,elemID); } function createChartElementsConfig2Form(renderer,elemID) { var dataSource=document.getElementById("chartElementDatasource").value; var vizType=document.getElementById("chartElementVizType").value; //now Elements: var formChartElementConfig2Div=document.getElementById("ChartElementConfig2Div"); while (formChartElementConfig2Div.firstChild) { formChartElementConfig2Div.removeChild(formChartElementConfig2Div.firstChild); } //any previous values? //reset general properties: //renderGeneralChartPropertiesForm("generalChartPropertiesFormDiv",myCommonChartProperties,renderer); const elementDivBox = document.createElement("div"); //first only Dimensions and measures: var elementDivBoxHtml=""; for(var k=0;k < vizTypeProperties.length;k++) { if(vizType==vizTypeProperties[k].typeUniquename && (vizTypeProperties[k].groupUniquename=="CATEGORY" || vizTypeProperties[k].groupUniquename=="MEASURE" ) ) { var selectedValue=getChartElementPropertyValue(elemID,vizTypeProperties[k].propUniquename); elementDivBoxHtml+=renderDimensionField(vizTypeProperties[k],dataSource,selectedValue); //elementDivBox.appendChild(renderDimensionField(vizTypeProperties[k],dataSource,selectedValue)); } } elementDivBox.innerHTML=elementDivBoxHtml; //chartElement-specific properties: //without Dimensions and measures: /*for(var k=0;k < vizTypeProperties.length;k++) { if(vizType==vizTypeProperties[k].typeUniquename && vizTypeProperties[k].groupUniquename!="CATEGORY" && vizTypeProperties[k].groupUniquename!="MEASURE" ){ var currentCommonChartProperties=commonChartProperties.filter(obj => obj.name == vizTypeProperties[k].propUniquename); if(currentCommonChartProperties.length >0) { elementDivBox.appendChild(renderChartPropertyField(elemID,currentCommonChartProperties[0],false)); } else { const unknownFieldDiv = document.createElement("div"); const unknownField=document.createTextNode("Unbekanntes Feld "+vizTypeProperties[k].propUniquename); unknownFieldDiv.appendChild(unknownField); elementDivBox.appendChild(unknownFieldDiv); } } }*/ const saveBtnDiv = document.createElement("div"); 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); formChartElementConfig2Div.appendChild(elementDivBox); } function getChartElementPropertyValue(elemID,propUniquename) { var retVal=null; var myChartElem=null; if(myChartModel.chartElements && elemID !=null) { var filtered=myChartModel.chartElements.filter(obj => obj.elemID == elemID); var myChartElem=filtered[0]; if(myChartElem.elementTypeProperties && myChartElem.elementTypeProperties.length) { for(var k=0;k < myChartElem.elementTypeProperties.length;k++) { myVizTypeProperty=myChartElem.elementTypeProperties[k]; if(myVizTypeProperty.vizTypePropertyUniquename==propUniquename) { retVal=myVizTypeProperty.propertyValue; } } } } return retVal; } function loadChartElementConfig(myElem) { var elemID=myElem.value; if(elemID=="") alert("Kein Grafikelement gefunden"); else { var renderer=document.getElementById("fldVizRenderer").value; var myVizType=myChartModel.chartElements.filter(obj => obj.elemID == elemID); //var myVizType=myChartModel.chartElements[elemID]; createChartElementConfig1Form(renderer,elemID); //document.getElementById("chartElementVizType").value=myVizType.vizTypeUniquename; //document.getElementById("chartElementDatasource").value=myVizType.datasource; } } function saveChartElementConfig() { var elemID=document.getElementById("chartElementID").value; var vizTypeUniquename=document.getElementById("chartElementVizType").value; var datasource=document.getElementById("chartElementDatasource").value; var title=document.getElementById("chartName").value; var nextElemID=parseInt(document.getElementById("vizElementCounter").value) +1; var mode="update"; if(elemID=="") { //insert mode: mode="insert"; if(myChartModel.chartElements) elemID=myChartModel.chartElements.length +1; else elemID="0"; } var myVizType=new usedVizType(elemID,vizTypeUniquename,vizTypeUniquename,datasource); //nr,vizTypeUniquename,caption,datasource var propertyCounter=0; for(var k=0;k < vizTypeProperties.length;k++) { if(vizTypeUniquename==vizTypeProperties[k].typeUniquename && document.getElementById(vizTypeProperties[k].propUniquename) && document.getElementById(vizTypeProperties[k].propUniquename).value !="") { var myUsedVizTypeProperty=new usedVizTypeProperty(elemID,vizTypeProperties[k].propUniquename, vizTypeProperties[k].caption,document.getElementById(vizTypeProperties[k].propUniquename).value,vizTypeProperties[k].propertyType); //))nr,vizTypePropertyUniquename,caption,propertyValue ) myVizType.elementTypeProperties.push(myUsedVizTypeProperty); } } //myVizType.elementTypeProperties=null; //TODO: Existenz abfangen, hier wird einfach hinzugefügt: if(mode=="update") { for(var k=0;k obj.elemID != elemID); myChartModel.chartElements=filtered; //myChartModel.chartElements.pop(); //elemID--; //if(document.getElementById("chartElementID")) // document.getElementById("chartElementID").value=elemID; document.getElementById("vizElementCounter").value=myChartModel.chartElements.length; const chartElementListSelect=document.getElementById("chartElementID"); fillChartElementListSelect(chartElementListSelect); createChartElementConfig1Form(renderer,null); renderChart('chartDiv',myChartModel); } } function fillChartElementListSelect(mySelectElem,selectedValue) { var chartElementListSelectOptionArray=new Array(); if(myChartModel.chartElements.length>0) { for(var k=0;k < myChartModel.chartElements.length;k++) { var myOptionValue=new possibleVizType(myChartModel.chartElements[k].elemID, myChartModel.chartElements[k].elemID, myChartModel.chartElements[k].vizTypeUniquename + "-"+myChartModel.chartElements[k].datasource, "", //explanation (myChartModel.chartElements[k].elemID==selectedValue ? true:false) //isDefault ); chartElementListSelectOptionArray.push(myOptionValue); } } fillSelectOptions(mySelectElem,chartElementListSelectOptionArray,false,selectedValue); } function showChartElementsBodyForm(elemID) { //Reset Elements Form //elemID++; var filtered=myChartModel.chartElements.filter(obj => obj.elemID == elemID); document.getElementById("chartElementID").value=elemID; document.getElementById("chartElementVizType").value=filtered[0].vizTypeUniquename; var formChartElementConfig2Div=document.getElementById("ChartElementConfig2Div"); while (formChartElementConfig2Div.firstChild) { formChartElementConfig2Div.removeChild(formChartElementConfig2Div.firstChild); } } function resetChartPropertiesForm(chosenRenderer) { myChartModel=new chartModel(1,"",document.getElementById("fldVizRenderer").value,rsTableMetaData); renderChart('chartDiv',myChartModel); //Show Plot Code if renderer =plot: var myDiv=document.getElementById("chartCodeDiv"); if(chosenRenderer=="plot" || chosenRenderer=="echarts") myDiv.style.display="block"; else myDiv.style.display="none"; if(chosenRenderer=="plot") document.getElementById("fldChartTypeSelection").style="display:block;"; else document.getElementById("fldChartTypeSelection").style="display:none;"; createChartElementConfig1Form(chosenRenderer,null); return true; } function getPossibleVizTypes(renderer) { var possibleVizTypes=new Array(); for(var k=0;k < vizTypes.length;k++) { if(vizTypes[k].rendererUniquename==renderer) { var newVizType = new possibleVizType( //nr,value,name,explanation,isDefault k,vizTypes[k].uniquename,vizTypes[k].caption,'',false); possibleVizTypes.push(newVizType); } } return possibleVizTypes; } function fillDimensionProperty(vizTypeProperty,datasource) { var isMeasure=(vizTypeProperty.groupUniquename=="MEASURE")?true:false; var myProp= new dimensionProperty(vizTypeProperty.propUniquename,vizTypeProperty.caption,vizTypeProperty.explanation,isMeasure,vizTypeProperty.isMandatory,datasource); return myProp; } function showChartPropertiesFormDiv(formDiv,formElementsDiv,renderer) { if(myChartModel != null) { var myDiv=document.getElementById(formDiv); switch (formDiv) { case "chartPropertiesTreeFormDiv": renderChartPropertiesTreeForm(formElementsDiv,commonChartProperties,myChartModel); break; case "generalChartPropertiesFormDiv": renderGeneralChartPropertiesForm(formElementsDiv,commonChartProperties,myChartModel); break; case "ChartElementsDiv": createChartElementConfig1Form(myChartModel.renderer,null); break; default: //do nothing break; } if(myDiv.style.display=="block") myDiv.style.display="none"; else myDiv.style.display="block"; } } function showSaveChartFormDiv(formDiv,renderer) { var myDiv=document.getElementById(formDiv); if(myDiv.style.display=="block") myDiv.style.display="none"; else myDiv.style.display="block"; } function prepareForm(vizTypeUniquename,vizTypeProperties) { var chartProperties=[]; var propertyCounter=0; for(var k=0;k < vizTypeProperties.length;k++) { if(vizTypeUniquename==vizTypeProperties[k].typeUniquename) { var isMeasure=(vizTypeProperties[k].groupUniquename=="MEASURE")?true:false; var myProp= new dimensionProperty(vizTypeProperties[k].propUniquename,vizTypeProperties[k].caption,vizTypeProperties[k].explanation,isMeasure,vizTypeProperties[k].isMandatory); chartProperties.push(myProp); propertyCounter++; } } return chartProperties; } /* function prepareBarXForm() { var chartProperties=[]; var propertyCounter=0; var myProp= new dimensionProperty("viz_dimension1","Kategorie-Dimension",false,true); chartProperties[0]=myProp; var myProp= new dimensionProperty("viz_measure1","Maß",true,true); chartProperties[1]=myProp; return chartProperties; } function prepareBarYForm() { var chartProperties=[]; var propertyCounter=0; var myProp= new dimensionProperty("viz_dimension1","Kategorie-Dimension",true,false,true,null,null,true); chartProperties[0]=myProp; var myProp= new dimensionProperty("viz_dimension2","Serien-Dimension",true,false,false,null,null,true); chartProperties[1]=myProp; var myProp= new dimensionProperty("viz_measure1","Maß",true,true,true,null,null,true); chartProperties[2]=myProp; return chartProperties; } function prepareLineForm() { var chartProperties=[]; var propertyCounter=0; var myProp= new dimensionProperty("viz_dimension1","Kategorie-Dimension",true,false,true,null,null,true); chartProperties[0]=myProp; var myProp= new dimensionProperty("viz_dimension2","Serien-Dimension",true,false,false,null,null,true); chartProperties[1]=myProp; var myProp= new dimensionProperty("viz_measure1","Maß",true,true,true,null,null,true); chartProperties[2]=myProp; return chartProperties; } function prepareLineForm_alt() { var chartProperties=[]; var propertyCounter=0; var myProp= new dimensionProperty("dimension1","X-Achse",true,false,true,null,null,true); chartProperties[0]=myProp; var myProp= new dimensionProperty("measure1","Y-Achse",true,true,true,null,null,true); chartProperties[1]=myProp; return chartProperties; } */ function selectionResultPreview(myDiv) { myDivElem=document.getElementById(myDiv); if(myDivElem.style.display=="none") { var selectionRs=[]; var selectionRsMetaData=[]; var rowcount=rs.length; var maxLenCategoryDim=0; var maxMeasure=0; selectionRsMetaData=fillSelectionResultMetaData(); //alert(selectionRsMetaData[0].colname); selectionRs=fillSelectionResult(selectionRsMetaData); showSelectionTable("selectionResultPreviewTable",selectionRs,selectionRsMetaData,10); myDivElem.style.display="block"; } else myDivElem.style.display="none"; } function fillSelectionResultMetaData() { var selectionRsMetaData=[]; var dimension1=document.getElementById("dimension1").value; var dimension2=document.getElementById("dimension2").value; var measure=document.getElementById("measure1").value; var functionOfDimension1=document.getElementById("dimension1_fn").value; var functionOfDimension2=document.getElementById("dimension2_fn").value; var functionOfMeasureDim=document.getElementById("measure1_fn").value; //first fill metadata: var counter=1; selectionRsMetaData.push(new selectionRowMetaData(counter,"dimension1",dimension1,getColumnCaption(dimension1),0,functionOfDimension1)); if(dimension2!="") { counter++; var dim2=new selectionRowMetaData(counter,"dimension2",dimension2,getColumnCaption(dimension2),0,functionOfDimension2); selectionRsMetaData.push(dim2 ); } counter++; selectionRsMetaData.push(new selectionRowMetaData(counter,"measure",measure,getColumnCaption(measure),0),functionOfMeasureDim); return selectionRsMetaData; } function renderDimensionField(vizTypeProperty,datasource,selectedValue) { const selElem = document.createElement("select"); selElem.name=vizTypeProperty.propUniquename; selElem.id=vizTypeProperty.propUniquename; var dimensionProperty=fillDimensionProperty(vizTypeProperty,datasource); fillSelectOptions(selElem,dimensionProperty.getValueResultset(),dimensionProperty.isMandatory,selectedValue); var zs=generateFormFieldHtml(vizTypeProperty.caption,vizTypeProperty.propUniquename,"Je nach Grafikelement Festlegung der Achsen oder Dimensionen und Maße.",selElem); //TODO tooltip return zs; } function renderDimensionFieldAlt(vizTypeProperty,datasource,selectedValue) { const fieldElem = document.createElement("div"); fieldElem.classList.add("field"); fieldElem.classList.add("is-horizontal"); //label: const labelElem = document.createElement("div"); labelElem.classList.add("field-label"); // is-normal labelElem.classList.add("is-small"); const label = document.createElement("label"); label.classList.add("label"); label.classList.add("is-required"); label.classList.add("is-small"); label.classList.add("has-tooltip-right"); //label.setAttribute("data-tooltip",dimensionProperty.explanation); const textnode = document.createTextNode(vizTypeProperty.caption); label.appendChild(textnode); labelElem.appendChild(label); fieldElem.appendChild(labelElem); //field body: const fbodyElem = document.createElement("div"); fbodyElem.classList.add("field-body"); //input: const inputFieldElem = document.createElement("div"); inputFieldElem.classList.add("field"); inputFieldElem.classList.add("is-active"); inputFieldElem.style.width="100px"; const inputSelectElem = document.createElement("div"); inputSelectElem.classList.add("select"); inputSelectElem.classList.add("is-small"); //inputSelectElem.classList.add("is-fullwidth"); const selElem = document.createElement("select"); selElem.name=vizTypeProperty.propUniquename; selElem.id=vizTypeProperty.propUniquename; /* vermutlich unnötig: selElem.onchange= function () { renderChart('chartDiv'); };*/ var dimensionProperty=fillDimensionProperty(vizTypeProperty,datasource); fillSelectOptions(selElem,dimensionProperty.getValueResultset(),dimensionProperty.isMandatory,selectedValue); inputSelectElem.appendChild(selElem); inputFieldElem.appendChild(inputSelectElem); fbodyElem.appendChild(inputFieldElem); fieldElem.appendChild(fbodyElem); return fieldElem; } function renderChartPropertiesTreeForm(formDiv,myCommonChartProperties,currentChartModel) { //first empty form: var myForm=document.getElementById(formDiv); while (myForm.firstChild) { myForm.removeChild(myForm.firstChild); } const treeDiv = document.createElement("div"); const treeDivText = document.createTextNode(" Insg. " + vizPropertyTreeNodes.length+ "Eigenschaften:"); const treeDivTextBold = document.createElement("strong"); treeDivTextBold.appendChild(treeDivText); treeDiv.appendChild(treeDivTextBold); var propertyTree = new Array(); for(var k=0;k < vizPropertyTreeNodes.length;k++) { if(vizPropertyTreeNodes[k].typeUniquename== document.getElementById("chartElementVizType").value //Abfragen welcher VIZ-Type ) { var myProp=myCommonChartProperties.find(prop => prop.name === vizPropertyTreeNodes[k].propUniquename); if(myProp.groupUniquename!="CATEGORY" && myProp.groupUniquename!="MEASURE" && myProp.propUniquename !="dimensionsNode") { var myPropValue=getPropertyValueFromModel(currentChartModel,vizPropertyTreeNodes[k].propUniquename,true,vizPropertyTreeNodes[k].typeUniquename ) let entry=new sxTreeNode; entry.id=vizPropertyTreeNodes[k].propUniquename; entry.caption=vizPropertyTreeNodes[k].propertyCaption; entry.parent=vizPropertyTreeNodes[k].parentPropertyUniquename; if(myProp.inputType!="NODE") { entry.inputPostCaption=renderTreeInput(myProp,entry.id,myPropValue); } if(myProp.inputType=="NODE") { entry.hasChildren=true; } entry.explanation=myProp.explanation; propertyTree.push(entry); } /* alter Code Liste:if(myProp.groupUniquename!="CATEGORY" && myProp.groupUniquename!="MEASURE") { if(myProp.inputType=="NODE") { const treeNodeText = document.createTextNode(myProp.caption); treeDiv.appendChild(treeNodeText); } else { treeDiv.appendChild(renderChartPropertyField(null,myProp,true)); } }*/ } } if(propertyTree && propertyTree.length >0) { //zs +="
  • content.nodes.length"+content.nodes.length+"
  • "; var zs=""; zs +=""; treeDiv.innerHTML=zs; myForm.appendChild(treeDiv); } function getPropertyValueFromModel(myChartModel,propUniquename,isCommon,chartElemId ) { //Wenn im chartModel schon ein Wert vorhanden ist, wird er vorbelegt: if(chartProperty) var propValue=""; if(myChartModel && isCommon && myChartModel.chartPropertiesUsed.length>0) { propValue=getChartPropertyFromModel(myChartModel.chartPropertiesUsed,propUniquename,isCommon ); } if(myChartModel && !isCommon && myChartModel.chartElements.length >0) { var filtered=myChartModel.chartElements.filter(obj => obj.elemID == chartElemId); var myChartElem=filtered[0]; if(myChartElem && myChartElem.elementTypeProperties && myChartElem.elementTypeProperties.length) { propValue=getChartPropertyFromModel(myChartElem.elementTypeProperties,propUniquename,isCommon ); } } return propValue; } function renderTreeInput(chartProperty,inputId, previousValue) { var zs=""; var styleAttr=" style=\"box-shadow: inset 1px 1px 3px #cccccc;border-radius: 5px;\" "; switch (chartProperty.inputType) { case "TEXT": zs=" "; break; case "SELECT": zs=" "; break; case "CHECKBOX": zs=" "; zs+=" "; zs+=""; break; default: zs="Unbekannter Feldtyp"; break; } return zs; } function changeColorWithColorPicker(colorpickerInput,targetInputid) { document.getElementById(targetInputid).value=colorpickerInput.value; } function getTreeInputSelectOptions(myValues,selectedValue,isMandatory) { var zs=""; for(var j=0;j < myValues.length;j++) { var selectedOption=null; var defaultSelected=false; if(myValues[j].value==selectedValue) { selectedOption=j+(isMandatory?0:1); defaultSelected=true; } if(selectedOption==null && myValues[j].isDefault) { selectedOption=j+(isMandatory?0:1); defaultSelected=true; } zs+="