UNPKG

angular-xml-editor

Version:
311 lines (310 loc) 27 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Xml2html } from '../xml-html-converter/xml2html.class'; var DomDummyNodeManager = /** @class */ (function () { function DomDummyNodeManager() { } /** * @param {?} node * @return {?} */ DomDummyNodeManager.IsDummyNode = /** * @param {?} node * @return {?} */ function (node) { /** @type {?} */ var asElem = /** @type {?} */ (node); if (asElem && node.nodeType === Node.ELEMENT_NODE) { return asElem.classList.contains(DomDummyNodeManager.DummyNodeClassName); } return false; }; /** * @param {?} node * @return {?} */ DomDummyNodeManager.IsBeforeFirstTagDummyNode = /** * @param {?} node * @return {?} */ function (node) { if (DomDummyNodeManager.IsDummyNode(node)) { /** @type {?} */ var asElem = /** @type {?} */ (node); if (asElem && node.nodeType === Node.ELEMENT_NODE) { return asElem.classList.contains(DomDummyNodeManager.DummyNodeBeforeFirstTagClassName); } return false; } else { return false; } }; /** * @param {?} node * @return {?} */ DomDummyNodeManager.getPreviousSibling = /** * @param {?} node * @return {?} */ function (node) { if (!node) { return undefined; } while (node) { node = node.previousSibling; if (node) { if (DomDummyNodeManager.IsDummyNode(node)) { } else { return node; } } } return undefined; }; /** * @param {?} node * @return {?} */ DomDummyNodeManager.getNextSibling = /** * @param {?} node * @return {?} */ function (node) { if (!node) { return undefined; } while (node) { node = node.nextSibling; if (node) { if (DomDummyNodeManager.IsDummyNode(node)) { } else { return node; } } } return undefined; }; /** * @param {?} node * @return {?} */ DomDummyNodeManager.getChildNodeCount = /** * @param {?} node * @return {?} */ function (node) { if (!node) { return 0; } /** @type {?} */ var count = 0; for (var i = 0; i < node.childNodes.length; i++) { if (!DomDummyNodeManager.IsDummyNode(node.childNodes[i])) { count++; } } return count; }; /** * @param {?} node * @return {?} */ DomDummyNodeManager.getFirstChild = /** * @param {?} node * @return {?} */ function (node) { if (!node) { return undefined; } /** @type {?} */ var first = /** @type {?} */ (node.firstChild); while (DomDummyNodeManager.IsDummyNode(first)) { first = first.nextSibling; } return first; }; /** * @param {?} node * @return {?} */ DomDummyNodeManager.getLastChild = /** * @param {?} node * @return {?} */ function (node) { if (!node) { return undefined; } /** @type {?} */ var last = /** @type {?} */ (node.lastChild); while (DomDummyNodeManager.IsDummyNode(last)) { last = last.previousSibling; } return last; }; /** * @param {?} node * @param {?=} nodeDepth * @return {?} */ DomDummyNodeManager.prototype.RemoveAllDummyNodes = /** * @param {?} node * @param {?=} nodeDepth * @return {?} */ function (node, nodeDepth) { var _this = this; if (nodeDepth === void 0) { nodeDepth = 0; } /** @type {?} */ var children = []; for (var i = 0; i < node.childNodes.length; ++i) { children.push(node.childNodes[i]); } // delete all dummy node children children.forEach(function (child) { if (DomDummyNodeManager.IsDummyNode(child)) { node.removeChild(child); } }); children = []; for (var i = 0; i < node.childNodes.length; ++i) { children.push(node.childNodes[i]); } // update child nodes children.forEach(function (child) { _this.RemoveAllDummyNodes(child, nodeDepth + 1); }); }; /** * @param {?} node * @param {?=} nodeDepth * @return {?} */ DomDummyNodeManager.prototype.UpdateDummyNodes = /** * @param {?} node * @param {?=} nodeDepth * @return {?} */ function (node, nodeDepth) { var _this = this; if (nodeDepth === void 0) { nodeDepth = 0; } /** @type {?} */ var document = node.ownerDocument; /** @type {?} */ var asElement = /** @type {?} */ (node); /** @type {?} */ var children = []; for (var i = 0; i < node.childNodes.length; ++i) { children.push(node.childNodes[i]); } if (asElement && !DomDummyNodeManager.IsDummyNode(asElement) && !DomDummyNodeManager.IsDummyNode(asElement.parentElement)) { if (asElement.nodeType === Node.TEXT_NODE) { /** @type {?} */ var before = asElement.previousSibling; if (before.nodeType === Node.TEXT_NODE) { // textnode after text node: dont insert dummy node! } else { if (!DomDummyNodeManager.IsDummyNode(before)) { asElement.parentNode.insertBefore(this.createDummyNode(document), asElement); } } } if (asElement.nodeType === Node.ELEMENT_NODE) { /** @type {?} */ var firstChild = node.firstChild; if (!firstChild) { // create dummy node in empty tag node.appendChild(this.createDummyNode(document)); firstChild = node.firstChild; } if (Xml2html.isNoClosingElement(node)) { } else { firstChild = node.firstChild; if (!firstChild) { // create dummy node in empty tag node.appendChild(this.createDummyNode(document)); firstChild = node.firstChild; } // Insert a dummy node before the first child if (!DomDummyNodeManager.IsDummyNode(firstChild)) { if (firstChild) { node.insertBefore(this.createDummyNode(document), firstChild); firstChild = node.firstChild; } else { node.appendChild(this.createDummyNode(document)); } } /** @type {?} */ var lastChild = node.lastChild; if (!DomDummyNodeManager.IsDummyNode(lastChild)) { node.appendChild(this.createDummyNode(document)); lastChild = node.lastChild; } // Insert a dummy node before the first (dummy child) but optical in front of the node (to show the cursor in front of the node) if (nodeDepth > 0) { if (DomDummyNodeManager.IsDummyNode(firstChild) && !DomDummyNodeManager.IsBeforeFirstTagDummyNode(firstChild)) { /** @type {?} */ var dummyNode = this.createDummyNode(document); dummyNode.classList.add(DomDummyNodeManager.DummyNodeBeforeFirstTagClassName); asElement.insertBefore(dummyNode, firstChild); } } } } } // update child nodes children.forEach(function (child) { _this.UpdateDummyNodes(child, nodeDepth + 1); }); }; /** * @param {?} targetDocument * @param {?=} content * @return {?} */ DomDummyNodeManager.prototype.createDummyNode = /** * @param {?} targetDocument * @param {?=} content * @return {?} */ function (targetDocument, content) { /** @type {?} */ var dummyNode = targetDocument.createElement('span'); /** @type {?} */ var dummy2TextNode; if (content === undefined) { dummy2TextNode = targetDocument.createTextNode(DomDummyNodeManager.DummyNodeContent); } else { dummy2TextNode = targetDocument.createTextNode(content); } dummyNode.classList.add(DomDummyNodeManager.DummyNodeClassName); dummyNode.appendChild(dummy2TextNode); return dummyNode; }; DomDummyNodeManager.DummyNodeClassName = 'dummyNode'; DomDummyNodeManager.DummyNodeBeforeFirstTagClassName = 'beforefirstTag'; DomDummyNodeManager.DummyNodeContent = String.fromCharCode(160); return DomDummyNodeManager; }()); export { DomDummyNodeManager }; if (false) { /** @type {?} */ DomDummyNodeManager.DummyNodeClassName; /** @type {?} */ DomDummyNodeManager.DummyNodeBeforeFirstTagClassName; /** @type {?} */ DomDummyNodeManager.DummyNodeContent; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tRHVtbXlOb2RlTWFuYWdlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXIteG1sLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9jb2RlL2R1bW15Tm9kZXMvZG9tRHVtbXlOb2RlTWFuYWdlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztJQU85RDtLQUFnQjs7Ozs7SUFFRiwrQkFBVzs7OztjQUFDLElBQVU7O1FBQ2xDLElBQU0sTUFBTSxxQkFBRyxJQUFlLEVBQUM7UUFDL0IsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUMxRTtRQUNELE9BQU8sS0FBSyxDQUFDOzs7Ozs7SUFHRCw2Q0FBeUI7Ozs7Y0FBQyxJQUFVO1FBQ2hELElBQUksbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFOztZQUN6QyxJQUFNLE1BQU0scUJBQUcsSUFBZSxFQUFDO1lBQy9CLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDakQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2FBQ3hGO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDs7Ozs7O0lBSVcsc0NBQWtCOzs7O2NBQUMsSUFBVTtRQUN6QyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksRUFBRTtZQUNYLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQzVCLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO2lCQUMxQztxQkFBTTtvQkFDTCxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQzs7Ozs7O0lBSUwsa0NBQWM7Ozs7Y0FBQyxJQUFVO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUNELE9BQU8sSUFBSSxFQUFFO1lBQ1gsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDeEIsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7aUJBQzFDO3FCQUFNO29CQUNMLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2FBQ0Y7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDOzs7Ozs7SUFJTCxxQ0FBaUI7Ozs7Y0FBQyxJQUFVO1FBQ3hDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQztTQUNWOztRQUNELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEQsS0FBSyxFQUFFLENBQUM7YUFDVDtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7Ozs7OztJQUlELGlDQUFhOzs7O2NBQUMsSUFBVTtRQUNwQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxTQUFTLENBQUM7U0FDbEI7O1FBQ0QsSUFBSSxLQUFLLHFCQUFHLElBQUksQ0FBQyxVQUFrQixFQUFDO1FBQ3BDLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdDLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1NBQzNCO1FBQ0QsT0FBTyxLQUFLLENBQUM7Ozs7OztJQUlELGdDQUFZOzs7O2NBQUMsSUFBVTtRQUNuQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxTQUFTLENBQUM7U0FDbEI7O1FBQ0QsSUFBSSxJQUFJLHFCQUFHLElBQUksQ0FBQyxTQUFpQixFQUFDO1FBQ2xDLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQzdCO1FBQ0QsT0FBTyxJQUFJLENBQUM7Ozs7Ozs7SUFHZCxpREFBbUI7Ozs7O0lBQW5CLFVBQW9CLElBQVUsRUFBRSxTQUFhO1FBQTdDLGlCQXNCQztRQXRCK0IsMEJBQUEsRUFBQSxhQUFhOztRQUMzQyxJQUFJLFFBQVEsR0FBVyxFQUFFLENBQUM7UUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQy9DLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25DOztRQUdELFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBQSxLQUFLO1lBQ3BCLElBQUksbUJBQW1CLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtZQUMvQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQzs7UUFHRCxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUEsS0FBSztZQUNwQixLQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoRCxDQUFDLENBQUM7S0FDSjs7Ozs7O0lBRUQsOENBQWdCOzs7OztJQUFoQixVQUFpQixJQUFVLEVBQUUsU0FBYTtRQUExQyxpQkF3RUM7UUF4RTRCLDBCQUFBLEVBQUEsYUFBYTs7UUFDeEMsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7UUFDcEMsSUFBTSxTQUFTLHFCQUFHLElBQWUsRUFBQzs7UUFFbEMsSUFBTSxRQUFRLEdBQVcsRUFBRSxDQUFDO1FBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtZQUMvQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQztRQUVELElBQUksU0FBUyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUN6SCxJQUFJLFNBQVMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTs7Z0JBQ3pDLElBQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUM7Z0JBQ3pDLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFOztpQkFFdkM7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDNUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztxQkFDOUU7aUJBQ0Y7YUFDRjtZQUVELElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFOztnQkFDNUMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFVBQVUsRUFBRTs7b0JBRWYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ2pELFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUM5QjtnQkFFRCxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtpQkFDdEM7cUJBQU07b0JBQ0wsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBRTdCLElBQUksQ0FBQyxVQUFVLEVBQUU7O3dCQUVmLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUNqRCxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztxQkFDOUI7O29CQUdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUU7d0JBQ2hELElBQUksVUFBVSxFQUFFOzRCQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQzs0QkFDOUQsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7eUJBQzlCOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3lCQUNsRDtxQkFDRjs7b0JBR0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTt3QkFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ2pELFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO3FCQUM1Qjs7b0JBR0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO3dCQUNqQixJQUFJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxFQUFFOzs0QkFDN0csSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs0QkFDakQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsZ0NBQWdDLENBQUMsQ0FBQzs0QkFDOUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7eUJBQy9DO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRjs7UUFHRCxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUEsS0FBSztZQUNwQixLQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM3QyxDQUFDLENBQUM7S0FDSjs7Ozs7O0lBRU0sNkNBQWU7Ozs7O2NBQUMsY0FBd0IsRUFBRSxPQUFnQjs7UUFDL0QsSUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFDdkQsSUFBSSxjQUFjLENBQUM7UUFDbkIsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ3pCLGNBQWMsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDdEY7YUFBTTtZQUNMLGNBQWMsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRSxTQUFTLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sU0FBUyxDQUFDOzs2Q0E5TWdCLFdBQVc7MkRBQ0csZ0JBQWdCOzJDQUNoQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQzs4QkFMM0Q7O1NBRWEsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWG1sMmh0bWwgfSBmcm9tICcuLi94bWwtaHRtbC1jb252ZXJ0ZXIveG1sMmh0bWwuY2xhc3MnO1xyXG5cclxuZXhwb3J0IGNsYXNzIERvbUR1bW15Tm9kZU1hbmFnZXIge1xyXG4gIHB1YmxpYyBzdGF0aWMgRHVtbXlOb2RlQ2xhc3NOYW1lID0gJ2R1bW15Tm9kZSc7XHJcbiAgcHVibGljIHN0YXRpYyBEdW1teU5vZGVCZWZvcmVGaXJzdFRhZ0NsYXNzTmFtZSA9ICdiZWZvcmVmaXJzdFRhZyc7XHJcbiAgcHVibGljIHN0YXRpYyBEdW1teU5vZGVDb250ZW50ID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgSXNEdW1teU5vZGUobm9kZTogTm9kZSkge1xyXG4gICAgY29uc3QgYXNFbGVtID0gbm9kZSBhcyBFbGVtZW50O1xyXG4gICAgaWYgKGFzRWxlbSAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xyXG4gICAgICByZXR1cm4gYXNFbGVtLmNsYXNzTGlzdC5jb250YWlucyhEb21EdW1teU5vZGVNYW5hZ2VyLkR1bW15Tm9kZUNsYXNzTmFtZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIElzQmVmb3JlRmlyc3RUYWdEdW1teU5vZGUobm9kZTogTm9kZSkge1xyXG4gICAgaWYgKERvbUR1bW15Tm9kZU1hbmFnZXIuSXNEdW1teU5vZGUobm9kZSkpIHtcclxuICAgICAgY29uc3QgYXNFbGVtID0gbm9kZSBhcyBFbGVtZW50O1xyXG4gICAgICBpZiAoYXNFbGVtICYmIG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XHJcbiAgICAgICAgcmV0dXJuIGFzRWxlbS5jbGFzc0xpc3QuY29udGFpbnMoRG9tRHVtbXlOb2RlTWFuYWdlci5EdW1teU5vZGVCZWZvcmVGaXJzdFRhZ0NsYXNzTmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHByZXZpb3Mgc2libGluZyAtIGV4Y2VwdCBkdW1teSBub2Rlc1xyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UHJldmlvdXNTaWJsaW5nKG5vZGU6IE5vZGUpOiBOb2RlIHtcclxuICAgIGlmICghbm9kZSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgIGlmIChEb21EdW1teU5vZGVNYW5hZ2VyLklzRHVtbXlOb2RlKG5vZGUpKSB7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vIGdldCBuZXh0IHNpYmxpbmcgLSBleGNlcHQgZHVtbXkgbm9kZXNcclxuICBwdWJsaWMgc3RhdGljIGdldE5leHRTaWJsaW5nKG5vZGU6IE5vZGUpOiBOb2RlIHtcclxuICAgIGlmICghbm9kZSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgaWYgKERvbUR1bW15Tm9kZU1hbmFnZXIuSXNEdW1teU5vZGUobm9kZSkpIHtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IGNoaWxkcmVuIGNvdW50IC0gZXhjZXB0IGR1bW15IG5vZGVzXHJcbiAgcHVibGljIHN0YXRpYyBnZXRDaGlsZE5vZGVDb3VudChub2RlOiBOb2RlKTogbnVtYmVyIHtcclxuICAgIGlmICghbm9kZSkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoIURvbUR1bW15Tm9kZU1hbmFnZXIuSXNEdW1teU5vZGUobm9kZS5jaGlsZE5vZGVzW2ldKSkge1xyXG4gICAgICAgIGNvdW50Kys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb3VudDtcclxuICB9XHJcblxyXG4gIC8vIGdldCBmaXJzdCBjaGlsZCAtIGV4Y2VwdCBkdW1teSBub2Rlc1xyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Rmlyc3RDaGlsZChub2RlOiBOb2RlKTogTm9kZSB7XHJcbiAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGxldCBmaXJzdCA9IG5vZGUuZmlyc3RDaGlsZCBhcyBOb2RlO1xyXG4gICAgd2hpbGUgKERvbUR1bW15Tm9kZU1hbmFnZXIuSXNEdW1teU5vZGUoZmlyc3QpKSB7XHJcbiAgICAgIGZpcnN0ID0gZmlyc3QubmV4dFNpYmxpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlyc3Q7XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgbGFzdCBjaGlsZCAtIGV4Y2VwdCBkdW1teSBub2Rlc1xyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0TGFzdENoaWxkKG5vZGU6IE5vZGUpOiBOb2RlIHtcclxuICAgIGlmICghbm9kZSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgbGV0IGxhc3QgPSBub2RlLmxhc3RDaGlsZCBhcyBOb2RlO1xyXG4gICAgd2hpbGUgKERvbUR1bW15Tm9kZU1hbmFnZXIuSXNEdW1teU5vZGUobGFzdCkpIHtcclxuICAgICAgbGFzdCA9IGxhc3QucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxhc3Q7XHJcbiAgfVxyXG5cclxuICBSZW1vdmVBbGxEdW1teU5vZGVzKG5vZGU6IE5vZGUsIG5vZGVEZXB0aCA9IDApOiB2b2lkIHtcclxuICAgIGxldCBjaGlsZHJlbjogTm9kZVtdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBjaGlsZHJlbi5wdXNoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGVsZXRlIGFsbCBkdW1teSBub2RlIGNoaWxkcmVuXHJcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgaWYgKERvbUR1bW15Tm9kZU1hbmFnZXIuSXNEdW1teU5vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNoaWxkcmVuID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBjaGlsZHJlbi5wdXNoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXBkYXRlIGNoaWxkIG5vZGVzXHJcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgdGhpcy5SZW1vdmVBbGxEdW1teU5vZGVzKGNoaWxkLCBub2RlRGVwdGggKyAxKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgVXBkYXRlRHVtbXlOb2Rlcyhub2RlOiBOb2RlLCBub2RlRGVwdGggPSAwKSB7XHJcbiAgICBjb25zdCBkb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcclxuICAgIGNvbnN0IGFzRWxlbWVudCA9IG5vZGUgYXMgRWxlbWVudDtcclxuXHJcbiAgICBjb25zdCBjaGlsZHJlbjogTm9kZVtdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBjaGlsZHJlbi5wdXNoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFzRWxlbWVudCAmJiAhRG9tRHVtbXlOb2RlTWFuYWdlci5Jc0R1bW15Tm9kZShhc0VsZW1lbnQpICYmICFEb21EdW1teU5vZGVNYW5hZ2VyLklzRHVtbXlOb2RlKGFzRWxlbWVudC5wYXJlbnRFbGVtZW50KSkge1xyXG4gICAgICBpZiAoYXNFbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xyXG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IGFzRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgaWYgKGJlZm9yZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcclxuICAgICAgICAgIC8vIHRleHRub2RlIGFmdGVyIHRleHQgbm9kZTogZG9udCBpbnNlcnQgZHVtbXkgbm9kZSFcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFEb21EdW1teU5vZGVNYW5hZ2VyLklzRHVtbXlOb2RlKGJlZm9yZSkpIHtcclxuICAgICAgICAgICAgYXNFbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY3JlYXRlRHVtbXlOb2RlKGRvY3VtZW50KSwgYXNFbGVtZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhc0VsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XHJcbiAgICAgICAgbGV0IGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgaWYgKCFmaXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAvLyBjcmVhdGUgZHVtbXkgbm9kZSBpbiBlbXB0eSB0YWdcclxuICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVEdW1teU5vZGUoZG9jdW1lbnQpKTtcclxuICAgICAgICAgIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoWG1sMmh0bWwuaXNOb0Nsb3NpbmdFbGVtZW50KG5vZGUpKSB7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBkdW1teSBub2RlIGluIGVtcHR5IHRhZ1xyXG4gICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlRHVtbXlOb2RlKGRvY3VtZW50KSk7XHJcbiAgICAgICAgICAgIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gSW5zZXJ0IGEgZHVtbXkgbm9kZSBiZWZvcmUgdGhlIGZpcnN0IGNoaWxkXHJcbiAgICAgICAgICBpZiAoIURvbUR1bW15Tm9kZU1hbmFnZXIuSXNEdW1teU5vZGUoZmlyc3RDaGlsZCkpIHtcclxuICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICBub2RlLmluc2VydEJlZm9yZSh0aGlzLmNyZWF0ZUR1bW15Tm9kZShkb2N1bWVudCksIGZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUR1bW15Tm9kZShkb2N1bWVudCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gSW5zZXJ0IGEgZHVtbXkgbm9kZSBhZnRlciB0aGUgbGFzdCBjaGlsZFxyXG4gICAgICAgICAgbGV0IGxhc3RDaGlsZCA9IG5vZGUubGFzdENoaWxkO1xyXG4gICAgICAgICAgaWYgKCFEb21EdW1teU5vZGVNYW5hZ2VyLklzRHVtbXlOb2RlKGxhc3RDaGlsZCkpIHtcclxuICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUR1bW15Tm9kZShkb2N1bWVudCkpO1xyXG4gICAgICAgICAgICBsYXN0Q2hpbGQgPSBub2RlLmxhc3RDaGlsZDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBJbnNlcnQgYSBkdW1teSBub2RlIGJlZm9yZSB0aGUgZmlyc3QgKGR1bW15IGNoaWxkKSBidXQgb3B0aWNhbCBpbiBmcm9udCBvZiB0aGUgbm9kZSAodG8gc2hvdyB0aGUgY3Vyc29yIGluIGZyb250IG9mIHRoZSBub2RlKVxyXG4gICAgICAgICAgaWYgKG5vZGVEZXB0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKERvbUR1bW15Tm9kZU1hbmFnZXIuSXNEdW1teU5vZGUoZmlyc3RDaGlsZCkgJiYgIURvbUR1bW15Tm9kZU1hbmFnZXIuSXNCZWZvcmVGaXJzdFRhZ0R1bW15Tm9kZShmaXJzdENoaWxkKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGR1bW15Tm9kZSA9IHRoaXMuY3JlYXRlRHVtbXlOb2RlKGRvY3VtZW50KTtcclxuICAgICAgICAgICAgICBkdW1teU5vZGUuY2xhc3NMaXN0LmFkZChEb21EdW1teU5vZGVNYW5hZ2VyLkR1bW15Tm9kZUJlZm9yZUZpcnN0VGFnQ2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICBhc0VsZW1lbnQuaW5zZXJ0QmVmb3JlKGR1bW15Tm9kZSwgZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB1cGRhdGUgY2hpbGQgbm9kZXNcclxuICAgIGNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICB0aGlzLlVwZGF0ZUR1bW15Tm9kZXMoY2hpbGQsIG5vZGVEZXB0aCArIDEpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlRHVtbXlOb2RlKHRhcmdldERvY3VtZW50OiBEb2N1bWVudCwgY29udGVudD86IHN0cmluZyk6IEVsZW1lbnQge1xyXG4gICAgY29uc3QgZHVtbXlOb2RlID0gdGFyZ2V0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgbGV0IGR1bW15MlRleHROb2RlO1xyXG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkdW1teTJUZXh0Tm9kZSA9IHRhcmdldERvY3VtZW50LmNyZWF0ZVRleHROb2RlKERvbUR1bW15Tm9kZU1hbmFnZXIuRHVtbXlOb2RlQ29udGVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkdW1teTJUZXh0Tm9kZSA9IHRhcmdldERvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpO1xyXG4gICAgfVxyXG4gICAgZHVtbXlOb2RlLmNsYXNzTGlzdC5hZGQoRG9tRHVtbXlOb2RlTWFuYWdlci5EdW1teU5vZGVDbGFzc05hbWUpO1xyXG4gICAgZHVtbXlOb2RlLmFwcGVuZENoaWxkKGR1bW15MlRleHROb2RlKTtcclxuICAgIHJldHVybiBkdW1teU5vZGU7XHJcbiAgfVxyXG59XHJcbiJdfQ==