@ -31,11 +31,16 @@ String previousValue = request.getParameter("previousValue");
@@ -31,11 +31,16 @@ String previousValue = request.getParameter("previousValue");
String zeilenanzahl = request.getParameter("zeilenanzahl");
String referrerForm = request.getParameter("referrerForm");
if(referrerForm==null || referrerForm.equals(""))
referrerForm="0 ";
referrerForm="maske ";
String params = request.getParameter("params");
String callurl="../../servlet/SuperXmlMaske?tid="+tid+"&getJSON_"+fname+"=xxxxxx-xxxxxx@";
String callurl="../../servlet/SuperXmlMaske?tid="+tid;
if(previousValue==null || previousValue.equals(""))
callurl+="&getJSON_"+fname+"=xxxxxx-xxxxxx@";
else
callurl+="&getJSON_COMPLETE"+fname+"=xxxxxx-xxxxxx@";
callurl+=params;
%>
@ -44,8 +49,7 @@ callurl+=params;
@@ -44,8 +49,7 @@ callurl+=params;
<title>Auswahl <%=fname %></title>
</head>
<style>
</style>
<script type="text/javascript" language="javascript">
var sichtContentJSON;
@ -83,6 +87,9 @@ var previousValuesCount=0;
@@ -83,6 +87,9 @@ var previousValuesCount=0;
if(previousValuesArray)
previousValuesCount=previousValuesArray.length;
//previousValuesCount=0; //TODO: wenn previousValue, dann klappt Aufklappen nicht immer
var treeNodes=new Array();
function initDialog(url,searchstring)
{
var ret;
@ -194,16 +201,21 @@ if(content && content.nodes && content.nodes.length >0)
@@ -194,16 +201,21 @@ if(content && content.nodes && content.nodes.length >0)
for(var j=0;j < content.nodes.length;j++)
{
var node=content.nodes[j];
zs +=renderNode(node,true,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl);
zs +=renderNode(node,null,//parent
true,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl,0 //ebene
);
}
}
zs +="</ul>";
targetDiv.innerHTML=zs;
checkIndeterminates();
}
function renderNode(node,isRoot,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl)
function renderNode(node,parentId,isRoot,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl,ebene)
{
ebene++;
var zs="";
if(searchstring=="" || node.title.indexOf(searchstring)>-1)
{
@ -225,19 +237,28 @@ if(searchstring=="" || node.title.indexOf(searchstring)>-1)
@@ -225,19 +237,28 @@ if(searchstring=="" || node.title.indexOf(searchstring)>-1)
fldName=fname;
fldType="radio";
}
zs += "<li class='sichtentreeLI'>";
if (node.nodeattrib && node.nodeattrib == 3)
{ //nicht sichtbar, kommt aber in Auswertung raus:
zs +="";//<span>"+node.title+"</span>";
}
else
{
zs += "<li class='sichtentreeLI' id='liElem"+node.objectId+"'>";
if(isRoot)
{
zs+="<span style='margin-left:0px'></span>";
zs+="<span style='margin-left:0.1rem'></span>";
}
else
{
if(node.isFolder=="true")
{
zs+="<span class='sichtentreeCaret' id='sichtentreeCaret_"+node.objectId+"'";
zs+="onClick=\"getChildNodes('"+node.objectId.trim()+"',this)\">";
zs+="</span> ";
//if(previousValuesCount==0 && !isRoot)
// hideChildNodes(node.objectId.trim(),"sichtentreeCaret_"+node.objectId);
}
else
zs+="<span style='margin-left:15px'></span>";
@ -247,38 +268,108 @@ if(searchstring=="" || node.title.indexOf(searchstring)>-1)
@@ -247,38 +268,108 @@ if(searchstring=="" || node.title.indexOf(searchstring)>-1)
zs +="<span style='margin-left:10px' class='is-unselectable'> </span>";
zs +="<span>"+node.title+"</span>\n";
}
else {
zs+="<input type='"+fldType+"' "+checkedString+ " name='"+fldName+ "' id='"+fldId+ "' value='"+node.objectId +"' /> ";
zs+="<input type='"+fldType+"' "+checkedString+ " name='"+fldName+ "' id='"+fldId+ "' value='"+node.objectId +"' onChange='uncheckParents(this)' class='regularCheckbox' /> ";
zs +="<label for='"+fldId+"' id='label"+node.objectId +"'>"+node.title+"</label>\n";
}
if(node.children && node.children.length >0 )
{
for(var i=0;i < node.children.length;i++)
{
zs+="<ul style='margin-left:10px' id='childOf"+node.objectId+"'>";
zs += renderNode(node.children[i],false,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl);
zs+="<ul style='margin-left:10px' id='childOf"+node.objectId+i+"' ";
if(ebene>1)
zs+="class='sichtentreeChildUL sichtentreeNested'";
zs+=">";
zs += renderNode(node.children[i],node.objectId,//parent
false,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl,ebene);
zs +="</ul>";
}
}
zs+="</li>";
}
zs+="</li>";
//register Node in treeNodes:
var myNode=new treeNode(node.title , //name
node.objectId, //apnr
parentId ,//parent,
0, //level,
node.nodeattrib,
"",//linkUrl,
"",//linkTarget,
"",//onClickHandler,
node.isFolder);
treeNodes.push(myNode);
}
} // wenn nodeattrib !=3
} //Ende wenn suchstring
return zs;
}
function uncheckParents(inpElem)
{
if(inpElem.checked || inpElem.indeterminate)
{
//parents unchecked:
currentNodeId=inpElem.value;
parentNodeId=getParentNode(currentNodeId);
for(var j=0;j < document.forms['selection'].elements.length;j++)
{
var el=document.forms['selection'].elements[j];
if(el.type=="checkbox" && el.value==parentNodeId)
{
console.log("INPUT found:"+el.id);
el.indeterminate=true;
el.checked=false;
uncheckParents(el);
}
}
}
return true;
}
function getParentNode(targetNodeId)
{
var parent;
for(var i=0;i < treeNodes.length;i++)
{
var node=treeNodes[i];
if(node.apnr==targetNodeId)
{
parent=node.parent;
}
}
return parent;
}
/*function hideChildNodes(nodeId,spanElem)
{
var childUlId="childOf"+nodeId;
document.getElementById(childUlId).classList.toggle("sichtentreeNested");
}*/
function getChildNodes(nodeId,spanElem)
{
//spanElem.parentElement.querySelector(".sichtentreeNested").classList.toggle("sichtentreeActive");
var childUlId="childOf"+nodeId;
var childUlIdPrefix ="childOf"+nodeId;
spanElem.classList.toggle("sichtentreeCaret-down");
var ulChildren = document.getElementById("liElem"+nodeId).getElementsByTagName('ul');
if(ulChildren.length>0)
{
for(var i=0;i<ulChildren.length;i++)
{
var childElem=ulChildren[i];
var childUlId=childUlIdPrefix+i;
if(document.getElementById(childUlId))
{
//Kind existiert bereits, wird nur unsichtbar:
document.getElementById(childUlId).classList.toggle("sichtentreeNested");
}
} //ende Schleife childUlIds
}
else
{
//Kind existiert noch nicht:
@ -302,11 +393,13 @@ var xhttp = new XMLHttpRequest();
@@ -302,11 +393,13 @@ var xhttp = new XMLHttpRequest();
for(var j=0;j < childrenJSON.length;j++)
{
var node=childrenJSON[j];
childrenHTML +=renderNode(node,false,"",previousValuesCount,previousValuesArray,zeilenanzahl);
childrenHTML +=renderNode(node,nodeId,//parent
false,"",previousValuesCount,previousValuesArray,zeilenanzahl,0);
}
}
childUL.innerHTML=childrenHTML;
//alert(JSON.stringify(childrenJSON));
checkIndeterminates();
}
};
xhttp.open("GET", suburl, true);
@ -315,6 +408,40 @@ var xhttp = new XMLHttpRequest();
@@ -315,6 +408,40 @@ var xhttp = new XMLHttpRequest();
}
function checkIndeterminates()
{
if(previousValuesCount>0)
{
for(var j=0;j < document.forms["selection"].elements.length;j++)
{
var inpElem=document.forms["selection"].elements[j];
var inputType = inpElem.type;
var inputName = inpElem.name;
if((inputType=="checkbox" || inputType=="radio")
//&& (!inpElem.name=="metaCheckbox" //&&
//(!inpElem.indeterminate || inpElem.indeterminate==false)
)
{
//check if children are selected:
var parentElem=inpElem.parentElement;
var inpChildren = parentElem.getElementsByTagName('input');
if(inpChildren && inpChildren.length>0)
{
for(var i=0;i<inpChildren.length;i++)
{
var childInpElem=inpChildren[i];
if(inputName!=childInpElem.name && childInpElem.checked)
{
document.forms["selection"].elements[j].indeterminate=true;
}
}
}
}
}
}
}
function ndSichtEintraegeSuchen(was) {
var callurl = '/superx/servlet/SuperXmlMaske';
callurl += '?tid=' + maskentid + '&getJSON_' + fname +
@ -331,7 +458,8 @@ function ndSichtEintraegeSuchen(was) {
@@ -331,7 +458,8 @@ function ndSichtEintraegeSuchen(was) {
for(var j=0;j < searchResultJSON.length;j++)
{
var node=searchResultJSON[j];
searchResultHTML += renderNode(node,true,"",previousValuesCount,previousValuesArray,zeilenanzahl);
searchResultHTML += renderNode(node,null,//parent
true,"",previousValuesCount,previousValuesArray,zeilenanzahl,0);
}
}
document.getElementById("sichtDiv").innerHTML=searchResultHTML+"</ul>";
@ -346,11 +474,28 @@ function ndSichtEintraegeSuchen(was) {
@@ -346,11 +474,28 @@ function ndSichtEintraegeSuchen(was) {
</script>
<body class="has-navbar-fixed-top" onload="initDialog('<%=callurl %>','')">
<div id="nd_navi_top">
<nav class="navbar is-fixed-top" role="navigation" ><!--aria-label="main navigation"-->
<div class="navbar-brand">
<style type="text/css">
input.regularCheckbox
{
width: 1em;
height: 1em;
accent-color: green;
}
input.parentCheckbox
{
accent-color: gray;
}
input.parentCheckbox::before
{
background-color:blue;
}
</style>
<body onload="initDialog('<%=callurl %>','')">
<div id="nd_navi_top" > <!-- 202606 entfernt style="margin-top:-55px"-->
<nav class="navbar-dialogue is-fixed-top" role="navigation" aria-label="navigation">
<div class="navbar-brand">
<div class="navbar-item">
<p class="title is-4">Auswahl <%=fname %></p>
</div>
@ -378,23 +523,16 @@ function ndSichtEintraegeSuchen(was) {
@@ -378,23 +523,16 @@ function ndSichtEintraegeSuchen(was) {
</div>
<div class="navbar-item is-hoverable">
<div class="buttons">
<p class="close_button">
<button class="button">
<span class="icon is-small">
<a onclick="window.close();">
<img src="../../images/close.svg" title="Schließen" aria-label="Schließen" /></a>
<span class="button is-grey" onclick="window.close()">
X
</span>
</button>
</p>
</div>
</div>
</span>
</div>
</nav>
<!--<div class="container"> doppelte scrollbalken verhindern-->
<form name="selection" onsubmit="return false;" style="margin:0px">
<form name="selection" onsubmit="return false;" style="margin:1 0px">
<div class="input-container">
<div class="field is-grouped is-grouped-multiline">
@ -406,12 +544,12 @@ function ndSichtEintraegeSuchen(was) {
@@ -406,12 +544,12 @@ function ndSichtEintraegeSuchen(was) {
</div>
</div>
<% if(zeilenanzahl!=null && !zeilenanzahl.equals("1"))
<% if(zeilenanzahl!=null && !zeilenanzahl.equals("1") &&1==0 )
{
%>
<div class="buttons">
<input type="checkbox" name="metaCheckox" value="" style="margin-left:1.5rem ;" onclick="ndMaskDialogToggleAllCheckboxes(document.forms['selection'],this)" />  alle markieren
<input type="checkbox" name="metaCheckox" value="" style="margin-left:20px ;" onclick="ndMaskDialogToggleAllCheckboxes(document.forms['selection'],this)" />  alle markieren
</div>
<hr />
<%