/*##############################################################################
# HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################## */
var command;
var component;
var xmlDoc;
var schemaNode;
var objNode;
var bAdd;
function onLoad()
{
var form = document.forms[0];
component = form.component.value;
command = form.command.value;
schemaNode = xmlSchema.documentElement.selectSingleNode('//Arguments');
if (schemaNode == null)
{
alert('No arguments node found in XML schema!');
return;
}
var prevArgsDoc = document.all.xmlPrevArgsDoc;
if (prevArgsDoc != undefined && prevArgsDoc != null)
{
xmlDoc = prevArgsDoc;
objNode = prevArgsDoc.documentElement;
if (objNode == null)
{
bAdd = true;
objNode = xmlDoc.createElement('Arguments');
xmlDoc.documentElement.appendChild(objNode);
}
else
{
bAdd = false;
initializeHtmlObjects(objNode, schemaNode);
}
}
else
{
bAdd = true;
//create xml fragment that would be passed to any child dialogs for them to fill in
//and is sent back as hidden input field 'xmlArgs'
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML('');
objNode = xmlDoc.documentElement.selectSingleNode('//Arguments');
}
}
function onSubmit()
{
/*
if (bAdd)
{
//add immediate children to our data island. Note that nested data is updated
//as a result of add/delete handlers
//
if (!addImmediateChildrenFromHtmlObjects(schemaNode, objNode, xmlDoc))
return false;
}
else
replaceImmediateChildrenFromHtmlObjects(objNode. schemaNode);
//update the value of our hidden HTML control that gets sent back with the submission
//
document.forms[0].xmlArgs.value = xmlDoc.xml;
alert(xmlDoc.xml);
*/
//alert(document.forms[0].outerHTML);
return true;
}
function initializeHtmlObjects(objNode, schemaNode)
{
for (var childSchemaNode = schemaNode.firstChild;
childSchemaNode != null;
childSchemaNode = childSchemaNode.nextSibling)
{
var name = childSchemaNode.nodeName;
var maxOccursAttr = childSchemaNode.attributes.getNamedItem('maxOccurs');
var maxOccurs = maxOccursAttr ? maxOccursAttr.nodeValue : null;
if (maxOccurs == "unbounded")
{
var argsTableObj = document.all.ArgumentsTable;
var tableObj = argsTableObj.all[name];
var targetNodes = objNode.selectNodes(name);
//append rows in table
var nNodes = targetNodes.length;
var rowId = tableObj.rows.length;
for (var i=0; i ';
}
for (var childSchemaNode = schemaNode.firstChild;
childSchemaNode != null;
childSchemaNode = childSchemaNode.nextSibling)
{
var targetNode = domNode.selectSingleNode(childSchemaNode.nodeName);
if (targetNode == null)
{
targetNode = xmlDoc.createElement(childSchemaNode.nodeName);
domNode.appendChild(targetNode);
}
insertCellsInRow(row, targetNode, childSchemaNode, strXPath + '.' + tableObj.lastRowIndex);
}
return row;
}
function updateItemList(tableObj, addItem, delItem)
{
var id = tableObj.id + ".itemlist";
var itemListInput = document.forms[0].all[id];
if (itemListInput == null)
{
itemListInput = document.createElement("input");
itemListInput.type = "hidden";
itemListInput.id = id;
itemListInput.name = id;
itemListInput.value = "+";
document.forms[0].appendChild( itemListInput );
}
if (addItem)
itemListInput.value += addItem + '+';
else
{
var list = itemListInput.value;
var begin = list.indexOf('+' + delItem + '+');
if (begin == -1)
alert("Item list management error!");
begin++;
var end = list.indexOf('+', begin);
if (end == -1)
alert("Item list management error!");
itemListInput.value = list.substring(0, begin) + list.substring(end+1);
}
}
function insertCellsInRow(row, targetNode, schemaNode, strXPath)
{
var maxOccursAttr = schemaNode.attributes.getNamedItem('maxOccurs');
var maxOccurs = maxOccursAttr ? maxOccursAttr.nodeValue : null;
if (maxOccurs == "unbounded")
{
var targetNodes = domNode.selectNodes(childSchemaNode.nodeName);
if (targetNodes != null && targetNodes.length > 0)
{
var tableObj = createTable(targetNodes, childSchemaNode);
cell.appendChild(tableObj);
}
}
else
if (maxOccurs == "1" && schemaNode.selectNodes("*"))
{
var xpath = strXPath + '.' + schemaNode.nodeName;
for (var childSchemaNode = schemaNode.firstChild;
childSchemaNode != null;
childSchemaNode = childSchemaNode.nextSibling)
{
var name = childSchemaNode.nodeName;
var targetNode2 = targetNode.selectSingleNode(name);
if (targetNode2 == null)
{
targetNode2 = xmlDoc.createElement(name);
targetNode.appendChild(targetNode2);
}
insertCellsInRow(row, targetNode2, childSchemaNode, xpath);
}
}
else
{
//create an HTML object corresponding to this element
//
var cell = row.insertCell();
var input = createInputControlForNode(cell, strXPath, targetNode, schemaNode);
cell.appendChild(input);
}
}
function createInputControlForNode(cell, idPrefix, node, schemaNode)
{
var id = node.nodeName;
var dataTypeAttr = schemaNode.attributes.getNamedItem('dataType');
var dataType = dataTypeAttr ? dataTypeAttr.nodeValue : null;
var value = node.text;
if (value == null)
{
var defaultAttr = schemaNode.attributes.getNamedItem('default');
value = defaultAttr ? defaultAttr.nodeValue : "";
}
var type;
var checked = false;
if (dataType == "boolean")
{
type = "checkbox";
//debugger;
if (value == "1" || value == "yes" || value=="true")
{
checked = true;
value = "1";
}
else
value = "0";
}
else
{
type = "text";
value = value;
}
var input = document.createElement("input");
input.name = idPrefix + '.' + id;
input.type = type;
input.value = value;
if (type == "checkbox")
{
if (checked)
input.checked = "true";
input.onclick=function(){this.value=1-this.value;};
}
else
input.width=cell.clientWidth ? cell.clientWidth-2 : 70;
return input;
}
function deleteRowFromTable(rowId, domNode)
{
var argsTableObj = document.all.ArgumentsTable;
var tableName = domNode.nodeName;
var tableObj = argsTableObj.all[tableName];
var id = tableObj.rows[rowId].id;
var pos = id.lastIndexOf('.');
if (pos == -1)
alert('Invalid row id!');
updateItemList(tableObj, null, id.substring(pos+1));
tableObj.deleteRow(rowId);
}
function onAdd(nodeSetName)
{
//if (!addImmediateChildrenFromHtmlObjects(schemaNode, objNode, xmlDoc))
// return;
updateNestedData("add", nodeSetName, -1);
//alert(document.all.ArgumentsTable.outerHTML);
}
function onDelete(nodeSetName)
{
var nSelectedRow = getCheckedBoxWithId(nodeSetName+".checkbox");
updateNestedData("delete", nodeSetName, nSelectedRow);
}
function onCheck(cb)
{
//the user checked on one so we have at least one checkbox
//However, we may have only that checkbox and length is 0 in that case
checkBoxes = document.forms[0].all[ cb.id ];
//if we have only one checkbox then length is undefined in that case
if (checkBoxes.length != undefined)
{
//uncheck any previously selected checkbox
var nCheckBoxes = checkBoxes.length;
for (var i=0; i