Skip to content
This repository was archived by the owner on Jun 26, 2020. It is now read-only.

Commit 5daa487

Browse files
authored
Merge pull request #246 from ckeditor/i/6193
Other: Implemented lazy loading for the table dropdown. This will reduce editor initialization time. Closes ckeditor/ckeditor5#6193.
2 parents 5726090 + e06e917 commit 5daa487

File tree

2 files changed

+33
-13
lines changed

2 files changed

+33
-13
lines changed

src/tableui.js

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,21 +54,29 @@ export default class TableUI extends Plugin {
5454
tooltip: true
5555
} );
5656

57-
// Prepare custom view for dropdown's panel.
58-
const insertTableView = new InsertTableView( locale );
59-
dropdownView.panelView.children.add( insertTableView );
57+
let insertTableView;
6058

61-
insertTableView.delegate( 'execute' ).to( dropdownView );
59+
dropdownView.on( 'change:isOpen', () => {
60+
if ( insertTableView ) {
61+
return;
62+
}
6263

63-
dropdownView.buttonView.on( 'open', () => {
64-
// Reset the chooser before showing it to the user.
65-
insertTableView.rows = 0;
66-
insertTableView.columns = 0;
67-
} );
64+
// Prepare custom view for dropdown's panel.
65+
insertTableView = new InsertTableView( locale );
66+
dropdownView.panelView.children.add( insertTableView );
67+
68+
insertTableView.delegate( 'execute' ).to( dropdownView );
69+
70+
dropdownView.buttonView.on( 'open', () => {
71+
// Reset the chooser before showing it to the user.
72+
insertTableView.rows = 0;
73+
insertTableView.columns = 0;
74+
} );
6875

69-
dropdownView.on( 'execute', () => {
70-
editor.execute( 'insertTable', { rows: insertTableView.rows, columns: insertTableView.columns } );
71-
editor.editing.view.focus();
76+
dropdownView.on( 'execute', () => {
77+
editor.execute( 'insertTable', { rows: insertTableView.rows, columns: insertTableView.columns } );
78+
editor.editing.view.focus();
79+
} );
7280
} );
7381

7482
return dropdownView;

tests/tableui.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
1111

1212
import TableEditing from '../src/tableediting';
1313
import TableUI from '../src/tableui';
14+
import InsertTableView from '../src/ui/inserttableview';
1415
import SwitchButtonView from '@ckeditor/ckeditor5-ui/src/button/switchbuttonview';
1516
import DropdownView from '@ckeditor/ckeditor5-ui/src/dropdown/dropdownview';
1617
import ListSeparatorView from '@ckeditor/ckeditor5-ui/src/list/listseparatorview';
@@ -53,6 +54,7 @@ describe( 'TableUI', () => {
5354

5455
beforeEach( () => {
5556
insertTable = editor.ui.componentFactory.create( 'insertTable' );
57+
insertTable.isOpen = true; // Dropdown is lazy loaded, so make sure its open (#6193).
5658
} );
5759

5860
it( 'should register insertTable button', () => {
@@ -65,7 +67,7 @@ describe( 'TableUI', () => {
6567
const command = editor.commands.get( 'insertTable' );
6668

6769
command.isEnabled = true;
68-
expect( insertTable.buttonView.isOn ).to.be.false;
70+
expect( insertTable.buttonView.isOn ).to.be.true;
6971
expect( insertTable.buttonView.isEnabled ).to.be.true;
7072

7173
command.isEnabled = false;
@@ -87,6 +89,8 @@ describe( 'TableUI', () => {
8789
} );
8890

8991
it( 'should reset rows & columns on dropdown open', () => {
92+
insertTable.isOpen = true;
93+
9094
const tableSizeView = insertTable.panelView.children.first;
9195

9296
expect( tableSizeView.rows ).to.equal( 0 );
@@ -100,6 +104,14 @@ describe( 'TableUI', () => {
100104
expect( tableSizeView.rows ).to.equal( 0 );
101105
expect( tableSizeView.columns ).to.equal( 0 );
102106
} );
107+
108+
it( 'is not fully initialized when not open', () => {
109+
const dropdown = editor.ui.componentFactory.create( 'insertTable' );
110+
111+
for ( const childView of dropdown.panelView.children ) {
112+
expect( childView ).not.to.be.instanceOf( InsertTableView );
113+
}
114+
} );
103115
} );
104116

105117
describe( 'tableRow dropdown', () => {

0 commit comments

Comments
 (0)