Skip to content

Commit e4fbbe5

Browse files
committed
Moved latest changes to source
1 parent 14be011 commit e4fbbe5

File tree

94 files changed

+3387
-884
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+3387
-884
lines changed

controls/documenteditor/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@syncfusion/ej2-documenteditor",
3-
"version": "21.2.3",
3+
"version": "22.1.39",
44
"description": "Feature-rich document editor control with built-in support for context menu, options pane and dialogs.",
55
"keywords": [
66
"ej2",

controls/documenteditor/src/document-editor-container/document-editor-container-model.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, Property, INotifyPropertyChanged, NotifyPropertyChanges, ModuleDeclaration, L10n, Complex, isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';import { Event, EmitType } from '@syncfusion/ej2-base';import { Toolbar } from './tool-bar/tool-bar';import { DocumentEditor, DocumentEditorSettings, DocumentSettings } from '../document-editor/document-editor';import { TextProperties } from './properties-pane/text-properties-pane';import { HeaderFooterProperties } from './properties-pane/header-footer-pane';import { ImageProperties } from './properties-pane/image-properties-pane';import { TocProperties } from './properties-pane/table-of-content-pane';import { TableProperties } from './properties-pane/table-properties-pane';import { StatusBar } from './properties-pane/status-bar';import { ViewChangeEventArgs, RequestNavigateEventArgs, ContainerContentChangeEventArgs, ContainerSelectionChangeEventArgs, ContainerDocumentChangeEventArgs, CustomContentMenuEventArgs, BeforeOpenCloseCustomContentMenuEventArgs, BeforePaneSwitchEventArgs, LayoutType, CommentDeleteEventArgs, ServiceFailureArgs, CommentActionEventArgs, XmlHttpRequestEventArgs, RevisionActionEventArgs } from '../document-editor/base';import { createSpinner } from '@syncfusion/ej2-popups';import { ContainerServerActionSettingsModel, DocumentEditorSettingsModel, DocumentSettingsModel, FormFieldSettingsModel } from '../document-editor/document-editor-model';import { CharacterFormatProperties, ParagraphFormatProperties, SectionFormatProperties } from '../document-editor/implementation';import { ToolbarItem } from '../document-editor/base/types';import { CustomToolbarItemModel, TrackChangeEventArgs, FormFieldFillEventArgs, AutoResizeEventArgs } from '../document-editor/base/events-helper';import { ClickEventArgs } from '@syncfusion/ej2-navigations';import { beforeAutoResize, internalAutoResize, internalZoomFactorChange, beforeCommentActionEvent, commentDeleteEvent, contentChangeEvent, trackChangeEvent, beforePaneSwitchEvent, serviceFailureEvent, documentChangeEvent, selectionChangeEvent, customContextMenuSelectEvent, customContextMenuBeforeOpenEvent, internalviewChangeEvent, beforeXmlHttpRequestSend, protectionTypeChangeEvent, internalDocumentEditorSettingsChange, internalStyleCollectionChange, revisionActionEvent } from '../document-editor/base/constants';import { HelperMethods } from '../index';import { SanitizeHtmlHelper } from '@syncfusion/ej2-base';
1+
import { Component, Property, INotifyPropertyChanged, NotifyPropertyChanges, ModuleDeclaration, L10n, Complex, isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';import { Event, EmitType } from '@syncfusion/ej2-base';import { Toolbar } from './tool-bar/tool-bar';import { DocumentEditor, DocumentEditorSettings, DocumentSettings } from '../document-editor/document-editor';import { TextProperties } from './properties-pane/text-properties-pane';import { HeaderFooterProperties } from './properties-pane/header-footer-pane';import { ImageProperties } from './properties-pane/image-properties-pane';import { TocProperties } from './properties-pane/table-of-content-pane';import { TableProperties } from './properties-pane/table-properties-pane';import { StatusBar } from './properties-pane/status-bar';import { ViewChangeEventArgs, RequestNavigateEventArgs, ContainerContentChangeEventArgs, ContainerSelectionChangeEventArgs, ContainerDocumentChangeEventArgs, CustomContentMenuEventArgs, BeforeOpenCloseCustomContentMenuEventArgs, BeforePaneSwitchEventArgs, LayoutType, CommentDeleteEventArgs, RevisionActionEventArgs, ServiceFailureArgs, CommentActionEventArgs, XmlHttpRequestEventArgs } from '../document-editor/base';import { createSpinner } from '@syncfusion/ej2-popups';import { ContainerServerActionSettingsModel, DocumentEditorSettingsModel, DocumentSettingsModel, FormFieldSettingsModel } from '../document-editor/document-editor-model';import { CharacterFormatProperties, ParagraphFormatProperties, SectionFormatProperties } from '../document-editor/implementation';import { ToolbarItem } from '../document-editor/base/types';import { CustomToolbarItemModel, TrackChangeEventArgs, FormFieldFillEventArgs, AutoResizeEventArgs } from '../document-editor/base/events-helper';import { ClickEventArgs } from '@syncfusion/ej2-navigations';import { beforeAutoResize, internalAutoResize, internalZoomFactorChange, beforeCommentActionEvent, commentDeleteEvent, contentChangeEvent, trackChangeEvent, beforePaneSwitchEvent, serviceFailureEvent, documentChangeEvent, selectionChangeEvent, customContextMenuSelectEvent, customContextMenuBeforeOpenEvent, internalviewChangeEvent, beforeXmlHttpRequestSend, protectionTypeChangeEvent, internalDocumentEditorSettingsChange, internalStyleCollectionChange, revisionActionEvent } from '../document-editor/base/constants';import { HelperMethods } from '../index';import { SanitizeHtmlHelper } from '@syncfusion/ej2-base';import { DialogUtility } from '@syncfusion/ej2-popups';
22
import {ComponentModel} from '@syncfusion/ej2-base';
33

44
/**

controls/documenteditor/src/document-editor-container/document-editor-container.ts

+40-12
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { ImageProperties } from './properties-pane/image-properties-pane';
99
import { TocProperties } from './properties-pane/table-of-content-pane';
1010
import { TableProperties } from './properties-pane/table-properties-pane';
1111
import { StatusBar } from './properties-pane/status-bar';
12-
import { ViewChangeEventArgs, RequestNavigateEventArgs, ContainerContentChangeEventArgs, ContainerSelectionChangeEventArgs, ContainerDocumentChangeEventArgs, CustomContentMenuEventArgs, BeforeOpenCloseCustomContentMenuEventArgs, BeforePaneSwitchEventArgs, LayoutType, CommentDeleteEventArgs, ServiceFailureArgs, CommentActionEventArgs, XmlHttpRequestEventArgs, RevisionActionEventArgs } from '../document-editor/base';
12+
import { ViewChangeEventArgs, RequestNavigateEventArgs, ContainerContentChangeEventArgs, ContainerSelectionChangeEventArgs, ContainerDocumentChangeEventArgs, CustomContentMenuEventArgs, BeforeOpenCloseCustomContentMenuEventArgs, BeforePaneSwitchEventArgs, LayoutType, CommentDeleteEventArgs, RevisionActionEventArgs, ServiceFailureArgs, CommentActionEventArgs, XmlHttpRequestEventArgs } from '../document-editor/base';
1313
import { createSpinner } from '@syncfusion/ej2-popups';
1414
import { ContainerServerActionSettingsModel, DocumentEditorSettingsModel, DocumentSettingsModel, FormFieldSettingsModel } from '../document-editor/document-editor-model';
1515
import { CharacterFormatProperties, ParagraphFormatProperties, SectionFormatProperties } from '../document-editor/implementation';
@@ -19,7 +19,7 @@ import { ClickEventArgs } from '@syncfusion/ej2-navigations';
1919
import { beforeAutoResize, internalAutoResize, internalZoomFactorChange, beforeCommentActionEvent, commentDeleteEvent, contentChangeEvent, trackChangeEvent, beforePaneSwitchEvent, serviceFailureEvent, documentChangeEvent, selectionChangeEvent, customContextMenuSelectEvent, customContextMenuBeforeOpenEvent, internalviewChangeEvent, beforeXmlHttpRequestSend, protectionTypeChangeEvent, internalDocumentEditorSettingsChange, internalStyleCollectionChange, revisionActionEvent } from '../document-editor/base/constants';
2020
import { HelperMethods } from '../index';
2121
import { SanitizeHtmlHelper } from '@syncfusion/ej2-base';
22-
22+
import { DialogUtility } from '@syncfusion/ej2-popups';
2323
/**
2424
* Document Editor container component.
2525
*/
@@ -605,7 +605,13 @@ export class DocumentEditorContainer extends Component<HTMLElement> implements I
605605
'Columns': 'Columns',
606606
'Column': 'Column',
607607
'Page Breaks': 'Page Breaks',
608-
'Section Breaks': 'Section Breaks'
608+
'Section Breaks': 'Section Breaks',
609+
'Link to Previous': 'Link to Previous',
610+
'Link to PreviousTooltip': 'Link this section with previous section header or footer',
611+
'Alternate Text': 'Alternate Text',
612+
'The address of this site is not valid. Check the address and try again.' : 'The address of this site is not valid. Check the address and try again.',
613+
'OK':'OK',
614+
'Information':'Information'
609615
};
610616
/* eslint-enable @typescript-eslint/naming-convention */
611617
/**
@@ -881,12 +887,19 @@ export class DocumentEditorContainer extends Component<HTMLElement> implements I
881887
if(!isNullOrUndefined(this.documentEditorSettings.maximumRows)) {
882888
this.documentEditor.documentEditorSettings.maximumRows = this.documentEditorSettings.maximumRows;
883889
}
890+
if(!isNullOrUndefined(this.documentEditorSettings.maximumColumns)) {
891+
this.documentEditor.documentEditorSettings.maximumColumns = this.documentEditorSettings.maximumColumns;
892+
}
884893
if(!isNullOrUndefined(this.documentEditorSettings.showHiddenMarks)) {
885894
this.documentEditor.documentEditorSettings.showHiddenMarks = this.documentEditorSettings.showHiddenMarks;
886895
}
887896
if (!isNullOrUndefined(this.documentEditorSettings.showBookmarks)) {
888897
this.documentEditor.documentEditorSettings.showBookmarks = this.documentEditorSettings.showBookmarks;
889898
}
899+
if(!isNullOrUndefined(this.documentEditorSettings.highlightEditableRanges)){
900+
this.documentEditor.documentEditorSettings.highlightEditableRanges = this.documentEditorSettings.highlightEditableRanges;
901+
}
902+
890903
if (!isNullOrUndefined(this.documentEditorSettings.allowDragAndDrop)) {
891904
this.documentEditor.documentEditorSettings.allowDragAndDrop = this.documentEditorSettings.allowDragAndDrop;
892905
}
@@ -988,6 +1001,7 @@ export class DocumentEditorContainer extends Component<HTMLElement> implements I
9881001
width: '100%',
9891002
enableTrackChanges: this.enableTrackChanges,
9901003
showRevisions: true,
1004+
showComments: true,
9911005
enableLockAndEdit: this.enableLockAndEdit,
9921006
enableAutoFocus: this.enableAutoFocus
9931007
});
@@ -1165,8 +1179,9 @@ export class DocumentEditorContainer extends Component<HTMLElement> implements I
11651179
public onSelectionChange(): void {
11661180
setTimeout(() => {
11671181
this.showPropertiesPaneOnSelection();
1168-
let eventArgs: ContainerSelectionChangeEventArgs = { source: this };
1182+
let eventArgs: ContainerSelectionChangeEventArgs = { source: this , isCompleted: this.documentEditor.documentHelper.isSelectionCompleted};
11691183
this.trigger(selectionChangeEvent, eventArgs);
1184+
this.documentEditor.documentHelper.isSelectionCompleted = true;
11701185
});
11711186
}
11721187
/**
@@ -1186,11 +1201,26 @@ export class DocumentEditorContainer extends Component<HTMLElement> implements I
11861201
*/
11871202
private onRequestNavigate(args: RequestNavigateEventArgs): void {
11881203
if (args.linkType !== 'Bookmark') {
1189-
let link: string = SanitizeHtmlHelper.sanitize(args.navigationLink);
1204+
const navLink = args.navigationLink;
1205+
let link: string = SanitizeHtmlHelper.sanitize(navLink);
11901206
if (args.localReference.length > 0) {
11911207
link += '#' + args.localReference;
11921208
}
1193-
window.open(link);
1209+
if (navLink.substring(0, 8) === 'file:///'
1210+
|| (navLink.substring(0, 7) === 'http://' && navLink.length > 7)
1211+
|| (navLink.substring(0, 8) === 'https://' && navLink.length > 8)
1212+
|| (navLink.substring(0, 4) === 'www.' && navLink.length > 4)
1213+
|| (navLink.substring(0, 7) === 'mailto:' && navLink.length > 7)) {
1214+
window.open(link);
1215+
}
1216+
else {
1217+
DialogUtility.alert({
1218+
title: this.localObj.getConstant("Information"),
1219+
content: this.localObj.getConstant("The address of this site is not valid. Check the address and try again."),
1220+
okButton: { text: this.localObj.getConstant("OK") },
1221+
closeOnEscape: true,
1222+
});
1223+
}
11941224
args.isHandled = true;
11951225
}
11961226
}
@@ -1320,19 +1350,17 @@ export class DocumentEditorContainer extends Component<HTMLElement> implements I
13201350
public destroy(): void {
13211351
super.destroy();
13221352
if (this.element) {
1353+
if (!this.refreshing) {
1354+
this.element.classList.remove('e-documenteditorcontainer');
1355+
}
13231356
this.element.innerHTML = '';
13241357
}
13251358
if (!this.refreshing) {
1326-
this.element.classList.remove('e-documenteditorcontainer');
13271359
this.element = undefined;
13281360
this.paragraphFormat = undefined;
13291361
this.sectionFormat = undefined;
13301362
this.characterFormat = undefined;
13311363
}
1332-
if (this.toolbarModule) {
1333-
this.toolbarModule.destroy();
1334-
this.toolbarModule = undefined;
1335-
}
13361364
if (this.toolbarContainer && this.toolbarContainer.parentElement) {
13371365
this.toolbarContainer.innerHTML = '';
13381366
this.toolbarContainer.parentElement.removeChild(this.toolbarContainer);
@@ -1385,4 +1413,4 @@ export class DocumentEditorContainer extends Component<HTMLElement> implements I
13851413
this.statusBar = undefined;
13861414
this.previousContext = undefined;
13871415
}
1388-
}
1416+
}

