Merge branch 'master' into baby-steps

This commit is contained in:
Bryan Housel
2016-06-13 12:31:09 -04:00
51 changed files with 1050 additions and 1586 deletions
+6
View File
@@ -1,5 +1,11 @@
:warning: = Breaking change, may affect downstream projects or sites that embed iD.
## 1.9.6
##### Jun 7, 2016
* Embed interactive Mapillary JS viewer instead of static image (#3128, thanks @kepta, @peterneubauer)
* Add "grill" as search term for `amenity=bbq` preset (#3139, thanks @manfredbrandl)
* When setting Wikipedia value, also set corresponding Wikidata tag (#2732, thanks @1ec5)
## 1.9.5
##### May 25, 2016
* Clean translated combo value when comparing to display value (#3129)
+2 -1
View File
@@ -133,6 +133,7 @@ dist/iD.js: \
js/id/renderer/tile_layer.js \
js/id/svg.js \
js/id/svg/areas.js \
js/id/svg/debug.js \
js/id/svg/defs.js \
js/id/svg/gpx.js \
js/id/svg/icon.js \
@@ -282,7 +283,7 @@ D3_FILES = \
d3:
node_modules/.bin/smash $(D3_FILES) > js/lib/d3.v3.js
@echo 'd3 rebuilt. Please reapply 7e2485d, 4da529f, and 223974d'
@echo 'd3 rebuilt. Please reapply 7e2485d, 4da529f, 223974d and 71a3d3e'
ACTIONS = $(shell ./node_modules/.bin/browserify --list modules/actions/index.js)
dist/modules/actions.js: $(ACTIONS)
+44 -7
View File
@@ -2158,7 +2158,7 @@ div.full-screen > button:hover {
float:right;
margin-left: 20px;
margin-bottom: 20px;
padding-left: 5px
padding-left: 5px;
}
.help-wrap .toc li a,
@@ -2312,7 +2312,6 @@ img.tile-removing {
/* Map-In-Map
------------------------------------------------------- */
.map-in-map {
position: absolute;
overflow: hidden;
@@ -2338,8 +2337,8 @@ img.tile-removing {
user-select: none;
}
.map-in-map-svg,
.map-in-map-gpx {
.map-in-map-viewport,
.map-in-map-data {
top: 0;
left: 0;
overflow: hidden;
@@ -2347,16 +2346,15 @@ img.tile-removing {
width: 100%;
}
.map-in-map-svg {
.map-in-map-viewport {
position: absolute;
}
.map-in-map-gpx {
.map-in-map-data {
position: relative;
z-index: 10;
}
.bbox,
.map-in-map-bbox {
fill: none;
stroke: rgba(255, 255, 0, 0.75);
@@ -2368,6 +2366,45 @@ img.tile-removing {
stroke-width: 5;
}
/* Debug
------------------------------------------------------- */
.debug {
stroke: currentColor;
fill: none;
stroke-width: 2;
}
.map-in-map-data .debug {
stroke-width: 1;
}
.red { color: rgba(255, 0, 0, 0.75); }
.green { color: rgba(0, 255, 0, 0.75); }
.blue { color: rgba(0, 0, 255, 0.75); }
.yellow { color: rgba(255, 255, 0, 0.75); }
.cyan { color: rgba(0, 255, 255, 0.75); }
.magenta { color: rgba(255, 0, 255, 0.75); }
.orange { color: rgba(255, 153, 0, 0.75); }
.pink { color: rgba(255, 0, 153, 0.75); }
.purple { color: rgba(153, 0, 255, 0.75); }
.debug-legend {
position: absolute;
top: 70px;
right: 80px;
padding: 5px;
border-radius: 4px;
pointer-events: none;
}
.debug-legend-item {
padding-right: 5px;
}
.debug-legend-item:before {
content: "\25A0";
padding: 0 5px;
}
/* Info Box
------------------------------------------------------- */
.infobox {
+540 -341
View File
File diff suppressed because it is too large Load Diff
+5 -1063
View File
File diff suppressed because it is too large Load Diff
+8 -5
View File
@@ -1,15 +1,16 @@
/* Downloads the latest translations from Transifex */
var request = require('request'),
var request = require('request').defaults({maxSockets: 1}),
yaml = require('js-yaml'),
fs = require('fs'),
_ = require('../js/lib/lodash.js');
var resources = ['core', 'presets'];
var outdir = './dist/locales/';
var api = 'http://www.transifex.com/api/2/';
var api = 'https://www.transifex.com/api/2/';
var project = api + 'project/id-editor/';
/*
* Transifex oddly doesn't allow anonymous downloading
*
@@ -67,18 +68,20 @@ function getLanguage(resource) {
code = code.replace(/-/g, '_');
var url = resource + 'translation/' + code;
if (code === 'vi') url += '?mode=reviewed';
request.get(url, { auth : auth },
function(err, resp, body) {
request.get(url, { auth : auth }, function(err, resp, body) {
if (err) return callback(err);
console.log(resp.statusCode + ': ' + url);
callback(null, yaml.load(JSON.parse(body).content)[code]);
});
};
}
function getLanguages(resource, callback) {
request.get(resource + '?details', { auth: auth },
var url = resource + '?details';
request.get(url, { auth: auth },
function(err, resp, body) {
if (err) return callback(err);
console.log(resp.statusCode + ': ' + url);
callback(null, JSON.parse(body).available_languages.map(function(d) {
return d.code.replace(/_/g, '-');
}).filter(function(d) {
-1
View File
@@ -420,7 +420,6 @@
"title": "صورة الخلفية من خدمة (Mapillary)"
},
"mapillary_signs": {
"tooltip": "معلومات اشارات المرور من خدمة Mapillary",
"title": "صورة الخلفية لاشارات المرور من خدمة (Mapillary)"
},
"mapillary": {
-3
View File
@@ -475,9 +475,6 @@
"mapillary_images": {
"tooltip": "Снимки за ниво на улицата от Mapillary"
},
"mapillary_signs": {
"tooltip": "Пътни знаци от Mapillary"
},
"mapillary": {
"view_on_mapillary": "Вижте тази снимка на Mapillary"
},
+11 -1
View File
@@ -330,6 +330,7 @@
"percent_brightness": "{opacity}% brillantor",
"none": "Cap",
"best_imagery": "Font d'imatgeria millor coneguda per a aquesta ubicació",
"switch": "Senyals de trànsit ",
"custom": "Personalitzar",
"custom_button": "Editar el fons personalitzat",
"custom_prompt": "Introduïu una plantilla d'URL de casella. Els paràmetres vàlids són {z}, {x}, {y} per a l'esquema Z/X/Y i {u} per a l'esquema quadtile.",
@@ -511,7 +512,7 @@
"title": "Superposició de fotos (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Senyals de Trànsit de Mapillary",
"tooltip": "Senyals de trànsit de Mapillary (cal activar la capa de fotografies).",
"title": "Superposició de Senyals de Trànsit (Mapillary)"
},
"mapillary": {
@@ -612,6 +613,9 @@
},
"presets": {
"categories": {
"category-barrier": {
"name": "Característiques de Barrera"
},
"category-building": {
"name": "Característiques d'Edificació"
},
@@ -1935,6 +1939,9 @@
"name": "Barrera per a ciclistes",
"terms": "Barrera per a ciclistes, Ciclisme, Bicicleta, Ruta cicloturista, Valla, Tanca, Tancament, Tanca per a bicicletes"
},
"barrier/ditch": {
"name": "Trinxera"
},
"barrier/entrance": {
"name": "Entrada",
"terms": "Entrada, Porta, Portes, Portalada, Accés"
@@ -3597,6 +3604,9 @@
"type/route/hiking": {
"name": "Ruta senderista"
},
"type/route/horse": {
"name": "Ruta de conducció"
},
"type/route/pipeline": {
"name": "Traçat d'una canonada"
},
+1 -1
View File
@@ -512,7 +512,7 @@
"title": "Vrstva fotografií (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Dopravní značky z Mapillary",
"tooltip": "Dopravní značky z Mapillary (nutné povolit Vrstvu fotografií)",
"title": "Vrstva dopravních značek (Mapillary)"
},
"mapillary": {
+8 -1
View File
@@ -512,7 +512,7 @@
"title": "Billedelag (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Trafikskilte fra Mapillary",
"tooltip": "Trafikskilte fra Mapillary (fotolag skal være slået til)",
"title": "Trafikskiltelag (Mapillary)"
},
"mapillary": {
@@ -613,6 +613,9 @@
},
"presets": {
"categories": {
"category-barrier": {
"name": "Barrierer objekter"
},
"category-building": {
"name": "Bygningsegenskaber"
},
@@ -1998,6 +2001,10 @@
"name": "Cykelbarriere",
"terms": "Cykelbarriere"
},
"barrier/ditch": {
"name": "Grøft",
"terms": "Grøft"
},
"barrier/entrance": {
"name": "Indgang",
"terms": "Indgang, Indgangsparti"
+3 -3
View File
@@ -512,7 +512,7 @@
"title": "Photo-Überlagerung (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Verkehrszeichen von Mapillary",
"tooltip": "Verkehrsschilder von Mapillary (bei aktivierter Fotoebene)",
"title": "Verkehrszeichen-Überlagerung (Mapillary)"
},
"mapillary": {
@@ -1742,8 +1742,8 @@
"terms": "Tankstelle, Tanke"
},
"amenity/grave_yard": {
"name": "Friedhof",
"terms": "Friedhof"
"name": "Gräberfeld",
"terms": "Gräberfeld, kleiner Friedhof"
},
"amenity/grit_bin": {
"name": "Streugutkiste",
-1
View File
@@ -512,7 +512,6 @@
"title": "Photo Overlay (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Traffic signs from Mapillary",
"title": "Traffic Sign Overlay (Mapillary)"
},
"mapillary": {
+1 -1
View File
@@ -512,7 +512,7 @@
"title": "Superposición de fotos (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Señales de tráfico de Mapillary",
"tooltip": "Señales de tráfico de Mapillary (debe permitir superposición de fotos)",
"title": "Superposición de señal de tráfico (Mapillary)"
},
"mapillary": {
-1
View File
@@ -497,7 +497,6 @@
"title": "Valokuvat kartalla (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Liikennemerkit (Mapillary)",
"title": "Liikennemerkit kartalla (Mapillary)"
},
"mapillary": {
+6 -7
View File
@@ -512,7 +512,6 @@
"title": "Surcouche photo (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Signaux routiers de Mapillary",
"title": "Surcouche de signaux routiers (Mapillary)"
},
"mapillary": {
@@ -2055,7 +2054,7 @@
},
"building/apartments": {
"name": "Résidence",
"terms": "Appartements"
"terms": "appartements"
},
"building/barn": {
"name": "Grange",
@@ -2122,8 +2121,8 @@
"terms": "Hôpital, Clinique"
},
"building/hotel": {
"name": "Hôtel",
"terms": "tel"
"name": "Bâtiment d'hôtel",
"terms": "hôtel,hotel"
},
"building/house": {
"name": "Maison",
@@ -2850,8 +2849,8 @@
"terms": "Piste de course à pied"
},
"leisure/slipway": {
"name": "Plan incliné",
"terms": "Cale de lancement, Cale, Cale de mise à l'eau"
"name": "Mise à l'eau",
"terms": "Cale de lancement, Cale, Cale de mise à l'eau, Rampe de mise à l'eau"
},
"leisure/sports_centre": {
"name": "Centre sportif / Salle de gymnastique",
@@ -3851,7 +3850,7 @@
},
"tourism/hotel": {
"name": "Hôtel",
"terms": "tel"
"terms": "bâtiment d'hôtel,hotel"
},
"tourism/information": {
"name": "Informations",
+1 -1
View File
@@ -512,7 +512,7 @@
"title": "Foto preklop (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Prometni znakovi s Mapillary servisa",
"tooltip": "Prometni znakovi s Mapillary servisa (mora biti uključen foto preklop)",
"title": "Preklop prometnih znakova (Mapillary)"
},
"mapillary": {
+1 -1
View File
@@ -512,7 +512,7 @@
"title": "Fotó réteg (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Közlekedési táblák a Mapillary-ből",
"tooltip": "Közlekedési táblák a Mapillaryről (be kell kapcsolni a fotó réteget)",
"title": "Közlekedési tábla réteg (Mapillary)"
},
"mapillary": {
+1 -1
View File
@@ -512,7 +512,7 @@
"title": "Livello Foto (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Segnali stradali da Mapillary",
"tooltip": "Segnali stradali da Mapillary (necessita attivazione Livello Foto)",
"title": "Livello Segnali Stradali (Mapillary)"
},
"mapillary": {
+39 -39
View File
@@ -287,7 +287,8 @@
"no_results_worldwide": "検索結果がありません"
},
"geolocate": {
"title": "編集画面を現在地へ移動"
"title": "編集画面を現在地へ移動",
"locating": "位置情報を取得中です。しばらくお待ちください。"
},
"inspector": {
"no_documentation_combination": "このタグの組み合わせに関する解説はありません",
@@ -356,6 +357,7 @@
"tooltip": "地点情報"
},
"traffic_roads": {
"description": "公道",
"tooltip": "道路、街路など"
},
"service_roads": {
@@ -363,7 +365,7 @@
"tooltip": "私道、駐車場内経路、農道など"
},
"paths": {
"description": "道",
"description": "歩道・小道",
"tooltip": "歩道、自転車道など"
},
"buildings": {
@@ -510,7 +512,6 @@
"title": "写真の重ね合わせ (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Mapillary から交通標識を取得します",
"title": "交通標識の重ね合わせ (Mapillary)"
},
"mapillary": {
@@ -611,6 +612,9 @@
},
"presets": {
"categories": {
"category-barrier": {
"name": "障害物"
},
"category-building": {
"name": "建物"
},
@@ -935,9 +939,6 @@
"entrance": {
"label": "タイプ"
},
"except": {
"label": "例外"
},
"fax": {
"label": "FAX",
"placeholder": "+31 42 123 4567"
@@ -1280,9 +1281,6 @@
"restriction": {
"label": "タイプ"
},
"restrictions": {
"label": "進行方向制限"
},
"route": {
"label": "タイプ"
},
@@ -1677,7 +1675,7 @@
"terms": "時計"
},
"amenity/college": {
"name": "大学の敷地",
"name": "短大・高専・専門学校の敷地",
"terms": "キャンパス"
},
"amenity/community_centre": {
@@ -1812,6 +1810,10 @@
"name": "郵便局",
"terms": "郵便局"
},
"amenity/prison": {
"name": "刑務所の敷地",
"terms": "刑務所, 刑務所の敷地, 監獄, 拘置所, 少年院"
},
"amenity/pub": {
"name": "居酒屋",
"terms": "パブ, 居酒屋, 焼き鳥屋"
@@ -1916,6 +1918,9 @@
"name": "新聞自動販売機",
"terms": "新聞, 自動販売機, 自販機"
},
"amenity/vending_machine/parcel_pickup_dropoff": {
"terms": "自動販売機, 自販機"
},
"amenity/vending_machine/parking_tickets": {
"name": "パーキングチケット発給機",
"terms": "パーキングチケット, パーキングメーター, 駐車券, 券売機, 自動券売機, 自動販売機, 自販機, 自動発券機, 発券機"
@@ -1940,6 +1945,14 @@
"name": "ゴミ箱",
"terms": "ゴミ箱, ごみ箱"
},
"amenity/waste_disposal": {
"name": "ゴミ収集ボックス",
"terms": "ゴミステーション, ゴミ集積所, ゴミ捨て場, ゴミ置き場, ゴミ, ゴミ箱, ゴミコンテナ, ゴミ回収, ダストボックス"
},
"amenity/water_point": {
"name": "キャンピングカー用の給水施設",
"terms": "給水, 補給, 給水所, キャンピングカー, 給水塔, 飲料水, 飲水, 飲み水, キャンプ場, オートキャンプ場"
},
"area": {
"name": "エリア",
"terms": "エリア, 領域, 範囲"
@@ -1972,6 +1985,10 @@
"name": "自転車止め",
"terms": "自転車止め"
},
"barrier/ditch": {
"name": "塹壕・空堀",
"terms": "塹壕, 空堀, 堀, 溝, 谷"
},
"barrier/entrance": {
"name": "出入口",
"terms": "出入口"
@@ -2049,8 +2066,8 @@
"terms": "教会"
},
"building/college": {
"name": "大学の建物",
"terms": "大学の建物"
"name": "短大・高専・専門学校の建物",
"terms": "短大, 高専, 高等専門学校, 短期大学, 専門, 専門学校"
},
"building/commercial": {
"name": "オフィスビル",
@@ -3337,7 +3354,8 @@
"terms": "古美術品店, アンティークショップ"
},
"shop/art": {
"name": "美術品販売店"
"name": "美術品販売店",
"terms": "現代美術の商店"
},
"shop/baby_goods": {
"name": "赤ちゃん用品店",
@@ -3424,7 +3442,8 @@
"terms": "衣料品店, 洋服店, 呉服店"
},
"shop/coffee": {
"name": "コーヒー豆販売店"
"name": "コーヒー豆販売店",
"terms": "コーヒー豆専門店"
},
"shop/computer": {
"name": "コンピューター店",
@@ -3622,6 +3641,10 @@
"name": "新聞・雑誌店",
"terms": "新聞, 雑誌, マガジン, ニュース, スタンド"
},
"shop/nutrition_supplements": {
"name": "栄養サプリ販売店",
"terms": "栄養サプリメント販売店, サプリ専門店, サプリメント専門店"
},
"shop/optician": {
"name": "メガネ",
"terms": "メガネ, 眼鏡, メガネ屋, 眼鏡屋"
@@ -3755,7 +3778,8 @@
"terms": "銃砲店"
},
"shop/window_blind": {
"name": "ブラインドカーテン専門店"
"name": "ブラインドカーテン専門店",
"terms": "ブラインド販売店"
},
"shop/wine": {
"name": "ワイン店",
@@ -3865,30 +3889,6 @@
"name": "進行方向制限",
"terms": "進行方向制限"
},
"type/restriction/no_left_turn": {
"name": "左折禁止",
"terms": "左折禁止"
},
"type/restriction/no_right_turn": {
"name": "右折禁止",
"terms": "右折禁止"
},
"type/restriction/no_straight_on": {
"name": "直進禁止",
"terms": "直進禁止"
},
"type/restriction/no_u_turn": {
"name": "転回禁止",
"terms": "転回禁止, Uターン禁止"
},
"type/restriction/only_left_turn": {
"name": "左折のみ可",
"terms": "左折のみ可"
},
"type/restriction/only_right_turn": {
"name": "右折のみ可",
"terms": "右折のみ可"
},
"type/restriction/only_straight_on": {
"name": "直進のみ可",
"terms": "直進のみ可"
+6 -1
View File
@@ -506,7 +506,6 @@
"title": "사진 겹치기 (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Mapillary에서 교통 표지판",
"title": "교통 표지판 겹치기 (Mapillary)"
},
"mapillary": {
@@ -852,6 +851,12 @@
"description": "일방 통행로에 양방향으로 이동하는 자전거 차선",
"title": "역방향 통행 자전거 도로"
},
"opposite_lane": {
"description": "교통 흐름의 방향을 거슬러 향하는 자전거 전용 도로"
},
"share_busway": {
"description": "버스 전용 차선을 겸하는 자전거 도로"
},
"track": {
"title": "자전거 트랙"
}
+4 -4
View File
@@ -512,7 +512,7 @@
"title": "Foto-laag (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Verkeerslichten uit Mapillary",
"tooltip": "Verkeerslichten uit Mapillary (foto-laag moet geactiveerd zijn)",
"title": "Herkende-verkeersborden-laag (Mapillary)"
},
"mapillary": {
@@ -2033,7 +2033,7 @@
},
"building/apartments": {
"name": "Appartementen",
"terms": "flatgebouw,flats,appartementsgebouw,wolkenkrabber,woongebouw,residentie"
"terms": "flatgebouw,flats,appartementsgebouw,wolkenkrabber,woongebouw,residentie,apartementen"
},
"building/barn": {
"name": "Schuur",
@@ -2097,7 +2097,7 @@
},
"building/hotel": {
"name": "Hotelgebouw",
"terms": "hotel"
"terms": "hotel,kamers"
},
"building/house": {
"name": "Huis",
@@ -3632,7 +3632,7 @@
},
"tourism/hotel": {
"name": "Hotel",
"terms": "hotel"
"terms": "hotelgebouw,kamers"
},
"tourism/information": {
"name": "Informatie",
+34 -18
View File
@@ -511,7 +511,6 @@
"title": "Nakładka zdjęć (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Znaki drogowe z serwisu Mapillary",
"title": "Nakładka z znakami drogowymi (Mapillary)"
},
"mapillary": {
@@ -2225,7 +2224,8 @@
"name": "Tapicer"
},
"craft/watchmaker": {
"name": "Zegarmistrz"
"name": "Zegarmistrz",
"terms": "zegarki"
},
"craft/window_construction": {
"name": "Montaż okien"
@@ -2256,7 +2256,8 @@
"name": "Przejście dla pieszych"
},
"footway/crosswalk": {
"name": "Przejście dla pieszych z zebrą"
"name": "Przejście dla pieszych z zebrą",
"terms": "zebra"
},
"footway/sidewalk": {
"name": "Chodnik",
@@ -2341,7 +2342,8 @@
"terms": "rampa,wjazd,wyjazd,zjazd"
},
"highway/raceway": {
"name": "Tor wyścigowy"
"name": "Tor wyścigowy",
"terms": "tor samochodowy"
},
"highway/residential": {
"name": "Droga lokalna",
@@ -2381,7 +2383,8 @@
"name": "Dojazd dla służb ratowniczych"
},
"highway/service/parking_aisle": {
"name": "Uliczka parkingowa"
"name": "Uliczka parkingowa",
"terms": "podjazd parkingowy"
},
"highway/services": {
"name": "Miejsce Obsługi Podróżnych (MOP)",
@@ -2408,7 +2411,8 @@
"terms": "rampa,wjazd,wyjazd,zjazd"
},
"highway/track": {
"name": "Droga polna lub leśna"
"name": "Droga polna lub leśna",
"terms": "trakt leśny"
},
"highway/traffic_signals": {
"name": "Sygnalizacja świetlna",
@@ -2466,7 +2470,8 @@
"terms": "kapliczka,przydrożna"
},
"junction": {
"name": "Skrzyżowanie"
"name": "Skrzyżowanie",
"terms": "krzyżówka"
},
"landuse": {
"name": "Zagospodarowanie terenu",
@@ -2485,7 +2490,8 @@
"terms": "cmentarz"
},
"landuse/churchyard": {
"name": "Dziedziniec kościelny"
"name": "Dziedziniec kościelny",
"terms": "Plac kościelny"
},
"landuse/commercial": {
"name": "Obszar biurowo-biznesowy"
@@ -2499,7 +2505,8 @@
"terms": "ziemia uprawna,grunty rolne"
},
"landuse/farmland": {
"name": "Pola uprawne"
"name": "Pola uprawne",
"terms": "Uprawy"
},
"landuse/farmyard": {
"name": "Teren z zabudowaniami rolniczymi",
@@ -2510,14 +2517,16 @@
"terms": "Las"
},
"landuse/garages": {
"name": "Garaże"
"name": "Garaże",
"terms": "garaże"
},
"landuse/grass": {
"name": "Trawa",
"terms": "trawa, trawnik, "
},
"landuse/industrial": {
"name": "Obszar przemysłowy"
"name": "Obszar przemysłowy",
"terms": "Teren przemysłowy"
},
"landuse/landfill": {
"name": "Wysypisko",
@@ -2544,7 +2553,8 @@
"terms": "kamieniołom, żwirownia, kruszywo,kopalnia odkrywkowa"
},
"landuse/residential": {
"name": "Zabudowa mieszkaniowa"
"name": "Zabudowa mieszkaniowa",
"terms": "Teren zamieszkały"
},
"landuse/retail": {
"name": "Obszar handlowy"
@@ -2565,10 +2575,12 @@
"name": "Czatownia ornitologiczna"
},
"leisure/bowling_alley": {
"name": "Kręgielnia"
"name": "Kręgielnia",
"terms": "Kręgle"
},
"leisure/dog_park": {
"name": "Park dla psów"
"name": "Park dla psów",
"terms": "psi park"
},
"leisure/firepit": {
"name": "Miejsce na ognisko",
@@ -2678,7 +2690,8 @@
"name": "Obiekty sztuczne"
},
"man_made/adit": {
"name": "Sztolnia"
"name": "Sztolnia",
"terms": "Tunel kopalniany"
},
"man_made/breakwater": {
"name": "Falochron",
@@ -2710,7 +2723,8 @@
"terms": "latarnia"
},
"man_made/mast": {
"name": "Maszt radiowy"
"name": "Maszt radiowy",
"terms": "Wieża radiowa"
},
"man_made/observation": {
"name": "Wieża obserwacyjna",
@@ -3143,7 +3157,8 @@
"terms": "alkohol"
},
"shop/anime": {
"name": "Sklep z anime"
"name": "Sklep z anime",
"terms": "sklep anime"
},
"shop/antiques": {
"name": "Antykwariat",
@@ -3258,7 +3273,8 @@
"terms": "kosmetyki,drogeria"
},
"shop/craft": {
"name": "Sklep z rzemiosłem artystycznym"
"name": "Sklep z rzemiosłem artystycznym",
"terms": "rzemiosło artystyczne"
},
"shop/curtain": {
"name": "Sklep z zasłonami",
+36 -3
View File
@@ -241,6 +241,7 @@
},
"commit": {
"title": "Salvar Alterações",
"description_placeholder": "Breve descrição de suas contribuições (obrigatório)",
"message_label": "Comentário para o conjunto de alterações",
"upload_explanation": "As alterações que você enviar ficarão visíveis em todos os mapas que usam dados do OpenStreetMap. Atenção: NÃO é permitido copiar nomes de ruas do Google Maps, Bing, mapas impressos ou quaisquer fontes que possuam copyright.",
"upload_explanation_with_user": "As alterações que você enviar como {user} estarão visíveis em todos os mapas que usam os dados do OpenStreetMap.<br><br>\n<b>Atenção:</b> NÃO é permitido copiar nomes de ruas do Google Maps, Bing, mapas impressos ou quaisquer fontes que possuam copyright.",
@@ -315,6 +316,7 @@
"yes": "Sim",
"no": "Não"
},
"add": "Adicionar",
"none": "Nenhum",
"node": "Ponto",
"way": "Linha",
@@ -328,6 +330,7 @@
"percent_brightness": "Brilho de {opacity}%",
"none": "Nenhum",
"best_imagery": "Melhor imagem de satélite conhecida para esta localização",
"switch": "Voltar para este fundo de tela",
"custom": "Customizado",
"custom_button": "Editar fundo de tela personalizado",
"custom_prompt": "Informe um modelo de URL de quadrículas. Tokens válidos são {z}, {x}, {y} para o esquema Z/X/Y e {u} para o esquema quadtile.",
@@ -509,7 +512,7 @@
"title": "Camada de Fotos (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Placas de trânsito do Mapillary",
"tooltip": "Sinais de trânsito do Mapillary (Camada de Foto deve ser habilitada)",
"title": "Camada de Placas de Trânsito (Mapillary)"
},
"mapillary": {
@@ -610,6 +613,9 @@
},
"presets": {
"categories": {
"category-barrier": {
"name": "Elementos de Barreira"
},
"category-building": {
"name": "Tipos de Edificações"
},
@@ -779,6 +785,9 @@
"bicycle_parking": {
"label": "Tipo"
},
"bin": {
"label": "Lixeira"
},
"boundary": {
"label": "Tipo"
},
@@ -850,6 +859,9 @@
"cuisine": {
"label": "Culinária"
},
"currency_multi": {
"label": "Tipos de Moeda"
},
"cycleway": {
"label": "Ciclofaixas",
"options": {
@@ -953,6 +965,9 @@
"fuel": {
"label": "Combustível"
},
"fuel_multi": {
"label": "Tipos de Combustível"
},
"gauge": {
"label": "Bitola"
},
@@ -1195,6 +1210,9 @@
"underground": "Subterrâneo"
}
},
"payment_multi": {
"label": "Tipos de Pagamento"
},
"phone": {
"label": "Telefone",
"placeholder": "+55 11 0982 1098"
@@ -1252,6 +1270,9 @@
"railway": {
"label": "Tipo"
},
"recycling_accepts": {
"label": "Aceita"
},
"ref": {
"label": "Código de referência"
},
@@ -1573,8 +1594,8 @@
"terms": "Serviço"
},
"amenity/arts_centre": {
"name": "Centro/Escola de Artes",
"terms": "Centro de Artes, Escola de Artes, Artes, Centro Artístico, Escola Artística, Teatro, Cinema, Espetáculo, Exposições"
"name": "Centro Cultural",
"terms": "Centro de Artes, Artes, Centro Artístico, Teatro, Cinema, Espetáculo, Exposições, Galeria, Exposição, Cultura, Espaço Cultural, Pintura, Artes Plásticas"
},
"amenity/atm": {
"name": "Caixa Eletrônico",
@@ -1804,6 +1825,10 @@
"name": "Agência de Correios",
"terms": "Correios, Encomendas, Transporte, Log, Cargas"
},
"amenity/prison": {
"name": "Presídio",
"terms": "Cela, Cadeia"
},
"amenity/pub": {
"name": "Bar",
"terms": "Pub, botequim, boteco, buteco"
@@ -1976,6 +2001,10 @@
"name": "Barreira para Bicicletas",
"terms": "Barreira para Bicicletas"
},
"barrier/ditch": {
"name": "Vala",
"terms": "Fosso, trincheira"
},
"barrier/entrance": {
"name": "Entrada",
"terms": "Entrada"
@@ -3940,6 +3969,10 @@
"name": "Rota de Caminhada",
"terms": "Rota de Trekking"
},
"type/route/horse": {
"name": "Rota de Equitação",
"terms": "Rota de Montaria, Trilha de Equitação"
},
"type/route/pipeline": {
"name": "Rota de Tubulação",
"terms": "Rota de Tubulação, Faixa de Dutos"
+22 -4
View File
@@ -241,6 +241,7 @@
},
"commit": {
"title": "Gravar Alterações",
"description_placeholder": "Pequena descrição das tuas contribuições (necessário)",
"message_label": "Descrição das alterações",
"upload_explanation": "As alterações que enviar ficarão visíveis em todos os mapas que usem dados do OpenStreetMap.",
"upload_explanation_with_user": "As alterações que enviar como {user} ficarão visíveis em todos os mapas que usem dados do OpenStreetMap.",
@@ -252,7 +253,9 @@
"deleted": "Eliminado",
"created": "Criado",
"about_changeset_comments": "Sobre comentários de changesets",
"about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments"
"about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
"google_warning": "Mencionou o Google no seu comentário: lembre-se que copiar do Google Mapas é estritamente proibido.",
"google_warning_link": "http://www.openstreetmap.org/copyright"
},
"contributors": {
"list": "Edições de {users}",
@@ -313,6 +316,7 @@
"yes": "Sim",
"no": "Não"
},
"add": "Adicionar",
"none": "Nenhum",
"node": "Nó",
"way": "Linha",
@@ -326,11 +330,14 @@
"percent_brightness": "{opacity}% transparente",
"none": "Nenhum",
"best_imagery": "Melhor fonte de imagem para esse lugar",
"switch": "Mudar para este fundo",
"custom": "Personalizado",
"custom_button": "Editar fundo personalizando",
"custom_prompt": "Introduzir um URL válido. Tokens válidos são {z}, {x}, {y} para esquemas Z/X/Y e {u} para esquemas QuadTile.",
"fix_misalignment": "Ajudar o alienamento da imagem ",
"imagery_source_faq": "De onde vem essa imagem?",
"reset": "reiniciar",
"offset": "Arrasta para a área cinzenta abaixo para ajustar o alienamento da imagem, ou insira os valores em metros. ",
"minimap": {
"description": "Mini-mapa",
"tooltip": "Mostra um pequeno mapa com uma área mais abrangente que ajuda a localizar a área que está a editar."
@@ -505,7 +512,7 @@
"title": "Camada de Fotos (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Placas de trânsito do Mapillary",
"tooltip": "Sinais de trânsito do Mapillary (\"Photo Overlay\" tem de estar ativado)",
"title": "Camada de Placas de Trânsito (Mapillary)"
},
"mapillary": {
@@ -606,6 +613,9 @@
},
"presets": {
"categories": {
"category-barrier": {
"name": "Tipos de barreira"
},
"category-building": {
"name": "Tipos de edifícios"
},
@@ -625,7 +635,7 @@
"name": "Tipos de restrição"
},
"category-road": {
"name": "Tipos de Rodovia"
"name": "Tipos de rodovia"
},
"category-route": {
"name": "Tipos de rota"
@@ -1991,6 +2001,10 @@
"name": "Barreira de bicicletas",
"terms": "Bicicleta"
},
"barrier/ditch": {
"name": "Fosso / Vala / Trincheira (seca)",
"terms": "Trench"
},
"barrier/entrance": {
"name": "Entrada",
"terms": "Entrada, Acesso, Abertura, Porta, Pórtico, Portão"
@@ -3955,6 +3969,10 @@
"name": "Rota de caminhada",
"terms": "Hiking Route, Rota de Escalagem"
},
"type/route/horse": {
"name": "Rota de equitação",
"terms": "Riding Route"
},
"type/route/pipeline": {
"name": "Rota de gasoduto / oleoduto",
"terms": "Pipeline Route"
@@ -4004,7 +4022,7 @@
"terms": "Dam, Usina, Hidrelétrica, Hidroelétrica, Hidro-elétrica, Hidro elétrica"
},
"waterway/ditch": {
"name": "Fosso / vala / trincheira",
"name": "Fosso / Vala / Trincheira",
"terms": "Vala, Trincheira, Represa"
},
"waterway/dock": {
-1
View File
@@ -512,7 +512,6 @@
"title": "Фотографии с Mapillary"
},
"mapillary_signs": {
"tooltip": "Дорожные знаки с Mapillary",
"title": "Слой дорожных знаков с Mapillary"
},
"mapillary": {
+1 -1
View File
@@ -512,7 +512,7 @@
"title": "Bildlager (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Trafikskyltar från Mapillary",
"tooltip": "Trafikskyltar från Mapillary (måste aktivera bildlager)",
"title": "Bildlager med trafikskyltar (Mapillary)"
},
"mapillary": {
-1
View File
@@ -512,7 +512,6 @@
"title": "Фото-шар (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Дорожні знаки від Mapillary",
"title": "Шар дорожніх знаків (Mapillary)"
},
"mapillary": {
+1 -1
View File
@@ -512,7 +512,7 @@
"title": "Lớp phủ Hình ảnh (Mapillary)"
},
"mapillary_signs": {
"tooltip": "Bảng giao thông do Mapillary cung cấp",
"tooltip": "Bảng giao thông do Mapillary cung cấp (phải bật Lớp phủ Hình ảnh)",
"title": "Lớp phủ Bảng Giao thông (Mapillary)"
},
"mapillary": {
-1
View File
@@ -512,7 +512,6 @@
"title": "相片重疊 (Mapillary)"
},
"mapillary_signs": {
"tooltip": "來自Mapillary的交通訊號",
"title": "交通訊號重疊 (Mapillary)"
},
"mapillary": {
+14 -14
View File
@@ -512,7 +512,7 @@
"title": "照片重疊 (Mapillary)"
},
"mapillary_signs": {
"tooltip": "從 Mapillary 來的紅綠燈",
"tooltip": "從 Mapillary 來的交通號誌(必須啟用照片重疊)",
"title": "紅綠燈重疊 (Mapillary)"
},
"mapillary": {
@@ -860,7 +860,7 @@
"label": "食物種類"
},
"currency_multi": {
"label": "幣種類"
"label": "幣種類"
},
"cycleway": {
"label": "單車道",
@@ -1567,7 +1567,7 @@
},
"aeroway/gate": {
"name": "登機閘門",
"terms": "機場閘口,機場閘門"
"terms": "機場閘口,機場閘門,登機門,登機口"
},
"aeroway/hangar": {
"name": "機庫",
@@ -1587,7 +1587,7 @@
},
"aeroway/terminal": {
"name": "機場航廈",
"terms": "機場大堂"
"terms": "航廈,機場大堂"
},
"amenity": {
"name": "便利設施",
@@ -1639,11 +1639,11 @@
},
"amenity/bureau_de_change": {
"name": "外幣兌換",
"terms": "錢幣兌換"
"terms": "錢幣兌換,貨幣兌換"
},
"amenity/bus_station": {
"name": "公車運站",
"terms": "客運站,轉運站"
"name": "公車運站",
"terms": "客運站,轉運站,長途客運站"
},
"amenity/cafe": {
"name": "咖啡廳",
@@ -2719,7 +2719,7 @@
},
"landuse/military": {
"name": "軍事用地",
"terms": "營區,軍營"
"terms": "營區,軍營,部隊用地,軍事區,軍用地"
},
"landuse/orchard": {
"name": "果園",
@@ -3011,7 +3011,7 @@
},
"military/range": {
"name": "軍事靶場",
"terms": "靶場"
"terms": "靶場,軍用靶場, 射擊場"
},
"military/training_area": {
"name": "訓練場地",
@@ -3295,7 +3295,7 @@
},
"railway": {
"name": "鐵路",
"terms": "鐵支路,鐵軌"
"terms": "鐵支路,鐵軌,鐵道"
},
"railway/abandoned": {
"name": "鐵路線遺跡",
@@ -3335,7 +3335,7 @@
},
"railway/station": {
"name": "火車站",
"terms": "鐵路站"
"terms": "鐵路站,車站,高鐵站"
},
"railway/subway": {
"name": "捷運",
@@ -3343,7 +3343,7 @@
},
"railway/subway_entrance": {
"name": "捷運入口",
"terms": "地鐵入口,地下鐵入口"
"terms": "地鐵入口,地下鐵入口,捷運出入口,地鐵出入口,地下鐵出入口"
},
"railway/tram": {
"name": "電車",
@@ -3826,8 +3826,8 @@
"terms": "觀光點"
},
"tourism/camp_site": {
"name": "營地",
"terms": "露營地"
"name": "露營營地",
"terms": "露營地,營地"
},
"tourism/caravan_site": {
"name": "露營車停車場",
+1
View File
@@ -61,6 +61,7 @@
<script src="js/id/svg.js"></script>
<script src="js/id/svg/areas.js"></script>
<script src="js/id/svg/debug.js"></script>
<script src="js/id/svg/defs.js"></script>
<script src='js/id/svg/gpx.js'></script>
<script src="js/id/svg/icon.js"></script>
+16 -10
View File
@@ -216,18 +216,24 @@ window.iD = function () {
/* Debug */
var debugTile = false, debugCollision = false;
context.debugTile = function(_) {
if (!arguments.length) return debugTile;
debugTile = _;
var debugFlags = {
tile: false,
collision: false,
imagery: false,
imperial: false,
driveLeft: false
};
context.debugFlags = function() {
return debugFlags;
};
context.setDebug = function(flag, val) {
if (arguments.length === 1) val = true;
debugFlags[flag] = val;
dispatch.change();
return context;
};
context.debugCollision = function(_) {
if (!arguments.length) return debugCollision;
debugCollision = _;
dispatch.change();
return context;
context.getDebug = function(flag) {
return flag && debugFlags[flag];
};
@@ -379,7 +385,7 @@ window.iD = function () {
};
iD.version = '1.9.5';
iD.version = '1.9.6';
(function() {
var detected = {};
+1 -1
View File
@@ -78,7 +78,7 @@ iD.TileLayer = function(context) {
// rentered when tiles load/error (see #644).
function render(selection) {
var requests = [];
var showDebug = context.debugTile() && !source.overlay;
var showDebug = context.getDebug('tile') && !source.overlay;
if (source.validZoom(z)) {
tile().forEach(function(d) {
+9 -2
View File
@@ -6,6 +6,7 @@ iD.services.mapillary = function() {
viewerjs = 'https://npmcdn.com/mapillary-js@1.3.0/dist/mapillary-js.min.js',
clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi',
maxResults = 1000,
maxPages = 10,
tileZoom = 14;
@@ -185,6 +186,7 @@ iD.services.mapillary = function() {
if (err || !data.features || !data.features.length) return;
var features = [],
nextPage = page + 1,
feature, loc, d;
for (var i = 0; i < data.features.length; i++) {
@@ -202,8 +204,8 @@ iD.services.mapillary = function() {
if (which === 'images') dispatch.loadedImages();
if (which === 'signs') dispatch.loadedSigns();
if (data.features.length === maxResults) {
loadTilePage(which, url, tile, ++page);
if (data.features.length === maxResults && nextPage < maxPages) {
loadTilePage(which, url, tile, nextPage);
}
}
);
@@ -308,6 +310,11 @@ iD.services.mapillary = function() {
};
mapillary.setViewerLoading = function(loading) {
var canvas = d3.select('#content')
.selectAll('.mly-wrapper canvas');
if (canvas.empty()) return; // viewer not loaded yet
var cover = d3.select('#content')
.selectAll('.mly-wrapper .Cover');
+137
View File
@@ -0,0 +1,137 @@
iD.svg.Debug = function(projection, context) {
function multipolygons(imagery) {
return imagery.map(function(data) {
return {
type: 'MultiPolygon',
coordinates: [ data.polygon ]
};
});
}
function drawDebug(surface) {
var showsTile = context.getDebug('tile'),
showsCollision = context.getDebug('collision'),
showsImagery = context.getDebug('imagery'),
showsImperial = context.getDebug('imperial'),
showsDriveLeft = context.getDebug('driveLeft'),
path = d3.geo.path().projection(projection);
var debugData = [];
if (showsTile) {
debugData.push({ class: 'red', label: 'tile' });
}
if (showsCollision) {
debugData.push({ class: 'yellow', label: 'collision' });
}
if (showsImagery) {
debugData.push({ class: 'orange', label: 'imagery' });
}
if (showsImperial) {
debugData.push({ class: 'cyan', label: 'imperial' });
}
if (showsDriveLeft) {
debugData.push({ class: 'green', label: 'driveLeft' });
}
var legend = d3.select('#content')
.selectAll('.debug-legend')
.data(debugData.length ? [0] : []);
legend.enter()
.append('div')
.attr('class', 'fillD debug-legend');
legend.exit()
.remove();
var legendItems = legend.selectAll('.debug-legend-item')
.data(debugData, function(d) { return d.label; });
legendItems.enter()
.append('span')
.attr('class', function(d) { return 'debug-legend-item ' + d.class; })
.text(function(d) { return d.label; });
legendItems.exit()
.remove();
var layer = surface.selectAll('.layer-debug')
.data(showsImagery || showsImperial || showsDriveLeft ? [0] : []);
layer.enter()
.append('g')
.attr('class', 'layer-debug');
layer.exit()
.remove();
var extent = context.map().extent(),
availableImagery = showsImagery && multipolygons(iD.data.imagery.filter(function(source) {
if (!source.polygon) return false;
return source.polygon.some(function(polygon) {
return iD.geo.polygonIntersectsPolygon(polygon, extent, true);
});
}));
var imagery = layer.selectAll('path.debug-imagery')
.data(showsImagery ? availableImagery : []);
imagery.enter()
.append('path')
.attr('class', 'debug-imagery debug orange');
imagery.exit()
.remove();
var imperial = layer
.selectAll('path.debug-imperial')
.data(showsImperial ? [iD.data.imperial] : []);
imperial.enter()
.append('path')
.attr('class', 'debug-imperial debug cyan');
imperial.exit()
.remove();
var driveLeft = layer
.selectAll('path.debug-drive-left')
.data(showsDriveLeft ? [iD.data.driveLeft] : []);
driveLeft.enter()
.append('path')
.attr('class', 'debug-drive-left debug green');
driveLeft.exit()
.remove();
// update
layer.selectAll('path')
.attr('d', path);
}
// This looks strange because `enabled` methods on other layers are
// chainable getter/setters, and this one is just a getter.
drawDebug.enabled = function() {
if (!arguments.length) {
return context.getDebug('tile') ||
context.getDebug('collision') ||
context.getDebug('imagery') ||
context.getDebug('imperial') ||
context.getDebug('driveLeft');
} else {
return this;
}
};
return drawDebug;
};
+3 -3
View File
@@ -425,7 +425,7 @@ iD.svg.Labels = function(projection, context) {
drawAreaIcons(label, labelled.area, filter, 'arealabel-icon', positions.area);
// debug
var showDebug = context.debugCollision();
var showDebug = context.getDebug('collision');
var debug = label.selectAll('.layer-label-debug')
.data(showDebug ? [true] : []);
@@ -447,11 +447,11 @@ iD.svg.Labels = function(projection, context) {
]]};
});
var debugboxes = debug.selectAll('.bbox').data(gj);
var debugboxes = debug.selectAll('.debug').data(gj);
debugboxes.enter()
.append('path')
.attr('class', 'bbox');
.attr('class', 'debug yellow');
debugboxes.exit()
.remove();
+2 -1
View File
@@ -5,7 +5,8 @@ iD.svg.Layers = function(projection, context) {
{ id: 'osm', layer: iD.svg.Osm(projection, context, dispatch) },
{ id: 'gpx', layer: iD.svg.Gpx(projection, context, dispatch) },
{ id: 'mapillary-images', layer: iD.svg.MapillaryImages(projection, context, dispatch) },
{ id: 'mapillary-signs', layer: iD.svg.MapillarySigns(projection, context, dispatch) }
{ id: 'mapillary-signs', layer: iD.svg.MapillarySigns(projection, context, dispatch) },
{ id: 'debug', layer: iD.svg.Debug(projection, context, dispatch) }
];
+18 -15
View File
@@ -6,6 +6,7 @@ iD.ui.MapInMap = function(context) {
overlayLayers = {},
projection = iD.geo.RawMercator(),
gpxLayer = iD.svg.Gpx(projection, context).showLabels(false),
debugLayer = iD.svg.Debug(projection, context),
zoom = d3.behavior.zoom()
.scaleExtent([ztok(0.5), ztok(24)])
.on('zoom', zoomPan),
@@ -13,7 +14,7 @@ iD.ui.MapInMap = function(context) {
panning = false,
hidden = true,
zDiff = 6, // by default, minimap renders at (main zoom - 6)
tStart, tLast, tCurr, kLast, kCurr, tiles, svg, timeoutId;
tStart, tLast, tCurr, kLast, kCurr, tiles, viewport, timeoutId;
function ztok(z) { return 256 * Math.pow(2, z); }
function ktoz(k) { return Math.log(k) / Math.LN2 - 8; }
@@ -51,7 +52,7 @@ iD.ui.MapInMap = function(context) {
tY = (tCurr[1] / scale - tLast[1]) * scale;
iD.util.setTransform(tiles, tX, tY, scale);
iD.util.setTransform(svg, 0, 0, scale);
iD.util.setTransform(viewport, 0, 0, scale);
transformed = true;
queueRedraw();
@@ -112,7 +113,7 @@ iD.ui.MapInMap = function(context) {
if (transformed) {
iD.util.setTransform(tiles, 0, 0);
iD.util.setTransform(svg, 0, 0);
iD.util.setTransform(viewport, 0, 0);
transformed = false;
}
}
@@ -188,33 +189,35 @@ iD.ui.MapInMap = function(context) {
.remove();
var gpx = tiles
.selectAll('.map-in-map-gpx')
.data(gpxLayer.enabled() ? [0] : []);
var dataLayers = tiles
.selectAll('.map-in-map-data')
.data([0]);
gpx.enter()
dataLayers.enter()
.append('svg')
.attr('class', 'map-in-map-gpx');
.attr('class', 'map-in-map-data');
gpx.exit()
dataLayers.exit()
.remove();
gpx.call(gpxLayer);
dataLayers
.call(gpxLayer)
.call(debugLayer);
// redraw bounding box
// redraw viewport bounding box
if (!panning) {
var getPath = d3.geo.path().projection(projection),
bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
svg = wrap.selectAll('.map-in-map-svg')
viewport = wrap.selectAll('.map-in-map-viewport')
.data([0]);
svg.enter()
viewport.enter()
.append('svg')
.attr('class', 'map-in-map-svg');
.attr('class', 'map-in-map-viewport');
var path = svg.selectAll('.map-in-map-bbox')
var path = viewport.selectAll('.map-in-map-bbox')
.data([bbox]);
path.enter()
+1 -1
View File
@@ -31,7 +31,7 @@ iD.ui.preset.maxspeed = function(field, context) {
imperial = _.some(iD.data.imperial.features, function(f) {
return _.some(f.geometry.coordinates, function(d) {
return iD.geo.pointInPolygon(loc, d[0]);
return iD.geo.pointInPolygon(loc, d);
});
});
+2 -3
View File
@@ -1820,8 +1820,7 @@ d3.behavior.zoom = function() {
}
function zoomended(dispatch) {
if (!--zooming) dispatch({type: "zoomend"});
center0 = null;
if (!--zooming) dispatch({type: "zoomend"}), center0 = null;
}
function mousedowned() {
@@ -1964,7 +1963,7 @@ d3.behavior.zoom = function() {
function mousewheeled() {
var dispatch = event.of(this, arguments);
if (mousewheelTimer) clearTimeout(mousewheelTimer);
else translate0 = location(center0 = center || d3.mouse(this)), d3_selection_interrupt.call(this), zoomstarted(dispatch);
else d3_selection_interrupt.call(this), translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch);
mousewheelTimer = setTimeout(function() { mousewheelTimer = null; zoomended(dispatch); }, 50);
d3_eventPreventDefault();
scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "iD",
"version": "1.9.5",
"version": "1.9.6",
"description": "A friendly editor for OpenStreetMap",
"main": "iD.js",
"directories": {
+1
View File
@@ -67,6 +67,7 @@
<script src="../js/id/svg.js"></script>
<script src="../js/id/svg/areas.js"></script>
<script src='../js/id/svg/debug.js'></script>
<script src="../js/id/svg/defs.js"></script>
<script src='../js/id/svg/gpx.js'></script>
<script src="../js/id/svg/icon.js"></script>
+4 -4
View File
@@ -147,7 +147,7 @@
.attr('width', 30)
.attr('height', 40)
.attr('data-zoom', function (d) { return d.zoom; })
.call(iD.svg.Layers(context))
.call(iD.svg.Layers(projection, context))
.each(function (d) {
var n = node.update({tags: d}),
graph = iD.Graph([n]);
@@ -215,7 +215,7 @@
.attr('width', 30)
.attr('height', 30)
.attr('data-zoom', function (d) { return d.zoom; })
.call(iD.svg.Layers(context))
.call(iD.svg.Layers(projection, context))
.each(function (d) {
var n = node.update({tags: d.tags}),
graph = iD.Graph([n, way]);
@@ -303,7 +303,7 @@
.attr('width', 200)
.attr('height', 30)
.attr('data-zoom', function (d) { return d.zoom; })
.call(iD.svg.Layers(context))
.call(iD.svg.Layers(projection, context))
.each(function (d) {
var highway = way.update({tags: d.tags}),
graph = iD.Graph([a, b, highway]);
@@ -365,7 +365,7 @@
.append('svg')
.attr('width', 100)
.attr('height', 100)
.call(iD.svg.Layers(context))
.call(iD.svg.Layers(projection, context))
.each(function (datum) {
var area = way.update({tags: datum.tags}),
graph = iD.Graph([a, b, c, d, area]);
+29 -12
View File
@@ -269,27 +269,44 @@ describe('iD.Way', function() {
});
it('returns false when the way has tag oneway=no', function() {
expect(iD.Way({tags: { oneway: 'no' }}).isOneWay()).to.be.false;
expect(iD.Way({tags: { oneway: '0' }}).isOneWay()).to.be.false;
expect(iD.Way({tags: { oneway: 'no' }}).isOneWay(), 'oneway no').to.be.false;
expect(iD.Way({tags: { oneway: '0' }}).isOneWay(), 'oneway 0').to.be.false;
});
it('returns true when the way has tag oneway=yes', function() {
expect(iD.Way({tags: { oneway: 'yes' }}).isOneWay()).to.be.true;
expect(iD.Way({tags: { oneway: '1' }}).isOneWay()).to.be.true;
expect(iD.Way({tags: { oneway: '-1' }}).isOneWay()).to.be.true;
expect(iD.Way({tags: { oneway: 'yes' }}).isOneWay(), 'oneway yes').to.be.true;
expect(iD.Way({tags: { oneway: '1' }}).isOneWay(), 'oneway 1').to.be.true;
expect(iD.Way({tags: { oneway: '-1' }}).isOneWay(), 'oneway -1').to.be.true;
});
it('returns true when the way has implied oneway tag (waterway=river, waterway=stream, etc)', function() {
expect(iD.Way({tags: { waterway: 'river' }}).isOneWay()).to.be.true;
expect(iD.Way({tags: { waterway: 'stream' }}).isOneWay()).to.be.true;
expect(iD.Way({tags: { highway: 'motorway' }}).isOneWay()).to.be.true;
expect(iD.Way({tags: { highway: 'motorway_link' }}).isOneWay()).to.be.true;
expect(iD.Way({tags: { junction: 'roundabout' }}).isOneWay()).to.be.true;
expect(iD.Way({tags: { waterway: 'river' }}).isOneWay(), 'river').to.be.true;
expect(iD.Way({tags: { waterway: 'stream' }}).isOneWay(), 'stream').to.be.true;
expect(iD.Way({tags: { highway: 'motorway' }}).isOneWay(), 'motorway').to.be.true;
expect(iD.Way({tags: { highway: 'motorway_link' }}).isOneWay(), 'motorway_link').to.be.true;
expect(iD.Way({tags: { junction: 'roundabout' }}).isOneWay(), 'roundabout').to.be.true;
});
it('returns false when the way does not have implied oneway tag', function() {
expect(iD.Way({tags: { highway: 'trunk' }}).isOneWay(), 'trunk').to.be.false;
expect(iD.Way({tags: { highway: 'trunk_link' }}).isOneWay(), 'trunk_link').to.be.false;
expect(iD.Way({tags: { highway: 'primary' }}).isOneWay(), 'primary').to.be.false;
expect(iD.Way({tags: { highway: 'primary_link' }}).isOneWay(), 'primary_link').to.be.false;
expect(iD.Way({tags: { highway: 'secondary' }}).isOneWay(), 'secondary').to.be.false;
expect(iD.Way({tags: { highway: 'secondary_link' }}).isOneWay(), 'secondary_link').to.be.false;
expect(iD.Way({tags: { highway: 'tertiary' }}).isOneWay(), 'tertiary').to.be.false;
expect(iD.Way({tags: { highway: 'tertiary_link' }}).isOneWay(), 'tertiary_link').to.be.false;
expect(iD.Way({tags: { highway: 'unclassified' }}).isOneWay(), 'unclassified').to.be.false;
expect(iD.Way({tags: { highway: 'residential' }}).isOneWay(), 'residential').to.be.false;
expect(iD.Way({tags: { highway: 'living_street' }}).isOneWay(), 'living_street').to.be.false;
expect(iD.Way({tags: { highway: 'service' }}).isOneWay(), 'service').to.be.false;
expect(iD.Way({tags: { highway: 'track' }}).isOneWay(), 'track').to.be.false;
expect(iD.Way({tags: { highway: 'path' }}).isOneWay(), 'path').to.be.false;
});
it('returns false when oneway=no overrides implied oneway tag', function() {
expect(iD.Way({tags: { junction: 'roundabout', oneway: 'no' }}).isOneWay()).to.be.false;
expect(iD.Way({tags: { highway: 'motorway', oneway: 'no' }}).isOneWay()).to.be.false;
expect(iD.Way({tags: { junction: 'roundabout', oneway: 'no' }}).isOneWay(), 'roundabout').to.be.false;
expect(iD.Way({tags: { highway: 'motorway', oneway: 'no' }}).isOneWay(), 'motorway').to.be.false;
});
});
+25
View File
@@ -100,4 +100,29 @@ describe('iD', function() {
expect(context.presets().match(way, graph).id).to.eql('mines');
});
});
describe('#debug', function() {
it('sets and gets debug flags', function() {
var context = iD(),
flags = {
tile: false,
collision: false,
imagery: false,
imperial: false,
driveLeft: false
};
expect(context.debugFlags()).to.eql(flags);
context.setDebug('tile', true);
expect(context.getDebug('tile')).to.be.true;
context.setDebug('collision');
expect(context.getDebug('collision')).to.be.true;
context.setDebug('tile', false);
expect(context.getDebug('tile')).to.be.false;
});
});
});
+1 -1
View File
@@ -7,7 +7,7 @@ describe("iD.svg.Areas", function () {
beforeEach(function () {
surface = d3.select(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))
.call(iD.svg.Layers(iD()));
.call(iD.svg.Layers(projection, iD()));
});
it("adds way and area classes", function () {
+1 -1
View File
@@ -7,7 +7,7 @@ describe("iD.svg.Lines", function () {
beforeEach(function () {
surface = d3.select(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))
.call(iD.svg.Layers(iD()));
.call(iD.svg.Layers(projection, iD()));
});
it("adds way and line classes", function () {
+1 -1
View File
@@ -7,7 +7,7 @@ describe("iD.svg.Midpoints", function () {
beforeEach(function () {
context = iD();
surface = d3.select(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))
.call(iD.svg.Layers(context));
.call(iD.svg.Layers(projection, context));
});
it("creates midpoint on segment completely within the extent", function () {
+1 -1
View File
@@ -6,7 +6,7 @@ describe("iD.svg.Points", function () {
beforeEach(function () {
context = iD().presets(iD.data.presets);
surface = d3.select(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))
.call(iD.svg.Layers(context));
.call(iD.svg.Layers(projection, context));
});
it("adds tag classes", function () {
+1 -1
View File
@@ -6,7 +6,7 @@ describe("iD.svg.Vertices", function () {
beforeEach(function () {
context = iD();
surface = d3.select(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))
.call(iD.svg.Layers(context));
.call(iD.svg.Layers(projection, context));
});
it("adds the .shared class to vertices that are members of two or more ways", function () {