Browse Source

Merge pull request #685 from ckeditor/t/683

Added MouseObserver class.
Piotrek Koszuliński 9 years ago
parent
commit
1a3697b0c8

+ 40 - 0
packages/ckeditor5-engine/src/view/observer/mouseobserver.js

@@ -0,0 +1,40 @@
+/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+import DomEventObserver from './domeventobserver.js';
+
+/**
+ * Mouse events observer.
+ *
+ * Note that this observer is not available by default. To make it available it needs to be added to {@link engine.view.Document}
+ * by {@link engine.view.Document#addObserver} method.
+ *
+ * @memberOf engine.view.observer
+ * @extends engine.view.observer.DomEventObserver
+ */
+export default class MouseObserver extends DomEventObserver {
+	constructor( document ) {
+		super( document );
+
+		this.domEventType = 'mousedown';
+	}
+
+	onDomEvent( domEvent ) {
+		this.fire( domEvent.type, domEvent );
+	}
+}
+
+/**
+ * Fired when mouse button is pressed down on one of the editables.
+ *
+ * Introduced by {@link engine.view.observer.MouseObserver}.
+ *
+ * Note that this event is not available by default. To make it available {@link engine.view.observer.MouseObserver}
+ * needs to be added to {@link engine.view.Document} by a {@link engine.view.Document#addObserver} method.
+ *
+ * @see engine.view.observer.MouseObserver
+ * @event engine.view.Document#mousedown
+ * @param {engine.view.observer.DomEventData} data Event data.
+ */

+ 42 - 0
packages/ckeditor5-engine/tests/view/observer/mouseobserver.js

@@ -0,0 +1,42 @@
+/**
+ * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+/* globals document */
+/* bender-tags: view, browser-only */
+
+import MouseObserver from 'ckeditor5/engine/view/observer/mouseobserver.js';
+import ViewDocument from 'ckeditor5/engine/view/document.js';
+
+describe( 'MouseObserver', () => {
+	let viewDocument, observer;
+
+	beforeEach( () => {
+		viewDocument = new ViewDocument();
+		observer = viewDocument.addObserver( MouseObserver );
+	} );
+
+	afterEach( () => {
+		viewDocument.destroy();
+	} );
+
+	it( 'should define domEventType', () => {
+		expect( observer.domEventType ).to.equal( 'mousedown' );
+	} );
+
+	describe( 'onDomEvent', () => {
+		it( 'should fire mousedown with the right event data', () => {
+			const spy = sinon.spy();
+
+			viewDocument.on( 'mousedown', spy );
+
+			observer.onDomEvent( { type: 'mousedown', target: document.body } );
+
+			expect( spy.calledOnce ).to.be.true;
+
+			const data = spy.args[ 0 ][ 1 ];
+			expect( data.domTarget ).to.equal( document.body );
+		} );
+	} );
+} );