8
0
Просмотр исходного кода

Merge branch 'master' into t/ckeditor5-engine/1210

Szymon Kupś 8 лет назад
Родитель
Сommit
1508e7aae7

+ 1 - 1
packages/ckeditor5-widget/.eslintrc.js

@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md.
  */
 

+ 1 - 1
packages/ckeditor5-widget/LICENSE.md

@@ -2,7 +2,7 @@ Software License Agreement
 ==========================
 
 **CKEditor 5 widget API** – https://github.com/ckeditor/ckeditor5-image <br>
-Copyright (c) 2003-2017, [CKSource](http://cksource.com) Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2018, [CKSource](http://cksource.com) Frederico Knabben. All rights reserved.
 
 Licensed under the terms of any of the following licenses at your choice:
 

+ 2 - 2
packages/ckeditor5-widget/package.json

@@ -14,10 +14,10 @@
   },
   "devDependencies": {
     "@ckeditor/ckeditor5-typing": "^1.0.0-alpha.2",
-    "eslint": "^4.8.0",
+    "eslint": "^4.15.0",
     "eslint-config-ckeditor5": "^1.0.7",
     "husky": "^0.14.3",
-    "lint-staged": "^4.2.3"
+    "lint-staged": "^6.0.0"
   },
   "engines": {
     "node": ">=6.0.0",

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

@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md.
  */
 

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

@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md.
  */
 

+ 14 - 13
packages/ckeditor5-widget/src/widget.js

@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md.
  */
 
@@ -222,8 +222,8 @@ export default class Widget extends Plugin {
 			const newRange = modelDocument.getNearestSelectionRange( position, isForward ? 'forward' : 'backward' );
 
 			if ( newRange ) {
-				model.change( () => {
-					modelSelection.setRanges( [ newRange ] );
+				model.change( writer => {
+					writer.setSelection( newRange );
 				} );
 			}
 
@@ -257,15 +257,15 @@ export default class Widget extends Plugin {
 	 */
 	_selectAllNestedEditableContent() {
 		const model = this.editor.model;
-		const modelSelection = model.document.selection;
-		const limitElement = model.schema.getLimitElement( modelSelection );
+		const documentSelection = model.document.selection;
+		const limitElement = model.schema.getLimitElement( documentSelection );
 
-		if ( modelSelection.getFirstRange().root == limitElement ) {
+		if ( documentSelection.getFirstRange().root == limitElement ) {
 			return false;
 		}
 
-		model.change( () => {
-			modelSelection.setIn( limitElement );
+		model.change( writer => {
+			writer.setSelection( ModelRange.createIn( limitElement ) );
 		} );
 
 		return true;
@@ -279,7 +279,6 @@ export default class Widget extends Plugin {
 	 */
 	_selectAllContent() {
 		const model = this.editor.model;
-		const modelSelection = model.document.selection;
 		const editing = this.editor.editing;
 		const viewDocument = editing.view;
 		const viewSelection = viewDocument.selection;
@@ -291,8 +290,8 @@ export default class Widget extends Plugin {
 		if ( selectedElement && isWidget( selectedElement ) ) {
 			const widgetParent = editing.mapper.toModelElement( selectedElement.parent );
 
-			model.change( () => {
-				modelSelection.setRanges( [ ModelRange.createIn( widgetParent ) ] );
+			model.change( writer => {
+				writer.setSelection( ModelRange.createIn( widgetParent ) );
 			} );
 
 			return true;
@@ -308,7 +307,9 @@ export default class Widget extends Plugin {
 	 * @param {module:engine/model/element~Element} element
 	 */
 	_setSelectionOverElement( element ) {
-		this.editor.model.document.selection.setRanges( [ ModelRange.createOn( element ) ] );
+		this.editor.model.change( writer => {
+			writer.setSelection( ModelRange.createOn( element ) );
+		} );
 	}
 
 	/**
@@ -327,7 +328,7 @@ export default class Widget extends Plugin {
 
 		// Clone current selection to use it as a probe. We must leave default selection as it is so it can return
 		// to its current state after undo.
-		const probe = ModelSelection.createFromSelection( modelSelection );
+		const probe = new ModelSelection( modelSelection );
 		model.modifySelection( probe, { direction: forward ? 'forward' : 'backward' } );
 		const objectElement = forward ? probe.focus.nodeBefore : probe.focus.nodeAfter;
 

+ 1 - 1
packages/ckeditor5-widget/tests/highlightstack.js

@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md.
  */
 

+ 1 - 1
packages/ckeditor5-widget/tests/utils.js

@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md.
  */
 

+ 22 - 12
packages/ckeditor5-widget/tests/widget.js

@@ -1,11 +1,11 @@
 /**
- * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md.
  */
 
 import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor';
 import Widget from '../src/widget';
-import Delete from '@ckeditor/ckeditor5-typing/src/delete';
+import Typing from '@ckeditor/ckeditor5-typing/src/typing';
 import MouseObserver from '@ckeditor/ckeditor5-engine/src/view/observer/mouseobserver';
 import buildModelConverter from '@ckeditor/ckeditor5-engine/src/conversion/buildmodelconverter';
 import { toWidget } from '../src/utils';
@@ -20,14 +20,13 @@ import { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';
 /* global document */
 
 describe( 'Widget', () => {
-	let editor, model, doc, viewDocument;
+	let editor, model, viewDocument;
 
 	beforeEach( () => {
-		return VirtualTestEditor.create( { plugins: [ Widget, Delete ] } )
+		return VirtualTestEditor.create( { plugins: [ Widget, Typing ] } )
 			.then( newEditor => {
 				editor = newEditor;
 				model = editor.model;
-				doc = model.document;
 				viewDocument = editor.editing.view;
 
 				model.schema.register( 'widget', {
@@ -235,8 +234,8 @@ describe( 'Widget', () => {
 			'<p>foo</p>[<div class="ck-widget ck-widget_selected" contenteditable="false">foo<b></b></div>]'
 		);
 
-		model.change( () => {
-			doc.selection.removeAllRanges();
+		model.change( writer => {
+			writer.setSelection( null );
 		} );
 
 		expect( getViewData( viewDocument ) ).to.equal(
@@ -373,7 +372,8 @@ describe( 'Widget', () => {
 			test(
 				'should do nothing if other key is pressed',
 				'[<widget></widget>]<paragraph>foo</paragraph>',
-				keyCodes.a,
+				// Use a safe key (alt) to not trigger the Input features "unsafe keys" handler.
+				18,
 				'[<widget></widget>]<paragraph>foo</paragraph>'
 			);
 
@@ -703,7 +703,7 @@ describe( 'Widget', () => {
 				setModelData( model, data );
 				viewDocument.fire( 'keydown', new DomEventData(
 					viewDocument,
-					{ target: document.createElement( 'div' ), preventDefault: () => {} },
+					{ target: document.createElement( 'div' ), preventDefault() {} },
 					domEventDataMock
 				) );
 
@@ -721,11 +721,14 @@ describe( 'Widget', () => {
 			it( name, () => {
 				setModelData( model, input );
 				const scrollStub = sinon.stub( viewDocument, 'scrollToTheSelection' );
+				const domEventDataMock = {
+					keyCode: direction == 'backward' ? keyCodes.backspace : keyCodes.delete,
+				};
 
-				viewDocument.fire( 'delete', new DomEventData(
+				viewDocument.fire( 'keydown', new DomEventData(
 					viewDocument,
-					{ target: document.createElement( 'div' ), preventDefault: () => {} },
-					{ direction, unit: 'character', sequence: 0 }
+					{ target: document.createElement( 'div' ), preventDefault() {} },
+					domEventDataMock
 				) );
 
 				expect( getModelData( model ) ).to.equal( expected );
@@ -733,6 +736,13 @@ describe( 'Widget', () => {
 			} );
 		}
 
+		// Let's make this integration tests real which will help covering
+		// cases like https://github.com/ckeditor/ckeditor5/issues/753.
+		// Originally, this test file used the Delete feature only which was not "integrational" enough.
+		it( 'tests are executed with the Typing feature', () => {
+			expect( editor.plugins.get( 'Typing' ) ).to.not.be.undefined;
+		} );
+
 		test(
 			'should select widget when backspace is pressed',
 			'<widget></widget><paragraph>[]foo</paragraph>',

+ 1 - 1
packages/ckeditor5-widget/theme/widget.css

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md.
  */