diff --git a/bin/generate-exports.py b/bin/generate-exports.py index e33eba5fc7..3e864df72a 100755 --- a/bin/generate-exports.py +++ b/bin/generate-exports.py @@ -85,10 +85,9 @@ class ObjectLiteral(Exportable): class Symbol(Exportable): - def __init__(self, name, export_symbol, export_as=None): + def __init__(self, name, export_symbol): Exportable.__init__(self, name) self.export_symbol = export_symbol - self.export_as = export_as or self.name self.props = set() __repr__ = simplerepr @@ -96,7 +95,7 @@ class Symbol(Exportable): def export(self): lines = [] if self.export_symbol: - lines.append('\n\ngoog.exportSymbol(\n \'%s\',\n %s);\n' % (self.name, self.export_as)) + lines.append('\n\ngoog.exportSymbol(\n \'%s\',\n %s);\n' % (self.name, self.name)) lines.extend('goog.exportProperty(\n %s,\n \'%s\',\n %s.%s);\n' % (self.name, prop, self.name, prop) for prop in sorted(self.props)) return ''.join(lines) @@ -165,20 +164,18 @@ def main(argv): objects[name] = symbol symbol.props.add(prop) continue - m = re.match(r'@exportSymbol\s+(?P\S+)(?:\s+(?P\S+))?\Z', line) + m = re.match(r'@exportSymbol\s+(?P\S+)\Z', line) if m: name = m.group('name') if name in objects: raise RuntimeError(line) # Name already defined - export_as = m.group('export_as') - symbol = Symbol(name, True, export_as) + symbol = Symbol(name, True) objects[name] = symbol - if not export_as: - components = m.group('name').split('.') - if re.match(r'[A-Z]', components[-1]): - requires.add(name) - elif len(components) > 1: - requires.add('.'.join(components[:-1])) + components = m.group('name').split('.') + if re.match(r'[A-Z]', components[-1]): + requires.add(name) + else: + requires.add('.'.join(components[:-1])) continue raise RuntimeError(line) diff --git a/css/ol.css b/css/ol.css index 5ea1ce539f..13232a0105 100644 --- a/css/ol.css +++ b/css/ol.css @@ -161,6 +161,8 @@ a.ol-full-screen-true:after { line-height: 26px; } .ol-zoom a:hover { + color: #fff; + text-decoration: none; background: rgba(0,60,136,0.7); } diff --git a/examples/bind-input.js b/examples/bind-input.js index 6a7a9a7962..bfc62663d2 100644 --- a/examples/bind-input.js +++ b/examples/bind-input.js @@ -1,13 +1,13 @@ +goog.require('ol.BrowserFeature'); goog.require('ol.Map'); goog.require('ol.RendererHints'); goog.require('ol.View2D'); goog.require('ol.dom.Input'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); -goog.require('ol.webgl'); -if (!ol.webgl.SUPPORTED) { +if (!ol.BrowserFeature.HAS_WEBGL) { var inputs = document.getElementsByClassName('webgl'); for (var i = 0, len = inputs.length; i < len; i++) { inputs[i].disabled = true; diff --git a/examples/brightness-contrast.js b/examples/brightness-contrast.js index d07824fcf6..47b9c66e8d 100644 --- a/examples/brightness-contrast.js +++ b/examples/brightness-contrast.js @@ -1,9 +1,9 @@ +goog.require('ol.BrowserFeature'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); goog.require('ol.layer.Tile'); goog.require('ol.source.MapQuestOpenAerial'); -goog.require('ol.webgl'); function setResetBrightnessButtonHTML() { @@ -15,7 +15,7 @@ function setResetContrastButtonHTML() { resetContrast.innerHTML = 'Contrast (' + layer.getContrast().toFixed(3) + ')'; } -if (!ol.webgl.SUPPORTED) { +if (!ol.BrowserFeature.HAS_WEBGL) { var info = document.getElementById('no-webgl'); /** * display error message diff --git a/examples/hue-saturation.js b/examples/hue-saturation.js index 8770a4ccb6..d80390bf70 100644 --- a/examples/hue-saturation.js +++ b/examples/hue-saturation.js @@ -1,10 +1,10 @@ +goog.require('ol.BrowserFeature'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.BingMaps'); -goog.require('ol.webgl'); function setResetHueButtonHTML() { @@ -16,7 +16,7 @@ function setResetSaturationButtonHTML() { layer.getSaturation().toFixed(2) + ')'; } -if (!ol.webgl.SUPPORTED) { +if (!ol.BrowserFeature.HAS_WEBGL) { var info = document.getElementById('no-webgl'); /** * display error message diff --git a/examples/side-by-side.js b/examples/side-by-side.js index afa8425cc7..304117071d 100644 --- a/examples/side-by-side.js +++ b/examples/side-by-side.js @@ -1,9 +1,9 @@ +goog.require('ol.BrowserFeature'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); goog.require('ol.layer.Tile'); goog.require('ol.source.MapQuestOpenAerial'); -goog.require('ol.webgl'); var domMap = new ol.Map({ @@ -20,7 +20,7 @@ var domMap = new ol.Map({ }) }); -if (ol.webgl.SUPPORTED) { +if (!ol.BrowserFeature.HAS_WEBGL) { var webglMap = new ol.Map({ renderer: ol.RendererHint.WEBGL, target: 'webglMap' diff --git a/src/ol/animation.exports b/src/ol/animation.exports index f887f38c28..5cab49819d 100644 --- a/src/ol/animation.exports +++ b/src/ol/animation.exports @@ -1,4 +1,4 @@ -@exportSymbol ol.animation.bounce ol.animation.bounce -@exportSymbol ol.animation.pan ol.animation.pan -@exportSymbol ol.animation.rotate ol.animation.rotate -@exportSymbol ol.animation.zoom ol.animation.zoom +@exportSymbol ol.animation.bounce +@exportSymbol ol.animation.pan +@exportSymbol ol.animation.rotate +@exportSymbol ol.animation.zoom diff --git a/src/ol/browserfeature.exports b/src/ol/browserfeature.exports index 45cb41ac8a..832c611d89 100644 --- a/src/ol/browserfeature.exports +++ b/src/ol/browserfeature.exports @@ -1,3 +1,7 @@ @exportSymbol ol.BrowserFeature @exportProperty ol.BrowserFeature.DEVICE_PIXEL_RATIO +@exportProperty ol.BrowserFeature.HAS_CANVAS +@exportProperty ol.BrowserFeature.HAS_DEVICE_ORIENTATION +@exportProperty ol.BrowserFeature.HAS_GEOLOCATION @exportProperty ol.BrowserFeature.HAS_TOUCH +@exportProperty ol.BrowserFeature.HAS_WEBGL diff --git a/src/ol/browserfeature.js b/src/ol/browserfeature.js index a0a428c3c9..c7a30bb633 100644 --- a/src/ol/browserfeature.js +++ b/src/ol/browserfeature.js @@ -1,5 +1,9 @@ goog.provide('ol.BrowserFeature'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('ol.webgl'); + /** * @define {boolean} Assume touch. @@ -8,22 +12,111 @@ ol.ASSUME_TOUCH = false; /** - * @type {Object} + * @define {boolean} Whether to enable canvas. */ -ol.BrowserFeature = { - /** - * The ratio between physical pixels and device-independent pixels - * (dips) on the device (`window.devicePixelRatio`). - * @type {number} - */ - DEVICE_PIXEL_RATIO: goog.global.devicePixelRatio || 1, +ol.ENABLE_CANVAS = true; - /** - * True if browser supports touch events. - * @type {boolean} - */ - HAS_TOUCH: ol.ASSUME_TOUCH || - (goog.global.document && - 'ontouchstart' in goog.global.document.documentElement) || - !!(goog.global.navigator.msPointerEnabled) -}; + +/** + * @define {boolean} Whether to enable DOM. + */ +ol.ENABLE_DOM = true; + + +/** + * @define {boolean} Whether to enable WebGL. + */ +ol.ENABLE_WEBGL = true; + + +/** +* The ratio between physical pixels and device-independent pixels +* (dips) on the device (`window.devicePixelRatio`). +* @const {number} +* @todo stability experimental +*/ +ol.BrowserFeature.DEVICE_PIXEL_RATIO = goog.global.devicePixelRatio || 1; + + +/** + * True if browser supports Canvas. + * @const {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_CANVAS = ol.ENABLE_CANVAS && ( + /** + * @return {boolean} Canvas supported. + */ + function() { + if (!('HTMLCanvasElement' in goog.global)) { + return false; + } + try { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + return !goog.isNull(canvas.getContext('2d')); + } catch (e) { + return false; + } + })(); + + +/** + * Indicates if DeviceOrientation is supported in the user's browser. + * @const {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_DEVICE_ORIENTATION = + 'DeviceOrientationEvent' in goog.global; + + +/** + * True if browser supports DOM. + * @const {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_DOM = ol.ENABLE_DOM; + + +/** + * Is HTML5 geolocation supported in the current browser? + * @const {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_GEOLOCATION = 'geolocation' in goog.global.navigator; + + +/** +* True if browser supports touch events. +* @const {boolean} + * @todo stability experimental +*/ +ol.BrowserFeature.HAS_TOUCH = ol.ASSUME_TOUCH || + (goog.global.document && + 'ontouchstart' in goog.global.document.documentElement) || + !!(goog.global.navigator.msPointerEnabled); + + +/** + * True if browser supports WebGL. + * @const {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_WEBGL = ol.ENABLE_WEBGL && ( + /** + * @return {boolean} WebGL supported. + */ + function() { + if (!('WebGLRenderingContext' in goog.global)) { + return false; + } + try { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + return !goog.isNull(ol.webgl.getContext(canvas, { + failIfMajorPerformanceCaveat: true + })); + } catch (e) { + return false; + } + })(); diff --git a/src/ol/canvas/canvas.js b/src/ol/canvas/canvas.js deleted file mode 100644 index 99bcd99217..0000000000 --- a/src/ol/canvas/canvas.js +++ /dev/null @@ -1,27 +0,0 @@ -goog.provide('ol.canvas'); - -goog.require('goog.dom'); -goog.require('goog.dom.TagName'); - - -/** - * Is supported. - * @const - * @type {boolean} - */ -ol.canvas.SUPPORTED = ( - /** - * @return {boolean} Canvas supported. - */ - function() { - if (!('HTMLCanvasElement' in goog.global)) { - return false; - } - try { - var canvas = /** @type {HTMLCanvasElement} */ - (goog.dom.createElement(goog.dom.TagName.CANVAS)); - return !goog.isNull(canvas.getContext('2d')); - } catch (e) { - return false; - } - })(); diff --git a/src/ol/control/controldefaults.exports b/src/ol/control/controldefaults.exports index 0023131772..a9c4315ac3 100644 --- a/src/ol/control/controldefaults.exports +++ b/src/ol/control/controldefaults.exports @@ -1 +1 @@ -@exportSymbol ol.control.defaults ol.control.defaults +@exportSymbol ol.control.defaults diff --git a/src/ol/deviceorientation.exports b/src/ol/deviceorientation.exports index b0a0b9eaf2..4496aa24b9 100644 --- a/src/ol/deviceorientation.exports +++ b/src/ol/deviceorientation.exports @@ -1,2 +1 @@ @exportSymbol ol.DeviceOrientation -@exportSymbol ol.DeviceOrientation.SUPPORTED ol.DeviceOrientation.SUPPORTED diff --git a/src/ol/deviceorientation.js b/src/ol/deviceorientation.js index 000494963b..aab556ebef 100644 --- a/src/ol/deviceorientation.js +++ b/src/ol/deviceorientation.js @@ -3,6 +3,7 @@ goog.provide('ol.DeviceOrientationProperty'); goog.require('goog.events'); goog.require('goog.math'); +goog.require('ol.BrowserFeature'); goog.require('ol.Object'); @@ -111,15 +112,6 @@ ol.DeviceOrientation.prototype.disposeInternal = function() { }; -/** - * Indicates if DeviceOrientation is supported in the user's browser. - * @const - * @type {boolean} - * @todo stability experimental - */ -ol.DeviceOrientation.SUPPORTED = 'DeviceOrientationEvent' in goog.global; - - /** * @private * @param {goog.events.BrowserEvent} browserEvent Event. @@ -230,7 +222,7 @@ goog.exportProperty( * @private */ ol.DeviceOrientation.prototype.handleTrackingChanged_ = function() { - if (ol.DeviceOrientation.SUPPORTED) { + if (ol.BrowserFeature.HAS_DEVICE_ORIENTATION) { var tracking = this.getTracking(); if (tracking && goog.isNull(this.listenerKey_)) { this.listenerKey_ = goog.events.listen(goog.global, 'deviceorientation', diff --git a/src/ol/geolocation.exports b/src/ol/geolocation.exports index 398f9fefea..adc26edc01 100644 --- a/src/ol/geolocation.exports +++ b/src/ol/geolocation.exports @@ -1,2 +1 @@ @exportSymbol ol.Geolocation -@exportSymbol ol.Geolocation.SUPPORTED ol.Geolocation.SUPPORTED diff --git a/src/ol/geolocation.js b/src/ol/geolocation.js index ffb7a11638..36ff83906c 100644 --- a/src/ol/geolocation.js +++ b/src/ol/geolocation.js @@ -6,6 +6,7 @@ goog.provide('ol.GeolocationProperty'); goog.require('goog.events'); goog.require('goog.events.EventType'); goog.require('goog.math'); +goog.require('ol.BrowserFeature'); goog.require('ol.Coordinate'); goog.require('ol.Object'); goog.require('ol.proj'); @@ -140,7 +141,7 @@ ol.Geolocation.prototype.handleProjectionChanged_ = function() { * @private */ ol.Geolocation.prototype.handleTrackingChanged_ = function() { - if (ol.Geolocation.SUPPORTED) { + if (ol.BrowserFeature.HAS_GEOLOCATION) { var tracking = this.getTracking(); if (tracking && !goog.isDef(this.watchId_)) { this.watchId_ = goog.global.navigator.geolocation.watchPosition( @@ -155,15 +156,6 @@ ol.Geolocation.prototype.handleTrackingChanged_ = function() { }; -/** - * Is HTML5 geolocation supported in the current browser? - * @const - * @type {boolean} - * @todo stability experimental - */ -ol.Geolocation.SUPPORTED = 'geolocation' in goog.global.navigator; - - /** * @private * @param {GeolocationPosition} position position event. diff --git a/src/ol/interaction/interactiondefaults.exports b/src/ol/interaction/interactiondefaults.exports index 2ab5e46392..6a928864a2 100644 --- a/src/ol/interaction/interactiondefaults.exports +++ b/src/ol/interaction/interactiondefaults.exports @@ -1 +1 @@ -@exportSymbol ol.interaction.defaults ol.interaction.defaults +@exportSymbol ol.interaction.defaults diff --git a/src/ol/map.js b/src/ol/map.js index 98ea98d24e..02c53fa5d5 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -58,34 +58,13 @@ goog.require('ol.layer.Group'); goog.require('ol.proj'); goog.require('ol.proj.common'); goog.require('ol.renderer.Map'); -goog.require('ol.renderer.canvas'); goog.require('ol.renderer.canvas.Map'); -goog.require('ol.renderer.dom'); goog.require('ol.renderer.dom.Map'); -goog.require('ol.renderer.webgl'); goog.require('ol.renderer.webgl.Map'); goog.require('ol.structs.PriorityQueue'); goog.require('ol.vec.Mat4'); -/** - * @define {boolean} Whether to enable canvas. - */ -ol.ENABLE_CANVAS = true; - - -/** - * @define {boolean} Whether to enable DOM. - */ -ol.ENABLE_DOM = true; - - -/** - * @define {boolean} Whether to enable WebGL. - */ -ol.ENABLE_WEBGL = true; - - /** * @enum {string} * @todo stability experimental @@ -1298,17 +1277,17 @@ ol.Map.createOptionsInternal = function(options) { for (i = 0; i < n; ++i) { rendererHint = rendererHints[i]; if (rendererHint == ol.RendererHint.CANVAS) { - if (ol.ENABLE_CANVAS && ol.renderer.canvas.SUPPORTED) { + if (ol.BrowserFeature.HAS_CANVAS) { rendererConstructor = ol.renderer.canvas.Map; break; } } else if (rendererHint == ol.RendererHint.DOM) { - if (ol.ENABLE_DOM && ol.renderer.dom.SUPPORTED) { + if (ol.BrowserFeature.HAS_DOM) { rendererConstructor = ol.renderer.dom.Map; break; } } else if (rendererHint == ol.RendererHint.WEBGL) { - if (ol.ENABLE_WEBGL && ol.renderer.webgl.SUPPORTED) { + if (ol.BrowserFeature.HAS_WEBGL) { rendererConstructor = ol.renderer.webgl.Map; break; } diff --git a/src/ol/renderer/canvas/canvasrenderer.js b/src/ol/renderer/canvas/canvasrenderer.js deleted file mode 100644 index 705283e37f..0000000000 --- a/src/ol/renderer/canvas/canvasrenderer.js +++ /dev/null @@ -1,11 +0,0 @@ -goog.provide('ol.renderer.canvas'); - -goog.require('ol.canvas'); - - -/** - * Is supported. - * @const - * @type {boolean} - */ -ol.renderer.canvas.SUPPORTED = ol.canvas.SUPPORTED; diff --git a/src/ol/renderer/dom/domrenderer.js b/src/ol/renderer/dom/domrenderer.js deleted file mode 100644 index 4f2f98d043..0000000000 --- a/src/ol/renderer/dom/domrenderer.js +++ /dev/null @@ -1,9 +0,0 @@ -goog.provide('ol.renderer.dom'); - - -/** - * Is supported. - * @const - * @type {boolean} - */ -ol.renderer.dom.SUPPORTED = true; diff --git a/src/ol/renderer/webgl/webglrenderer.js b/src/ol/renderer/webgl/webglrenderer.js deleted file mode 100644 index eb1871d9a6..0000000000 --- a/src/ol/renderer/webgl/webglrenderer.js +++ /dev/null @@ -1,11 +0,0 @@ -goog.provide('ol.renderer.webgl'); - -goog.require('ol.webgl'); - - -/** - * Is supported. - * @const - * @type {boolean} - */ -ol.renderer.webgl.SUPPORTED = ol.webgl.SUPPORTED; diff --git a/src/ol/webgl/webgl.exports b/src/ol/webgl/webgl.exports deleted file mode 100644 index 582ed7670e..0000000000 --- a/src/ol/webgl/webgl.exports +++ /dev/null @@ -1 +0,0 @@ -@exportSymbol ol.webgl.SUPPORTED ol.webgl.SUPPORTED diff --git a/src/ol/webgl/webgl.js b/src/ol/webgl/webgl.js index 8720d354d6..6b39a1edc7 100644 --- a/src/ol/webgl/webgl.js +++ b/src/ol/webgl/webgl.js @@ -1,9 +1,6 @@ goog.provide('ol.webgl'); goog.provide('ol.webgl.WebGLContextEventType'); -goog.require('goog.dom'); -goog.require('goog.dom.TagName'); - /** * @const @@ -45,28 +42,3 @@ ol.webgl.getContext = function(canvas, opt_attributes) { } return null; }; - - -/** - * Is supported. - * @const - * @type {boolean} - */ -ol.webgl.SUPPORTED = ( - /** - * @return {boolean} WebGL supported. - */ - function() { - if (!('WebGLRenderingContext' in goog.global)) { - return false; - } - try { - var canvas = /** @type {HTMLCanvasElement} */ - (goog.dom.createElement(goog.dom.TagName.CANVAS)); - return !goog.isNull(ol.webgl.getContext(canvas, { - failIfMajorPerformanceCaveat: true - })); - } catch (e) { - return false; - } - })();