UNPKG

@syncfusion/ej2-documenteditor

Version:

Feature-rich document editor control with built-in support for context menu, options pane and dialogs.

743 lines (742 loc) 35 kB
import { isNullOrUndefined } from '@syncfusion/ej2-base'; import { ElementBox, ParagraphWidget, BookmarkElementBox, FootnoteElementBox, HeaderFooterWidget, ShapeElementBox } from '../viewer/page'; import { WCharacterFormat } from '../format/character-format'; import { WRowFormat } from '../format/row-format'; import { revisionActionEvent } from '../../base/index'; /** * The revision class which holds the information related to changes made in the document */ var Revision = /** @class */ (function () { function Revision(documentHelper, author, date) { /** * Gets or sets the author name who made the change * * @private */ this.author = null; /** * Indicates when the track changes made * * @private */ this.date = null; /** * Holds the reference of the items which are under this revision. * * @private */ this.range = []; /** * @private */ this.revisionID = ''; /** * Used to update cursor position by ensuring items were removed or not */ this.isContentRemoved = false; this.isTableRevision = false; /** * Indicates whether to skip unlinking ranges for table elements. */ this.canSkipTableItems = false; this.skipUnLinkElement = false; this.author = author; if (isNullOrUndefined(this.author)) { this.author = "Unknown"; } this.date = date; this.owner = documentHelper; } Revision.prototype.handleAcceptReject = function (isFromAccept, reLayoutTable) { this.owner.selectionModule.selectRevision(this); var selection = this.owner.selectionModule; var startPos = selection.start; var endPos = selection.end; if (!selection.start.isExistBefore(selection.end)) { startPos = selection.end; endPos = selection.start; } var blockInfo = selection.getParagraphInfo(startPos); var removeChanges = (!isNullOrUndefined(isFromAccept)) && ((this.revisionType === 'MoveFrom' || this.revisionType === 'Deletion') && isFromAccept) || ((this.revisionType === 'Insertion' || this.revisionType === 'MoveTo') && !isFromAccept); var comments; if (removeChanges) { var commentInfo = this.owner.editorModule.getSelectedComments(); if (commentInfo.commentEndInfo.length > 0 || commentInfo.commentStartInfo.length > 0) { comments = this.owner.editorModule.checkAndRemoveComments(false, true); } else { removeChanges = false; } } this.owner.editorModule.initHistory(isFromAccept ? 'Accept Change' : 'Reject Change'); var fieldBegin = selection.getHyperlinkField(); if (isFromAccept && this.revisionType === 'Deletion' && !isNullOrUndefined(fieldBegin) && this.range.indexOf(fieldBegin) !== -1 && this.range.indexOf(fieldBegin.fieldEnd) !== -1 && this.range.indexOf(fieldBegin.fieldSeparator) === this.range.indexOf(fieldBegin.fieldEnd) - 1) { this.owner.editorHistoryModule.currentBaseHistoryInfo.isHyperlinkField = true; } this.owner.editorHistoryModule.currentBaseHistoryInfo.markerData.push(this.owner.editorModule.getMarkerData(undefined, undefined, this)); if (this.revisionType === 'Deletion') { blockInfo = selection.getParagraphInfo(this.owner.selectionModule.start); selection.editPosition = this.owner.selectionModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString()); } else { selection.editPosition = this.owner.selectionModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString()); } this.owner.editorModule.updateInsertPosition(); this.isContentRemoved = false; this.canSkipTableItems = false; this.skipUnLinkElement = false; // Implement to accept/reject the revision if (this.revisionType === 'Insertion' || this.revisionType === 'Deletion' || this.revisionType === 'MoveFrom' || this.revisionType === 'MoveTo') { this.owner.isShiftingEnabled = true; var rangeIndex = 0; while (this.range.length > 0) { if (this.range[rangeIndex] instanceof ElementBox || this.range[rangeIndex] instanceof WCharacterFormat || this.range[rangeIndex] instanceof WRowFormat) { if (this.range[rangeIndex] instanceof BookmarkElementBox && isFromAccept && this.revisionType === 'Deletion') { var inline = this.range[rangeIndex]; if (this.owner.documentHelper.bookmarks.containsKey(inline.name)) { this.owner.documentHelper.bookmarks.remove(inline.name); } } var moveToNextItem = this.unlinkRangeItem(this.range[rangeIndex], this, isFromAccept, startPos, endPos); if (moveToNextItem) { rangeIndex++; } else { rangeIndex = 0; } } else { break; } } } this.isTableRevision = false; if (this.isContentRemoved) { var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition); this.owner.selectionModule.selectContent(textPosition, true); this.owner.editorModule.updateEndPosition(); } else { selection.selectRange(startPos, endPos); this.owner.editorModule.updateHistoryPosition(endPos, false); } if (this.owner.editorHistoryModule && this.owner.editorHistoryModule.currentBaseHistoryInfo && this.owner.editorHistoryModule.currentBaseHistoryInfo.action !== 'BackSpace') { this.owner.editorHistoryModule.currentBaseHistoryInfo.removedNodes.reverse(); } if (this.owner.editorHistoryModule) { if (this.owner.trackChangesPane.isTrackingPageBreak) { this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'TrackingPageBreak'; this.owner.trackChangesPane.isTrackingPageBreak = false; } var editorHistory = this.owner.editorHistoryModule; if (editorHistory.currentHistoryInfo && (editorHistory.currentHistoryInfo.action === 'Accept All' || editorHistory.currentHistoryInfo.action === 'Reject All')) { if (this.owner.documentHelper.blockToShift) { this.owner.documentHelper.layout.shiftLayoutedItems(false); } } editorHistory.updateHistory(); if (removeChanges && this.owner.editorHistory && !isNullOrUndefined(this.owner.editorHistory.currentHistoryInfo)) { for (var k = 0; k < comments.length; k++) { this.owner.editorModule.initInsertInline(comments[k], false); } this.owner.editorHistory.currentHistoryInfo.endPosition = this.owner.selection.startOffset; this.owner.editorHistory.updateComplexHistory(); } } if (reLayoutTable && this.owner.selectionModule.start.paragraph.isInsideTable) { var table = this.owner.selectionModule.start.paragraph.containerWidget.ownerTable; this.owner.documentHelper.layout.reLayoutTable(table); } this.owner.editorModule.reLayout(this.owner.selectionModule); if (blockInfo.paragraph.isInHeaderFooter) { this.owner.editorModule.updateHeaderFooterWidget(); } }; Revision.prototype.handleGroupAcceptReject = function (isAccept) { if (this.owner.trackChangesPane.tableRevisions.containsKey(this)) { this.owner.editorModule.initComplexHistory(isAccept ? 'Accept All' : 'Reject All'); var groupingAcceptReject = this.owner.trackChangesPane.tableRevisions.get(this); for (var i = groupingAcceptReject.length - 1; i >= 0; i--) { if (isAccept) { groupingAcceptReject[i].handleAcceptReject(true); } else { groupingAcceptReject[i].handleAcceptReject(false); } } if (this.owner.editorHistoryModule) { this.owner.editorHistoryModule.updateComplexHistory(); } if (this.owner.selectionModule.start.paragraph.isInsideTable) { var table = this.owner.selectionModule.start.paragraph.containerWidget.ownerTable; this.owner.documentHelper.layout.reLayoutTable(table); } } }; /** * Method which accepts the selected revision, revision marks will be removed and changes will be included in the viewer. * * @returns {void} */ Revision.prototype.accept = function () { var eventArgs = { author: this.author, cancel: false, revisionType: this.revisionType, actionType: 'Accept', source: this }; this.owner.trigger(revisionActionEvent, eventArgs); if (eventArgs.cancel) { return; } if (!this.owner.documentHelper.isTrackedOnlyMode) { if (!this.owner.revisions.skipGroupAcceptReject && this.range[0] instanceof WRowFormat && this.owner.trackChangesPane.tableRevisions.containsKey(this)) { this.handleGroupAcceptReject(true); } else { this.handleAcceptReject(true, true); } } }; /** * Method which rejects the selected revision, revision marks will be removed leaving the original content. */ Revision.prototype.reject = function () { var eventArgs = { author: this.author, cancel: false, revisionType: this.revisionType, actionType: 'Reject', source: this }; this.owner.trigger(revisionActionEvent, eventArgs); if (eventArgs.cancel) { return; } if (!this.owner.documentHelper.isTrackedOnlyMode) { if (!this.owner.revisions.skipGroupAcceptReject && this.range[0] instanceof WRowFormat && this.owner.trackChangesPane.tableRevisions.containsKey(this)) { this.handleGroupAcceptReject(false); } else { this.handleAcceptReject(false, true); } } }; /** * Select the current revision. */ Revision.prototype.select = function () { this.owner.selectionModule.selectRevision(this); }; /** * Unlinks revision and its assosiated range * @private * @param item * @param revision * @param isFromAccept */ /* eslint-disable */ Revision.prototype.unlinkRangeItem = function (item, revision, isFromAccept, start, end) { if (this.isTableRevision) { this.removeRangeRevisionForItem(item); if (revision.range.length === 0) { this.owner.revisions.remove(revision); } return false; } var removeChanges = (!isNullOrUndefined(isFromAccept)) && ((revision.revisionType === 'MoveFrom' || revision.revisionType === 'Deletion') && isFromAccept) || ((revision.revisionType === 'Insertion' || revision.revisionType === 'MoveTo') && !isFromAccept); if (this.owner.selectionModule.isTOC()) { if (removeChanges) { this.owner.editorModule.deleteSelectedContents(this.owner.selectionModule, true); if (revision.range.length === 0) { this.owner.revisions.remove(revision); } this.isContentRemoved = true; this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'BackSpace'; } else { while (this.range.length > 0) { var currentElement = this.range[0]; this.removeRangeRevisionForItem(currentElement); if (revision.range.length === 0) { this.owner.revisions.remove(revision); } } this.owner.editorModule.addRemovedNodes(this.revisionID); this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'AcceptTOC'; } return false; } if (item instanceof ElementBox && !this.canSkipTableItems) { if (removeChanges) { if (!this.skipeElementRemoval(item)) { this.owner.editorModule.addRemovedNodes(item.clone()); } else { this.skipUnLinkElement = true; return true; } } else { // Bug 873011: Handled the hyperlink formatting preservation when rejecting the RemoveHyperlink action. var fieldBegin = this.owner.selectionModule.getHyperlinkField(); if (!isFromAccept && !isNullOrUndefined(fieldBegin) && fieldBegin == item && !isNullOrUndefined(fieldBegin.fieldEnd)) { this.owner.editorModule.initComplexHistory('ClearRevisions'); this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'ClearRevisions'; this.updateRevisionID(); this.removeRevisionFromPara(start, end); if (!isNullOrUndefined(this.owner.editorHistoryModule)) { this.owner.editorHistoryModule.currentBaseHistoryInfo.isHyperlinkField = true; var endInfo = this.owner.selectionModule.getParagraphInfo(end); var endIndex = this.owner.selectionModule.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString()); this.owner.editorHistoryModule.currentBaseHistoryInfo.endPosition = endIndex; this.owner.editorHistoryModule.currentBaseHistoryInfo.selectionEnd = endIndex; this.owner.editorHistoryModule.updateHistory(); } if (this.owner.enableTrackChanges) { this.owner.enableTrackChanges = false; this.owner.editorModule.updateHyperlinkFormat(this.owner.selectionModule); this.owner.enableTrackChanges = true; } else { this.owner.editorModule.updateHyperlinkFormat(this.owner.selectionModule); } if (this.owner.editorHistoryModule && !isNullOrUndefined(this.owner.editorHistoryModule.currentHistoryInfo)) { this.owner.editorHistoryModule.updateComplexHistory(); } } else { this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'ClearRevisions'; this.updateRevisionID(); this.removeRevisionFromPara(start, end); } // Set false to this because we retrived the revision based on above action (after this iteration we have changed the action basded the below property) this.owner.trackChangesPane.isTrackingPageBreak = false; } } else if (!this.canSkipTableItems && (item instanceof WCharacterFormat) && (!removeChanges)) { this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'ClearRevisions'; this.updateRevisionID(); this.removeRevisionFromPara(start, end); } else if (item instanceof WRowFormat && !removeChanges) { this.isTableRevision = true; var tableWidget = item.ownerBase.ownerTable; var currentRow = item.ownerBase; this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'RemoveRowTrack'; this.owner.editorModule.cloneTableToHistoryInfo(tableWidget.combineWidget(this.owner.viewer)); } removeChanges = removeChanges && !this.canSkipTableItems; if (item instanceof ElementBox && removeChanges) { var currentPara = item.line.paragraph; this.removeRevisionItemsFromRange(item); if (item instanceof FootnoteElementBox) { if (item.footnoteType === 'Footnote') { this.owner.editorModule.removeFootnote(item); } else { this.owner.editorModule.removeEndnote(item); } } else if (item instanceof ShapeElementBox) { this.owner.editorModule.removeDeletedShapeRevision(item); } this.removeItem(item); this.isContentRemoved = true; var skipRelayout = !isNullOrUndefined(currentPara) && !isNullOrUndefined(currentPara.bodyWidget) && currentPara.bodyWidget instanceof HeaderFooterWidget && (isNullOrUndefined(currentPara.bodyWidget.page) || (!isNullOrUndefined(currentPara.bodyWidget.page) && currentPara.bodyWidget.page.index === -1)); if (!skipRelayout) { this.owner.documentHelper.layout.reLayoutParagraph(currentPara, 0, 0); } if (isNullOrUndefined(currentPara.childWidgets)) { var textPosition = this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.owner.selectionModule.editPosition); this.owner.selectionModule.selectContent(textPosition, true); } } else if (item instanceof WCharacterFormat && removeChanges) { this.isContentRemoved = true; this.skipUnLinkElement = false; this.removeRevisionItemsFromRange(item); if (revision.range.length === 1) { this.owner.editorModule.deleteSelectedContents(this.owner.selectionModule, true); } else { this.owner.editorModule.deleteSelectedContents(this.owner.selectionModule, true); this.removeRevisionFromPara(start, end); var rangeIndex = revision.range.indexOf(item); if (rangeIndex >= 0) { revision.range.splice(rangeIndex, 1); } this.owner.trackChangesPane.updateCurrentTrackChanges(revision); while (this.range.length > 0) { this.removeRangeRevisionForItem(this.range[0]); } } this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'BackSpace'; this.owner.editorHistoryModule.currentBaseHistoryInfo.isAcceptOrReject = isFromAccept ? 'Accept' : 'Reject'; } else if (item instanceof WRowFormat && removeChanges) { var tableWidget = item.ownerBase.ownerTable; tableWidget = tableWidget.combineWidget(this.owner.viewer); var currentRow = item.ownerBase; this.removeRevisionItemsFromRange(item); this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'DeleteCells'; this.owner.editorModule.cloneTableToHistoryInfo(tableWidget); this.owner.editorModule.removeDeletedCellRevision(currentRow); this.isContentRemoved = true; var startCell = this.owner.selectionModule.start.paragraph.associatedCell; var endCell = this.owner.selectionModule.end.paragraph.associatedCell; if (startCell && endCell) { this.owner.editorModule.onConfirmedCellDeletion(currentRow, this.owner.selectionModule, startCell.rowIndex, endCell.rowIndex, startCell.columnIndex, endCell.columnIndex, true, 1, true); } tableWidget.removeChild(tableWidget.childWidgets.indexOf(currentRow)); this.canSkipTableItems = true; // Before destroying the table row widget, delete the field element from the row. this.owner.editorModule.removeFieldInBlock(currentRow); // Before destroying the table row widget, delete the bookmark element from the row. this.owner.editorModule.removeFieldInBlock(currentRow, true); // Before destroying the table row widget, delete the content control element from the row. this.owner.editorModule.removeFieldInBlock(currentRow, undefined, true); //currentRow.destroy(); if (tableWidget.childWidgets.length === 0) { this.owner.selectionModule.editPosition = this.owner.selectionModule.getHierarchicalIndex(tableWidget, '0'); this.owner.editorModule.removeBlock(tableWidget); //tableWidget.destroy(); } else { this.owner.editorModule.updateTable(tableWidget, true); } } // if the range is of row format, we will remove the row and for history preservation we use whole table to be cloned, hence skipping this part if (!(item instanceof WRowFormat) || !removeChanges) { if (!this.skipUnLinkElement) { this.removeRangeRevisionForItem(item); if (removeChanges && item instanceof BookmarkElementBox) { this.owner.editorModule.removedBookmarkElements.push(item); } if (item instanceof BookmarkElementBox) { if (this.owner.documentHelper.bookmarks.containsKey(item.name)) { if (this.owner.enableCollaborativeEditing && !isNullOrUndefined(this.owner.editorHistory.currentBaseHistoryInfo)) { this.owner.editorHistory.currentBaseHistoryInfo.markerData.push({ bookmarkName: item.name }); } this.owner.documentHelper.bookmarks.remove(item.name); } } } } if (revision.range.length === 0) { this.owner.revisions.remove(revision); } return false; }; Revision.prototype.removeRevisionFromPara = function (start, end) { var blockInfo = this.owner.selectionModule.getParagraphInfo(start); var endBlockInfo = this.owner.selectionModule.getParagraphInfo(end); var para = blockInfo.paragraph; while (para instanceof ParagraphWidget) { if (para.characterFormat.revisions.length > 0) { for (var i = 0; i < para.characterFormat.revisions.length; i++) { if (para.characterFormat.revisions[i].range.length === 0) { var revisionIndex = para.characterFormat.revisions.indexOf(para.characterFormat.revisions[i]); para.characterFormat.revisions.splice(revisionIndex, 1); i--; } } } if (endBlockInfo.paragraph === para) { para = undefined; } else { para = para.nextWidget; } } }; Revision.prototype.updateRevisionID = function () { this.owner.editorModule.addRemovedNodes(this.revisionID); while (this.range.length > 0) { this.removeRangeRevisionForItem(this.range[0], true); } this.owner.trackChangesPane.updateCurrentTrackChanges(this); }; /* eslint-disable @typescript-eslint/no-explicit-any */ Revision.prototype.removeRevisionItemsFromRange = function (item) { if (item.revisions.length > 0) { for (var revisionIndex = 0; revisionIndex < item.revisions.length; revisionIndex++) { var currentRevision = item.revisions[revisionIndex]; if (this.revisionID !== currentRevision.revisionID) { var rangeIndex = currentRevision.range.indexOf(item); item.revisions[revisionIndex].range.splice(rangeIndex, 1); this.owner.trackChangesPane.updateCurrentTrackChanges(item.revisions[revisionIndex]); } if (currentRevision.range.length === 0) { this.owner.revisions.remove(currentRevision); } } } }; /** * Method to clear linked ranges in revision * * @private * @param {any} item - Specifies the item * @returns {void} */ /* eslint-disable @typescript-eslint/no-explicit-any */ Revision.prototype.removeRangeRevisionForItem = function (item, skipUpdate) { var revisionIndex = item.revisions.indexOf(this); if (revisionIndex >= 0) { item.revisions.splice(revisionIndex, 1); var rangeIndex = this.range.indexOf(item); this.range.splice(rangeIndex, 1); if (!skipUpdate) { this.owner.trackChangesPane.updateCurrentTrackChanges(this); } } }; /** * @private * @param {Element} element - Specifies the element. * @returns {boolean} Resturs skip element removal */ Revision.prototype.skipeElementRemoval = function (element) { var elementPara = element.paragraph; if (elementPara.characterFormat.revisions.length > 0) { for (var i = 0; i < elementPara.characterFormat.revisions.length; i++) { var currentRevision = elementPara.characterFormat.revisions[i]; var rangeIndex = currentRevision.range.indexOf(element); if (rangeIndex >= 0 && currentRevision.revisionID === this.revisionID) { return true; } } } return false; }; Revision.prototype.removeRevisionFromRow = function (row) { this.owner.editorModule.unlinkRangeFromRevision(row.rowFormat); //this.owner.editor.addRemovedRevisionInfo(row.rowFormat, undefined); for (var i = 0; i < row.childWidgets.length; i++) { var cellWidget = row.childWidgets[i]; this.owner.editorModule.removeRevisionForCell(cellWidget, false); } }; Revision.prototype.removeItem = function (element) { var paraWidget = element.line.paragraph; this.owner.editorModule.unLinkFieldCharacter(element); var elementIndex = element.line.children.indexOf(element); var previousNode = element.previousNode; element.line.children.splice(elementIndex, 1); if (!isNullOrUndefined(previousNode)) { this.owner.editorModule.combineElementRevisionToPrevNxt(previousNode); } var paraFloatingElementIndex = element.line.paragraph.floatingElements.indexOf(element); element.line.paragraph.floatingElements.splice(paraFloatingElementIndex, 1); var blockFloatingElementIndex = element.line.paragraph.bodyWidget.floatingElements.indexOf(element); if (blockFloatingElementIndex > -1) { element.line.paragraph.bodyWidget.floatingElements.splice(blockFloatingElementIndex, 1); } this.owner.editorModule.removeEmptyLine(paraWidget); }; Revision.prototype.canSkipCloning = function () { if (!isNullOrUndefined(this.owner) && this.owner.editorHistoryModule && this.owner.editorHistoryModule.currentBaseHistoryInfo) { var baseHistoryInfo = this.owner.editorHistoryModule.currentBaseHistoryInfo; if (baseHistoryInfo.action === 'DeleteCells') { return true; } } return false; }; /** * @private * */ Revision.prototype.destroy = function () { this.author = undefined; this.revisionType = undefined; this.revisionID = undefined; this.date = undefined; this.range = []; this.range = undefined; this.owner = undefined; }; /** * @private * @returns {Revision} - Returns revision */ Revision.prototype.clone = function () { if (this.canSkipCloning()) { return this; } var revision = new Revision(undefined, this.author, this.date); revision.revisionID = this.revisionID; revision.revisionType = this.revisionType; return revision; }; /** * @private */ Revision.prototype.cloneRevision = function () { var revision = new Revision(this.owner, this.author, this.date); revision.revisionID = this.revisionID; revision.revisionType = this.revisionType; revision.author = this.author; revision.date = this.date; return revision; }; /** * Method to clone the revisions for the element * * @param {Revision[]} revisions - revision array. * @returns {string[]} - returns clones revisions. */ Revision.cloneRevisions = function (revisions) { var clonedRevisions = []; for (var i = 0; i < revisions.length; i++) { clonedRevisions.push(revisions[i].revisionID); } return clonedRevisions; }; return Revision; }()); export { Revision }; /** * Represents the revision collections in the document. */ var RevisionCollection = /** @class */ (function () { function RevisionCollection(owner) { /** * @private */ this.changes = []; /** * @private */ this.skipGroupAcceptReject = false; this.owner = owner; } /** * @private */ RevisionCollection.prototype.get = function (index) { if (index >= this.changes.length || index < 0) { throw new ReferenceError('Provided index is not within the range'); } return this.changes[index]; }; Object.defineProperty(RevisionCollection.prototype, "length", { get: function () { return this.changes.length; }, enumerable: true, configurable: true }); RevisionCollection.prototype.remove = function (revision) { if (isNullOrUndefined(revision) || this.changes.indexOf(revision) < 0) { return; } this.changes.splice(this.changes.indexOf(revision), 1); if (this.owner.trackChangesPane.revisions.indexOf(revision) !== -1) { var index = this.owner.trackChangesPane.revisions.indexOf(revision); var removeChild = !(this.owner.trackChangesPane.tableRevisions.containsKey(revision) && (this.owner.trackChangesPane.tableRevisions.get(revision))[(this.owner.trackChangesPane.tableRevisions.get(revision)).length - 1] !== revision); var changesSingleView = this.owner.trackChangesPane.changes.get(revision); if (removeChild) { this.owner.trackChangesPane.changesInfoDiv.removeChild(changesSingleView.outerSingleDiv); } this.owner.trackChangesPane.revisions.splice(index, 1); this.owner.trackChangesPane.changes.remove(revision); if (this.owner.trackChangesPane.renderedChanges.containsKey(revision)) { this.owner.trackChangesPane.renderedChanges.remove(revision); } if (this.owner.trackChangesPane.tableRevisions.containsKey(revision)) { this.owner.trackChangesPane.tableRevisions.remove(revision); } } }; /** * Method which accepts all the revision in the revision collection * * @returns {void} */ RevisionCollection.prototype.acceptAll = function () { if (!this.owner.isReadOnly && !this.owner.documentHelper.isTrackedOnlyMode) { this.handleRevisionCollection(true); } }; /** * Method which rejects all the revision in the revision collection * * @returns {void} */ RevisionCollection.prototype.rejectAll = function () { if (!this.owner.isReadOnly && !this.owner.documentHelper.isTrackedOnlyMode) { this.handleRevisionCollection(false); } }; /** * @private * @param {boolean} isfromAcceptAll - Specifies the is accept all. * @param {Revision[]} changes - Specifies the revisions. * @returns {void} */ RevisionCollection.prototype.handleRevisionCollection = function (isfromAcceptAll, changes) { this.skipGroupAcceptReject = true; var selection = this.owner.selectionModule; var startPos = selection.start; var endPos = selection.end; var revisionCollec = changes ? changes : this.changes; if (revisionCollec.length <= 0) { return; } if (!selection.start.isExistBefore(selection.end)) { startPos = selection.end; endPos = selection.start; } startPos = startPos.clone(); endPos = endPos.clone(); if (isfromAcceptAll) { this.owner.editorModule.initComplexHistory('Accept All'); } else { this.owner.editorModule.initComplexHistory('Reject All'); } while (revisionCollec.length > 0) { if (isfromAcceptAll) { revisionCollec[0].accept(); } else { revisionCollec[0].reject(); } if (changes) { revisionCollec.splice(0, 1); } if (this.owner.enableHeaderAndFooter) { this.owner.editorModule.updateHeaderFooterWidget(); } } if (!isNullOrUndefined(selection.editPosition)) { var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition); this.owner.selectionModule.selectContent(textPosition, true); } if (this.owner.editorHistoryModule) { this.owner.editorHistoryModule.updateComplexHistory(); if (isNullOrUndefined(selection.editPosition)) { this.owner.editorHistoryModule.undoStack.pop(); } } this.owner.editorModule.isSkipOperationsBuild = this.owner.enableCollaborativeEditing; this.owner.editorModule.reLayout(this.owner.selectionModule, false); this.owner.editorModule.isSkipOperationsBuild = false; this.skipGroupAcceptReject = false; }; RevisionCollection.prototype.clear = function () { this.changes = []; }; /** * Disposes the internal objects which are maintained. * @private */ RevisionCollection.prototype.destroy = function () { if (this.changes) { for (var i = 0; i < this.changes.length; i++) { var revision = this.changes[i]; revision.destroy(); } this.changes = []; } this.changes = undefined; this.owner = undefined; }; return RevisionCollection; }()); export { RevisionCollection };