Remove logos

This commit is contained in:
Tim Schaub
2017-12-16 08:40:02 -07:00
parent 9a3d7eedc4
commit b7e9b8b461
40 changed files with 8 additions and 448 deletions

View File

@@ -24,7 +24,6 @@ import {createEmpty, clone, createOrUpdateEmpty, equals, getForViewAndSize, isEm
import {TRUE} from './functions.js';
import _ol_has_ from './has.js';
import _ol_layer_Group_ from './layer/Group.js';
import _ol_obj_ from './obj.js';
import _ol_plugins_ from './plugins.js';
import _ol_renderer_Type_ from './renderer/Type.js';
import _ol_size_ from './size.js';
@@ -41,7 +40,6 @@ import _ol_transform_ from './transform.js';
* layers: (Array.<ol.layer.Base>|ol.Collection.<ol.layer.Base>|undefined),
* loadTilesWhileAnimating: (boolean|undefined),
* loadTilesWhileInteracting: (boolean|undefined),
* logo: (boolean|string|olx.LogoOptions|Element|undefined),
* moveTolerance: (number|undefined),
* overlays: (ol.Collection.<ol.Overlay>|Array.<ol.Overlay>|undefined),
* renderer: (ol.renderer.Type|Array.<ol.renderer.Type>|undefined),
@@ -86,13 +84,6 @@ export var MapOptions;
* true, tiles will be loaded while interacting with the map. This may
* improve the user experience, but can also make map panning and zooming
* choppy on devices with slow memory. Default is `false`.
* @param {boolean|string|olx.LogoOptions|Element|undefined} options.logo The
* map logo. A logo to be displayed on the map at all times. If a string is
* provided, it will be set as the image source of the logo. If an object is
* provided, the `src` property should be the URL for an image and the
* `href` property should be a URL for creating a link. If an element is
* provided, the element will be used. To disable the map logo, set the
* option to `false`. By default, the OpenLayers logo is shown.
* @param {number|undefined} options.moveTolerance The minimum distance in
* pixels the cursor must move to be detected as a map move event instead
* of a click. Increasing this value can make it easier to click on the map.
@@ -147,12 +138,6 @@ var _ol_PluggableMap_ = function(options) {
this.pixelRatio_ = options.pixelRatio !== undefined ?
options.pixelRatio : _ol_has_.DEVICE_PIXEL_RATIO;
/**
* @private
* @type {Object.<string, string>}
*/
this.logos_ = optionsInternal.logos;
/**
* @private
* @type {number|undefined}
@@ -1234,7 +1219,6 @@ _ol_PluggableMap_.prototype.renderFrame_ = function(time) {
index: this.frameIndex_++,
layerStates: layerStates,
layerStatesArray: layerStatesArray,
logos: _ol_obj_.assign({}, this.logos_),
pixelRatio: this.pixelRatio_,
pixelToCoordinateTransform: this.pixelToCoordinateTransform_,
postRenderFunctions: [],
@@ -1399,34 +1383,6 @@ _ol_PluggableMap_.DEFAULT_RENDERER_TYPES = [
];
/**
* @const
* @type {string}
*/
_ol_PluggableMap_.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';
/**
* @param {MapOptions} options Map options.
* @return {ol.MapOptionsInternal} Internal map options.
@@ -1448,23 +1404,6 @@ _ol_PluggableMap_.createOptionsInternal = function(options) {
*/
var values = {};
var logos = {};
if (options.logo === undefined ||
(typeof options.logo === 'boolean' && options.logo)) {
logos[_ol_PluggableMap_.LOGO_URL] = 'https://openlayers.org/';
} else {
var logo = options.logo;
if (typeof logo === 'string') {
logos[logo] = '';
} else if (logo instanceof HTMLElement) {
logos[getUid(logo).toString()] = logo;
} else if (logo) {
_ol_asserts_.assert(typeof logo.href == 'string', 44); // `logo.href` should be a string.
_ol_asserts_.assert(typeof logo.src == 'string', 45); // `logo.src` should be a string.
logos[logo.src] = logo.href;
}
}
var layerGroup = (options.layers instanceof _ol_layer_Group_) ?
options.layers : new _ol_layer_Group_({layers: options.layers});
values[_ol_MapProperty_.LAYERGROUP] = layerGroup;
@@ -1554,7 +1493,6 @@ _ol_PluggableMap_.createOptionsInternal = function(options) {
controls: controls,
interactions: interactions,
keyboardEventTarget: keyboardEventTarget,
logos: logos,
overlays: overlays,
mapRendererPlugin: mapRendererPlugin,
values: values

View File

@@ -1,17 +1,14 @@
/**
* @module ol/control/Attribution
*/
// FIXME handle date line wrap
import {inherits} from '../index.js';
import _ol_array_ from '../array.js';
import Control from '../control/Control.js';
import _ol_css_ from '../css.js';
import {removeNode, replaceNode} from '../dom.js';
import {removeChildren, replaceNode} from '../dom.js';
import _ol_events_ from '../events.js';
import EventType from '../events/EventType.js';
import _ol_layer_Layer_ from '../layer/Layer.js';
import _ol_obj_ from '../obj.js';
/**
* @classdesc
@@ -35,15 +32,6 @@ var Attribution = function(opt_options) {
*/
this.ulElement_ = document.createElement('UL');
/**
* @private
* @type {Element}
*/
this.logoLi_ = document.createElement('LI');
this.ulElement_.appendChild(this.logoLi_);
this.logoLi_.style.display = 'none';
/**
* @private
* @type {boolean}
@@ -131,12 +119,6 @@ var Attribution = function(opt_options) {
*/
this.renderedVisible_ = true;
/**
* @private
* @type {Object.<string, Element>}
*/
this.logoElements_ = {};
};
inherits(Attribution, Control);
@@ -231,10 +213,7 @@ Attribution.prototype.updateElement_ = function(frameState) {
return;
}
// remove everything but the logo
while (this.ulElement_.lastChild !== this.logoLi_) {
this.ulElement_.removeChild(this.ulElement_.lastChild);
}
removeChildren(this.ulElement_);
// append the attributions
for (var i = 0, ii = attributions.length; i < ii; ++i) {
@@ -244,64 +223,13 @@ Attribution.prototype.updateElement_ = function(frameState) {
}
if (attributions.length === 0 && this.renderedAttributions_.length > 0) {
this.element.classList.add('ol-logo-only');
} else if (this.renderedAttributions_.length === 0 && attributions.length > 0) {
this.element.classList.remove('ol-logo-only');
}
var visible = attributions.length > 0 || !_ol_obj_.isEmpty(frameState.logos);
var visible = attributions.length > 0;
if (this.renderedVisible_ != visible) {
this.element.style.display = visible ? '' : 'none';
this.renderedVisible_ = visible;
}
this.renderedAttributions_ = attributions;
this.insertLogos_(frameState);
};
/**
* @param {?olx.FrameState} frameState Frame state.
* @private
*/
Attribution.prototype.insertLogos_ = function(frameState) {
var logo;
var logos = frameState.logos;
var logoElements = this.logoElements_;
for (logo in logoElements) {
if (!(logo in logos)) {
removeNode(logoElements[logo]);
delete logoElements[logo];
}
}
var image, logoElement, logoKey;
for (logoKey in logos) {
var logoValue = logos[logoKey];
if (logoValue instanceof HTMLElement) {
this.logoLi_.appendChild(logoValue);
logoElements[logoKey] = logoValue;
}
if (!(logoKey in logoElements)) {
image = new Image();
image.src = logoKey;
if (logoValue === '') {
logoElement = image;
} else {
logoElement = document.createElement('a');
logoElement.href = logoValue;
logoElement.appendChild(image);
}
this.logoLi_.appendChild(logoElement);
logoElements[logoKey] = logoElement;
}
}
this.logoLi_.style.display = !_ol_obj_.isEmpty(logos) ? '' : 'none';
};

View File

@@ -5,7 +5,6 @@ import {getUid, inherits, nullFunction} from '../index.js';
import _ol_ImageState_ from '../ImageState.js';
import _ol_Observable_ from '../Observable.js';
import _ol_TileState_ from '../TileState.js';
import _ol_asserts_ from '../asserts.js';
import _ol_events_ from '../events.js';
import EventType from '../events/EventType.js';
import {FALSE} from '../functions.js';
@@ -166,25 +165,6 @@ _ol_renderer_Layer_.prototype.scheduleExpireCache = function(frameState, tileSou
};
/**
* @param {olx.FrameState} frameState Frame state.
* @param {ol.source.Source} source Source.
* @protected
*/
_ol_renderer_Layer_.prototype.updateLogos = function(frameState, source) {
var logo = source.getLogo();
if (logo !== undefined) {
if (typeof logo === 'string') {
frameState.logos[logo] = '';
} else if (logo) {
_ol_asserts_.assert(typeof logo.href == 'string', 44); // `logo.href` should be a string.
_ol_asserts_.assert(typeof logo.src == 'string', 45); // `logo.src` should be a string.
frameState.logos[logo.src] = logo.href;
}
}
};
/**
* @param {Object.<string, Object.<string, ol.TileRange>>} usedTiles Used tiles.
* @param {ol.source.Tile} tileSource Tile source.

View File

@@ -187,7 +187,6 @@ _ol_renderer_canvas_ImageLayer_.prototype.prepareFrame = function(frameState, la
0,
-viewCenter[0], -viewCenter[1]);
this.updateLogos(frameState, imageSource);
this.renderedResolution = imageResolution * pixelRatio / imagePixelRatio;
}

View File

@@ -292,7 +292,6 @@ _ol_renderer_canvas_TileLayer_.prototype.prepareFrame = function(frameState, lay
this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio,
projection, extent, z, tileLayer.getPreload());
this.scheduleExpireCache(frameState, tileSource);
this.updateLogos(frameState, tileSource);
return this.renderedTiles.length > 0;
};

View File

@@ -299,12 +299,9 @@ _ol_renderer_canvas_VectorLayer_.prototype.handleStyleImageChange_ = function(ev
* @inheritDoc
*/
_ol_renderer_canvas_VectorLayer_.prototype.prepareFrame = function(frameState, layerState) {
var vectorLayer = /** @type {ol.layer.Vector} */ (this.getLayer());
var vectorSource = vectorLayer.getSource();
this.updateLogos(frameState, vectorSource);
var animating = frameState.viewHints[_ol_ViewHint_.ANIMATING];
var interacting = frameState.viewHints[_ol_ViewHint_.INTERACTING];
var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();

View File

@@ -189,8 +189,6 @@ _ol_renderer_webgl_ImageLayer_.prototype.prepareFrame = function(frameState, lay
this.image_ = image;
this.texture = texture;
this.updateLogos(frameState, imageSource);
}
return !!image;

View File

@@ -354,7 +354,6 @@ _ol_renderer_webgl_TileLayer_.prototype.prepareFrame = function(frameState, laye
}
}, this);
this.scheduleExpireCache(frameState, tileSource);
this.updateLogos(frameState, tileSource);
var texCoordMatrix = this.texCoordMatrix;
_ol_transform_.reset(texCoordMatrix);

View File

@@ -212,12 +212,9 @@ _ol_renderer_webgl_VectorLayer_.prototype.handleStyleImageChange_ = function(eve
* @inheritDoc
*/
_ol_renderer_webgl_VectorLayer_.prototype.prepareFrame = function(frameState, layerState, context) {
var vectorLayer = /** @type {ol.layer.Vector} */ (this.getLayer());
var vectorSource = vectorLayer.getSource();
this.updateLogos(frameState, vectorSource);
var animating = frameState.viewHints[_ol_ViewHint_.ANIMATING];
var interacting = frameState.viewHints[_ol_ViewHint_.INTERACTING];
var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();

View File

@@ -125,11 +125,6 @@ _ol_source_BingMaps_.prototype.handleImageryMetadataResponse = function(response
return;
}
var brandLogoUri = response.brandLogoUri;
if (brandLogoUri.indexOf('https') == -1) {
brandLogoUri = brandLogoUri.replace('http', 'https');
}
//var copyright = response.copyright; // FIXME do we need to display this?
var resource = response.resourceSets[0].resources[0];
var maxZoom = this.maxZoom_ == -1 ? resource.zoomMax : this.maxZoom_;
@@ -209,8 +204,6 @@ _ol_source_BingMaps_.prototype.handleImageryMetadataResponse = function(response
});
}
this.setLogo(brandLogoUri);
this.setState(_ol_source_State_.READY);
};
export default _ol_source_BingMaps_;

