86 lines
1.8 KiB
JavaScript
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();
|
|
}; |