From 7714593e4ed886115fdfe22c62f67d42b3c845ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Go=C5=82aszewski?= Date: Thu, 5 Jul 2018 13:56:17 +0200 Subject: [PATCH 1/4] Feature: Add env.isEdge property. --- src/env.js | 20 +++++++++++++++++++- tests/env.js | 21 ++++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/env.js b/src/env.js index b52daae..4aab986 100644 --- a/src/env.js +++ b/src/env.js @@ -23,7 +23,15 @@ const env = { * @static * @member {Boolean} module:utils/env~env#isMac */ - isMac: isMac( userAgent ) + isMac: isMac( userAgent ), + + /** + * Indicates that application is running on Edge browser. + * + * @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 Edge browser. + * + * @param {String} userAgent **Lowercase** `navigator.userAgent` string. + * @returns {Boolean} Whether User Agent is Edge or not. + */ +export function isEdge( userAgent ) { + return userAgent.indexOf( 'edge' ) > -1; +} diff --git a/tests/env.js b/tests/env.js index ac175ee..c93d71e 100644 --- a/tests/env.js +++ b/tests/env.js @@ -3,7 +3,7 @@ * For licensing, see LICENSE.md. */ -import env, { isMac } from '../src/env'; +import env, { isEdge, isMac } from '../src/env'; describe( 'Env', () => { beforeEach( () => { @@ -19,6 +19,12 @@ 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; @@ -31,4 +37,17 @@ describe( 'Env', () => { expect( isMac( 'foo' ) ).to.be.false; } ); } ); + + describe( 'isEdge()', () => { + it( 'returns true for Edge UA strings', () => { + expect( isEdge( 'edge' ) ).to.be.true; + expect( isEdge( 'foo edge bar' ) ).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; + } ); + } ); } ); From b2d1aa792afbc72ba2162fb63d03e655ca9d9f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Go=C5=82aszewski?= Date: Thu, 5 Jul 2018 15:54:18 +0200 Subject: [PATCH 2/4] Other: Make Edge browser checking a bit more strict. --- src/env.js | 2 +- tests/env.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/env.js b/src/env.js index 4aab986..1c579ed 100644 --- a/src/env.js +++ b/src/env.js @@ -53,5 +53,5 @@ export function isMac( userAgent ) { * @returns {Boolean} Whether User Agent is Edge or not. */ export function isEdge( userAgent ) { - return userAgent.indexOf( 'edge' ) > -1; + return !!userAgent.match( /edge\/(\d+.?\d*)/ ); } diff --git a/tests/env.js b/tests/env.js index c93d71e..5711f81 100644 --- a/tests/env.js +++ b/tests/env.js @@ -40,14 +40,16 @@ describe( 'Env', () => { describe( 'isEdge()', () => { it( 'returns true for Edge UA strings', () => { - expect( isEdge( 'edge' ) ).to.be.true; - expect( isEdge( 'foo edge bar' ) ).to.be.true; + expect( isEdge( 'edge/12' ) ).to.be.true; + expect( isEdge( 'foo edge/12 bar' ) ).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; } ); } ); } ); From c39672ba8e013ef05b4872c707f4f423dcf613b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotrek=20Koszuli=C5=84ski?= Date: Fri, 6 Jul 2018 11:08:52 +0200 Subject: [PATCH 3/4] Let's be a bit more realistic. --- tests/env.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/env.js b/tests/env.js index 5711f81..91fb373 100644 --- a/tests/env.js +++ b/tests/env.js @@ -5,6 +5,10 @@ import env, { isEdge, isMac } from '../src/env'; +function toLowerCase( str ) { + return str.toLowerCase(); +} + describe( 'Env', () => { beforeEach( () => { } ); @@ -29,6 +33,11 @@ describe( 'Env', () => { 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', () => { @@ -42,6 +51,11 @@ describe( 'Env', () => { 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', () => { @@ -50,6 +64,15 @@ describe( 'Env', () => { 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; } ); } ); } ); From 337a624ab60e5624a3f4392392bb4d000bfefbf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotrek=20Koszuli=C5=84ski?= Date: Fri, 6 Jul 2018 11:13:36 +0200 Subject: [PATCH 4/4] Grammar. --- src/env.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/env.js b/src/env.js index 1c579ed..39154db 100644 --- a/src/env.js +++ b/src/env.js @@ -18,7 +18,7 @@ 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 @@ -26,7 +26,7 @@ const env = { isMac: isMac( userAgent ), /** - * Indicates that application is running on Edge browser. + * Indicates that the application is running in Microsoft Edge. * * @static * @member {Boolean} module:utils/env~env#isEdge @@ -47,7 +47,7 @@ export function isMac( userAgent ) { } /** - * Checks if User Agent represented by the string is Edge browser. + * 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.