浏览代码

Created the isDomNode helper and used it in EmitterMixin.

Aleksander Nowodzinski 8 年之前
父节点
当前提交
fd69ab9741

+ 1 - 10
packages/ckeditor5-utils/src/dom/emittermixin.js

@@ -10,7 +10,7 @@
 import { default as EmitterMixin, _getEmitterListenedTo, _setEmitterId } from '../emittermixin';
 import uid from '../uid';
 import extend from '../lib/lodash/extend';
-import isNative from '../lib/lodash/isNative';
+import isDomNode from './isdomnode';
 
 /**
  * Mixin that injects the DOM events API into its host. It provides the API
@@ -273,15 +273,6 @@ function getNodeUID( node ) {
 	return node[ 'data-ck-expando' ] || ( node[ 'data-ck-expando' ] = uid() );
 }
 
-// Checks (naively) if given node is native DOM Node.
-//
-// @private
-// @param {Node} node
-// @return {Boolean} True when native DOM Node.
-function isDomNode( node ) {
-	return node && isNative( node.addEventListener );
-}
-
 /**
  * Interface representing classes which mix in {@link module:utils/dom/emittermixin~EmitterMixin}.
  *

+ 20 - 0
packages/ckeditor5-utils/src/dom/isdomnode.js

@@ -0,0 +1,20 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+/**
+ * @module utils/dom/iswindow
+ */
+
+import isNative from '../lib/lodash/isNative';
+
+/**
+ * Checks if the object is a native DOM Node.
+ *
+ * @param {*} obj
+ * @returns {Boolean}
+ */
+export default function isDomNode( obj ) {
+	return !!( obj && isNative( obj.addEventListener ) );
+}

+ 22 - 0
packages/ckeditor5-utils/tests/dom/isdomnode.js

@@ -0,0 +1,22 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+/* global document, window */
+
+import isDomNode from '../../src/dom/isdomnode';
+
+describe( 'isDomNode()', () => {
+	it( 'detects native DOM nodes', () => {
+		expect( isDomNode( {} ) ).to.be.false;
+		expect( isDomNode( null ) ).to.be.false;
+		expect( isDomNode( undefined ) ).to.be.false;
+		expect( isDomNode( new Date() ) ).to.be.false;
+		expect( isDomNode( 42 ) ).to.be.false;
+		expect( isDomNode( window ) ).to.be.true;
+		expect( isDomNode( document ) ).to.be.true;
+		expect( isDomNode( document.createElement( 'div' ) ) ).to.be.true;
+		expect( isDomNode( document.createTextNode( 'Foo' ) ) ).to.be.true;
+	} );
+} );