}
};
- var locale, localePath;
- context.locale = function(loc, path) {
- locale = loc;
- localePath = path;
-
- // Also set iD.detect().locale (unless we detected 'en-us' and openstreetmap wants 'en')..
- if (!(loc.toLowerCase() === 'en' && iD.detect().locale.toLowerCase() === 'en-us')) {
- iD.detect().locale = loc;
- }
-
- return context;
- };
-
- context.loadLocale = function(cb) {
- if (locale && locale !== 'en' && iD.data.locales.indexOf(locale) !== -1) {
- localePath = localePath || context.assetPath() + 'locales/' + locale + '.json';
- d3.json(localePath, function(err, result) {
- window.locale[locale] = result;
- window.locale.current(locale);
- cb();
- });
- } else {
- cb();
- }
- };
-
/* Straight accessors. Avoid using these if you can. */
var ui, connection, history;
return context;
};
+ context.asset = function(_) {
+ var filename = assetPath + _;
+ return assetMap[filename] || filename;
+ };
+
context.imagePath = function(_) {
- var asset = 'img/' + _;
- return assetMap[asset] || assetPath + asset;
+ return context.asset('img/' + _);
+ };
+
+ var locale, localePath;
+ context.locale = function(loc, path) {
+ locale = loc;
+ localePath = path;
+
+ // Also set iD.detect().locale (unless we detected 'en-us' and openstreetmap wants 'en')..
+ if (!(loc.toLowerCase() === 'en' && iD.detect().locale.toLowerCase() === 'en-us')) {
+ iD.detect().locale = loc;
+ }
+
+ return context;
+ };
+
+ context.loadLocale = function(cb) {
+ if (locale && locale !== 'en' && iD.data.locales.indexOf(locale) !== -1) {
+ localePath = localePath || context.asset('locales/' + locale + '.json');
+ d3.json(localePath, function(err, result) {
+ window.locale[locale] = result;
+ window.locale.current(locale);
+ cb();
+ });
+ } else {
+ cb();
+ }
};
};
-iD.version = '1.9.0';
+iD.version = '1.9.1';
(function() {
var detected = {};
.append('link')
.attr('id', 'traffico')
.attr('rel', 'stylesheet')
- .attr('href', context.assetPath() + 'traffico/stylesheets/traffico.css');
+ .attr('href', context.asset('traffico/stylesheets/traffico.css'));
}
function loadSignDefs(context) {
if (!iD.services.mapillary.sign_defs) {
iD.services.mapillary.sign_defs = {};
_.each(['au', 'br', 'ca', 'de', 'us'], function(region) {
- d3.json(context.assetPath() + 'traffico/string-maps/' + region + '-map.json', function(err, data) {
+ d3.json(context.asset('traffico/string-maps/' + region + '-map.json'), function(err, data) {
if (err) return;
if (region === 'de') region = 'eu';
iD.services.mapillary.sign_defs[region] = data;
center = context.map().center(),
zoom = context.map().zoom(),
background = context.background().baseLayerSource(),
- opacity = d3.select('.background-layer').style('opacity'),
+ opacity = d3.selectAll('#map .layer-background').style('opacity'),
loadedTiles = context.connection().loadedTiles(),
baseEntities = context.history().graph().base().entities,
introGraph, name;
context.history().merge(d3.values(iD.Graph().load(introGraph).entities));
context.background().bing();
- d3.select('.background-layer').style('opacity', 1);
+ d3.selectAll('#map .layer-background').style('opacity', 1);
var curtain = d3.curtain();
selection.call(curtain);
steps[steps.length - 1].on('startEditing', function() {
curtain.remove();
navwrap.remove();
- d3.select('.background-layer').style('opacity', opacity);
+ d3.selectAll('#map .layer-background').style('opacity', opacity);
context.connection().toggle(true).flush().loadedTiles(loadedTiles);
context.history().reset().merge(d3.values(baseEntities));
context.background().baseLayerSource(background);
disableTooHigh();
};
};
+iD.ui.PresetIcon = function() {
+ var preset, geometry;
+
+ function presetIcon(selection) {
+ selection.each(render);
+ }
+
+ function render() {
+ var selection = d3.select(this),
+ p = preset.apply(this, arguments),
+ geom = geometry.apply(this, arguments),
+ icon = p.icon || (geom === 'line' ? 'other-line' : 'marker-stroked'),
+ maki = iD.data.featureIcons.hasOwnProperty(icon + '-24');
+
+ if (icon === 'dentist') maki = true; // workaround for dentist icon missing in `maki-sprite.json`
+
+ function tag_classes(p) {
+ var s = '';
+ for (var i in p.tags) {
+ s += ' tag-' + i;
+ if (p.tags[i] !== '*') {
+ s += ' tag-' + i + '-' + p.tags[i];
+ }
+ }
+ return s;
+ }
+
+ var $fill = selection.selectAll('.preset-icon-fill')
+ .data([0]);
+
+ $fill.enter().append('div');
+
+ $fill.attr('class', function() {
+ return 'preset-icon-fill preset-icon-fill-' + geom + tag_classes(p);
+ });
+
+ var $frame = selection.selectAll('.preset-icon-frame')
+ .data([0]);
+
+ $frame.enter()
+ .append('div')
+ .call(iD.svg.Icon('#preset-icon-frame'));
+
+ $frame.attr('class', function() {
+ return 'preset-icon-frame ' + (geom === 'area' ? '' : 'hide');
+ });
+
+
+ var $icon = selection.selectAll('.preset-icon')
+ .data([0]);
+
+ $icon.enter()
+ .append('div')
+ .attr('class', 'preset-icon')
+ .call(iD.svg.Icon(''));
+
+ $icon
+ .attr('class', 'preset-icon preset-icon-' + (maki ? '32' : (geom === 'area' ? '44' : '60')));
+
+ $icon.selectAll('svg')
+ .attr('class', function() {
+ return 'icon ' + icon + tag_classes(p);
+ });
+
+ $icon.selectAll('use') // workaround: maki parking-24 broken?
+ .attr('href', '#' + icon + (maki ? ( icon === 'parking' ? '-18' : '-24') : ''));
+ }
+
+ presetIcon.preset = function(_) {
+ if (!arguments.length) return preset;
+ preset = d3.functor(_);
+ return presetIcon;
+ };
+
+ presetIcon.geometry = function(_) {
+ if (!arguments.length) return geometry;
+ geometry = d3.functor(_);
+ return presetIcon;
+ };
+
+ return presetIcon;
+};
iD.ui.preset = function(context) {
var event = d3.dispatch('change'),
state,
return d3.rebind(presets, event, 'on');
};
-iD.ui.PresetIcon = function() {
- var preset, geometry;
-
- function presetIcon(selection) {
- selection.each(render);
- }
-
- function render() {
- var selection = d3.select(this),
- p = preset.apply(this, arguments),
- geom = geometry.apply(this, arguments),
- icon = p.icon || (geom === 'line' ? 'other-line' : 'marker-stroked'),
- maki = iD.data.featureIcons.hasOwnProperty(icon + '-24');
-
- if (icon === 'dentist') maki = true; // workaround for dentist icon missing in `maki-sprite.json`
-
- function tag_classes(p) {
- var s = '';
- for (var i in p.tags) {
- s += ' tag-' + i;
- if (p.tags[i] !== '*') {
- s += ' tag-' + i + '-' + p.tags[i];
- }
- }
- return s;
- }
-
- var $fill = selection.selectAll('.preset-icon-fill')
- .data([0]);
-
- $fill.enter().append('div');
-
- $fill.attr('class', function() {
- return 'preset-icon-fill preset-icon-fill-' + geom + tag_classes(p);
- });
-
- var $frame = selection.selectAll('.preset-icon-frame')
- .data([0]);
-
- $frame.enter()
- .append('div')
- .call(iD.svg.Icon('#preset-icon-frame'));
-
- $frame.attr('class', function() {
- return 'preset-icon-frame ' + (geom === 'area' ? '' : 'hide');
- });
-
-
- var $icon = selection.selectAll('.preset-icon')
- .data([0]);
-
- $icon.enter()
- .append('div')
- .attr('class', 'preset-icon')
- .call(iD.svg.Icon(''));
-
- $icon
- .attr('class', 'preset-icon preset-icon-' + (maki ? '32' : (geom === 'area' ? '44' : '60')));
-
- $icon.selectAll('svg')
- .attr('class', function() {
- return 'icon ' + icon + tag_classes(p);
- });
-
- $icon.selectAll('use') // workaround: maki parking-24 broken?
- .attr('href', '#' + icon + (maki ? ( icon === 'parking' ? '-18' : '-24') : ''));
- }
-
- presetIcon.preset = function(_) {
- if (!arguments.length) return preset;
- preset = d3.functor(_);
- return presetIcon;
- };
-
- presetIcon.geometry = function(_) {
- if (!arguments.length) return geometry;
- geometry = d3.functor(_);
- return presetIcon;
- };
-
- return presetIcon;
-};
iD.ui.PresetList = function(context) {
var event = d3.dispatch('choose'),
id,
"key": "D",
"annotation": "Linhas/áreas desligadas.",
"not_connected": "Para desligar é necessário selecionar 1 ponto comum a pelo menos 2 linhas ou áreas.",
- "connected_to_hidden": "Não é possível desligar pois este elemento está ligado a outro elemento escondido."
+ "connected_to_hidden": "Não é possível desligar pois este elemento está ligado a outro elemento escondido.",
+ "relation": "Isto não pode ser desconectado porque conecta membros de uma relação."
},
"merge": {
"title": "Combinar",
"warnings": "Avisos",
"modified": "Alterado",
"deleted": "Eliminado",
- "created": "Criado"
+ "created": "Criado",
+ "about_changeset_comments": "Sobre comentários de changesets"
},
"contributors": {
"list": "Edições de {users}",
"description": "Configuração da imagem de fundo",
"percent_brightness": "{opacity}% transparente",
"none": "Nenhum",
+ "best_imagery": "Melhor fonte de imagem para esse lugar",
"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": "Corrigir alinhamento",
+ "imagery_source_faq": "De onde essa imagem vem?",
"reset": "reiniciar",
"minimap": {
"description": "Mini-mapa",
"view_on_osm": "Ver no OpenStreetMap",
"facebook": "Partilhar no Facebook",
"twitter": "Partilhar no Twitter",
- "google": "Partilhar no Google+"
+ "google": "Partilhar no Google+",
+ "help_html": "Suas mudanças devem aparecer na \"Camada padrão\" em poucos minutos. Outras camadas e determinados recursos podem demorar mais.",
+ "help_link_text": "Detalhes"
},
"confirm": {
"okay": "OK",
"zoom": "Enquadrar trilho GPX",
"browse": "Procurar por ficheiro .gpx"
},
+ "mapillary_images": {
+ "tooltip": "Fotos ao nível da rua do Mapillary",
+ "title": "Camada de Fotos (Mapillary)"
+ },
+ "mapillary_signs": {
+ "tooltip": "Placas de trânsito do Mapillary",
+ "title": "Camada de Placas de Trânsito (Mapillary)"
+ },
"mapillary": {
"view_on_mapillary": "Ver esta imagem no Mapillary"
},
}
},
"presets": {
+ "categories": {
+ "category-building": {
+ "name": "Tipos de Edificações"
+ },
+ "category-golf": {
+ "name": "Recursos de Golfe"
+ },
+ "category-landuse": {
+ "name": "Tipos de Uso do Solo"
+ },
+ "category-path": {
+ "name": "Tipos de Caminhos"
+ },
+ "category-rail": {
+ "name": "Tipos de Ferrovias"
+ },
+ "category-restriction": {
+ "name": "Tipos de Restrição"
+ },
+ "category-road": {
+ "name": "Rodovias e Ruas"
+ },
+ "category-route": {
+ "name": "Tipos de Rotas"
+ },
+ "category-water-area": {
+ "name": "Elementos de Água"
+ },
+ "category-water-line": {
+ "name": "Tipos de Cursos d'água"
+ }
+ },
"fields": {
"access": {
"label": "Acesso autorizado",
"shop": {
"label": "Tipo"
},
+ "site": {
+ "label": "Tipo"
+ },
"sloped_curb": {
"label": "Lancil inclinado"
},
"name": "Ligação a uma estrada terciária",
"terms": "Tertiary Link, Ligação Estrada Municipal, Ligação Rodovia Municipal, Ligação Municipal, Ligação Estrada Terciária, Entrada Estrada Municipal, Entrada Rodovia Municipal, Entrada Municipal, Entrada Estrada Terciária, Saída Municipal, Saída Rodovia Municipal, Saída Municipal, Saída Estrada Municipal"
},
+ "highway/track": {
+ "name": "Estrada sem manutenção",
+ "terms": "Estrada de terra, estrada agrícola"
+ },
"highway/traffic_signals": {
"name": "Semáforos",
"terms": "Semáforo, Vermelho, Verde, Amarelo, Sinal, Sinal de Trânsito"
"name": "Rampa para barcos",
"terms": "Slipway"
},
+ "leisure/sports_centre": {
+ "name": "Centro Esportivo / Academia",
+ "terms": "Ginástica, Academia, Ginásio, Escola, Centro de Treinamento, Treinamento, Esportes, Centro de Esportes"
+ },
+ "leisure/sports_centre/swimming": {
+ "name": "Academia de Natação",
+ "terms": "Piscina, Natação, Aquática, Centro Aquático, Saltos ornamentais, Esportes Aquáticos, Polo aquático"
+ },
"leisure/stadium": {
"name": "Estádio",
"terms": "Estádio, Stadium"
"name": "Circuito de corrida (não motorizada)",
"terms": "Racetrack (non-Motorsport), Circuito de Bicicletas"
},
+ "leisure/water_park": {
+ "name": "Parque Aquático",
+ "terms": "Piscina, Parque de diversões, Lazer, Diversão,"
+ },
"line": {
"name": "Linha",
"terms": "Linha, Line"
"name": "Loja de antiguidades",
"terms": "Antiques Shop, Antiguidade, Antiguidades, Antigo, Relíquia, Relíquias"
},
+ "shop/art": {
+ "name": "Loja de Artes",
+ "terms": "Artesanato, Decoração, Objetos artísticos, Objetos decorativos, Quadros, Pintura,"
+ },
"shop/baby_goods": {
"name": "Loja de acessórios para bebés",
"terms": "Baby Goods Store, Loja de Roupa, Carrinho, Brinquedos, Bébé, Bébe, Bebe, bébés"
"name": "Papelaria",
"terms": "Stationery Store, Loja de Material de Escritório"
},
+ "shop/storage_rental": {
+ "name": "Aluguel de Armazenamento",
+ "terms": "Estoque, Armazenamento, Depósito"
+ },
"shop/supermarket": {
"name": "Supermercado / Hipermercado",
"terms": "Hiper-mercado, Hiper mercado, Super-mercado, Super mercado, Compras, Loja, Alimentar, Alimentos"
"name": "Chalé / Casa de férias",
"terms": "Chalet"
},
+ "tourism/gallery": {
+ "name": "Galeria de arte",
+ "terms": "Centro Cultural, Galeria, Exposição, Arte"
+ },
"tourism/guest_house": {
"name": "Casa de hóspedes",
"terms": "Cama e Pequeno Almoço, Cama e Peq. Almoço, Cama e Almoço"