UNPKG

angular-xml-editor

Version:
136 lines (135 loc) 15.8 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'; var XmlEditDelete = /** @class */ (function () { function XmlEditDelete() { } /** * @param {?} cursor * @param {?} rootNode * @param {?} xmlRules * @return {?} */ XmlEditDelete.deleteSelection = /** * @param {?} cursor * @param {?} rootNode * @param {?} xmlRules * @return {?} */ function (cursor, rootNode, xmlRules) { return true; }; /** * @param {?} pos * @param {?} rootNode * @param {?} xmlRules * @return {?} */ XmlEditDelete.deleteAfter = /** * @param {?} pos * @param {?} rootNode * @param {?} xmlRules * @return {?} */ function (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 {?} */ XmlEditDelete.deleteBefore = /** * @param {?} pos * @param {?} rootNode * @param {?} xmlRules * @return {?} */ function (pos, rootNode, xmlRules) { /** @type {?} */ var 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 {?} */ var 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; }; return XmlEditDelete; }()); export { XmlEditDelete }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sRWRpdERlbGV0ZWNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci14bWwtZWRpdG9yLyIsInNvdXJjZXMiOlsibGliL2NvZGUveG1sLWVkaXRpbmcveG1sRWRpdERlbGV0ZWNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHOUUsSUFBQTs7Ozs7Ozs7O0lBQ2dCLDZCQUFlOzs7Ozs7Y0FBQyxNQUFpQixFQUFFLFFBQWlCLEVBQUUsUUFBa0I7UUFDcEYsT0FBTyxJQUFJLENBQUM7Ozs7Ozs7O0lBR0EseUJBQVc7Ozs7OztjQUFDLEdBQWlCLEVBQUUsUUFBaUIsRUFBRSxRQUFrQjtRQUNoRixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELFFBQVEsR0FBRyxDQUFDLFNBQVMsRUFBRTtZQUNyQixLQUFLLGtCQUFrQixDQUFDLG9CQUFvQjtnQkFDMUMsT0FBTyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFN0QsS0FBSyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN6QyxLQUFLLGtCQUFrQixDQUFDLG1CQUFtQjtnQkFDekMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3JELE9BQU8sYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRTdELEtBQUssa0JBQWtCLENBQUMsaUJBQWlCO2dCQUN2QyxPQUFPLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFF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QUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3pFLE9BQU8sYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUM1RDtxQkFBTTs7b0JBQ0wsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7b0JBQ3RDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEgsR0FBRyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUNsQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQzs7aUJBRXJEO2dCQUNELE1BQU07WUFFUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDZEQUEwRCxHQUFHLENBQUMsU0FBVyxDQUFDLENBQUM7U0FDOUY7UUFFRCxPQUFPLElBQUksQ0FBQzs7d0JBckdoQjtJQXVHQyxDQUFBO0FBakdELHlCQWlHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFhtbFJ1bGVzIH0gZnJvbSAnLi4veG1sLXJ1bGVzLWNoZWNrL3htbFJ1bGVzLmNsYXNzJztcclxuaW1wb3J0IHsgWG1sQ3Vyc29yUG9zLCBYTUxDdXJzb3JQb3NpdGlvbnMgfSBmcm9tICcuLi9jdXJzb3IveG1sQ3Vyc29yUG9zLmNsYXNzJztcclxuaW1wb3J0IHsgWG1sQ3Vyc29yUG9zTW92ZXIgfSBmcm9tICcuLi9jdXJzb3IveG1sQ3Vyc29yUG9zTW92ZXIuY2xhc3MnO1xyXG5pbXBvcnQgeyBEb21EdW1teU5vZGVNYW5hZ2VyIH0gZnJvbSAnLi4vZHVtbXlOb2Rlcy9kb21EdW1teU5vZGVNYW5hZ2VyLmNsYXNzJztcclxuaW1wb3J0IHsgWG1sQ3Vyc29yIH0gZnJvbSAnLi4vY3Vyc29yL3htbEN1cnNvci5jbGFzcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgWG1sRWRpdERlbGV0ZSB7XHJcbiAgcHVibGljIHN0YXRpYyBkZWxldGVTZWxlY3Rpb24oY3Vyc29yOiBYbWxDdXJzb3IsIHJvb3ROb2RlOiBFbGVtZW50LCB4bWxSdWxlczogWG1sUnVsZXMpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBkZWxldGVBZnRlcihwb3M6IFhtbEN1cnNvclBvcywgcm9vdE5vZGU6IEVsZW1lbnQsIHhtbFJ1bGVzOiBYbWxSdWxlcyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHBvcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHBvcy5Qb3NBdE5vZGUpIHtcclxuICAgICAgY2FzZSBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29yT25Db21wbGV0ZU5vZGU6XHJcbiAgICAgICAgcmV0dXJuIFhtbEVkaXREZWxldGUuZGVsZXRlQmVmb3JlKHBvcywgcm9vdE5vZGUsIHhtbFJ1bGVzKTtcclxuXHJcbiAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckJlaGluZE5vZGU6XHJcbiAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluRnJvbnRPZk5vZGU6XHJcbiAgICAgICAgWG1sQ3Vyc29yUG9zTW92ZXIubW92ZVJpZ2h0KHBvcywgcm9vdE5vZGUsIHhtbFJ1bGVzKTtcclxuICAgICAgICByZXR1cm4gWG1sRWRpdERlbGV0ZS5kZWxldGVCZWZvcmUocG9zLCByb290Tm9kZSwgeG1sUnVsZXMpO1xyXG5cclxuICAgICAgY2FzZSBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29ySW5FbXB0eU5vZGU6XHJcbiAgICAgICAgcmV0dXJuIFhtbEVkaXREZWxldGUuZGVsZXRlQmVmb3JlKHBvcywgcm9vdE5vZGUsIHhtbFJ1bGVzKTtcclxuXHJcbiAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluc2lkZVRleHROb2RlOlxyXG4gICAgICAgIFhtbEN1cnNvclBvc01vdmVyLm1vdmVSaWdodChwb3MsIHJvb3ROb2RlLCB4bWxSdWxlcyk7XHJcbiAgICAgICAgcmV0dXJuIFhtbEVkaXREZWxldGUuZGVsZXRlQmVmb3JlKHBvcywgcm9vdE5vZGUsIHhtbFJ1bGVzKTtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcuRm9ybWF0KFwiWG1sQ3Vyc29yRWRpdC5kZWxldGVCZWZvcmU6IHVua25vd24gQ3Vyc29yUG9zICR7cG9zLlBvc0F0Tm9kZX1gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZGVsZXRlQmVmb3JlKHBvczogWG1sQ3Vyc29yUG9zLCByb290Tm9kZTogRWxlbWVudCwgeG1sUnVsZXM6IFhtbFJ1bGVzKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgZGVsZXRlTm9kZTogTm9kZTtcclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZyhwb3MuZ2V0RGVidWdEZXNjcmlwdGlvbigpKTtcclxuXHJcbiAgICBpZiAocG9zID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwb3MuUG9zQXROb2RlKSB7XHJcbiAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvck9uQ29tcGxldGVOb2RlOlxyXG4gICAgICAgIGRlbGV0ZU5vZGUgPSBwb3MuQWN0dWFsTm9kZTtcclxuICAgICAgICBYbWxDdXJzb3JQb3NNb3Zlci5tb3ZlUmlnaHQocG9zLCByb290Tm9kZSwgeG1sUnVsZXMpO1xyXG4gICAgICAgIGRlbGV0ZU5vZGUucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChkZWxldGVOb2RlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckJlaGluZE5vZGU6XHJcbiAgICAgICAgaWYgKHBvcy5BY3R1YWxOb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xyXG4gICAgICAgICAgcG9zLlNldEN1cnNvcihwb3MuQWN0dWFsTm9kZSwgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluc2lkZVRleHROb2RlLCBwb3MuQWN0dWFsTm9kZS50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgcmV0dXJuIFhtbEVkaXREZWxldGUuZGVsZXRlQmVmb3JlKHBvcywgcm9vdE5vZGUsIHhtbFJ1bGVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcG9zLkFjdHVhbE5vZGUucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChwb3MuQWN0dWFsTm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29ySW5FbXB0eU5vZGU6XHJcbiAgICAgICAgZGVsZXRlTm9kZSA9IHBvcy5BY3R1YWxOb2RlO1xyXG4gICAgICAgIFhtbEN1cnNvclBvc01vdmVyLm1vdmVSaWdodChwb3MsIHJvb3ROb2RlLCB4bWxSdWxlcyk7XHJcbiAgICAgICAgZGVsZXRlTm9kZS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGRlbGV0ZU5vZGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29ySW5Gcm9udE9mTm9kZTpcclxuICAgICAgICBkZWxldGVOb2RlID0gRG9tRHVtbXlOb2RlTWFuYWdlci5nZXRQcmV2aW91c1NpYmxpbmcocG9zLkFjdHVhbE5vZGUpO1xyXG4gICAgICAgIGlmICghZGVsZXRlTm9kZSkge1xyXG4gICAgICAgICAgZGVsZXRlTm9kZSA9IHBvcy5BY3R1YWxOb2RlLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZWxldGVOb2RlKSB7XHJcbiAgICAgICAgICBpZiAoZGVsZXRlTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcclxuICAgICAgICAgICAgcG9zLlNldEN1cnNvcihkZWxldGVOb2RlLCBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29ySW5zaWRlVGV4dE5vZGUsIGRlbGV0ZU5vZGUudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFhtbEVkaXREZWxldGUuZGVsZXRlQmVmb3JlKHBvcywgcm9vdE5vZGUsIHhtbFJ1bGVzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZU5vZGUucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChkZWxldGVOb2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JJbnNpZGVUZXh0Tm9kZTpcclxuICAgICAgICBpZiAocG9zLlBvc0luVGV4dG5vZGUgPT09IDApIHtcclxuICAgICAgICAgIHBvcy5TZXRDdXJzb3IocG9zLkFjdHVhbE5vZGUsIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JJbkZyb250T2ZOb2RlLCAwKTtcclxuICAgICAgICAgIHJldHVybiBYbWxFZGl0RGVsZXRlLmRlbGV0ZUJlZm9yZShwb3MsIHJvb3ROb2RlLCB4bWxSdWxlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB0ZXh0ID0gcG9zLkFjdHVhbE5vZGUudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgcG9zLlBvc0luVGV4dG5vZGUgLSAxKSArIHRleHQuc3Vic3RyKHBvcy5Qb3NJblRleHRub2RlLCBwb3MuQWN0dWFsTm9kZS50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgcG9zLkFjdHVhbE5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xyXG4gICAgICAgICAgWG1sQ3Vyc29yUG9zTW92ZXIubW92ZUxlZnQocG9zLCByb290Tm9kZSwgeG1sUnVsZXMpO1xyXG4gICAgICAgICAgLy8gcG9zLlNldEN1cnNvcihwb3MuQWN0dWFsTm9kZSwgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluc2lkZVRleHROb2RlLCBwb3MuUG9zSW5UZXh0bm9kZSAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcuRm9ybWF0KFwiWG1sRWRpdC5kZWxldGVCZWZvcmU6IHVua25vd24gQ3Vyc29yUG9zICR7cG9zLlBvc0F0Tm9kZX1gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuIl19