konova/templates/map/client/libs/netgis/Attribution.js
mpeltriaux c08f5145fe Netgis client update
* adds new version to sources
2022-09-12 13:12:59 +02:00

86 lines
1.8 KiB
JavaScript

"use strict";
var netgis = netgis || {};
netgis.Attribution = function()
{
this.client = null;
this.layers = null;
this.items = [];
};
netgis.Attribution.prototype.load = function()
{
this.root = document.createElement( "section" );
this.root.className = "netgis-attribution netgis-text-primary";
if ( netgis.util.isDefined( this.client.config.map ) )
if ( netgis.util.isDefined( this.client.config.map.attribution ) )
this.items.push( this.client.config.map.attribution );
this.update();
this.client.root.appendChild( this.root );
// Events
this.client.on( netgis.Events.CONTEXT_UPDATE, this.onContextUpdate.bind( this ) );
this.client.on( netgis.Events.LAYER_SHOW, this.onLayerShow.bind( this ) );
this.client.on( netgis.Events.LAYER_HIDE, this.onLayerHide.bind( this ) );
};
netgis.Attribution.prototype.update = function()
{
this.root.innerHTML = "© " + this.items.join( ", " );
};
netgis.Attribution.prototype.onContextUpdate = function( e )
{
var context = e;
// Layers
this.layers = [];
for ( var l = 0; l < context.layers.length; l++ )
{
var item = context.layers[ l ];
if ( item.attribution && item.attribution.length > 0 )
{
this.layers[ l ] = item.attribution;
}
}
};
netgis.Attribution.prototype.onLayerShow = function( e )
{
var attribution = this.layers[ e.id ];
if ( ! attribution ) return;
for ( var i = 0; i < this.items.length; i++ )
{
if ( this.items[ i ] === attribution ) return;
}
this.items.push( attribution );
this.update();
};
netgis.Attribution.prototype.onLayerHide = function( e )
{
var attribution = this.layers[ e.id ];
if ( ! attribution ) return;
for ( var i = 0; i < this.items.length; i++ )
{
if ( this.items[ i ] === attribution )
{
this.items.splice( i, 1 );
break;
}
}
this.update();
};