| Current File : /home/jvzmxxx/wiki1/extensions/Kartographer/modules/wikivoyage/ControlLayers.js |
/* globals module */
/* eslint-disable no-underscore-dangle */
/**
* Control to allow users to switch between different layers on the map.
*
* See [L.Control.Layers](https://www.mapbox.com/mapbox.js/api/v2.3.0/l-control-layers/)
* documentation for more details.
*
* @alias ControlLayers
* @class Kartographer.Wikivoyage.ControlLayers
* @extends L.Control.Layers
* @private
*/
module.ControlLayers = ( function ( $, mw, L, wikivoyage ) {
return L.Control.Layers.extend( {
/**
* @override
*/
onAdd: function ( map ) {
var container = L.Control.Layers.prototype.onAdd.call( this, map );
container.className += ' leaflet-bar';
return container;
},
/**
* @override
* @private
*/
_addItem: function ( obj ) {
var label = L.Control.Layers.prototype._addItem.call( this, obj );
if ( !obj.overlay && label.childNodes[ 0 ].checked ) {
this._previousSelected = label.childNodes[ 0 ];
}
},
/**
* @override
* @private
*/
_onInputClick: function ( event ) {
var self = this,
proto = L.Control.Layers.prototype._onInputClick,
input = event && event.target,
obj;
if ( input &&
event.type === 'click' &&
/leaflet-control-layers-selector/.test( input.className )
) {
obj = this._layers[ input.layerId ];
if ( this._map.hasLayer( obj.layer ) ) {
proto.call( self );
} else {
event.stopPropagation();
if ( !obj.overlay && this._previousSelected ) {
this._previousSelected.checked = true;
}
input.checked = false;
this._expand();
wikivoyage.isAllowed( obj.layer )
.done( function () {
input.checked = true;
proto.call( self );
} );
}
} else {
proto.call( this );
}
}
} );
}(
jQuery,
mediaWiki,
L,
module.wikivoyage
) );