477 lines
16 KiB
JavaScript
477 lines
16 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.XmlProcessor = exports.DomParserProvider = exports.Utils = void 0;
|
||
|
const osfmos_1 = require("../lib/osfmos");
|
||
|
const xmldom_1 = require("@xmldom/xmldom");
|
||
|
var Utils;
|
||
|
(function (Utils) {
|
||
|
function validateParams(params, expectedParams, ParameterCount) {
|
||
|
var e, expectedLength = expectedParams.length;
|
||
|
ParameterCount = ParameterCount || (typeof (ParameterCount) === "undefined");
|
||
|
e = validateParameterCount(params, expectedParams, ParameterCount);
|
||
|
if (e) {
|
||
|
return e;
|
||
|
}
|
||
|
for (var i = 0, l = params.length; i < l; i++) {
|
||
|
var expectedParam = expectedParams[Math.min(i, expectedLength - 1)], paramName = expectedParam.name;
|
||
|
if (expectedParam.parameterArray) {
|
||
|
paramName += "[" + (i - expectedLength + 1) + "]";
|
||
|
}
|
||
|
else if (!ParameterCount && (i >= expectedLength)) {
|
||
|
break;
|
||
|
}
|
||
|
e = validateParameter(params[i], expectedParam, paramName);
|
||
|
if (e) {
|
||
|
e.popStackFrame();
|
||
|
return e;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
Utils.validateParams = validateParams;
|
||
|
function validateParameter(param, expectedParam, paramName) {
|
||
|
var e, expectedType = expectedParam.type, expectedInteger = !!expectedParam.integer, expectedDomElement = !!expectedParam.domElement, mayBeNull = !!expectedParam.mayBeNull;
|
||
|
e = validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName);
|
||
|
if (e) {
|
||
|
e.popStackFrame();
|
||
|
return e;
|
||
|
}
|
||
|
var expectedElementType = expectedParam.elementType, elementMayBeNull = !!expectedParam.elementMayBeNull;
|
||
|
if (expectedType === Array && typeof (param) !== "undefined" && param !== null &&
|
||
|
(expectedElementType || !elementMayBeNull)) {
|
||
|
var expectedElementInteger = !!expectedParam.elementInteger, expectedElementDomElement = !!expectedParam.elementDomElement;
|
||
|
for (var i = 0; i < param.length; i++) {
|
||
|
var elem = param[i];
|
||
|
e = validateParameterType(elem, expectedElementType, expectedElementInteger, expectedElementDomElement, elementMayBeNull, paramName + "[" + i + "]");
|
||
|
if (e) {
|
||
|
e.popStackFrame();
|
||
|
return e;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
Utils.validateParameter = validateParameter;
|
||
|
;
|
||
|
function validateParameterCount(params, expectedParams, validateParameterCount) {
|
||
|
var i, error, expectedLen = expectedParams.length, actualLen = params.length;
|
||
|
if (actualLen < expectedLen) {
|
||
|
var minParams = expectedLen;
|
||
|
for (i = 0; i < expectedLen; i++) {
|
||
|
var param = expectedParams[i];
|
||
|
if (param.optional || param.parameterArray) {
|
||
|
minParams--;
|
||
|
}
|
||
|
}
|
||
|
if (actualLen < minParams) {
|
||
|
error = true;
|
||
|
}
|
||
|
}
|
||
|
else if (validateParameterCount && (actualLen > expectedLen)) {
|
||
|
error = true;
|
||
|
for (i = 0; i < expectedLen; i++) {
|
||
|
if (expectedParams[i].parameterArray) {
|
||
|
error = false;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (error) {
|
||
|
var e = osfmos_1.OfficeExt.MsAjaxError.parameterCount();
|
||
|
return e;
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
Utils.validateParameterCount = validateParameterCount;
|
||
|
function validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName) {
|
||
|
var e, i;
|
||
|
if (typeof (param) === "undefined") {
|
||
|
if (mayBeNull) {
|
||
|
return null;
|
||
|
}
|
||
|
else {
|
||
|
e = osfmos_1.OfficeExt.MsAjaxError.argumentUndefined(paramName);
|
||
|
e.popStackFrame();
|
||
|
return e;
|
||
|
}
|
||
|
}
|
||
|
if (param === null) {
|
||
|
if (mayBeNull) {
|
||
|
return null;
|
||
|
}
|
||
|
else {
|
||
|
e = osfmos_1.OfficeExt.MsAjaxError.argumentNull(paramName);
|
||
|
e.popStackFrame();
|
||
|
return e;
|
||
|
}
|
||
|
}
|
||
|
if (expectedType && !osfmos_1.OfficeExt.MsAjaxTypeHelper.isInstanceOfType(expectedType, param)) {
|
||
|
e = osfmos_1.OfficeExt.MsAjaxError.argumentType(paramName, typeof (param), expectedType);
|
||
|
e.popStackFrame();
|
||
|
return e;
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
Utils.validateParameterType = validateParameterType;
|
||
|
function getDomainForUrl(url) {
|
||
|
if (!url) {
|
||
|
return null;
|
||
|
}
|
||
|
var urlObject = osfmos_1.OSF.OUtil.parseUrl(url, true);
|
||
|
return urlObject.protocol + "//" + urlObject.host;
|
||
|
}
|
||
|
Utils.getDomainForUrl = getDomainForUrl;
|
||
|
function OverrideMethods() {
|
||
|
osfmos_1.OSF.XmlProcessor = XmlProcessor;
|
||
|
osfmos_1.OfficeExt.WACUtils.getDomainForUrl = Utils.getDomainForUrl;
|
||
|
}
|
||
|
Utils.OverrideMethods = OverrideMethods;
|
||
|
})(Utils || (exports.Utils = Utils = {}));
|
||
|
class DomParserProvider {
|
||
|
constructor(xml, xmlNamespaces) {
|
||
|
try {
|
||
|
this._xmldoc = new xmldom_1.DOMParser({}).parseFromString(xml, "text/xml");
|
||
|
}
|
||
|
catch (ex) {
|
||
|
console.trace("xml doc creating error:" + ex);
|
||
|
}
|
||
|
this._namespaceMapping = {};
|
||
|
this._defaultNamespace = null;
|
||
|
var namespaces = xmlNamespaces.split(' ');
|
||
|
var matches;
|
||
|
for (var i = 0; i < namespaces.length; ++i) {
|
||
|
matches = /xmlns="([^"]*)"/g.exec(namespaces[i]);
|
||
|
if (matches) {
|
||
|
this._defaultNamespace = matches[1];
|
||
|
continue;
|
||
|
}
|
||
|
matches = /xmlns:([^=]*)="([^"]*)"/g.exec(namespaces[i]);
|
||
|
if (matches) {
|
||
|
this._namespaceMapping[matches[1]] = matches[2];
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
addNamespaceMapping(namespacePrefix, namespaceUri) {
|
||
|
var ns = this._namespaceMapping[namespacePrefix];
|
||
|
if (ns) {
|
||
|
return false;
|
||
|
}
|
||
|
else {
|
||
|
this._namespaceMapping[namespacePrefix] = namespaceUri;
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
getNamespaceMapping() {
|
||
|
return this._namespaceMapping;
|
||
|
}
|
||
|
selectSingleNode(name, contextNode) {
|
||
|
var selectedNode = contextNode || this._xmldoc;
|
||
|
var nodes = this._selectNodes(name, selectedNode);
|
||
|
if (nodes.length === 0)
|
||
|
return null;
|
||
|
return nodes[0];
|
||
|
}
|
||
|
selectNodes(name, contextNode) {
|
||
|
var selectedNode = contextNode || this._xmldoc;
|
||
|
return this._selectNodes(name, selectedNode);
|
||
|
}
|
||
|
selectNodesByXPath(xpath, contextNode) {
|
||
|
return null;
|
||
|
}
|
||
|
_selectNodes(name, contextNode) {
|
||
|
var nodes = [];
|
||
|
if (!name)
|
||
|
return nodes;
|
||
|
var nameInfo = name.split(":");
|
||
|
var ns, nodeName;
|
||
|
if (nameInfo.length === 1) {
|
||
|
ns = null;
|
||
|
nodeName = nameInfo[0];
|
||
|
}
|
||
|
else if (nameInfo.length === 2) {
|
||
|
ns = this._namespaceMapping[nameInfo[0]];
|
||
|
nodeName = nameInfo[1];
|
||
|
}
|
||
|
else {
|
||
|
throw osfmos_1.OfficeExt.MsAjaxError.argument("name");
|
||
|
}
|
||
|
if (!contextNode.hasChildNodes)
|
||
|
return nodes;
|
||
|
var childs = contextNode.childNodes;
|
||
|
for (var i = 0; i < childs.length; i++) {
|
||
|
if (nodeName === this._removeNodePrefix(childs[i].nodeName) && (ns === childs[i].namespaceURI)) {
|
||
|
nodes.push(childs[i]);
|
||
|
}
|
||
|
}
|
||
|
return nodes;
|
||
|
}
|
||
|
_removeNodePrefix(nodeName) {
|
||
|
if (!nodeName)
|
||
|
return null;
|
||
|
var nodeInfo = nodeName.split(':');
|
||
|
if (nodeInfo.length === 1) {
|
||
|
return nodeName;
|
||
|
}
|
||
|
else {
|
||
|
return nodeInfo[1];
|
||
|
}
|
||
|
}
|
||
|
getDocumentElement() {
|
||
|
return this._xmldoc.documentElement;
|
||
|
}
|
||
|
}
|
||
|
exports.DomParserProvider = DomParserProvider;
|
||
|
class XmlProcessor {
|
||
|
constructor(xml, xmlNamespaces) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "xml", type: String, mayBeNull: false },
|
||
|
{ name: "xmlNamespaces", type: String, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
this._provider = new DomParserProvider(xml, xmlNamespaces);
|
||
|
}
|
||
|
addNamespaceMapping(namespacePrefix, namespaceUri) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "namespacePrefix", type: String, mayBeNull: false },
|
||
|
{ name: "namespaceUri", type: String, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
return this._provider.addNamespaceMapping(namespacePrefix, namespaceUri);
|
||
|
}
|
||
|
getNamespaceMapping() {
|
||
|
var _a;
|
||
|
return (_a = this._provider) === null || _a === void 0 ? void 0 : _a.getNamespaceMapping();
|
||
|
}
|
||
|
selectSingleNode(name, contextNode) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "name", type: String, mayBeNull: false },
|
||
|
{ name: "contextNode", mayBeNull: true, optional: true }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
return this._provider.selectSingleNode(name, contextNode);
|
||
|
}
|
||
|
selectNodes(name, contextNode) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "name", type: String, mayBeNull: false },
|
||
|
{ name: "contextNode", mayBeNull: true, optional: true }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
return this._provider.selectNodes(name, contextNode);
|
||
|
}
|
||
|
selectNodesByXPath(xpath, contextNode) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "xpath", type: String, mayBeNull: false },
|
||
|
{ name: "contextNode", mayBeNull: true, optional: true }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
contextNode = contextNode || this._provider.getDocumentElement();
|
||
|
return this._provider.selectNodesByXPath(xpath, contextNode);
|
||
|
}
|
||
|
getDocumentElement() {
|
||
|
return this._provider.getDocumentElement();
|
||
|
}
|
||
|
getNodeValue(node) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
var nodeValue;
|
||
|
if (node.text) {
|
||
|
nodeValue = node.text;
|
||
|
}
|
||
|
else {
|
||
|
nodeValue = node.textContent;
|
||
|
}
|
||
|
return nodeValue;
|
||
|
}
|
||
|
getNodeText(node) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
if (this.getNodeType(node) == 9) {
|
||
|
return this.getNodeText(this.getDocumentElement());
|
||
|
}
|
||
|
var nodeText;
|
||
|
if (node.text) {
|
||
|
nodeText = node.text;
|
||
|
}
|
||
|
else {
|
||
|
nodeText = node.textContent;
|
||
|
}
|
||
|
return nodeText;
|
||
|
}
|
||
|
setNodeText(node, text) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false },
|
||
|
{ name: "text", type: String, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
if (this.getNodeType(node) == 9) {
|
||
|
return false;
|
||
|
}
|
||
|
try {
|
||
|
if (node.text) {
|
||
|
node.text = text;
|
||
|
}
|
||
|
else {
|
||
|
node.textContent = text;
|
||
|
}
|
||
|
}
|
||
|
catch (ex) {
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
getNodeXml(node) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
var nodeXml;
|
||
|
if (node.xml) {
|
||
|
nodeXml = node.xml;
|
||
|
}
|
||
|
else {
|
||
|
nodeXml = new XMLSerializer().serializeToString(node);
|
||
|
if (this.getNodeType(node) == 2) {
|
||
|
nodeXml = this.getNodeBaseName(node) + "=\"" + nodeXml + "\"";
|
||
|
}
|
||
|
}
|
||
|
return nodeXml;
|
||
|
}
|
||
|
setNodeXml(node, xml) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false },
|
||
|
{ name: "xml", type: String, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
var processor = new osfmos_1.OSF.XmlProcessor(xml, "");
|
||
|
if (!processor.isValidXml()) {
|
||
|
return null;
|
||
|
}
|
||
|
var newNode = processor.getDocumentElement();
|
||
|
try {
|
||
|
node.parentNode.replaceChild(newNode, node);
|
||
|
}
|
||
|
catch (ex) {
|
||
|
return null;
|
||
|
}
|
||
|
return newNode;
|
||
|
}
|
||
|
getNodeNamespaceURI(node) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
return node.namespaceURI;
|
||
|
}
|
||
|
getNodePrefix(node) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
return node.prefix;
|
||
|
}
|
||
|
getNodeBaseName(node) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
var nodeBaseName;
|
||
|
if (node.nodeType && (node.nodeType == 1 || node.nodeType == 2)) {
|
||
|
if (node.baseName) {
|
||
|
nodeBaseName = node.baseName;
|
||
|
}
|
||
|
else {
|
||
|
nodeBaseName = node.localName;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
nodeBaseName = node.nodeName;
|
||
|
}
|
||
|
return nodeBaseName;
|
||
|
}
|
||
|
getNodeType(node) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
return node.nodeType;
|
||
|
}
|
||
|
appendChild(node, childXml) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false },
|
||
|
{ name: "childXml", type: String, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
var processor = new osfmos_1.OSF.XmlProcessor(childXml, "");
|
||
|
if (!processor.isValidXml()) {
|
||
|
return null;
|
||
|
}
|
||
|
var childNode = processor.getDocumentElement();
|
||
|
node.appendChild(childNode);
|
||
|
return childNode;
|
||
|
}
|
||
|
_getAttributeLocalName(attribute) {
|
||
|
var localName;
|
||
|
if (attribute.localName) {
|
||
|
localName = attribute.localName;
|
||
|
}
|
||
|
else {
|
||
|
localName = attribute.baseName;
|
||
|
}
|
||
|
return localName;
|
||
|
}
|
||
|
readAttributes(node, attributesToRead, objectToFill) {
|
||
|
var e = Utils.validateParams(arguments, [
|
||
|
{ name: "node", type: Object, mayBeNull: false },
|
||
|
{ name: "attributesToRead", type: Object, mayBeNull: false },
|
||
|
{ name: "objectToFill", type: Object, mayBeNull: false }
|
||
|
]);
|
||
|
if (e)
|
||
|
throw e;
|
||
|
var attribute;
|
||
|
var localName;
|
||
|
for (var i = 0; i < node.attributes.length; i++) {
|
||
|
attribute = node.attributes[i];
|
||
|
localName = this._getAttributeLocalName(attribute);
|
||
|
for (var p in attributesToRead) {
|
||
|
if (localName === p) {
|
||
|
objectToFill[attributesToRead[p]] = attribute.value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
isValidXml() {
|
||
|
var documentElement = this.getDocumentElement();
|
||
|
if (documentElement == null) {
|
||
|
return false;
|
||
|
}
|
||
|
else if (this._provider._xmldoc.getElementsByTagName("parsererror").length > 0) {
|
||
|
var parser = new xmldom_1.DOMParser();
|
||
|
var errorParse = parser.parseFromString('<', 'text/xml');
|
||
|
var parseErrorNS = errorParse.getElementsByTagName("parsererror")[0].namespaceURI;
|
||
|
return this._provider._xmldoc.getElementsByTagNameNS(parseErrorNS, 'parsererror').length <= 0;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
exports.XmlProcessor = XmlProcessor;
|
||
|
//# sourceMappingURL=osfUtils.js.map
|