From 5f35215d80cb193c9a2c4a136c94547c5d2a2a10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Go=C5=82aszewski?= Date: Thu, 6 Dec 2018 14:38:51 +0100 Subject: [PATCH 1/4] Remove redundant check in isInsideNestedEditable(). --- src/widget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widget.js b/src/widget.js index c533ac30..148fade0 100644 --- a/src/widget.js +++ b/src/widget.js @@ -415,7 +415,7 @@ function isSelectAllKeyCode( domEventData ) { // @returns {Boolean} function isInsideNestedEditable( element ) { while ( element ) { - if ( !!element && element.is( 'editableElement' ) && !element.is( 'rootElement' ) ) { + if ( element.is( 'editableElement' ) && !element.is( 'rootElement' ) ) { return true; } From 99363cfc26fd70c2deca4d0af64e9beb4d1325da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Go=C5=82aszewski?= Date: Thu, 6 Dec 2018 15:18:36 +0100 Subject: [PATCH 2/4] Allow widget nested in editable element to be selectable. --- src/widget.js | 9 +++++++-- tests/widget.js | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/widget.js b/src/widget.js index 148fade0..300b1caf 100644 --- a/src/widget.js +++ b/src/widget.js @@ -9,8 +9,8 @@ import Plugin from '@ckeditor/ckeditor5-core/src/plugin'; import MouseObserver from '@ckeditor/ckeditor5-engine/src/view/observer/mouseobserver'; -import { isWidget, WIDGET_SELECTED_CLASS_NAME, getLabel } from './utils'; -import { keyCodes, getCode, parseKeystroke } from '@ckeditor/ckeditor5-utils/src/keyboard'; +import { getLabel, isWidget, WIDGET_SELECTED_CLASS_NAME } from './utils'; +import { getCode, keyCodes, parseKeystroke } from '@ckeditor/ckeditor5-utils/src/keyboard'; import '../theme/widget.css'; @@ -419,6 +419,11 @@ function isInsideNestedEditable( element ) { return true; } + // Click on nested widget should select it. + if ( isWidget( element ) ) { + return false; + } + element = element.parent; } diff --git a/tests/widget.js b/tests/widget.js index 4dad24a0..04128ef4 100644 --- a/tests/widget.js +++ b/tests/widget.js @@ -1349,5 +1349,31 @@ describe( 'Widget', () => { '' ); } ); + + it( 'should select widget in editable', () => { + model.schema.extend( 'widget', { allowIn: 'nested' } ); + + setModelData( model, '[]' ); + + const widgetInEditable = viewDocument.getRoot().getChild( 0 ).getChild( 0 ).getChild( 0 ); + + const domEventDataMock = { + target: widgetInEditable, + preventDefault: sinon.spy() + }; + + viewDocument.fire( 'mousedown', domEventDataMock ); + + expect( getViewData( view ) ).to.equal( + '
' + + '
' + + '[
' + + '
' + + '
]' + + '
' + + '
' + + '
' + ); + } ); } ); } ); From bd3f99fb26398eb9795c02953f14674f25a0e35c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Go=C5=82aszewski?= Date: Fri, 7 Dec 2018 10:22:34 +0100 Subject: [PATCH 3/4] Update widget selection tests. --- tests/widget.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/widget.js b/tests/widget.js index 04128ef4..df8d9f0c 100644 --- a/tests/widget.js +++ b/tests/widget.js @@ -201,13 +201,13 @@ describe( 'Widget', () => { expect( viewDocument.selection.fakeSelectionLabel ).to.equal( 'element label' ); } ); - it( 'should add selected class when no only a widget is selected', () => { + it( 'should add selected class when other content is selected with widget', () => { setModelData( model, '[foo]' ); expect( viewDocument.selection.isFake ).to.be.false; expect( getViewData( view ) ).to.equal( - '[' + - '

foo

' + + + '

{foo

' + '
' + '
' + ']' From d6857e4ad80d62f1ed14ad122d2400eeddbed54d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Go=C5=82aszewski?= Date: Wed, 19 Dec 2018 16:25:46 +0100 Subject: [PATCH 4/4] Update eslint-config-ckeditor5 package in package.json. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d558ca76..4b4cbc69 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@ckeditor/ckeditor5-paragraph": "^10.0.4", "@ckeditor/ckeditor5-typing": "^11.0.2", "eslint": "^5.5.0", - "eslint-config-ckeditor5": "^1.0.7", + "eslint-config-ckeditor5": "^1.0.9", "husky": "^0.14.3", "lint-staged": "^7.0.0" },