Skip to content

Commit c4bd4b4

Browse files
authored
Merge pull request #2921 from microsoft/u/juliaroldi/bump-rooster-js
Bump RoosterJS Version 9.17.0
2 parents 9f1ba11 + efa2131 commit c4bd4b4

File tree

32 files changed

+718
-305
lines changed

32 files changed

+718
-305
lines changed

demo/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<div id="mainPane"></div>
2121
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.14.0/umd/react.production.min.js"></script>
2222
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.14.0/umd/react-dom.production.min.js"></script>
23-
<script src="https://cdnjs.cloudflare.com/ajax/libs/fluentui-react/8.60.1/fluentui-react.min.js"></script>
23+
<script src="https://cdnjs.cloudflare.com/ajax/libs/fluentui-react/8.122.3/fluentui-react.min.js"></script>
2424
<script src="rooster-min.js"></script>
2525
<script src="rooster-react-min.js"></script>
2626
<script src="demo.js"></script>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { getFirstSelectedTable, mutateBlock } from 'roosterjs-content-model-dom';
2+
import { IEditor } from 'roosterjs-content-model-types';
3+
import { RibbonButton, showInputDialog } from 'roosterjs-react';
4+
5+
/**
6+
* @internal
7+
* "Image Border Style" button on the format ribbon
8+
*/
9+
export const tableTitleButton: RibbonButton<'buttonNameTableTitle'> = {
10+
key: 'buttonNameTableTitle',
11+
unlocalizedText: 'Table Title',
12+
iconName: 'TableComputed',
13+
isDisabled: formatState => !formatState.isInTable,
14+
onClick: (editor, _, strings, uiUtilities) => {
15+
const items = {
16+
title: {
17+
autoFocus: true,
18+
labelKey: 'buttonNameTableTitle' as const,
19+
unlocalizedLabel: 'Title',
20+
initValue: '',
21+
},
22+
};
23+
24+
showInputDialog(
25+
uiUtilities,
26+
'buttonNameTableTitle',
27+
'Insert Table',
28+
items,
29+
strings,
30+
(itemName, newValue, values) => {
31+
if (itemName == 'title') {
32+
values.title = newValue;
33+
return values;
34+
} else {
35+
return null;
36+
}
37+
}
38+
).then(result => {
39+
editor.focus();
40+
if (result && result.title) {
41+
insertTableTitle(editor, result.title);
42+
}
43+
});
44+
},
45+
};
46+
47+
const insertTableTitle = (editor: IEditor, title: string) => {
48+
editor.formatContentModel(model => {
49+
const table = getFirstSelectedTable(model)[0];
50+
if (table) {
51+
mutateBlock(table).format.title = title;
52+
return true;
53+
}
54+
return false;
55+
});
56+
};

