UNPKG

devexpress-richedit

Version:

DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.

42 lines (41 loc) 2.21 kB
import { Field } from '../../model/fields/field'; import { RemoveHyperlinkHistoryItem } from '../../model/history/items/remove-hyperlink-history-item'; import { ControlOptions } from '../../model/options/control'; import { LinkedInterval } from '../../model/position/linked-interval'; import { IntervalAlgorithms } from '@devexpress/utils/lib/intervals/algorithms'; import { FixedInterval } from '@devexpress/utils/lib/intervals/fixed'; import { CommandBase } from '../command-base'; import { SimpleCommandState } from '../command-states'; export class RemoveHyperlinksCommand extends CommandBase { getState() { return new SimpleCommandState(this.isEnabled()); } isEnabled() { return super.isEnabled() && ControlOptions.isEnabled(this.control.modelManager.richOptions.control.hyperlinks); } executeCore(_state, options) { var subDocument = options.subDocument; var fields = subDocument.fields; if (fields.length < 1) return false; var history = this.history; var interval = options.intervalsInfo.interval; var fieldIndex = Math.max(0, Field.normedBinaryIndexOf(fields, interval.start)); var field = fields[fieldIndex].getAbsolutelyTopLevelField(); var linkedInterval = new LinkedInterval(subDocument.positionManager, interval); history.addTransaction(() => { for (fieldIndex = field.index; (field = fields[fieldIndex]) && field.getFieldStartPosition() < linkedInterval.end;) { if (field.getHyperlinkInfo() && IntervalAlgorithms.getIntersection(FixedInterval.fromPositions(field.getCodeStartPosition(), field.getResultEndPosition()), interval)) history.addAndRedo(new RemoveHyperlinkHistoryItem(this.modelManipulator, subDocument, field)); else fieldIndex++; } }); this.selection.correctAfterTextBufferChanged(); linkedInterval.destructor(subDocument.positionManager); return true; } DEPRECATEDCorrectlMainCommandOptions(options) { options.intervalsInfo.interval = this.selection.lastSelectedInterval; } }