devexpress-richedit 25.2.8 → 26.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/gulpfile.js +1 -1
- package/bin/index-custom.js +1 -1
- package/bin/localization-builder.js +1 -1
- package/bin/nspell-index.js +1 -1
- package/bin/nspell.webpack.config.js +1 -1
- package/bin/webpack-externals.js +1 -1
- package/bin/webpack.config.js +1 -1
- package/dist/dx.richedit.css +26 -0
- package/dist/dx.richedit.d.ts +1 -1
- package/dist/dx.richedit.js +6559 -5654
- package/dist/dx.richedit.min.js +3 -3
- package/dist/pdfkit.js +21908 -22350
- package/dist/pdfkit.min.js +1 -1
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/lib/client/client-rich-edit.d.ts +0 -1
- package/lib/client/client-rich-edit.js +4 -27
- package/lib/client/default-localization.js +19 -0
- package/lib/client/dialogs/alert-dialog.d.ts +1 -1
- package/lib/client/dialogs/bookmark-dialog.d.ts +1 -1
- package/lib/client/dialogs/delete-table-cells-dialog.d.ts +1 -1
- package/lib/client/dialogs/dialog-base.d.ts +1 -1
- package/lib/client/dialogs/find-replace-dialog.d.ts +1 -1
- package/lib/client/dialogs/finish-and-merge-dialog.d.ts +1 -1
- package/lib/client/dialogs/font-dialog.d.ts +1 -1
- package/lib/client/dialogs/hyperlink-dialog.d.ts +1 -1
- package/lib/client/dialogs/insert-merge-field-dialog.d.ts +1 -1
- package/lib/client/dialogs/insert-table-cells-dialog.d.ts +1 -1
- package/lib/client/dialogs/insert-table-dialog.d.ts +1 -1
- package/lib/client/dialogs/page-setup-dialog.d.ts +1 -1
- package/lib/client/dialogs/paragraph-dialog.d.ts +1 -1
- package/lib/client/dialogs/split-table-cells-dialog.d.ts +1 -1
- package/lib/client/dialogs/tabs-dialog.d.ts +1 -1
- package/lib/client/public/rich-edit.js +2 -0
- package/lib/common/canvas/canvas-manager.d.ts +1 -1
- package/lib/common/canvas/canvas-manager.js +7 -3
- package/lib/common/canvas/double-tap-detector.d.ts +10 -0
- package/lib/common/canvas/double-tap-detector.js +28 -0
- package/lib/common/canvas/renderer-class-names.d.ts +2 -0
- package/lib/common/canvas/renderer-class-names.js +2 -0
- package/lib/common/canvas/renderes/common/document-renderer.d.ts +20 -7
- package/lib/common/canvas/renderes/common/document-renderer.js +236 -47
- package/lib/common/canvas/renderes/common/simple-view-renderer.d.ts +3 -1
- package/lib/common/canvas/renderes/common/simple-view-renderer.js +35 -2
- package/lib/common/canvas/renderes/view-manager.d.ts +3 -0
- package/lib/common/canvas/renderes/view-manager.js +34 -7
- package/lib/common/commands/command-manager.d.ts +2 -0
- package/lib/common/commands/command-manager.js +6 -0
- package/lib/common/commands/dialogs/dialog-custom-numbering-list-command.js +1 -1
- package/lib/common/commands/layout/switch-view-command.js +2 -1
- package/lib/common/commands/selection/go-to-next-word-command.d.ts +3 -4
- package/lib/common/commands/selection/go-to-next-word-command.js +2 -9
- package/lib/common/commands/selection/go-to-prev-word-command.d.ts +3 -2
- package/lib/common/commands/selection/go-to-prev-word-command.js +2 -2
- package/lib/common/commands/selection/select-all-document-command.d.ts +2 -0
- package/lib/common/commands/selection/select-all-document-command.js +6 -0
- package/lib/common/commands/selection/selection-command-base.d.ts +2 -0
- package/lib/common/commands/selection/selection-command-base.js +8 -0
- package/lib/common/event-manager.js +6 -12
- package/lib/common/formats/txt/txt-exporter.js +1 -1
- package/lib/common/input-controller.js +2 -0
- package/lib/common/interfaces/i-rich-edit-core.d.ts +2 -0
- package/lib/common/layout/main-structures/layout-boxes/layout-box.js +1 -1
- package/lib/common/layout/main-structures/layout-column.d.ts +1 -0
- package/lib/common/layout/main-structures/layout-column.js +3 -0
- package/lib/common/layout/selection/layout-selection-items.d.ts +3 -0
- package/lib/common/layout/selection/layout-selection-items.js +5 -0
- package/lib/common/layout-engine/selection/selection-formatter.js +7 -3
- package/lib/common/layout-formatter/box/generator/box-infos-generator.js +8 -4
- package/lib/common/model/sub-document.d.ts +18 -0
- package/lib/common/model/sub-document.js +71 -22
- package/lib/common/rich-edit-core.d.ts +3 -0
- package/lib/common/rich-edit-core.js +18 -0
- package/lib/common/screen-reader-manager.d.ts +48 -0
- package/lib/common/screen-reader-manager.js +326 -0
- package/lib/common/string-resources.d.ts +23 -0
- package/lib/common/string-resources.js +43 -0
- package/lib/common/utils/interval-utils.d.ts +4 -0
- package/lib/common/utils/interval-utils.js +25 -0
- package/package.json +3 -3
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -94,7 +94,6 @@ export declare class ClientRichEdit implements IControlOwner {
|
|
|
94
94
|
private initBars;
|
|
95
95
|
initRibbon(ribbon: Ribbon, fonts: FontsSettings): void;
|
|
96
96
|
private initDialogManager;
|
|
97
|
-
private getStringResources;
|
|
98
97
|
private initLosingChangesWatcher;
|
|
99
98
|
private attachEvents;
|
|
100
99
|
private canUseResizeObserver;
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { formatMessage } from 'devextreme/localization';
|
|
2
1
|
import { currentTheme } from 'devextreme/viz/themes';
|
|
3
2
|
import { RichEditClientCommand } from '../common/commands/client-command';
|
|
4
3
|
import { DocumentInfo } from '../common/rich-edit-core';
|
|
5
4
|
import { IsModified } from '../common/model/json/enums/json-top-level-enums';
|
|
6
5
|
import { RichOptions } from '../common/model/options/rich-options';
|
|
7
6
|
import { StylesManager } from '../common/model/styles-manager';
|
|
8
|
-
import { StringResources } from '../common/string-resources';
|
|
9
7
|
import { Browser } from '@devexpress/utils/lib/browser';
|
|
10
8
|
import { DomEventHandlersHolder } from '@devexpress/utils/lib/class/event-handlers-holder';
|
|
11
9
|
import { DomUtils } from '@devexpress/utils/lib/utils/dom';
|
|
@@ -33,6 +31,7 @@ import { FullScreenHelper } from './ui/full-screen-helper';
|
|
|
33
31
|
import config from 'devextreme/core/config';
|
|
34
32
|
import { SizeUtils } from '../common/utils/size-utils';
|
|
35
33
|
import { DocumentCapability } from '../common/model/options/control';
|
|
34
|
+
import { getStringResources } from '../common/string-resources';
|
|
36
35
|
export class ClientRichEdit {
|
|
37
36
|
get clientQuickSearchPanel() {
|
|
38
37
|
if (!this._clientQuickSearchPanel)
|
|
@@ -61,8 +60,8 @@ export class ClientRichEdit {
|
|
|
61
60
|
this.rawDataSource = settings.rawDataSource;
|
|
62
61
|
this.contextMenuSettings = settings.contextMenuSettings;
|
|
63
62
|
this.fullScreenHelper = new FullScreenHelper(element);
|
|
64
|
-
if ("
|
|
65
|
-
config(JSON.parse(atob("
|
|
63
|
+
if ("eyJsaWNlbnNlS2V5IjoiTENQdjE+eWUzLGp0LWNfVmZwK2Q0Y3BGOyhqbWQyPjl5PjdEOGNqWG9JeSUxN2JSZz5SPG4zYis3JUhkTDpRZVFaUUZKN2I6SiU8WHlWaSFvMlJjejllUjlJb2RZIW8peSw8ZXooN2E2JSVMMSgrVmRJPHktU29TIWVZKUo3UlMzKCtkejpRVnQhUVMhZUwtYUdMcm9waWROSWlSUjpvPDEsbmFlKExtZ0dMNEtwZWQ6Pkh0LTNlUW1rJSk7cEtGITY8ISk2JUZRJWUrPHBRZCk+Sy1AMnAhJD5qei1TUTgtMmlYOz4lWDwycEBAIVE0QDJfQEYhUWQ6SXAhQEk8NClhS0BAIVE0QDJfQEYhUWQ6SXAhQEk8NClhS3o8SV95QEliUnZJPC0pOU5YPD5RNDo+UTh2SWJSKTlqejshakw7OWp5Rkk3eUZJN3lGSSV5NjlRWHYyJSE6cGItJEliUik5akA2MnAhKTIlWHYyJSE6MmktdkklISk+akw8MjdAOjlLOXZhakBGMjdAQElfQDY5UWQkYVE0Oj5RNDpHX0BAOVFkdjY8IUY2PGRGSTd5Rkk3eUZJN0xsIn0=")
|
|
64
|
+
config(JSON.parse(atob("eyJsaWNlbnNlS2V5IjoiTENQdjE+eWUzLGp0LWNfVmZwK2Q0Y3BGOyhqbWQyPjl5PjdEOGNqWG9JeSUxN2JSZz5SPG4zYis3JUhkTDpRZVFaUUZKN2I6SiU8WHlWaSFvMlJjejllUjlJb2RZIW8peSw8ZXooN2E2JSVMMSgrVmRJPHktU29TIWVZKUo3UlMzKCtkejpRVnQhUVMhZUwtYUdMcm9waWROSWlSUjpvPDEsbmFlKExtZ0dMNEtwZWQ6Pkh0LTNlUW1rJSk7cEtGITY8ISk2JUZRJWUrPHBRZCk+Sy1AMnAhJD5qei1TUTgtMmlYOz4lWDwycEBAIVE0QDJfQEYhUWQ6SXAhQEk8NClhS0BAIVE0QDJfQEYhUWQ6SXAhQEk8NClhS3o8SV95QEliUnZJPC0pOU5YPD5RNDo+UTh2SWJSKTlqejshakw7OWp5Rkk3eUZJN3lGSSV5NjlRWHYyJSE6cGItJEliUik5akA2MnAhKTIlWHYyJSE6MmktdkklISk+akw8MjdAOjlLOXZhakBGMjdAQElfQDY5UWQkYVE0Oj5RNDpHX0BAOVFkdjY8IUY2PGRGSTd5Rkk3eUZJN0xsIn0=")));
|
|
66
65
|
this.prepareElement(element, settings);
|
|
67
66
|
this.initDefaultFontsAndStyles();
|
|
68
67
|
this.initBars(settings.ribbon, settings.fonts);
|
|
@@ -168,7 +167,7 @@ export class ClientRichEdit {
|
|
|
168
167
|
options.spellChecker = settings.spellCheck;
|
|
169
168
|
options.nonce = settings.nonce;
|
|
170
169
|
options.control.allowZoom = settings.view.allowZoom ? DocumentCapability.Enabled : DocumentCapability.Disabled;
|
|
171
|
-
this.core = new ClientRichEditCore(this, this.name, this.element, Math.random().toString(), settings.readOnly, this.barHolder, settings.unit, this.rulerSettings, options, settings.view,
|
|
170
|
+
this.core = new ClientRichEditCore(this, this.name, this.element, Math.random().toString(), settings.readOnly, this.barHolder, settings.unit, this.rulerSettings, options, settings.view, getStringResources());
|
|
172
171
|
}
|
|
173
172
|
initCore() {
|
|
174
173
|
const documentInfo = new DocumentInfo("", false);
|
|
@@ -264,28 +263,6 @@ export class ClientRichEdit {
|
|
|
264
263
|
initDialogManager() {
|
|
265
264
|
this.dialogManager = new DialogManager(this.element, this.core);
|
|
266
265
|
}
|
|
267
|
-
getStringResources() {
|
|
268
|
-
const sr = new StringResources();
|
|
269
|
-
sr.headerFooter.evenPageFooter = formatMessage('XtraRichEditStringId.Caption_EvenPageFooter');
|
|
270
|
-
sr.headerFooter.evenPageHeader = formatMessage('XtraRichEditStringId.Caption_EvenPageHeader');
|
|
271
|
-
sr.headerFooter.firstPageFooter = formatMessage('XtraRichEditStringId.Caption_FirstPageFooter');
|
|
272
|
-
sr.headerFooter.firstPageHeader = formatMessage('XtraRichEditStringId.Caption_FirstPageHeader');
|
|
273
|
-
sr.headerFooter.footer = formatMessage('XtraRichEditStringId.Caption_PageFooter');
|
|
274
|
-
sr.headerFooter.header = formatMessage('XtraRichEditStringId.Caption_PageHeader');
|
|
275
|
-
sr.headerFooter.oddPageFooter = formatMessage('XtraRichEditStringId.Caption_OddPageFooter');
|
|
276
|
-
sr.headerFooter.oddPageHeader = formatMessage('XtraRichEditStringId.Caption_OddPageHeader');
|
|
277
|
-
sr.headerFooter.sameAsPrevious = formatMessage('XtraRichEditStringId.Caption_SameAsPrevious');
|
|
278
|
-
sr.seqCaptionPrefixes.figurePrefix = formatMessage('XtraRichEditStringId.Caption_CaptionPrefixFigure');
|
|
279
|
-
sr.seqCaptionPrefixes.tablePrefix = formatMessage('XtraRichEditStringId.Caption_CaptionPrefixTable');
|
|
280
|
-
sr.seqCaptionPrefixes.equationPrefix = formatMessage('XtraRichEditStringId.Caption_CaptionPrefixEquation');
|
|
281
|
-
sr.commonLabels.noTocEntriesFound = formatMessage('XtraRichEditStringId.Msg_NoTocEntriesFound');
|
|
282
|
-
sr.commonLabels.clickToFollowHyperlink = formatMessage('XtraRichEditStringId.Msg_ClickToFollowHyperlink');
|
|
283
|
-
sr.commonLabels.currentDocumentHyperlinkTooltip = formatMessage('XtraRichEditStringId.Caption_CurrentDocumentHyperlinkTooltip');
|
|
284
|
-
sr.quickSearchPanel.of = formatMessage('ASPxRichEditStringId.FindReplace_Of');
|
|
285
|
-
sr.quickSearchPanel.items = formatMessage('ASPxRichEditStringId.FindReplace_Items');
|
|
286
|
-
sr.quickSearchPanel.noMatches = formatMessage('ASPxRichEditStringId.FindReplace_NoMatches');
|
|
287
|
-
return sr;
|
|
288
|
-
}
|
|
289
266
|
initLosingChangesWatcher(settings) {
|
|
290
267
|
this.losingChangesWatcher = new LosingChangesWatcher(settings.enabled ?
|
|
291
268
|
() => this.core.getModifiedState() == IsModified.True :
|
|
@@ -2221,6 +2221,25 @@ export function loadDefaultMessages() {
|
|
|
2221
2221
|
"ASPxRichEditStringId.Download_RichTextFormat": "Rich Text Format (*.rtf)",
|
|
2222
2222
|
"ASPxRichEditStringId.Download_PlainText": "Plain Text (*.txt)",
|
|
2223
2223
|
"ASPxRichEditStringId.Download_Html": "Html Document (*.html, *.htm)",
|
|
2224
|
+
"AspNetCoreRichEditStringId.InTableAnnouncement": "table with {0} rows and {1} columns",
|
|
2225
|
+
"AspNetCoreRichEditStringId.OutOfTableAnnouncement": "out of table",
|
|
2226
|
+
"AspNetCoreRichEditStringId.TableRowAnnouncement": "row {0}",
|
|
2227
|
+
"AspNetCoreRichEditStringId.TableColumnAnnouncement": "column {0}",
|
|
2228
|
+
"AspNetCoreRichEditStringId.SelectAllAnnouncement": "select all",
|
|
2229
|
+
"AspNetCoreRichEditStringId.TextSelectedAnnouncement": "{0} selected",
|
|
2230
|
+
"AspNetCoreRichEditStringId.TextUnselectedAnnouncement": "{0} unselected",
|
|
2231
|
+
"AspNetCoreRichEditStringId.PictureAnnouncement": "graphic {0}",
|
|
2232
|
+
"AspNetCoreRichEditStringId.PageAnnouncement": "page {0}",
|
|
2233
|
+
"AspNetCoreRichEditStringId.SpaceAnnouncement": "space",
|
|
2234
|
+
"AspNetCoreRichEditStringId.BulletAnnouncement": "bullet",
|
|
2235
|
+
"AspNetCoreRichEditStringId.ListItemAnnouncement": "list item level {0} {1}",
|
|
2236
|
+
"AspNetCoreRichEditStringId.TabAnnouncement": "tab",
|
|
2237
|
+
"AspNetCoreRichEditStringId.CarriageReturnAnnouncement": "carriage return",
|
|
2238
|
+
"AspNetCoreRichEditStringId.LineBreakAnnouncement": "line break",
|
|
2239
|
+
"AspNetCoreRichEditStringId.LinkAnnouncement": "link",
|
|
2240
|
+
"AspNetCoreRichEditStringId.OutOfLinkAnnouncement": "out of link",
|
|
2241
|
+
"AspNetCoreRichEditStringId.BlankAnnouncement": "blank",
|
|
2242
|
+
"AspNetCoreRichEditStringId.PageBreakAnnouncement": "page break",
|
|
2224
2243
|
}
|
|
2225
2244
|
});
|
|
2226
2245
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { dxPopupToolbarItem } from 'devextreme/ui/popup';
|
|
3
3
|
import { AlertMessageDialogParameters } from '../../common/commands/dialogs/dialog-alert-message-command';
|
|
4
4
|
import { DialogBase } from './dialog-base';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { dxPopupToolbarItem } from 'devextreme/ui/popup';
|
|
3
3
|
import { BookmarkDialogInfo, BookmarksDialogParameters } from '../../common/commands/dialogs/dialog-bookmarks-command';
|
|
4
4
|
import { DialogBase } from './dialog-base';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { TableCellsDialogParameters } from '../../common/commands/dialogs/dialog-insert-table-cells-command';
|
|
3
3
|
import { DialogBase } from './dialog-base';
|
|
4
4
|
export declare class DeleteTableCellsDialog extends DialogBase<TableCellsDialogParameters> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import dxForm, {
|
|
1
|
+
import dxForm, { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import dxPopup, { dxPopupToolbarItem } from 'devextreme/ui/popup';
|
|
3
3
|
import { DialogParametersBase } from '../../common/commands/dialogs/show-dialog-command-base';
|
|
4
4
|
import { RichEditCore } from '../../common/rich-edit-core';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { dxPopupToolbarItem } from 'devextreme/ui/popup';
|
|
3
3
|
import { FindReplaceDialogParameters } from '../../common/commands/dialogs/dialog-find-replace-command';
|
|
4
4
|
import { ISearchResetListener } from '../../common/ui/search-manager';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { FinishAndMergeDialogParameters } from '../../common/commands/dialogs/dialog-finish-and-merge-command';
|
|
3
3
|
import { DialogBase } from './dialog-base';
|
|
4
4
|
export declare class FinishAndMergeDialog extends DialogBase<FinishAndMergeDialogParameters> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { FontDialogParameters } from '../../common/commands/dialogs/dialog-font-command';
|
|
3
3
|
import { DialogBase } from './dialog-base';
|
|
4
4
|
export declare class FontDialog extends DialogBase<FontDialogParameters> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { DialogHyperlinkParameters } from '../../common/commands/dialogs/dialog-hyperlink-command';
|
|
3
3
|
import { DialogBase } from './dialog-base';
|
|
4
4
|
export declare class HyperlinkDialog extends DialogBase<DialogHyperlinkParameters> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { dxPopupToolbarItem } from 'devextreme/ui/popup';
|
|
3
3
|
import { InsertMergeFieldDialogParameters } from '../../common/commands/dialogs/dialog-insert-merge-field-command';
|
|
4
4
|
import { DialogBase } from './dialog-base';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { TableCellsDialogParameters } from '../../common/commands/dialogs/dialog-insert-table-cells-command';
|
|
3
3
|
import { DialogBase } from './dialog-base';
|
|
4
4
|
export declare class InsertTableCellsDialog extends DialogBase<TableCellsDialogParameters> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { InsertTableDialogParameters } from '../../common/commands/dialogs/dialog-insert-table-command';
|
|
3
3
|
import { DialogBase } from './dialog-base';
|
|
4
4
|
export declare class InsertTableDialog extends DialogBase<InsertTableDialogParameters> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { PageSetupDialogParameters } from '../../common/commands/dialogs/dialog-page-setup-command';
|
|
3
3
|
import { DialogBase } from './dialog-base';
|
|
4
4
|
export declare class PageSetupDialog extends DialogBase<PageSetupDialogParameters> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { dxPopupToolbarItem } from 'devextreme/ui/popup';
|
|
3
3
|
import { ParagraphDialogParameters } from '../../common/commands/dialogs/dialog-paragraph-properties-command';
|
|
4
4
|
import { DialogBase } from './dialog-base';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { SplitTableCellsDialogParameters } from '../../common/commands/dialogs/dialog-split-table-cells-command';
|
|
3
3
|
import { DialogBase } from './dialog-base';
|
|
4
4
|
export declare class SplitTableCellsDialog extends DialogBase<SplitTableCellsDialogParameters> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Properties as dxFormOptions } from 'devextreme/ui/form';
|
|
2
2
|
import { dxPopupToolbarItem } from 'devextreme/ui/popup';
|
|
3
3
|
import { DialogTabsParameters } from '../../common/commands/dialogs/dialog-tabs-command';
|
|
4
4
|
import { DialogBase } from './dialog-base';
|
|
@@ -159,6 +159,8 @@ class RichEditPublic {
|
|
|
159
159
|
return this._native.core.innerClientProperties.viewsSettings.viewType;
|
|
160
160
|
}
|
|
161
161
|
set viewType(type) {
|
|
162
|
+
if (typeof console !== 'undefined' && console.log)
|
|
163
|
+
console.log(`[RichEdit] ${new Date().toISOString()} PublicAPI.set viewType`, { to: type, stack: new Error().stack });
|
|
162
164
|
const command = this._native.core.commandManager.getCommand(RichEditClientCommand.ChangeViewType);
|
|
163
165
|
command.execute(true, type);
|
|
164
166
|
}
|
|
@@ -12,7 +12,7 @@ export declare class CanvasManager extends BatchUpdatableObject {
|
|
|
12
12
|
private scrollIntervalID;
|
|
13
13
|
private lastMousePosition;
|
|
14
14
|
private canvasPosition;
|
|
15
|
-
private
|
|
15
|
+
private doubleTapDetector;
|
|
16
16
|
private pointer;
|
|
17
17
|
private blockNotPointerEvents;
|
|
18
18
|
private lastPointerPosition;
|
|
@@ -10,6 +10,7 @@ import { PopupUtils } from '@devexpress/utils/lib/utils/popup';
|
|
|
10
10
|
import { RichMouseEvent } from '../event-manager';
|
|
11
11
|
import { MouseEventSource } from '../mouse-handler/mouse-event-source';
|
|
12
12
|
import { CursorPointer } from '../mouse-handler/mouse-handler/mouse-handler';
|
|
13
|
+
import { DoubleTapDetector } from './double-tap-detector';
|
|
13
14
|
import { ResizeBoxListener } from './listeners/resize-box-listener';
|
|
14
15
|
import { SimpleViewCanvasSizeManager } from './renderes/common/document-renderer';
|
|
15
16
|
import { SizeUtils } from '../utils/size-utils';
|
|
@@ -19,6 +20,8 @@ const CSSCLASS_FOCUSED = "dxreInFocus";
|
|
|
19
20
|
const AUTOSCROLL_AREA_SIZE = 10;
|
|
20
21
|
const AUTOSCROLL_STEP = 10;
|
|
21
22
|
const MSTOUCH_MOVE_SENSITIVITY = 5;
|
|
23
|
+
const DOUBLE_TAP_MAX_DISTANCE = 20;
|
|
24
|
+
const DOUBLE_TAP_MAX_INTERVAL = 600;
|
|
22
25
|
export class CanvasManager extends BatchUpdatableObject {
|
|
23
26
|
get sizes() { return this.viewManager.sizes; }
|
|
24
27
|
get scroll() { return this.viewManager.scroll; }
|
|
@@ -27,6 +30,7 @@ export class CanvasManager extends BatchUpdatableObject {
|
|
|
27
30
|
super();
|
|
28
31
|
this.lastMousePosition = { x: -1, y: -1 };
|
|
29
32
|
this.canvasPosition = { x: -1, y: -1 };
|
|
33
|
+
this.doubleTapDetector = new DoubleTapDetector(DOUBLE_TAP_MAX_DISTANCE, DOUBLE_TAP_MAX_INTERVAL);
|
|
30
34
|
this.pointer = CursorPointer.Auto;
|
|
31
35
|
this.blockNotPointerEvents = false;
|
|
32
36
|
this.lastPointerPosition = { x: -1, y: -1 };
|
|
@@ -137,12 +141,12 @@ export class CanvasManager extends BatchUpdatableObject {
|
|
|
137
141
|
onCanvasTouchStartInternal(evt) {
|
|
138
142
|
this.saveMousePosition(evt);
|
|
139
143
|
let richMouseEvent = new RichMouseEvent(evt, this.getLayoutPoint(evt, true), CanvasManager.getMouseEventSource(EvtUtils.getEventSource(evt)), this.scroll.lastScrollTop, this.scroll.lastScrollLeft);
|
|
140
|
-
|
|
141
|
-
|
|
144
|
+
const evtX = EvtUtils.getEventX(evt);
|
|
145
|
+
const evtY = EvtUtils.getEventY(evt);
|
|
146
|
+
if (this.doubleTapDetector.isDoubleTap(evtX, evtY)) {
|
|
142
147
|
this.onCanvasDoubleTap(richMouseEvent);
|
|
143
148
|
}
|
|
144
149
|
else {
|
|
145
|
-
this.doubleTapStartDate = new Date();
|
|
146
150
|
this.eventManager.onTouchStart(richMouseEvent);
|
|
147
151
|
}
|
|
148
152
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class DoubleTapDetector {
|
|
2
|
+
private readonly maxDistance;
|
|
3
|
+
private readonly maxInterval;
|
|
4
|
+
private lastTime;
|
|
5
|
+
private lastX;
|
|
6
|
+
private lastY;
|
|
7
|
+
constructor(maxDistance: number, maxInterval: number);
|
|
8
|
+
isDoubleTap(x: number, y: number): boolean;
|
|
9
|
+
reset(): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export class DoubleTapDetector {
|
|
2
|
+
constructor(maxDistance, maxInterval) {
|
|
3
|
+
this.maxDistance = maxDistance;
|
|
4
|
+
this.maxInterval = maxInterval;
|
|
5
|
+
this.lastTime = null;
|
|
6
|
+
this.lastX = -1;
|
|
7
|
+
this.lastY = -1;
|
|
8
|
+
}
|
|
9
|
+
isDoubleTap(x, y) {
|
|
10
|
+
const now = Date.now();
|
|
11
|
+
const result = this.lastTime !== null &&
|
|
12
|
+
(now - this.lastTime) < this.maxInterval &&
|
|
13
|
+
Math.abs(x - this.lastX) <= this.maxDistance &&
|
|
14
|
+
Math.abs(y - this.lastY) <= this.maxDistance;
|
|
15
|
+
if (result) {
|
|
16
|
+
this.reset();
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
this.lastTime = now;
|
|
20
|
+
this.lastX = x;
|
|
21
|
+
this.lastY = y;
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
reset() {
|
|
26
|
+
this.lastTime = null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -37,6 +37,7 @@ export declare const RendererClassNames: {
|
|
|
37
37
|
FIELD_BOX_LEVEL3: string;
|
|
38
38
|
BOX_SPACE: string;
|
|
39
39
|
BOX: string;
|
|
40
|
+
BOX_SELECTED: string;
|
|
40
41
|
HIDDEN_BOX: string;
|
|
41
42
|
PICTURE: string;
|
|
42
43
|
START_BOOKMARK: string;
|
|
@@ -46,6 +47,7 @@ export declare const RendererClassNames: {
|
|
|
46
47
|
SELECTION_MISSPELLED: string;
|
|
47
48
|
SELECTION_SEARCH: string;
|
|
48
49
|
SELECTION_ROW: string;
|
|
50
|
+
SELECTION_PICTURE_ROW: string;
|
|
49
51
|
SELECTION_CURSOR: string;
|
|
50
52
|
SELECTION_FLOATING_OBJECTS: string;
|
|
51
53
|
ANCHOR: string;
|
|
@@ -37,6 +37,7 @@ export const RendererClassNames = {
|
|
|
37
37
|
FIELD_BOX_LEVEL3: "dxreFieldBoxLevel3",
|
|
38
38
|
BOX_SPACE: "dxreBoxSpace",
|
|
39
39
|
BOX: "dxreBox",
|
|
40
|
+
BOX_SELECTED: "dxreBoxSelected",
|
|
40
41
|
HIDDEN_BOX: "dxreHiddenBox",
|
|
41
42
|
PICTURE: "dxrePic",
|
|
42
43
|
START_BOOKMARK: "dxreStartBookmark",
|
|
@@ -46,6 +47,7 @@ export const RendererClassNames = {
|
|
|
46
47
|
SELECTION_MISSPELLED: "dxreSelMisspelled",
|
|
47
48
|
SELECTION_SEARCH: "dxreSelSearch",
|
|
48
49
|
SELECTION_ROW: "dxreSelRow",
|
|
50
|
+
SELECTION_PICTURE_ROW: "dxreSelRowPic",
|
|
49
51
|
SELECTION_CURSOR: "dxreSelCursor",
|
|
50
52
|
SELECTION_FLOATING_OBJECTS: "dxreSelFloatingObjects",
|
|
51
53
|
ANCHOR: "dxreAnchor",
|
|
@@ -22,6 +22,7 @@ import { CacheImageInfo as existingInfo } from '../../../model/caches/images';
|
|
|
22
22
|
import { Shape } from '../../../model/shapes/shape';
|
|
23
23
|
import { Rectangle } from '@devexpress/utils/lib/geometry/rectangle';
|
|
24
24
|
import { Size } from '@devexpress/utils/lib/geometry/size';
|
|
25
|
+
import { FixedInterval } from '@devexpress/utils/lib/intervals/fixed';
|
|
25
26
|
import { CanvasManager } from '../../canvas-manager';
|
|
26
27
|
import { ViewManager } from '../view-manager';
|
|
27
28
|
import { IRichEditControl } from '../../../interfaces/i-rich-edit-core';
|
|
@@ -45,14 +46,20 @@ export declare class SimpleViewCanvasSizeManager implements IModelChangesListene
|
|
|
45
46
|
}
|
|
46
47
|
export declare abstract class DocumentRenderer implements IPictureRenderer {
|
|
47
48
|
protected viewManager: ViewManager;
|
|
49
|
+
protected isForcedColorsModeActive: boolean;
|
|
50
|
+
private selectionSegmentBoxesCache;
|
|
51
|
+
protected isSelectionChangeCacheEnabled: boolean;
|
|
48
52
|
private get cache();
|
|
49
53
|
constructor(viewManager: ViewManager);
|
|
50
54
|
onViewTypeChanged(): void;
|
|
51
55
|
applyPageChange(layoutPage: LayoutPage, pageChange: PageChange): void;
|
|
56
|
+
updateSelectedIntervalsPageChanges(layoutPage: LayoutPage, pageIndex: number, intervals?: FixedInterval[], isMain?: boolean): void;
|
|
57
|
+
private addSelectedPageAreaChange;
|
|
58
|
+
private findIntersectingLayoutElement;
|
|
52
59
|
protected applyAnchorPictureChange(cache: DocumentRendererPageCache, layoutPage: LayoutPage, ancPicChange: AnchoredPictureChange): void;
|
|
53
60
|
protected applyMainPageAreaChange(pageCache: DocumentRendererPageCache, layoutPage: LayoutPage, pageAreaChange: PageAreaChange): void;
|
|
54
61
|
protected applyOtherPageAreaChange(cache: DocumentRendererPageCache, layoutPage: LayoutPage, pageAreaChange: PageAreaChange): void;
|
|
55
|
-
protected applyColumnChange(pageAreaElement: Node, layoutPageArea: LayoutPageArea, columnChange: ColumnChange, level: number): void;
|
|
62
|
+
protected applyColumnChange(pageAreaElement: Node, layoutPageArea: LayoutPageArea, columnChange: ColumnChange, level: number, pageAreaModelOffset: number): void;
|
|
56
63
|
static applyChange(topLevelNode: Node, change: LayoutChangeBase, getContainer: GetSomeCanvasElementContainer, getRenderedElement: () => HTMLElement): void;
|
|
57
64
|
getPageRender(layoutPageIndex: number, layoutPage: LayoutPage): HTMLElement;
|
|
58
65
|
renderPage(layoutPage: LayoutPage, layoutPageIndex: number, renderInnerContent: boolean): void;
|
|
@@ -65,11 +72,17 @@ export declare abstract class DocumentRenderer implements IPictureRenderer {
|
|
|
65
72
|
protected renderPageContent(page: LayoutPage, pageIndex: number): void;
|
|
66
73
|
protected static updatePageColor(pageElement: HTMLElement, newColor: number): void;
|
|
67
74
|
protected static getPageAreaClassname(area: LayoutPageArea): string;
|
|
68
|
-
protected renderPageArea(renderLevelCalculator: RenderLevelCalculator, pageCache: DocumentRendererPageCache, area: LayoutPageArea, textBox: LayoutAnchoredTextBox,
|
|
69
|
-
protected renderColumn(column: LayoutColumn, level: number, _isMainPageArea: boolean): HTMLElement;
|
|
70
|
-
renderRow(row: LayoutRow, level: number): HTMLElement;
|
|
75
|
+
protected renderPageArea(renderLevelCalculator: RenderLevelCalculator, pageCache: DocumentRendererPageCache, area: LayoutPageArea, textBox: LayoutAnchoredTextBox, pageStartPosition?: number): HTMLElement;
|
|
76
|
+
protected renderColumn(column: LayoutColumn, level: number, pageAreaModelOffset: number, _isMainPageArea: boolean): HTMLElement;
|
|
77
|
+
renderRow(row: LayoutRow, level: number, columnModelOffset?: number): HTMLElement;
|
|
71
78
|
private boxHasNormalScriptedUnderline;
|
|
72
|
-
protected renderBox(row: LayoutRow, box: LayoutBox, level: number, skipUnderlineAndStrikeout: boolean, skipUnderlineScript?: boolean): BoxRenderResult;
|
|
79
|
+
protected renderBox(row: LayoutRow, box: LayoutBox, level: number, skipUnderlineAndStrikeout: boolean, rowModelOffset: number, skipUnderlineScript?: boolean): BoxRenderResult;
|
|
80
|
+
updateForcedColorsModeState(): boolean;
|
|
81
|
+
private renderSingleBox;
|
|
82
|
+
private getSelectedIntervalsForBox;
|
|
83
|
+
private getSelectionSegmentBoxes;
|
|
84
|
+
private getOrCreateSelectionSegmentBox;
|
|
85
|
+
private createSelectionSegmentBox;
|
|
73
86
|
private renderVerticalAlignContainer;
|
|
74
87
|
private renderColorContainer;
|
|
75
88
|
private renderStrikeoutContainer;
|
|
@@ -129,8 +142,8 @@ export declare class DocumentRendererPageCache {
|
|
|
129
142
|
protected init(): void;
|
|
130
143
|
}
|
|
131
144
|
export declare class BoxRenderResult {
|
|
132
|
-
html:
|
|
145
|
+
html: DocumentFragment;
|
|
133
146
|
increaseRowHeight: boolean;
|
|
134
|
-
constructor(html:
|
|
147
|
+
constructor(html: DocumentFragment, increaseRowHeight: boolean);
|
|
135
148
|
toString(): string;
|
|
136
149
|
}
|