/*############################################################################## # 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