devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
388 lines (387 loc) • 20.7 kB
JavaScript
import { formatMessage } from 'devextreme/localization';
import { RichEditUnit } from '../common/utils/unit-converter';
import { convertToFunction } from '../common/utils/utils';
import { AutoCorrectReplaceInfo, AutoCorrectSettings } from '../common/model/options/auto-correct';
import { BookmarksSettings, BookmarksVisibility } from '../common/model/options/bookmarks';
import { FieldsSettings } from '../common/model/options/fields';
import { FontsSettings } from '../common/model/options/fonts';
import { MailMergeOptions } from '../common/model/options/mail-merge';
import { PdfSettings } from '../common/model/options/pdf';
import { SearchSettings } from '../common/model/options/search';
import { PrintingSettings } from '../common/model/options/printing';
import { DocumentProtectionSettings } from '../common/model/options/protection';
import { SpellCheckerSettings } from '../common/model/options/spell-checker';
import { ViewSettings } from '../common/view-settings/views-settings';
import { isDefined } from '@devexpress/utils/lib/utils/common';
import { ContextMenuSettings } from './context-menu/settings';
import { DataSourceHelper } from './data-source-helper';
import { addContextTabCategories, addTabs } from './public/ribbon/creator';
import { Ribbon } from './public/ribbon/ribbon';
import { PrintMode } from './public/rich-edit';
import { IntervalApi } from './model-api/interval';
export class Settings {
width = "100%";
height = "500px";
nonce;
readOnly = false;
unit = RichEditUnit.Inch;
exportUrl = "";
dataSource = null;
rawDataSource = null;
autoCorrect = new AutoCorrectSettings();
bookmarks = new BookmarksSettings();
documentProtection = new DocumentProtectionSettings();
fields = new FieldsSettings();
mailMerge = new MailMergeOptions();
printing = new PrintingSettings();
ribbon = new Ribbon();
view = new ViewSettings();
pdf = new PdfSettings();
search = new SearchSettings();
fonts = new FontsSettings();
spellCheck = new SpellCheckerSettings();
confirmOnLosingChanges = new ConfirmOnLosingChangesSettings();
contextMenuSettings = new ContextMenuSettings();
onSelectionChanged;
onBeforeSend;
onDocumentFormatted;
onDocumentLoaded;
onDocumentChanged;
onActiveSubDocumentChanged;
onGotFocus;
onLostFocus;
onHyperlinkClick;
onPointerDown;
onPointerUp;
onKeyDown;
onKeyUp;
onCalculateDocumentVariable;
onCalculateDocumentVariableAsync;
onContentInserted;
onContentRemoved;
onCharacterPropertiesChanged;
onParagraphPropertiesChanged;
onAutoCorrect;
onSaving;
onSaved;
onCustomCommandExecuted;
onPdfExporting;
onPdfExported;
onCommandStateChanged;
onContextMenuShowing;
static parse(settings, subDocumentCreator) {
const result = new Settings();
if (!settings)
settings = {};
this.parseCommonSettings(settings, result);
this.parseAutoCorrectSettings(settings, result);
this.parseBookmarksSettings(settings, result);
this.parseDocumentProtectionSettings(settings, result);
this.parseFieldsSettings(settings, result);
this.parsePrintingSettings(settings, result);
this.parseRibbonSettings(settings, result);
this.parseViewsSettings(settings, result);
this.parsePdfSettings(settings, result);
result.fonts.init(settings.fonts);
this.parseConfirmOnLosingChangesSettings(settings, result);
this.parseMailMergeSettings(settings, result);
this.parseSpellCheckSettings(settings, result);
this.parseEventHandlers(settings.events, result);
this.parseContextMenuSettings(settings, result);
this.parseSearchSettings(settings, result, subDocumentCreator);
if (result.onSaved && result.exportUrl === "")
console.log('The Saved event does nothing. To learn more, follow ' +
'https://docs.devexpress.com/AspNetCore/400972/office-inspired-controls/controls/rich-edit/document-management#save-a-document');
return result;
}
static parseCommonSettings(settings, result) {
if (isDefined(settings.width))
result.width = settings.width;
if (isDefined(settings.height))
result.height = settings.height;
if (isDefined(settings.readOnly))
result.readOnly = settings.readOnly;
if (isDefined(settings.unit))
result.unit = settings.unit;
if (isDefined(settings.exportUrl))
result.exportUrl = settings.exportUrl;
if (isDefined(settings.nonce))
result.nonce = settings.nonce;
}
static parseAutoCorrectSettings(settings, result) {
const autoCorrect = settings.autoCorrect;
if (isDefined(autoCorrect)) {
if (isDefined(autoCorrect.correctTwoInitialCapitals))
result.autoCorrect.correctTwoInitialCapitals = autoCorrect.correctTwoInitialCapitals;
if (isDefined(autoCorrect.detectUrls))
result.autoCorrect.detectUrls = autoCorrect.detectUrls;
if (isDefined(autoCorrect.enableAutomaticNumbering))
result.autoCorrect.enableAutomaticNumbering = autoCorrect.enableAutomaticNumbering;
if (isDefined(autoCorrect.replaceTextAsYouType))
result.autoCorrect.replaceTextAsYouType = autoCorrect.replaceTextAsYouType;
if (isDefined(autoCorrect.caseSensitiveReplacement))
result.autoCorrect.caseSensitiveReplacement = autoCorrect.caseSensitiveReplacement;
if (isDefined(autoCorrect.replaceInfoCollection) && Array.isArray(autoCorrect.replaceInfoCollection)) {
for (let info of autoCorrect.replaceInfoCollection)
if (isDefined(info.replace) && isDefined(info.with))
result.autoCorrect.replaceInfoCollection.push(new AutoCorrectReplaceInfo(info.replace, info.with));
}
}
}
static parseBookmarksSettings(settings, result) {
if (isDefined(settings.bookmarks)) {
if (isDefined(settings.bookmarks.color))
result.bookmarks.color = settings.bookmarks.color;
if (isDefined(settings.bookmarks.visibility))
result.bookmarks.visibility = settings.bookmarks.visibility ? BookmarksVisibility.Visible : BookmarksVisibility.Hidden;
}
}
static parseDocumentProtectionSettings(settings, result) {
const authentication = settings.authentication;
if (isDefined(authentication)) {
if (isDefined(authentication.userName))
result.documentProtection.authenticationUserName = authentication.userName;
if (isDefined(authentication.group))
result.documentProtection.authenticationGroup = authentication.group;
}
const rangePermissions = settings.rangePermissions;
if (isDefined(rangePermissions)) {
if (isDefined(rangePermissions.bracketsColor))
result.documentProtection.rangeHighlightBracketsColor = rangePermissions.bracketsColor;
if (isDefined(rangePermissions.highlightColor))
result.documentProtection.rangeHighlightColor = rangePermissions.highlightColor;
if (isDefined(rangePermissions.highlightRanges))
result.documentProtection.highlightRanges = rangePermissions.highlightRanges;
if (isDefined(rangePermissions.showBrackets))
result.documentProtection.showBrackets = rangePermissions.showBrackets;
}
}
static parseFieldsSettings(settings, result) {
if (isDefined(settings.fields)) {
if (isDefined(settings.fields.updateFieldsBeforePrint))
result.fields.updateFieldsBeforePrint = settings.fields.updateFieldsBeforePrint;
if (isDefined(settings.fields.updateFieldsOnPaste))
result.fields.updateFieldsOnPaste = settings.fields.updateFieldsOnPaste;
if (isDefined(settings.fields.defaultTimeFormat))
result.fields.defaultTimeFormat = settings.fields.defaultTimeFormat;
if (isDefined(settings.fields.defaultDateFormat))
result.fields.defaultDateFormat = settings.fields.defaultDateFormat;
if (isDefined(settings.fields.openHyperlinkOnClick))
result.fields.openHyperlinkOnClick = settings.fields.openHyperlinkOnClick;
if (isDefined(settings.fields.createHyperlinkTooltip))
result.fields.createHyperlinkTooltip = this.parseEventHandler(settings.fields.createHyperlinkTooltip);
if (isDefined(settings.fields.keepHyperlinkResultForInvalidReference))
result.fields.keepHyperlinkResultForInvalidReference = settings.fields.keepHyperlinkResultForInvalidReference;
if (isDefined(settings.fields.allowedHyperlinkUriSchemes))
result.fields.allowedHyperlinkUriSchemes = settings.fields.allowedHyperlinkUriSchemes;
}
}
static parsePrintingSettings(settings, result) {
result.printing.mode = (settings?.printing?.mode ?? PrintMode.Html);
result.printing.closePrintDialogWithHtmlPreview = settings?.printing?.closePrintDialogWithHtmlPreview ?? true;
}
static parseRibbonSettings(settings, result) {
if (isDefined(settings.ribbon)) {
if (settings.ribbon instanceof Ribbon) {
result.ribbon = settings.ribbon;
}
else {
const serverRibbonSettings = settings.ribbon;
const ribbon = result.ribbon = new Ribbon();
if (isDefined(serverRibbonSettings.visible))
ribbon.visible = settings.ribbon.visible;
if (isDefined(serverRibbonSettings.activeTabIndex))
ribbon.activeTabIndex = settings.ribbon.activeTabIndex;
if (isDefined(serverRibbonSettings.tabs))
addTabs(ribbon, serverRibbonSettings.tabs);
if (isDefined(serverRibbonSettings.contextTabCategories))
addContextTabCategories(ribbon, serverRibbonSettings.contextTabCategories);
if (!(isDefined(serverRibbonSettings.tabs) && serverRibbonSettings.tabs.length) &&
!(isDefined(serverRibbonSettings.contextTabCategories) && serverRibbonSettings.tabs.length))
ribbon.visible = false;
}
}
else
result.ribbon.visible = false;
}
static parseViewsSettings(settings, result) {
if (isDefined(settings.view)) {
if (isDefined(settings.view.viewType))
result.view.viewType = settings.view.viewType;
if (isDefined(settings.view.zoomLevel))
result.view.zoomLevel = settings.view.zoomLevel;
if (isDefined(settings.view.allowZoom))
result.view.allowZoom = settings.view.allowZoom;
if (isDefined(settings.view.simpleViewSettings)) {
const paddings = settings.view.simpleViewSettings.paddings;
if (isDefined(paddings)) {
if (isDefined(paddings.left))
result.view.paddings.left = paddings.left;
if (isDefined(paddings.right))
result.view.paddings.right = paddings.right;
if (isDefined(paddings.top))
result.view.paddings.top = paddings.top;
if (isDefined(paddings.bottom))
result.view.paddings.bottom = paddings.bottom;
}
const fixedWidth = settings.view.simpleViewSettings.fixedWidth;
if (isDefined(fixedWidth))
result.view.fixedWidth = fixedWidth;
}
const printLayoutViewSettings = settings.view.printLayoutViewSettings;
if (isDefined(printLayoutViewSettings)) {
if (isDefined(printLayoutViewSettings.showHorizontalRuler))
result.view.showHorizontalRuler = printLayoutViewSettings.showHorizontalRuler;
}
}
}
static parsePdfSettings(settings, result) {
if (isDefined(settings.pdf)) {
if (isDefined(settings.pdf.pdfDocument))
result.pdf.pdfDocument = this.parseEventHandler(settings.pdf.pdfDocument);
if (isDefined(settings.pdf.blobStream))
result.pdf.blobStream = this.parseEventHandler(settings.pdf.blobStream);
if (isDefined(settings.pdf.exportUrl))
result.pdf.exportUrl = settings.pdf.exportUrl;
if (isDefined(settings.pdf.pdfKitScriptUrl))
result.pdf.pdfKitScriptUrl = settings.pdf.pdfKitScriptUrl;
if (settings.pdf.convertImageToCompatibleFormat)
result.pdf.convertImageToCompatibleFormat = convertToFunction(settings.pdf.convertImageToCompatibleFormat);
}
}
static parseSearchSettings(settings, result, subDocumentCreator) {
if (isDefined(settings.search)) {
if (settings.search.filterInterval) {
const func = convertToFunction(settings.search.filterInterval);
result.search.filterInterval =
(subDocumentId, interval) => func(subDocumentCreator(subDocumentId), new IntervalApi(interval.start, interval.length));
}
}
}
static parseConfirmOnLosingChangesSettings(settings, result) {
if (isDefined(settings.confirmOnLosingChanges)) {
if (isDefined(settings.confirmOnLosingChanges.enabled))
result.confirmOnLosingChanges.enabled = settings.confirmOnLosingChanges.enabled;
if (isDefined(settings.confirmOnLosingChanges.message))
result.confirmOnLosingChanges.message = settings.confirmOnLosingChanges.message;
}
}
static parseContextMenuSettings(settings, result) {
if (isDefined(settings.contextMenu)) {
if (isDefined(settings.contextMenu.enabled))
result.contextMenuSettings.enabled = settings.contextMenu.enabled;
if (isDefined(settings.contextMenu.items))
result.contextMenuSettings.items = settings.contextMenu.items;
}
}
static parseMailMergeSettings(settings, result) {
if (isDefined(settings.mailMerge)) {
if (isDefined(settings.mailMerge.viewMergedData))
result.mailMerge.viewMergedData = settings.mailMerge.viewMergedData;
if (isDefined(settings.mailMerge.activeRecord))
result.mailMerge.activeRecordIndex = settings.mailMerge.activeRecord;
if (isDefined(settings.mailMerge.dataSource)) {
const dataSource = DataSourceHelper.getDxDataSource(settings.mailMerge.dataSource);
result.rawDataSource = settings.mailMerge.dataSource;
result.dataSource = dataSource;
dataSource.paginate(false);
dataSource.requireTotalCount(true);
dataSource.load()
.then(() => {
result.mailMerge.isEnabled = true;
result.mailMerge.allowInsertFields = true;
result.mailMerge.recordCount = result.dataSource.totalCount();
})
.catch((e) => {
console.error(e.message);
});
}
}
}
static parseSpellCheckSettings(settings, result) {
if (isDefined(settings.spellCheck)) {
if (isDefined(settings.spellCheck.enabled))
result.spellCheck.isEnabled = settings.spellCheck.enabled;
if (isDefined(settings.spellCheck.suggestionCount))
result.spellCheck.suggestionCount = settings.spellCheck.suggestionCount;
if (isDefined(settings.spellCheck.checkWordSpelling))
result.spellCheck.checkWordSpelling = this.parseEventHandler(settings.spellCheck.checkWordSpelling);
if (isDefined(settings.spellCheck.addWordToDictionary)) {
result.spellCheck.addWordToDictionary = this.parseEventHandler(settings.spellCheck.addWordToDictionary);
result.spellCheck.canAddWord = true;
}
else {
result.spellCheck.canAddWord = false;
}
}
}
static parseEventHandlers(settings, result) {
if (!settings)
return;
if (settings.selectionChanged)
result.onSelectionChanged = this.parseEventHandler(settings.selectionChanged);
if (settings.beforeSend)
result.onBeforeSend = this.parseEventHandler(settings.beforeSend);
if (settings.documentLoaded)
result.onDocumentLoaded = this.parseEventHandler(settings.documentLoaded);
if (settings.documentFormatted)
result.onDocumentFormatted = this.parseEventHandler(settings.documentFormatted);
if (settings.documentChanged)
result.onDocumentChanged = this.parseEventHandler(settings.documentChanged);
if (settings.activeSubDocumentChanged)
result.onActiveSubDocumentChanged = this.parseEventHandler(settings.activeSubDocumentChanged);
if (settings.gotFocus)
result.onGotFocus = this.parseEventHandler(settings.gotFocus);
if (settings.lostFocus)
result.onLostFocus = this.parseEventHandler(settings.lostFocus);
if (settings.hyperlinkClick)
result.onHyperlinkClick = this.parseEventHandler(settings.hyperlinkClick);
if (settings.pointerDown)
result.onPointerDown = this.parseEventHandler(settings.pointerDown);
if (settings.pointerUp)
result.onPointerUp = this.parseEventHandler(settings.pointerUp);
if (settings.keyDown)
result.onKeyDown = this.parseEventHandler(settings.keyDown);
if (settings.keyUp)
result.onKeyUp = this.parseEventHandler(settings.keyUp);
if (settings.calculateDocumentVariable)
result.onCalculateDocumentVariable = this.parseEventHandler(settings.calculateDocumentVariable);
if (settings.contentInserted)
result.onContentInserted = this.parseEventHandler(settings.contentInserted);
if (settings.contentRemoved)
result.onContentRemoved = this.parseEventHandler(settings.contentRemoved);
if (settings.characterPropertiesChanged)
result.onCharacterPropertiesChanged = this.parseEventHandler(settings.characterPropertiesChanged);
if (settings.paragraphPropertiesChanged)
result.onParagraphPropertiesChanged = this.parseEventHandler(settings.paragraphPropertiesChanged);
if (settings.autoCorrect)
result.onAutoCorrect = this.parseEventHandler(settings.autoCorrect);
if (settings.saving)
result.onSaving = this.parseEventHandler(settings.saving);
if (settings.saved)
result.onSaved = this.parseEventHandler(settings.saved);
if (settings.customCommandExecuted)
result.onCustomCommandExecuted = this.parseEventHandler(settings.customCommandExecuted);
if (settings.pdfExported)
result.onPdfExported = this.parseEventHandler(settings.pdfExported);
if (settings.pdfExporting)
result.onPdfExporting = this.parseEventHandler(settings.pdfExporting);
if (settings.commandStateChanged)
result.onCommandStateChanged = this.parseEventHandler(settings.commandStateChanged);
if (settings.calculateDocumentVariableAsync)
result.onCalculateDocumentVariableAsync = this.parseEventHandler(settings.calculateDocumentVariableAsync);
if (settings.contextMenuShowing)
result.onContextMenuShowing = this.parseEventHandler(settings.contextMenuShowing);
}
static parseEventHandler(func) {
return convertToFunction(func);
}
}
export class ConfirmOnLosingChangesSettings {
enabled;
message;
constructor() {
this.enabled = true;
this.message = formatMessage('ASPxRichEditStringId.ConfirmOnLosingChanges');
}
}