diff --git a/src/ol/dom.js b/src/ol/dom.js index 4a5a657c0b..2ae64be09b 100644 --- a/src/ol/dom.js +++ b/src/ol/dom.js @@ -1,7 +1,7 @@ goog.provide('ol.dom'); -goog.require('goog.userAgent'); goog.require('ol'); +goog.require('ol.has'); goog.require('ol.vec.Mat4'); @@ -115,7 +115,7 @@ ol.dom.setTransform = function(element, value) { style.transform = value; // IE 9+ seems to assume transform-origin: 100% 100%; for some unknown reason - if (goog.userAgent.IE && goog.userAgent.isVersionOrHigher('9.0')) { + if (ol.has.IE) { element.style.transformOrigin = '0 0'; } }; diff --git a/src/ol/events/condition.js b/src/ol/events/condition.js index 1df68ec947..7b448d1bc6 100644 --- a/src/ol/events/condition.js +++ b/src/ol/events/condition.js @@ -1,6 +1,7 @@ goog.provide('ol.events.condition'); goog.require('ol.asserts'); +goog.require('ol.has'); goog.require('ol.functions'); goog.require('ol.MapBrowserEvent.EventType'); @@ -74,7 +75,7 @@ ol.events.condition.click = function(mapBrowserEvent) { ol.events.condition.mouseActionButton = function(mapBrowserEvent) { var originalEvent = mapBrowserEvent.originalEvent; return originalEvent.button == 0 && - !(goog.userAgent.WEBKIT && ol.has.MAC && originalEvent.ctrlKey); + !(ol.has.WEBKIT && ol.has.MAC && originalEvent.ctrlKey); }; diff --git a/src/ol/has.js b/src/ol/has.js index 34ce81b8d3..3d56c9d792 100644 --- a/src/ol/has.js +++ b/src/ol/has.js @@ -1,13 +1,21 @@ goog.provide('ol.has'); goog.require('ol'); -goog.require('ol.dom'); goog.require('ol.webgl'); var ua = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase() : ''; +var ie = ua.match(/msie ([0-9]{1,}[\.0-9]{0,})/); +var trident = ua.match(/trident\/([0-9]{1,}[\.0-9]{0,})/); + +/** + * User agent string says we are dealing with IE >= 9 as browser. + * @type {boolean} + */ +ol.has.IE = !!(ie && parseFloat(ie[1]) >= 9 || trident && parseFloat(trident[1]) >= 6); + /** * User agent string says we are dealing with Firefox as browser. * @type {boolean} @@ -18,7 +26,13 @@ ol.has.FIREFOX = ua.indexOf('firefox') !== -1; * User agent string says we are dealing with Safari as browser. * @type {boolean} */ -ol.has.SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') === -1; +ol.has.SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1; + +/** + * User agent string says we are dealing with a WebKit engine. + * @type {boolean} + */ +ol.has.WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1; /** * User agent string says we are dealing with a Mac as platform. @@ -60,7 +74,7 @@ ol.has.CANVAS = ol.ENABLE_CANVAS && ( return false; } try { - var context = ol.dom.createCanvasContext2D(); + var context = document.createElement('CANVAS').getContext('2d'); if (!context) { return false; } else { diff --git a/test/spec/ol/dom/dom.test.js b/test/spec/ol/dom/dom.test.js index fadd68c173..cb3f70e605 100644 --- a/test/spec/ol/dom/dom.test.js +++ b/test/spec/ol/dom/dom.test.js @@ -1,7 +1,6 @@ /*global Modernizr*/ goog.provide('ol.test.dom'); -goog.require('goog.userAgent'); goog.require('ol.transform'); goog.require('ol.dom'); @@ -92,10 +91,13 @@ describe('ol.dom', function() { describe('ol.dom.setTransform', function() { var element = null; + var originalIsIE; beforeEach(function() { element = document.createElement('div'); + originalIsIE = ol.has.IE; }); afterEach(function() { + ol.has.IE = originalIsIE; element = null; }); @@ -115,35 +117,24 @@ describe('ol.dom', function() { }); it('sets transform origin for IE 9', function() { - // save old user agent information - var originalIsIE = goog.userAgent.IE; - var originalIsVersionOrHigher = goog.userAgent.isVersionOrHigher; - // Mock up IE 9 - goog.userAgent.IE = true; - goog.userAgent.isVersionOrHigher = function() { - return true; - }; + ol.has.IE = true; ol.dom.setTransform(element, 'rotate(48deg)'); expect(element.style.transformOrigin).to.not.be(''); - - // revert mock-ups - goog.userAgent.IE = originalIsIE; - goog.userAgent.isVersionOrHigher = originalIsVersionOrHigher; }); it('sets transform origin *only* for IE 9', function() { // save old user agent information - var originalIsIE = goog.userAgent.IE; + var originalIsIE = ol.has.IE; // Mock up some non-IE browser - goog.userAgent.IE = false; + ol.has.IE = false; ol.dom.setTransform(element, 'rotate(48deg)'); expect(!element.style.transformOrigin).to.be(true); // revert mock-ups - goog.userAgent.IE = originalIsIE; + ol.has.IE = originalIsIE; }); });