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" }, diff --git a/src/widget.js b/src/widget.js index c533ac30..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'; @@ -415,10 +415,15 @@ 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; } + // 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 103cea49..6b79eeb1 100644 --- a/tests/widget.js +++ b/tests/widget.js @@ -200,13 +200,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

' + '
' + '
' + ']' @@ -1348,5 +1348,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( + '
' + + '
' + + '[
' + + '
' + + '
]' + + '
' + + '
' + + '
' + ); + } ); } ); } );