Skip to content

Commit 1f4b4e4

Browse files
author
pipeline
committed
v29.1.38 is released
1 parent afd393a commit 1f4b4e4

File tree

130 files changed

+1748
-887
lines changed

Some content is hidden

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

130 files changed

+1748
-887
lines changed

Diff for: controls/barcodegenerator/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 29.1.37 (2025-04-08)
5+
## 29.1.38 (2025-04-15)
66

77
### Barcode
88

Diff for: controls/calendars/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 29.1.37 (2025-04-08)
5+
## 29.1.38 (2025-04-15)
66

77
### DatePicker
88

Diff for: controls/charts/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 29.1.37 (2025-04-08)
5+
## 29.1.38 (2025-04-15)
66

77
### 3DChart
88

Diff for: controls/data/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 29.1.37 (2025-04-08)
5+
## 29.1.38 (2025-04-15)
66

77
### DataManager
88

Diff for: controls/diagrams/CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
## [Unreleased]
44

5+
## 29.1.38 (2025-04-15)
6+
7+
### Diagram
8+
9+
#### Bug Fixes
10+
11+
- `#I706720` - Added localization support for `SearchResults` and `noItemsToDisplay` texts in the symbol palette.
12+
513
## 29.1.37 (2025-04-08)
614

715
### Diagram

Diff for: controls/diagrams/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@syncfusion/ej2-diagrams",
3-
"version": "29.1.35",
3+
"version": "29.1.37",
44
"description": "Feature-rich diagram control to create diagrams like flow charts, organizational charts, mind maps, and BPMN diagrams. Its rich feature set includes built-in shapes, editing, serializing, exporting, printing, overview, data binding, and automatic layouts.",
55
"author": "Syncfusion Inc.",
66
"license": "SEE LICENSE IN license",

