UNPKG

angular-xml-editor

Version:
114 lines (113 loc) 15.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { XMLCursorPositions } from '../cursor/xmlCursorPos.class'; import { XmlCursorPosMover } from '../cursor/xmlCursorPosMover.class'; import { DomDummyNodeManager } from '../dummyNodes/domDummyNodeManager.class'; export class XmlEditDelete { /** * @param {?} cursor * @param {?} rootNode * @param {?} xmlRules * @return {?} */ static deleteSelection(cursor, rootNode, xmlRules) { return true; } /** * @param {?} pos * @param {?} rootNode * @param {?} xmlRules * @return {?} */ static deleteAfter(pos, rootNode, xmlRules) { if (pos === undefined) { return false; } switch (pos.PosAtNode) { case XMLCursorPositions.CursorOnCompleteNode: return XmlEditDelete.deleteBefore(pos, rootNode, xmlRules); case XMLCursorPositions.CursorBehindNode: case XMLCursorPositions.CursorInFrontOfNode: XmlCursorPosMover.moveRight(pos, rootNode, xmlRules); return XmlEditDelete.deleteBefore(pos, rootNode, xmlRules); case XMLCursorPositions.CursorInEmptyNode: return XmlEditDelete.deleteBefore(pos, rootNode, xmlRules); case XMLCursorPositions.CursorInsideTextNode: XmlCursorPosMover.moveRight(pos, rootNode, xmlRules); return XmlEditDelete.deleteBefore(pos, rootNode, xmlRules); default: throw new Error(`String.Format("XmlCursorEdit.deleteBefore: unknown CursorPos ${pos.PosAtNode}`); } return true; } /** * @param {?} pos * @param {?} rootNode * @param {?} xmlRules * @return {?} */ static deleteBefore(pos, rootNode, xmlRules) { /** @type {?} */ let deleteNode; // console.log(pos.getDebugDescription()); if (pos === undefined) { return false; } switch (pos.PosAtNode) { case XMLCursorPositions.CursorOnCompleteNode: deleteNode = pos.ActualNode; XmlCursorPosMover.moveRight(pos, rootNode, xmlRules); deleteNode.parentElement.removeChild(deleteNode); break; case XMLCursorPositions.CursorBehindNode: if (pos.ActualNode.nodeType === Node.TEXT_NODE) { pos.SetCursor(pos.ActualNode, XMLCursorPositions.CursorInsideTextNode, pos.ActualNode.textContent.length); return XmlEditDelete.deleteBefore(pos, rootNode, xmlRules); } else { pos.ActualNode.parentElement.removeChild(pos.ActualNode); } break; case XMLCursorPositions.CursorInEmptyNode: deleteNode = pos.ActualNode; XmlCursorPosMover.moveRight(pos, rootNode, xmlRules); deleteNode.parentElement.removeChild(deleteNode); break; case XMLCursorPositions.CursorInFrontOfNode: deleteNode = DomDummyNodeManager.getPreviousSibling(pos.ActualNode); if (!deleteNode) { deleteNode = pos.ActualNode.parentElement; } if (deleteNode) { if (deleteNode.nodeType === Node.TEXT_NODE) { pos.SetCursor(deleteNode, XMLCursorPositions.CursorInsideTextNode, deleteNode.textContent.length); return XmlEditDelete.deleteBefore(pos, rootNode, xmlRules); } else { deleteNode.parentElement.removeChild(deleteNode); } } break; case XMLCursorPositions.CursorInsideTextNode: if (pos.PosInTextnode === 0) { pos.SetCursor(pos.ActualNode, XMLCursorPositions.CursorInFrontOfNode, 0); return XmlEditDelete.deleteBefore(pos, rootNode, xmlRules); } else { /** @type {?} */ let text = pos.ActualNode.textContent; text = text.substring(0, pos.PosInTextnode - 1) + text.substr(pos.PosInTextnode, pos.ActualNode.textContent.length); pos.ActualNode.textContent = text; XmlCursorPosMover.moveLeft(pos, rootNode, xmlRules); // pos.SetCursor(pos.ActualNode, XMLCursorPositions.CursorInsideTextNode, pos.PosInTextnode - 1); } break; default: throw new Error(`String.Format("XmlEdit.deleteBefore: unknown CursorPos ${pos.PosAtNode}`); } return true; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sRWRpdERlbGV0ZWNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci14bWwtZWRpdG9yLyIsInNvdXJjZXMiOlsibGliL2NvZGUveG1sLWVkaXRpbmcveG1sRWRpdERlbGV0ZWNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHOUUsTUFBTTs7Ozs7OztJQUNHLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBaUIsRUFBRSxRQUFpQixFQUFFLFFBQWtCO1FBQ3BGLE9BQU8sSUFBSSxDQUFDOzs7Ozs7OztJQUdQLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBaUIsRUFBRSxRQUFpQixFQUFFLFFBQWtCO1FBQ2hGLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtZQUNyQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsUUFBUSxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQ3JCLEtBQUssa0JBQWtCLENBQUMsb0JBQW9CO2dCQUMxQyxPQUFPLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUU3RCxLQUFLLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDO1lBQ3pDLEtBQUssa0JBQWtCLENBQUMsbUJBQW1CO2dCQUN6QyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDckQsT0FBTyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFN0QsS0FBSyxrQkFBa0IsQ0FBQyxpQkFBaUI7Z0JBQ3ZDLE9BQU8sYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFH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QUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDekUsT0FBTyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQzVEO3FCQUFNOztvQkFDTCxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztvQkFDdEMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwSCxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ2xDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDOztpQkFFckQ7Z0JBQ0QsTUFBTTtZQUVSO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQzlGO1FBRUQsT0FBTyxJQUFJLENBQUM7O0NBRWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBYbWxSdWxlcyB9IGZyb20gJy4uL3htbC1ydWxlcy1jaGVjay94bWxSdWxlcy5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbEN1cnNvclBvcywgWE1MQ3Vyc29yUG9zaXRpb25zIH0gZnJvbSAnLi4vY3Vyc29yL3htbEN1cnNvclBvcy5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbEN1cnNvclBvc01vdmVyIH0gZnJvbSAnLi4vY3Vyc29yL3htbEN1cnNvclBvc01vdmVyLmNsYXNzJztcclxuaW1wb3J0IHsgRG9tRHVtbXlOb2RlTWFuYWdlciB9IGZyb20gJy4uL2R1bW15Tm9kZXMvZG9tRHVtbXlOb2RlTWFuYWdlci5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbEN1cnNvciB9IGZyb20gJy4uL2N1cnNvci94bWxDdXJzb3IuY2xhc3MnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFhtbEVkaXREZWxldGUge1xyXG4gIHB1YmxpYyBzdGF0aWMgZGVsZXRlU2VsZWN0aW9uKGN1cnNvcjogWG1sQ3Vyc29yLCByb290Tm9kZTogRWxlbWVudCwgeG1sUnVsZXM6IFhtbFJ1bGVzKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZGVsZXRlQWZ0ZXIocG9zOiBYbWxDdXJzb3JQb3MsIHJvb3ROb2RlOiBFbGVtZW50LCB4bWxSdWxlczogWG1sUnVsZXMpOiBib29sZWFuIHtcclxuICAgIGlmIChwb3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChwb3MuUG9zQXROb2RlKSB7XHJcbiAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvck9uQ29tcGxldGVOb2RlOlxyXG4gICAgICAgIHJldHVybiBYbWxFZGl0RGVsZXRlLmRlbGV0ZUJlZm9yZShwb3MsIHJvb3ROb2RlLCB4bWxSdWxlcyk7XHJcblxyXG4gICAgICBjYXNlIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JCZWhpbmROb2RlOlxyXG4gICAgICBjYXNlIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JJbkZyb250T2ZOb2RlOlxyXG4gICAgICAgIFhtbEN1cnNvclBvc01vdmVyLm1vdmVSaWdodChwb3MsIHJvb3ROb2RlLCB4bWxSdWxlcyk7XHJcbiAgICAgICAgcmV0dXJuIFhtbEVkaXREZWxldGUuZGVsZXRlQmVmb3JlKHBvcywgcm9vdE5vZGUsIHhtbFJ1bGVzKTtcclxuXHJcbiAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluRW1wdHlOb2RlOlxyXG4gICAgICAgIHJldHVybiBYbWxFZGl0RGVsZXRlLmRlbGV0ZUJlZm9yZShwb3MsIHJvb3ROb2RlLCB4bWxSdWxlcyk7XHJcblxyXG4gICAgICBjYXNlIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JJbnNpZGVUZXh0Tm9kZTpcclxuICAgICAgICBYbWxDdXJzb3JQb3NNb3Zlci5tb3ZlUmlnaHQocG9zLCByb290Tm9kZSwgeG1sUnVsZXMpO1xyXG4gICAgICAgIHJldHVybiBYbWxFZGl0RGVsZXRlLmRlbGV0ZUJlZm9yZShwb3MsIHJvb3ROb2RlLCB4bWxSdWxlcyk7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RyaW5nLkZvcm1hdChcIlhtbEN1cnNvckVkaXQuZGVsZXRlQmVmb3JlOiB1bmtub3duIEN1cnNvclBvcyAke3Bvcy5Qb3NBdE5vZGV9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGRlbGV0ZUJlZm9yZShwb3M6IFhtbEN1cnNvclBvcywgcm9vdE5vZGU6IEVsZW1lbnQsIHhtbFJ1bGVzOiBYbWxSdWxlcyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGRlbGV0ZU5vZGU6IE5vZGU7XHJcblxyXG4gICAgLy8gY29uc29sZS5sb2cocG9zLmdldERlYnVnRGVzY3JpcHRpb24oKSk7XHJcblxyXG4gICAgaWYgKHBvcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAocG9zLlBvc0F0Tm9kZSkge1xyXG4gICAgICBjYXNlIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JPbkNvbXBsZXRlTm9kZTpcclxuICAgICAgICBkZWxldGVOb2RlID0gcG9zLkFjdHVhbE5vZGU7XHJcbiAgICAgICAgWG1sQ3Vyc29yUG9zTW92ZXIubW92ZVJpZ2h0KHBvcywgcm9vdE5vZGUsIHhtbFJ1bGVzKTtcclxuICAgICAgICBkZWxldGVOb2RlLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZGVsZXRlTm9kZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JCZWhpbmROb2RlOlxyXG4gICAgICAgIGlmIChwb3MuQWN0dWFsTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcclxuICAgICAgICAgIHBvcy5TZXRDdXJzb3IocG9zLkFjdHVhbE5vZGUsIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JJbnNpZGVUZXh0Tm9kZSwgcG9zLkFjdHVhbE5vZGUudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgIHJldHVybiBYbWxFZGl0RGVsZXRlLmRlbGV0ZUJlZm9yZShwb3MsIHJvb3ROb2RlLCB4bWxSdWxlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBvcy5BY3R1YWxOb2RlLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQocG9zLkFjdHVhbE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluRW1wdHlOb2RlOlxyXG4gICAgICAgIGRlbGV0ZU5vZGUgPSBwb3MuQWN0dWFsTm9kZTtcclxuICAgICAgICBYbWxDdXJzb3JQb3NNb3Zlci5tb3ZlUmlnaHQocG9zLCByb290Tm9kZSwgeG1sUnVsZXMpO1xyXG4gICAgICAgIGRlbGV0ZU5vZGUucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChkZWxldGVOb2RlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluRnJvbnRPZk5vZGU6XHJcbiAgICAgICAgZGVsZXRlTm9kZSA9IERvbUR1bW15Tm9kZU1hbmFnZXIuZ2V0UHJldmlvdXNTaWJsaW5nKHBvcy5BY3R1YWxOb2RlKTtcclxuICAgICAgICBpZiAoIWRlbGV0ZU5vZGUpIHtcclxuICAgICAgICAgIGRlbGV0ZU5vZGUgPSBwb3MuQWN0dWFsTm9kZS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGVsZXRlTm9kZSkge1xyXG4gICAgICAgICAgaWYgKGRlbGV0ZU5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XHJcbiAgICAgICAgICAgIHBvcy5TZXRDdXJzb3IoZGVsZXRlTm9kZSwgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluc2lkZVRleHROb2RlLCBkZWxldGVOb2RlLnRleHRDb250ZW50Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBYbWxFZGl0RGVsZXRlLmRlbGV0ZUJlZm9yZShwb3MsIHJvb3ROb2RlLCB4bWxSdWxlcyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGVOb2RlLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZGVsZXRlTm9kZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29ySW5zaWRlVGV4dE5vZGU6XHJcbiAgICAgICAgaWYgKHBvcy5Qb3NJblRleHRub2RlID09PSAwKSB7XHJcbiAgICAgICAgICBwb3MuU2V0Q3Vyc29yKHBvcy5BY3R1YWxOb2RlLCBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29ySW5Gcm9udE9mTm9kZSwgMCk7XHJcbiAgICAgICAgICByZXR1cm4gWG1sRWRpdERlbGV0ZS5kZWxldGVCZWZvcmUocG9zLCByb290Tm9kZSwgeG1sUnVsZXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdGV4dCA9IHBvcy5BY3R1YWxOb2RlLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHBvcy5Qb3NJblRleHRub2RlIC0gMSkgKyB0ZXh0LnN1YnN0cihwb3MuUG9zSW5UZXh0bm9kZSwgcG9zLkFjdHVhbE5vZGUudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgIHBvcy5BY3R1YWxOb2RlLnRleHRDb250ZW50ID0gdGV4dDtcclxuICAgICAgICAgIFhtbEN1cnNvclBvc01vdmVyLm1vdmVMZWZ0KHBvcywgcm9vdE5vZGUsIHhtbFJ1bGVzKTtcclxuICAgICAgICAgIC8vIHBvcy5TZXRDdXJzb3IocG9zLkFjdHVhbE5vZGUsIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JJbnNpZGVUZXh0Tm9kZSwgcG9zLlBvc0luVGV4dG5vZGUgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RyaW5nLkZvcm1hdChcIlhtbEVkaXQuZGVsZXRlQmVmb3JlOiB1bmtub3duIEN1cnNvclBvcyAke3Bvcy5Qb3NBdE5vZGV9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==