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

Commit

Permalink
Merge pull request #82 from ckeditor/t/ckeditor5/1677
Browse files Browse the repository at this point in the history
Internal: The triple-click fix for Safari introduced in ckeditor/ckeditor5#1463 should alter the model to work properly. Closes ckeditor/ckeditor5#1677.
  • Loading branch information
pomek authored Apr 5, 2019
2 parents 79df3fe + 626bae4 commit bad8d27
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 6 deletions.
7 changes: 5 additions & 2 deletions src/widget.js
Original file line number Diff line number Diff line change
Expand Up @@ -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' );
} );
}

Expand Down
22 changes: 18 additions & 4 deletions tests/widget-integration.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ 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';
Expand Down Expand Up @@ -118,6 +121,8 @@ describe( 'Widget - integration', () => {
expect( getViewData( view ) ).to.equal(
'[]<div class="ck-widget" contenteditable="false"><figcaption contenteditable="true">foo bar</figcaption></div>'
);

expect( getModelData( model ) ).to.equal( '[]<widget><nested>foo bar</nested></widget>' );
} );

it( 'should select the entire nested editable if triple clicked', () => {
Expand All @@ -137,8 +142,9 @@ describe( 'Widget - integration', () => {
sinon.assert.called( preventDefault );

expect( getViewData( view ) ).to.equal(
'<div class="ck-widget" contenteditable="false"><figcaption contenteditable="true">[foo bar]</figcaption></div>'
'<div class="ck-widget" contenteditable="false"><figcaption contenteditable="true">{foo bar}</figcaption></div>'
);
expect( getModelData( model ) ).to.equal( '<widget><nested>[foo bar]</nested></widget>' );
} );

it( 'should select proper nested editable if triple clicked', () => {
Expand All @@ -160,9 +166,11 @@ describe( 'Widget - integration', () => {
expect( getViewData( view ) ).to.equal(
'<div class="ck-widget" contenteditable="false">' +
'<figcaption contenteditable="true">foo</figcaption>' +
'<figcaption contenteditable="true">[bar]</figcaption>' +
'<figcaption contenteditable="true">{bar}</figcaption>' +
'</div>'
);

expect( getModelData( model ) ).to.equal( '<widget><nested>foo</nested><nested>[bar]</nested></widget>' );
} );

it( 'should select the entire nested editable if quadra clicked', () => {
Expand All @@ -182,8 +190,10 @@ describe( 'Widget - integration', () => {
sinon.assert.called( preventDefault );

expect( getViewData( view ) ).to.equal(
'<div class="ck-widget" contenteditable="false"><figcaption contenteditable="true">[foo bar]</figcaption></div>'
'<div class="ck-widget" contenteditable="false"><figcaption contenteditable="true">{foo bar}</figcaption></div>'
);

expect( getModelData( model ) ).to.equal( '<widget><nested>[foo bar]</nested></widget>' );
} );

it( 'should select the inline widget if triple clicked', () => {
Expand All @@ -205,6 +215,8 @@ describe( 'Widget - integration', () => {
expect( getViewData( view ) ).to.equal(
'<p>Foo{<span class="ck-widget ck-widget_selected" contenteditable="false">foo bar</span>}Bar</p>'
);

expect( getModelData( model ) ).to.equal( '<paragraph>Foo[<inline-widget>foo bar</inline-widget>]Bar</paragraph>' );
} );

it( 'should does nothing for non-Safari browser', () => {
Expand All @@ -228,5 +240,7 @@ describe( 'Widget - integration', () => {
expect( getViewData( view ) ).to.equal(
'[]<div class="ck-widget" contenteditable="false"><figcaption contenteditable="true">foo bar</figcaption></div>'
);

expect( getModelData( model ) ).to.equal( '[]<widget><nested>foo bar</nested></widget>' );
} );
} );

0 comments on commit bad8d27

Please sign in to comment.