UNPKG

angular-xml-editor

Version:
60 lines (59 loc) 7.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { DomDummyNodeManager } from '../dummyNodes/domDummyNodeManager.class'; import { XMLCursorPositions } from '../cursor/xmlCursorPos.class'; export class XmlDomCleaner { /** * @param {?} node * @param {?} actualCursor * @return {?} */ static cleanUp(node, actualCursor) { this.concatTextNodes(node, actualCursor); } /** * * if two textnodes are direct siblings: concat to one textnode * @param {?} node * @param {?} actualCursor * @param {?=} nodeDepth * @return {?} */ static concatTextNodes(node, actualCursor, nodeDepth = 0) { /** @type {?} */ let restart = true; while (restart === true) { restart = false; for (let i = 0; i < node.childNodes.length; ++i) { /** @type {?} */ const firstToCheck = node.childNodes[i]; if (DomDummyNodeManager.IsDummyNode(firstToCheck)) { throw new Error('Dummynodes have to be removed before using XmlDomCleaner!'); } if (firstToCheck.nodeType === Node.TEXT_NODE) { /** @type {?} */ const secondToCheck = firstToCheck.nextSibling; if (secondToCheck !== null && secondToCheck.nodeType === Node.TEXT_NODE) { // two text nodes after each other => concat if (actualCursor.StartPos.ActualNode === secondToCheck) { actualCursor.StartPos.SetCursor(firstToCheck, XMLCursorPositions.CursorInsideTextNode, firstToCheck.textContent.length + actualCursor.StartPos.PosInTextnode); } if (actualCursor.EndPos.ActualNode === secondToCheck) { actualCursor.EndPos.SetCursor(firstToCheck, XMLCursorPositions.CursorInsideTextNode, firstToCheck.textContent.length + actualCursor.EndPos.PosInTextnode); } firstToCheck.textContent = firstToCheck.textContent + secondToCheck.textContent; node.removeChild(secondToCheck); restart = true; } } } } // update child nodes for (let i = 0; i < node.childNodes.length; ++i) { this.concatTextNodes(node.childNodes[i], actualCursor, nodeDepth + 1); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sRG9tQ2xlYW5lci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXIteG1sLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9jb2RlL3htbC1lZGl0aW5nL3htbERvbUNsZWFuZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWxFLE1BQU07Ozs7OztJQUNHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBVSxFQUFFLFlBQXVCO1FBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDOzs7Ozs7Ozs7O0lBTXBDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBVSxFQUFFLFlBQXVCLEVBQUUsU0FBUyxHQUFHLENBQUM7O1FBQzlFLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUVuQixPQUFPLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUVoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7O2dCQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO2lCQUM5RTtnQkFDRCxJQUFJLFlBQVksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTs7b0JBQzVDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUM7b0JBQy9DLElBQUksYUFBYSxLQUFLLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7O3dCQUV2RSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLGFBQWEsRUFBRTs0QkFDdEQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7eUJBQy9KO3dCQUNELElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssYUFBYSxFQUFFOzRCQUNwRCxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQzt5QkFDM0o7d0JBQ0QsWUFBWSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7d0JBQ2hGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7d0JBQ2hDLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQ2hCO2lCQUNGO2FBQ0Y7U0FDRjs7UUFHRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdkU7O0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb21EdW1teU5vZGVNYW5hZ2VyIH0gZnJvbSAnLi4vZHVtbXlOb2Rlcy9kb21EdW1teU5vZGVNYW5hZ2VyLmNsYXNzJztcclxuaW1wb3J0IHsgWG1sQ3Vyc29yIH0gZnJvbSAnLi4vY3Vyc29yL3htbEN1cnNvci5jbGFzcyc7XHJcbmltcG9ydCB7IFhNTEN1cnNvclBvc2l0aW9ucyB9IGZyb20gJy4uL2N1cnNvci94bWxDdXJzb3JQb3MuY2xhc3MnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFhtbERvbUNsZWFuZXIge1xyXG4gIHB1YmxpYyBzdGF0aWMgY2xlYW5VcChub2RlOiBOb2RlLCBhY3R1YWxDdXJzb3I6IFhtbEN1cnNvcikge1xyXG4gICAgdGhpcy5jb25jYXRUZXh0Tm9kZXMobm9kZSwgYWN0dWFsQ3Vyc29yKTtcclxuICB9XHJcblxyXG4gIC8qKipcclxuICAgKiBpZiB0d28gdGV4dG5vZGVzIGFyZSBkaXJlY3Qgc2libGluZ3M6IGNvbmNhdCB0byBvbmUgdGV4dG5vZGVcclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIGNvbmNhdFRleHROb2Rlcyhub2RlOiBOb2RlLCBhY3R1YWxDdXJzb3I6IFhtbEN1cnNvciwgbm9kZURlcHRoID0gMCk6IHZvaWQge1xyXG4gICAgbGV0IHJlc3RhcnQgPSB0cnVlO1xyXG5cclxuICAgIHdoaWxlIChyZXN0YXJ0ID09PSB0cnVlKSB7XHJcbiAgICAgIHJlc3RhcnQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RUb0NoZWNrID0gbm9kZS5jaGlsZE5vZGVzW2ldO1xyXG4gICAgICAgIGlmIChEb21EdW1teU5vZGVNYW5hZ2VyLklzRHVtbXlOb2RlKGZpcnN0VG9DaGVjaykpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRHVtbXlub2RlcyBoYXZlIHRvIGJlIHJlbW92ZWQgYmVmb3JlIHVzaW5nIFhtbERvbUNsZWFuZXIhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaXJzdFRvQ2hlY2subm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XHJcbiAgICAgICAgICBjb25zdCBzZWNvbmRUb0NoZWNrID0gZmlyc3RUb0NoZWNrLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgaWYgKHNlY29uZFRvQ2hlY2sgIT09IG51bGwgJiYgc2Vjb25kVG9DaGVjay5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcclxuICAgICAgICAgICAgLy8gdHdvIHRleHQgbm9kZXMgYWZ0ZXIgZWFjaCBvdGhlciA9PiBjb25jYXRcclxuICAgICAgICAgICAgaWYgKGFjdHVhbEN1cnNvci5TdGFydFBvcy5BY3R1YWxOb2RlID09PSBzZWNvbmRUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgICAgYWN0dWFsQ3Vyc29yLlN0YXJ0UG9zLlNldEN1cnNvcihmaXJzdFRvQ2hlY2ssIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JJbnNpZGVUZXh0Tm9kZSwgZmlyc3RUb0NoZWNrLnRleHRDb250ZW50Lmxlbmd0aCArIGFjdHVhbEN1cnNvci5TdGFydFBvcy5Qb3NJblRleHRub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYWN0dWFsQ3Vyc29yLkVuZFBvcy5BY3R1YWxOb2RlID09PSBzZWNvbmRUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgICAgYWN0dWFsQ3Vyc29yLkVuZFBvcy5TZXRDdXJzb3IoZmlyc3RUb0NoZWNrLCBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29ySW5zaWRlVGV4dE5vZGUsIGZpcnN0VG9DaGVjay50ZXh0Q29udGVudC5sZW5ndGggKyBhY3R1YWxDdXJzb3IuRW5kUG9zLlBvc0luVGV4dG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpcnN0VG9DaGVjay50ZXh0Q29udGVudCA9IGZpcnN0VG9DaGVjay50ZXh0Q29udGVudCArIHNlY29uZFRvQ2hlY2sudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQoc2Vjb25kVG9DaGVjayk7XHJcbiAgICAgICAgICAgIHJlc3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHVwZGF0ZSBjaGlsZCBub2Rlc1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgdGhpcy5jb25jYXRUZXh0Tm9kZXMobm9kZS5jaGlsZE5vZGVzW2ldLCBhY3R1YWxDdXJzb3IsIG5vZGVEZXB0aCArIDEpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=