goog.provide('ol.control.Attribution'); goog.require('ol.event'); goog.require('ol.control.Control'); goog.require('goog.dom'); /** * @constructor * @extends {ol.control.Control} * @param {boolean|undefined} opt_autoActivate */ ol.control.Attribution = function(opt_autoActivate) { goog.base(this, opt_autoActivate); /** * @type {Node} */ this.container_ = null; /** * Activate this control when it is added to a map. Default is true. * * @type {boolean} autoActivate */ this.autoActivate_ = goog.isDef(opt_autoActivate) ? opt_autoActivate : true; }; goog.inherits(ol.control.Attribution, ol.control.Control); /** * @const {string} */ ol.control.Attribution.prototype.CLS = 'ol-control-attribution'; /** * @param {ol.Map} map */ ol.control.Attribution.prototype.setMap = function(map) { var staticOverlay = map.getStaticOverlay(); if (goog.isNull(this.container_)) { this.container_ = goog.dom.createDom('div', this.CLS); // This is not registered as priority listener, so priority listeners // can still get the click event. map.getEvents().register('click', this.stopLinkClick, this); } if (!goog.isNull(staticOverlay)) { goog.dom.append(staticOverlay, this.container_); } goog.base(this, 'setMap', map); }; /** * Prevent clicks on links in the attribution from getting through to * listeners. */ ol.control.Attribution.prototype.stopLinkClick = function(evt) { var node = evt.target; return node.nodeName !== 'A' || !goog.dom.getAncestorByClass(node, this.CLS); }; /** @inheritDoc */ ol.control.Attribution.prototype.activate = function() { var active = goog.base(this, 'activate'); if (active) { this.map_.getEvents().register('layeradd', this.update, this); this.update(); } return active; }; /** @inheritDoc */ ol.control.Attribution.prototype.deactivate = function() { var inactive = goog.base(this, 'deactivate'); if (inactive) { this.map_.getEvents().unregister('layeradd', this.update, this); } return inactive; }; ol.control.Attribution.prototype.update = function() { var attribution = [], layers = this.map_.getLayers(), layerAttribution; for (var i=0, ii=layers.length; i