UNPKG

angular-xml-editor

Version:
173 lines (172 loc) 18.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { XmlCursorPos, XMLCursorPositions } from '../cursor/xmlCursorPos.class'; import { Xml2html } from '../xml-html-converter/xml2html.class'; var XmlEditRuleCheckTextInsert = /** @class */ (function () { function XmlEditRuleCheckTextInsert(xsdNodes) { this.xsdNodes = xsdNodes; this.namespacePraefix = 'xs:'; } /** * @param {?} cursorPosToCheck * @return {?} */ XmlEditRuleCheckTextInsert.prototype.isTextAllowedAtThisCursorPos = /** * @param {?} cursorPosToCheck * @return {?} */ function (cursorPosToCheck) { if (!cursorPosToCheck) { return false; } /** @type {?} */ var parentNode = this.getRelevantParentNodeForCursorPos(cursorPosToCheck); /** @type {?} */ var parentName = Xml2html.getTagNameFromNode(parentNode); /** @type {?} */ var xsdNode = this.xsdNodes.get(parentName); if (xsdNode) { /** @type {?} */ var result = this.isTextAllowedInThisElement(xsdNode); return result; } else { return false; // element not found } }; /** * @param {?} cursorPosToCheck * @return {?} */ XmlEditRuleCheckTextInsert.prototype.getRelevantParentNodeForCursorPos = /** * @param {?} cursorPosToCheck * @return {?} */ function (cursorPosToCheck) { if (cursorPosToCheck) { /** @type {?} */ var parentNode = cursorPosToCheck.ActualNode; switch (parentNode.nodeType) { case Node.COMMENT_NODE: case Node.TEXT_NODE: parentNode = parentNode.parentElement; break; case Node.ELEMENT_NODE: switch (cursorPosToCheck.PosAtNode) { case XMLCursorPositions.CursorInEmptyNode: case XMLCursorPositions.CursorInsideTextNode: break; case XMLCursorPositions.CursorBehindNode: case XMLCursorPositions.CursorInFrontOfNode: case XMLCursorPositions.CursorOnCompleteNode: parentNode = parentNode.parentElement; break; default: throw new Error("unhandled cursorPosToCheck.PosAmNode \"" + cursorPosToCheck.PosAtNode + "\"/" + XmlCursorPos.getXmlCursorPositionDebugName(cursorPosToCheck.PosAtNode) + "\" "); } break; default: throw new Error("unhandled parentNode.nodeType \"" + parentNode.nodeType + "\""); } return parentNode; } }; /** * @param {?} xsdNode * @param {?=} alreadyAddedElementNames * @return {?} */ XmlEditRuleCheckTextInsert.prototype.isTextAllowedInThisElement = /** * @param {?} xsdNode * @param {?=} alreadyAddedElementNames * @return {?} */ function (xsdNode, alreadyAddedElementNames) { var _this = this; if (alreadyAddedElementNames === void 0) { alreadyAddedElementNames = new Set(); } /** @type {?} */ var elementName; if (xsdNode.nodeType === Node.ELEMENT_NODE) { /** @type {?} */ var asElem = /** @type {?} */ (xsdNode); if (asElem) { /** @type {?} */ var mixedAttrib = asElem.getAttribute('mixed'); if (mixedAttrib) { return true; } /** @type {?} */ var typeAttrib = asElem.getAttribute('type'); if (typeAttrib && typeAttrib === this.namespacePraefix + "string") { return true; } if (asElem.localName === 'element') { elementName = asElem.getAttribute('name'); if (elementName) { if (alreadyAddedElementNames.has(elementName)) { return false; // element recursion detected } } alreadyAddedElementNames.add(elementName); } } } /** @type {?} */ var childNodes = /** @type {?} */ (Array.prototype.slice.call(xsdNode.childNodes)); /** @type {?} */ var allowed = false; childNodes.forEach(function (child) { if (child.nodeType === Node.ELEMENT_NODE) { /** @type {?} */ var childElem = /** @type {?} */ (child); if (childElem) { switch (childElem.localName) { case 'complexType': case 'sequence': case 'choice': case 'simpleContent': case 'extension': if (_this.isTextAllowedInThisElement(child, alreadyAddedElementNames) === true) { allowed = true; break; } break; case 'element': /** @type {?} */ var refname = childElem.attributes.getNamedItem('ref'); if (refname) { /** @type {?} */ var referedNode = _this.xsdNodes.get(refname.value); if (referedNode) { if (_this.isTextAllowedInThisElement(referedNode, alreadyAddedElementNames) === true) { allowed = true; break; } } else { throw new Error(" refered element \"" + refname + "\" for element \"" + childElem.outerHTML + "\" not found"); } } break; case 'attribute': break; default: alert('unknown childElem.localname "' + childElem.localName + '"/' + childElem.outerHTML); } } } }); return allowed; }; return XmlEditRuleCheckTextInsert; }()); export { XmlEditRuleCheckTextInsert }; if (false) { /** @type {?} */ XmlEditRuleCheckTextInsert.prototype.namespacePraefix; /** @type {?} */ XmlEditRuleCheckTextInsert.prototype.xsdNodes; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sRWRpdFJ1bGVDaGVja1RleHRJbnNlcnQuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXhtbC1lZGl0b3IvIiwic291cmNlcyI6WyJsaWIvY29kZS94bWwtcnVsZXMtY2hlY2sveG1sRWRpdFJ1bGVDaGVja1RleHRJbnNlcnQuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEUsSUFBQTtJQUdFLG9DQUFvQixRQUE4QjtRQUE5QixhQUFRLEdBQVIsUUFBUSxDQUFzQjtnQ0FGL0IsS0FBSztLQUU4Qjs7Ozs7SUFFdEQsaUVBQTRCOzs7O0lBQTVCLFVBQTZCLGdCQUE4QjtRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUM7U0FDZDs7UUFDRCxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs7UUFDNUUsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDOztRQUMzRCxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxJQUFJLE9BQU8sRUFBRTs7WUFDWCxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEQsT0FBTyxNQUFNLENBQUM7U0FDZjthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtLQUNGOzs7OztJQUVELHNFQUFpQzs7OztJQUFqQyxVQUFrQyxnQkFBOEI7UUFDOUQsSUFBSSxnQkFBZ0IsRUFBRTs7WUFDcEIsSUFBSSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO1lBRTdD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QkFDZCxJQUFJLEtBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsd0JBQXdCLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0NBQzdFLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0NBQ2YsTUFBTTs2QkFDUDs0QkFDRCxNQUFNO3dCQUVSLEtBQUssU0FBUzs7NEJBQ1osSUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ3pELElBQUksT0FBTyxFQUFFOztnQ0FDWCxJQUFNLFdBQVcsR0FBRyxLQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQ3JELElBQUksV0FBVyxFQUFFO29DQUNmLElBQUksS0FBSSxDQUFDLDBCQUEwQixDQUFDLFdBQVcsRUFBRSx3QkFBd0IsQ0FBQyxLQUFLLElBQUksRUFBRTt3Q0FDbkYsT0FBTyxHQUFHLElBQUksQ0FBQzt3Q0FDZixNQUFNO3FDQUNQO2lDQUNGO3FDQUFNO29DQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXFCLE9BQU8seUJBQWtCLFNBQVMsQ0FBQyxTQUFTLGlCQUFhLENBQUMsQ0FBQztpQ0FDakc7NkJBQ0Y7NEJBQ0QsTUFBTTt3QkFFUixLQUFLLFdBQVc7NEJBQ2QsTUFBTTt3QkFFUjs0QkFDRSxLQUFLLENBQUMsK0JBQStCLEdBQUcsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUM3RjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7S0FDaEI7cUNBbElIO0lBbUlDLENBQUE7QUFoSUQsc0NBZ0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWG1sQ3Vyc29yUG9zLCBYTUxDdXJzb3JQb3NpdGlvbnMgfSBmcm9tICcuLi9jdXJzb3IveG1sQ3Vyc29yUG9zLmNsYXNzJztcclxuaW1wb3J0IHsgWG1sMmh0bWwgfSBmcm9tICcuLi94bWwtaHRtbC1jb252ZXJ0ZXIveG1sMmh0bWwuY2xhc3MnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFhtbEVkaXRSdWxlQ2hlY2tUZXh0SW5zZXJ0IHtcclxuICBuYW1lc3BhY2VQcmFlZml4ID0gJ3hzOic7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgeHNkTm9kZXM6IE1hcDxzdHJpbmcsIEVsZW1lbnQ+KSB7fVxyXG5cclxuICBpc1RleHRBbGxvd2VkQXRUaGlzQ3Vyc29yUG9zKGN1cnNvclBvc1RvQ2hlY2s6IFhtbEN1cnNvclBvcyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjdXJzb3JQb3NUb0NoZWNrKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmdldFJlbGV2YW50UGFyZW50Tm9kZUZvckN1cnNvclBvcyhjdXJzb3JQb3NUb0NoZWNrKTtcclxuICAgIGNvbnN0IHBhcmVudE5hbWUgPSBYbWwyaHRtbC5nZXRUYWdOYW1lRnJvbU5vZGUocGFyZW50Tm9kZSk7XHJcbiAgICBjb25zdCB4c2ROb2RlID0gdGhpcy54c2ROb2Rlcy5nZXQocGFyZW50TmFtZSk7XHJcbiAgICBpZiAoeHNkTm9kZSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmlzVGV4dEFsbG93ZWRJblRoaXNFbGVtZW50KHhzZE5vZGUpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBlbGVtZW50IG5vdCBmb3VuZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVsZXZhbnRQYXJlbnROb2RlRm9yQ3Vyc29yUG9zKGN1cnNvclBvc1RvQ2hlY2s6IFhtbEN1cnNvclBvcyk6IE5vZGUge1xyXG4gICAgaWYgKGN1cnNvclBvc1RvQ2hlY2spIHtcclxuICAgICAgbGV0IHBhcmVudE5vZGUgPSBjdXJzb3JQb3NUb0NoZWNrLkFjdHVhbE5vZGU7XHJcblxyXG4gICAgICBzd2l0Y2ggKHBhcmVudE5vZGUubm9kZVR5cGUpIHtcclxuICAgICAgICBjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOlxyXG4gICAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XHJcbiAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XHJcbiAgICAgICAgICBzd2l0Y2ggKGN1cnNvclBvc1RvQ2hlY2suUG9zQXROb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluRW1wdHlOb2RlOlxyXG4gICAgICAgICAgICBjYXNlIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JJbnNpZGVUZXh0Tm9kZTpcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckJlaGluZE5vZGU6XHJcbiAgICAgICAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluRnJvbnRPZk5vZGU6XHJcbiAgICAgICAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvck9uQ29tcGxldGVOb2RlOlxyXG4gICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5oYW5kbGVkICBjdXJzb3JQb3NUb0NoZWNrLlBvc0FtTm9kZSBcIiR7Y3Vyc29yUG9zVG9DaGVjay5Qb3NBdE5vZGV9XCIvJHtYbWxDdXJzb3JQb3MuZ2V0WG1sQ3Vyc29yUG9zaXRpb25EZWJ1Z05hbWUoY3Vyc29yUG9zVG9DaGVjay5Qb3NBdE5vZGUpfVwiIGApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCAgcGFyZW50Tm9kZS5ub2RlVHlwZSBcIiR7cGFyZW50Tm9kZS5ub2RlVHlwZX1cImApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwYXJlbnROb2RlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNUZXh0QWxsb3dlZEluVGhpc0VsZW1lbnQoeHNkTm9kZTogTm9kZSwgYWxyZWFkeUFkZGVkRWxlbWVudE5hbWVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgZWxlbWVudE5hbWU6IHN0cmluZztcclxuXHJcbiAgICBpZiAoeHNkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcclxuICAgICAgY29uc3QgYXNFbGVtID0geHNkTm9kZSBhcyBFbGVtZW50O1xyXG4gICAgICBpZiAoYXNFbGVtKSB7XHJcbiAgICAgICAgY29uc3QgbWl4ZWRBdHRyaWIgPSBhc0VsZW0uZ2V0QXR0cmlidXRlKCdtaXhlZCcpO1xyXG4gICAgICAgIGlmIChtaXhlZEF0dHJpYikge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHR5cGVBdHRyaWIgPSBhc0VsZW0uZ2V0QXR0cmlidXRlKCd0eXBlJyk7XHJcbiAgICAgICAgaWYgKHR5cGVBdHRyaWIgJiYgdHlwZUF0dHJpYiA9PT0gYCR7dGhpcy5uYW1lc3BhY2VQcmFlZml4fXN0cmluZ2ApIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFzRWxlbS5sb2NhbE5hbWUgPT09ICdlbGVtZW50Jykge1xyXG4gICAgICAgICAgZWxlbWVudE5hbWUgPSBhc0VsZW0uZ2V0QXR0cmlidXRlKCduYW1lJyk7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudE5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKGFscmVhZHlBZGRlZEVsZW1lbnROYW1lcy5oYXMoZWxlbWVudE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBlbGVtZW50IHJlY3Vyc2lvbiBkZXRlY3RlZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhbHJlYWR5QWRkZWRFbGVtZW50TmFtZXMuYWRkKGVsZW1lbnROYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeHNkTm9kZS5jaGlsZE5vZGVzKSBhcyBOb2RlW107XHJcblxyXG4gICAgbGV0IGFsbG93ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjaGlsZE5vZGVzLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRFbGVtID0gY2hpbGQgYXMgRWxlbWVudDtcclxuICAgICAgICBpZiAoY2hpbGRFbGVtKSB7XHJcbiAgICAgICAgICBzd2l0Y2ggKGNoaWxkRWxlbS5sb2NhbE5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnY29tcGxleFR5cGUnOlxyXG4gICAgICAgICAgICBjYXNlICdzZXF1ZW5jZSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2Nob2ljZSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3NpbXBsZUNvbnRlbnQnOlxyXG4gICAgICAgICAgICBjYXNlICdleHRlbnNpb24nOlxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmlzVGV4dEFsbG93ZWRJblRoaXNFbGVtZW50KGNoaWxkLCBhbHJlYWR5QWRkZWRFbGVtZW50TmFtZXMpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBhbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2VsZW1lbnQnOlxyXG4gICAgICAgICAgICAgIGNvbnN0IHJlZm5hbWUgPSBjaGlsZEVsZW0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ3JlZicpO1xyXG4gICAgICAgICAgICAgIGlmIChyZWZuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVkTm9kZSA9IHRoaXMueHNkTm9kZXMuZ2V0KHJlZm5hbWUudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlZmVyZWROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVGV4dEFsbG93ZWRJblRoaXNFbGVtZW50KHJlZmVyZWROb2RlLCBhbHJlYWR5QWRkZWRFbGVtZW50TmFtZXMpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgIHJlZmVyZWQgZWxlbWVudCBcIiR7cmVmbmFtZX1cIiBmb3IgZWxlbWVudCBcIiR7Y2hpbGRFbGVtLm91dGVySFRNTH1cIiBub3QgZm91bmRgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdhdHRyaWJ1dGUnOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBhbGVydCgndW5rbm93biBjaGlsZEVsZW0ubG9jYWxuYW1lIFwiJyArIGNoaWxkRWxlbS5sb2NhbE5hbWUgKyAnXCIvJyArIGNoaWxkRWxlbS5vdXRlckhUTUwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGFsbG93ZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==