View File

@@ -45,7 +45,6 @@ var _ol_source_CartoDB_ = function(options) {
attributions: options.attributions,
cacheSize: options.cacheSize,
crossOrigin: options.crossOrigin,
logo: options.logo,
maxZoom: options.maxZoom !== undefined ? options.maxZoom : 18,
minZoom: options.minZoom,
projection: options.projection,

View File

@@ -26,7 +26,6 @@ var _ol_source_Cluster_ = function(options) {
_ol_source_Vector_.call(this, {
attributions: options.attributions,
extent: options.extent,
logo: options.logo,
projection: options.projection,
wrapX: options.wrapX
});

View File

@@ -27,7 +27,6 @@ var _ol_source_Image_ = function(options) {
_ol_source_Source_.call(this, {
attributions: options.attributions,
extent: options.extent,
logo: options.logo,
projection: options.projection,
state: options.state
});

View File

@@ -32,7 +32,6 @@ var _ol_source_ImageArcGISRest_ = function(opt_options) {
_ol_source_Image_.call(this, {
attributions: options.attributions,
logo: options.logo,
projection: options.projection,
resolutions: options.resolutions
});

View File

@@ -19,7 +19,6 @@ var _ol_source_ImageCanvas_ = function(options) {
_ol_source_Image_.call(this, {
attributions: options.attributions,
logo: options.logo,
projection: options.projection,
resolutions: options.resolutions,
state: options.state

View File

@@ -32,7 +32,6 @@ var _ol_source_ImageStatic_ = function(options) {
_ol_source_Image_.call(this, {
attributions: options.attributions,
logo: options.logo,
projection: getProjection(options.projection)
});

View File

@@ -33,7 +33,6 @@ var _ol_source_ImageWMS_ = function(opt_options) {
_ol_source_Image_.call(this, {
attributions: options.attributions,
logo: options.logo,
projection: options.projection,
resolutions: options.resolutions
});

View File

@@ -113,7 +113,6 @@ var _ol_source_Raster_ = function(options) {
index: 0,
layerStates: layerStates,
layerStatesArray: layerStatesArray,
logos: {},
pixelRatio: 1,
pixelToCoordinateTransform: _ol_transform_.create(),
postRenderFunctions: [],

View File

@@ -7,13 +7,6 @@ import {get as getProjection} from '../proj.js';
import _ol_source_State_ from '../source/State.js';
/**
* Object literal with config options for the map logo.
* @typedef {{href: (string), src: (string)}}
*/
export var LogoOptions;
/**
* @classdesc
* Abstract base class; normally only used for creating subclasses and not
@@ -44,12 +37,6 @@ var _ol_source_Source_ = function(options) {
*/
this.attributions_ = this.adaptAttributions_(options.attributions);
/**
* @private
* @type {string|LogoOptions|undefined}
*/
this.logo_ = options.logo;
/**
* @private
* @type {ol.source.State}
@@ -114,16 +101,6 @@ _ol_source_Source_.prototype.getAttributions = function() {
};
/**
* Get the logo of the source.
* @return {string|LogoOptions|undefined} Logo.
* @api
*/
_ol_source_Source_.prototype.getLogo = function() {
return this.logo_;
};
/**
* Get the projection of the source.
* @return {ol.proj.Projection} Projection.
@@ -181,15 +158,6 @@ _ol_source_Source_.prototype.setAttributions = function(attributions) {
};
/**
* Set the logo of the source.
* @param {string|LogoOptions|undefined} logo Logo.
*/
_ol_source_Source_.prototype.setLogo = function(logo) {
this.logo_ = logo;
};
/**
* Set the state of the source.
* @param {ol.source.State} state State.

View File

@@ -28,7 +28,6 @@ var _ol_source_Tile_ = function(options) {
_ol_source_Source_.call(this, {
attributions: options.attributions,
extent: options.extent,
logo: options.logo,
projection: options.projection,
state: options.state,
wrapX: options.wrapX

View File

@@ -32,7 +32,6 @@ var _ol_source_TileArcGISRest_ = function(opt_options) {
attributions: options.attributions,
cacheSize: options.cacheSize,
crossOrigin: options.crossOrigin,
logo: options.logo,
projection: options.projection,
reprojectionErrorThreshold: options.reprojectionErrorThreshold,
tileGrid: options.tileGrid,

View File

@@ -30,7 +30,6 @@ var _ol_source_TileImage_ = function(options) {
attributions: options.attributions,
cacheSize: options.cacheSize,
extent: options.extent,
logo: options.logo,
opaque: options.opaque,
projection: options.projection,
state: options.state,

View File

@@ -38,7 +38,6 @@ var _ol_source_TileWMS_ = function(opt_options) {
attributions: options.attributions,
cacheSize: options.cacheSize,
crossOrigin: options.crossOrigin,
logo: options.logo,
opaque: !transparent,
projection: options.projection,
reprojectionErrorThreshold: options.reprojectionErrorThreshold,

View File

@@ -24,7 +24,6 @@ var _ol_source_UrlTile_ = function(options) {
attributions: options.attributions,
cacheSize: options.cacheSize,
extent: options.extent,
logo: options.logo,
opaque: options.opaque,
projection: options.projection,
state: options.state,

View File

@@ -39,7 +39,6 @@ var _ol_source_Vector_ = function(opt_options) {
_ol_source_Source_.call(this, {
attributions: options.attributions,
logo: options.logo,
projection: undefined,
state: _ol_source_State_.READY,
wrapX: options.wrapX !== undefined ? options.wrapX : true

View File

@@ -42,7 +42,6 @@ var _ol_source_VectorTile_ = function(options) {
attributions: options.attributions,
cacheSize: options.cacheSize !== undefined ? options.cacheSize : 128,
extent: extent,
logo: options.logo,
opaque: false,
projection: projection,
state: options.state,

View File

@@ -159,7 +159,6 @@ var _ol_source_WMTS_ = function(options) {
attributions: options.attributions,
cacheSize: options.cacheSize,
crossOrigin: options.crossOrigin,
logo: options.logo,
projection: options.projection,
reprojectionErrorThreshold: options.reprojectionErrorThreshold,
tileClass: options.tileClass,

View File

@@ -44,7 +44,6 @@ var _ol_source_XYZ_ = function(opt_options) {
attributions: options.attributions,
cacheSize: options.cacheSize,
crossOrigin: options.crossOrigin,
logo: options.logo,
opaque: options.opaque,
projection: projection,
reprojectionErrorThreshold: options.reprojectionErrorThreshold,

View File

@@ -141,7 +141,6 @@ var _ol_source_Zoomify_ = function(opt_options) {
attributions: options.attributions,
cacheSize: options.cacheSize,
crossOrigin: options.crossOrigin,
logo: options.logo,
projection: options.projection,
reprojectionErrorThreshold: options.reprojectionErrorThreshold,
tileClass: ZoomifyTileClass,

View File

@@ -440,7 +440,6 @@ ol.LRUCacheEntry;
* @typedef {{controls: (ol.Collection.<ol.control.Control>|undefined),
* interactions: (ol.Collection.<ol.interaction.Interaction>|undefined),
* keyboardEventTarget: (Element|Document),
* logos: (Object.<string, (string|Element)>),
* overlays: ol.Collection.<ol.Overlay>,
* mapRendererPlugin: olx.MapRendererPlugin,
* values: Object.<string, *>}}
@@ -616,7 +615,6 @@ ol.SnapSegmentDataType;
/**
* @typedef {{attributions: (ol.AttributionLike|undefined),
* extent: (null|ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* projection: ol.ProjectionLike,
* resolutions: (Array.<number>|undefined),
* state: (ol.source.State|undefined)}}
@@ -634,7 +632,6 @@ ol.SourceRasterRenderedState;
/**
* @typedef {{attributions: (ol.AttributionLike|undefined),
* logo: (string|olx.LogoOptions|undefined),
* projection: ol.ProjectionLike,
* state: (ol.source.State|undefined),
* wrapX: (boolean|undefined)}}
@@ -646,7 +643,6 @@ ol.SourceSourceOptions;
* @typedef {{attributions: (ol.AttributionLike|undefined),
* cacheSize: (number|undefined),
* extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* opaque: (boolean|undefined),
* tilePixelRatio: (number|undefined),
* projection: ol.ProjectionLike,
@@ -662,7 +658,6 @@ ol.SourceTileOptions;
* @typedef {{attributions: (ol.AttributionLike|undefined),
* cacheSize: (number|undefined),
* extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* opaque: (boolean|undefined),
* projection: ol.ProjectionLike,
* state: (ol.source.State|undefined),