From 335440c2e0dc7f8dbb368e6b5d377b15f6529663 Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Thu, 4 Apr 2019 14:31:27 +0200 Subject: [PATCH 1/2] Fix: The triple-click fix for Safari introduced in ckeditor/ckeditor5#1463 should alter the model to work properly. Closes ckeditor/ckeditor5#1677. --- src/widget.js | 7 +++++-- tests/widget-integration.js | 21 +++++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/widget.js b/src/widget.js index 68ef27e3..36038070 100644 --- a/src/widget.js +++ b/src/widget.js @@ -121,9 +121,12 @@ export default class Widget extends Plugin { // For such event, we select the entire nested editable element. // See: https://github.com/ckeditor/ckeditor5/issues/1463. if ( env.isSafari && domEventData.domEvent.detail >= 3 ) { - this.editor.editing.view.change( writer => { + const mapper = editor.editing.mapper; + const modelElement = mapper.toModelElement( element ); + + this.editor.model.change( writer => { domEventData.preventDefault(); - writer.setSelection( element, 'in' ); + writer.setSelection( modelElement, 'in' ); } ); } diff --git a/tests/widget-integration.js b/tests/widget-integration.js index 73a3881e..a0bfb8b1 100644 --- a/tests/widget-integration.js +++ b/tests/widget-integration.js @@ -11,7 +11,9 @@ import Widget from '../src/widget'; import DomEventData from '@ckeditor/ckeditor5-engine/src/view/observer/domeventdata'; import { toWidget } from '../src/utils'; -import { setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model'; +import { + setData as setModelData, + getData as getModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model'; import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view'; import env from '@ckeditor/ckeditor5-utils/src/env'; @@ -118,6 +120,8 @@ describe( 'Widget - integration', () => { expect( getViewData( view ) ).to.equal( '[]
foo bar
' ); + + expect( getModelData( model ) ).to.equal( '[]foo bar' ); } ); it( 'should select the entire nested editable if triple clicked', () => { @@ -137,8 +141,9 @@ describe( 'Widget - integration', () => { sinon.assert.called( preventDefault ); expect( getViewData( view ) ).to.equal( - '
[foo bar]
' + '
{foo bar}
' ); + expect( getModelData( model ) ).to.equal( '[foo bar]' ); } ); it( 'should select proper nested editable if triple clicked', () => { @@ -160,9 +165,11 @@ describe( 'Widget - integration', () => { expect( getViewData( view ) ).to.equal( '
' + '
foo
' + - '
[bar]
' + + '
{bar}
' + '
' ); + + expect( getModelData( model ) ).to.equal( 'foo[bar]' ); } ); it( 'should select the entire nested editable if quadra clicked', () => { @@ -182,8 +189,10 @@ describe( 'Widget - integration', () => { sinon.assert.called( preventDefault ); expect( getViewData( view ) ).to.equal( - '
[foo bar]
' + '
{foo bar}
' ); + + expect( getModelData( model ) ).to.equal( '[foo bar]' ); } ); it( 'should select the inline widget if triple clicked', () => { @@ -205,6 +214,8 @@ describe( 'Widget - integration', () => { expect( getViewData( view ) ).to.equal( '

Foo{foo bar}Bar

' ); + + expect( getModelData( model ) ).to.equal( 'Foo[foo bar]Bar' ); } ); it( 'should does nothing for non-Safari browser', () => { @@ -228,5 +239,7 @@ describe( 'Widget - integration', () => { expect( getViewData( view ) ).to.equal( '[]
foo bar
' ); + + expect( getModelData( model ) ).to.equal( '[]foo bar' ); } ); } ); From 626bae434184ddd9db221333142c8831f5a000f2 Mon Sep 17 00:00:00 2001 From: Aleksander Nowodzinski Date: Thu, 4 Apr 2019 14:32:25 +0200 Subject: [PATCH 2/2] Tests: Code-style. --- tests/widget-integration.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/widget-integration.js b/tests/widget-integration.js index a0bfb8b1..eeec8ae6 100644 --- a/tests/widget-integration.js +++ b/tests/widget-integration.js @@ -13,7 +13,8 @@ import DomEventData from '@ckeditor/ckeditor5-engine/src/view/observer/domeventd import { toWidget } from '../src/utils'; import { setData as setModelData, - getData as getModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model'; + getData as getModelData +} from '@ckeditor/ckeditor5-engine/src/dev-utils/model'; import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view'; import env from '@ckeditor/ckeditor5-utils/src/env';