diff --git a/examples/simple.js b/examples/simple.js index d11dfd2633..6a3e3a4914 100644 --- a/examples/simple.js +++ b/examples/simple.js @@ -12,6 +12,7 @@ var map = new ol.Map({ }) ], renderers: ol.RendererHints.createFromQueryData(), + ol3Logo: false, target: 'map', view: new ol.View2D({ center: [0, 0], diff --git a/resources/logo-32x32-optimized.png b/resources/logo-32x32-optimized.png new file mode 100644 index 0000000000..b9ae907162 Binary files /dev/null and b/resources/logo-32x32-optimized.png differ diff --git a/resources/logo-32x32.png b/resources/logo-32x32.png new file mode 100644 index 0000000000..12382832d9 Binary files /dev/null and b/resources/logo-32x32.png differ diff --git a/src/objectliterals.jsdoc b/src/objectliterals.jsdoc index 16e061f833..932043d972 100644 --- a/src/objectliterals.jsdoc +++ b/src/objectliterals.jsdoc @@ -60,6 +60,7 @@ * @property {ol.Collection|Array.|undefined} interactions * Interactions that are initially added to the map. * @property {Array.|ol.Collection|undefined} layers Layers. + * @property {boolean|undefined} ol3Logo Show ol3 logo. Default is `true`. * @property {ol.Collection|Array.|undefined} overlays * Overlays initially added to the map. * @property {ol.RendererHint|undefined} renderer Renderer. diff --git a/src/ol/control/logocontrol.js b/src/ol/control/logocontrol.js index e1ebaa359a..a25d09ced9 100644 --- a/src/ol/control/logocontrol.js +++ b/src/ol/control/logocontrol.js @@ -90,15 +90,25 @@ ol.control.Logo.prototype.updateElement_ = function(frameState) { } } - var image, logoElement; - for (logo in logos) { - if (!(logo in logoElements)) { + var image, logoElement, logoKey; + for (logoKey in logos) { + if (!(logoKey in logoElements)) { image = new Image(); - image.src = logo; - logoElement = goog.dom.createElement(goog.dom.TagName.LI); - logoElement.appendChild(image); + image.src = logoKey; + var logoValue = logos[logoKey]; + var child; + if (logoValue === '') { + child = image; + } else { + child = goog.dom.createDom(goog.dom.TagName.A, { + 'href': logoValue, + 'target': '_blank' + }); + child.appendChild(image); + } + logoElement = goog.dom.createDom(goog.dom.TagName.LI, undefined, child); goog.dom.appendChild(this.ulElement_, logoElement); - logoElements[logo] = logoElement; + logoElements[logoKey] = logoElement; } } diff --git a/src/ol/framestate.js b/src/ol/framestate.js index b86c897ef9..027ff9ea60 100644 --- a/src/ol/framestate.js +++ b/src/ol/framestate.js @@ -25,7 +25,7 @@ goog.require('ol.layer.LayerState'); * index: number, * layersArray: Array., * layerStates: Object., - * logos: Object., + * logos: Object., * pixelToCoordinateMatrix: goog.vec.Mat4.Number, * postRenderFunctions: Array., * size: ol.Size, diff --git a/src/ol/map.js b/src/ol/map.js index cf57fa2855..cd34273c4a 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -65,6 +65,41 @@ goog.require('ol.structs.PriorityQueue'); goog.require('ol.vec.Mat4'); +/** + * @const + * @type {string} + */ +ol.OL3_URL = 'http://ol3js.org/'; + + +/** + * @const + * @type {string} + */ +ol.OL3_LOGO_URL = 'data:image/png;base64,' + + 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBI' + + 'WXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAA' + + 'AhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszW' + + 'WMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvY' + + 'asvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvX' + + 'H1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1Vk' + + 'bMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW' + + '2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLP' + + 'VcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqT' + + 'acrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaar' + + 'ldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+Hi' + + 'zeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDn' + + 'BAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSF' + + 'hYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJ' + + 'REFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxC' + + 'Brb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe' + + '0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8' + + 'a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7a' + + 'hgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCn' + + 'B3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDg' + + 'q82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC'; + + /** * @enum {string} * @todo stability experimental @@ -136,6 +171,12 @@ ol.Map = function(options) { var optionsInternal = ol.Map.createOptionsInternal(options); + /** + * @private + * @type {boolean} + */ + this.ol3Logo_ = optionsInternal.ol3Logo; + /** * @private * @type {goog.async.AnimationDelay} @@ -1096,6 +1137,9 @@ ol.Map.prototype.renderFrame_ = function(time) { viewHints: viewHints, wantedTiles: {} }; + if (this.ol3Logo_) { + frameState.logos[ol.OL3_LOGO_URL] = ol.OL3_URL; + } } var preRenderFunctions = this.preRenderFunctions_; @@ -1251,6 +1295,7 @@ ol.Map.prototype.withFrozenRendering = function(f, opt_obj) { /** * @typedef {{controls: ol.Collection, * interactions: ol.Collection, + * ol3Logo: boolean, * overlays: ol.Collection, * rendererConstructor: * function(new: ol.renderer.Map, Element, ol.Map), @@ -1270,6 +1315,8 @@ ol.Map.createOptionsInternal = function(options) { */ var values = {}; + var ol3Logo = goog.isDef(options.ol3Logo) ? options.ol3Logo : true; + var layerGroup = (options.layers instanceof ol.layer.Group) ? options.layers : new ol.layer.Group({layers: options.layers}); values[ol.MapProperty.LAYERGROUP] = layerGroup; @@ -1357,6 +1404,7 @@ ol.Map.createOptionsInternal = function(options) { return { controls: controls, interactions: interactions, + ol3Logo: ol3Logo, overlays: overlays, rendererConstructor: rendererConstructor, values: values diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index bd7ecd8e07..de430d81a8 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -175,7 +175,7 @@ ol.renderer.Layer.prototype.updateAttributions = ol.renderer.Layer.prototype.updateLogos = function(frameState, source) { var logo = source.getLogo(); if (goog.isDef(logo)) { - frameState.logos[logo] = true; + frameState.logos[logo] = ''; } };