Răsfoiți Sursa

Merge pull request #578 from ckeditor/t/577

Introduced ClickObserver.
Aleksander Nowodzinski 9 ani în urmă
părinte
comite
6d859fca67

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

@@ -0,0 +1,40 @@
+/**
+ * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+import DomEventObserver from './domeventobserver.js';
+
+/**
+ * {@link engine.view.Document#click Click} event 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 a {@link engine.view.Document#addObserver} method.
+ *
+ * @memberOf engine.view.observer
+ * @extends engine.view.observer.DomEventObserver
+ */
+export default class ClickObserver extends DomEventObserver {
+	constructor( document ) {
+		super( document );
+
+		this.domEventType = 'click';
+	}
+
+	onDomEvent( domEvent ) {
+		this.fire( domEvent.type, domEvent );
+	}
+}
+
+/**
+ * Fired when one of the editables has been clicked.
+ *
+ * Introduced by {@link engine.view.observer.ClickObserver}.
+ *
+ * Note that this event is not available by default. To make it available {@link engine.view.observer.ClickObserver} needs to be added
+ * to {@link engine.view.Document} by a {@link engine.view.Document#addObserver} method.
+ *
+ * @see engine.view.observer.ClickObserver
+ * @event engine.view.Document#click
+ * @param {engine.view.observer.DomEventData} data Event data.
+ */

+ 38 - 0
packages/ckeditor5-engine/tests/view/observer/clickobserver.js

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