Diff for: controls/diagrams/src/diagram/interaction/tool.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ export class SelectTool extends ToolBase {
407407
const arrayNodes: (NodeModel | ConnectorModel | AnnotationModel)[] = this.commandHandler.getSelectedObject();
408408
if (!this.commandHandler.hasSelection() || !args.info || !args.info.ctrlKey) {
409409
// 948882: Improper Selection Behavior When Node Drag Constraint is Disabled
410-
if (button !== 2) {
410+
if (button !== 2 || !arrayNodes.some((obj: NodeModel | ConnectorModel | AnnotationModel) => obj === args.source)) {
411411
this.commandHandler.clearSelection(args.source === null ? true : false);
412412
if (this.action === 'LabelSelect') {
413413
this.commandHandler.labelSelect(args.source, args.sourceWrapper, arrayNodes);

Diff for: controls/diagrams/src/symbol-palette/symbol-palette.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,8 @@ export class SymbolPalette extends Component<HTMLElement> implements INotifyProp
685685
*/
686686
private defaultLocale(): Object
687687
{
688-
return{ SearchShapes: 'Search Shapes'};
688+
//EJ2-949570 - Add Localization Support for "SearchResults" and "No Items To Display"
689+
return { SearchShapes: 'Search Shapes', SearchResults: 'Search Results', NoItemsToDisplay: 'No Items To Display' };
689690
}
690691
/**
691692
* Renders the rulers.
@@ -2229,7 +2230,8 @@ export class SymbolPalette extends Component<HTMLElement> implements INotifyProp
22292230
}
22302231
} else if (value !== '') {
22312232
const emptyDiv: HTMLElement = createHtmlElement('div', { 'id': 'EmptyDiv', 'style': 'text-align:center;font-style:italic' });
2232-
emptyDiv.innerHTML = 'No Items To Display';
2233+
//EJ2-949570 - Add Localization Support for "SearchResults" and "No Items To Display"
2234+
emptyDiv.innerHTML = this.l10n.getConstant('NoItemsToDisplay');
22332235
element.appendChild(emptyDiv);
22342236
} else {
22352237
const element: HTMLElement = document.getElementById('iconSearch');
@@ -2248,7 +2250,9 @@ export class SymbolPalette extends Component<HTMLElement> implements INotifyProp
22482250
paletteDiv = createHtmlElement('div', { 'id': 'SearchPalette', 'style': 'display:none;overflow:auto;' });
22492251
this.element.appendChild(paletteDiv);
22502252
const paletteCollection: AccordionItemModel = {
2251-
header: 'Search Results', expanded: true,
2253+
//EJ2-949570 - Add Localization Support for "SearchResults" and "No Items To Display"
2254+
header: this.l10n.getConstant('SearchResults'),
2255+
expanded: true,
22522256
content: '#SearchPalette'
22532257
};
22542258
this.accordionElement.addItem(paletteCollection, 0);

Diff for: controls/documenteditor/CHANGELOG.md

+14
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,20 @@
22

33
## [Unreleased]
44

5+
## 29.1.38 (2025-04-15)
6+
7+
### DocumentEditor
8+
9+
#### Bug Fixes
10+
11+
- `#I699159` - Fixed the issue where indent was decreasing incorrectly in a list for the entire selection.
12+
- `#I699123` - Fixed the issue with applying numbering and bullet lists.
13+
- `#I703013` - Fixed the issue where the paragraph mark was not included when inserting a bookmark.
14+
- `#I700209` - Fixed the issue where inserting a nested content control only inserted text instead of another content control.
15+
- `#I702581` - Fixed the content control border rendering issue when the paragraph had an indent.
16+
- `#I706170` - Fixed the content overlapping issue with the previous page footer during paragraph deletion.
17+
- `#I705530` - Fixed the rendering issue of double underlines for spell check inside table cell.
18+
519
## 29.1.37 (2025-04-08)
620

721
### DocumentEditor

Diff for: 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": "29.1.35",
3+
"version": "29.1.37",
44
"description": "Feature-rich document editor control with built-in support for context menu, options pane and dialogs.",
55
"keywords": [
66
"ej2",

Diff for: controls/documenteditor/src/document-editor/implementation/editor/editor.ts

+85-34
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,14 @@ export class Editor {
319319
* @private
320320
*/
321321
public isFieldOperation: boolean = false;
322+
/**
323+
* @private
324+
*/
325+
public decreasedIndent: boolean = false;
326+
/**
327+
* @private
328+
*/
329+
public increasedIndent: boolean = false;
322330
/**
323331
* @private
324332
* @returns {boolean} - Returns the restrict formatting
@@ -2727,37 +2735,50 @@ export class Editor {
27272735
}
27282736
}
27292737
private applyRichText(value?: string, title?: string, tag?: string, lock?: boolean, lockContents?: boolean): void {
2730-
let positionStart: TextPosition = this.selection.isForward ? this.selection.start.clone() : this.selection.end.clone();
2731-
let positionEnd: TextPosition = this.selection.isForward ? this.selection.end.clone() : this.selection.start.clone();
2732-
if (this.selection.isParagraphMarkSelected()) {
2733-
positionEnd.offset -= 1;
2734-
}
2735-
if (positionStart.paragraph !== positionEnd.paragraph) {
2736-
if (!positionStart.isAtParagraphStart) {
2737-
positionEnd.setPositionParagraph(positionStart.paragraph.lastChild as LineWidget, (positionStart.paragraph.lastChild as LineWidget).getEndOffset());
2738-
} else if (positionStart.isAtParagraphStart && !positionEnd.isAtParagraphEnd) {
2739-
let previousParagraph: ParagraphWidget;
2740-
if (positionEnd.paragraph.previousRenderedWidget instanceof TableWidget) {
2741-
previousParagraph = this.selection.getLastBlockInLastCell(positionEnd.paragraph.previousRenderedWidget) as ParagraphWidget;
2742-
} else {
2743-
previousParagraph = positionEnd.paragraph.previousRenderedWidget as ParagraphWidget;
2738+
let positionStart: TextPosition;
2739+
let positionEnd: TextPosition;
2740+
let isInline: boolean = true;
2741+
if (!isNullOrUndefined(this.selection.currentContentControl) && this.selection.currentContentControl.contentControlProperties.hasPlaceHolderText) {
2742+
if (this.editorHistory) {
2743+
this.initComplexHistory('InsertContentControl');
2744+
}
2745+
this.delete();
2746+
this.selection.selectContentControlInternal(this.selection.currentContentControl);
2747+
positionStart = this.selection.isForward ? this.selection.start.clone() : this.selection.end.clone();
2748+
positionEnd = this.selection.isForward ? this.selection.end.clone() : this.selection.start.clone();
2749+
isInline = this.selection.currentContentControl.contentControlWidgetType === 'Block' ? false : true;
2750+
} else {
2751+
positionStart = this.selection.isForward ? this.selection.start.clone() : this.selection.end.clone();
2752+
positionEnd = this.selection.isForward ? this.selection.end.clone() : this.selection.start.clone();
2753+
if (this.selection.isParagraphMarkSelected()) {
2754+
positionEnd.offset -= 1;
2755+
}
2756+
if (positionStart.paragraph !== positionEnd.paragraph) {
2757+
if (!positionStart.isAtParagraphStart) {
2758+
positionEnd.setPositionParagraph(positionStart.paragraph.lastChild as LineWidget, (positionStart.paragraph.lastChild as LineWidget).getEndOffset());
2759+
} else if (positionStart.isAtParagraphStart && !positionEnd.isAtParagraphEnd) {
2760+
let previousParagraph: ParagraphWidget;
2761+
if (positionEnd.paragraph.previousRenderedWidget instanceof TableWidget) {
2762+
previousParagraph = this.selection.getLastBlockInLastCell(positionEnd.paragraph.previousRenderedWidget) as ParagraphWidget;
2763+
} else {
2764+
previousParagraph = positionEnd.paragraph.previousRenderedWidget as ParagraphWidget;
2765+
}
2766+
positionEnd.setPositionParagraph(previousParagraph.lastChild as LineWidget, (previousParagraph.lastChild as LineWidget).getEndOffset());
27442767
}
2745-
positionEnd.setPositionParagraph(previousParagraph.lastChild as LineWidget, (previousParagraph.lastChild as LineWidget).getEndOffset());
27462768
}
2747-
}
2748-
let isInline: boolean = true;
2749-
if (positionStart.isAtParagraphStart && positionEnd.isAtParagraphEnd) {
2750-
isInline = false;
2751-
}
2752-
this.updateContentControlPosition(positionStart, positionEnd);
2753-
if (this.editorHistory) {
2754-
this.initComplexHistory('InsertContentControl');
2769+
this.updateContentControlPosition(positionStart, positionEnd);
2770+
if (positionStart.isAtParagraphStart && positionEnd.isAtParagraphEnd) {
2771+
isInline = false;
2772+
}
2773+
if (this.editorHistory) {
2774+
this.initComplexHistory('InsertContentControl');
2775+
}
27552776
}
27562777
const blockStartContentControl: ContentControl = new ContentControl(isInline ? 'Inline' : 'Block');
27572778
const blockEndContentControl: ContentControl = new ContentControl(isInline ? 'Inline' : 'Block');
27582779
let properties: ContentControlProperties = new ContentControlProperties(isInline ? 'Inline' : 'Block');
27592780
properties.color = "#00000000";
2760-
positionStart.isAtSamePosition(positionEnd) ? properties.hasPlaceHolderText = true : properties.hasPlaceHolderText = false;
2781+
properties.hasPlaceHolderText = positionStart.isAtSamePosition(positionEnd) ? true : false;
27612782
properties.isTemporary = false;
27622783
properties.lockContentControl = !isNullOrUndefined(lock) ? !lock : false;
27632784
properties.lockContents = !isNullOrUndefined(lockContents) ? !lockContents : false;
@@ -7238,6 +7259,9 @@ export class Editor {
72387259
if (lineWidget.children[k].characterFormat.fontColor !== insertFormat.fontColor) {
72397260
lineWidget.children[k].characterFormat.fontColor = insertFormat.fontColor;
72407261
}
7262+
if (lineWidget.children[k].characterFormat.highlightColor !== insertFormat.highlightColor) {
7263+
lineWidget.children[k].characterFormat.highlightColor = insertFormat.highlightColor;
7264+
}
72417265
if (lineWidget.children[k].characterFormat.fontSize !== insertFormat.fontSize) {
72427266
lineWidget.children[k].characterFormat.fontSize = insertFormat.fontSize;
72437267
lineWidget.children[k].characterFormat.fontSizeBidi = insertFormat.fontSizeBidi;
@@ -11215,7 +11239,9 @@ export class Editor {
1121511239
*/
1121611240
public increaseIndent(): void {
1121711241
if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {
11242+
this.increasedIndent = true;
1121811243
this.onApplyParagraphFormat('leftIndent', this.documentHelper.defaultTabWidth, true, false);
11244+
this.increasedIndent = false;
1121911245
}
1122011246
}
1122111247
/**
@@ -11225,7 +11251,9 @@ export class Editor {
1122511251
*/
1122611252
public decreaseIndent(): void {
1122711253
if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {
11254+
this.decreasedIndent = true;
1122811255
this.onApplyParagraphFormat('leftIndent', -this.documentHelper.defaultTabWidth, true, false);
11256+
this.decreasedIndent = false;
1122911257
}
1123011258
}
1123111259
/**
@@ -13103,15 +13131,21 @@ export class Editor {
1310313131
// Increment or Decrement list level for Multilevel lists.
1310413132
let documentHelper: DocumentHelper = this.documentHelper;
1310513133
let listFormat: WListFormat = this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat;
13106-
let paragraphFormat: WParagraphFormat = this.documentHelper.selection.start.paragraph.paragraphFormat;
13134+
let paragraphFormat: WParagraphFormat = undefined;
13135+
if (!this.documentHelper.selection.isForward) {
13136+
paragraphFormat = documentHelper.selection.end.paragraph.paragraphFormat;
13137+
} else {
13138+
paragraphFormat = documentHelper.selection.start.paragraph.paragraphFormat;
13139+
}
1310713140
let list: WList = documentHelper.getListById(paragraphFormat.listFormat.listId);
1310813141
let listLevel: WListLevel = documentHelper.layout.getListLevel(list, paragraphFormat.listFormat.listLevelNumber);
13142+
const paraListLevelNumber: number = paragraphFormat.listFormat.listLevelNumber;
1310913143
let levelNumber: number;
1311013144
if (increaseLevel) {
13111-
levelNumber = paragraphFormat.listFormat.listLevelNumber + 1;
13145+
levelNumber = paraListLevelNumber === 8 ? paraListLevelNumber : paraListLevelNumber + 1;
1311213146
}
1311313147
else {
13114-
levelNumber = paragraphFormat.listFormat.listLevelNumber - 1;
13148+
levelNumber = paraListLevelNumber === 0 ? paraListLevelNumber : paraListLevelNumber - 1;
1311513149
}
1311613150
let nextListLevel: WListLevel = documentHelper.layout.getListLevel(list, levelNumber);
1311713151
if (!isNullOrUndefined(nextListLevel)) {
@@ -13824,8 +13858,17 @@ export class Editor {
1382413858
block = this.documentHelper.selection.getNextRenderedBlock(block);
1382513859
if (!isNullOrUndefined(block)) { //Goto the next block.
1382613860
if (block instanceof ParagraphWidget) {
13827-
if (property === 'listFormat' && value instanceof WListFormat && block.paragraphFormat.listFormat.hasValue("listLevelNumber") && value["listLevelNumber"] < block.paragraphFormat.listFormat.listLevelNumber) {
13828-
value["listLevelNumber"] = block.paragraphFormat.listFormat.listLevelNumber;
13861+
if (value instanceof WListFormat && block.paragraphFormat.listFormat.hasValue("listLevelNumber")) {
13862+
const paraListLevelNumber: number = block.paragraphFormat.listFormat.listLevelNumber;
13863+
if (property === 'listFormat' && value["listLevelNumber"] < paraListLevelNumber && !this.increasedIndent && !this.decreasedIndent) {
13864+
value["listLevelNumber"] = paraListLevelNumber;
13865+
}
13866+
if (this.increasedIndent && value["listLevelNumber"] - 1 !== paraListLevelNumber) {
13867+
value["listLevelNumber"] = paraListLevelNumber === 8 ? paraListLevelNumber : paraListLevelNumber + 1;
13868+
}
13869+
if (this.decreasedIndent && value["listLevelNumber"] + 1 !== paraListLevelNumber) {
13870+
value["listLevelNumber"] = paraListLevelNumber === 0 ? paraListLevelNumber : paraListLevelNumber - 1;
13871+
}
1382913872
}
1383013873
this.applyParaFormat(block, start, end, property, value, update);
1383113874
} else {
@@ -17960,25 +18003,32 @@ export class Editor {
1796018003
let levelNumber: number = -1;
1796118004
let initialListLevel: WListLevel = undefined;
1796218005
let isSameList: boolean = false;
17963-
if (currentParagraph.paragraphFormat.listFormat.listId !== -1 && !isNullOrUndefined(currentParagraph.paragraphFormat.listFormat.listLevel)) {
18006+
let isRestartList: boolean = false;
18007+
if (!isNullOrUndefined(list) && start.paragraph.paragraphFormat.listFormat.listId === -1
18008+
&& currentParagraph.paragraphFormat.listFormat.listId !== -1 && currentParagraph.paragraphFormat.listFormat.listLevelNumber > 0
18009+
&& currentParagraph.paragraphFormat.listFormat.listLevel.listLevelPattern !== listLevelPattern) {
18010+
isRestartList = true;
18011+
list = undefined;
18012+
}
18013+
if (!isRestartList && currentParagraph.paragraphFormat.listFormat.listId !== -1 && !isNullOrUndefined(currentParagraph.paragraphFormat.listFormat.listLevel)) {
1796418014
const listFormat: WListFormat = currentParagraph.paragraphFormat.listFormat;
1796518015
this.listFormatInfo = {
1796618016
listNumberFormat: listFormat.listLevel.numberFormat,
1796718017
listLevelPattern: listFormat.listLevel.listLevelPattern,
1796818018
listCharacterFormat: listFormat.listLevel.characterFormat.hasValue('fontFamily') ? listFormat.listLevel.characterFormat.fontFamily : undefined,
1796918019
listId: listFormat.listId
1797018020
};
17971-
if (isNullOrUndefined(currentParagraph.previousWidget) && currentParagraph.paragraphFormat.listFormat.listLevelNumber > 0) {
17972-
this.listFormatInfo.listLevelNumber = this.listLevelNumber = this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat.listLevelNumber;
18021+
if (isNullOrUndefined(currentParagraph.previousWidget) && listFormat.listLevelNumber > 0) {
18022+
this.listFormatInfo.listLevelNumber = this.listLevelNumber = start.paragraph.paragraphFormat.listFormat.listLevelNumber;
1797318023
}
1797418024
else {
1797518025
this.listFormatInfo.listLevelNumber = this.listLevelNumber = listFormat.listLevelNumber;
1797618026
}
1797718027
}
1797818028
if (!isNullOrUndefined(list)) {
17979-
if (isNullOrUndefined(currentParagraph.previousWidget) && currentParagraph.paragraphFormat.listFormat.listLevelNumber > 0)
18029+
if (isNullOrUndefined(currentParagraph.previousWidget) && currentParagraph.paragraphFormat.listFormat.listLevelNumber > 0)
1798018030
{
17981-
levelNumber = this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat.listLevelNumber;
18031+
levelNumber = start.paragraph.paragraphFormat.listFormat.listLevelNumber;
1798218032
}
1798318033
else
1798418034
{
@@ -23909,6 +23959,7 @@ export class Editor {
2390923959
}
2391023960
this.owner.isShiftingEnabled = true;
2391123961
this.insertElements([editEnd], [editStart]);
23962+
editStart.editRangeEnd.line = editEnd.line;
2391223963
if (this.editorHistory) {
2391323964
this.editorHistory.updateComplexHistoryInternal();
2391423965
}

0 commit comments

Comments
 (0)