mirror of
https://github.com/FoggedLens/iD.git
synced 2026-04-21 19:26:41 +02:00
@@ -41,15 +41,15 @@ of iD (e.g. `https://ideditor-release.netlify.app`), the following parameters ar
|
||||
* __`offset`__ - Background imagery alignment offset in meters, formatted as `east,north`.<br/>
|
||||
_Example:_ `offset=-10,5`
|
||||
* __`photo_overlay`__ - The street-level photo overlay layers to enable.<br/>
|
||||
_Example:_ `photo_overlay=streetside,mapillary,openstreetcam`<br/>
|
||||
_Available values:_ `streetside` (Microsoft Bing), `mapillary`, `mapillary-signs`, `mapillary-map-features`, `openstreetcam`
|
||||
_Example:_ `photo_overlay=streetside,mapillary,kartaview`<br/>
|
||||
_Available values:_ `streetside` (Microsoft Bing), `mapillary`, `mapillary-signs`, `mapillary-map-features`, `kartaview`
|
||||
* __`photo_dates`__ - The range of capture dates by which to filter street-level photos. Dates are given in YYYY-MM-DD format and separated by `_`. One-sided ranges are supported.<br/>
|
||||
_Example:_ `photo_dates=2019-01-01_2020-12-31`, `photo_dates=2019-01-01_`, `photo_dates=_2020-12-31`<br/>
|
||||
* __`photo_username`__ - The Mapillary or OpenStreetCam username by which to filter street-level photos. Multiple comma-separated usernames are supported.<br/>
|
||||
* __`photo_username`__ - The Mapillary or KartaView username by which to filter street-level photos. Multiple comma-separated usernames are supported.<br/>
|
||||
_Example:_ `photo_user=quincylvania`, `photo_user=quincylvania,chrisbeddow`<br/>
|
||||
* __`photo`__ - The service and ID of the street-level photo to show.<br/>
|
||||
_Example:_ `photo=streetside/718514589`<br/>
|
||||
_Available prefixes:_ `streetside/`, `mapillary/`, `openstreetcam/`
|
||||
_Available prefixes:_ `streetside/`, `mapillary/`, `kartaview`
|
||||
* __`presets`__ - A comma-separated list of preset IDs. These will be the only presets the user may select.<br/>
|
||||
_Example:_ `presets=building,highway/residential,highway/unclassified`
|
||||
* __`rtl=true`__ - Force iD into right-to-left mode (useful for testing).
|
||||
|
||||
@@ -46,6 +46,7 @@ _Breaking developer changes, which may affect downstream projects or sites that
|
||||
#### :sparkles: Usability & Accessibility
|
||||
#### :scissors: Operations
|
||||
#### :camera: Street-Level
|
||||
* Rename OpenStreetCam layers to KartaView ([#8807])
|
||||
#### :white_check_mark: Validation
|
||||
* Clarify description of "disconnected way" validation rule ([#8800])
|
||||
#### :bug: Bugfixes
|
||||
@@ -63,6 +64,7 @@ _Breaking developer changes, which may affect downstream projects or sites that
|
||||
[#8796]: https://github.com/openstreetmap/iD/issues/8796
|
||||
[#8800]: https://github.com/openstreetmap/iD/pull/8800
|
||||
[#8805]: https://github.com/openstreetmap/iD/issues/8805
|
||||
[#8807]: https://github.com/openstreetmap/iD/issues/8807
|
||||
|
||||
# 2.20.2
|
||||
##### 2021-Oct-28
|
||||
|
||||
+9
-9
@@ -233,14 +233,14 @@
|
||||
}
|
||||
|
||||
|
||||
/* OpenStreetCam Image Layer */
|
||||
.layer-openstreetcam {
|
||||
/* KartaView Image Layer */
|
||||
.layer-kartaview {
|
||||
pointer-events: none;
|
||||
}
|
||||
.layer-openstreetcam .viewfield-group * {
|
||||
.layer-kartaview .viewfield-group * {
|
||||
fill: #20c4ff;
|
||||
}
|
||||
.layer-openstreetcam .sequence {
|
||||
.layer-kartaview .sequence {
|
||||
stroke: #20c4ff;
|
||||
}
|
||||
|
||||
@@ -323,8 +323,8 @@ label.streetside-hires {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
/* OpenStreetCam viewer */
|
||||
.osc-wrapper {
|
||||
/* KartaView viewer */
|
||||
.kartaview-wrapper {
|
||||
position: relative;
|
||||
background-color: #000;
|
||||
background-image: url(img/loader-black.gif);
|
||||
@@ -332,16 +332,16 @@ label.streetside-hires {
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.osc-wrapper .photo-attribution a:active {
|
||||
.kartaview-wrapper .photo-attribution a:active {
|
||||
color: #20c4ff;
|
||||
}
|
||||
@media (hover: hover) {
|
||||
.osc-wrapper .photo-attribution a:hover {
|
||||
.kartaview-wrapper .photo-attribution a:hover {
|
||||
color: #20c4ff;
|
||||
}
|
||||
}
|
||||
|
||||
.osc-image-wrap {
|
||||
.kartaview-image-wrap {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
transform-origin:0 0;
|
||||
|
||||
+6
-6
@@ -1405,11 +1405,11 @@ en:
|
||||
signs:
|
||||
tooltip: "Traffic signs from Mapillary"
|
||||
view_on_mapillary: "View this image on Mapillary"
|
||||
openstreetcam_images:
|
||||
tooltip: "Street-level photos from OpenStreetCam"
|
||||
openstreetcam:
|
||||
title: OpenStreetCam
|
||||
view_on_openstreetcam: "View this image on OpenStreetCam"
|
||||
kartaview_images:
|
||||
tooltip: "Street-level photos from KartaView"
|
||||
kartaview:
|
||||
title: KartaView
|
||||
view_on_kartaview: "View this image on KartaView"
|
||||
note:
|
||||
note: Note
|
||||
title: Edit note
|
||||
@@ -1609,7 +1609,7 @@ en:
|
||||
offset_change: "Press the small triangle buttons to adjust the imagery offset in small steps, or hold the {leftclick} left mouse button and drag within the gray square to slide the imagery into alignment."
|
||||
streetlevel:
|
||||
title: Street Level Photos
|
||||
intro: "Street level photos are useful for mapping traffic signs, businesses, and other details that you can't see from satellite and aerial images. The iD editor supports street level photos from [Bing Streetside](https://www.microsoft.com/en-us/maps/streetside), [Mapillary](https://www.mapillary.com), and [OpenStreetCam](https://www.openstreetcam.org)."
|
||||
intro: "Street level photos are useful for mapping traffic signs, businesses, and other details that you can't see from satellite and aerial images. The iD editor supports street level photos from [Bing Streetside](https://www.microsoft.com/en-us/maps/streetside), [Mapillary](https://www.mapillary.com), and [KartaView](https://www.kartaview.org)."
|
||||
using_h: "Using Street Level Photos"
|
||||
using: "To use street level photos for mapping, open the {data_icon} **{map_data}** panel on the side of the map to enable or disable the available photo overlays."
|
||||
photos: "When enabled, the photo overlay displays a line along the sequence of photos. At higher zoom levels, a circle marks at each photo location, and at even higher zoom levels, a cone indicates the direction the camera was facing when the photo was taken."
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
@@ -256,7 +256,7 @@ export function rendererBackground(context) {
|
||||
mapillary: 'Mapillary Images',
|
||||
'mapillary-map-features': 'Mapillary Map Features',
|
||||
'mapillary-signs': 'Mapillary Signs',
|
||||
openstreetcam: 'OpenStreetCam Images'
|
||||
kartaview: 'KartaView Images'
|
||||
};
|
||||
|
||||
for (let layerID in photoOverlayLayers) {
|
||||
|
||||
@@ -7,7 +7,7 @@ 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 _layerIDs = ['streetside', 'mapillary', 'mapillary-map-features', 'mapillary-signs', 'kartaview'];
|
||||
var _allPhotoTypes = ['flat', 'panoramic'];
|
||||
var _shownPhotoTypes = _allPhotoTypes.slice(); // shallow copy
|
||||
var _dateFilters = ['fromDate', 'toDate'];
|
||||
@@ -119,16 +119,16 @@ export function rendererPhotos(context) {
|
||||
}
|
||||
|
||||
photos.shouldFilterByDate = function() {
|
||||
return showsLayer('mapillary') || showsLayer('openstreetcam') || showsLayer('streetside');
|
||||
return showsLayer('mapillary') || showsLayer('kartaview') || showsLayer('streetside');
|
||||
};
|
||||
|
||||
photos.shouldFilterByPhotoType = function() {
|
||||
return showsLayer('mapillary') ||
|
||||
(showsLayer('streetside') && showsLayer('openstreetcam'));
|
||||
(showsLayer('streetside') && showsLayer('kartaview'));
|
||||
};
|
||||
|
||||
photos.shouldFilterByUsername = function() {
|
||||
return !showsLayer('mapillary') && showsLayer('openstreetcam') && !showsLayer('streetside');
|
||||
return !showsLayer('mapillary') && showsLayer('kartaview') && !showsLayer('streetside');
|
||||
};
|
||||
|
||||
photos.showsPhotoType = function(val) {
|
||||
@@ -180,22 +180,22 @@ export function rendererPhotos(context) {
|
||||
this.setUsernameFilter(hash.photo_username, false);
|
||||
}
|
||||
if (hash.photo_overlay) {
|
||||
// support enabling photo layers by default via a URL parameter, e.g. `photo_overlay=openstreetcam;mapillary;streetside`
|
||||
|
||||
// support enabling photo layers by default via a URL parameter, e.g. `photo_overlay=kartaview;mapillary;streetside`
|
||||
var hashOverlayIDs = hash.photo_overlay.replace(/;/g, ',').split(',');
|
||||
hashOverlayIDs.forEach(function(id) {
|
||||
if (id === 'openstreetcam') id = 'kartaview'; // legacy alias
|
||||
var layer = _layerIDs.indexOf(id) !== -1 && context.layers().layer(id);
|
||||
if (layer && !layer.enabled()) layer.enabled(true);
|
||||
});
|
||||
}
|
||||
if (hash.photo) {
|
||||
// support opening a photo via a URL parameter, e.g. `photo=mapillary-fztgSDtLpa08ohPZFZjeRQ`
|
||||
|
||||
var photoIds = hash.photo.replace(/;/g, ',').split(',');
|
||||
var photoId = photoIds.length && photoIds[0].trim();
|
||||
var results = /(.*)\/(.*)/g.exec(photoId);
|
||||
if (results && results.length >= 3) {
|
||||
var serviceId = results[1];
|
||||
if (serviceId === 'openstreetcam') serviceId = 'kartaview'; // legacy alias
|
||||
var photoKey = results[2];
|
||||
var service = services[serviceId];
|
||||
if (service && service.ensureViewerLoaded) {
|
||||
|
||||
@@ -5,7 +5,7 @@ import serviceMapillary from './mapillary';
|
||||
import serviceMapRules from './maprules';
|
||||
import serviceNominatim from './nominatim';
|
||||
import serviceNsi from './nsi';
|
||||
import serviceOpenstreetcam from './openstreetcam';
|
||||
import serviceKartaview from './kartaview';
|
||||
import serviceOsm from './osm';
|
||||
import serviceOsmWikibase from './osm_wikibase';
|
||||
import serviceStreetside from './streetside';
|
||||
@@ -22,7 +22,7 @@ export let services = {
|
||||
osmose: serviceOsmose,
|
||||
mapillary: serviceMapillary,
|
||||
nsi: serviceNsi,
|
||||
openstreetcam: serviceOpenstreetcam,
|
||||
kartaview: serviceKartaview,
|
||||
osm: serviceOsm,
|
||||
osmWikibase: serviceOsmWikibase,
|
||||
maprules: serviceMapRules,
|
||||
@@ -41,7 +41,7 @@ export {
|
||||
serviceMapRules,
|
||||
serviceNominatim,
|
||||
serviceNsi,
|
||||
serviceOpenstreetcam,
|
||||
serviceKartaview,
|
||||
serviceOsm,
|
||||
serviceOsmWikibase,
|
||||
serviceStreetside,
|
||||
|
||||
@@ -9,7 +9,7 @@ import { geoExtent, geoScaleToZoom } from '../geo';
|
||||
import { utilArrayUnion, utilQsString, utilRebind, utilSetTransform, utilStringQs, utilTiler } from '../util';
|
||||
|
||||
|
||||
var apibase = 'https://openstreetcam.org';
|
||||
var apibase = 'https://kartaview.org';
|
||||
var maxResults = 1000;
|
||||
var tileZoom = 14;
|
||||
var tiler = utilTiler().zoomExtent([tileZoom, tileZoom]).skipNullIsland(true);
|
||||
@@ -250,15 +250,15 @@ export default {
|
||||
|
||||
if (_loadViewerPromise) return _loadViewerPromise;
|
||||
|
||||
// add osc-wrapper
|
||||
var wrap = context.container().select('.photoviewer').selectAll('.osc-wrapper')
|
||||
// add kartaview-wrapper
|
||||
var wrap = context.container().select('.photoviewer').selectAll('.kartaview-wrapper')
|
||||
.data([0]);
|
||||
|
||||
var that = this;
|
||||
|
||||
var wrapEnter = wrap.enter()
|
||||
.append('div')
|
||||
.attr('class', 'photo-wrapper osc-wrapper')
|
||||
.attr('class', 'photo-wrapper kartaview-wrapper')
|
||||
.classed('hide', true)
|
||||
.call(imgZoom.on('zoom', zoomPan))
|
||||
.on('dblclick.zoom', null);
|
||||
@@ -295,11 +295,11 @@ export default {
|
||||
|
||||
wrapEnter
|
||||
.append('div')
|
||||
.attr('class', 'osc-image-wrap');
|
||||
.attr('class', 'kartaview-image-wrap');
|
||||
|
||||
|
||||
// Register viewer resize handler
|
||||
context.ui().photoviewer.on('resize.openstreetcam', function(dimensions) {
|
||||
context.ui().photoviewer.on('resize.kartaview', function(dimensions) {
|
||||
imgZoom = d3_zoom()
|
||||
.extent([[0, 0], dimensions])
|
||||
.translateExtent([[0, 0], dimensions])
|
||||
@@ -310,7 +310,7 @@ export default {
|
||||
|
||||
function zoomPan(d3_event) {
|
||||
var t = d3_event.transform;
|
||||
context.container().select('.photoviewer .osc-image-wrap')
|
||||
context.container().select('.photoviewer .kartaview-image-wrap')
|
||||
.call(utilSetTransform, t.x, t.y, t.k);
|
||||
}
|
||||
|
||||
@@ -329,14 +329,14 @@ export default {
|
||||
if (r < -180) r += 360;
|
||||
sequence.rotation = r;
|
||||
|
||||
var wrap = context.container().select('.photoviewer .osc-wrapper');
|
||||
var wrap = context.container().select('.photoviewer .kartaview-wrapper');
|
||||
|
||||
wrap
|
||||
.transition()
|
||||
.duration(100)
|
||||
.call(imgZoom.transform, d3_zoomIdentity);
|
||||
|
||||
wrap.selectAll('.osc-image')
|
||||
wrap.selectAll('.kartaview-image')
|
||||
.transition()
|
||||
.duration(100)
|
||||
.style('transform', 'rotate(' + r + 'deg)');
|
||||
@@ -372,15 +372,15 @@ export default {
|
||||
var viewer = context.container().select('.photoviewer')
|
||||
.classed('hide', false);
|
||||
|
||||
var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size();
|
||||
var isHidden = viewer.selectAll('.photo-wrapper.kartaview-wrapper.hide').size();
|
||||
|
||||
if (isHidden) {
|
||||
viewer
|
||||
.selectAll('.photo-wrapper:not(.osc-wrapper)')
|
||||
.selectAll('.photo-wrapper:not(.kartaview-wrapper)')
|
||||
.classed('hide', true);
|
||||
|
||||
viewer
|
||||
.selectAll('.photo-wrapper.osc-wrapper')
|
||||
.selectAll('.photo-wrapper.kartaview-wrapper')
|
||||
.classed('hide', false);
|
||||
}
|
||||
|
||||
@@ -426,8 +426,8 @@ export default {
|
||||
|
||||
if (!d) return this;
|
||||
|
||||
var wrap = context.container().select('.photoviewer .osc-wrapper');
|
||||
var imageWrap = wrap.selectAll('.osc-image-wrap');
|
||||
var wrap = context.container().select('.photoviewer .kartaview-wrapper');
|
||||
var imageWrap = wrap.selectAll('.kartaview-image-wrap');
|
||||
var attribution = wrap.selectAll('.photo-attribution').html('');
|
||||
|
||||
wrap
|
||||
@@ -436,7 +436,7 @@ export default {
|
||||
.call(imgZoom.transform, d3_zoomIdentity);
|
||||
|
||||
imageWrap
|
||||
.selectAll('.osc-image')
|
||||
.selectAll('.kartaview-image')
|
||||
.remove();
|
||||
|
||||
if (d) {
|
||||
@@ -445,7 +445,7 @@ export default {
|
||||
|
||||
imageWrap
|
||||
.append('img')
|
||||
.attr('class', 'osc-image')
|
||||
.attr('class', 'kartaview-image')
|
||||
.attr('src', apibase + '/' + d.imagePath)
|
||||
.style('transform', 'rotate(' + r + 'deg)');
|
||||
|
||||
@@ -454,7 +454,7 @@ export default {
|
||||
.append('a')
|
||||
.attr('class', 'captured_by')
|
||||
.attr('target', '_blank')
|
||||
.attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by))
|
||||
.attr('href', 'https://kartaview.org/user/' + encodeURIComponent(d.captured_by))
|
||||
.html('@' + d.captured_by);
|
||||
|
||||
attribution
|
||||
@@ -477,8 +477,8 @@ export default {
|
||||
.append('a')
|
||||
.attr('class', 'image-link')
|
||||
.attr('target', '_blank')
|
||||
.attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index)
|
||||
.html('openstreetcam.org');
|
||||
.attr('href', 'https://kartaview.org/details/' + d.sequence_id + '/' + d.sequence_index)
|
||||
.html('kartaview.org');
|
||||
}
|
||||
|
||||
return this;
|
||||
@@ -534,17 +534,17 @@ export default {
|
||||
// highlight sibling viewfields on either the selected or the hovered sequences
|
||||
var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
|
||||
|
||||
context.container().selectAll('.layer-openstreetcam .viewfield-group')
|
||||
context.container().selectAll('.layer-kartaview .viewfield-group')
|
||||
.classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
|
||||
.classed('hovered', function(d) { return d.key === hoveredImageKey; })
|
||||
.classed('currentView', function(d) { return d.key === selectedImageKey; });
|
||||
|
||||
context.container().selectAll('.layer-openstreetcam .sequence')
|
||||
context.container().selectAll('.layer-kartaview .sequence')
|
||||
.classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
|
||||
.classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
|
||||
|
||||
// update viewfields if needed
|
||||
context.container().selectAll('.layer-openstreetcam .viewfield-group .viewfield')
|
||||
context.container().selectAll('.layer-kartaview .viewfield-group .viewfield')
|
||||
.attr('d', viewfieldPath);
|
||||
|
||||
function viewfieldPath() {
|
||||
@@ -564,7 +564,7 @@ export default {
|
||||
if (!window.mocha) {
|
||||
var hash = utilStringQs(window.location.hash);
|
||||
if (imageKey) {
|
||||
hash.photo = 'openstreetcam/' + imageKey;
|
||||
hash.photo = 'kartaview/' + imageKey;
|
||||
} else {
|
||||
delete hash.photo;
|
||||
}
|
||||
@@ -13,7 +13,7 @@ export { svgMapillarySigns } from './mapillary_signs.js';
|
||||
export { svgMidpoints } from './midpoints.js';
|
||||
export { svgNotes } from './notes.js';
|
||||
export { svgMarkerSegments } from './helpers.js';
|
||||
export { svgOpenstreetcamImages } from './openstreetcam_images.js';
|
||||
export { svgKartaviewImages } from './kartaview_images.js';
|
||||
export { svgOsm } from './osm.js';
|
||||
export { svgPassiveVertex } from './helpers.js';
|
||||
export { svgPath } from './helpers.js';
|
||||
|
||||
@@ -4,31 +4,31 @@ import { svgPath, svgPointTransform } from './helpers';
|
||||
import { services } from '../services';
|
||||
|
||||
|
||||
export function svgOpenstreetcamImages(projection, context, dispatch) {
|
||||
export function svgKartaviewImages(projection, context, dispatch) {
|
||||
var throttledRedraw = _throttle(function () { dispatch.call('change'); }, 1000);
|
||||
var minZoom = 12;
|
||||
var minMarkerZoom = 16;
|
||||
var minViewfieldZoom = 18;
|
||||
var layer = d3_select(null);
|
||||
var _openstreetcam;
|
||||
var _kartaview;
|
||||
|
||||
|
||||
function init() {
|
||||
if (svgOpenstreetcamImages.initialized) return; // run once
|
||||
svgOpenstreetcamImages.enabled = false;
|
||||
svgOpenstreetcamImages.initialized = true;
|
||||
if (svgKartaviewImages.initialized) return; // run once
|
||||
svgKartaviewImages.enabled = false;
|
||||
svgKartaviewImages.initialized = true;
|
||||
}
|
||||
|
||||
|
||||
function getService() {
|
||||
if (services.openstreetcam && !_openstreetcam) {
|
||||
_openstreetcam = services.openstreetcam;
|
||||
_openstreetcam.event.on('loadedImages', throttledRedraw);
|
||||
} else if (!services.openstreetcam && _openstreetcam) {
|
||||
_openstreetcam = null;
|
||||
if (services.kartaview && !_kartaview) {
|
||||
_kartaview = services.kartaview;
|
||||
_kartaview.event.on('loadedImages', throttledRedraw);
|
||||
} else if (!services.kartaview && _kartaview) {
|
||||
_kartaview = null;
|
||||
}
|
||||
|
||||
return _openstreetcam;
|
||||
return _kartaview;
|
||||
}
|
||||
|
||||
|
||||
@@ -245,10 +245,10 @@ export function svgOpenstreetcamImages(projection, context, dispatch) {
|
||||
|
||||
|
||||
function drawImages(selection) {
|
||||
var enabled = svgOpenstreetcamImages.enabled,
|
||||
var enabled = svgKartaviewImages.enabled,
|
||||
service = getService();
|
||||
|
||||
layer = selection.selectAll('.layer-openstreetcam')
|
||||
layer = selection.selectAll('.layer-kartaview')
|
||||
.data(service ? [0] : []);
|
||||
|
||||
layer.exit()
|
||||
@@ -256,7 +256,7 @@ export function svgOpenstreetcamImages(projection, context, dispatch) {
|
||||
|
||||
var layerEnter = layer.enter()
|
||||
.append('g')
|
||||
.attr('class', 'layer-openstreetcam')
|
||||
.attr('class', 'layer-kartaview')
|
||||
.style('display', enabled ? 'block' : 'none');
|
||||
|
||||
layerEnter
|
||||
@@ -283,14 +283,14 @@ export function svgOpenstreetcamImages(projection, context, dispatch) {
|
||||
|
||||
|
||||
drawImages.enabled = function(_) {
|
||||
if (!arguments.length) return svgOpenstreetcamImages.enabled;
|
||||
svgOpenstreetcamImages.enabled = _;
|
||||
if (svgOpenstreetcamImages.enabled) {
|
||||
if (!arguments.length) return svgKartaviewImages.enabled;
|
||||
svgKartaviewImages.enabled = _;
|
||||
if (svgKartaviewImages.enabled) {
|
||||
showLayer();
|
||||
context.photos().on('change.openstreetcam_images', update);
|
||||
context.photos().on('change.kartaview_images', update);
|
||||
} else {
|
||||
hideLayer();
|
||||
context.photos().on('change.openstreetcam_images', null);
|
||||
context.photos().on('change.kartaview_images', null);
|
||||
}
|
||||
dispatch.call('change');
|
||||
return this;
|
||||
@@ -12,7 +12,7 @@ import { svgMapillaryImages } from './mapillary_images';
|
||||
import { svgMapillaryPosition } from './mapillary_position';
|
||||
import { svgMapillarySigns } from './mapillary_signs';
|
||||
import { svgMapillaryMapFeatures } from './mapillary_map_features';
|
||||
import { svgOpenstreetcamImages } from './openstreetcam_images';
|
||||
import { svgKartaviewImages } from './kartaview_images';
|
||||
import { svgOsm } from './osm';
|
||||
import { svgNotes } from './notes';
|
||||
import { svgTouch } from './touch';
|
||||
@@ -35,7 +35,7 @@ export function svgLayers(projection, context) {
|
||||
{ id: 'mapillary-position', layer: svgMapillaryPosition(projection, context, dispatch) },
|
||||
{ id: 'mapillary-map-features', layer: svgMapillaryMapFeatures(projection, context, dispatch) },
|
||||
{ id: 'mapillary-signs', layer: svgMapillarySigns(projection, context, dispatch) },
|
||||
{ id: 'openstreetcam', layer: svgOpenstreetcamImages(projection, context, dispatch) },
|
||||
{ id: 'kartaview', layer: svgKartaviewImages(projection, context, dispatch) },
|
||||
{ id: 'debug', layer: svgDebug(projection, context, dispatch) },
|
||||
{ id: 'geolocate', layer: svgGeolocate(projection, context, dispatch) },
|
||||
{ id: 'touch', layer: svgTouch(projection, context, dispatch) }
|
||||
|
||||
@@ -21,7 +21,7 @@ export function uiPhotoviewer(context) {
|
||||
.on('click', function () {
|
||||
if (services.streetside) { services.streetside.hideViewer(context); }
|
||||
if (services.mapillary) { services.mapillary.hideViewer(context); }
|
||||
if (services.openstreetcam) { services.openstreetcam.hideViewer(context); }
|
||||
if (services.kartaview) { services.kartaview.hideViewer(context); }
|
||||
})
|
||||
.append('div')
|
||||
.call(svgIcon('#iD-icon-close'));
|
||||
|
||||
@@ -73,7 +73,7 @@ export function uiSectionPhotoOverlays(context) {
|
||||
var titleID;
|
||||
if (d.id === 'mapillary-signs') titleID = 'mapillary.signs.tooltip';
|
||||
else if (d.id === 'mapillary') titleID = 'mapillary_images.tooltip';
|
||||
else if (d.id === 'openstreetcam') titleID = 'openstreetcam_images.tooltip';
|
||||
else if (d.id === 'kartaview') titleID = 'kartaview_images.tooltip';
|
||||
else titleID = d.id.replace(/-/g, '_') + '.tooltip';
|
||||
d3_select(this)
|
||||
.call(uiTooltip()
|
||||
|
||||
+2
-2
@@ -121,7 +121,7 @@
|
||||
'spec/services/mapillary.js',
|
||||
'spec/services/maprules.js',
|
||||
'spec/services/nominatim.js',
|
||||
'spec/services/openstreetcam.js',
|
||||
'spec/services/kartaview.js',
|
||||
'spec/services/osm.js',
|
||||
'spec/services/osm_wikibase.js',
|
||||
'spec/services/streetside.js',
|
||||
@@ -222,4 +222,4 @@
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
describe('iD.serviceOpenstreetcam', function() {
|
||||
describe('iD.serviceKartaview', function() {
|
||||
var dimensions = [64, 64];
|
||||
var context, server, openstreetcam;
|
||||
var context, server, kartaview;
|
||||
|
||||
before(function() {
|
||||
iD.services.openstreetcam = iD.serviceOpenstreetcam;
|
||||
iD.services.kartaview = iD.serviceKartaview;
|
||||
});
|
||||
|
||||
after(function() {
|
||||
delete iD.services.openstreetcam;
|
||||
delete iD.services.kartaview;
|
||||
});
|
||||
|
||||
beforeEach(function() {
|
||||
@@ -18,8 +18,8 @@ describe('iD.serviceOpenstreetcam', function() {
|
||||
.clipExtent([[0,0], dimensions]);
|
||||
|
||||
server = window.fakeFetch().create();
|
||||
openstreetcam = iD.services.openstreetcam;
|
||||
openstreetcam.reset();
|
||||
kartaview = iD.services.kartaview;
|
||||
kartaview.reset();
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
@@ -29,35 +29,35 @@ describe('iD.serviceOpenstreetcam', function() {
|
||||
|
||||
describe('#init', function() {
|
||||
it('Initializes cache one time', function() {
|
||||
var cache = openstreetcam.cache();
|
||||
var cache = kartaview.cache();
|
||||
expect(cache).to.have.property('images');
|
||||
expect(cache).to.have.property('sequences');
|
||||
|
||||
openstreetcam.init();
|
||||
var cache2 = openstreetcam.cache();
|
||||
kartaview.init();
|
||||
var cache2 = kartaview.cache();
|
||||
expect(cache).to.equal(cache2);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#reset', function() {
|
||||
it('resets cache and image', function() {
|
||||
openstreetcam.cache().foo = 'bar';
|
||||
openstreetcam.selectImage(context, {key: 'baz'});
|
||||
kartaview.cache().foo = 'bar';
|
||||
kartaview.selectImage(context, {key: 'baz'});
|
||||
|
||||
openstreetcam.reset();
|
||||
expect(openstreetcam.cache()).to.not.have.property('foo');
|
||||
expect(openstreetcam.getSelectedImage()).to.be.null;
|
||||
kartaview.reset();
|
||||
expect(kartaview.cache()).to.not.have.property('foo');
|
||||
expect(kartaview.getSelectedImage()).to.be.null;
|
||||
});
|
||||
});
|
||||
|
||||
describe('#loadImages', function() {
|
||||
it('fires loadedImages when images are loaded', function(done) {
|
||||
openstreetcam.on('loadedImages', function() {
|
||||
kartaview.on('loadedImages', function() {
|
||||
expect(server.requests().length).to.eql(1); // 1 nearby-photos
|
||||
done();
|
||||
});
|
||||
|
||||
openstreetcam.loadImages(context.projection);
|
||||
kartaview.loadImages(context.projection);
|
||||
|
||||
var data = {
|
||||
status: { apiCode: '600', httpCode: 200, httpMessage: 'Success' },
|
||||
@@ -110,8 +110,8 @@ describe('iD.serviceOpenstreetcam', function() {
|
||||
var spy = sinon.spy();
|
||||
context.projection.translate([0,0]);
|
||||
|
||||
openstreetcam.on('loadedImages', spy);
|
||||
openstreetcam.loadImages(context.projection);
|
||||
kartaview.on('loadedImages', spy);
|
||||
kartaview.loadImages(context.projection);
|
||||
|
||||
var data = {
|
||||
status: { apiCode: '600', httpCode: 200, httpMessage: 'Success' },
|
||||
@@ -167,12 +167,12 @@ describe('iD.serviceOpenstreetcam', function() {
|
||||
});
|
||||
|
||||
it('loads multiple pages of image results', function(done) {
|
||||
openstreetcam.on('loadedImages', function() {
|
||||
kartaview.on('loadedImages', function() {
|
||||
expect(server.requests().length).to.eql(2); // 2 nearby-photos
|
||||
done();
|
||||
});
|
||||
|
||||
openstreetcam.loadImages(context.projection);
|
||||
kartaview.loadImages(context.projection);
|
||||
|
||||
var features = [];
|
||||
for (var i = 0; i < 1000; i++) {
|
||||
@@ -212,8 +212,8 @@ describe('iD.serviceOpenstreetcam', function() {
|
||||
{ minX: 10, minY: 1, maxX: 10, maxY: 1, data: { key: '2', loc: [10,1], ca: 90, sequence_id: '100', sequence_index: 2 } }
|
||||
];
|
||||
|
||||
openstreetcam.cache().images.rtree.load(features);
|
||||
var res = openstreetcam.images(context.projection);
|
||||
kartaview.cache().images.rtree.load(features);
|
||||
var res = kartaview.images(context.projection);
|
||||
|
||||
expect(res).to.deep.eql([
|
||||
{ key: '0', loc: [10,0], ca: 90, sequence_id: '100', sequence_index: 0 },
|
||||
@@ -231,8 +231,8 @@ describe('iD.serviceOpenstreetcam', function() {
|
||||
{ minX: 10, minY: 0, maxX: 10, maxY: 0, data: { key: '5', loc: [10,0], ca: 90, sequence_id: '100', sequence_index: 5 } }
|
||||
];
|
||||
|
||||
openstreetcam.cache().images.rtree.load(features);
|
||||
var res = openstreetcam.images(context.projection);
|
||||
kartaview.cache().images.rtree.load(features);
|
||||
var res = kartaview.images(context.projection);
|
||||
expect(res).to.have.length.of.at.most(5);
|
||||
});
|
||||
});
|
||||
@@ -246,10 +246,10 @@ describe('iD.serviceOpenstreetcam', function() {
|
||||
{ minX: 10, minY: 1, maxX: 10, maxY: 1, data: { key: '2', loc: [10,1], ca: 90, sequence_id: '100', sequence_index: 2 } }
|
||||
];
|
||||
|
||||
openstreetcam.cache().images.rtree.load(features);
|
||||
openstreetcam.cache().sequences['100'] = { rotation: 0, images: [ features[0].data, features[1].data, features[2].data ] };
|
||||
kartaview.cache().images.rtree.load(features);
|
||||
kartaview.cache().sequences['100'] = { rotation: 0, images: [ features[0].data, features[1].data, features[2].data ] };
|
||||
|
||||
var res = openstreetcam.sequences(context.projection);
|
||||
var res = kartaview.sequences(context.projection);
|
||||
expect(res).to.deep.eql([{
|
||||
type: 'LineString',
|
||||
coordinates: [[10,0], [10,0], [10,1]],
|
||||
@@ -265,9 +265,9 @@ describe('iD.serviceOpenstreetcam', function() {
|
||||
describe('#selectedImage', function() {
|
||||
it('sets and gets selected image', function() {
|
||||
var d = { key: 'foo' };
|
||||
openstreetcam.cache().images = { forImageKey: { foo: d }};
|
||||
openstreetcam.selectImage(context, 'foo');
|
||||
expect(openstreetcam.getSelectedImage()).to.eql(d);
|
||||
kartaview.cache().images = { forImageKey: { foo: d }};
|
||||
kartaview.selectImage(context, 'foo');
|
||||
expect(kartaview.getSelectedImage()).to.eql(d);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -38,7 +38,7 @@ describe('iD.svgLayers', function () {
|
||||
expect(d3.select(nodes[8]).classed('mapillary-position')).to.be.true;
|
||||
expect(d3.select(nodes[9]).classed('mapillary-map-features')).to.be.true;
|
||||
expect(d3.select(nodes[10]).classed('mapillary-signs')).to.be.true;
|
||||
expect(d3.select(nodes[11]).classed('openstreetcam')).to.be.true;
|
||||
expect(d3.select(nodes[11]).classed('kartaview')).to.be.true;
|
||||
expect(d3.select(nodes[12]).classed('debug')).to.be.true;
|
||||
expect(d3.select(nodes[13]).classed('geolocate')).to.be.true;
|
||||
expect(d3.select(nodes[14]).classed('touch')).to.be.true;
|
||||
|
||||
Reference in New Issue
Block a user