Kaynağa Gözat

This fix should touch Safari only.

Kamil Piechaczek 6 yıl önce
ebeveyn
işleme
bf5f0a8812

+ 2 - 1
packages/ckeditor5-widget/src/widget.js

@@ -11,6 +11,7 @@ import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import MouseObserver from '@ckeditor/ckeditor5-engine/src/view/observer/mouseobserver';
 import { getLabel, isWidget, WIDGET_SELECTED_CLASS_NAME } from './utils';
 import { getCode, keyCodes, parseKeystroke } from '@ckeditor/ckeditor5-utils/src/keyboard';
+import env from '@ckeditor/ckeditor5-utils/src/env';
 
 import '../theme/widget.css';
 
@@ -119,7 +120,7 @@ export default class Widget extends Plugin {
 			// But at least triple click inside nested editable causes broken selection in Safari.
 			// For such event, we select the entire nested editable element.
 			// See: https://github.com/ckeditor/ckeditor5/issues/1463.
-			if ( domEventData.domEvent.detail >= 3 ) {
+			if ( env.isSafari && domEventData.domEvent.detail >= 3 ) {
 				this.editor.editing.view.change( writer => {
 					domEventData.preventDefault();
 					writer.setSelection( element, 'in' );

+ 25 - 0
packages/ckeditor5-widget/tests/widget-integration.js

@@ -25,6 +25,7 @@ describe( 'Widget - integration', () => {
 	beforeEach( () => {
 		// Most tests assume non-edge environment but we do not set `contenteditable=false` on Edge so stub `env.isEdge`.
 		testUtils.sinon.stub( env, 'isEdge' ).get( () => false );
+		testUtils.sinon.stub( env, 'isSafari' ).get( () => true );
 
 		editorElement = document.createElement( 'div' );
 		document.body.appendChild( editorElement );
@@ -204,4 +205,28 @@ describe( 'Widget - integration', () => {
 			'<p>Foo{<span class="ck-widget ck-widget_selected" contenteditable="false">foo bar</span>}Bar</p>'
 		);
 	} );
+
+	it( 'should does nothing for non-Safari browser', () => {
+		testUtils.sinon.stub( env, 'isSafari' ).get( () => false );
+
+		setModelData( model, '[]<widget><nested>foo bar</nested></widget>' );
+		const viewDiv = viewDocument.getRoot().getChild( 0 );
+		const viewFigcaption = viewDiv.getChild( 0 );
+
+		const preventDefault = sinon.spy();
+
+		const domEventDataMock = new DomEventData( view, {
+			target: view.domConverter.mapViewToDom( viewFigcaption ),
+			preventDefault,
+			detail: 4
+		} );
+
+		viewDocument.fire( 'mousedown', domEventDataMock );
+
+		sinon.assert.notCalled( preventDefault );
+
+		expect( getViewData( view ) ).to.equal(
+			'[]<div class="ck-widget" contenteditable="false"><figcaption contenteditable="true">foo bar</figcaption></div>'
+		);
+	} );
 } );