controls/documenteditor/src/document-editor-container/properties-pane/header-footer-pane.ts

+69
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { NumericTextBox } from '@syncfusion/ej2-inputs';
88
import { Toolbar } from '../tool-bar/tool-bar';
99
import { DocumentEditorContainer } from '../document-editor-container';
1010
import { DocumentEditor } from '../../document-editor/document-editor';
11+
import { HeaderFooterWidget } from '../../document-editor/implementation/viewer';
1112
/**
1213
* @private
1314
*/
@@ -16,6 +17,7 @@ export class HeaderFooterProperties {
1617
private container: DocumentEditorContainer;
1718
private firstPage: CheckBox;
1819
private oddOrEven: CheckBox;
20+
private linkToPrevious: CheckBox;
1921
private pageNumber: CheckBox;
2022
private pageCount: CheckBox;
2123
private headerFromTop: NumericTextBox;
@@ -111,11 +113,18 @@ export class HeaderFooterProperties {
111113
this.firstPage.appendTo(firstPage);
112114
firstPageDiv.children[0].setAttribute('title', localObj.getConstant('Different header and footer for first page'));
113115
const oddOrEvenDiv: HTMLElement = this.createDivTemplate(elementId + '_oddOrEvenDiv', optionsDiv);
116+
classList(oddOrEvenDiv, ['e-de-hdr-ftr-frst-div'], []);
114117
const oddOrEven: HTMLInputElement = createElement('input', { id: 'oddOrEven', className: 'e-de-sub-prop-label' }) as HTMLInputElement;
115118
oddOrEvenDiv.appendChild(oddOrEven);
116119
this.oddOrEven = new CheckBox({ label: localObj.getConstant('Different Odd And Even Pages'), change: this.changeoddOrEvenOptions.bind(this), cssClass: 'e-de-prop-sub-label', enableRtl: this.isRtl });
117120
this.oddOrEven.appendTo(oddOrEven);
118121
oddOrEvenDiv.children[0].setAttribute('title', localObj.getConstant('Different header and footer for odd and even pages'));
122+
const linkToPreviousDiv: HTMLElement = this.createDivTemplate(elementId + '_linkToPreviousDiv', optionsDiv);
123+
const linkToPrevious: HTMLInputElement = createElement('input', { id: 'linkToPrevious', className: 'e-de-sub-prop-label' }) as HTMLInputElement;
124+
linkToPreviousDiv.appendChild(linkToPrevious);
125+
this.linkToPrevious = new CheckBox({ label: localObj.getConstant('Link to Previous'), change: this.changeLinkToPreviousOptions.bind(this) ,cssClass: 'e-de-prop-sub-label', enableRtl: this.isRtl, checked: true });
126+
this.linkToPrevious.appendTo(linkToPrevious);
127+
linkToPreviousDiv.children[0].setAttribute('title', localObj.getConstant('Link to the previous Title'));
119128
// let autoFieldLabelDiv: HTMLElement = this.createDivTemplate(element + '_autoFieldLabelDiv', div, 'padding-top:10px;padding-left: 10px;');
120129
// let autoFieldLabel: HTMLElement = createElement('label', { className: 'e-de-header-prop-label', styles: 'height:20px;' });
121130
// autoFieldLabel.innerHTML = 'Insert Autofield';
@@ -222,6 +231,36 @@ export class HeaderFooterProperties {
222231
}, 10);
223232
}
224233
}
234+
private changeLinkToPreviousOptions(): void {
235+
if (!this.documentEditor.isReadOnly) {
236+
let headerFooterType: any = ((this.documentEditor.selection.start.paragraph.containerWidget) as HeaderFooterWidget).headerFooterType;
237+
let value: boolean = this.linkToPrevious.checked;
238+
switch (headerFooterType) {
239+
case 'OddHeader':
240+
this.documentEditor.selection.sectionFormat.oddPageHeader.linkToPrevious = value;
241+
break;
242+
case 'OddFooter':
243+
this.documentEditor.selection.sectionFormat.oddPageFooter.linkToPrevious = value;
244+
break;
245+
case 'EvenHeader':
246+
this.documentEditor.selection.sectionFormat.evenPageHeader.linkToPrevious = value;
247+
break;
248+
case 'EvenFooter':
249+
this.documentEditor.selection.sectionFormat.evenPageFooter.linkToPrevious = value;
250+
break;
251+
case 'FirstPageHeader':
252+
this.documentEditor.selection.sectionFormat.firstPageHeader.linkToPrevious = value;
253+
break;
254+
case 'FirstPageFooter':
255+
this.documentEditor.selection.sectionFormat.firstPageFooter.linkToPrevious = value;
256+
break;
257+
258+
}
259+
setTimeout((): void => {
260+
this.documentEditor.focusIn();
261+
}, 10);
262+
}
263+
}
225264
private changeHeaderValue(): void {
226265
if (!this.isHeaderTopApply) {
227266
return;
@@ -273,6 +312,32 @@ export class HeaderFooterProperties {
273312
} else {
274313
this.oddOrEven.checked = false;
275314
}
315+
if (this.documentEditor.selection.start.paragraph.bodyWidget.sectionIndex == 0) {
316+
this.linkToPrevious.disabled = true;
317+
} else {
318+
this.linkToPrevious.disabled = false;
319+
let headerFooterType: any = ((this.documentEditor.selection.start.paragraph.containerWidget) as HeaderFooterWidget).headerFooterType;
320+
switch (headerFooterType) {
321+
case 'OddHeader':
322+
this.linkToPrevious.checked = this.documentEditor.selection.sectionFormat.oddPageHeader.linkToPrevious;
323+
break;
324+
case 'OddFooter':
325+
this.linkToPrevious.checked = this.documentEditor.selection.sectionFormat.oddPageFooter.linkToPrevious;
326+
break;
327+
case 'EvenHeader':
328+
this.linkToPrevious.checked = this.documentEditor.selection.sectionFormat.evenPageHeader.linkToPrevious;
329+
break;
330+
case 'EvenFooter':
331+
this.linkToPrevious.checked = this.documentEditor.selection.sectionFormat.evenPageFooter.linkToPrevious;
332+
break;
333+
case 'FirstPageHeader':
334+
this.linkToPrevious.checked = this.documentEditor.selection.sectionFormat.firstPageHeader.linkToPrevious;
335+
break;
336+
case 'FirstPageFooter':
337+
this.linkToPrevious.checked = this.documentEditor.selection.sectionFormat.firstPageFooter.linkToPrevious;
338+
break;
339+
}
340+
}
276341
}
277342
public destroy(): void {
278343
if (this.element) {
@@ -290,6 +355,10 @@ export class HeaderFooterProperties {
290355
this.oddOrEven.destroy();
291356
}
292357
this.oddOrEven = undefined;
358+
if (this.linkToPrevious) {
359+
this.linkToPrevious.destroy();
360+
}
361+
this.linkToPrevious = undefined;
293362
if (this.headerFromTop) {
294363
this.headerFromTop.destroy();
295364
this.headerFromTop = undefined;

0 commit comments

Comments
 (0)