printJavaScripts();
print <<EOF;
</HEAD>
-<BODY>
-
+<BODY onload='reloadSpecTree();reloadSetTree();'>
+<div id="debug">
+debug text
+</div>
<div id="roterBereich">
-<input type="button" onClick="getdata('$me?print=spectree','roterBereich');" value="show spectree">
+<input type="button" onClick="getdata('$me?print=spectree','roterBereich',true);" value="show spectree">
</div>
<div id="blauerBereich">
-<input type="button" onClick="getdata('$me?print=settree','blauerBereich');" value="show settree">
+<input type="button" onClick="getdata('$me?print=settree','blauerBereich',true);" value="show settree">
+</div>
+<div id="blaharea">
+<input type="button" onClick='hashtest()' value="function">
</div>
-
if (!keys %cgiHash) { # if script is called without arguments: initialize the html structure
- initPage();
- exit;
+initPage();
+exit;
}
}
+if (defined $cgiHash{'debuginput'}) {
+print $cgiHash{'debuginput'};
+}
+
+if (defined $cgiHash{'action'} ) {
+
+ printHash(\%cgiHash);
+ if($cgiHash{'action'} eq 'save') {
+ save($cgiHash{'file'},$cgiHash{'register'},$cgiHash{'field'},$cgiHash{'value'});
+ }
+ if($cgiHash{'action'} eq 'delete'){
+ del($cgiHash{'file'},$cgiHash{'register'},$cgiHash{'field'});
+ }
+ if($cgiHash{'action'} eq 'copyDefaultRegister'){
+ del($setfile,$cgiHash{'register'},""); # delete existing register from setfile
+ copyDefaultRegister($cgiHash{'register'});
+ }
+}
+
+
+
+#################### SUBLAND ######################
+sub del {
+ my $registerName=$_[1];
+ my $fieldName=$_[2];
+ my $xmlfile = $_[0];
+ my $xmltree = $parser->parse_file($xmlfile);
+ my $maps = $xmltree->findnodes("/MAPS")->shift();
+ my $register = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']")->shift();
+ if ($fieldName eq "") { # no field specified, remove whole register
+ unless($register eq ""){
+ $maps->removeChild($register);
+ }
+ print "deleted whole register";
+ } else {
+ my $field = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']")->shift();
+ $register->removeChild($field);
+ print "deleted field<br>";
+ unless( $register->hasChildNodes()){
+ $maps->removeChild($register);
+ print "deleted register as well<br>";
+ }
+ }
+ open(SCHREIBEN,"> $xmlfile")
+ or print "could not open file $xmlfile for writing: $!\n";
+print SCHREIBEN $xmltree->toString();
+close SCHREIBEN;
+}
-#################### SUBLAND ######################
+
+sub save {
+
+ my $registerName=$_[1];
+ my $fieldName=$_[2];
+ my $xmlfile = $_[0];
+ my $newValue = $_[3];
+ my $xmltree = $parser->parse_file($xmlfile);
+ my $maps = $xmltree->findnodes("/MAPS")->shift();
+ #my @fields = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']");
+ my $register = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']")->shift();
+
+ if($register eq ""){
+ $register = $maps->addNewChild("","register");
+ $register->setAttribute("name",$registerName);
+ }
+
+
+ my $field = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']")->shift();
+
+ if($field eq ""){
+ $field = $register->addNewChild( "","field" );
+ $field->setAttribute( "name", $fieldName );
+
+ }
+ #my $fieldValue = ($xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']/\@name='value'"))[0];
+ #print $fieldValue->findvalue("./");
+ $field->setAttribute( "value", $newValue );
+ print $field->findvalue("./\@value");
+ open(SCHREIBEN,"> $xmlfile")
+ or print "could not open file $xmlfile for writing: $!\n";
+
+print SCHREIBEN $xmltree->toString();
+close SCHREIBEN;
+}
+
+sub copyDefaultRegister {
+ my $registerName=$_[0];
+ my $settree = $parser->parse_file($setfile);
+ my $spectree = $parser->parse_file($specfile);
+ my $setmaps = $settree->findnodes("/MAPS")->shift();
+ my $specmaps = $spectree->findnodes("/MAPS")->shift();
+
+ my $specRegister = $spectree->findnodes("/MAPS/register[\@name='".$registerName."']")->shift();
+
+ my $setRegister = $setmaps->addNewChild("","register");
+ $setRegister->setAttribute("name",$registerName);
+
+ my @specFields = $specRegister->findnodes("./field");
+
+ for my $specField (@specFields){
+ my $fieldName = $specField->findvalue("./\@name");
+ my $fieldValue = $specField->findvalue("./\@defaultValue");
+ my $setField = $setRegister->addNewChild( "","field" );
+ $setField->setAttribute( "name", $fieldName );
+ $setField->setAttribute( "value", $fieldValue );
+ print $setField->findvalue("./\@value");
+ }
+ open(SCHREIBEN,"> $setfile")
+ or print "could not open file $setfile for writing: $!\n";
+
+print SCHREIBEN $settree->toString();
+close SCHREIBEN;
+}
+
+sub by_name {
+ my $a_name= $a->findvalue("./\@name") ;
+ my $b_name= $b->findvalue("./\@name") ;
+
+ # putting $b_published in front will ensure the descending order.
+ return $a_name cmp $b_name;
+}
+
+sub printHash {
+ my $hashref=$_[0];
+ for my $element( keys %{$hashref}){
+ print $element."=".$hashref->{$element}."<br>\n";
+ }
+}
sub print_registers {
my $xmlfile = $_[0];
my $xmltree = $parser->parse_file($xmlfile);
-my @registers = $xmltree->findnodes("/MAPS/register");
+my @registers = sort by_name $xmltree->findnodes("/MAPS/register");
print "<table>";
-for my $register ( @registers ){
+for my $register (@registers ){
my $registerName = $register->findvalue("./\@name");
my $registerId = $register->findvalue("./\@id");
my $registerSize = $register->findvalue("./\@size");
- my $flistid = $xmlfile.$registerName;
+ my $flistid = $xmlfile."//".$registerName;
- print "<tr>";
+ print "<tr bgcolor='lightgrey'>";
print <<EOF;
-<td onClick='toggleVis("$flistid")' bgcolor="lightgrey">+</td>
+<td onClick='toggleVis("$flistid")' bgcolor="lightgrey"> + </td>
EOF
print "<td>$registerName</td>";
#print "<td>$registerId</td>";
+ if($xmlfile eq $setfile){
+ print <<EOF;
+<td bgcolor="orange" onclick='deleteSettings("$setfile","$registerName","");'> X </td>
+EOF
+ }
+ if($xmlfile eq $specfile){
+ print <<EOF;
+<td bgcolor="orange" onclick='copyDefaultRegister("$registerName");'> >> </td>
+EOF
+ }
print "</tr>";
#print "<tr>";
print '<td>';
print_fields($xmlfile,$register);
print "</td>";
+ print "<td bgcolor='#dea'></td>";
print "</tr>";
}
print "</table>";
my $register = $_[1];
my $xmlfile = $_[0];
my $registerName = $register->findvalue("./\@name");
- my @fields = $register->findnodes("./field");
+ my @fields = sort by_name $register->findnodes("./field");
print "<table>";
for my $field (@fields){
my $fieldName = $field->findvalue("./\@name");
print "<tr>";
print "<td width=120>$fieldName</td>";
- print "<td> = </td>";
+ print "<td> = </td>";
if ($readOnlyFlag){
print <<EOF;
<td width=120 bgcolor='white' align='right'>$fieldValue</td>
} else {
print <<EOF;
<td align='right'>
-<input type='text' align='right' value='$fieldValue' onchange='alert("$fieldId")' >
+<input type='text' align='right' value='$fieldValue' onchange='saveSettings("$xmlfile","$registerName","$fieldName",this.value)' >
</td>
EOF
- #print '<td id="SaveBtn'.$fieldId.'" style="visibility:visible">';
- #print <<EOF;
- #<input type="button" value="save">
-#EOF
- print '</td>';
+
}
+ print '</td>';
+ if($xmlfile eq $specfile){
+ print <<EOF;
+<td bgcolor="orange" onclick='saveSettings("$setfile","$registerName","$fieldName","$fieldValue");'> >> </td>
+EOF
+ }
+ if($xmlfile eq $setfile){
+ print <<EOF;
+<td bgcolor="orange" onclick='deleteSettings("$setfile","$registerName","$fieldName");'> X </td>
+EOF
+ }
print "</tr>";
}
print "</table>";
print <<EOF ;
<script language="javascript">
+
+var visHash= new Object();
+
+
+function reloadSpecTree(){
+getdata('$me?print=spectree','roterBereich',false);
+for (var key in visHash) {
+if(visHash[key]==true){
+showElement(key);
+}
+}
+}
+
+function reloadSetTree(){
+getdata('$me?print=settree','blauerBereich',false);
+for (var key in visHash) {
+if(visHash[key]==true){
+showElement(key);
+}
+}
+}
+
+function saveSettings(file,register,field,value){
+//getdata("$me?debuginput=tralla","debug");
+var file_ = encodeURIComponent(file);
+var register_ = encodeURIComponent(register);
+var field_ = encodeURIComponent(field);
+var value_ = encodeURIComponent(value);
+
+getdata("$me?action=save&file="+file_+"®ister="+register_+"&field="+field_+"&value="+value_,"debug",false);
+//getdata("$me?print=settree","blauerBereich",true);
+reloadSetTree();
+}
+
+function deleteSettings(file,register,field){
+//getdata("$me?debuginput=tralla","debug");
+var file_ = encodeURIComponent(file);
+var register_ = encodeURIComponent(register);
+var field_ = encodeURIComponent(field);
+
+getdata("$me?action=delete&file="+file_+"®ister="+register_+"&field="+field_,"debug",false);
+//getdata("$me?print=settree","blauerBereich",true);
+reloadSetTree();
+}
+
+function copyDefaultRegister(register){
+var register_ = encodeURIComponent(register);
+getdata("$me?action=copyDefaultRegister®ister="+register_,"debug",false);
+//getdata("$me?print=settree","blauerBereich",true);
+reloadSetTree();
+}
+
+function debugOutput(input){
+getdata("$me?debuginput="+encodeURIComponent(input),"debug",true);
+}
+
+function writeToElementId(input,destId){
+ if(document.getElementById(destId).innerHTML){
+ document.getElementById(destId).innerHTML = input;
+ }
+
+}
+
+
function toggleVis(elementId) {
if( document.getElementById(elementId).style.visibility == "visible") {
document.getElementById(elementId).style.visibility = "collapse";
+ visHash[elementId]=false;
} else {
document.getElementById(elementId).style.visibility = "visible" ;
+ visHash[elementId]=true;
}
}
function showElement(elementId) {
document.getElementById(elementId).style.visibility = "visible" ;
+ visHash[elementId]=true;
}
function hideElement(elementId) {
document.getElementById(elementId).style.visibility = "hidden" ;
+ visHash[elementId]=false;
}
function collapseElement(elementId) {
document.getElementById(elementId).style.visibility = "collapse" ;
+ visHash[elementId]=false;
}
</script>
<script language="javascript">
-function getdata(command,destId) {
+function getdata(command,dId,async) {
var xmlhttp = null;
//var cb = null;
xmlhttp=new XMLHttpRequest();
//cb = callback;
- //var destId = dId;
+ var destId = dId;
xmlhttp.onreadystatechange = function() {
- if(xmlhttp.readyState == 4) {
+ if(xmlhttp.readyState == 4 && xmlhttp.status==200) {
//if(cb)
if(document.getElementById(destId).innerHTML){
document.getElementById(destId).innerHTML = xmlhttp.responseText;
//document.getElementById(destId).innerHTML = xmlhttp.responseText;
}
}
- xmlhttp.open("GET",command,true);
+
+ xmlhttp.open("GET",command,async);
xmlhttp.send(null);
}
</script>