This allows to add map specific copyright, or copyright required for tools like geocoders that are used in the context of the map.
105 lines
3.1 KiB
JavaScript
105 lines
3.1 KiB
JavaScript
/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for
|
|
* full list of contributors). Published under the Clear BSD license.
|
|
* See http://svn.openlayers.org/trunk/openlayers/license.txt for the
|
|
* full text of the license. */
|
|
|
|
/**
|
|
* @requires OpenLayers/Control.js
|
|
*/
|
|
|
|
/**
|
|
* Class: OpenLayers.Control.Attribution
|
|
* The attribution control adds attribution from layers to the map display.
|
|
* It uses 'attribution' property of each layer.
|
|
*
|
|
* Inherits from:
|
|
* - <OpenLayers.Control>
|
|
*/
|
|
OpenLayers.Control.Attribution =
|
|
OpenLayers.Class(OpenLayers.Control, {
|
|
|
|
/**
|
|
* APIProperty: seperator
|
|
* {String} String used to seperate layers.
|
|
*/
|
|
separator: ", ",
|
|
|
|
/**
|
|
* APIProperty: template
|
|
* {String} Template for the attribution. This has to include the substring
|
|
* "${layers}", which will be replaced by the layer specific
|
|
* attributions, separated by <separator>. The default is "${layers}".
|
|
*/
|
|
template: "${layers}",
|
|
|
|
/**
|
|
* Constructor: OpenLayers.Control.Attribution
|
|
*
|
|
* Parameters:
|
|
* options - {Object} Options for control.
|
|
*/
|
|
|
|
/**
|
|
* Method: destroy
|
|
* Destroy control.
|
|
*/
|
|
destroy: function() {
|
|
this.map.events.un({
|
|
"removelayer": this.updateAttribution,
|
|
"addlayer": this.updateAttribution,
|
|
"changelayer": this.updateAttribution,
|
|
"changebaselayer": this.updateAttribution,
|
|
scope: this
|
|
});
|
|
|
|
OpenLayers.Control.prototype.destroy.apply(this, arguments);
|
|
},
|
|
|
|
/**
|
|
* Method: draw
|
|
* Initialize control.
|
|
*
|
|
* Returns:
|
|
* {DOMElement} A reference to the DIV DOMElement containing the control
|
|
*/
|
|
draw: function() {
|
|
OpenLayers.Control.prototype.draw.apply(this, arguments);
|
|
|
|
this.map.events.on({
|
|
'changebaselayer': this.updateAttribution,
|
|
'changelayer': this.updateAttribution,
|
|
'addlayer': this.updateAttribution,
|
|
'removelayer': this.updateAttribution,
|
|
scope: this
|
|
});
|
|
this.updateAttribution();
|
|
|
|
return this.div;
|
|
},
|
|
|
|
/**
|
|
* Method: updateAttribution
|
|
* Update attribution string.
|
|
*/
|
|
updateAttribution: function() {
|
|
var attributions = [];
|
|
if (this.map && this.map.layers) {
|
|
for(var i=0, len=this.map.layers.length; i<len; i++) {
|
|
var layer = this.map.layers[i];
|
|
if (layer.attribution && layer.getVisibility()) {
|
|
// add attribution only if attribution text is unique
|
|
if (OpenLayers.Util.indexOf(
|
|
attributions, layer.attribution) === -1) {
|
|
attributions.push( layer.attribution );
|
|
}
|
|
}
|
|
}
|
|
this.div.innerHTML = OpenLayers.String.format(this.template, {
|
|
layers: attributions.join(this.separator)
|
|
});
|
|
}
|
|
},
|
|
|
|
CLASS_NAME: "OpenLayers.Control.Attribution"
|
|
});
|