Przeglądaj źródła

Merge pull request #248 from ckeditor/t/ckeditor5/1079

Feature: Introduce `env.isEdge` property.
Piotrek Koszuliński 7 lat temu
rodzic
commit
56d2f34432

+ 20 - 2
packages/ckeditor5-utils/src/env.js

@@ -18,12 +18,20 @@ const userAgent = navigator.userAgent.toLowerCase();
  */
 const env = {
 	/**
-	 * Indicates that application is running on Macintosh.
+	 * Indicates that the application is running on Macintosh.
 	 *
 	 * @static
 	 * @member {Boolean} module:utils/env~env#isMac
 	 */
-	isMac: isMac( userAgent )
+	isMac: isMac( userAgent ),
+
+	/**
+	 * Indicates that the application is running in Microsoft Edge.
+	 *
+	 * @static
+	 * @member {Boolean} module:utils/env~env#isEdge
+	 */
+	isEdge: isEdge( userAgent )
 };
 
 export default env;
@@ -37,3 +45,13 @@ export default env;
 export function isMac( userAgent ) {
 	return userAgent.indexOf( 'macintosh' ) > -1;
 }
+
+/**
+ * Checks if User Agent represented by the string is Microsoft Edge.
+ *
+ * @param {String} userAgent **Lowercase** `navigator.userAgent` string.
+ * @returns {Boolean} Whether User Agent is Edge or not.
+ */
+export function isEdge( userAgent ) {
+	return !!userAgent.match( /edge\/(\d+.?\d*)/ );
+}

+ 45 - 1
packages/ckeditor5-utils/tests/env.js

@@ -3,7 +3,11 @@
  * For licensing, see LICENSE.md.
  */
 
-import env, { isMac } from '../src/env';
+import env, { isEdge, isMac } from '../src/env';
+
+function toLowerCase( str ) {
+	return str.toLowerCase();
+}
 
 describe( 'Env', () => {
 	beforeEach( () => {
@@ -19,10 +23,21 @@ describe( 'Env', () => {
 		} );
 	} );
 
+	describe( 'isEdge', () => {
+		it( 'is a boolean', () => {
+			expect( env.isEdge ).to.be.a( 'boolean' );
+		} );
+	} );
+
 	describe( 'isMac()', () => {
 		it( 'returns true for macintosh UA strings', () => {
 			expect( isMac( 'macintosh' ) ).to.be.true;
 			expect( isMac( 'foo macintosh bar' ) ).to.be.true;
+
+			expect( isMac( toLowerCase(
+				'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) ' +
+				'Chrome/61.0.3163.100 Safari/537.36'
+			) ) ).to.be.true;
 		} );
 
 		it( 'returns false for non–macintosh UA strings', () => {
@@ -31,4 +46,33 @@ describe( 'Env', () => {
 			expect( isMac( 'foo' ) ).to.be.false;
 		} );
 	} );
+
+	describe( 'isEdge()', () => {
+		it( 'returns true for Edge UA strings', () => {
+			expect( isEdge( 'edge/12' ) ).to.be.true;
+			expect( isEdge( 'foo edge/12 bar' ) ).to.be.true;
+
+			expect( isEdge( toLowerCase(
+				'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' +
+				'Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393'
+			) ) ).to.be.true;
+		} );
+
+		it( 'returns false for non–Edge UA strings', () => {
+			expect( isEdge( '' ) ).to.be.false;
+			expect( isEdge( 'mac' ) ).to.be.false;
+			expect( isEdge( 'foo' ) ).to.be.false;
+			expect( isEdge( 'ledge' ) ).to.be.false;
+			expect( isEdge( 'foo edge bar' ) ).to.be.false;
+
+			// Chrome
+			expect( isEdge( toLowerCase(
+				'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36'
+			) ) ).to.be.false;
+			// IE11
+			expect( isEdge( toLowerCase(
+				'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
+			) ) ).to.be.false;
+		} );
+	} );
 } );