mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-14 01:33:03 +00:00
90 lines
2.7 KiB
JavaScript
90 lines
2.7 KiB
JavaScript
import { dispatch as d3_dispatch } from 'd3-dispatch';
|
|
|
|
import { utilRebind } from '../util/rebind';
|
|
import { utilQsString, utilStringQs } from '../util';
|
|
|
|
|
|
export function rendererPhotos(context) {
|
|
var dispatch = d3_dispatch('change');
|
|
var _layerIDs = ['streetside', 'mapillary', 'mapillary-map-features', 'mapillary-signs', 'openstreetcam'];
|
|
var _allPhotoTypes = ['flat', 'panoramic'];
|
|
var _shownPhotoTypes = _allPhotoTypes.slice(); // shallow copy
|
|
|
|
function photos() {}
|
|
|
|
function updateStorage() {
|
|
if (window.mocha) return;
|
|
|
|
var q = utilStringQs(window.location.hash.substring(1));
|
|
var enabled = context.layers().all().filter(function(d) {
|
|
return _layerIDs.indexOf(d.id) !== -1 && d.layer && d.layer.supported() && d.layer.enabled();
|
|
}).map(function(d) {
|
|
return d.id;
|
|
});
|
|
if (enabled.length) {
|
|
q.photo_overlay = enabled.join(',');
|
|
} else {
|
|
delete q.photo_overlay;
|
|
}
|
|
window.location.replace('#' + utilQsString(q, true));
|
|
}
|
|
|
|
photos.overlayLayerIDs = function() {
|
|
return _layerIDs;
|
|
};
|
|
|
|
photos.allPhotoTypes = function() {
|
|
return _allPhotoTypes;
|
|
};
|
|
|
|
function showsLayer(id) {
|
|
var layer = context.layers().layer(id);
|
|
return layer && layer.supported() && layer.enabled();
|
|
}
|
|
|
|
photos.shouldFilterByPhotoType = function() {
|
|
return showsLayer('mapillary') ||
|
|
(showsLayer('streetside') && showsLayer('openstreetcam'));
|
|
};
|
|
|
|
photos.showsPhotoType = function(val) {
|
|
if (!photos.shouldFilterByPhotoType()) return true;
|
|
|
|
return _shownPhotoTypes.indexOf(val) !== -1;
|
|
};
|
|
|
|
photos.showsFlat = function() {
|
|
return photos.showsPhotoType('flat');
|
|
};
|
|
|
|
photos.showsPanoramic = function() {
|
|
return photos.showsPhotoType('panoramic');
|
|
};
|
|
|
|
photos.togglePhotoType = function(val) {
|
|
var index = _shownPhotoTypes.indexOf(val);
|
|
if (index !== -1) {
|
|
_shownPhotoTypes.splice(index, 1);
|
|
} else {
|
|
_shownPhotoTypes.push(val);
|
|
}
|
|
dispatch.call('change', this);
|
|
return photos;
|
|
};
|
|
|
|
photos.init = function() {
|
|
var q = utilStringQs(window.location.hash.substring(1));
|
|
if (q.photo_overlay) {
|
|
var hashOverlayIDs = q.photo_overlay.replace(/;/g, ',').split(',');
|
|
hashOverlayIDs.forEach(function(id) {
|
|
var layer = context.layers().layer(id);
|
|
if (layer) layer.enabled(true);
|
|
});
|
|
}
|
|
|
|
context.layers().on('change.rendererPhotos', updateStorage);
|
|
};
|
|
|
|
return utilRebind(photos, dispatch, 'on');
|
|
}
|