UNPKG

angular-xml-editor

Version:
130 lines (129 loc) 12.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { XmlCursorPos, XMLCursorPositions } from './xmlCursorPos.class'; import { XmlToolbox } from '../xmlToolbox.class'; import { DomDummyNodeManager } from '../dummyNodes/domDummyNodeManager.class'; export class XmlCursor { constructor() { this.xmlDocumentRootNode = undefined; this.domDummyNodeManager = new DomDummyNodeManager(); this.StartPos = new XmlCursorPos(); this.EndPos = new XmlCursorPos(); } /** * is there nothing between start and end pos? * @return {?} */ isEmptySelection() { if (this.StartPos.equals(this.EndPos)) { return true; } return false; } /** * @return {?} */ sortStartAndEnd() { if (this.StartPos.ActualNode && this.EndPos.ActualNode) { if (this.StartPos.ActualNode.isSameNode(this.EndPos.ActualNode)) { if (this.StartPos.PosAtNode === XMLCursorPositions.CursorInsideTextNode && this.EndPos.PosAtNode === XMLCursorPositions.CursorInsideTextNode && this.StartPos.PosInTextnode > this.EndPos.PosInTextnode) { this.swapStartAndEnd(); } } else { /** @type {?} */ const compared = this.StartPos.ActualNode.compareDocumentPosition(this.EndPos.ActualNode); // tslint:disable-next-line:no-bitwise if (!(compared & Node.DOCUMENT_POSITION_FOLLOWING)) { this.swapStartAndEnd(); } } } } /** * @return {?} */ swapStartAndEnd() { /** @type {?} */ const node = this.StartPos.ActualNode; /** @type {?} */ const pos = this.StartPos.PosAtNode; /** @type {?} */ const text = this.StartPos.PosInTextnode; this.StartPos.SetCursor(this.EndPos.ActualNode, this.EndPos.PosAtNode, this.EndPos.PosInTextnode); this.EndPos.SetCursor(node, pos, text); } /** * @return {?} */ show() { if (window.getSelection) { /** @type {?} */ const selection = window.getSelection(); this.show2(selection); } else { throw new Error('showCursor: unable to get "window.getSelection"'); } } /** * @param {?} selection * @return {?} */ show2(selection) { if (!selection) { return; } /** @type {?} */ const elems = document.querySelectorAll('.selected'); [].forEach.call(elems, function (el) { el.classList.remove('selected'); }); /** @type {?} */ const startSelection = XmlCursorPos.getSelectionForPos(this.StartPos); if (this.EndPos && this.EndPos.ActualNode && !this.EndPos.equals(this.StartPos)) { /** @type {?} */ const endSelection = XmlCursorPos.getSelectionForPos(this.EndPos); selection.setBaseAndExtent(startSelection.node, startSelection.offset, endSelection.node, endSelection.offset); } else { // only start pos selection.setPosition(startSelection.node, startSelection.offset); // select tag by adding "select" class if (this.StartPos.PosAtNode === XMLCursorPositions.CursorOnCompleteNode) { /** @type {?} */ const asElem = /** @type {?} */ (this.StartPos.ActualNode); if (asElem && asElem.classList) { asElem.classList.add('selected'); console.log('selected!'); } else { console.error(`no asElem.classList for select! ${XmlToolbox.GetNodeDebugContext(asElem)}`); } } } } } if (false) { /** @type {?} */ XmlCursor.prototype.xmlDocumentRootNode; /** @type {?} */ XmlCursor.prototype.domDummyNodeManager; /** @type {?} */ XmlCursor.prototype.StartPos; /** @type {?} */ XmlCursor.prototype.EndPos; } /** * @record */ export function SelectionPos() { } /** @type {?} */ SelectionPos.prototype.node; /** @type {?} */ SelectionPos.prototype.offset; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sQ3Vyc29yLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci14bWwtZWRpdG9yLyIsInNvdXJjZXMiOlsibGliL2NvZGUvY3Vyc29yL3htbEN1cnNvci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUU5RSxNQUFNOzttQ0FDMkIsU0FBUzttQ0FDbEIsSUFBSSxtQkFBbUIsRUFBRTt3QkFFN0IsSUFBSSxZQUFZLEVBQUU7c0JBQ3BCLElBQUksWUFBWSxFQUFFOzs7Ozs7SUFLbEMsZ0JBQWdCO1FBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7Ozs7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUN0RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUMvRCxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLGtCQUFrQixDQUFDLG9CQUFvQjtvQkFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssa0JBQWtCLENBQUMsb0JBQW9CO29CQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFDdkQ7b0JBQ0EsSUFBSSxDQUFDLGVBQWUs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QUssQ0FBQyxtQ0FBbUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDNUY7YUFDRjtTQUNGOztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWG1sQ3Vyc29yUG9zLCBYTUxDdXJzb3JQb3NpdGlvbnMgfSBmcm9tICcuL3htbEN1cnNvclBvcy5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbFRvb2xib3ggfSBmcm9tICcuLi94bWxUb29sYm94LmNsYXNzJztcclxuaW1wb3J0IHsgRG9tRHVtbXlOb2RlTWFuYWdlciB9IGZyb20gJy4uL2R1bW15Tm9kZXMvZG9tRHVtbXlOb2RlTWFuYWdlci5jbGFzcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgWG1sQ3Vyc29yIHtcclxuICB4bWxEb2N1bWVudFJvb3ROb2RlOiBFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gIGRvbUR1bW15Tm9kZU1hbmFnZXIgPSBuZXcgRG9tRHVtbXlOb2RlTWFuYWdlcigpO1xyXG5cclxuICBwdWJsaWMgU3RhcnRQb3MgPSBuZXcgWG1sQ3Vyc29yUG9zKCk7XHJcbiAgcHVibGljIEVuZFBvcyA9IG5ldyBYbWxDdXJzb3JQb3MoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogaXMgdGhlcmUgbm90aGluZyBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgcG9zP1xyXG4gICAqL1xyXG4gIGlzRW1wdHlTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5TdGFydFBvcy5lcXVhbHModGhpcy5FbmRQb3MpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc29ydFN0YXJ0QW5kRW5kKCkge1xyXG4gICAgaWYgKHRoaXMuU3RhcnRQb3MuQWN0dWFsTm9kZSAmJiB0aGlzLkVuZFBvcy5BY3R1YWxOb2RlKSB7XHJcbiAgICAgIGlmICh0aGlzLlN0YXJ0UG9zLkFjdHVhbE5vZGUuaXNTYW1lTm9kZSh0aGlzLkVuZFBvcy5BY3R1YWxOb2RlKSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuU3RhcnRQb3MuUG9zQXROb2RlID09PSBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29ySW5zaWRlVGV4dE5vZGUgJiZcclxuICAgICAgICAgIHRoaXMuRW5kUG9zLlBvc0F0Tm9kZSA9PT0gWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluc2lkZVRleHROb2RlICYmXHJcbiAgICAgICAgICB0aGlzLlN0YXJ0UG9zLlBvc0luVGV4dG5vZGUgPiB0aGlzLkVuZFBvcy5Qb3NJblRleHRub2RlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnN3YXBTdGFydEFuZEVuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjb21wYXJlZCA9IHRoaXMuU3RhcnRQb3MuQWN0dWFsTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzLkVuZFBvcy5BY3R1YWxOb2RlKTtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICAgIGlmICghKGNvbXBhcmVkICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcpKSB7XHJcbiAgICAgICAgICB0aGlzLnN3YXBTdGFydEFuZEVuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3dhcFN0YXJ0QW5kRW5kKCkge1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuU3RhcnRQb3MuQWN0dWFsTm9kZTtcclxuICAgIGNvbnN0IHBvcyA9IHRoaXMuU3RhcnRQb3MuUG9zQXROb2RlO1xyXG4gICAgY29uc3QgdGV4dCA9IHRoaXMuU3RhcnRQb3MuUG9zSW5UZXh0bm9kZTtcclxuICAgIHRoaXMuU3RhcnRQb3MuU2V0Q3Vyc29yKHRoaXMuRW5kUG9zLkFjdHVhbE5vZGUsIHRoaXMuRW5kUG9zLlBvc0F0Tm9kZSwgdGhpcy5FbmRQb3MuUG9zSW5UZXh0bm9kZSk7XHJcbiAgICB0aGlzLkVuZFBvcy5TZXRDdXJzb3Iobm9kZSwgcG9zLCB0ZXh0KTtcclxuICB9XHJcblxyXG4gIHNob3coKSB7XHJcbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgdGhpcy5zaG93MihzZWxlY3Rpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG93Q3Vyc29yOiB1bmFibGUgdG8gZ2V0IFwid2luZG93LmdldFNlbGVjdGlvblwiJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3cyKHNlbGVjdGlvbjogU2VsZWN0aW9uKSB7XHJcbiAgICBpZiAoIXNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIGFsbCBzZWxlY3RlZCBjbGFzc2VzXHJcbiAgICBjb25zdCBlbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZWxlY3RlZCcpO1xyXG4gICAgW10uZm9yRWFjaC5jYWxsKGVsZW1zLCBmdW5jdGlvbihlbCkge1xyXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc3RhcnRTZWxlY3Rpb24gPSBYbWxDdXJzb3JQb3MuZ2V0U2VsZWN0aW9uRm9yUG9zKHRoaXMuU3RhcnRQb3MpO1xyXG4gICAgaWYgKHRoaXMuRW5kUG9zICYmIHRoaXMuRW5kUG9zLkFjdHVhbE5vZGUgJiYgIXRoaXMuRW5kUG9zLmVxdWFscyh0aGlzLlN0YXJ0UG9zKSkge1xyXG4gICAgICAvLyBzdGFydCArIGVuZCBwb3NcclxuICAgICAgY29uc3QgZW5kU2VsZWN0aW9uID0gWG1sQ3Vyc29yUG9zLmdldFNlbGVjdGlvbkZvclBvcyh0aGlzLkVuZFBvcyk7XHJcbiAgICAgIHNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KHN0YXJ0U2VsZWN0aW9uLm5vZGUsIHN0YXJ0U2VsZWN0aW9uLm9mZnNldCwgZW5kU2VsZWN0aW9uLm5vZGUsIGVuZFNlbGVjdGlvbi5vZmZzZXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gb25seSBzdGFydCBwb3NcclxuICAgICAgc2VsZWN0aW9uLnNldFBvc2l0aW9uKHN0YXJ0U2VsZWN0aW9uLm5vZGUsIHN0YXJ0U2VsZWN0aW9uLm9mZnNldCk7XHJcblxyXG4gICAgICAvLyBzZWxlY3QgdGFnIGJ5IGFkZGluZyBcInNlbGVjdFwiIGNsYXNzXHJcbiAgICAgIGlmICh0aGlzLlN0YXJ0UG9zLlBvc0F0Tm9kZSA9PT0gWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvck9uQ29tcGxldGVOb2RlKSB7XHJcbiAgICAgICAgY29uc3QgYXNFbGVtID0gdGhpcy5TdGFydFBvcy5BY3R1YWxOb2RlIGFzIEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKGFzRWxlbSAmJiBhc0VsZW0uY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICBhc0VsZW0uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdzZWxlY3RlZCEnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgbm8gYXNFbGVtLmNsYXNzTGlzdCBmb3Igc2VsZWN0ISAke1htbFRvb2xib3guR2V0Tm9kZURlYnVnQ29udGV4dChhc0VsZW0pfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25Qb3Mge1xyXG4gIG5vZGU6IE5vZGU7XHJcbiAgb2Zmc2V0OiBudW1iZXI7XHJcbn1cclxuIl19