demo/scripts/controlsV2/tabs/ribbonButtons.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { tableBorderColorButton } from '../demoButtons/tableBorderColorButton';
2121
import { tableBorderStyleButton } from '../demoButtons/tableBorderStyleButton';
2222
import { tableBorderWidthButton } from '../demoButtons/tableBorderWidthButton';
2323
import { tableOptionsButton } from '../demoButtons/tableOptionsButton';
24+
import { tableTitleButton } from '../demoButtons/tableTitleButton';
2425
import { tabNames } from './getTabs';
2526
import {
2627
tableAlignCellButton,
@@ -83,6 +84,7 @@ const tableButtons: RibbonButton<any>[] = [
8384
insertTableButton,
8485
formatTableButton,
8586
setTableCellShadeButton,
87+
tableTitleButton,
8688
tableOptionsButton,
8789
tableInsertButton,
8890
tableDeleteButton,
@@ -178,6 +180,7 @@ const allButtons: RibbonButton<any>[] = [
178180
tableDeleteButton,
179181
tableMergeButton,
180182
tableSplitButton,
183+
tableTitleButton,
181184
tableAlignCellButton,
182185
tableAlignTableButton,
183186
tableBorderApplyButton,

demo/scripts/utils/cssMonitor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Stylesheet } from '@fluentui/merge-styles/lib/Stylesheet';
1+
import { Stylesheet } from '@fluentui/merge-styles';
22

33
let isCssMonitorStarted: boolean = false;
44
const activeWindows: Window[] = [];

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<div id="mainPane"></div>
2121
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.14.0/umd/react.production.min.js"></script>
2222
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.14.0/umd/react-dom.production.min.js"></script>
23-
<script src="https://cdnjs.cloudflare.com/ajax/libs/fluentui-react/8.60.1/fluentui-react.min.js"></script>
23+
<script src="https://cdnjs.cloudflare.com/ajax/libs/fluentui-react/8.122.3/fluentui-react.min.js"></script>
2424
<script src="scripts/demo.js"></script>
2525
</body>
2626
</html>

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"publish": "node tools/build.js clean normalize buildcommonjs buildamd buildmjs dts pack packprod builddemo builddoc publish"
3434
},
3535
"devDependencies": {
36-
"@fluentui/react": "^8.0.0",
36+
"@fluentui/react": "8.122.3",
3737
"@microsoft/loader-load-themed-styles": "1.8.11",
3838
"@types/color": "3.0.0",
3939
"@types/dompurify": "2.2.3",

packages/roosterjs-content-model-api/lib/publicApi/segment/changeFontSize.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,17 @@ const MAX_FONT_SIZE = 1000;
2121
* @param change Whether increase or decrease font size
2222
* @param fontSizes A sorted font size array, in pt. Default value is FONT_SIZES
2323
*/
24-
export function changeFontSize(editor: IEditor, change: 'increase' | 'decrease') {
24+
export function changeFontSize(
25+
editor: IEditor,
26+
change: 'increase' | 'decrease',
27+
fontSizes: number[] = FONT_SIZES
28+
) {
2529
editor.focus();
2630

2731
formatSegmentWithContentModel(
2832
editor,
2933
'changeFontSize',
30-
(format, _, __, paragraph) => changeFontSizeInternal(change, format, paragraph),
34+
(format, _, __, paragraph) => changeFontSizeInternal(change, format, paragraph, fontSizes),
3135
undefined /* segmentHasStyleCallback*/,
3236
true /*includingFormatHandler*/
3337
);
@@ -36,13 +40,14 @@ export function changeFontSize(editor: IEditor, change: 'increase' | 'decrease')
3640
function changeFontSizeInternal(
3741
change: 'increase' | 'decrease',
3842
format: ContentModelSegmentFormat,
39-
paragraph: ShallowMutableContentModelParagraph | null
43+
paragraph: ShallowMutableContentModelParagraph | null,
44+
fontSizes: number[]
4045
) {
4146
if (format.fontSize) {
4247
const sizeInPt = parseValueWithUnit(format.fontSize, undefined /*element*/, 'pt');
4348

4449
if (sizeInPt > 0) {
45-
const newSize = getNewFontSize(sizeInPt, change == 'increase' ? 1 : -1, FONT_SIZES);
50+
const newSize = getNewFontSize(sizeInPt, change == 'increase' ? 1 : -1, fontSizes);
4651

4752
setFontSizeInternal(newSize + 'pt', format, paragraph);
4853
}

packages/roosterjs-content-model-core/lib/command/paste/generatePasteOptionFromPlugins.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,5 @@ export function generatePasteOptionFromPlugins(
3939
containsBlockElements: !!htmlFromClipboard.containsBlockElements,
4040
};
4141

42-
return pasteType == 'asPlainText'
43-
? event
44-
: editor.triggerEvent('beforePaste', event, true /* broadcast */);
42+
return editor.triggerEvent('beforePaste', event, true /* broadcast */);
4543
}

packages/roosterjs-content-model-core/test/command/paste/generatePasteOptionFromPluginsTest.ts

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ describe('generatePasteOptionFromPlugins', () => {
221221
it('PasteType=asPlainText', () => {
222222
triggerPluginEventSpy.and.callFake((core, event) => {
223223
Object.assign(event, mockedResult);
224+
225+
return event;
224226
});
225227
const result = generatePasteOptionFromPlugins(
226228
editor,
@@ -236,24 +238,16 @@ describe('generatePasteOptionFromPlugins', () => {
236238
);
237239

238240
expect(result).toEqual({
239-
fragment: mockedFragment,
240-
domToModelOption: {
241-
additionalAllowedTags: [],
242-
additionalDisallowedTags: [],
243-
additionalFormatParsers: {},
244-
formatParserOverride: {},
245-
processorOverride: {},
246-
styleSanitizers: {},
247-
attributeSanitizers: {},
248-
},
249-
pasteType: 'asPlainText',
250241
eventType: 'beforePaste',
251-
clipboardData: mockedClipboardData,
252-
htmlBefore,
253-
htmlAfter,
254-
htmlAttributes: mockedMetadata,
242+
clipboardData: 'CLIPBOARDDATA' as any,
243+
fragment: 'FragmentResult' as any,
244+
htmlBefore: 'HTMLBEFORE',
245+
htmlAfter: 'HTMLAFTER',
246+
htmlAttributes: 'METADATA' as any,
247+
pasteType: 'TypeResult' as any,
248+
domToModelOption: 'OptionResult' as any,
255249
containsBlockElements: false,
256250
});
257-
expect(triggerPluginEventSpy).toHaveBeenCalledTimes(0);
251+
expect(triggerPluginEventSpy).toHaveBeenCalledTimes(1);
258252
});
259253
});

packages/roosterjs-content-model-core/test/command/paste/pasteTest.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,9 @@ describe('paste with content model & paste plugin', () => {
223223

224224
paste(editor!, clipboardData, 'asPlainText');
225225

226-
expect(setProcessorF.setProcessor).toHaveBeenCalledTimes(0);
227-
expect(addParserF.addParser).toHaveBeenCalledTimes(0);
228-
expect(WordDesktopFile.processPastedContentFromWordDesktop).toHaveBeenCalledTimes(0);
226+
expect(setProcessorF.setProcessor).toHaveBeenCalledTimes(1);
227+
expect(addParserF.addParser).toHaveBeenCalledTimes(9);
228+
expect(WordDesktopFile.processPastedContentFromWordDesktop).toHaveBeenCalledTimes(1);
229229
});
230230

231231
it('Word Online | Plain Text', () => {
@@ -234,9 +234,9 @@ describe('paste with content model & paste plugin', () => {
234234

235235
paste(editor!, clipboardData, 'asPlainText');
236236

237-
expect(setProcessorF.setProcessor).toHaveBeenCalledTimes(0);
238-
expect(addParserF.addParser).toHaveBeenCalledTimes(0);
239-
expect(WacComponents.processPastedContentWacComponents).toHaveBeenCalledTimes(0);
237+
expect(setProcessorF.setProcessor).toHaveBeenCalledTimes(2);
238+
expect(addParserF.addParser).toHaveBeenCalledTimes(11);
239+
expect(WacComponents.processPastedContentWacComponents).toHaveBeenCalledTimes(1);
240240
});
241241

242242
it('Excel Online | Plain Text', () => {
@@ -246,7 +246,7 @@ describe('paste with content model & paste plugin', () => {
246246
paste(editor!, clipboardData, 'asPlainText');
247247

248248
expect(setProcessorF.setProcessor).toHaveBeenCalledTimes(0);
249-
expect(addParserF.addParser).toHaveBeenCalledTimes(0);
249+
expect(addParserF.addParser).toHaveBeenCalledTimes(4);
250250
expect(ExcelF.processPastedContentFromExcel).toHaveBeenCalledTimes(0);
251251
});
252252

@@ -257,7 +257,7 @@ describe('paste with content model & paste plugin', () => {
257257
paste(editor!, clipboardData, 'asPlainText');
258258

259259
expect(setProcessorF.setProcessor).toHaveBeenCalledTimes(0);
260-
expect(addParserF.addParser).toHaveBeenCalledTimes(0);
260+
expect(addParserF.addParser).toHaveBeenCalledTimes(4);
261261
expect(ExcelF.processPastedContentFromExcel).toHaveBeenCalledTimes(0);
262262
});
263263

@@ -268,8 +268,8 @@ describe('paste with content model & paste plugin', () => {
268268
paste(editor!, clipboardData, 'asPlainText');
269269

270270
expect(setProcessorF.setProcessor).toHaveBeenCalledTimes(0);
271-
expect(addParserF.addParser).toHaveBeenCalledTimes(0);
272-
expect(PPT.processPastedContentFromPowerPoint).toHaveBeenCalledTimes(0);
271+
expect(addParserF.addParser).toHaveBeenCalledTimes(4);
272+
expect(PPT.processPastedContentFromPowerPoint).toHaveBeenCalledTimes(1);
273273
});
274274

275275
it('Verify the event data is not lost', () => {

0 commit comments

Comments
 (0)