angular-xml-editor
Version:
XML editor component for Angular
114 lines (113 loc) • 15.2 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';
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==