maps.nyc.gov

Source: ol/control/layermgr.js

var nyc = nyc || {};
nyc.ol = nyc.ol || {};
nyc.ol.control = nyc.ol.control || {};

/**
 * @desc Class that provides layer swiping effect
 * @public
 * @class
 * @extends {nyc.ol.control.LayerPicker}
 * @constructor
 * @param {nyc.ol.control.LayerPicker.Options} options Constructor options
 */
nyc.ol.control.LayerMgr = function(options){
	var me = this;
	nyc.ol.control.LayerPicker.call(me, options);
	me.container.append(nyc.ol.control.LayerMgr.MENU_BUTTONS_HTML).trigger('create');
	me.getElem('.btn-ok').click($.proxy(me.toggleMenu, me));
	$.each(me.controls, function(i, control){
		me.hookup(control, me.layerGroups[i].layers);		
	});
};

nyc.ol.control.LayerMgr.prototype = {
	/**
	 * @public
	 * @override
	 * @method
	 * @return {string}
	 */
	getMenuClass: function(){
		return 'mnu-lyr-mgr';
	},
	/**
	 * @public
	 * @override
	 * @method
	 * @return {string}
	 */
	getButtonHtml: function(){
		return nyc.ol.control.LayerMgr.BUTTON_HTML;
	},
	/**
	 * @public
	 * @override
	 * @method
	 * @param {ol.Map} map
	 * @return {Array<nyc.ol.control.LayerPicker.LayerGroup>}
	 */
	getLayerGoupsFromMap: function(map){
		var layers = [], layerGroups = [], photos = {};
		if (map.getBaseLayers){
			var photos = map.getBaseLayers().photos;
			layerGroups.push({name: 'Aerial photos', layers: map.sortedPhotos(), singleSelect: true});
		}
		map.getLayers().forEach(function(layer){
			var name = layer.get('name'); 
			if (name && !photos[name]){
				layers.push(layer);
			}
		});
		if (layers.length){
			layerGroups.push({name: 'Data layers', layers: layers});
		}
		layerGroups[0].expanded = true;
		return layerGroups;
	},
	/**
	 * @desc Turn off all layers
	 * @public
	 * @method
	 */
	clear: function(){
		this.getElem('input')
			.prop('checked', false)
			.checkboxradio('refresh')
			.trigger('change');
	},
	loadedGroup: function(control, group, layers){
		this.hookup(control, layers);
	},
	hookup: function(control, layers){
		if (!layers.groupLayerClass){
			control.on('change', function(choices){
				$.each(control.choices, function(_, choice){
					$.each(layers, function(_, layer){
						if (choice.label == layer.get('name')){
							layer.setVisible(choice.checked);
						}
					});
				});
			});		
		}
	}
};

nyc.inherits(nyc.ol.control.LayerMgr, nyc.ol.control.LayerPicker);

/**
 * @private
 * @const
 * @type {string}
 */
nyc.ol.control.LayerMgr.BUTTON_HTML = '<a class="btn-lyr-mgr ctl ctl-btn" data-role="button" data-icon="none" data-iconpos="notext" title="Layer manager">Layer manager</a>';

/**
 * @private
 * @const
 * @type {string}
 */
nyc.ol.control.LayerMgr.MENU_BUTTONS_HTML = '<a class="btn-ok" data-role="button">OK</a></div>';

nyc-lib: Source: ol/control/layermgr.js

maps.nyc.gov

Source: ol/control/layermgr.js

var nyc = nyc || {};
nyc.ol = nyc.ol || {};
nyc.ol.control = nyc.ol.control || {};

/**
 * @desc Class that provides layer swiping effect
 * @public
 * @class
 * @extends {nyc.ol.control.LayerPicker}
 * @constructor
 * @param {nyc.ol.control.LayerPicker.Options} options Constructor options
 */
nyc.ol.control.LayerMgr = function(options){
	var me = this;
	nyc.ol.control.LayerPicker.call(me, options);
	me.container.append(nyc.ol.control.LayerMgr.MENU_BUTTONS_HTML).trigger('create');
	me.getElem('.btn-ok').click($.proxy(me.toggleMenu, me));
	$.each(me.controls, function(i, control){
		me.hookup(control, me.layerGroups[i].layers);		
	});
};

nyc.ol.control.LayerMgr.prototype = {
	/**
	 * @public
	 * @override
	 * @method
	 * @return {string}
	 */
	getMenuClass: function(){
		return 'mnu-lyr-mgr';
	},
	/**
	 * @public
	 * @override
	 * @method
	 * @return {string}
	 */
	getButtonHtml: function(){
		return nyc.ol.control.LayerMgr.BUTTON_HTML;
	},
	/**
	 * @public
	 * @override
	 * @method
	 * @param {ol.Map} map
	 * @return {Array<nyc.ol.control.LayerPicker.LayerGroup>}
	 */
	getLayerGoupsFromMap: function(map){
		var layers = [], layerGroups = [], photos = {};
		if (map.getBaseLayers){
			var photos = map.getBaseLayers().photos;
			layerGroups.push({name: 'Aerial photos', layers: map.sortedPhotos(), singleSelect: true});
		}
		map.getLayers().forEach(function(layer){
			var name = layer.get('name'); 
			if (name && !photos[name]){
				layers.push(layer);
			}
		});
		if (layers.length){
			layerGroups.push({name: 'Data layers', layers: layers});
		}
		layerGroups[0].expanded = true;
		return layerGroups;
	},
	/**
	 * @desc Turn off all layers
	 * @public
	 * @method
	 */
	clear: function(){
		this.getElem('input')
			.prop('checked', false)
			.checkboxradio('refresh')
			.trigger('change');
	},
	loadedGroup: function(control, group, layers){
		this.hookup(control, layers);
	},
	hookup: function(control, layers){
		if (!layers.groupLayerClass){
			control.on('change', function(choices){
				$.each(control.choices, function(_, choice){
					$.each(layers, function(_, layer){
						if (choice.label == layer.get('name')){
							layer.setVisible(choice.checked);
						}
					});
				});
			});		
		}
	}
};

nyc.inherits(nyc.ol.control.LayerMgr, nyc.ol.control.LayerPicker);

/**
 * @private
 * @const
 * @type {string}
 */
nyc.ol.control.LayerMgr.BUTTON_HTML = '<a class="btn-lyr-mgr ctl ctl-btn" data-role="button" data-icon="none" data-iconpos="notext" title="Layer manager">Layer manager</a>';

/**
 * @private
 * @const
 * @type {string}
 */
nyc.ol.control.LayerMgr.MENU_BUTTONS_HTML = '<a class="btn-ok" data-role="button">OK</a></div>';