diff --git a/lib/OpenLayers/Handler/Box.js b/lib/OpenLayers/Handler/Box.js index 1ff62d7e1f..e5ec2b3914 100644 --- a/lib/OpenLayers/Handler/Box.js +++ b/lib/OpenLayers/Handler/Box.js @@ -206,7 +206,7 @@ OpenLayers.Handler.Box = OpenLayers.Class(OpenLayers.Handler, { "border-top-width")) + parseInt(OpenLayers.Element.getStyle( this.zoomBox, "border-bottom-width")) + 1; // all browsers use the new box model, except IE in quirks mode - var newBoxModel = OpenLayers.Util.getBrowserName() == "msie" ? + var newBoxModel = OpenLayers.BROWSER_NAME == "msie" ? document.compatMode != "BackCompat" : true; this.boxCharacteristics = { xOffset: xOffset, diff --git a/lib/OpenLayers/Lang.js b/lib/OpenLayers/Lang.js index 03738bbe8c..f27a2a508d 100644 --- a/lib/OpenLayers/Lang.js +++ b/lib/OpenLayers/Lang.js @@ -58,7 +58,7 @@ OpenLayers.Lang = { setCode: function(code) { var lang; if(!code) { - code = (OpenLayers.Util.getBrowserName() == "msie") ? + code = (OpenLayers.BROWSER_NAME == "msie") ? navigator.userLanguage : navigator.language; } var parts = code.split('-'); diff --git a/lib/OpenLayers/Layer/EventPane.js b/lib/OpenLayers/Layer/EventPane.js index e6a95d541e..0f471534f6 100644 --- a/lib/OpenLayers/Layer/EventPane.js +++ b/lib/OpenLayers/Layer/EventPane.js @@ -102,7 +102,7 @@ OpenLayers.Layer.EventPane = OpenLayers.Class(OpenLayers.Layer, { this.pane.style.display = this.div.style.display; this.pane.style.width="100%"; this.pane.style.height="100%"; - if (OpenLayers.Util.getBrowserName() == "msie") { + if (OpenLayers.BROWSER_NAME == "msie") { this.pane.style.background = "url(" + OpenLayers.Util.getImagesLocation() + "blank.gif)"; } diff --git a/lib/OpenLayers/Layer/Vector.js b/lib/OpenLayers/Layer/Vector.js index 119a73d4d9..440f219a8e 100644 --- a/lib/OpenLayers/Layer/Vector.js +++ b/lib/OpenLayers/Layer/Vector.js @@ -476,7 +476,7 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, { // Force a reflow on gecko based browsers to prevent jump/flicker. // This seems to happen on only certain configurations; it was originally // noticed in FF 2.0 and Linux. - if (navigator.userAgent.toLowerCase().indexOf("gecko") != -1) { + if (OpenLayers.IS_GECKO === true) { this.div.scrollLeft = this.div.scrollLeft; } diff --git a/lib/OpenLayers/Layer/WMS/Post.js b/lib/OpenLayers/Layer/WMS/Post.js index 4f7961aa49..b350cd7247 100644 --- a/lib/OpenLayers/Layer/WMS/Post.js +++ b/lib/OpenLayers/Layer/WMS/Post.js @@ -33,7 +33,7 @@ OpenLayers.Layer.WMS.Post = OpenLayers.Class(OpenLayers.Layer.WMS, { * effects of viewport-shaking when panning the map. Both browsers, Opera * and Firefox/Mozilla, have no problem with long urls, which is the reason * for using POST instead of GET. The strings to pass to this array are - * the ones returned by . + * the ones returned by . */ unsupportedBrowsers: ["mozilla", "firefox", "opera"], @@ -77,7 +77,7 @@ OpenLayers.Layer.WMS.Post = OpenLayers.Class(OpenLayers.Layer.WMS, { OpenLayers.Layer.WMS.prototype.initialize.apply(this, newArguments); this.usePost = OpenLayers.Util.indexOf( - this.unsupportedBrowsers, OpenLayers.Util.getBrowserName()) == -1; + this.unsupportedBrowsers, OpenLayers.BROWSER_NAME) == -1; }, /** diff --git a/lib/OpenLayers/Popup.js b/lib/OpenLayers/Popup.js index 449d297440..bd21b0b604 100644 --- a/lib/OpenLayers/Popup.js +++ b/lib/OpenLayers/Popup.js @@ -337,7 +337,7 @@ OpenLayers.Popup = OpenLayers.Class({ } //listen to movestart, moveend to disable overflow (FF bug) - if (!this.disableFirefoxOverflowHack && OpenLayers.Util.getBrowserName() == 'firefox') { + if (!this.disableFirefoxOverflowHack && OpenLayers.BROWSER_NAME == 'firefox') { this.map.events.register("movestart", this, function() { var style = document.defaultView.getComputedStyle( this.contentDiv, null @@ -478,7 +478,7 @@ OpenLayers.Popup = OpenLayers.Class({ //now if our browser is IE, we need to actually make the contents // div itself bigger to take its own padding into effect. this makes // me want to shoot someone, but so it goes. - if (OpenLayers.Util.getBrowserName() == "msie") { + if (OpenLayers.BROWSER_NAME == "msie") { this.contentSize.w += contentDivPadding.left + contentDivPadding.right; this.contentSize.h += diff --git a/lib/OpenLayers/Renderer/SVG.js b/lib/OpenLayers/Renderer/SVG.js index e704e039fd..69c11d3535 100644 --- a/lib/OpenLayers/Renderer/SVG.js +++ b/lib/OpenLayers/Renderer/SVG.js @@ -49,12 +49,6 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { */ symbolMetrics: null, - /** - * Property: isGecko - * {Boolean} - */ - isGecko: null, - /** * Property: supportUse * {Boolean} true if defs/use is supported - known to not work as expected @@ -77,7 +71,6 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { arguments); this.translationParameters = {x: 0, y: 0}; this.supportUse = (navigator.userAgent.toLowerCase().indexOf("applewebkit/5") == -1); - this.isGecko = (navigator.userAgent.toLowerCase().indexOf("gecko/") != -1); this.symbolMetrics = {}; }, @@ -735,7 +728,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { label.setAttributeNS(null, "text-anchor", OpenLayers.Renderer.SVG.LABEL_ALIGN[align[0]] || "middle"); - if (this.isGecko) { + if (OpenLayers.IS_GECKO === true) { label.setAttributeNS(null, "dominant-baseline", OpenLayers.Renderer.SVG.LABEL_ALIGN[align[1]] || "central"); } else { diff --git a/lib/OpenLayers/Tile/Image.js b/lib/OpenLayers/Tile/Image.js index d64c9ba2dd..3b25148392 100644 --- a/lib/OpenLayers/Tile/Image.js +++ b/lib/OpenLayers/Tile/Image.js @@ -589,7 +589,7 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, { // before continuing execution. if (OpenLayers.Util.indexOf(this.layer.SUPPORTED_TRANSITIONS, this.layer.transitionEffect) != -1) { - if (navigator.userAgent.toLowerCase().indexOf("gecko") != -1) { + if (OpenLayers.IS_GECKO === true) { this.frame.scrollLeft = this.frame.scrollLeft; } } @@ -608,5 +608,5 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, { ); OpenLayers.Tile.Image.useBlankTile = ( - OpenLayers.Util.getBrowserName() == "safari" || - OpenLayers.Util.getBrowserName() == "opera"); + OpenLayers.BROWSER_NAME == "safari" || + OpenLayers.BROWSER_NAME == "opera"); diff --git a/lib/OpenLayers/Tile/Image/IFrame.js b/lib/OpenLayers/Tile/Image/IFrame.js index f7f51a2005..f26ab18d8b 100644 --- a/lib/OpenLayers/Tile/Image/IFrame.js +++ b/lib/OpenLayers/Tile/Image/IFrame.js @@ -84,7 +84,7 @@ OpenLayers.Tile.Image.IFrame = { if (this.imgDiv == null) { var eventPane = document.createElement("div"); - if(OpenLayers.Util.getBrowserName() == "msie") { + if(OpenLayers.BROWSER_NAME == "msie") { // IE cannot handle events on elements without backgroundcolor. // So we use this little hack to make elements transparent eventPane.style.backgroundColor = '#FFFFFF'; @@ -131,7 +131,7 @@ OpenLayers.Tile.Image.IFrame = { createIFrame: function() { var id = this.id+'_iFrame'; var iframe; - if(OpenLayers.Util.getBrowserName() == "msie") { + if(OpenLayers.BROWSER_NAME == "msie") { // InternetExplorer does not set the name attribute of an iFrame // properly via DOM manipulation, so we need to do it on our own with // this hack. diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js index 48186c2d56..2862855cc2 100644 --- a/lib/OpenLayers/Util.js +++ b/lib/OpenLayers/Util.js @@ -1540,6 +1540,43 @@ OpenLayers.Util.removeTail = function(url) { return head; }; +/** + * Constant: IS_GECKO + * {Boolean} True if the userAgent reports the browser to use the Gecko engine + */ +OpenLayers.IS_GECKO = (function() { + return navigator.userAgent.toLowerCase().indexOf("gecko") != -1; +})(); + +/** + * Constant: BROWSER_NAME + * {String} + * A substring of the navigator.userAgent property. Depending on the userAgent + * property, this will be the empty string or one of the following: + * * "opera" -- Opera + * * "msie" -- Internet Explorer + * * "safari" -- Safari + * * "firefox" -- FireFox + * * "mozilla" -- Mozilla + */ +OpenLayers.BROWSER_NAME = (function() { + var name = ""; + var ua = navigator.userAgent.toLowerCase(); + if (ua.indexOf("opera") != -1) { + name = "opera"; + } else if (ua.indexOf("msie") != -1) { + name = "msie"; + } else if (ua.indexOf("safari") != -1) { + name = "safari"; + } else if (ua.indexOf("mozilla") != -1) { + if (ua.indexOf("firefox") != -1) { + name = "firefox"; + } else { + name = "mozilla"; + } + } + return name; +})(); /** * Function: getBrowserName @@ -1559,29 +1596,9 @@ OpenLayers.Util.removeTail = function(url) { * return an empty string. */ OpenLayers.Util.getBrowserName = function() { - var browserName = ""; - - var ua = navigator.userAgent.toLowerCase(); - if ( ua.indexOf( "opera" ) != -1 ) { - browserName = "opera"; - } else if ( ua.indexOf( "msie" ) != -1 ) { - browserName = "msie"; - } else if ( ua.indexOf( "safari" ) != -1 ) { - browserName = "safari"; - } else if ( ua.indexOf( "mozilla" ) != -1 ) { - if ( ua.indexOf( "firefox" ) != -1 ) { - browserName = "firefox"; - } else { - browserName = "mozilla"; - } - } - - return browserName; + return OpenLayers.BROWSER_NAME; }; - - - /** * Method: getRenderedDimensions * Renders the contentHTML offscreen to determine actual dimensions for diff --git a/tests/BaseTypes/Element.html b/tests/BaseTypes/Element.html index a3fd99c98e..8e24e8c358 100644 --- a/tests/BaseTypes/Element.html +++ b/tests/BaseTypes/Element.html @@ -212,7 +212,7 @@ style = "chickenHead"; t.ok(OpenLayers.Element.getStyle(elem, style) == null, "get style on 'auto' style returns null"); - if (OpenLayers.Util.getBrowserName() == "opera") { + if (OpenLayers.BROWSER_NAME == "opera") { elem.style.top = "15px"; style = "top"; diff --git a/tests/Control/LayerSwitcher.html b/tests/Control/LayerSwitcher.html index e058d6bbcb..40dded5a4e 100644 --- a/tests/Control/LayerSwitcher.html +++ b/tests/Control/LayerSwitcher.html @@ -71,7 +71,7 @@ function test_Control_LayerSwitcher_redraw (t) { - t.plan( (OpenLayers.Util.getBrowserName() == "opera" ? 9 : 19 ) ); + t.plan( (OpenLayers.BROWSER_NAME == "opera" ? 9 : 19 ) ); map = new OpenLayers.Map('map'); var layer = new OpenLayers.Layer.WMS("WMS", @@ -98,7 +98,7 @@ t.eq(markersInput.value, markers.name, "wms correctly valued"); t.eq(false, control.checkRedraw(), "check redraw is false"); - if (OpenLayers.Util.getBrowserName() != "opera") { + if (OpenLayers.BROWSER_NAME != "opera") { control = new OpenLayers.Control.LayerSwitcher(); var myredraw = control.redraw; control.redraw = function() { diff --git a/tests/Control/PanZoom.html b/tests/Control/PanZoom.html index 1f2deec0ea..f08fe0d07d 100644 --- a/tests/Control/PanZoom.html +++ b/tests/Control/PanZoom.html @@ -43,7 +43,7 @@ function test_Control_PanZoom_control_events (t) { - if ( !window.document.createEvent || OpenLayers.Util.getBrowserName() == "opera" || !t.open_window) { + if ( !window.document.createEvent || OpenLayers.BROWSER_NAME == "opera" || !t.open_window) { //ie can't simulate mouseclicks t.plan(0); t.debug_print("FIXME: This browser does not support the PanZoom test at this time."); diff --git a/tests/Feature.html b/tests/Feature.html index ca65888ae9..e6de47f60c 100644 --- a/tests/Feature.html +++ b/tests/Feature.html @@ -43,7 +43,7 @@ feature = new OpenLayers.Feature(layer, lonlat, data); popup = feature.createPopup(); //Safari 3 separates style overflow into overflow-x and overflow-y - var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow'; + var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow'; t.eq(popup.contentDiv.style[prop], "auto", 'overflow on popup is correct'); } function test_Feature_createMarker (t) { diff --git a/tests/Format/GML.html b/tests/Format/GML.html index d899dfb041..45aaa6c18f 100644 --- a/tests/Format/GML.html +++ b/tests/Format/GML.html @@ -411,7 +411,7 @@ ]; var shell_start = ''; - if (OpenLayers.Util.getBrowserName() == "opera") { + if (OpenLayers.BROWSER_NAME == "opera") { shell_start = ''; } var shell_end = ''; diff --git a/tests/Format/WMC.html b/tests/Format/WMC.html index 218d9f6508..a48dd4b6d7 100644 --- a/tests/Format/WMC.html +++ b/tests/Format/WMC.html @@ -130,7 +130,7 @@ */ // test v1.1.0 - if(OpenLayers.Util.getBrowserName()== "opera") { + if(OpenLayers.BROWSER_NAME== "opera") { t.plan(0); t.debug_print("WMC writing works but is not tested in Opera"); } else { diff --git a/tests/Format/WMC/v1_1_0.html b/tests/Format/WMC/v1_1_0.html index 203e849a08..0b12eb49a8 100644 --- a/tests/Format/WMC/v1_1_0.html +++ b/tests/Format/WMC/v1_1_0.html @@ -4,7 +4,7 @@