angular-xml-editor
Version:
XML editor component for Angular
136 lines (135 loc) • 15.8 kB
JavaScript
/**
* @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