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

Commit

Permalink
Internal: Updated the usage of UI components which are now driven by …
Browse files Browse the repository at this point in the history
…synchronous initialization and destruction (see https://github.com/ckeditor/ckeditor5-ui/issues/225).
  • Loading branch information
Reinmar committed Jul 5, 2017
2 parents fe7d27b + 787b355 commit 68a454c
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 79 deletions.
11 changes: 7 additions & 4 deletions src/inlineeditor.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,9 @@ export default class InlineEditor extends StandardEditor {
// It's safe to assume that the model->view conversion will not work after super.destroy().
const data = this.getData();

return this.ui.destroy()
.then( () => super.destroy() )
this.ui.destroy();

return super.destroy()
.then( () => setDataInElement( this.element, data ) );
}

Expand Down Expand Up @@ -77,8 +78,10 @@ export default class InlineEditor extends StandardEditor {

resolve(
editor.initPlugins()
.then( () => editor.ui.init() )
.then( () => editor.fire( 'uiReady' ) )
.then( () => {
editor.ui.init();
editor.fire( 'uiReady' );
} )
.then( () => editor.loadDataFromEditorElement() )
.then( () => {
editor.fire( 'dataReady' );
Expand Down
27 changes: 10 additions & 17 deletions src/inlineeditorui.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,32 +73,25 @@ export default class InlineEditorUI {

/**
* Initializes the UI.
*
* @returns {Promise} A Promise resolved when the initialization process is finished.
*/
init() {
const editor = this.editor;

return this.view.init()
.then( () => {
return this.view.toolbar.fillFromConfig( editor.config.get( 'toolbar' ), this.componentFactory );
} )
.then( () => {
enableToolbarKeyboardFocus( {
origin: editor.editing.view,
originFocusTracker: this.focusTracker,
originKeystrokeHandler: editor.keystrokes,
toolbar: this.view.toolbar
} );
} );
this.view.init();
this.view.toolbar.fillFromConfig( editor.config.get( 'toolbar' ), this.componentFactory );

enableToolbarKeyboardFocus( {
origin: editor.editing.view,
originFocusTracker: this.focusTracker,
originKeystrokeHandler: editor.keystrokes,
toolbar: this.view.toolbar
} );
}

/**
* Destroys the UI.
*
* @returns {Promise} A Promise resolved when the destruction process is finished.
*/
destroy() {
return this.view.destroy();
this.view.destroy();
}
}
5 changes: 3 additions & 2 deletions src/inlineeditoruiview.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,9 @@ export default class InlineEditorUIView extends EditorUIView {
* @inheritDoc
*/
init() {
return super.init()
.then( () => this.panel.content.add( this.toolbar ) );
super.init();

this.panel.content.add( this.toolbar );
}

/**
Expand Down
59 changes: 18 additions & 41 deletions tests/inlineeditorui.js
Original file line number Diff line number Diff line change
Expand Up @@ -123,71 +123,48 @@ describe( 'InlineEditorUI', () => {

describe( 'init()', () => {
afterEach( () => {
return ui.destroy();
} );

it( 'returns a promise', () => {
const promise = ui.init().then( () => {
expect( promise ).to.be.instanceof( Promise );
} );

return promise;
ui.destroy();
} );

it( 'initializes the #view', () => {
const spy = sinon.spy( view, 'init' );

return ui.init().then( () => {
sinon.assert.calledOnce( spy );
} );
ui.init();
sinon.assert.calledOnce( spy );
} );

it( 'fills view.toolbar#items with editor config', () => {
const spy = testUtils.sinon.spy( view.toolbar, 'fillFromConfig' );

return ui.init().then( () => {
sinon.assert.calledWithExactly( spy, editor.config.get( 'toolbar' ), ui.componentFactory );
} );
ui.init();
sinon.assert.calledWithExactly( spy, editor.config.get( 'toolbar' ), ui.componentFactory );
} );

it( 'initializes keyboard navigation between view#toolbar and view#editable', () => {
const spy = testUtils.sinon.spy( view.toolbar, 'focus' );

return ui.init().then( () => {
ui.focusTracker.isFocused = true;
ui.view.toolbar.focusTracker.isFocused = false;

editor.keystrokes.press( {
keyCode: keyCodes.f10,
altKey: true,
preventDefault: sinon.spy(),
stopPropagation: sinon.spy()
} );
ui.init();
ui.focusTracker.isFocused = true;
ui.view.toolbar.focusTracker.isFocused = false;

sinon.assert.calledOnce( spy );
editor.keystrokes.press( {
keyCode: keyCodes.f10,
altKey: true,
preventDefault: sinon.spy(),
stopPropagation: sinon.spy()
} );

sinon.assert.calledOnce( spy );
} );
} );

describe( 'destroy()', () => {
it( 'returns a promise', () => {
return ui.init().then( () => {
const promise = ui.destroy().then( () => {
expect( promise ).to.be.instanceof( Promise );
} );

return promise;
} );
} );

it( 'destroys the #view', () => {
const spy = sinon.spy( view, 'destroy' );

return ui.init()
.then( () => ui.destroy() )
.then( () => {
sinon.assert.calledOnce( spy );
} );
ui.init();
ui.destroy();
sinon.assert.calledOnce( spy );
} );
} );
} );
Expand Down
24 changes: 9 additions & 15 deletions tests/inlineeditoruiview.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,9 @@ describe( 'InlineEditorUIView', () => {
it( 'is registered as a child', () => {
const spy = sinon.spy( view.editable, 'destroy' );

return view.init()
.then( () => view.destroy() )
.then( () => {
sinon.assert.calledOnce( spy );
} );
view.init();
view.destroy();
sinon.assert.calledOnce( spy );
} );
} );
} );
Expand All @@ -80,21 +78,17 @@ describe( 'InlineEditorUIView', () => {
it( 'appends #toolbar to panel#content', () => {
expect( view.panel.content ).to.have.length( 0 );

return view.init()
.then( () => {
expect( view.panel.content.get( 0 ) ).to.equal( view.toolbar );
} )
.then( () => view.destroy() );
view.init();
expect( view.panel.content.get( 0 ) ).to.equal( view.toolbar );
view.destroy();
} );
} );

describe( 'editableElement', () => {
it( 'returns editable\'s view element', () => {
return view.init()
.then( () => {
expect( view.editableElement.getAttribute( 'contentEditable' ) ).to.equal( 'true' );
} )
.then( () => view.destroy() );
view.init();
expect( view.editableElement.getAttribute( 'contentEditable' ) ).to.equal( 'true' );
view.destroy();
} );
} );

Expand Down

0 comments on commit 68a454c

Please sign in to comment.