Merge branch 'master' into notes
Conflicts: app/assets/javascripts/browse.js app/assets/javascripts/map.js.erb app/assets/stylesheets/common.css.scss app/views/site/index.html.erb
2
Gemfile
|
@ -23,7 +23,7 @@ gem 'rinku', '>= 1.2.2', :require => 'rails_rinku'
|
|||
gem 'oauth-plugin', '>= 0.4.1', :require => 'oauth-plugin'
|
||||
gem 'open_id_authentication', '>= 1.1.0'
|
||||
gem 'validates_email_format_of', '>= 1.5.1'
|
||||
gem 'composite_primary_keys', '>= 5.0.9'
|
||||
gem 'composite_primary_keys', '>= 5.0.10'
|
||||
gem 'http_accept_language', '>= 1.0.2'
|
||||
gem 'paperclip', '~> 2.0'
|
||||
gem 'deadlock_retry', '>= 1.2.0'
|
||||
|
|
|
@ -40,8 +40,8 @@ GEM
|
|||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.4.0)
|
||||
composite_primary_keys (5.0.9)
|
||||
activerecord (~> 3.2.0, >= 3.2.8)
|
||||
composite_primary_keys (5.0.10)
|
||||
activerecord (~> 3.2.0, >= 3.2.9)
|
||||
deadlock_retry (1.2.0)
|
||||
dynamic_form (1.1.4)
|
||||
ejs (1.1.1)
|
||||
|
@ -173,7 +173,7 @@ DEPENDENCIES
|
|||
SystemTimer (>= 1.1.3)
|
||||
bigdecimal
|
||||
coffee-rails (~> 3.2.1)
|
||||
composite_primary_keys (>= 5.0.9)
|
||||
composite_primary_keys (>= 5.0.10)
|
||||
deadlock_retry (>= 1.2.0)
|
||||
dynamic_form
|
||||
ejs
|
||||
|
|
28
Vendorfile
Normal file
|
@ -0,0 +1,28 @@
|
|||
folder 'vendor/assets' do
|
||||
folder 'leaflet' do
|
||||
from 'https://github.com/CloudMade/Leaflet.git' do
|
||||
file 'leaflet.css', 'dist/leaflet.css'
|
||||
file 'leaflet.ie.css', 'dist/leaflet.ie.css'
|
||||
file 'leaflet.js', 'dist/leaflet-src.js'
|
||||
folder 'images', 'dist/images'
|
||||
end
|
||||
|
||||
from 'https://github.com/tripbirds/leaflet-locationfilter.git' do
|
||||
file 'leaflet.locationfilter.css', 'src/locationfilter.css'
|
||||
file 'leaflet.locationfilter.js', 'src/locationfilter.js'
|
||||
folder 'img', 'src/img'
|
||||
end
|
||||
|
||||
from 'https://github.com/kartena/Leaflet.Pancontrol.git' do
|
||||
file 'leaflet.pan.js', 'src/L.Control.Pan.js'
|
||||
end
|
||||
|
||||
from 'https://github.com/kartena/Leaflet.zoomslider.git' do
|
||||
file 'leaflet.zoom.js', 'src/L.Control.Zoomslider.js'
|
||||
end
|
||||
|
||||
from 'https://github.com/jfirebaugh/leaflet-osm.git' do
|
||||
file 'leaflet.osm.js', 'leaflet-osm.js'
|
||||
end
|
||||
end
|
||||
end
|
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
BIN
app/assets/images/marker-blue.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
app/assets/images/marker-green.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
app/assets/images/marker-red.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
app/assets/images/marker-yellow.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
|
@ -4,7 +4,11 @@
|
|||
//= require jquery.timers
|
||||
//= require jquery.cookie
|
||||
//= require augment
|
||||
//= require openlayers
|
||||
//= require leaflet
|
||||
//= require leaflet.osm
|
||||
//= require leaflet.locationfilter
|
||||
//= require leaflet.pan
|
||||
//= require leaflet.zoom
|
||||
//= require i18n/translations
|
||||
//= require osm
|
||||
//= require piwik
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
$(document).ready(function () {
|
||||
function remoteEditHandler(bbox, select) {
|
||||
var left = bbox.left - 0.0001;
|
||||
var top = bbox.top + 0.0001;
|
||||
var right = bbox.right + 0.0001;
|
||||
var bottom = bbox.bottom - 0.0001;
|
||||
var left = bbox.getWestLng() - 0.0001;
|
||||
var top = bbox.getNorthLat() + 0.0001;
|
||||
var right = bbox.getEastLng() + 0.0001;
|
||||
var bottom = bbox.getSouthLat() - 0.0001;
|
||||
var loaded = false;
|
||||
|
||||
$("#linkloader").load(function () { loaded = true; });
|
||||
|
@ -22,15 +22,17 @@ $(document).ready(function () {
|
|||
}
|
||||
|
||||
var map = createMap("small_map", {
|
||||
controls: [ new OpenLayers.Control.Navigation() ]
|
||||
layerControl: false,
|
||||
panZoomControl: false,
|
||||
attributionControl: false
|
||||
});
|
||||
|
||||
var params = $("#small_map").data();
|
||||
if (params.type == "changeset") {
|
||||
var bbox = new OpenLayers.Bounds(params.minlon, params.minlat, params.maxlon, params.maxlat);
|
||||
var centre = bbox.getCenterLonLat();
|
||||
var bbox = L.latLngBounds([params.minlat, params.minlon],
|
||||
[params.maxlat, params.maxlon]);
|
||||
|
||||
map.zoomToExtent(proj(bbox));
|
||||
map.fitBounds(bbox);
|
||||
addBoxToMap(bbox);
|
||||
|
||||
$("#loading").hide();
|
||||
|
@ -40,6 +42,7 @@ $(document).ready(function () {
|
|||
return remoteEditHandler(bbox);
|
||||
});
|
||||
|
||||
var centre = bbox.getCenter();
|
||||
updatelinks(centre.lon, centre.lat, 16, null, params.minlon, params.minlat, params.maxlon, params.maxlat);
|
||||
} else if (params.type == "note") {
|
||||
var centre = new OpenLayers.LonLat(params.lon, params.lat);
|
||||
|
@ -72,10 +75,6 @@ $(document).ready(function () {
|
|||
$("#browse_map .geolink").show();
|
||||
|
||||
if (extent) {
|
||||
extent = unproj(extent);
|
||||
|
||||
var centre = extent.getCenterLonLat();
|
||||
|
||||
$("a.bbox[data-editor=remote]").click(function () {
|
||||
return remoteEditHandler(extent);
|
||||
});
|
||||
|
@ -87,7 +86,15 @@ $(document).ready(function () {
|
|||
$("#object_larger_map").show();
|
||||
$("#object_edit").show();
|
||||
|
||||
updatelinks(centre.lon, centre.lat, 16, null, extent.left, extent.bottom, extent.right, extent.top, object);
|
||||
var centre = extent.getCenter();
|
||||
updatelinks(centre.lng,
|
||||
centre.lat,
|
||||
16, null,
|
||||
extent.getWestLng(),
|
||||
extent.getSouthLat(),
|
||||
extent.getEastLng(),
|
||||
extent.getNorthLat(),
|
||||
object);
|
||||
} else {
|
||||
$("#small_map").hide();
|
||||
}
|
||||
|
|
|
@ -1,83 +1,63 @@
|
|||
$(document).ready(function () {
|
||||
var highlight;
|
||||
|
||||
function highlightChangeset(id) {
|
||||
var feature = vectors.getFeatureByFid(id);
|
||||
var bounds = feature.geometry.getBounds();
|
||||
|
||||
if (bounds.containsBounds(map.getExtent())) {
|
||||
bounds = map.getExtent().scale(1.1);
|
||||
}
|
||||
|
||||
if (highlight) vectors.removeFeatures(highlight);
|
||||
|
||||
highlight = new OpenLayers.Feature.Vector(bounds.toGeometry(), {}, {
|
||||
strokeWidth: 2,
|
||||
strokeColor: "#ee9900",
|
||||
fillColor: "#ffff55",
|
||||
fillOpacity: 0.5
|
||||
});
|
||||
|
||||
vectors.addFeatures(highlight);
|
||||
|
||||
$("#tr-changeset-" + id).addClass("selected");
|
||||
}
|
||||
|
||||
function unHighlightChangeset(id) {
|
||||
vectors.removeFeatures(highlight);
|
||||
|
||||
$("#tr-changeset-" + id).removeClass("selected");
|
||||
}
|
||||
|
||||
var map = createMap("changeset_list_map", {
|
||||
controls: [
|
||||
new OpenLayers.Control.Navigation(),
|
||||
new OpenLayers.Control.Zoom(),
|
||||
new OpenLayers.Control.SimplePanZoom()
|
||||
]
|
||||
});
|
||||
|
||||
var bounds = new OpenLayers.Bounds();
|
||||
var changesets = [], rects = {};
|
||||
var map = createMap("changeset_list_map");
|
||||
var group = L.featureGroup().addTo(map);
|
||||
|
||||
$("[data-changeset]").each(function () {
|
||||
var changeset = $(this).data('changeset');
|
||||
if (changeset.bbox) {
|
||||
var bbox = new OpenLayers.Bounds(changeset.bbox.minlon, changeset.bbox.minlat, changeset.bbox.maxlon, changeset.bbox.maxlat);
|
||||
|
||||
bounds.extend(bbox);
|
||||
|
||||
addBoxToMap(bbox, changeset.id, true);
|
||||
changeset.bounds = L.latLngBounds([changeset.bbox.minlat, changeset.bbox.minlon],
|
||||
[changeset.bbox.maxlat, changeset.bbox.maxlon]);
|
||||
changesets.push(changeset);
|
||||
}
|
||||
});
|
||||
|
||||
vectors.events.on({
|
||||
"featureselected": function(feature) {
|
||||
highlightChangeset(feature.feature.fid);
|
||||
changesets.sort(function (a, b) {
|
||||
return b.bounds.getSize() - a.bounds.getSize();
|
||||
});
|
||||
|
||||
for (var i = 0; i < changesets.length; ++i) {
|
||||
var changeset = changesets[i],
|
||||
rect = L.rectangle(changeset.bounds,
|
||||
{weight: 2, color: "#ee9900", fillColor: "#ffff55", fillOpacity: 0});
|
||||
rect.id = changeset.id;
|
||||
rects[changeset.id] = rect;
|
||||
rect.addTo(group);
|
||||
}
|
||||
|
||||
function highlightChangeset(id) {
|
||||
rects[id].setStyle({fillOpacity: 0.5});
|
||||
$("#tr-changeset-" + id).addClass("selected");
|
||||
}
|
||||
|
||||
function unHighlightChangeset(id) {
|
||||
rects[id].setStyle({fillOpacity: 0});
|
||||
$("#tr-changeset-" + id).removeClass("selected");
|
||||
}
|
||||
|
||||
group.on({
|
||||
mouseover: function (e) {
|
||||
highlightChangeset(e.layer.id);
|
||||
},
|
||||
"featureunselected": function(feature) {
|
||||
unHighlightChangeset(feature.feature.fid);
|
||||
mouseout: function (e) {
|
||||
unHighlightChangeset(e.layer.id);
|
||||
}
|
||||
});
|
||||
|
||||
var selectControl = new OpenLayers.Control.SelectFeature(vectors, {
|
||||
multiple: false,
|
||||
hover: true
|
||||
$("[data-changeset]").on({
|
||||
mouseover: function () {
|
||||
highlightChangeset($(this).data("changeset").id);
|
||||
},
|
||||
mouseout: function () {
|
||||
unHighlightChangeset($(this).data("changeset").id);
|
||||
}
|
||||
});
|
||||
map.addControl(selectControl);
|
||||
selectControl.activate();
|
||||
|
||||
var params = OSM.mapParams();
|
||||
if (params.bbox) {
|
||||
map.zoomToExtent(proj(new OpenLayers.Bounds(params.minlon, params.minlat, params.maxlon, params.maxlat)));
|
||||
map.fitBounds([[params.minlat, params.minlon],
|
||||
[params.maxlat, params.maxlon]]);
|
||||
} else {
|
||||
map.zoomToExtent(proj(bounds));
|
||||
map.fitBounds(group.getBounds());
|
||||
}
|
||||
|
||||
$("[data-changeset]").mouseover(function() {
|
||||
highlightChangeset($(this).data("changeset").id);
|
||||
});
|
||||
|
||||
$("[data-changeset]").mouseout(function() {
|
||||
unHighlightChangeset($(this).data("changeset").id);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -2,18 +2,15 @@ $(document).ready(function () {
|
|||
var marker;
|
||||
|
||||
function setLocation(e) {
|
||||
closeMapPopup();
|
||||
|
||||
var lonlat = getEventPosition(e);
|
||||
|
||||
$("#latitude").val(lonlat.lat);
|
||||
$("#longitude").val(lonlat.lon);
|
||||
$("#latitude").val(e.latlng.lat);
|
||||
$("#longitude").val(e.latlng.lng);
|
||||
|
||||
if (marker) {
|
||||
removeMarkerFromMap(marker);
|
||||
map.removeLayer(marker);
|
||||
}
|
||||
|
||||
marker = addMarkerToMap(lonlat, null, I18n.t('diary_entry.edit.marker_text'));
|
||||
marker = L.marker(e.latlng, {icon: getUserIcon()}).addTo(map)
|
||||
.bindPopup(I18n.t('diary_entry.edit.marker_text'));
|
||||
}
|
||||
|
||||
$("#usemap").click(function (e) {
|
||||
|
@ -23,15 +20,16 @@ $(document).ready(function () {
|
|||
$("#usemap").hide();
|
||||
|
||||
var params = $("#map").data();
|
||||
var centre = new OpenLayers.LonLat(params.lon, params.lat);
|
||||
var centre = [params.lat, params.lon];
|
||||
var map = createMap("map");
|
||||
|
||||
setMapCenter(centre, params.zoom);
|
||||
map.setView(centre, params.zoom);
|
||||
|
||||
if ($("#latitude").val() && $("#longitude").val()) {
|
||||
marker = addMarkerToMap(centre, null, I18n.t('diary_entry.edit.marker_text'));
|
||||
marker = L.marker(centre, {icon: getUserIcon()}).addTo(map)
|
||||
.bindPopup(I18n.t('diary_entry.edit.marker_text'));
|
||||
}
|
||||
|
||||
map.events.register("click", map, setLocation);
|
||||
map.on("click", setLocation);
|
||||
});
|
||||
});
|
||||
|
|
44
app/assets/javascripts/embed.js.erb
Normal file
|
@ -0,0 +1,44 @@
|
|||
//= require leaflet
|
||||
//= require leaflet.osm
|
||||
|
||||
window.onload = function () {
|
||||
var query = (window.location.search || '?').substr(1),
|
||||
args = {};
|
||||
|
||||
query.replace(/([^&=]+)=?([^&]*)(?:&+|$)/g, function(match, key, value) {
|
||||
value = value.split(",");
|
||||
if (value.length == 1)
|
||||
value = value[0];
|
||||
args[key] = value;
|
||||
});
|
||||
|
||||
var map = L.map("map");
|
||||
map.attributionControl.setPrefix('');
|
||||
|
||||
if (!args.layer || args.layer == "mapnik" || args.layer == "osmarender") {
|
||||
new L.OSM.Mapnik().addTo(map);
|
||||
} else if (args.layer == "cyclemap" || args.layer == "cycle map") {
|
||||
new L.OSM.CycleMap().addTo(map);
|
||||
} else if (args.layer == "transportmap") {
|
||||
new L.OSM.TransportMap().addTo(map);
|
||||
} else if (args.layer == "mapquest") {
|
||||
new L.OSM.MapQuestOpen().addTo(map);
|
||||
}
|
||||
|
||||
if (args.marker) {
|
||||
L.marker(args.marker, {icon: L.icon({
|
||||
iconUrl: <%= asset_path('images/marker-icon.png').to_json %>,
|
||||
iconSize: new L.Point(25, 41),
|
||||
iconAnchor: new L.Point(12, 41),
|
||||
shadowUrl: <%= asset_path('images/marker-shadow.png').to_json %>,
|
||||
shadowSize: new L.Point(41, 41)
|
||||
})}).addTo(map);
|
||||
}
|
||||
|
||||
if (args.bbox) {
|
||||
map.fitBounds([L.latLng(args.bbox[1], args.bbox[0]),
|
||||
L.latLng(args.bbox[3], args.bbox[2])])
|
||||
} else {
|
||||
map.fitWorld();
|
||||
}
|
||||
};
|
|
@ -1,27 +1,33 @@
|
|||
//= require_self
|
||||
//= require index/browse
|
||||
//= require index/export
|
||||
//= require index/key
|
||||
//= require index/notes
|
||||
|
||||
$(document).ready(function () {
|
||||
var permalinks = $("#permalink").html();
|
||||
var marker;
|
||||
var params = OSM.mapParams();
|
||||
var map = createMap("map");
|
||||
|
||||
map.events.register("moveend", map, updateLocation);
|
||||
map.events.register("changelayer", map, updateLocation);
|
||||
L.control.scale().addTo(map);
|
||||
|
||||
map.attributionControl.setPrefix(permalinks);
|
||||
|
||||
map.on("moveend baselayerchange", updateLocation);
|
||||
|
||||
if (!params.object_zoom) {
|
||||
if (params.bbox) {
|
||||
var bbox = new OpenLayers.Bounds(params.minlon, params.minlat, params.maxlon, params.maxlat);
|
||||
var bbox = L.latLngBounds([params.minlat, params.minlon],
|
||||
[params.maxlat, params.maxlon]);
|
||||
|
||||
map.zoomToExtent(proj(bbox));
|
||||
map.fitBounds(bbox);
|
||||
|
||||
if (params.box) {
|
||||
addBoxToMap(bbox);
|
||||
}
|
||||
} else {
|
||||
setMapCenter(new OpenLayers.LonLat(params.lon, params.lat), params.zoom);
|
||||
map.setView([params.lat, params.lon], params.zoom);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,7 +36,7 @@ $(document).ready(function () {
|
|||
}
|
||||
|
||||
if (params.marker) {
|
||||
marker = addMarkerToMap(new OpenLayers.LonLat(params.mlon, params.mlat));
|
||||
marker = L.marker([params.mlat, params.mlon], {icon: getUserIcon()}).addTo(map);
|
||||
}
|
||||
|
||||
if (params.object) {
|
||||
|
@ -39,46 +45,56 @@ $(document).ready(function () {
|
|||
|
||||
handleResize();
|
||||
|
||||
$("body").on("click", "a.set_position", function () {
|
||||
$("body").on("click", "a.set_position", function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var data = $(this).data();
|
||||
var centre = new OpenLayers.LonLat(data.lon, data.lat);
|
||||
var centre = L.latLng(data.lat, data.lon);
|
||||
|
||||
if (data.minLon && data.minLat && data.maxLon && data.maxLat) {
|
||||
var bbox = new OpenLayers.Bounds(data.minLon, data.minLat, data.maxLon, data.maxLat);
|
||||
|
||||
map.zoomToExtent(proj(bbox));
|
||||
map.fitBounds([[data.minLat, data.minLon],
|
||||
[data.maxLat, data.maxLon]]);
|
||||
} else {
|
||||
setMapCenter(centre, data.zoom);
|
||||
map.setView(centre, data.zoom);
|
||||
}
|
||||
|
||||
if (marker) {
|
||||
removeMarkerFromMap(marker);
|
||||
map.removeLayer(marker);
|
||||
}
|
||||
|
||||
marker = addMarkerToMap(centre, getArrowIcon());
|
||||
|
||||
return false;
|
||||
marker = L.marker(centre, {icon: getUserIcon()}).addTo(map);
|
||||
});
|
||||
|
||||
function updateLocation() {
|
||||
var lonlat = unproj(map.getCenter());
|
||||
var center = map.getCenter();
|
||||
var zoom = map.getZoom();
|
||||
var layers = getMapLayers();
|
||||
var extents = unproj(map.getExtent());
|
||||
var extents = map.getBounds();
|
||||
|
||||
updatelinks(center.lng,
|
||||
center.lat,
|
||||
zoom,
|
||||
layers,
|
||||
extents.getWestLng(),
|
||||
extents.getSouthLat(),
|
||||
extents.getEastLng(),
|
||||
extents.getNorthLat(),
|
||||
params.object);
|
||||
|
||||
var expiry = new Date();
|
||||
|
||||
updatelinks(lonlat.lon, lonlat.lat, zoom, layers, extents.left, extents.bottom, extents.right, extents.top, params.object);
|
||||
|
||||
expiry.setYear(expiry.getFullYear() + 10);
|
||||
$.cookie("_osm_location", [lonlat.lon, lonlat.lat, zoom, layers].join("|"), {expires: expiry});
|
||||
$.cookie("_osm_location", [center.lng, center.lat, zoom, layers].join("|"), {expires: expiry});
|
||||
}
|
||||
|
||||
function remoteEditHandler(event) {
|
||||
var extent = unproj(map.getExtent());
|
||||
function remoteEditHandler() {
|
||||
var extent = map.getBounds();
|
||||
var loaded = false;
|
||||
|
||||
$("#linkloader").load(function () { loaded = true; });
|
||||
$("#linkloader").attr("src", "http://127.0.0.1:8111/load_and_zoom?left=" + extent.left + "&top=" + extent.top + "&right=" + extent.right + "&bottom=" + extent.bottom);
|
||||
$("#linkloader").attr("src", "http://127.0.0.1:8111/load_and_zoom?left=" + extent.getWestLng()
|
||||
+ "&bottom=" + extent.getSouthLat()
|
||||
+ "&right=" + extent.getEastLng()
|
||||
+ "&top=" + extent.getNorthLat());
|
||||
|
||||
setTimeout(function () {
|
||||
if (!loaded) alert(I18n.t('site.index.remote_failed'));
|
||||
|
@ -93,25 +109,18 @@ $(document).ready(function () {
|
|||
remoteEditHandler();
|
||||
}
|
||||
|
||||
$(window).resize(function() {
|
||||
var centre = map.getCenter();
|
||||
var zoom = map.getZoom();
|
||||
|
||||
handleResize();
|
||||
|
||||
map.setCenter(centre, zoom);
|
||||
});
|
||||
$(window).resize(handleResize);
|
||||
|
||||
$("#search_form").submit(function () {
|
||||
var extent = unproj(map.getExtent());
|
||||
var bounds = map.getBounds();
|
||||
|
||||
$("#sidebar_title").html(I18n.t('site.sidebar.search_results'));
|
||||
$("#sidebar_content").load($(this).attr("action"), {
|
||||
query: $("#query").val(),
|
||||
minlon: extent.left,
|
||||
minlat: extent.bottom,
|
||||
maxlon: extent.right,
|
||||
maxlat: extent.top
|
||||
minlon: bounds.getWestLng(),
|
||||
minlat: bounds.getSouthLat(),
|
||||
maxlon: bounds.getEastLng(),
|
||||
maxlat: bounds.getNorthLat()
|
||||
}, openSidebar);
|
||||
|
||||
return false;
|
||||
|
|
|
@ -3,465 +3,328 @@
|
|||
//= require templates/browse/feature_history
|
||||
|
||||
$(document).ready(function () {
|
||||
$("#show_data").click(function (e) {
|
||||
$.ajax({ url: $(this).attr('href'), success: function (sidebarHtml) {
|
||||
startBrowse(sidebarHtml);
|
||||
}});
|
||||
e.preventDefault();
|
||||
var browseBounds;
|
||||
var layersById;
|
||||
var selectedLayer;
|
||||
var browseObjectList;
|
||||
var areasHidden = false;
|
||||
var locationFilter;
|
||||
|
||||
var dataLayer = new L.OSM.DataLayer(null, {
|
||||
styles: {
|
||||
way: {
|
||||
weight: 3,
|
||||
color: "#000000",
|
||||
opacity: 0.4
|
||||
},
|
||||
area: {
|
||||
weight: 3,
|
||||
color: "#ff0000"
|
||||
},
|
||||
node: {
|
||||
color: "#00ff00"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
dataLayer.isWayArea = function () {
|
||||
return !areasHidden && L.OSM.DataLayer.prototype.isWayArea.apply(this, arguments);
|
||||
};
|
||||
|
||||
dataLayer.on("click", function (e) {
|
||||
onSelect(e.layer);
|
||||
});
|
||||
|
||||
if (OSM.STATUS != 'api_offline' && OSM.STATUS != 'database_offline') {
|
||||
map.layersControl.addOverlay(dataLayer, I18n.t("browse.start_rjs.data_layer_name"));
|
||||
}
|
||||
|
||||
map.on('layeradd', function (e) {
|
||||
if (e.layer === dataLayer) {
|
||||
$.ajax({ url: "/browse/start", success: function (sidebarHtml) {
|
||||
startBrowse(sidebarHtml);
|
||||
}});
|
||||
}
|
||||
});
|
||||
|
||||
map.on('layerremove', function (e) {
|
||||
if (e.layer === dataLayer) {
|
||||
closeSidebar();
|
||||
}
|
||||
});
|
||||
|
||||
function startBrowse(sidebarHtml) {
|
||||
var browseBoxControl;
|
||||
var browseMode = "auto";
|
||||
var browseBounds;
|
||||
var browseFeatureList;
|
||||
var browseActiveFeature;
|
||||
var browseDataLayer;
|
||||
var browseSelectControl;
|
||||
var browseObjectList;
|
||||
var areasHidden = false;
|
||||
locationFilter = new L.LocationFilter({
|
||||
enableButton: false,
|
||||
adjustButton: false
|
||||
}).addTo(map);
|
||||
|
||||
OpenLayers.Feature.Vector.style['default'].strokeWidth = 3;
|
||||
OpenLayers.Feature.Vector.style['default'].cursor = "pointer";
|
||||
|
||||
map.dataLayer.active = true;
|
||||
locationFilter.on("change", getData);
|
||||
|
||||
$("#sidebar_title").html(I18n.t('browse.start_rjs.data_frame_title'));
|
||||
$("#sidebar_content").html(sidebarHtml);
|
||||
|
||||
openSidebar();
|
||||
|
||||
var vectors = new OpenLayers.Layer.Vector();
|
||||
map.on("moveend", updateData);
|
||||
updateData();
|
||||
|
||||
browseBoxControl = new OpenLayers.Control.DrawFeature(vectors, OpenLayers.Handler.RegularPolygon, {
|
||||
handlerOptions: {
|
||||
sides: 4,
|
||||
snapAngle: 90,
|
||||
irregular: true,
|
||||
persist: true
|
||||
}
|
||||
});
|
||||
browseBoxControl.handler.callbacks.done = endDrag;
|
||||
map.addControl(browseBoxControl);
|
||||
|
||||
map.events.register("moveend", map, updateData);
|
||||
map.events.triggerEvent("moveend");
|
||||
|
||||
$("#browse_select_view").click(useMap);
|
||||
|
||||
$("#browse_select_box").click(startDrag);
|
||||
$("#browse_filter_toggle").toggle(enableFilter, disableFilter);
|
||||
|
||||
$("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.hide_areas'));
|
||||
$("#browse_hide_areas_box").show();
|
||||
$("#browse_hide_areas_box").click(hideAreas);
|
||||
|
||||
function updateData() {
|
||||
if (browseMode == "auto") {
|
||||
if (map.getZoom() >= 15) {
|
||||
useMap(false);
|
||||
} else {
|
||||
setStatus(I18n.t('browse.start_rjs.zoom_or_select'));
|
||||
}
|
||||
}
|
||||
}
|
||||
$("#browse_hide_areas_box").toggle(hideAreas, showAreas);
|
||||
|
||||
$("#sidebar").one("closed", function () {
|
||||
if (map.dataLayer.active) {
|
||||
map.dataLayer.active = false;
|
||||
|
||||
if (browseSelectControl) {
|
||||
browseSelectControl.destroy();
|
||||
browseSelectControl = null;
|
||||
}
|
||||
|
||||
if (browseBoxControl) {
|
||||
browseBoxControl.destroy();
|
||||
browseBoxControl = null;
|
||||
}
|
||||
|
||||
if (browseActiveFeature) {
|
||||
browseActiveFeature.destroy();
|
||||
browseActiveFeature = null;
|
||||
}
|
||||
|
||||
if (browseDataLayer) {
|
||||
browseDataLayer.destroy();
|
||||
browseDataLayer = null;
|
||||
}
|
||||
|
||||
map.dataLayer.setVisibility(false);
|
||||
map.events.unregister("moveend", map, updateData);
|
||||
}
|
||||
map.removeLayer(dataLayer);
|
||||
map.removeLayer(locationFilter);
|
||||
map.off("moveend", updateData);
|
||||
locationFilter.off("change", getData);
|
||||
});
|
||||
}
|
||||
|
||||
function startDrag() {
|
||||
$("#browse_select_box").html(I18n.t('browse.start_rjs.drag_a_box'));
|
||||
|
||||
browseBoxControl.activate();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function useMap(reload) {
|
||||
var bounds = map.getExtent();
|
||||
var projected = unproj(bounds);
|
||||
|
||||
if (!browseBounds || !browseBounds.containsBounds(projected)) {
|
||||
var center = bounds.getCenterLonLat();
|
||||
var tileWidth = bounds.getWidth() * 1.2;
|
||||
var tileHeight = bounds.getHeight() * 1.2;
|
||||
var tileBounds = new OpenLayers.Bounds(center.lon - (tileWidth / 2),
|
||||
center.lat - (tileHeight / 2),
|
||||
center.lon + (tileWidth / 2),
|
||||
center.lat + (tileHeight / 2));
|
||||
|
||||
browseBounds = tileBounds;
|
||||
getData(tileBounds, reload);
|
||||
|
||||
browseMode = "auto";
|
||||
|
||||
$("#browse_select_view").hide();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function hideAreas() {
|
||||
$("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.show_areas'));
|
||||
$("#browse_hide_areas_box").show();
|
||||
$("#browse_hide_areas_box").click(showAreas);
|
||||
|
||||
areasHidden = true;
|
||||
|
||||
useMap(true);
|
||||
}
|
||||
|
||||
function showAreas() {
|
||||
$("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.hide_areas'));
|
||||
$("#browse_hide_areas_box").show();
|
||||
$("#browse_hide_areas_box").click(hideAreas);
|
||||
|
||||
areasHidden = false;
|
||||
|
||||
useMap(true);
|
||||
}
|
||||
|
||||
function endDrag(bbox) {
|
||||
var bounds = bbox.getBounds();
|
||||
var projected = unproj(bounds);
|
||||
|
||||
browseBoxControl.deactivate();
|
||||
browseBounds = projected;
|
||||
getData(bounds);
|
||||
|
||||
browseMode = "manual";
|
||||
|
||||
$("#browse_select_box").html(I18n.t('browse.start_rjs.manually_select'));
|
||||
$("#browse_select_view").show();
|
||||
}
|
||||
|
||||
function displayFeatureWarning(count, limit, callback) {
|
||||
clearStatus();
|
||||
|
||||
var div = document.createElement("div");
|
||||
|
||||
var p = document.createElement("p");
|
||||
p.appendChild(document.createTextNode(I18n.t("browse.start_rjs.loaded_an_area_with_num_features", { num_features: count, max_features: limit })));
|
||||
div.appendChild(p);
|
||||
|
||||
var input = document.createElement("input");
|
||||
input.type = "submit";
|
||||
input.value = I18n.t('browse.start_rjs.load_data');
|
||||
input.onclick = callback;
|
||||
div.appendChild(input);
|
||||
|
||||
$("#browse_content").html("");
|
||||
$("#browse_content").append(div);
|
||||
}
|
||||
|
||||
function customDataLoader(resp, options) {
|
||||
if (map.dataLayer.active) {
|
||||
var request = resp.priv;
|
||||
var doc = request.responseXML;
|
||||
|
||||
if (!doc || !doc.documentElement) {
|
||||
doc = request.responseText;
|
||||
function updateData() {
|
||||
if (!locationFilter.isEnabled()) {
|
||||
if (map.getZoom() >= 15) {
|
||||
var bounds = map.getBounds();
|
||||
if (!browseBounds || !browseBounds.contains(bounds)) {
|
||||
browseBounds = bounds;
|
||||
getData();
|
||||
}
|
||||
|
||||
resp.features = this.format.read(doc);
|
||||
|
||||
if (!this.maxFeatures || resp.features.length <= this.maxFeatures) {
|
||||
options.callback.call(options.scope, resp);
|
||||
} else {
|
||||
displayFeatureWarning(resp.features.length, this.maxFeatures, function () {
|
||||
options.callback.call(options.scope, resp);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getData(bounds, reload) {
|
||||
var projected = unproj(bounds);
|
||||
var size = projected.getWidth() * projected.getHeight();
|
||||
|
||||
if (size > OSM.MAX_REQUEST_AREA) {
|
||||
setStatus(I18n.t("browse.start_rjs.unable_to_load_size", { max_bbox_size: OSM.MAX_REQUEST_AREA, bbox_size: size }));
|
||||
} else {
|
||||
loadData("/api/" + OSM.API_VERSION + "/map?bbox=" + projected.toBBOX(), reload);
|
||||
setStatus(I18n.t('browse.start_rjs.zoom_or_select'));
|
||||
}
|
||||
}
|
||||
|
||||
function loadData(url, reload) {
|
||||
setStatus(I18n.t('browse.start_rjs.loading'));
|
||||
|
||||
$("#browse_content").empty();
|
||||
|
||||
var formatOptions = {
|
||||
checkTags: true,
|
||||
interestingTagsExclude: ['source','source_ref','source:ref','history','attribution','created_by','tiger:county','tiger:tlid','tiger:upload_uuid']
|
||||
};
|
||||
|
||||
if (areasHidden) formatOptions.areaTags = [];
|
||||
|
||||
if (!browseDataLayer || reload) {
|
||||
var style = new OpenLayers.Style();
|
||||
|
||||
style.addRules([new OpenLayers.Rule({
|
||||
symbolizer: {
|
||||
Polygon: { fillColor: '#ff0000', strokeColor: '#ff0000' },
|
||||
Line: { fillColor: '#ffff00', strokeColor: '#000000', strokeOpacity: '0.4' },
|
||||
Point: { fillColor: '#00ff00', strokeColor: '#00ff00' }
|
||||
}
|
||||
})]);
|
||||
|
||||
if (browseDataLayer) browseDataLayer.destroyFeatures();
|
||||
|
||||
/*
|
||||
* Modern browsers are quite happy showing far more than 100 features in
|
||||
* the data browser, so increase the limit to 2000 by default, but keep
|
||||
* it restricted to 500 for IE8 and 100 for older IEs.
|
||||
*/
|
||||
var maxFeatures = 2000;
|
||||
|
||||
/*@cc_on
|
||||
if (navigator.appVersion < 8) {
|
||||
maxFeatures = 100;
|
||||
} else if (navigator.appVersion < 9) {
|
||||
maxFeatures = 500;
|
||||
}
|
||||
@*/
|
||||
|
||||
browseDataLayer = new OpenLayers.Layer.Vector("Data", {
|
||||
strategies: [
|
||||
new OpenLayers.Strategy.Fixed()
|
||||
],
|
||||
protocol: new OpenLayers.Protocol.HTTP({
|
||||
url: url,
|
||||
format: new OpenLayers.Format.OSM(formatOptions),
|
||||
maxFeatures: maxFeatures,
|
||||
handleRead: customDataLoader
|
||||
}),
|
||||
projection: new OpenLayers.Projection("EPSG:4326"),
|
||||
displayInLayerSwitcher: false,
|
||||
styleMap: new OpenLayers.StyleMap({
|
||||
'default': style,
|
||||
'select': { strokeColor: '#0000ff', strokeWidth: 8 }
|
||||
})
|
||||
});
|
||||
browseDataLayer.events.register("loadend", browseDataLayer, dataLoaded );
|
||||
map.addLayer(browseDataLayer);
|
||||
|
||||
browseSelectControl = new OpenLayers.Control.SelectFeature(browseDataLayer, { onSelect: onFeatureSelect });
|
||||
browseSelectControl.handlers.feature.stopDown = false;
|
||||
browseSelectControl.handlers.feature.stopUp = false;
|
||||
map.addControl(browseSelectControl);
|
||||
browseSelectControl.activate();
|
||||
} else {
|
||||
browseDataLayer.destroyFeatures();
|
||||
browseDataLayer.refresh({ url: url });
|
||||
}
|
||||
|
||||
browseActiveFeature = null;
|
||||
}
|
||||
|
||||
function dataLoaded() {
|
||||
if (this.map.dataLayer.active) {
|
||||
clearStatus();
|
||||
|
||||
var features = [];
|
||||
for (var i = 0; i < this.features.length; i++) {
|
||||
var feature = this.features[i];
|
||||
features.push({
|
||||
typeName: featureTypeName(feature),
|
||||
url: "/browse/" + featureType(feature) + "/" + feature.osm_id,
|
||||
name: featureName(feature),
|
||||
id: feature.id
|
||||
});
|
||||
}
|
||||
|
||||
browseObjectList = $(JST["templates/browse/feature_list"]({
|
||||
features: features,
|
||||
url: this.protocol.url
|
||||
}))[0];
|
||||
|
||||
loadObjectList();
|
||||
}
|
||||
}
|
||||
|
||||
function viewFeatureLink() {
|
||||
var feature = browseDataLayer.getFeatureById($(this).data("feature-id"));
|
||||
var layer = feature.layer;
|
||||
|
||||
for (var i = 0; i < layer.selectedFeatures.length; i++) {
|
||||
var f = layer.selectedFeatures[i];
|
||||
layer.drawFeature(f, layer.styleMap.createSymbolizer(f, "default"));
|
||||
}
|
||||
|
||||
onFeatureSelect(feature);
|
||||
|
||||
if (browseMode != "auto") {
|
||||
map.setCenter(feature.geometry.getBounds().getCenterLonLat());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function loadObjectList() {
|
||||
$("#browse_content").html(browseObjectList);
|
||||
$("#browse_content").find("a[data-feature-id]").click(viewFeatureLink);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function onFeatureSelect(feature) {
|
||||
// Unselect previously selected feature
|
||||
if (browseActiveFeature) {
|
||||
browseActiveFeature.layer.drawFeature(
|
||||
browseActiveFeature,
|
||||
browseActiveFeature.layer.styleMap.createSymbolizer(browseActiveFeature, "default")
|
||||
);
|
||||
}
|
||||
|
||||
// Redraw in selected style
|
||||
feature.layer.drawFeature(
|
||||
feature, feature.layer.styleMap.createSymbolizer(feature, "select")
|
||||
);
|
||||
|
||||
// If the current object is the list, don't innerHTML="", since that could clear it.
|
||||
if ($("#browse_content").firstChild == browseObjectList) {
|
||||
$("#browse_content").removeChild(browseObjectList);
|
||||
} else {
|
||||
$("#browse_content").empty();
|
||||
}
|
||||
|
||||
$("#browse_content").html(JST["templates/browse/feature"]({
|
||||
name: featureNameSelect(feature),
|
||||
url: "/browse/" + featureType(feature) + "/" + feature.osm_id,
|
||||
attributes: feature.attributes
|
||||
}));
|
||||
|
||||
$("#browse_content").find("a.browse_show_list").click(loadObjectList);
|
||||
$("#browse_content").find("a.browse_show_history").click(loadHistory);
|
||||
|
||||
// Stash the currently drawn feature
|
||||
browseActiveFeature = feature;
|
||||
}
|
||||
|
||||
function loadHistory() {
|
||||
$(this).attr("href", "").text(I18n.t('browse.start_rjs.wait'));
|
||||
|
||||
var feature = browseActiveFeature;
|
||||
|
||||
$.ajax({
|
||||
url: "/api/" + OSM.API_VERSION + "/" + featureType(feature) + "/" + feature.osm_id + "/history",
|
||||
success: function (xml) {
|
||||
if (browseActiveFeature != feature || $("#browse_content").firstChild == browseObjectList) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(this).remove();
|
||||
|
||||
var history = [];
|
||||
var nodes = xml.getElementsByTagName(featureType(feature));
|
||||
for (var i = nodes.length - 1; i >= 0; i--) {
|
||||
history.push({
|
||||
user: nodes[i].getAttribute("user") || I18n.t('browse.start_rjs.private_user'),
|
||||
timestamp: nodes[i].getAttribute("timestamp")
|
||||
});
|
||||
}
|
||||
|
||||
$("#browse_content").append(JST["templates/browse/feature_history"]({
|
||||
name: featureNameHistory(feature),
|
||||
url: "/browse/" + featureType(feature) + "/" + feature.osm_id,
|
||||
history: history
|
||||
}));
|
||||
}.bind(this)
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function featureType(feature) {
|
||||
if (feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
|
||||
return "node";
|
||||
} else {
|
||||
return "way";
|
||||
}
|
||||
}
|
||||
|
||||
function featureTypeName(feature) {
|
||||
if (featureType(feature) == "node") {
|
||||
return I18n.t('browse.start_rjs.object_list.type.node');
|
||||
} else if (featureType(feature) == "way") {
|
||||
return I18n.t('browse.start_rjs.object_list.type.way');
|
||||
}
|
||||
}
|
||||
|
||||
function featureName(feature) {
|
||||
var lang = $('html').attr('lang');
|
||||
if (feature.attributes['name:' + lang]) {
|
||||
return feature.attributes['name:' + lang];
|
||||
} else if (feature.attributes.name) {
|
||||
return feature.attributes.name;
|
||||
} else {
|
||||
return feature.osm_id;
|
||||
}
|
||||
}
|
||||
|
||||
function featureNameSelect(feature) {
|
||||
var lang = $('html').attr('lang');
|
||||
if (feature.attributes['name:' + lang]) {
|
||||
return feature.attributes['name:' + lang];
|
||||
} else if (feature.attributes.name) {
|
||||
return feature.attributes.name;
|
||||
} else if (featureType(feature) == "node") {
|
||||
return I18n.t("browse.start_rjs.object_list.selected.type.node", { id: feature.osm_id });
|
||||
} else if (featureType(feature) == "way") {
|
||||
return I18n.t("browse.start_rjs.object_list.selected.type.way", { id: feature.osm_id });
|
||||
}
|
||||
}
|
||||
|
||||
function featureNameHistory(feature) {
|
||||
var lang = $('html').attr('lang');
|
||||
if (feature.attributes['name:' + lang]) {
|
||||
return feature.attributes['name:' + lang];
|
||||
} else if (feature.attributes.name) {
|
||||
return feature.attributes.name;
|
||||
} else if (featureType(feature) == "node") {
|
||||
return I18n.t("browse.start_rjs.object_list.history.type.node", { id: feature.osm_id });
|
||||
} else if (featureType(feature) == "way") {
|
||||
return I18n.t("browse.start_rjs.object_list.history.type.way", { id: feature.osm_id });
|
||||
}
|
||||
}
|
||||
|
||||
function setStatus(status) {
|
||||
$("#browse_status").html(status);
|
||||
$("#browse_status").show();
|
||||
}
|
||||
|
||||
function clearStatus() {
|
||||
$("#browse_status").html("");
|
||||
$("#browse_status").hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function enableFilter() {
|
||||
$("#browse_filter_toggle").html(I18n.t('browse.start_rjs.view_data'));
|
||||
locationFilter.setBounds(map.getBounds().pad(-0.2));
|
||||
locationFilter.enable();
|
||||
getData();
|
||||
}
|
||||
|
||||
function disableFilter() {
|
||||
$("#browse_filter_toggle").html(I18n.t('browse.start_rjs.manually_select'));
|
||||
locationFilter.disable();
|
||||
getData();
|
||||
}
|
||||
|
||||
function hideAreas() {
|
||||
$("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.show_areas'));
|
||||
areasHidden = true;
|
||||
getData();
|
||||
}
|
||||
|
||||
function showAreas() {
|
||||
$("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.hide_areas'));
|
||||
areasHidden = false;
|
||||
getData();
|
||||
}
|
||||
|
||||
function displayFeatureWarning(count, limit, callback) {
|
||||
clearStatus();
|
||||
|
||||
var div = document.createElement("div");
|
||||
|
||||
var p = document.createElement("p");
|
||||
p.appendChild(document.createTextNode(I18n.t("browse.start_rjs.loaded_an_area_with_num_features", { num_features: count, max_features: limit })));
|
||||
div.appendChild(p);
|
||||
|
||||
var input = document.createElement("input");
|
||||
input.type = "submit";
|
||||
input.value = I18n.t('browse.start_rjs.load_data');
|
||||
input.onclick = callback;
|
||||
div.appendChild(input);
|
||||
|
||||
$("#browse_content").html("");
|
||||
$("#browse_content").append(div);
|
||||
}
|
||||
|
||||
function getData() {
|
||||
var bounds = locationFilter.isEnabled() ? locationFilter.getBounds() : map.getBounds();
|
||||
var size = bounds.getSize();
|
||||
|
||||
if (size > OSM.MAX_REQUEST_AREA) {
|
||||
setStatus(I18n.t("browse.start_rjs.unable_to_load_size", { max_bbox_size: OSM.MAX_REQUEST_AREA, bbox_size: size }));
|
||||
return;
|
||||
}
|
||||
|
||||
setStatus(I18n.t('browse.start_rjs.loading'));
|
||||
|
||||
var url = "/api/" + OSM.API_VERSION + "/map?bbox=" + bounds.toBBOX();
|
||||
|
||||
/*
|
||||
* Modern browsers are quite happy showing far more than 100 features in
|
||||
* the data browser, so increase the limit to 2000 by default, but keep
|
||||
* it restricted to 500 for IE8 and 100 for older IEs.
|
||||
*/
|
||||
var maxFeatures = 2000;
|
||||
|
||||
/*@cc_on
|
||||
if (navigator.appVersion < 8) {
|
||||
maxFeatures = 100;
|
||||
} else if (navigator.appVersion < 9) {
|
||||
maxFeatures = 500;
|
||||
}
|
||||
@*/
|
||||
|
||||
$.ajax({
|
||||
url: url,
|
||||
success: function (xml) {
|
||||
clearStatus();
|
||||
|
||||
$("#browse_content").empty();
|
||||
dataLayer.clearLayers();
|
||||
selectedLayer = null;
|
||||
|
||||
var features = dataLayer.buildFeatures(xml);
|
||||
|
||||
function addFeatures() {
|
||||
dataLayer.addData(features);
|
||||
|
||||
layersById = {};
|
||||
|
||||
dataLayer.eachLayer(function (layer) {
|
||||
var feature = layer.feature;
|
||||
layersById[feature.id] = layer;
|
||||
$.extend(feature, {
|
||||
typeName: featureTypeName(feature),
|
||||
url: "/browse/" + feature.type + "/" + feature.id,
|
||||
name: featureName(feature)
|
||||
});
|
||||
});
|
||||
|
||||
browseObjectList = $(JST["templates/browse/feature_list"]({
|
||||
features: features,
|
||||
url: url
|
||||
}))[0];
|
||||
|
||||
loadObjectList();
|
||||
}
|
||||
|
||||
if (features.length < maxFeatures) {
|
||||
addFeatures();
|
||||
} else {
|
||||
displayFeatureWarning(features.length, maxFeatures, addFeatures);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function viewFeatureLink() {
|
||||
var layer = layersById[$(this).data("feature-id")];
|
||||
|
||||
onSelect(layer);
|
||||
|
||||
if (locationFilter.isEnabled()) {
|
||||
map.panTo(layer.getBounds().getCenter());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function loadObjectList() {
|
||||
$("#browse_content").html(browseObjectList);
|
||||
$("#browse_content").find("a[data-feature-id]").click(viewFeatureLink);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function onSelect(layer) {
|
||||
// Unselect previously selected feature
|
||||
if (selectedLayer) {
|
||||
selectedLayer.setStyle(selectedLayer.originalStyle);
|
||||
}
|
||||
|
||||
// Redraw in selected style
|
||||
layer.originalStyle = layer.options;
|
||||
layer.setStyle({color: '#0000ff', weight: 8});
|
||||
|
||||
// If the current object is the list, don't innerHTML="", since that could clear it.
|
||||
if ($("#browse_content").firstChild == browseObjectList) {
|
||||
$("#browse_content").removeChild(browseObjectList);
|
||||
} else {
|
||||
$("#browse_content").empty();
|
||||
}
|
||||
|
||||
var feature = layer.feature;
|
||||
|
||||
$("#browse_content").html(JST["templates/browse/feature"]({
|
||||
name: featureNameSelect(feature),
|
||||
url: "/browse/" + feature.type + "/" + feature.id,
|
||||
attributes: feature.tags
|
||||
}));
|
||||
|
||||
$("#browse_content").find("a.browse_show_list").click(loadObjectList);
|
||||
$("#browse_content").find("a.browse_show_history").click(loadHistory);
|
||||
|
||||
// Stash the currently drawn feature
|
||||
selectedLayer = layer;
|
||||
}
|
||||
|
||||
function loadHistory() {
|
||||
$(this).attr("href", "").text(I18n.t('browse.start_rjs.wait'));
|
||||
|
||||
var feature = selectedLayer.feature;
|
||||
|
||||
$.ajax({
|
||||
url: "/api/" + OSM.API_VERSION + "/" + feature.type + "/" + feature.id + "/history",
|
||||
success: function (xml) {
|
||||
if (selectedLayer.feature != feature || $("#browse_content").firstChild == browseObjectList) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(this).remove();
|
||||
|
||||
var history = [];
|
||||
var nodes = xml.getElementsByTagName(feature.type);
|
||||
for (var i = nodes.length - 1; i >= 0; i--) {
|
||||
history.push({
|
||||
user: nodes[i].getAttribute("user") || I18n.t('browse.start_rjs.private_user'),
|
||||
timestamp: nodes[i].getAttribute("timestamp")
|
||||
});
|
||||
}
|
||||
|
||||
$("#browse_content").append(JST["templates/browse/feature_history"]({
|
||||
name: featureNameHistory(feature),
|
||||
url: "/browse/" + feature.type + "/" + feature.id,
|
||||
history: history
|
||||
}));
|
||||
}.bind(this)
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function featureTypeName(feature) {
|
||||
return I18n.t('browse.start_rjs.object_list.type.' + feature.type);
|
||||
}
|
||||
|
||||
function featureName(feature) {
|
||||
return feature.tags['name:' + $('html').attr('lang')] ||
|
||||
feature.tags.name ||
|
||||
feature.id;
|
||||
}
|
||||
|
||||
function featureNameSelect(feature) {
|
||||
return feature.tags['name:' + $('html').attr('lang')] ||
|
||||
feature.tags.name ||
|
||||
I18n.t("browse.start_rjs.object_list.selected.type." + feature.type, { id: feature.id });
|
||||
}
|
||||
|
||||
function featureNameHistory(feature) {
|
||||
return feature.tags['name:' + $('html').attr('lang')] ||
|
||||
feature.tags.name ||
|
||||
I18n.t("browse.start_rjs.object_list.history.type." + feature.type, { id: feature.id });
|
||||
}
|
||||
|
||||
function setStatus(status) {
|
||||
$("#browse_status").html(status);
|
||||
$("#browse_status").show();
|
||||
}
|
||||
|
||||
function clearStatus() {
|
||||
$("#browse_status").html("");
|
||||
$("#browse_status").hide();
|
||||
}
|
||||
});
|
||||
|
|
|
@ -11,44 +11,24 @@ $(document).ready(function () {
|
|||
}
|
||||
|
||||
function startExport(sidebarHtml) {
|
||||
var vectors,
|
||||
box,
|
||||
transform,
|
||||
markerLayer,
|
||||
markerControl;
|
||||
var marker;
|
||||
|
||||
vectors = new OpenLayers.Layer.Vector("Vector Layer", {
|
||||
displayInLayerSwitcher: false
|
||||
});
|
||||
map.addLayer(vectors);
|
||||
var locationFilter = new L.LocationFilter({
|
||||
enableButton: false,
|
||||
adjustButton: false
|
||||
}).addTo(map);
|
||||
|
||||
box = new OpenLayers.Control.DrawFeature(vectors, OpenLayers.Handler.RegularPolygon, {
|
||||
handlerOptions: {
|
||||
sides: 4,
|
||||
snapAngle: 90,
|
||||
irregular: true,
|
||||
persist: true
|
||||
}
|
||||
});
|
||||
box.handler.callbacks.done = endDrag;
|
||||
map.addControl(box);
|
||||
locationFilter.on("change", filterChanged);
|
||||
|
||||
transform = new OpenLayers.Control.TransformFeature(vectors, {
|
||||
rotate: false,
|
||||
irregular: true
|
||||
});
|
||||
transform.events.register("transformcomplete", transform, transformComplete);
|
||||
map.addControl(transform);
|
||||
|
||||
map.events.register("moveend", map, mapMoved);
|
||||
map.events.register("changebaselayer", map, htmlUrlChanged);
|
||||
map.on("moveend", mapMoved);
|
||||
map.on("baselayerchange", htmlUrlChanged);
|
||||
|
||||
$("#sidebar_title").html(I18n.t('export.start_rjs.export'));
|
||||
$("#sidebar_content").html(sidebarHtml);
|
||||
|
||||
$("#maxlat,#minlon,#maxlon,#minlat").change(boundsChanged);
|
||||
|
||||
$("#drag_box").click(startDrag);
|
||||
$("#drag_box").click(enableFilter);
|
||||
|
||||
$("#add_marker").click(startMarker);
|
||||
|
||||
|
@ -58,107 +38,96 @@ $(document).ready(function () {
|
|||
|
||||
openSidebar();
|
||||
|
||||
if (map.baseLayer.name == "Mapnik") {
|
||||
if (getMapBaseLayer().keyid == "mapnik") {
|
||||
$("#format_mapnik").prop("checked", true);
|
||||
}
|
||||
|
||||
setBounds(map.getBounds());
|
||||
formatChanged();
|
||||
setBounds(map.getExtent());
|
||||
|
||||
$("body").removeClass("site-index").addClass("site-export");
|
||||
|
||||
$("#sidebar").one("closed", function () {
|
||||
$("body").removeClass("site-export").addClass("site-index");
|
||||
|
||||
clearBox();
|
||||
map.removeLayer(locationFilter);
|
||||
clearMarker();
|
||||
map.events.unregister("moveend", map, mapMoved);
|
||||
map.events.unregister("changebaselayer", map, htmlUrlChanged);
|
||||
map.removeLayer(vectors);
|
||||
|
||||
map.off("moveend", mapMoved);
|
||||
map.off("baselayerchange", htmlUrlChanged);
|
||||
locationFilter.off("change", filterChanged);
|
||||
});
|
||||
|
||||
function getMercatorBounds() {
|
||||
var bounds = new OpenLayers.Bounds($("#minlon").val(), $("#minlat").val(),
|
||||
$("#maxlon").val(), $("#maxlat").val());
|
||||
function getBounds() {
|
||||
return L.latLngBounds(L.latLng($("#minlat").val(), $("#minlon").val()),
|
||||
L.latLng($("#maxlat").val(), $("#maxlon").val()));
|
||||
}
|
||||
|
||||
return proj(bounds);
|
||||
function getScale() {
|
||||
var bounds = map.getBounds(),
|
||||
centerLat = bounds.getCenter().lat,
|
||||
halfWorldMeters = 6378137 * Math.PI * Math.cos(centerLat * Math.PI / 180),
|
||||
meters = halfWorldMeters * (bounds.getNorthEast().lng - bounds.getSouthWest().lng) / 180,
|
||||
pixelsPerMeter = map.getSize().x / meters,
|
||||
metersPerPixel = 1 / (92 * 39.3701);
|
||||
return Math.round(1 / (pixelsPerMeter * metersPerPixel));
|
||||
}
|
||||
|
||||
function getMercatorBounds() {
|
||||
var bounds = getBounds();
|
||||
return L.bounds(L.CRS.EPSG3857.project(bounds.getSouthWest()),
|
||||
L.CRS.EPSG3857.project(bounds.getNorthEast()));
|
||||
}
|
||||
|
||||
function boundsChanged() {
|
||||
var bounds = getMercatorBounds();
|
||||
var bounds = getBounds();
|
||||
|
||||
map.events.unregister("moveend", map, mapMoved);
|
||||
map.zoomToExtent(bounds);
|
||||
|
||||
clearBox();
|
||||
drawBox(bounds);
|
||||
map.fitBounds(bounds);
|
||||
locationFilter.setBounds(bounds);
|
||||
|
||||
enableFilter();
|
||||
validateControls();
|
||||
mapnikSizeChanged();
|
||||
}
|
||||
|
||||
function startDrag() {
|
||||
$("#drag_box").html(I18n.t('export.start_rjs.drag_a_box'));
|
||||
function enableFilter() {
|
||||
if (!locationFilter.getBounds().isValid()) {
|
||||
locationFilter.setBounds(map.getBounds().pad(-0.2));
|
||||
}
|
||||
|
||||
clearBox();
|
||||
box.activate();
|
||||
};
|
||||
|
||||
function endDrag(bbox) {
|
||||
var bounds = bbox.getBounds();
|
||||
|
||||
map.events.unregister("moveend", map, mapMoved);
|
||||
setBounds(bounds);
|
||||
drawBox(bounds);
|
||||
box.deactivate();
|
||||
validateControls();
|
||||
|
||||
$("#drag_box").html(I18n.t('export.start_rjs.manually_select'));
|
||||
$("#drag_box").hide();
|
||||
locationFilter.enable();
|
||||
}
|
||||
|
||||
function transformComplete(event) {
|
||||
setBounds(event.feature.geometry.bounds);
|
||||
function filterChanged() {
|
||||
setBounds(locationFilter.getBounds());
|
||||
validateControls();
|
||||
}
|
||||
|
||||
function startMarker() {
|
||||
$("#add_marker").html(I18n.t('export.start_rjs.click_add_marker'));
|
||||
|
||||
if (!markerLayer) {
|
||||
markerLayer = new OpenLayers.Layer.Vector("",{
|
||||
displayInLayerSwitcher: false,
|
||||
style: {
|
||||
externalGraphic: OpenLayers.Util.getImageLocation("marker.png"),
|
||||
graphicXOffset: -10.5,
|
||||
graphicYOffset: -25,
|
||||
graphicWidth: 21,
|
||||
graphicHeight: 25
|
||||
}
|
||||
});
|
||||
map.addLayer(markerLayer);
|
||||
|
||||
markerControl = new OpenLayers.Control.DrawFeature(markerLayer, OpenLayers.Handler.Point);
|
||||
map.addControl(markerControl);
|
||||
|
||||
markerLayer.events.on({ "featureadded": endMarker });
|
||||
}
|
||||
|
||||
markerLayer.destroyFeatures();
|
||||
markerControl.activate();
|
||||
map.on("click", endMarker);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function endMarker(event) {
|
||||
markerControl.deactivate();
|
||||
map.off("click", endMarker);
|
||||
|
||||
$("#add_marker").html(I18n.t('export.start_rjs.change_marker'));
|
||||
$("#marker_inputs").show();
|
||||
|
||||
var geom = unproj(event.feature.geometry);
|
||||
var latlng = event.latlng;
|
||||
|
||||
$("#marker_lon").val(geom.x.toFixed(5));
|
||||
$("#marker_lat").val(geom.y.toFixed(5));
|
||||
if (marker) {
|
||||
map.removeLayer(marker);
|
||||
}
|
||||
|
||||
marker = L.marker(latlng).addTo(map);
|
||||
|
||||
$("#marker_lon").val(latlng.lng.toFixed(5));
|
||||
$("#marker_lat").val(latlng.lat.toFixed(5));
|
||||
|
||||
htmlUrlChanged();
|
||||
}
|
||||
|
@ -168,49 +137,35 @@ $(document).ready(function () {
|
|||
$("#marker_inputs").hide();
|
||||
$("#add_marker").html(I18n.t('export.start_rjs.add_marker'));
|
||||
|
||||
if (markerLayer) {
|
||||
markerControl.destroy();
|
||||
markerLayer.destroy();
|
||||
markerLayer = null;
|
||||
markerControl = null;
|
||||
if (marker) {
|
||||
map.removeLayer(marker);
|
||||
}
|
||||
}
|
||||
|
||||
function mapMoved() {
|
||||
setBounds(map.getExtent());
|
||||
validateControls();
|
||||
if (!locationFilter.isEnabled()) {
|
||||
setBounds(map.getBounds());
|
||||
validateControls();
|
||||
}
|
||||
}
|
||||
|
||||
function setBounds(bounds) {
|
||||
var toPrecision = zoomPrecision(map.getZoom());
|
||||
|
||||
bounds = unproj(bounds);
|
||||
|
||||
$("#minlon").val(toPrecision(bounds.left));
|
||||
$("#minlat").val(toPrecision(bounds.bottom));
|
||||
$("#maxlon").val(toPrecision(bounds.right));
|
||||
$("#maxlat").val(toPrecision(bounds.top));
|
||||
$("#minlon").val(toPrecision(bounds.getWestLng()));
|
||||
$("#minlat").val(toPrecision(bounds.getSouthLat()));
|
||||
$("#maxlon").val(toPrecision(bounds.getEastLng()));
|
||||
$("#maxlat").val(toPrecision(bounds.getNorthLat()));
|
||||
|
||||
mapnikSizeChanged();
|
||||
htmlUrlChanged();
|
||||
}
|
||||
|
||||
function clearBox() {
|
||||
transform.deactivate();
|
||||
vectors.destroyFeatures();
|
||||
}
|
||||
|
||||
function drawBox(bounds) {
|
||||
var feature = new OpenLayers.Feature.Vector(bounds.toGeometry());
|
||||
|
||||
vectors.addFeatures(feature);
|
||||
transform.setFeature(feature);
|
||||
}
|
||||
|
||||
function validateControls() {
|
||||
var bounds = new OpenLayers.Bounds($("#minlon").val(), $("#minlat").val(), $("#maxlon").val(), $("#maxlat").val());
|
||||
var bounds = getBounds();
|
||||
|
||||
if (bounds.getWidth() * bounds.getHeight() > OSM.MAX_REQUEST_AREA) {
|
||||
var tooLarge = bounds.getSize() > OSM.MAX_REQUEST_AREA;
|
||||
if (tooLarge) {
|
||||
$("#export_osm_too_large").show();
|
||||
} else {
|
||||
$("#export_osm_too_large").hide();
|
||||
|
@ -220,7 +175,7 @@ $(document).ready(function () {
|
|||
var disabled = true;
|
||||
|
||||
if ($("#format_osm").prop("checked")) {
|
||||
disabled = bounds.getWidth() * bounds.getHeight() > OSM.MAX_REQUEST_AREA;
|
||||
disabled = tooLarge;
|
||||
} else if ($("#format_mapnik").prop("checked")) {
|
||||
disabled = $("#mapnik_scale").val() < max_scale;
|
||||
}
|
||||
|
@ -230,8 +185,9 @@ $(document).ready(function () {
|
|||
}
|
||||
|
||||
function htmlUrlChanged() {
|
||||
var bounds = new OpenLayers.Bounds($("#minlon").val(), $("#minlat").val(), $("#maxlon").val(), $("#maxlat").val());
|
||||
var layerName = map.baseLayer.keyid;
|
||||
var bounds = getBounds();
|
||||
var layerName = getMapBaseLayer().keyid;
|
||||
|
||||
var url = "http://" + OSM.SERVER_URL + "/export/embed.html?bbox=" + bounds.toBBOX() + "&layer=" + layerName;
|
||||
var markerUrl = "";
|
||||
|
||||
|
@ -243,9 +199,9 @@ $(document).ready(function () {
|
|||
var html = '<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="'+url+'" style="border: 1px solid black"></iframe>';
|
||||
|
||||
// Create "larger map" link
|
||||
var center = bounds.getCenterLonLat();
|
||||
var center = bounds.getCenter();
|
||||
|
||||
var zoom = map.getZoomForExtent(proj(bounds));
|
||||
var zoom = map.getBoundsZoom(bounds);
|
||||
|
||||
var layers = getMapLayers();
|
||||
|
||||
|
@ -257,7 +213,7 @@ $(document).ready(function () {
|
|||
escaped.push(c < 127 ? text.charAt(i) : "&#" + c + ";");
|
||||
}
|
||||
|
||||
html += '<br /><small><a href="http://' + OSM.SERVER_URL + '/?lat='+center.lat+'&lon='+center.lon+'&zoom='+zoom+'&layers='+layers+markerUrl+'">'+escaped.join("")+'</a></small>';
|
||||
html += '<br /><small><a href="http://' + OSM.SERVER_URL + '/?lat='+center.lat+'&lon='+center.lng+'&zoom='+zoom+'&layers='+layers+markerUrl+'">'+escaped.join("")+'</a></small>';
|
||||
|
||||
$("#export_html_text").val(html);
|
||||
|
||||
|
@ -276,7 +232,7 @@ $(document).ready(function () {
|
|||
}
|
||||
|
||||
if ($("#format_mapnik").prop("checked")) {
|
||||
$("#mapnik_scale").val(roundScale(map.getScale()));
|
||||
$("#mapnik_scale").val(getScale());
|
||||
$("#export_mapnik").show();
|
||||
|
||||
mapnikSizeChanged();
|
||||
|
@ -306,8 +262,8 @@ $(document).ready(function () {
|
|||
function mapnikImageSize(scale) {
|
||||
var bounds = getMercatorBounds();
|
||||
|
||||
return new OpenLayers.Size(Math.round(bounds.getWidth() / scale / 0.00028),
|
||||
Math.round(bounds.getHeight() / scale / 0.00028));
|
||||
return {w: Math.round(bounds.getWidth() / scale / 0.00028),
|
||||
h: Math.round(bounds.getHeight() / scale / 0.00028)};
|
||||
}
|
||||
|
||||
function roundScale(scale) {
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
$(document).ready(function () {
|
||||
$("#open_map_key").click(function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var url = $(this).attr('href'),
|
||||
title = $(this).text();
|
||||
|
||||
function updateMapKey() {
|
||||
var mapLayer = map.baseLayer.keyid,
|
||||
var mapLayer = getMapBaseLayer().keyid,
|
||||
mapZoom = map.getZoom();
|
||||
|
||||
$(".mapkey-table-entry").each(function () {
|
||||
|
@ -24,13 +26,9 @@ $(document).ready(function () {
|
|||
openSidebar({ title: title });
|
||||
|
||||
$("#sidebar").one("closed", function () {
|
||||
map.events.unregister("zoomend", map, updateMapKey);
|
||||
map.events.unregister("changelayer", map, updateMapKey);
|
||||
map.off("zoomend baselayerchange", updateMapKey);
|
||||
});
|
||||
|
||||
map.events.register("zoomend", map, updateMapKey);
|
||||
map.events.register("changelayer", map, updateMapKey);
|
||||
|
||||
e.preventDefault();
|
||||
map.on("zoomend baselayerchange", updateMapKey);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,267 +1,202 @@
|
|||
var epsg4326 = new OpenLayers.Projection("EPSG:4326");
|
||||
// Leaflet extensions
|
||||
L.LatLngBounds.include({
|
||||
getSouthLat: function () {
|
||||
return this._southWest.lat;
|
||||
},
|
||||
|
||||
getWestLng: function () {
|
||||
return this._southWest.lng;
|
||||
},
|
||||
|
||||
getNorthLat: function () {
|
||||
return this._northEast.lat;
|
||||
},
|
||||
|
||||
getEastLng: function () {
|
||||
return this._northEast.lng;
|
||||
},
|
||||
|
||||
toBBOX: function () {
|
||||
var decimal = 6;
|
||||
var mult = Math.pow(10, decimal);
|
||||
var xmin = Math.round(this.getWestLng() * mult) / mult;
|
||||
var ymin = Math.round(this.getSouthLat() * mult) / mult;
|
||||
var xmax = Math.round(this.getEastLng() * mult) / mult;
|
||||
var ymax = Math.round(this.getNorthLat() * mult) / mult;
|
||||
return xmin + "," + ymin + "," + xmax + "," + ymax;
|
||||
},
|
||||
|
||||
getSize: function () {
|
||||
return (this._northEast.lat - this._southWest.lat) *
|
||||
(this._northEast.lng - this._southWest.lng);
|
||||
}
|
||||
});
|
||||
|
||||
L.Bounds.include({
|
||||
getWidth: function () {
|
||||
return this.max.x - this.min.x;
|
||||
},
|
||||
|
||||
getHeight: function () {
|
||||
return this.max.y - this.min.y;
|
||||
}
|
||||
});
|
||||
|
||||
L.Icon.Default.imagePath = <%= "#{asset_prefix}/images".to_json %>;
|
||||
|
||||
var map;
|
||||
var markers;
|
||||
var vectors;
|
||||
var popup;
|
||||
|
||||
var layers = [
|
||||
{
|
||||
klass: L.OSM.Mapnik,
|
||||
attribution: "",
|
||||
keyid: "mapnik",
|
||||
layerCode: "M",
|
||||
name: I18n.t("javascripts.map.base.standard")
|
||||
},
|
||||
{
|
||||
klass: L.OSM.CycleMap,
|
||||
attribution: "Tiles courtesy of <a href='http://www.opencyclemap.org/' target='_blank'>Andy Allan</a>",
|
||||
keyid: "cyclemap",
|
||||
layerCode: "C",
|
||||
name: I18n.t("javascripts.map.base.cycle_map")
|
||||
},
|
||||
{
|
||||
klass: L.OSM.TransportMap,
|
||||
attribution: "Tiles courtesy of <a href='http://www.opencyclemap.org/' target='_blank'>Andy Allan</a>",
|
||||
keyid: "transportmap",
|
||||
layerCode: "T",
|
||||
name: I18n.t("javascripts.map.base.transport_map")
|
||||
},
|
||||
{
|
||||
klass: L.OSM.MapQuestOpen,
|
||||
attribution: "Tiles courtesy of <a href='http://www.mapquest.com/' target='_blank'>MapQuest</a> <img src='http://developer.mapquest.com/content/osm/mq_logo.png'>",
|
||||
keyid: "mapquest",
|
||||
layerCode: "Q",
|
||||
name: I18n.t("javascripts.map.base.mapquest")
|
||||
}
|
||||
];
|
||||
|
||||
function createMap(divName, options) {
|
||||
options = options || {};
|
||||
options = $.extend({zoomControl: true, panZoomControl: true, layerControl: true}, options);
|
||||
|
||||
map = new OpenLayers.Map(divName, {
|
||||
controls: options.controls || [
|
||||
new OpenLayers.Control.ArgParser(),
|
||||
new OpenLayers.Control.Attribution(),
|
||||
new SimpleLayerSwitcher(),
|
||||
new OpenLayers.Control.Navigation(),
|
||||
new OpenLayers.Control.Zoom(),
|
||||
new OpenLayers.Control.SimplePanZoom(),
|
||||
new OpenLayers.Control.ScaleLine({geodesic: true})
|
||||
],
|
||||
numZoomLevels: 20,
|
||||
displayProjection: new OpenLayers.Projection("EPSG:4326"),
|
||||
theme: "<%= asset_path 'theme/openstreetmap/style.css' %>"
|
||||
});
|
||||
map = L.map(divName, $.extend({}, options, {panControl: false, zoomsliderControl: false, maxZoom: 18}));
|
||||
|
||||
var mapnik = new OpenLayers.Layer.OSM.Mapnik(I18n.t("javascripts.map.base.standard"), {
|
||||
attribution: "",
|
||||
keyid: "mapnik",
|
||||
displayOutsideMaxExtent: true,
|
||||
wrapDateLine: true,
|
||||
layerCode: "M"
|
||||
});
|
||||
map.addLayer(mapnik);
|
||||
if (map.attributionControl) {
|
||||
map.attributionControl.setPrefix('');
|
||||
}
|
||||
|
||||
var cyclemap = new OpenLayers.Layer.OSM.CycleMap(I18n.t("javascripts.map.base.cycle_map"), {
|
||||
attribution: "Tiles courtesy of <a href='http://www.opencyclemap.org/' target='_blank'>Andy Allan</a>",
|
||||
keyid: "cyclemap",
|
||||
displayOutsideMaxExtent: true,
|
||||
wrapDateLine: true,
|
||||
layerCode: "C"
|
||||
});
|
||||
map.addLayer(cyclemap);
|
||||
if (options.panZoomControl) {
|
||||
new L.Control.Pan().addTo(map);
|
||||
new L.Control.Zoomslider({stepHeight: 7}).addTo(map);
|
||||
}
|
||||
|
||||
var transportmap = new OpenLayers.Layer.OSM.TransportMap(I18n.t("javascripts.map.base.transport_map"), {
|
||||
attribution: "Tiles courtesy of <a href='http://www.opencyclemap.org/' target='_blank'>Andy Allan</a>",
|
||||
keyid: "transportmap",
|
||||
displayOutsideMaxExtent: true,
|
||||
wrapDateLine: true,
|
||||
layerCode: "T"
|
||||
});
|
||||
map.addLayer(transportmap);
|
||||
var layersControl = L.control.layers();
|
||||
|
||||
var mapquest = new OpenLayers.Layer.OSM(I18n.t("javascripts.map.base.mapquest"), [
|
||||
"http://otile1.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png",
|
||||
"http://otile2.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png",
|
||||
"http://otile3.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png",
|
||||
"http://otile4.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png"
|
||||
], {
|
||||
attribution: "Tiles courtesy of <a href='http://www.mapquest.com/' target='_blank'>MapQuest</a> <img src='http://developer.mapquest.com/content/osm/mq_logo.png'>",
|
||||
keyid: "mapquest",
|
||||
displayOutsideMaxExtent: true,
|
||||
wrapDateLine: true,
|
||||
numZoomLevels: 19,
|
||||
layerCode: "Q"
|
||||
});
|
||||
map.addLayer(mapquest);
|
||||
if (options.layerControl) {
|
||||
layersControl.addTo(map);
|
||||
map.layersControl = layersControl;
|
||||
}
|
||||
|
||||
markers = new OpenLayers.Layer.Markers("Markers", {
|
||||
displayInLayerSwitcher: false,
|
||||
numZoomLevels: 20,
|
||||
projection: "EPSG:900913"
|
||||
});
|
||||
map.addLayer(markers);
|
||||
for (var i = 0; i < layers.length; i++) {
|
||||
layers[i].layer = new (layers[i].klass)(layers[i]);
|
||||
layersControl.addBaseLayer(layers[i].layer, layers[i].name);
|
||||
}
|
||||
|
||||
map.dataLayer = new OpenLayers.Layer(I18n.t('browse.start_rjs.data_layer_name'), {
|
||||
visibility: false,
|
||||
displayInLayerSwitcher: false
|
||||
});
|
||||
map.addLayer(map.dataLayer);
|
||||
layers[0].layer.addTo(map);
|
||||
|
||||
$("#" + divName).on("resized", function () {
|
||||
map.updateSize();
|
||||
});
|
||||
$("#" + divName).on("resized", function () {
|
||||
map.invalidateSize();
|
||||
});
|
||||
|
||||
$("#" + divName).trigger("initialised");
|
||||
$("#" + divName).trigger("initialised");
|
||||
|
||||
return map;
|
||||
return map;
|
||||
}
|
||||
|
||||
function getArrowIcon() {
|
||||
var size = new OpenLayers.Size(25, 22);
|
||||
var offset = new OpenLayers.Pixel(-22, -20);
|
||||
var icon = new OpenLayers.Icon("<%= asset_path 'arrow.png' %>", size, offset);
|
||||
|
||||
return icon;
|
||||
}
|
||||
|
||||
function addMarkerToMap(position, icon, description) {
|
||||
var marker = new OpenLayers.Marker(proj(position), icon);
|
||||
|
||||
markers.addMarker(marker);
|
||||
|
||||
if (description) {
|
||||
marker.events.register("mouseover", marker, function() {
|
||||
openMapPopup(marker, description);
|
||||
});
|
||||
}
|
||||
|
||||
return marker;
|
||||
function getUserIcon(url) {
|
||||
return L.icon({
|
||||
iconUrl: url || <%= asset_path('marker-red.png').to_json %>,
|
||||
iconSize: [25, 41],
|
||||
iconAnchor: [12, 41],
|
||||
popupAnchor: [1, -34],
|
||||
shadowUrl: <%= asset_path('images/marker-shadow.png').to_json %>,
|
||||
shadowSize: [41, 41]
|
||||
});
|
||||
}
|
||||
|
||||
function addObjectToMap(object, zoom, callback) {
|
||||
var layer = new OpenLayers.Layer.Vector("Objects", {
|
||||
strategies: [
|
||||
new OpenLayers.Strategy.Fixed()
|
||||
],
|
||||
protocol: new OpenLayers.Protocol.HTTP({
|
||||
url: OSM.apiUrl(object),
|
||||
format: new OpenLayers.Format.OSM()
|
||||
}),
|
||||
style: {
|
||||
$.ajax({
|
||||
url: OSM.apiUrl(object),
|
||||
dataType: "xml",
|
||||
success: function (xml) {
|
||||
var layer = new L.OSM.DataLayer(xml, {
|
||||
style: {
|
||||
strokeColor: "blue",
|
||||
strokeWidth: 3,
|
||||
strokeOpacity: 0.5,
|
||||
fillOpacity: 0.2,
|
||||
fillColor: "lightblue",
|
||||
pointRadius: 6
|
||||
},
|
||||
projection: new OpenLayers.Projection("EPSG:4326"),
|
||||
displayInLayerSwitcher: false
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
layer.events.register("loadend", layer, function() {
|
||||
var extent;
|
||||
var bounds = layer.getBounds();
|
||||
|
||||
if (this.features.length) {
|
||||
extent = this.features[0].geometry.getBounds();
|
||||
|
||||
for (var i = 1; i < this.features.length; i++) {
|
||||
extent.extend(this.features[i].geometry.getBounds());
|
||||
}
|
||||
|
||||
if (zoom) {
|
||||
if (extent) {
|
||||
this.map.zoomToExtent(extent);
|
||||
} else {
|
||||
this.map.zoomToMaxExtent();
|
||||
}
|
||||
}
|
||||
if (zoom) {
|
||||
map.fitBounds(bounds);
|
||||
}
|
||||
|
||||
if (callback) {
|
||||
callback(extent);
|
||||
callback(bounds);
|
||||
}
|
||||
});
|
||||
|
||||
map.addLayer(layer);
|
||||
layer.addTo(map);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function addBoxToMap(boxbounds, id, outline) {
|
||||
if (!vectors) {
|
||||
// Be aware that IE requires Vector layers be initialised on page load, and not under deferred script conditions
|
||||
vectors = new OpenLayers.Layer.Vector("Boxes", {
|
||||
displayInLayerSwitcher: false
|
||||
});
|
||||
map.addLayer(vectors);
|
||||
}
|
||||
var geometry;
|
||||
if (outline) {
|
||||
vertices = boxbounds.toGeometry().getVertices();
|
||||
vertices.push(new OpenLayers.Geometry.Point(vertices[0].x, vertices[0].y));
|
||||
geometry = proj(new OpenLayers.Geometry.LineString(vertices));
|
||||
} else {
|
||||
geometry = proj(boxbounds.toGeometry());
|
||||
}
|
||||
var box = new OpenLayers.Feature.Vector(geometry, {}, {
|
||||
strokeWidth: 2,
|
||||
strokeColor: '#ee9900',
|
||||
fillOpacity: 0
|
||||
});
|
||||
box.fid = id;
|
||||
function addBoxToMap(bounds) {
|
||||
var box = L.rectangle(bounds, {
|
||||
weight: 2,
|
||||
color: '#e90',
|
||||
fillOpacity: 0
|
||||
});
|
||||
|
||||
vectors.addFeatures(box);
|
||||
box.addTo(map);
|
||||
|
||||
return box;
|
||||
return box;
|
||||
}
|
||||
|
||||
function openMapPopup(marker, description) {
|
||||
closeMapPopup();
|
||||
|
||||
popup = new OpenLayers.Popup.FramedCloud("popup", marker.lonlat, null,
|
||||
description, marker.icon, true);
|
||||
popup.setBackgroundColor("#E3FFC5");
|
||||
map.addPopup(popup);
|
||||
|
||||
return popup;
|
||||
}
|
||||
|
||||
function closeMapPopup() {
|
||||
if (popup) {
|
||||
map.removePopup(popup);
|
||||
}
|
||||
}
|
||||
|
||||
function removeMarkerFromMap(marker){
|
||||
markers.removeMarker(marker);
|
||||
}
|
||||
|
||||
function proj(x) {
|
||||
return x.clone().transform(epsg4326, map.getProjectionObject());
|
||||
}
|
||||
|
||||
function unproj(x) {
|
||||
return x.clone().transform(map.getProjectionObject(), epsg4326);
|
||||
}
|
||||
|
||||
function setMapCenter(center, zoom) {
|
||||
zoom = parseInt(zoom, 10);
|
||||
var numzoom = map.getNumZoomLevels();
|
||||
if (zoom >= numzoom) zoom = numzoom - 1;
|
||||
map.setCenter(proj(center), zoom);
|
||||
}
|
||||
|
||||
function getEventPosition(event) {
|
||||
return unproj(map.getLonLatFromViewPortPx(event.xy));
|
||||
function getMapBaseLayer() {
|
||||
for (var i = 0; i < layers.length; i++) {
|
||||
if (map.hasLayer(layers[i].layer)) {
|
||||
return layers[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getMapLayers() {
|
||||
var layerConfig = "";
|
||||
for (var i = 0; i < layers.length; i++) {
|
||||
if (map.hasLayer(layers[i].layer)) {
|
||||
return layers[i].layerCode;
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < map.layers.length; i++) {
|
||||
if (map.layers[i].layerCode && map.layers[i].getVisibility()) {
|
||||
layerConfig += map.layers[i].layerCode;
|
||||
}
|
||||
}
|
||||
|
||||
return layerConfig;
|
||||
return "";
|
||||
}
|
||||
|
||||
function setMapLayers(layerConfig) {
|
||||
if (layerConfig.charAt(0) == "B" || layerConfig.charAt(0) == "0") {
|
||||
var l = 0;
|
||||
|
||||
for (var layers = map.getLayersBy("isBaseLayer", true), i = 0; i < layers.length; i++) {
|
||||
var c = layerConfig.charAt(l++);
|
||||
|
||||
if (c == "B") {
|
||||
map.setBaseLayer(layers[i]);
|
||||
} else {
|
||||
map.layers[i].setVisibility(false);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (var i = 0; i < map.layers.length; i++) {
|
||||
if (map.layers[i].layerCode) {
|
||||
if (layerConfig.indexOf(map.layers[i].layerCode) >= 0) {
|
||||
if (map.layers[i].isBaseLayer) {
|
||||
map.setBaseLayer(map.layers[i]);
|
||||
} else {
|
||||
map.layers[i].setVisibility(true);
|
||||
}
|
||||
} else if (!map.layers[i].isBaseLayer) {
|
||||
map.layers[i].setVisibility(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var foundLayer = false;
|
||||
for (var i = 0; i < layers.length; i++) {
|
||||
if (layerConfig.indexOf(layers[i].layerCode) >= 0) {
|
||||
map.addLayer(layers[i].layer);
|
||||
foundLayer = true;
|
||||
} else {
|
||||
map.removeLayer(layers[i].layer);
|
||||
}
|
||||
}
|
||||
if (!foundLayer) {
|
||||
map.addLayer(layers[0].layer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
//= require OpenLayers
|
||||
//= require OpenStreetMap
|
||||
//= require SimpleLayerSwitcher
|
||||
//= require SimplePanZoom
|
||||
|
||||
OpenLayers.Util.imageURLs = {
|
||||
"404.png": "<%= asset_path 'img/404.png' %>",
|
||||
"blank.gif": "<%= asset_path 'img/blank.gif' %>",
|
||||
"cloud-popup-relative.png": "<%= asset_path 'img/cloud-popup-relative.png' %>",
|
||||
"drag-rectangle-off.png": "<%= asset_path 'img/drag-rectangle-off.png' %>",
|
||||
"drag-rectangle-on.png": "<%= asset_path 'img/drag-rectangle-on.png' %>",
|
||||
"east-mini.png": "<%= asset_path 'img/east-mini.png' %>",
|
||||
"layer-switcher-maximize.png": "<%= asset_path 'img/layer-switcher-maximize.png' %>",
|
||||
"layer-switcher-minimize.png": "<%= asset_path 'img/layer-switcher-minimize.png' %>",
|
||||
"marker-blue.png": "<%= asset_path 'img/marker-blue.png' %>",
|
||||
"marker-gold.png": "<%= asset_path 'img/marker-gold.png' %>",
|
||||
"marker-green.png": "<%= asset_path 'img/marker-green.png' %>",
|
||||
"marker.png": "<%= asset_path 'img/marker.png' %>",
|
||||
"measuring-stick-off.png": "<%= asset_path 'img/measuring-stick-off.png' %>",
|
||||
"measuring-stick-on.png": "<%= asset_path 'img/measuring-stick-on.png' %>",
|
||||
"north-mini.png": "<%= asset_path 'img/north-mini.png' %>",
|
||||
"panning-hand-off.png": "<%= asset_path 'img/panning-hand-off.png' %>",
|
||||
"panning-hand-on.png": "<%= asset_path 'img/panning-hand-on.png' %>",
|
||||
"slider.png": "<%= asset_path 'img/slider.png' %>",
|
||||
"south-mini.png": "<%= asset_path 'img/south-mini.png' %>",
|
||||
"west-mini.png": "<%= asset_path 'img/west-mini.png' %>",
|
||||
"zoombar.png": "<%= asset_path 'img/zoombar.png' %>",
|
||||
"zoom-minus-mini.png": "<%= asset_path 'img/zoom-minus-mini.png' %>",
|
||||
"zoom-plus-mini.png": "<%= asset_path 'img/zoom-plus-mini.png' %>",
|
||||
"zoom-world-mini.png": "<%= asset_path 'img/zoom-world-mini.png' %>"
|
||||
};
|
||||
|
||||
OpenLayers.Util.origGetImageLocation = OpenLayers.Util.getImageLocation;
|
||||
|
||||
OpenLayers.Util.getImageLocation = function(image) {
|
||||
return OpenLayers.Util.imageURLs[image] || OpenLayers.Util.origGetImageLocation(image);
|
||||
};
|
||||
|
||||
OpenLayers.Lang.setCode($('html').attr('lang'));
|
|
@ -7,6 +7,7 @@ OSM = {
|
|||
MAX_REQUEST_AREA: <%= MAX_REQUEST_AREA.to_json %>,
|
||||
SERVER_URL: <%= SERVER_URL.to_json %>,
|
||||
API_VERSION: <%= API_VERSION.to_json %>,
|
||||
STATUS: <%= STATUS.to_json %>,
|
||||
|
||||
apiUrl: function (object) {
|
||||
var url = "/api/" + OSM.API_VERSION + "/" + object.type + "/" + object.id;
|
||||
|
|
|
@ -5,20 +5,17 @@ function openSidebar(options) {
|
|||
|
||||
if (options.title) { $("#sidebar_title").html(options.title); }
|
||||
|
||||
if (options.width) { $("#sidebar").width(options.width); }
|
||||
else { $("#sidebar").width("30%"); }
|
||||
$("#sidebar").width(options.width || "30%");
|
||||
$("#sidebar").css("display", "block").trigger("opened");
|
||||
}
|
||||
|
||||
$("#sidebar").css("display", "block");
|
||||
|
||||
$("#sidebar").trigger("opened");
|
||||
};
|
||||
function closeSidebar() {
|
||||
$("#sidebar").css("display", "none").trigger("closed");
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
$(".sidebar_close").click(function (e) {
|
||||
$("#sidebar").css("display", "none");
|
||||
|
||||
$("#sidebar").trigger("closed");
|
||||
|
||||
closeSidebar();
|
||||
e.preventDefault();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,41 +1,39 @@
|
|||
$(document).ready(function () {
|
||||
var map = createMap("map");
|
||||
var map = createMap("map", {
|
||||
zoomControl: true,
|
||||
panZoomControl: false
|
||||
});
|
||||
|
||||
if (OSM.home) {
|
||||
setMapCenter(new OpenLayers.LonLat(OSM.home.lon, OSM.home.lat), 12);
|
||||
map.setView([OSM.home.lat, OSM.home.lon], 12);
|
||||
} else {
|
||||
setMapCenter(new OpenLayers.LonLat(0, 0), 0);
|
||||
map.setView([0, 0], 0);
|
||||
}
|
||||
|
||||
if ($("#map").hasClass("set_location")) {
|
||||
var marker;
|
||||
var marker = L.marker([0, 0], {icon: getUserIcon()});
|
||||
|
||||
if (OSM.home) {
|
||||
marker = addMarkerToMap(new OpenLayers.LonLat(OSM.home.lon, OSM.home.lat));
|
||||
marker.setLatLng([OSM.home.lat, OSM.home.lon]);
|
||||
marker.addTo(map);
|
||||
}
|
||||
|
||||
map.events.register("click", map, function (e) {
|
||||
map.on("click", function (e) {
|
||||
if ($('#updatehome').is(':checked')) {
|
||||
var lonlat = getEventPosition(e);
|
||||
|
||||
$('#homerow').removeClass();
|
||||
$('#home_lat').val(lonlat.lat);
|
||||
$('#home_lon').val(lonlat.lon);
|
||||
$('#home_lat').val(e.latlng.lat);
|
||||
$('#home_lon').val(e.latlng.lng);
|
||||
|
||||
if (marker) {
|
||||
removeMarkerFromMap(marker);
|
||||
}
|
||||
|
||||
marker = addMarkerToMap(lonlat);
|
||||
marker.setLatLng(e.latlng);
|
||||
marker.addTo(map);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$("[data-user]").each(function () {
|
||||
var user = $(this).data('user');
|
||||
if (user.lon && user.lat) {
|
||||
var icon = OpenLayers.Marker.defaultIcon();
|
||||
icon.url = OpenLayers.Util.getImageLocation(user.icon);
|
||||
addMarkerToMap(new OpenLayers.LonLat(user.lon, user.lat), icon, user.description);
|
||||
L.marker([user.lat, user.lon], {icon: getUserIcon(user.icon)}).addTo(map)
|
||||
.bindPopup(user.description);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,175 +0,0 @@
|
|||
var SimpleLayerSwitcher = OpenLayers.Class(OpenLayers.Control, {
|
||||
layerStates: null,
|
||||
layersDiv: null,
|
||||
ascending: true,
|
||||
|
||||
initialize: function(options) {
|
||||
OpenLayers.Control.prototype.initialize.apply(this, arguments);
|
||||
this.layerStates = [];
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
OpenLayers.Event.stopObservingElement(this.div);
|
||||
|
||||
//clear out layers info and unregister their events
|
||||
this.map.events.un({
|
||||
"addlayer": this.redraw,
|
||||
"changelayer": this.redraw,
|
||||
"removelayer": this.redraw,
|
||||
"changebaselayer": this.redraw,
|
||||
scope: this
|
||||
});
|
||||
OpenLayers.Control.prototype.destroy.apply(this, arguments);
|
||||
},
|
||||
|
||||
setMap: function(map) {
|
||||
OpenLayers.Control.prototype.setMap.apply(this, arguments);
|
||||
|
||||
this.map.events.on({
|
||||
"addlayer": this.redraw,
|
||||
"changelayer": this.redraw,
|
||||
"removelayer": this.redraw,
|
||||
"changebaselayer": this.redraw,
|
||||
scope: this
|
||||
});
|
||||
},
|
||||
|
||||
draw: function() {
|
||||
OpenLayers.Control.prototype.draw.apply(this);
|
||||
this.loadContents();
|
||||
this.redraw();
|
||||
return this.div;
|
||||
},
|
||||
|
||||
checkRedraw: function() {
|
||||
var redraw = false;
|
||||
if ( !this.layerStates.length ||
|
||||
(this.map.layers.length != this.layerStates.length) ) {
|
||||
redraw = true;
|
||||
} else {
|
||||
for (var i=0, len=this.layerStates.length; i<len; i++) {
|
||||
var layerState = this.layerStates[i];
|
||||
var layer = this.map.layers[i];
|
||||
if ( (layerState.name != layer.name) ||
|
||||
(layerState.inRange != layer.inRange) ||
|
||||
(layerState.id != layer.id) ||
|
||||
(layerState.visibility != layer.visibility) ) {
|
||||
redraw = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return redraw;
|
||||
},
|
||||
|
||||
redraw: function() {
|
||||
if (!this.checkRedraw()) {
|
||||
return this.div;
|
||||
}
|
||||
|
||||
this.div.innerHTML = '';
|
||||
var len = this.map.layers.length;
|
||||
this.layerStates = [];
|
||||
for (var i = 0; i < this.map.layers.length; i++) {
|
||||
var layer = this.map.layers[i];
|
||||
this.layerStates[i] = {
|
||||
'name': layer.name,
|
||||
'visibility': layer.visibility,
|
||||
'inRange': layer.inRange,
|
||||
'id': layer.id
|
||||
};
|
||||
}
|
||||
|
||||
var layers = this.map.layers.slice();
|
||||
if (!this.ascending) { layers.reverse(); }
|
||||
for (var i = 0; i < layers.length; i++) {
|
||||
var layer = layers[i];
|
||||
var baseLayer = layer.isBaseLayer;
|
||||
|
||||
if (layer.displayInLayerSwitcher && baseLayer) {
|
||||
var on = (baseLayer) ? (layer == this.map.baseLayer)
|
||||
: layer.getVisibility();
|
||||
var layerElem = document.createElement('a');
|
||||
layerElem.id = this.id + '_input_' + layer.name;
|
||||
layerElem.innerHTML = layer.name;
|
||||
layerElem.href = '#';
|
||||
|
||||
OpenLayers.Element.addClass(layerElem, 'basey');
|
||||
OpenLayers.Element.addClass(layerElem,
|
||||
'basey-' + (on ? 'on' : 'off'));
|
||||
|
||||
if (!baseLayer && !layer.inRange) {
|
||||
layerElem.disabled = true;
|
||||
}
|
||||
var context = {
|
||||
'layer': layer
|
||||
};
|
||||
OpenLayers.Event.observe(layerElem, 'mouseup',
|
||||
OpenLayers.Function.bindAsEventListener(
|
||||
this.onInputClick,
|
||||
context)
|
||||
);
|
||||
|
||||
this.div.appendChild(layerElem);
|
||||
}
|
||||
}
|
||||
|
||||
return this.div;
|
||||
},
|
||||
|
||||
onInputClick: function(e) {
|
||||
if (this.layer.isBaseLayer) {
|
||||
this.layer.map.setBaseLayer(this.layer);
|
||||
} else {
|
||||
this.layer.setVisibility(!this.layer.getVisibility());
|
||||
}
|
||||
OpenLayers.Event.stop(e);
|
||||
},
|
||||
|
||||
updateMap: function() {
|
||||
|
||||
// set the newly selected base layer
|
||||
for(var i=0, len=this.baseLayers.length; i<len; i++) {
|
||||
var layerEntry = this.baseLayers[i];
|
||||
if (layerEntry.inputElem.checked) {
|
||||
this.map.setBaseLayer(layerEntry.layer, false);
|
||||
}
|
||||
}
|
||||
|
||||
// set the correct visibilities for the overlays
|
||||
for(var i=0, len=this.dataLayers.length; i<len; i++) {
|
||||
var layerEntry = this.dataLayers[i];
|
||||
layerEntry.layer.setVisibility(layerEntry.inputElem.checked);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
loadContents: function() {
|
||||
//configure main div
|
||||
OpenLayers.Event.observe(this.div, 'mouseup',
|
||||
OpenLayers.Function.bindAsEventListener(this.mouseUp, this));
|
||||
OpenLayers.Event.observe(this.div, 'click',
|
||||
this.ignoreEvent);
|
||||
OpenLayers.Event.observe(this.div, 'mousedown',
|
||||
OpenLayers.Function.bindAsEventListener(this.mouseDown, this));
|
||||
OpenLayers.Event.observe(this.div, 'dblclick', this.ignoreEvent);
|
||||
},
|
||||
|
||||
ignoreEvent: function(evt) {
|
||||
OpenLayers.Event.stop(evt);
|
||||
},
|
||||
|
||||
mouseDown: function(evt) {
|
||||
this.isMouseDown = true;
|
||||
this.ignoreEvent(evt);
|
||||
},
|
||||
|
||||
mouseUp: function(evt) {
|
||||
if (this.isMouseDown) {
|
||||
this.isMouseDown = false;
|
||||
this.ignoreEvent(evt);
|
||||
}
|
||||
},
|
||||
|
||||
CLASS_NAME: "SimpleLayerSwitcher"
|
||||
});
|
|
@ -1,356 +0,0 @@
|
|||
/* Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for
|
||||
* full list of contributors). Published under the 2-clause BSD license.
|
||||
* See license.txt in the OpenLayers distribution or repository for the
|
||||
* full text of the license. */
|
||||
|
||||
|
||||
/**
|
||||
* @requires OpenLayers/Control/PanZoom.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class: OpenLayers.Control.PanZoomBar
|
||||
* The PanZoomBar is a visible control composed of a
|
||||
* <OpenLayers.Control.PanPanel> and a <OpenLayers.Control.ZoomBar>.
|
||||
* By default it is displayed in the upper left corner of the map as 4
|
||||
* directional arrows above a vertical slider.
|
||||
*
|
||||
* Inherits from:
|
||||
* - <OpenLayers.Control.PanZoom>
|
||||
*/
|
||||
OpenLayers.Control.SimplePanZoom = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
|
||||
/**
|
||||
* APIProperty: zoomStopWidth
|
||||
*/
|
||||
zoomStopWidth: 18,
|
||||
|
||||
/**
|
||||
* APIProperty: zoomStopHeight
|
||||
*/
|
||||
zoomStopHeight: 7,
|
||||
|
||||
/**
|
||||
* Property: slider
|
||||
*/
|
||||
slider: null,
|
||||
|
||||
/**
|
||||
* Property: sliderEvents
|
||||
* {<OpenLayers.Events>}
|
||||
*/
|
||||
sliderEvents: null,
|
||||
|
||||
/**
|
||||
* Property: zoombarDiv
|
||||
* {DOMElement}
|
||||
*/
|
||||
zoombarDiv: null,
|
||||
|
||||
/**
|
||||
* APIProperty: zoomWorldIcon
|
||||
* {Boolean}
|
||||
*/
|
||||
zoomWorldIcon: false,
|
||||
|
||||
/**
|
||||
* APIProperty: panIcons
|
||||
* {Boolean} Set this property to false not to display the pan icons. If
|
||||
* false the zoom world icon is placed under the zoom bar. Defaults to
|
||||
* true.
|
||||
*/
|
||||
panIcons: true,
|
||||
|
||||
/**
|
||||
* APIProperty: forceFixedZoomLevel
|
||||
* {Boolean} Force a fixed zoom level even though the map has
|
||||
* fractionalZoom
|
||||
*/
|
||||
forceFixedZoomLevel: false,
|
||||
|
||||
/**
|
||||
* Property: mouseDragStart
|
||||
* {<OpenLayers.Pixel>}
|
||||
*/
|
||||
mouseDragStart: null,
|
||||
|
||||
/**
|
||||
* Property: deltaY
|
||||
* {Number} The cumulative vertical pixel offset during a zoom bar drag.
|
||||
*/
|
||||
deltaY: null,
|
||||
|
||||
/**
|
||||
* Property: zoomStart
|
||||
* {<OpenLayers.Pixel>}
|
||||
*/
|
||||
zoomStart: null,
|
||||
|
||||
/**
|
||||
* Constructor: OpenLayers.Control.PanZoomBar
|
||||
*/
|
||||
buttons: null,
|
||||
|
||||
/**
|
||||
* APIMethod: destroy
|
||||
*/
|
||||
destroy: function() {
|
||||
|
||||
this._removeZoomBar();
|
||||
|
||||
this.map.events.un({
|
||||
"changebaselayer": this.redraw,
|
||||
"updatesize": this.redraw,
|
||||
scope: this
|
||||
});
|
||||
|
||||
OpenLayers.Control.PanZoom.prototype.destroy.apply(this, arguments);
|
||||
|
||||
delete this.mouseDragStart;
|
||||
delete this.zoomStart;
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: setMap
|
||||
*
|
||||
* Parameters:
|
||||
* map - {<OpenLayers.Map>}
|
||||
*/
|
||||
setMap: function(map) {
|
||||
OpenLayers.Control.PanZoom.prototype.setMap.apply(this, arguments);
|
||||
this.map.events.on({
|
||||
"changebaselayer": this.redraw,
|
||||
"updatesize": this.redraw,
|
||||
scope: this
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: redraw
|
||||
* clear the div and start over.
|
||||
*/
|
||||
redraw: function() {
|
||||
if (this.div !== null) {
|
||||
this.removeButtons();
|
||||
this._removeZoomBar();
|
||||
}
|
||||
this.draw();
|
||||
this.moveZoomBar();
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: draw
|
||||
*
|
||||
* Parameters:
|
||||
* px - {<OpenLayers.Pixel>}
|
||||
*/
|
||||
draw: function(px) {
|
||||
// initialize our internal div
|
||||
OpenLayers.Control.prototype.draw.apply(this, arguments);
|
||||
px = this.position.clone();
|
||||
|
||||
// place the controls
|
||||
this.buttons = [];
|
||||
var ids = ['panup', 'panleft', 'panright', 'pandown', 'zoomout', 'zoomin'];
|
||||
|
||||
for (var i = 0; i < ids.length; i++) {
|
||||
var b = document.createElement('div');
|
||||
b.id = ids[i];
|
||||
b.action = ids[i];
|
||||
b.className = 'button olButton';
|
||||
this.div.appendChild(b);
|
||||
this.buttons.push(b);
|
||||
}
|
||||
|
||||
this._addZoomBar();
|
||||
return this.div;
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: _addZoomBar
|
||||
*
|
||||
* Parameters:
|
||||
* centered - {<OpenLayers.Pixel>} where zoombar drawing is to start.
|
||||
*/
|
||||
_addZoomBar:function() {
|
||||
var id = this.id + "_" + this.map.id;
|
||||
var zoomsToEnd = this.map.getNumZoomLevels() - 1 - this.map.getZoom();
|
||||
var slider = document.createElement('div');
|
||||
slider.id = 'slider';
|
||||
slider.className = 'button';
|
||||
slider.style.cursor = 'move';
|
||||
this.slider = slider;
|
||||
|
||||
this.sliderEvents = new OpenLayers.Events(this, slider, null, true,
|
||||
{ includeXY: true });
|
||||
this.sliderEvents.on({
|
||||
"touchstart": this.zoomBarDown,
|
||||
"touchmove": this.zoomBarDrag,
|
||||
"touchend": this.zoomBarUp,
|
||||
"mousedown": this.zoomBarDown,
|
||||
"mousemove": this.zoomBarDrag,
|
||||
"mouseup": this.zoomBarUp
|
||||
});
|
||||
|
||||
var height = this.zoomStopHeight * (this.map.getNumZoomLevels());
|
||||
|
||||
// this is the background image
|
||||
var div = document.createElement('div');
|
||||
div.className = 'button olButton';
|
||||
div.id = 'zoombar';
|
||||
this.zoombarDiv = div;
|
||||
|
||||
this.div.appendChild(div);
|
||||
this.startTop = 75;
|
||||
this.div.appendChild(slider);
|
||||
|
||||
this.map.events.register("zoomend", this, this.moveZoomBar);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: _removeZoomBar
|
||||
*/
|
||||
_removeZoomBar: function() {
|
||||
this.sliderEvents.un({
|
||||
"touchstart": this.zoomBarDown,
|
||||
"touchmove": this.zoomBarDrag,
|
||||
"touchend": this.zoomBarUp,
|
||||
"mousedown": this.zoomBarDown,
|
||||
"mousemove": this.zoomBarDrag,
|
||||
"mouseup": this.zoomBarUp
|
||||
});
|
||||
this.sliderEvents.destroy();
|
||||
|
||||
this.div.removeChild(this.zoombarDiv);
|
||||
this.zoombarDiv = null;
|
||||
this.div.removeChild(this.slider);
|
||||
this.slider = null;
|
||||
|
||||
this.map.events.unregister("zoomend", this, this.moveZoomBar);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: onButtonClick
|
||||
*
|
||||
* Parameters:
|
||||
* evt - {Event}
|
||||
*/
|
||||
onButtonClick: function(evt) {
|
||||
OpenLayers.Control.PanZoom.prototype.onButtonClick.apply(this, arguments);
|
||||
if (evt.buttonElement === this.zoombarDiv) {
|
||||
var levels = evt.buttonXY.y / this.zoomStopHeight;
|
||||
if (this.forceFixedZoomLevel || !this.map.fractionalZoom) {
|
||||
levels = Math.floor(levels);
|
||||
}
|
||||
var zoom = (this.map.getNumZoomLevels() - 1) - levels;
|
||||
zoom = Math.min(Math.max(zoom, 0), this.map.getNumZoomLevels() - 1);
|
||||
this.map.zoomTo(zoom);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: passEventToSlider
|
||||
* This function is used to pass events that happen on the div, or the map,
|
||||
* through to the slider, which then does its moving thing.
|
||||
*
|
||||
* Parameters:
|
||||
* evt - {<OpenLayers.Event>}
|
||||
*/
|
||||
passEventToSlider:function(evt) {
|
||||
this.sliderEvents.handleBrowserEvent(evt);
|
||||
},
|
||||
|
||||
/*
|
||||
* Method: zoomBarDown
|
||||
* event listener for clicks on the slider
|
||||
*
|
||||
* Parameters:
|
||||
* evt - {<OpenLayers.Event>}
|
||||
*/
|
||||
zoomBarDown:function(evt) {
|
||||
if (!OpenLayers.Event.isLeftClick(evt) && !OpenLayers.Event.isSingleTouch(evt)) {
|
||||
return;
|
||||
}
|
||||
this.map.events.on({
|
||||
"touchmove": this.passEventToSlider,
|
||||
"mousemove": this.passEventToSlider,
|
||||
"mouseup": this.passEventToSlider,
|
||||
scope: this
|
||||
});
|
||||
this.mouseDragStart = evt.xy.clone();
|
||||
this.zoomStart = evt.xy.clone();
|
||||
this.div.style.cursor = "move";
|
||||
// reset the div offsets just in case the div moved
|
||||
this.zoombarDiv.offsets = null;
|
||||
OpenLayers.Event.stop(evt);
|
||||
},
|
||||
|
||||
/*
|
||||
* Method: zoomBarDrag
|
||||
* This is what happens when a click has occurred, and the client is
|
||||
* dragging. Here we must ensure that the slider doesn't go beyond the
|
||||
* bottom/top of the zoombar div, as well as moving the slider to its new
|
||||
* visual location
|
||||
*
|
||||
* Parameters:
|
||||
* evt - {<OpenLayers.Event>}
|
||||
*/
|
||||
zoomBarDrag: function(evt) {
|
||||
if (this.mouseDragStart !== null) {
|
||||
var deltaY = this.mouseDragStart.y - evt.xy.y;
|
||||
var offsets = OpenLayers.Util.pagePosition(this.zoombarDiv);
|
||||
if ((evt.clientY - offsets[1]) > 0 &&
|
||||
(evt.clientY - offsets[1]) < 140) {
|
||||
var newTop = parseInt(this.slider.style.top, 10) - deltaY;
|
||||
this.slider.style.top = newTop + "px";
|
||||
this.mouseDragStart = evt.xy.clone();
|
||||
}
|
||||
// set cumulative displacement
|
||||
this.deltaY = this.zoomStart.y - evt.xy.y;
|
||||
OpenLayers.Event.stop(evt);
|
||||
}
|
||||
},
|
||||
|
||||
/*
|
||||
* Method: zoomBarUp
|
||||
* Perform cleanup when a mouseup event is received -- discover new zoom
|
||||
* level and switch to it.
|
||||
*
|
||||
* Parameters:
|
||||
* evt - {<OpenLayers.Event>}
|
||||
*/
|
||||
zoomBarUp: function(evt) {
|
||||
if (!OpenLayers.Event.isLeftClick(evt) && evt.type !== "touchend") {
|
||||
return;
|
||||
}
|
||||
if (this.mouseDragStart) {
|
||||
this.div.style.cursor = "";
|
||||
this.map.events.un({
|
||||
"touchmove": this.passEventToSlider,
|
||||
"mouseup": this.passEventToSlider,
|
||||
"mousemove": this.passEventToSlider,
|
||||
scope: this
|
||||
});
|
||||
var zoomLevel = this.map.zoom;
|
||||
zoomLevel += this.deltaY/this.zoomStopHeight;
|
||||
zoomLevel = Math.max(Math.round(zoomLevel), 0);
|
||||
this.map.zoomTo(zoomLevel);
|
||||
this.mouseDragStart = null;
|
||||
this.zoomStart = null;
|
||||
this.deltaY = 0;
|
||||
OpenLayers.Event.stop(evt);
|
||||
}
|
||||
},
|
||||
|
||||
/*
|
||||
* Method: moveZoomBar
|
||||
* Change the location of the slider to match the current zoom level.
|
||||
*/
|
||||
moveZoomBar:function() {
|
||||
var newTop =
|
||||
((this.map.getNumZoomLevels()-1) - this.map.getZoom()) *
|
||||
this.zoomStopHeight + this.startTop;
|
||||
this.slider.style.top = newTop + "px";
|
||||
},
|
||||
CLASS_NAME: "OpenLayers.Control.SimplePanZoom"
|
||||
});
|
|
@ -1,44 +0,0 @@
|
|||
.SimpleLayerSwitcher {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
background: #fff;
|
||||
border: 1px solid #ccc;
|
||||
min-width: 150px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.SimpleLayerSwitcher a.basey {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: #838383;
|
||||
padding: 2px 5px 2px 20px;
|
||||
}
|
||||
|
||||
.SimpleLayerSwitcher a.basey-on {
|
||||
color: #000;
|
||||
background-color: #fff;
|
||||
background-image: image-url("theme/openstreetmap/img/carat.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: 7px 9px;
|
||||
}
|
||||
|
||||
.SimpleLayerSwitcher a.basey-off {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.SimpleLayerSwitcher:hover a {
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
.SimpleLayerSwitcher a:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.SimpleLayerSwitcher:hover a:first-child {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.SimpleLayerSwitcher:hover a.basey-off {
|
||||
display: block;
|
||||
}
|
|
@ -1,80 +0,0 @@
|
|||
.olControlSimplePanZoom {
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom .button {
|
||||
background-image: image-url("theme/openstreetmap/img/map_sprite.png");
|
||||
position: absolute;
|
||||
background-repeat: no-repeat;
|
||||
cursor: hand;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom #panup {
|
||||
left: 10px;
|
||||
width: 25px;
|
||||
height: 13px;
|
||||
background-position: -15px -5px;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom #pandown {
|
||||
left: 10px;
|
||||
top: 36px;
|
||||
width: 25px;
|
||||
height: 15px;
|
||||
background-position: -15px -40px;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom #panleft {
|
||||
top: 13px;
|
||||
width: 25px;
|
||||
height: 24px;
|
||||
left: 0px;
|
||||
background-position: -5px -17px;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom #panright {
|
||||
top: 13px;
|
||||
width: 25px;
|
||||
height: 24px;
|
||||
left: 25px;
|
||||
background-position: -30px -17px;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom #zoomin {
|
||||
top: 50px;
|
||||
width: 26px;
|
||||
height: 20px;
|
||||
left: 10px;
|
||||
background-position: -15px -61px;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom #zoomout {
|
||||
top: 210px;
|
||||
width: 26px;
|
||||
height: 20px;
|
||||
left: 10px;
|
||||
background-position: -15px -220px;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom #slider {
|
||||
top: 75px;
|
||||
width: 25px;
|
||||
height: 10px;
|
||||
left: 10px;
|
||||
-webkit-transition: top 100ms linear;
|
||||
-moz-transition: top 100ms linear;
|
||||
-o-transition: top 100ms linear;
|
||||
background-position: -77px -58px;
|
||||
pointer: move;
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom #zoombar {
|
||||
top: 70px;
|
||||
width: 26px;
|
||||
height: 140px;
|
||||
left: 10px;
|
||||
background-position: -15px -80px;
|
||||
}
|
Before Width: | Height: | Size: 279 B |
Before Width: | Height: | Size: 15 KiB |
|
@ -1,66 +0,0 @@
|
|||
/*
|
||||
*= require theme/default/style
|
||||
*= require theme/openstreetmap/SimpleLayerSwitcher
|
||||
*= require theme/openstreetmap/SimplePanZoom
|
||||
*/
|
||||
|
||||
.olControlOverviewMapExtentRectangle {
|
||||
background-image: image-url("theme/default/img/blank.gif");
|
||||
}
|
||||
|
||||
.olControlOverviewMapRectReplacement {
|
||||
background-image: image-url("theme/default/img/overview_replacement.gif");
|
||||
}
|
||||
|
||||
.olControlNavigationHistory {
|
||||
background-image: image-url("theme/default/img/navigation_history.png");
|
||||
}
|
||||
|
||||
div.olControlSaveFeaturesItemActive {
|
||||
background-image: image-url("theme/default/img/save_features_on.png");
|
||||
}
|
||||
|
||||
div.olControlSaveFeaturesItemInactive {
|
||||
background-image: image-url("theme/default/img/save_features_off.png");
|
||||
}
|
||||
|
||||
.olControlPanPanel div {
|
||||
background-image: image-url("theme/default/img/pan-panel.png");
|
||||
}
|
||||
|
||||
.olControlZoomPanel div {
|
||||
background-image: image-url("theme/default/img/zoom-panel.png");
|
||||
}
|
||||
|
||||
.olPopupCloseBox {
|
||||
background: image-url("theme/default/img/close.gif") no-repeat;
|
||||
}
|
||||
|
||||
.olImageLoadError {
|
||||
// remove opacity?
|
||||
// remove filter?
|
||||
background: image-url("theme/openstreetmap/img/missing-tile.png") no-repeat;
|
||||
}
|
||||
|
||||
.olControlNavToolbar div,
|
||||
.olControlEditingToolbar div {
|
||||
background-image: image-url("theme/default/img/editing_tool_bar.png");
|
||||
}
|
||||
|
||||
div.olControlZoom a {
|
||||
color: black;
|
||||
background: #ffffff;
|
||||
border: 1px solid #cccccc;
|
||||
margin: 0 !important;
|
||||
// remove filter
|
||||
}
|
||||
|
||||
div.olControlZoom a.olControlZoomIn {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
div.olControlZoom a:hover {
|
||||
background: #f5f5f5;
|
||||
}
|
||||
|
||||
// remove max-width hover?
|
|
@ -332,6 +332,7 @@ h2 {
|
|||
|
||||
#top-bar {
|
||||
position: absolute;
|
||||
z-index: 10000;
|
||||
top: 0;
|
||||
left: 185px;
|
||||
right: 0;
|
||||
|
@ -430,7 +431,7 @@ body.site-export #tabnav a#exportanchor {
|
|||
left: 15px;
|
||||
}
|
||||
|
||||
/* Rules for OpenLayers maps */
|
||||
/* Rules for Leaflet maps */
|
||||
|
||||
#map {
|
||||
margin: 0px;
|
||||
|
@ -438,13 +439,6 @@ body.site-export #tabnav a#exportanchor {
|
|||
padding: 0px;
|
||||
}
|
||||
|
||||
.olControlAttribution {
|
||||
bottom: 15px !important;
|
||||
left: 0px !important;
|
||||
right: 0px !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#permalink {
|
||||
z-index: 10000;
|
||||
position: absolute;
|
||||
|
@ -466,11 +460,13 @@ body.site-export #tabnav a#exportanchor {
|
|||
text-decoration: none;
|
||||
}
|
||||
|
||||
.site-index #map .SimpleLayerSwitcher,
|
||||
.site-index #map .olControlSimplePanZoom,
|
||||
.site-export #map .SimpleLayerSwitcher,
|
||||
.site-export #map .olControlSimplePanZoom {
|
||||
.site-index .leaflet-top,
|
||||
.site-export .leaflet-top {
|
||||
top: 40px !important;
|
||||
|
||||
.leaflet-control {
|
||||
margin-top: 0px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.site-index #map .olControlScaleLine,
|
||||
|
@ -1121,16 +1117,21 @@ p#contributorGuidance {
|
|||
|
||||
/* Rules for the user map */
|
||||
|
||||
.user_map .olControlSimplePanZoom {
|
||||
.user_map .leaflet-control-pan,
|
||||
.user_map .leaflet-control-zoomslider {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.user_map .olControlZoom {
|
||||
.user_map .leaflet-control-zoom {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Rules for user popups on maps */
|
||||
|
||||
.user_popup {
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
.user_popup p {
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
|
|
27
app/assets/stylesheets/embed.css.scss
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
*= require leaflet
|
||||
*/
|
||||
|
||||
html {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
#map {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.leaflet-control-zoom-in {
|
||||
background-image: image-url("images/zoom-in.png");
|
||||
}
|
||||
|
||||
.leaflet-control-zoom-out {
|
||||
background-image: image-url("images/zoom-out.png");
|
||||
}
|
|
@ -8,6 +8,6 @@
|
|||
|
||||
/* Rules for OpenLayers maps */
|
||||
|
||||
.olControlZoom {
|
||||
.leaflet-control-zoom {
|
||||
display: none;
|
||||
}
|
||||
|
|
44
app/assets/stylesheets/leaflet-all.css.scss
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
*= require leaflet
|
||||
*= require leaflet.locationfilter
|
||||
*= require leaflet.pan
|
||||
*= require leaflet.zoom
|
||||
*/
|
||||
|
||||
/* Override to serve images through the asset pipeline. */
|
||||
.leaflet-control-zoom-in {
|
||||
background-image: image-url("images/zoom-in.png");
|
||||
}
|
||||
|
||||
.leaflet-control-zoom-out {
|
||||
background-image: image-url("images/zoom-out.png");
|
||||
}
|
||||
|
||||
.leaflet-control-layers-toggle {
|
||||
background-image: image-url("images/layers.png");
|
||||
}
|
||||
|
||||
div.leaflet-marker-icon.location-filter.resize-marker {
|
||||
background-image: image-url("img/resize-handle.png");
|
||||
}
|
||||
|
||||
div.leaflet-marker-icon.location-filter.move-marker {
|
||||
background-image: image-url("img/move-handle.png");
|
||||
}
|
||||
|
||||
/* Override to better match the pan/zoom control. */
|
||||
.leaflet-control-layers {
|
||||
box-shadow: 0px 0px 3px #666;
|
||||
background: #fff;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
/* Override some conflicting styles.
|
||||
https://github.com/openstreetmap/openstreetmap-website/pull/121#issuecomment-10206946 */
|
||||
.leaflet-popup-content img.user_thumbnail {
|
||||
max-width: 50px !important;
|
||||
}
|
||||
|
||||
.user_popup p {
|
||||
margin: 0px 2px 0px 55px !important;
|
||||
}
|
41
app/assets/stylesheets/leaflet.pan.css.scss
Normal file
|
@ -0,0 +1,41 @@
|
|||
.leaflet-control-pan-up,
|
||||
.leaflet-control-pan-down,
|
||||
.leaflet-control-pan-left,
|
||||
.leaflet-control-pan-right {
|
||||
background-image: image-url("map_sprite.png");
|
||||
position: absolute;
|
||||
background-repeat: no-repeat;
|
||||
cursor: hand;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.leaflet-control-pan-up {
|
||||
left: 10px;
|
||||
width: 25px;
|
||||
height: 13px;
|
||||
background-position: -15px -5px;
|
||||
}
|
||||
|
||||
.leaflet-control-pan-down {
|
||||
left: 10px;
|
||||
top: 36px;
|
||||
width: 25px;
|
||||
height: 15px;
|
||||
background-position: -15px -40px;
|
||||
}
|
||||
|
||||
.leaflet-control-pan-left {
|
||||
left: 0px;
|
||||
top: 13px;
|
||||
width: 25px;
|
||||
height: 24px;
|
||||
background-position: -5px -17px;
|
||||
}
|
||||
|
||||
.leaflet-control-pan-right {
|
||||
left: 25px;
|
||||
top: 13px;
|
||||
width: 25px;
|
||||
height: 24px;
|
||||
background-position: -30px -17px;
|
||||
}
|
53
app/assets/stylesheets/leaflet.zoom.css.scss
Normal file
|
@ -0,0 +1,53 @@
|
|||
.leaflet-control-zoomslider-in,
|
||||
.leaflet-control-zoomslider-out,
|
||||
.leaflet-control-zoomslider-slider,
|
||||
.leaflet-control-zoomslider-slider-knob {
|
||||
background-image: image-url("map_sprite.png");
|
||||
position: absolute;
|
||||
background-repeat: no-repeat;
|
||||
cursor: hand;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.leaflet-control-zoomslider-in,
|
||||
.leaflet-control-zoomslider-out {
|
||||
text-indent: 26px;
|
||||
overflow: hidden;
|
||||
outline-style: none;
|
||||
}
|
||||
|
||||
.leaflet-control-zoomslider-in {
|
||||
top: 50px;
|
||||
width: 26px;
|
||||
height: 20px;
|
||||
left: 10px;
|
||||
background-position: -15px -61px;
|
||||
}
|
||||
|
||||
.leaflet-control-zoomslider-out {
|
||||
top: 202px;
|
||||
width: 26px;
|
||||
height: 20px;
|
||||
left: 10px;
|
||||
background-position: -15px -220px;
|
||||
}
|
||||
|
||||
.leaflet-control-zoomslider-slider {
|
||||
top: 70px;
|
||||
width: 26px;
|
||||
height: 132px;
|
||||
left: 10px;
|
||||
background-position: -15px -84px;
|
||||
}
|
||||
|
||||
.leaflet-control-zoomslider-slider-knob {
|
||||
top: 0px;
|
||||
width: 25px;
|
||||
height: 10px;
|
||||
-webkit-transition: top 100ms linear;
|
||||
-moz-transition: top 100ms linear;
|
||||
-o-transition: top 100ms linear;
|
||||
background-position: -77px -58px;
|
||||
pointer: move;
|
||||
cursor: move;
|
||||
}
|
|
@ -26,26 +26,10 @@
|
|||
display: none;
|
||||
}
|
||||
|
||||
.olControlZoom {
|
||||
.leaflet-control {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.SimpleLayerSwitcher {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.olControlScaleLine {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.olControlAttribution {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#map {
|
||||
border: 1px solid black;
|
||||
margin: auto !important;
|
||||
|
|
|
@ -95,15 +95,13 @@ h1 {
|
|||
border: 0;
|
||||
}
|
||||
|
||||
.olControlSimplePanZoom {
|
||||
.leaflet-control-pan, .leaflet-control-zoomslider {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.site-index #map .olControlZoom,
|
||||
.site-index #map .SimpleLayerSwitcher,
|
||||
.site-export #map .olControlZoom,
|
||||
.site-export #map .SimpleLayerSwitcher {
|
||||
top: 8px !important;
|
||||
.site-index .leaflet-top,
|
||||
.site-export .leaflet-top {
|
||||
top: 47px !important;
|
||||
}
|
||||
|
||||
/* Rules for the main content area */
|
||||
|
@ -115,12 +113,6 @@ h1 {
|
|||
border-right: 0px;
|
||||
}
|
||||
|
||||
.site-export #content,
|
||||
.site-edit #content,
|
||||
.site-index #content {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
/* Rules for search sidebar when shown */
|
||||
|
||||
#sidebar {
|
||||
|
|
|
@ -3,6 +3,8 @@ class ExportController < ApplicationController
|
|||
before_filter :authorize_web
|
||||
before_filter :set_locale
|
||||
|
||||
caches_page :embed
|
||||
|
||||
def start
|
||||
end
|
||||
|
||||
|
@ -23,4 +25,7 @@ class ExportController < ApplicationController
|
|||
redirect_to "http://parent.tile.openstreetmap.org/cgi-bin/export?bbox=#{bbox}&scale=#{scale}&format=#{format}"
|
||||
end
|
||||
end
|
||||
|
||||
def embed
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
<div>
|
||||
<div style="text-align: center">
|
||||
<p style="margin-top: 10px; margin-bottom: 20px">
|
||||
<a id="browse_select_view" href="#"><%= t'browse.start.view_data' %></a>
|
||||
<a id="browse_filter_toggle" href="#"><%= t'browse.start_rjs.manually_select' %></a>
|
||||
<br />
|
||||
<a id="browse_select_box" href="#"><%= t'browse.start.manually_select' %></a>
|
||||
<br />
|
||||
<a id="browse_hide_areas_box" href="#"><%= t'browse.start.hide_areas' %></a>
|
||||
<a id="browse_hide_areas_box" href="#"><%= t'browse.start_rjs.hide_areas' %></a>
|
||||
</p>
|
||||
</div>
|
||||
<div id="browse_status" style="text-align: center; display: none">
|
||||
|
|
15
app/views/export/embed.html.erb
Normal file
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>OpenStreetMap Embedded</title>
|
||||
<%= stylesheet_link_tag "embed", :media=> "screen" %>
|
||||
<!--[if IE]>
|
||||
<%= stylesheet_link_tag "leaflet.ie", :media=> "screen" %>
|
||||
<![endif]-->
|
||||
<%= javascript_include_tag "embed" %>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map"></div>
|
||||
</body>
|
||||
</html>
|
|
@ -5,7 +5,11 @@
|
|||
<%= stylesheet_link_tag "small-#{dir}", :media => "only screen and (max-width:641px)" %>
|
||||
<%= stylesheet_link_tag "large-#{dir}", :media => "screen and (min-width: 642px)" %>
|
||||
<%= stylesheet_link_tag "print-#{dir}", :media => "print" %>
|
||||
<!--[if IE]><%= stylesheet_link_tag "large-#{dir}", :media => "screen" %><![endif]--> <!-- IE is totally broken with CSS media queries -->
|
||||
<%= stylesheet_link_tag "leaflet-all", :media => "screen, print" %>
|
||||
<!--[if IE]>
|
||||
<%= stylesheet_link_tag "leaflet.ie" %>
|
||||
<%= stylesheet_link_tag "large-#{dir}", :media => "screen" %>
|
||||
<![endif]-->
|
||||
<%= favicon_link_tag "favicon.ico" %>
|
||||
<%= favicon_link_tag "osm_logo.png", :rel => "apple-touch-icon", :type => "image/png" %>
|
||||
<%= tag("link", { :rel => "publisher", :href => "https://plus.google.com/111953119785824514010" }) %>
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
<% unless STATUS == :api_offline or STATUS == :database_offline -%>
|
||||
<% content_for :editmenu do -%>
|
||||
<li><%= link_to t("browse.start_rjs.notes_layer_name"), notes_url(:format => :json), :id => "show_notes" %></li>
|
||||
<li><%= link_to t("browse.start_rjs.data_layer_name"), { :controller => :browse, :action => :start }, :id => "show_data" %></li>
|
||||
<% end -%>
|
||||
<% end -%>
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
user_data = {
|
||||
:lon => contact.home_lon,
|
||||
:lat => contact.home_lat,
|
||||
:icon => type == "friend" ? "marker-blue.png" : "marker-green.png",
|
||||
:icon => image_path(type == "friend" ? "marker-blue.png" : "marker-green.png"),
|
||||
:description => render(:partial => "popup", :object => contact, :locals => {:type => type})
|
||||
}
|
||||
%>
|
||||
|
|
|
@ -122,7 +122,7 @@
|
|||
user_data = {
|
||||
:lon => @user.home_lon,
|
||||
:lat => @user.home_lat,
|
||||
:icon => "marker.png",
|
||||
:icon => image_path("marker-red.png"),
|
||||
:description => render(:partial => "popup", :object => @user, :locals => {:type => "your location"})
|
||||
}
|
||||
%>
|
||||
|
|
|
@ -60,7 +60,8 @@ OpenStreetMap::Application.configure do
|
|||
config.assets.precompile += %w( user.js diary_entry.js pngfix.js swfobject.js )
|
||||
config.assets.precompile += %w( large-ltr.css small-ltr.css print-ltr.css )
|
||||
config.assets.precompile += %w( large-rtl.css small-rtl.css print-rtl.css )
|
||||
config.assets.precompile += %w( browse.css theme/openstreetmap/style.css )
|
||||
config.assets.precompile += %w( browse.css leaflet-all.css leaflet.ie.css )
|
||||
config.assets.precompile += %w( embed.js embed.css )
|
||||
|
||||
# Disable delivery errors, bad email addresses will be ignored
|
||||
# config.action_mailer.raise_delivery_errors = false
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
# We need to restore field_changed? support until CPK is updated
|
||||
module ActiveRecord
|
||||
module AttributeMethods
|
||||
module Dirty
|
||||
private
|
||||
alias_method :field_changed?, :_field_changed?
|
||||
end
|
||||
end
|
||||
end
|
|
@ -132,14 +132,10 @@ af:
|
|||
node: Node
|
||||
relation: Relasie
|
||||
way: Weg
|
||||
start:
|
||||
manually_select: Kies 'n ander gebied handmatig
|
||||
view_data: Wys data vir die huidige kaart
|
||||
start_rjs:
|
||||
data_frame_title: Gegewens
|
||||
data_layer_name: Data
|
||||
details: Details
|
||||
drag_a_box: Trek 'n boks op die kaart om 'n gebied te kies
|
||||
edited_by_user_at_timestamp: Verander deur %{user} om %{timestamp}
|
||||
history_for_feature: Geskiedenis van %{feature}
|
||||
load_data: Laai data
|
||||
|
|
|
@ -184,14 +184,10 @@ aln:
|
|||
node: Nyje
|
||||
relation: Lidhje
|
||||
way: Udhë
|
||||
start:
|
||||
manually_select: Manualisht zgedh ni zon qetër
|
||||
view_data: Shini te dhanat per harten e tanishme
|
||||
start_rjs:
|
||||
data_frame_title: Te dhanunat
|
||||
data_layer_name: Të dhanunat
|
||||
details: Detajet
|
||||
drag_a_box: Tërhjeke nji kuti n'hartë për me e zgjedhë zonën
|
||||
edited_by_user_at_timestamp: E ka ndryshue %{user} në %{timestamp}
|
||||
history_for_feature: Historia për %{feature}
|
||||
load_data: Ngarkoji të dhanunat
|
||||
|
|
|
@ -205,14 +205,10 @@ ar:
|
|||
node: عقدة
|
||||
relation: علاقة
|
||||
way: طريق
|
||||
start:
|
||||
manually_select: اختر يدويًا منطقة أخرى
|
||||
view_data: أظهر بيانات عرض الخريطة الحالي
|
||||
start_rjs:
|
||||
data_frame_title: البيانات
|
||||
data_layer_name: تصفح بيانات الخريطة
|
||||
details: التفاصيل
|
||||
drag_a_box: اسحب مربع على الخريطة لاختيار منطقة
|
||||
edited_by_user_at_timestamp: عُدّل بواسطة %{user} في %{timestamp}
|
||||
hide_areas: إخفاء المناطق
|
||||
history_for_feature: تاريخ الــ%{feature}
|
||||
|
|
|
@ -175,14 +175,10 @@ arz:
|
|||
node: عقدة
|
||||
relation: علاقة
|
||||
way: طريق
|
||||
start:
|
||||
manually_select: اختر يدويًا منطقه أخرى
|
||||
view_data: أظهر بيانات عرض الخريطه الحالي
|
||||
start_rjs:
|
||||
data_frame_title: البيانات
|
||||
data_layer_name: البيانات
|
||||
details: التفاصيل
|
||||
drag_a_box: اسحب مربع على الخريطه لاختيار منطقة
|
||||
edited_by_user_at_timestamp: عُدّل بواسطه %{user} فى %{timestamp}
|
||||
history_for_feature: تاريخ الــ%{feature}
|
||||
load_data: تحميل البيانات
|
||||
|
|
|
@ -193,14 +193,10 @@ ast:
|
|||
node: Nodiu
|
||||
relation: Rellación
|
||||
way: Vía
|
||||
start:
|
||||
manually_select: Seleiciona manualmente un área distinta
|
||||
view_data: Ver datos de la vista actual del mapa
|
||||
start_rjs:
|
||||
data_frame_title: Datos
|
||||
data_layer_name: Ver datos del mapa
|
||||
details: Detalles
|
||||
drag_a_box: Arrastra un cuadru nel mapa pa seleicionar un área
|
||||
edited_by_user_at_timestamp: Editao por %{user} el %{timestamp}
|
||||
hide_areas: Anubrir árees
|
||||
history_for_feature: Historial de %{feature}
|
||||
|
|
|
@ -192,14 +192,10 @@ be-Tarask:
|
|||
node: Вузел
|
||||
relation: Адносіны
|
||||
way: Шлях
|
||||
start:
|
||||
manually_select: Выбраць іншы абшар
|
||||
view_data: Паказаць зьвесткі для цяперашняга выгляду мапы
|
||||
start_rjs:
|
||||
data_frame_title: Зьвесткі
|
||||
data_layer_name: Праглядзець зьвесткі мапы
|
||||
details: Падрабязнасьці
|
||||
drag_a_box: Расьцягніце рамку для выбару абшару
|
||||
edited_by_user_at_timestamp: Рэдагаваны %{user} у %{timestamp}
|
||||
hide_areas: Схаваць вобласьці
|
||||
history_for_feature: Гісторыя %{feature}
|
||||
|
|
|
@ -197,14 +197,10 @@ br:
|
|||
node: Skoulm
|
||||
relation: Darempred
|
||||
way: Hent
|
||||
start:
|
||||
manually_select: Diuzañ un takad disheñvel gant an dorn
|
||||
view_data: Gwelet ar roadennoù evit gwel red ar gartenn
|
||||
start_rjs:
|
||||
data_frame_title: Roadennoù
|
||||
data_layer_name: Furchal e roadennoù ar gartenn
|
||||
details: Munudoù
|
||||
drag_a_box: Tresit ur voest war ar gartenn evit diuzañ un takad
|
||||
edited_by_user_at_timestamp: Aozet gant %{user} da %{timestamp}
|
||||
hide_areas: Kuzhat an takadoù
|
||||
history_for_feature: Istor evit %{feature}
|
||||
|
|
|
@ -73,6 +73,14 @@ bs:
|
|||
way: Putanja
|
||||
way_node: Čvor putanje
|
||||
way_tag: Oznaka putanje
|
||||
application:
|
||||
require_cookies:
|
||||
cookies_needed: Čini se da su vam kolačići onemogućeni, molimo omogućite kolačiće u vašem pregledniku prije nastavka.
|
||||
require_moderator:
|
||||
not_a_moderator: Trebate biti moderator da bi izvršili tu radnju.
|
||||
setup_user_auth:
|
||||
blocked: Vaš pristup API-u je blokiran. Prijavite se na web upravljačku ploču da saznate više.
|
||||
need_to_see_terms: Vaš pristup API-ju je privremeno suspendovan. Molimo da se prijavite na web upravljačku ploču da pogledate Uslove za doprinosioce. Ne morate se složiti, ali ih morate pogledati.
|
||||
browse:
|
||||
changeset:
|
||||
changeset: "Set promjena: %{id}"
|
||||
|
@ -191,14 +199,10 @@ bs:
|
|||
node: Čvor
|
||||
relation: Relacija
|
||||
way: Putanja
|
||||
start:
|
||||
manually_select: Ručno izabrati drukčije područje
|
||||
view_data: Prikazati podatke za trenutni prikaz karte
|
||||
start_rjs:
|
||||
data_frame_title: Podaci
|
||||
data_layer_name: Pretražiti podatke na karti
|
||||
details: Detalji
|
||||
drag_a_box: Povući okvir na karti za odabir područja
|
||||
edited_by_user_at_timestamp: Uređeno od strane %{user} u %{timestamp}
|
||||
hide_areas: Sakriti područja
|
||||
history_for_feature: Historija za %{feature}
|
||||
|
@ -315,8 +319,8 @@ bs:
|
|||
hide_link: Sakriti ovaj komentar
|
||||
diary_entry:
|
||||
comment_count:
|
||||
one: 1 komentar
|
||||
other: "%{count} komentara"
|
||||
other: jedan=%{count} komentar
|
||||
zero: nema komentara
|
||||
comment_link: Komentirati ovaj zapis
|
||||
confirm: Potvrditi
|
||||
edit_link: Urediti ovaj unos
|
||||
|
@ -912,6 +916,19 @@ bs:
|
|||
water_point: Tačka vodotoka
|
||||
waterfall: Vodopad
|
||||
weir: Brana
|
||||
javascripts:
|
||||
map:
|
||||
base:
|
||||
cycle_map: Biciklistička karta
|
||||
standard: Standardni/a
|
||||
transport_map: Transportna karta
|
||||
site:
|
||||
edit_disabled_tooltip: Uvećati za uređivanje karte
|
||||
edit_tooltip: Urediti kartu
|
||||
edit_zoom_alert: Morate uvećati da bi uređivali kartu
|
||||
history_disabled_tooltip: Uvećajte da biste vidjeli uređivanja za ovo područje
|
||||
history_tooltip: Prikazati izmjene za ovo područje
|
||||
history_zoom_alert: Morate uvećati da bi vidjeli historiju izmjena za ovo područje
|
||||
layouts:
|
||||
community: Zajednica
|
||||
community_blogs: Blogovi zajednice
|
||||
|
@ -1012,6 +1029,76 @@ bs:
|
|||
native_link: BOSANSKI verzija
|
||||
text: Vi gledate englesku verziju stranice o autorskim pravima. Možete se vratiti na %{native_link} ove stranice ili možete prestati čitati o autorskim pravima i %{mapping_link}.
|
||||
title: O ovoj stranici
|
||||
message:
|
||||
delete:
|
||||
deleted: Poruka izbrisana
|
||||
inbox:
|
||||
date: Datum
|
||||
from: Od
|
||||
messages: Imate %{new_messages} i %{old_messages}
|
||||
my_inbox: Moja dolazna pošta
|
||||
new_messages:
|
||||
one: "%{count} nova poruka"
|
||||
other: "%{count} nove/ih poruke/a"
|
||||
no_messages_yet: Još uvijek nemate poruka. Zašto nebi stupili u kontakt s nekim ljudima iz okoline %{people_mapping_nearby_link}?
|
||||
old_messages:
|
||||
one: "%{count} stara poruka"
|
||||
other: "%{count} stare poruke"
|
||||
outbox: odlazna pošta
|
||||
people_mapping_nearby: osobe koje uređuju kartu blizu Vas
|
||||
subject: Predmet
|
||||
title: Dolazna pošta
|
||||
mark:
|
||||
as_read: Poruka označena kao pročitana
|
||||
as_unread: Poruka označena kao nepročitana
|
||||
message_summary:
|
||||
delete_button: Izbrisati
|
||||
read_button: Označiti kao pročitano
|
||||
reply_button: Odgovoriti
|
||||
unread_button: Označiti kao nepročitano
|
||||
new:
|
||||
back_to_inbox: Nazad u dolaznu poštu
|
||||
body: Tijelo
|
||||
limit_exceeded: Nedavno ste poslali puno poruke. Pričekajte prije nego pokušate poslati još.
|
||||
message_sent: Poruka poslana
|
||||
send_button: Poslati
|
||||
send_message_to: Poslati novu poruku za %{name}
|
||||
subject: Predmet
|
||||
title: Poslati poruku
|
||||
no_such_message:
|
||||
body: Žao nam je nema poruke s tim id.
|
||||
heading: Nema takve poruke
|
||||
title: Nema takve poruke
|
||||
outbox:
|
||||
date: Datum
|
||||
inbox: dolazna pošta
|
||||
messages:
|
||||
one: Poslali ste %{count} poruku
|
||||
other: Poslali ste %{count} poruke/a
|
||||
my_inbox: Moj %{inbox_link}
|
||||
no_sent_messages: Još uvijek nemate poslanih poruka. Zašto nebi stupili u kontakt s nekim ljudima iz okoline %{people_mapping_nearby_link}?
|
||||
outbox: odlazna pošta
|
||||
people_mapping_nearby: osobe koje uređuju kartu blizu Vas
|
||||
subject: Predmet
|
||||
title: Odlazna pošta
|
||||
to: Za
|
||||
read:
|
||||
back_to_inbox: Nazad u dolaznu poštu
|
||||
back_to_outbox: Nazad u odlaznu poštu
|
||||
date: Datum
|
||||
from: Od
|
||||
reading_your_messages: Čitanje Vaših poruka
|
||||
reading_your_sent_messages: Čitanje Vaših poslanih poruka
|
||||
reply_button: Odgovoriti
|
||||
subject: Predmet
|
||||
title: Pročitati poruku
|
||||
to: Za
|
||||
unread_button: Označiti kao nepročitano
|
||||
wrong_user: "Prijavljeni ste kao: `%{user}', ali poruka za koju ste tražili da pročitate nije poslana od strane ili tom korisniku. Molimo, prijavite se kao ispravan korisnik kako bi ste je pročitali."
|
||||
reply:
|
||||
wrong_user: "Prijavljeni ste kao: `%{user}', ali poruka za koju ste zamoljeni da odgovorite nije poslana tom korisniku. Molimo, prijavite se kao ispravan korisnik kako bi odgovorili."
|
||||
sent_message_summary:
|
||||
delete_button: Izbrisati
|
||||
notifier:
|
||||
diary_comment_notification:
|
||||
footer: Možete pročitati komentare na %{readurl} i komentirati na %{commenturl} ili odgovoriti na %{replyurl}
|
||||
|
@ -1021,6 +1108,7 @@ bs:
|
|||
email_confirm:
|
||||
subject: "[OpenStreetMap] Potvrdite Vašu e-mail adresu"
|
||||
email_confirm_html:
|
||||
click_the_link: Ako ste ovo Vi, kliknite na link naveden ispod za potvrdu promjene
|
||||
greeting: Zdravo,
|
||||
hopefully_you: Netko (nadamo se Vi) bi želio promjeniti svoju e-mail adresu sa %{server_url} na %{new_address}.
|
||||
email_confirm_plain:
|
||||
|
@ -1047,6 +1135,17 @@ bs:
|
|||
subject: "[OpenStreetMap] GPX Import uspješan"
|
||||
with_description: sa opisom
|
||||
your_gpx_file: Liči na vašu GPX datoteku
|
||||
lost_password:
|
||||
subject: "[OpenStreetMap] Zahtjev za ponovnim postavljanjem lozinke"
|
||||
lost_password_html:
|
||||
click_the_link: Ukoliko ste ovo Vi, kliknite na link ispod za ponovno postavljanje lozinke.
|
||||
greeting: Zdravo,
|
||||
hopefully_you: Neko (moguće, Vi) je pitao za ponovno postavljanje lozinke na njihovim e-mail adresama openstreetmap.org računa.
|
||||
lost_password_plain:
|
||||
click_the_link: Ukoliko ste ovo Vi, kliknite na link ispod za ponovno postavljanje lozinke.
|
||||
greeting: Zdravo,
|
||||
hopefully_you_1: Neko (moguće Vi) je pitao za ponovno postavljanje lozinke na
|
||||
hopefully_you_2: e-mail adrese openstreetmap.org korisničkog računa.
|
||||
message_notification:
|
||||
footer1: Možete takođe pročitati poruku na %{readurl}
|
||||
footer2: i možete odgovoriti na %{replyurl}
|
||||
|
@ -1078,6 +1177,694 @@ bs:
|
|||
the_wiki: "Čitajte o OpenStreetMap-u na wiki-ju:"
|
||||
user_wiki_page: Preporučeno je da napravite wiki korisničku stranicu, koja uključuje oznake kategorije gdje se nalazite, kao što je [[Category:Users_in_Sarajevo]].
|
||||
wiki_signup: "Možda želite takođe otvoriti račun i na OpenStreetMap wiki na:"
|
||||
oauth:
|
||||
oauthorize:
|
||||
allow_read_gpx: Pročitajte Vaše privatne GPS trase.
|
||||
allow_read_prefs: Pročitajte Vaše korisničke postavke.
|
||||
allow_to: "Dozvoliti klijentskoj aplikaciji da:"
|
||||
allow_write_api: Izmijenite kartu.
|
||||
allow_write_diary: Zapište u dnevnik, komentirajte i sklopite prijateljstva.
|
||||
allow_write_gpx: Postaviti GPS trase.
|
||||
allow_write_prefs: Izmjenite Vaše korisničke postavke.
|
||||
request_access: "Aplikacija %{app_name} zahtjeva pristup Vašem korisničkom računu: %{user}. Provjerite želite li da aplikacija ima sljedeće mogućnosti. Možete odabrati koliko joj pristupa želite dopustiti."
|
||||
revoke:
|
||||
flash: Opozvali ste značku za %{application}
|
||||
oauth_clients:
|
||||
create:
|
||||
flash: Informacije su uspješno registrirane
|
||||
destroy:
|
||||
flash: Uništena registracija klijent aplikacije
|
||||
edit:
|
||||
submit: Urediti
|
||||
title: Uredite Vašu aplikaciju
|
||||
form:
|
||||
allow_read_gpx: Pročitajte njihove privatne GPS trase.
|
||||
allow_read_prefs: Pročitajte njihove korisničke postavke.
|
||||
allow_write_api: Izmijenite kartu.
|
||||
allow_write_diary: Zapište u dnevnik, komentirajte i sklopite prijateljstva.
|
||||
allow_write_gpx: Postaviti GPS trase.
|
||||
allow_write_prefs: Izmjenite njhove korisničke postavke.
|
||||
callback_url: URL za povratni poziv
|
||||
name: Ime
|
||||
requests: "Zahtjevamo sljedeće dozvole od korisnika:"
|
||||
required: Obavezno
|
||||
support_url: URL podrške
|
||||
url: URL glavne aplikacije
|
||||
index:
|
||||
application: Ime aplikacije
|
||||
issued_at: Izdano u
|
||||
list_tokens: "Sljedeće značke su izdane aplikacijama na vaše ime:"
|
||||
my_apps: Moje klijentske aplikacije
|
||||
my_tokens: Moje ovlaštene aplikacije
|
||||
no_apps: Imate li aplikaciju koju želite registrirati za korištenje sa %{oauth} standardom? Morate registrirati Vašu web aplikaciju prije nego ona može slati OAuth zahtjeve za ovu uslugu
|
||||
register_new: Registrirajte Vašu aplikaciju
|
||||
registered_apps: "Imate registrirane slijedeće klijentske aplikacije:"
|
||||
revoke: Opozvati!
|
||||
title: Moji OAuth detalji
|
||||
new:
|
||||
submit: Registrirati
|
||||
title: Registrirajte novu aplikaciju
|
||||
not_found:
|
||||
sorry: Žao mi je, taj se %{type} ne može naći.
|
||||
show:
|
||||
access_url: "URL pristupa znački:"
|
||||
allow_read_gpx: Pročitajte njihove privatne GPS trase.
|
||||
allow_read_prefs: Pročitajte njihove korisničke postavke.
|
||||
allow_write_api: Izmijenite kartu.
|
||||
allow_write_diary: Zapište u dnevnik, komentirajte i sklopite prijateljstva.
|
||||
allow_write_gpx: Postaviti GPS trase.
|
||||
allow_write_prefs: Izmjenite njhove korisničke postavke.
|
||||
authorize_url: "URL ovlaštenja:"
|
||||
confirm: Da li ste sigurni?
|
||||
delete: Izbrisati klijenta
|
||||
edit: Urediti detalje
|
||||
key: "Ključ korisnika:"
|
||||
requests: "Zahtjevamo sljedeće dozvole od korisnika:"
|
||||
secret: "Tajna korisnika:"
|
||||
support_notice: Podržavamo HMAC-SHA1 (preporučeno) kao i obični tekst u ssl modu.
|
||||
title: OAuth detalji za %{app_name}
|
||||
url: "URL za zahtjev značke:"
|
||||
update:
|
||||
flash: Informacije o klijentu uspješno osvježene
|
||||
redaction:
|
||||
create:
|
||||
flash: Redakcija napravljena.
|
||||
destroy:
|
||||
error: Pojavila se greška tokom uništavanja ove redakcije.
|
||||
flash: Redakcija uništena.
|
||||
not_empty: Redakcija nije prazna. Molimo poništite sve verzije koje ne pripadaju ovoj redakciji prije nego je uništite.
|
||||
edit:
|
||||
description: Opis
|
||||
heading: Urediti redakciju
|
||||
submit: Spremiti redakciju
|
||||
title: Urediti redakciju
|
||||
index:
|
||||
empty: Nema redakcija za prikaz.
|
||||
heading: Spisak redakcija
|
||||
title: Spisak redakcija
|
||||
new:
|
||||
description: Opis
|
||||
heading: Unijeti informacije za novu redakciju
|
||||
submit: Napraviti redakciju
|
||||
title: Pravljenje nove redakcije
|
||||
show:
|
||||
confirm: Da li ste sigurni?
|
||||
description: "Opis:"
|
||||
destroy: Ukloniti ovu redakciju
|
||||
edit: Urediti ovu redakciju
|
||||
heading: Prikaz redakcije "%{title}"
|
||||
title: Prikaz redakcije
|
||||
user: "Kreator:"
|
||||
update:
|
||||
flash: Promjene sačuvane.
|
||||
site:
|
||||
edit:
|
||||
anon_edits_link_text: Otkrijte zašto je to tako.
|
||||
flash_player_required: Potreban Vam je Flash player da bi koristili Potlatch, OpenStreetMap Flash uređivač. Možete <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">preuzeti Adobe Flash Player sa Adobe.com</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">Neke druge mogućnosti</a> su takođe dostupne za uređivanje OpenStreetMap-a.
|
||||
no_iframe_support: Vaš preglednik ne podržava HTML iframes, koji su potrebni za ovu značajku.
|
||||
not_public: Niste postavili Vaše promjene tako da budu javne.
|
||||
not_public_description: Ne možete više uređivati kartu dok to ne napravite. Možete promjeniti Vaše promjene u javne sa %{user_page}.
|
||||
potlatch2_not_configured: Potlatch 2 nije konfiguriran - molimo pogledajte http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 za više informacija
|
||||
potlatch2_unsaved_changes: Imate nespremljene promjene. (Da bi ste spremili u Potlatch 2, trebali bi kliknuti Spremiti.)
|
||||
potlatch_unsaved_changes: Imate nespremljene promjene. (Da bi ste spremili u Potlatch-u, morate odznačiti trenutnu putanju ili tačku, ako uređujete uživo; ili kliknite SPREMITI ako imate to dugme.)
|
||||
user_page_link: korisnička stranica
|
||||
index:
|
||||
js_1: Koristite internet preglednik koji ne podržava JavaScript, ili ste onemogućili JavaScript.
|
||||
js_2: OpenStreetMap koristi JavaScript za slippy kartu.
|
||||
license:
|
||||
copyright: Autorska prava OpenStreetMap i doprinosioci, pod otvorenom dozvolom
|
||||
permalink: Trajni link
|
||||
remote_failed: Uređivanje nije uspjelo - provjerite da li je JOSM ili Merkaartor učitan i da je opcija udaljenog pristupa omogućena
|
||||
shortlink: Kratki link
|
||||
key:
|
||||
map_key: Legenda
|
||||
map_key_tooltip: Legenda karte
|
||||
table:
|
||||
entry:
|
||||
admin: Administrativna granica
|
||||
allotments: Vrtovi
|
||||
apron:
|
||||
- Parking za avione
|
||||
- terminal
|
||||
bridge: Crni rubovi = most
|
||||
bridleway: Konjička staza
|
||||
brownfield: Gradilište
|
||||
building: Značajna zgrada
|
||||
byway: Prečica
|
||||
cable:
|
||||
- Kabinska žičara
|
||||
- Uspinjača sa naslonjačem
|
||||
cemetery: Groblje
|
||||
centre: Sportski centar
|
||||
commercial: Poslovno područje
|
||||
common:
|
||||
- Travnjaci
|
||||
- Livada
|
||||
construction: Ceste u izgradnji
|
||||
cycleway: Biciklistička staza
|
||||
destination: Pristup odredištu
|
||||
farm: Polja, farme, njive
|
||||
footway: Pješačka staza
|
||||
forest: Šume (održavane, od šumarije)
|
||||
golf: Golf teren
|
||||
heathland: Stepa
|
||||
industrial: Industrijsko područje
|
||||
lake:
|
||||
- Jezero
|
||||
- Rezervoar
|
||||
military: Vojno područje
|
||||
motorway: Autoput
|
||||
park: Park
|
||||
permissive: Pristup uz dozvolu
|
||||
pitch: Sportski teren
|
||||
primary: Državna cesta
|
||||
private: Privatni pristup
|
||||
rail: Željeznica
|
||||
reserve: Rezervat prirode
|
||||
resident: Stambeno područje
|
||||
retail: Maloprodajno područje
|
||||
runway:
|
||||
- Aerodromska pista
|
||||
- Aerodromska rulna staza
|
||||
school:
|
||||
- Škola
|
||||
- Univerzitet
|
||||
secondary: Sekundarna cesta
|
||||
station: Željeznička stanica
|
||||
subway: Podzemna željeznica
|
||||
summit:
|
||||
- Vrh
|
||||
- Kota
|
||||
tourist: Turistička atrakcija
|
||||
track: Staza
|
||||
tram:
|
||||
- Lahka željeznica
|
||||
- tramvaj
|
||||
trunk: Brza cesta
|
||||
tunnel: Iscrtkani rubovi = tunel
|
||||
unclassified: Neklasificirana cesta
|
||||
unsurfaced: Neasfaltirana cesta
|
||||
wood: Šume (prirodne, neodržavane)
|
||||
markdown_help:
|
||||
alt: Alt tekst
|
||||
first: Prvi objekat
|
||||
heading: Naslov
|
||||
headings: Naslovi
|
||||
image: Slika
|
||||
link: Poveznica
|
||||
ordered: Uređeni popis
|
||||
second: Drugi objekat
|
||||
subheading: Podnaslov
|
||||
text: Tekst
|
||||
title_html: Analizirano sa <a href="http://daringfireball.net/projects/markdown/">Markdown</a>
|
||||
unordered: Neuređeni popis
|
||||
url: URL
|
||||
richtext_area:
|
||||
edit: Urediti
|
||||
preview: Pregledati
|
||||
search:
|
||||
search: Pretraga
|
||||
search_help: "primjer: 'Mostar', 'Ferhadija 52, Sarajevo', ili 'željeznička stanica, Doboj' <a href='http://wiki.openstreetmap.org/wiki/Search'>više primjera...</a>"
|
||||
submit_text: Idi
|
||||
where_am_i: Gdje sam?
|
||||
where_am_i_title: Opišite trenutnu lokaciju koristeći pretraživač
|
||||
sidebar:
|
||||
close: Zatvoriti
|
||||
search_results: Rezultati pretrage
|
||||
time:
|
||||
formats:
|
||||
friendly: "%e %B %Y u %H:%M"
|
||||
trace:
|
||||
create:
|
||||
trace_uploaded: Vaša GPS datoteka je spremljena na server i čeka ubacivanje u bazu. Ovo se obično dogodi za pola sata i prije, a e-mail-om će te dobiti obavijest o završetku.
|
||||
upload_trace: Postaviti GPS trasu
|
||||
delete:
|
||||
scheduled_for_deletion: Trasa raspoređena za brisanje
|
||||
edit:
|
||||
description: "Opis:"
|
||||
download: preuzimanje
|
||||
edit: urediti
|
||||
filename: "Ime datoteke:"
|
||||
heading: Uređivanje trase %{name}
|
||||
map: karta
|
||||
owner: "Vlasnik:"
|
||||
points: "Tačaka:"
|
||||
save_button: Sačuvati promjene
|
||||
start_coord: "Početna koordinata:"
|
||||
tags: "Oznake:"
|
||||
tags_help: odvojeno zarezima
|
||||
title: Uređivanje trase %{name}
|
||||
uploaded_at: "Postavljeno:"
|
||||
visibility: "Vidljivost:"
|
||||
visibility_help: Šta ovo znači?
|
||||
list:
|
||||
empty_html: JNoš uvijek nema ništa ovdje. <a href='%{upload_link}'>Postavite novu trasu</a> ili naučite više o GPS trasiranju na <a href='http://wiki.openstreetmap.org/wiki/Bs:Beginners'_guide'>wiki stranici</a>.
|
||||
public_traces: Javne GPS trase
|
||||
public_traces_from: Javne GPS trase korisnika %{user}
|
||||
tagged_with: " označeno sa %{tags}"
|
||||
your_traces: Vaše GPS trase
|
||||
make_public:
|
||||
made_public: Trasa za javnost
|
||||
offline:
|
||||
heading: GPX spremište je offline
|
||||
message: Sistem za GPX spremanje i postavljanje trenutno nije u funkciji.
|
||||
offline_warning:
|
||||
message: Sistem za GPX upload trenutno nije u funkciji.
|
||||
trace:
|
||||
ago: prije %{time_in_words_ago}
|
||||
by: od
|
||||
count_points: "%{count} tačaka"
|
||||
edit: urediti
|
||||
edit_map: Urediti kartu
|
||||
identifiable: MOŽE SE IDENTIFICIRATI
|
||||
in: u
|
||||
map: karta
|
||||
more: više
|
||||
pending: NA ČEKANJU
|
||||
private: PRIVATNO
|
||||
public: JAVNO
|
||||
trace_details: Pogledati detalje trase
|
||||
trackable: MOŽE SE PRATITI
|
||||
view_map: Pogledati kartu
|
||||
trace_form:
|
||||
description: "Opis:"
|
||||
help: Pomoć
|
||||
tags: "Oznake:"
|
||||
tags_help: odvojeno zarezima
|
||||
upload_button: Postaviti
|
||||
upload_gpx: Poslati GPX datoteku
|
||||
visibility: "Vidljivost:"
|
||||
visibility_help: Šta ovo znači?
|
||||
trace_header:
|
||||
see_all_traces: Pogledati sve trase
|
||||
see_your_traces: Pogledati vlastite trase
|
||||
traces_waiting: Imate %{count} trasu/e/a na čekanju za slanje. Uzmite ovo u obzir, i pričekajte da se završe prije slanja novih trasa, da ne blokirate ostale korisnike.
|
||||
upload_trace: Poslati GPS trasu
|
||||
trace_optionals:
|
||||
tags: Oznake
|
||||
trace_paging_nav:
|
||||
newer: Novije trase
|
||||
older: Starije trase
|
||||
showing_page: Prikaz stranice %{page}
|
||||
view:
|
||||
delete_track: Izbrišite ovu trasu
|
||||
description: "Opis:"
|
||||
download: preuzimanje
|
||||
edit: urediti
|
||||
edit_track: Uredite ovu trasu
|
||||
filename: "Ime datoteke:"
|
||||
heading: Prikaz trase %{name}
|
||||
map: karta
|
||||
none: Ništa
|
||||
owner: "Vlasnik:"
|
||||
pending: U TOKU
|
||||
points: "Tačaka:"
|
||||
start_coordinates: "Početna koordinata:"
|
||||
tags: "Oznake:"
|
||||
title: Prikaz trase %{name}
|
||||
trace_not_found: Trasa nije pronađena!
|
||||
uploaded: "Postavljeno:"
|
||||
visibility: "Vidljivost:"
|
||||
visibility:
|
||||
identifiable: Može se identificirati (prikazan u listi trasa kao onaj koji se može identificirati, uređene tačke sa vremenskom oznakom)
|
||||
private: Privatni (prikazuje se kao anoniman, neuređene tačke)
|
||||
public: Javni (prikazan u listi trasa i kao anoniman, neuređene tačke)
|
||||
trackable: Može se pratiti (prikazuje se kao anoniman, uređene tačke sa vremenskom oznakom)
|
||||
user:
|
||||
account:
|
||||
contributor terms:
|
||||
agreed: Prihvatili ste nove uslove za doprinosioce.
|
||||
agreed_with_pd: Takođe ste proglasili da će vaše izmjene biti u javnom vlasništvu.
|
||||
heading: "Uslovi za doprinosioce:"
|
||||
link text: Šta je ovo?
|
||||
not yet agreed: Niste još uvijek prihvatili nove uslove za doprinosioce.
|
||||
review link text: Molimo Vas da slijedite ovaj link kada vam bude prikladno da pregledate i prihvatite nove uslove za doprinosioce.
|
||||
current email address: "Trenutna e-mail adresa:"
|
||||
delete image: Ukloniti trenutnu sliku
|
||||
email never displayed publicly: (nikada se ne prikazuje javno)
|
||||
flash update success: Korisničke informacije su uspješno osvježene.
|
||||
flash update success confirm needed: Korisničke informacije su uspješno osvježene. Provjerite e-mail za porukom za potvrdu nove e-mail adrese.
|
||||
gravatar:
|
||||
gravatar: Koristiti Gravatar
|
||||
link text: Šta je ovo?
|
||||
home location: "Matična lokacija:"
|
||||
image: "Slika:"
|
||||
image size hint: (kvadratne slike od barem 100x100 piksela su najbolje)
|
||||
keep image: Zadržati trenutnu sliku
|
||||
latitude: Geografska širina (Latitude)
|
||||
longitude: Geografska dužina (Longitude)
|
||||
make edits public button: Napraviti sve moje promjene javnim
|
||||
my settings: Moja podešavanja
|
||||
new email address: "Nova e-mail adresa:"
|
||||
new image: Dodati sliku
|
||||
no home location: Niste unijeli Vašu matičnu lokaciju.
|
||||
openid:
|
||||
link: http://wiki.openstreetmap.org/wiki/OpenID
|
||||
link text: Šta je ovo?
|
||||
openid: OtvoreniID
|
||||
preferred editor: "Preferirani uređivač:"
|
||||
preferred languages: "Preferirani jezici:"
|
||||
profile description: "Opis profila:"
|
||||
public editing:
|
||||
disabled: Onemogućno i ne mogu se uređivati podaci, sva prethodna uređivanja su anonimna.
|
||||
disabled link text: Zašto ja ne mogu uređivati?
|
||||
enabled: Omogućeno. Nije anonimno i mogu se uređivati podaci.
|
||||
enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits
|
||||
enabled link text: Šta je ovo?
|
||||
heading: "Javno uređivanje:"
|
||||
public editing note:
|
||||
heading: "Javno uređivanje:"
|
||||
text: Trenutno su vaša uređivanja anonimna i ljudi vam ne mogu poslati poruke ili vidjeti vašu lokaciju. Da bi pokazali vaša uređivanja i dozvolili ljudima da vas kontaktiraju preko website-a, kliknite na dugme ispod <b>Od promjene 0.6 API-a, samo javni korisnici mogu uređivati karte</b>. (<a href="http://wiki.openstreetmap.org/wiki/Anonymous_edits">saznajte zašto</a>).<ul> <li>Vaša e-mail adrea neće biti otkrivena ako postanete javni.</li> <li>Ova akcija se ne može poništiti i svi novi korisnici su postavljeni kao javni.</li> </ul>
|
||||
replace image: Zamijeniti trenutnu sliku
|
||||
return to profile: Vratiti se na profil
|
||||
save changes button: Sačuvati promjene
|
||||
title: Urediti korisnički račun
|
||||
update home location on click: Osvježiti matičnu lokaciju kada kliknem na kartu?
|
||||
confirm:
|
||||
already active: Ovaj račun je već potvrđen.
|
||||
before you start: Znamo da ste vjerovatno u žurbi za početak unošenja podataka na kartu, ali prije nego što počnete, možda bi željeli ispuniti neke dodatne informacije o sebi u donji obrazac.
|
||||
button: Potvrditi
|
||||
heading: Potvrditi korisnički račun
|
||||
press confirm button: Pritisnuti potvrditi da bi aktivirali Vaš korisnički račun.
|
||||
reconfirm: Ako je prošlo neko vrijeme otkad ste se prijavili možda ćete morati <a href="%{reconfirm}">poslati sebi novi e-mail potvrde</a> .
|
||||
success: Vaš račun je potvrđen, hvala na uključenju!
|
||||
unknown token: Izgleda da ta značka ne postoji.
|
||||
confirm_email:
|
||||
button: Potvrditi
|
||||
failure: E-mail adresa je već potvrđena sa ovom značkom.
|
||||
heading: Potvrditi promjenu e-mail adrese.
|
||||
press confirm button: Pritsnite potvrdno dugme ispod da bi ste potvrdili novu e-mail adresu.
|
||||
success: Vaša e-mail adresa je potvrđena, hvala na uključenju!
|
||||
confirm_resend:
|
||||
failure: Korisnik %{name} nije pronađen.
|
||||
success: Poslali smo novu potvrdu na e-mail %{email} a čim potvrdite svoj račun, moći ćete početi mapirati.<br /><br />Ako koristite antispam sistem koji šalje potvrdu zahtjeva, molimo Vas da provjerite jeli webmaster@openstreetmap.org na tzv. "bijeloj listi", jer nismo u mogućnosti odgovarati na potvrde zahtjeva.
|
||||
filter:
|
||||
not_an_administrator: Trebate biti moderator da bi izvršili tu radnju.
|
||||
go_public:
|
||||
flash success: Sva Vaša uređivanja su sada javna i sada vam je dozvoljeno uređivanje.
|
||||
list:
|
||||
confirm: Potvrditi odabrane korisnike
|
||||
empty: Nisu pronađeni odgovarajući korisnici.
|
||||
heading: Korisnici
|
||||
hide: Sakriti odabrane korisnike
|
||||
showing:
|
||||
one: Prikaz stranice %{page} (%{first_item} od %{items})
|
||||
other: Prikaz stranice %{page} (%{first_item}-%{last_item} od %{items})
|
||||
summary: "%{name} napravljeno sa %{ip_address} dana %{date}"
|
||||
summary_no_ip: "%{name} napravljeno %{date}"
|
||||
title: Korisnici
|
||||
login:
|
||||
account is suspended: Žao nam je, Vaš račun je suspendovan zbog sumnjive aktivnosti.<br />Molimo kontaktirajte <a href="%{webmaster}">webmastera</a> uoliko želite da diskutujete o ovome.
|
||||
account not active: Žao nam je, Vaš korisnički račun još nije aktivan. <br /> Molimo vas da koristite poveznicu u e-mailu potvrde da bi ste aktivirali svoj račun, ili <a href="%{reconfirm}">zatražiti novi e-mail potvrde</a> .
|
||||
auth failure: Žao mi je, ne možemo Vas prijaviti sa ovim detaljima.
|
||||
create account minute: Otvorite korisnički račun. To traje samo minutu.
|
||||
email or username: "E-mail adresa ili korisničko ime:"
|
||||
heading: Prijava
|
||||
login_button: Prijava
|
||||
lost password link: Izgubili ste lozinku?
|
||||
new to osm: Novi na OpenStreetMap?
|
||||
no account: Nemate korisničko ime?
|
||||
openid: "%{logo} OtvoreniID:"
|
||||
openid invalid: Žao nam je, čini se da je Vaš OpenID zlonamjeran
|
||||
openid missing provider: Žao nam je, ne možemo kontaktirati Vaš provider za OtvoreniID
|
||||
openid_logo_alt: Prijavite se sa OtvorenimID
|
||||
openid_providers:
|
||||
aol:
|
||||
alt: Prijavite se sa AOL OtvorenimID
|
||||
title: Prijavite se sa AOL računom
|
||||
google:
|
||||
alt: Prijavite se sa Google OtvorenimID
|
||||
title: Prijavite se sa Google računom
|
||||
myopenid:
|
||||
alt: Prijavite se sa MojOtvoreniID OtvorenimID
|
||||
title: Prijavite se sa MojOtvoreniID
|
||||
openid:
|
||||
alt: Prijavite se sa URL OtvorenogID
|
||||
title: Prijavite se sa otvorenimID
|
||||
wordpress:
|
||||
alt: Prijavite se sa Wordpress OtvorenimID
|
||||
title: Prijavite se sa Wordpress računom
|
||||
yahoo:
|
||||
alt: Prijavite se sa Yahoo OtvorenimID
|
||||
title: Prijavite se sa Yahoo računom
|
||||
password: "Lozinka:"
|
||||
register now: Registrirajte se sada
|
||||
remember: Zapamti me
|
||||
title: Prijava
|
||||
to make changes: Da bi ste mijenjali OpenStreetMap podatke, morate imati korisnički račun.
|
||||
with openid: "Alternativno molimo koristite Vaš OtvoreniID da se prijavite:"
|
||||
with username: "Već imate račun OpenStreetMap? Molimo prijavite se sa Vašim korisničkim imenom i lozinkom:"
|
||||
logout:
|
||||
heading: Odjava iz OpenStreetMap
|
||||
logout_button: Odjava
|
||||
title: Odjava
|
||||
lost_password:
|
||||
email address: "E-mail adresa:"
|
||||
heading: Zaboravljena lozinka?
|
||||
help_text: Unesite e-mail adresu koju ste koristili za otvaranje računa i poslaćemo Vam link kojim možete ponovo postaviti lozinku.
|
||||
new password button: Ponovno postavljanje lozinke
|
||||
notice email cannot find: Ne možemo pronaći tu e-mail adresu, žao nam je.
|
||||
notice email on way: Žao mi je što ste je izgubili :-( ali e-mail je na putu tako da je možete pononvo postaviti uskoro.
|
||||
title: Izgubljena lozinka
|
||||
make_friend:
|
||||
already_a_friend: Već ste prijatelj sa %{name}.
|
||||
button: Dodati kao prijatelja
|
||||
failed: Žao mi je, nije uspjelo dodavanje %{name} kao prijatelja.
|
||||
heading: Dodati %{user} kao prijatelja?
|
||||
success: "%{name} je sada Vaš prijatelj."
|
||||
new:
|
||||
confirm email address: "Potvrditi e-mail adresu:"
|
||||
confirm password: "Potvrditi lozinku:"
|
||||
contact_webmaster: Molimo kontaktirajte <a href="mailto:webmaster@openstreetmap.org">webmastera</a> da omogući stvaranje korisničkog računa - pokušaćemo se pozabaviti sa ovim u najkraćem mogućem vremenu.
|
||||
continue: Nastaviti
|
||||
display name: "Ime za prikaz:"
|
||||
display name description: Vaše javno prikazano korisničko ime. Možete ga promjeniti kasnije u postavkama.
|
||||
email address: "E-mail adresa:"
|
||||
fill_form: Ispunite formular i ubrzo ćete dobtiti em-ail za aktivaciju Vašeg korisničkog računa.
|
||||
flash create success message: Hvala što ste se prijavili! Poslali smo vam e-mail za potvrdu na %{email}, i čim potvrdite svoj račun možete mapirati<br /><br />Ako koristite antispam sistem koji šalje potvrde zahtjeva budite sigurni da je na tzv. "bijeloj listi" webmaster@openstreetmap.org jer nećemo moći odgovoriti na potvrdni zahtjev.
|
||||
flash welcome: Hvala sa registraciju. Poslali smo poruku dobrodošlice na %{email} sa nekim savjetima kako se uključiti.
|
||||
heading: Napravite korisnički račun
|
||||
license_agreement: Kada potvrdite Vaš račun moraćete pristati na <a href="http://www.osmfoundation.org/wiki/License/Contributor_Terms">Uslove doprinosioca</a> .
|
||||
no_auto_account_create: Nažalost nismo u mogućnosti automatski otvarati korisničke račune.
|
||||
not displayed publicly: Nije javno prikazano (vidi <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy" title="wiki privacy policy including section on email addresses">politiku privatnosti</a>)
|
||||
openid: "%{logo} OtvoreniID:"
|
||||
openid association: "<p>Vaš OtvoreniID još nije povezan sa OpenStreetMap računom.</p>\n<ul>\n <li>Ukoliko ste novi na projektu OpenStreetMap, molimo napravite novi račun korištenjem formulara ispod.</li>\n <li>\n Ukoliko već imate račun, možete se prijaviti na Vaš račun korištenjem Vašeg korisničkog imena i lozinke i onda uvezati račun sa Vašim OtvorenimID u Vašim korisničkim podešavanjima.\n </li>\n</ul>"
|
||||
openid no password: Lozinka nije potrebna sa OtvorenimID, ali neki ekstra alati ili server je još uvijek mogu trebati.
|
||||
password: "Lozinka:"
|
||||
terms accepted: Hvala za prihvatanje novih uslova za doprinosioce!
|
||||
terms declined: Žao nam je da ste odlučili ne prihvatiti nove Uslove za doprinosioce. Za više informacije, molimo pogledajte <a href="%{url}">ovu wiki stranicu</a>.
|
||||
title: Napravite račun
|
||||
use openid: Kao alternativu, koristite %{logo} OtvoreniID za prijavu
|
||||
no_such_user:
|
||||
body: Žao mi je, ne postoji korisnik sa imenom %{user}. Molimo provjerite Vaš unos ili da je poveznica na koju ste kliknuli ispravana.
|
||||
heading: Korisnik %{user} ne postoji
|
||||
title: Taj korisnik ne postoji.
|
||||
popup:
|
||||
friend: Prijatelj
|
||||
nearby mapper: Obližnji maper
|
||||
your location: Vaša lokacija
|
||||
remove_friend:
|
||||
button: Ukloniti kao prijatelja
|
||||
heading: Ukloniti %{user} kao prijatelja?
|
||||
not_a_friend: "%{name} nije jedan od Vaših prijatelja."
|
||||
success: "%{name} je uklonjen iz prijatelja."
|
||||
reset_password:
|
||||
confirm password: "Potvrditi lozinku:"
|
||||
flash changed: Vaša lozinka je promjenjena.
|
||||
flash token bad: Niste pronašli tz značku, možda da provjerite URL?
|
||||
heading: Ponovno postavljanje lozinke za %{user}
|
||||
password: "Lozinka:"
|
||||
reset: Ponovno postavljanje lozinke
|
||||
title: Ponovno postavljanje lozinke
|
||||
set_home:
|
||||
flash success: Matična lokacija uspješno snimljena.
|
||||
suspended:
|
||||
body: "<p>\n Žao nam je, Vaš je račun automatski suspendiran zbog \n sumnjive aktivnosti. \n</p>\n<p>\n Ova odluka će biti pregledana od strane administratora uskoro, ili \nse možete obratiti %{webmaster}, ako želite razgovarati o tome. \n</p>"
|
||||
heading: Račun suspendiran
|
||||
title: Račun suspendiran
|
||||
webmaster: webmaster
|
||||
terms:
|
||||
agree: Slažem se
|
||||
consider_pd: Osim gore navedenog ugovora, smatram da su moji doprinosi u javnom vlasništvu (Public Domain)
|
||||
consider_pd_why: Šta je ovo?
|
||||
decline: Odbiti
|
||||
guidance: "Informacija da bi se pomoglo u shvatanju ovih uslova: <a href=\"%{summary}\">Čitljiv sažetak</a> i neki <a href=\"%{translations}\">neformalni prevodi</a>"
|
||||
heading: Uslovi za doprinosioce
|
||||
legale_names:
|
||||
france: Francuska
|
||||
italy: Italija
|
||||
rest_of_world: Ostatak svijeta
|
||||
legale_select: "Molimo odaberite Vašu zemlju prebivališta:"
|
||||
read and accept: Molimo Vas da pročitate ugovor ispod i dapritisnete dugme za potvrdu da prihvatate uslove ovog sporazuma za Vaše postojeće i buduće doprinose.
|
||||
title: Uslovi za doprinosioce
|
||||
you need to accept or decline: Molimo pročitajte i onda ili prihvatite ili odbijte nove Uslove za doprinosioce da bi ste nastavili.
|
||||
view:
|
||||
activate_user: aktivirati ovog korisnika
|
||||
add as friend: dodati kao prijatelja
|
||||
ago: (%{time_in_words_ago} prije)
|
||||
block_history: prikazati dobivene blokade
|
||||
blocks by me: Blokade koje sam postavio/la
|
||||
blocks on me: Blokade na mene
|
||||
comments: komentari
|
||||
confirm: Potvrditi
|
||||
confirm_user: potvrditi ovog korisnika
|
||||
create_block: blokirati ovog korisnika
|
||||
created from: "Napravljeno iz:"
|
||||
ct accepted: Prihvaćeno prije %{ago}
|
||||
ct declined: Odbijeno
|
||||
ct status: "Uslovi za doprinosioce:"
|
||||
ct undecided: Neodlučen
|
||||
deactivate_user: deaktivirati ovog korisnika
|
||||
delete_user: izbrisati ovog korisnika
|
||||
description: Opis
|
||||
diary: dnevnik
|
||||
edits: uređivanja
|
||||
email address: "E-mail adresa:"
|
||||
friends_changesets: Pretražiti sve setove promjena prijatelja
|
||||
friends_diaries: Pretražiti sve unose u dnevnik od prijatelja
|
||||
hide_user: sakriti ovog korisnika
|
||||
if set location: Ako namjestite Vašu lokaciju, zgodna karta i stvari će se pojaviti ovdje. Možete namjestiti lokaciju Vašeg boravišta na %{settings_link} stranici.
|
||||
km away: korisnik udaljen %{count}km
|
||||
latest edit: "Najnovija izmjena %{ago}:"
|
||||
m away: "%{count}m daleko"
|
||||
mapper since: "Maper od:"
|
||||
moderator_history: prikazati date blokade
|
||||
my comments: Moji komentari
|
||||
my diary: Moj dnevnik
|
||||
my edits: Moje promjene
|
||||
my settings: Moja podešavanja
|
||||
my traces: Moje trase
|
||||
nearby users: Drugi obližnji korisnici
|
||||
nearby_changesets: Pretražiti sve setove promjena obližnjih korisnika
|
||||
nearby_diaries: Pretražiti sve unnose u dnevnik od obližnjih korisnika
|
||||
new diary entry: Novi unos u dnevnik
|
||||
no friends: Niste dodali nijednog prijatelja.
|
||||
no nearby users: Još uvijek nema drugih korisnika koji ucrtavaju na kartu u blizini.
|
||||
oauth settings: Oauth podešavanja
|
||||
remove as friend: ukloniti kao prijatelja
|
||||
role:
|
||||
administrator: Ovaj korisnik je administrator
|
||||
grant:
|
||||
administrator: Dodjeliti pristup za administratora
|
||||
moderator: Dodjeliti pristup za moderatora
|
||||
moderator: Ovaj korisnik je moderator
|
||||
revoke:
|
||||
administrator: Opozvati pristup za administatora
|
||||
moderator: Opozvati pristup za moderatora
|
||||
send message: Poslati poruku
|
||||
settings_link_text: postavke
|
||||
spam score: "Spam ocjena:"
|
||||
status: "Stanje:"
|
||||
traces: trase
|
||||
unhide_user: otkriti ovog korisnika
|
||||
user location: Lokacija boravišta korisnika
|
||||
your friends: Vaši prijatelji
|
||||
user_block:
|
||||
blocks_by:
|
||||
empty: "%{name} nije napravio/la još nijednu blokadu."
|
||||
heading: Lista blokada od %{name}
|
||||
title: Blokade od %{name}
|
||||
blocks_on:
|
||||
empty: "%{name} nije još bio blokiran."
|
||||
heading: Lista blokada na %{name}
|
||||
title: Blokade na %{name}
|
||||
create:
|
||||
flash: Napraviti blokadu na korisnika %{name}.
|
||||
try_contacting: Molimo da pokušate kontaktirati korisnika prije blokiranja i dati mu razumno vrijeme za odgovor.
|
||||
try_waiting: Molimo da date korisniku razumno vrijeme da odgovori prije nego ga blokirate.
|
||||
edit:
|
||||
back: Pogledati sve blokade
|
||||
heading: Uređivanje blokade na %{name}
|
||||
needs_view: Da li se korisnik mora prijaviti prije nego se očisti blokada?
|
||||
period: Koliko dugo, od sada, će korisnik biti blokiran od strane API.
|
||||
reason: Razlog zašto je %{name} blokiran. Molimo da budete mirni i razumni što je više je moguće, dajući što više detalja o situaciji. Imajte na umu da svi korisnici ne razumiju žargon u zajednici, pa im objasnite jednostavnim jezikom.
|
||||
show: Pogledati ovu blokadu
|
||||
submit: Osvježiti blokadu
|
||||
title: Uređivanje blokade na %{name}
|
||||
filter:
|
||||
block_expired: Blokada je već istekla i ne može se uređivati.
|
||||
block_period: Period blokade mora biti jedna od vrijednosti iz drop-down liste.
|
||||
helper:
|
||||
time_future: Završava u %{time}.
|
||||
time_past: Završeno prije %{time}.
|
||||
until_login: Aktivno dok se korsnik ne prijavi.
|
||||
index:
|
||||
empty: Blokade još nisu napravljene
|
||||
heading: Lista blokada korisnika
|
||||
title: Blokade korisnika
|
||||
model:
|
||||
non_moderator_revoke: Morate biti moderator da opozovete blokadu.
|
||||
non_moderator_update: Morate biti moderator da napravite ili osvježite blokadu.
|
||||
new:
|
||||
back: Pogledati sve blokade
|
||||
heading: Pravljenjen blokade na %{name}
|
||||
needs_view: Korisnik se mora prijaviti da bi se blokada očistila
|
||||
period: Koliko dugo, od sada, će korisnik biti blokiran od strane API.
|
||||
reason: Razlog zašto je %{name} blokiran. Molim da budete mirni i razumni što je više je moguće, dajući što više detalja o situaciji, s time da će poruka biti javno vidljiva. Imajte na umu da svi korisnici ne razumiju žargon u zajednici, pa im objasnite jednostavnim jezikom.
|
||||
submit: Napraviti blokadu
|
||||
title: Pravljenje blokade na %{name}
|
||||
tried_contacting: Kontaktirao sam korisnika i pitao da prestane.
|
||||
tried_waiting: Dao sam dovoljno razumnog vremena korisniku da odgovori.
|
||||
not_found:
|
||||
back: Nazad na index
|
||||
sorry: Žao mi je, korinička blokada sa ID %{id} se ne može naći.
|
||||
partial:
|
||||
confirm: Da li ste sigurni?
|
||||
creator_name: Kreator
|
||||
display_name: Blokirani korisnik
|
||||
edit: Urediti
|
||||
next: Sljedeća »
|
||||
not_revoked: (nije opozvano)
|
||||
previous: « Prethodna
|
||||
reason: Razlog za blokadu
|
||||
revoke: Opozvati!
|
||||
revoker_name: Opozvano od strane
|
||||
show: Pokazati
|
||||
showing_page: Prikaz stranice %{page}
|
||||
status: Stanje
|
||||
period:
|
||||
one: 1 sat
|
||||
other: "%{count} sata/i"
|
||||
revoke:
|
||||
confirm: Jeste li sgurni da želite opozvati ovu blokadu?
|
||||
flash: Ova blokada je opozvana.
|
||||
heading: Opoziv blokade na %{block_on} od %{block_by}
|
||||
past: Blokada je završila prije %{time} i ne može se opozvati sada.
|
||||
revoke: Opozvati!
|
||||
time_future: Blokada će završiti za %{time}.
|
||||
title: Opoziv blokade na %{block_on}
|
||||
show:
|
||||
back: Pogledati sve blokade
|
||||
confirm: Da li ste sigurni?
|
||||
edit: Urediti
|
||||
heading: "%{block_on} blokiran od strane %{block_by}"
|
||||
needs_view: Korisnik se mora prijaviti prije nego se blokada očisti.
|
||||
reason: Razlog za blokadu
|
||||
revoke: Opozvati!
|
||||
revoker: "Opozivalac:"
|
||||
show: Pokazati
|
||||
status: Stanje
|
||||
time_future: Završava u %{time}
|
||||
time_past: Završeno prije %{time}
|
||||
title: "%{block_on} blokiran od strane %{block_by}"
|
||||
update:
|
||||
only_creator_can_edit: Samo moderator koji je napravio blokadu ovo može urediti.
|
||||
success: Blokada osvježena
|
||||
user_role:
|
||||
filter:
|
||||
already_has_role: Korisnik već ima ulogu %{role}.
|
||||
doesnt_have_role: Korisnik nema ulogu %{role}.
|
||||
not_a_role: String `%{role}' nije valjana uloga.
|
||||
not_an_administrator: Samo administratori mogu upravljati ulogama korisnika, a vi niste administrator.
|
||||
grant:
|
||||
are_you_sure: Jeste li sigurni da želite dodjeliti ulogu `%{role}' korisniku `%{name}'?
|
||||
confirm: Potvrditi
|
||||
fail: Ne možemo dodjeliti ulogu `%{role}' korisniku `%{name}'. Molimo provjeriti ispravnost i korisnika i uloge.
|
||||
heading: Potvrditi dodjelu uloge
|
||||
title: Potvrditi dodjelu uloge
|
||||
revoke:
|
||||
are_you_sure: Jeste li sigurni da želite opozvati ulogu `%{role}' korisnika `%{name}'?
|
||||
confirm: Potvrditi
|
||||
fail: Ne možemo opozvati ulogu `%{role}' korisniku `%{name}'. Molimo provjeriti ispravnost i korisnika i uloge.
|
||||
heading: Potvrditi opoziv uloge
|
||||
title: Potvrditi opoziv uloge
|
||||
|
|
|
@ -208,14 +208,10 @@ ca:
|
|||
node: Node
|
||||
relation: Relació
|
||||
way: Via
|
||||
start:
|
||||
manually_select: Sel·leccioneu una altra àrea manualment
|
||||
view_data: Visualitza la informació per a la vista del mapa actual
|
||||
start_rjs:
|
||||
data_frame_title: Informació
|
||||
data_layer_name: Explora les dades del mapa
|
||||
details: Detalls
|
||||
drag_a_box: Marqueu un rectangle al mapa per a seleccionar una àrea
|
||||
edited_by_user_at_timestamp: Editat per %{user} el %{timestamp}
|
||||
hide_areas: Oculta les zones
|
||||
history_for_feature: Historial per a %{feature}
|
||||
|
@ -332,8 +328,9 @@ ca:
|
|||
hide_link: Amaga aquest comentari
|
||||
diary_entry:
|
||||
comment_count:
|
||||
one: 1 comentari
|
||||
one: "%{count} comentari"
|
||||
other: "%{count} comentaris"
|
||||
zero: Sense comentaris
|
||||
comment_link: Comenta aquesta entrada
|
||||
confirm: Confirma
|
||||
edit_link: Edita aquesta entrada
|
||||
|
@ -681,6 +678,7 @@ ca:
|
|||
reservoir_watershed: Embassament de conca
|
||||
residential: Àrea residencial
|
||||
retail: Al detall
|
||||
road: Zona de carretera
|
||||
village_green: Zona verda
|
||||
vineyard: Vinya
|
||||
wetland: Aiguamoll
|
||||
|
|
|
@ -208,14 +208,10 @@ cs:
|
|||
node: Uzel
|
||||
relation: Relace
|
||||
way: Cesta
|
||||
start:
|
||||
manually_select: Ručně vybrat jinou oblast
|
||||
view_data: Ukázat data k zobrazené mapě
|
||||
start_rjs:
|
||||
data_frame_title: Data
|
||||
data_layer_name: Procházet mapová data
|
||||
details: Detaily
|
||||
drag_a_box: Myší na mapě označte zvolenou oblast
|
||||
edited_by_user_at_timestamp: Upravil %{user} dne %{timestamp}
|
||||
hide_areas: Schovat oblasti
|
||||
history_for_feature: Historie pro %{feature}
|
||||
|
|
|
@ -203,14 +203,10 @@ da:
|
|||
node: Punkt
|
||||
relation: Relation
|
||||
way: Vej
|
||||
start:
|
||||
manually_select: Vælg et andet område manuelt
|
||||
view_data: Vis data for nuværende kortvisning
|
||||
start_rjs:
|
||||
data_frame_title: Data
|
||||
data_layer_name: Gennemse kortdata
|
||||
details: Detaljer
|
||||
drag_a_box: Træk en kasse på kortet for at vælge et område
|
||||
edited_by_user_at_timestamp: Redigeret af %{user}, %{timestamp}
|
||||
hide_areas: Skjul områder
|
||||
history_for_feature: Historik for %{feature}
|
||||
|
|
|
@ -218,14 +218,10 @@ de:
|
|||
node: Knoten
|
||||
relation: Relation
|
||||
way: Weg
|
||||
start:
|
||||
manually_select: Einen anderen Kartenausschnitt manuell auswählen
|
||||
view_data: Daten des aktuellen Kartenausschnitts anzeigen
|
||||
start_rjs:
|
||||
data_frame_title: Daten
|
||||
data_layer_name: Kartendaten durchsuchen
|
||||
details: Details
|
||||
drag_a_box: Einen Rahmen über die Karte aufziehen, um einen Bereich auszuwählen
|
||||
edited_by_user_at_timestamp: Bearbeitet von %{user} am %{timestamp}
|
||||
hide_areas: Gebiete ausblenden
|
||||
history_for_feature: Chronik für %{feature}
|
||||
|
|
|
@ -754,7 +754,7 @@ diq:
|
|||
user:
|
||||
account:
|
||||
contributor terms:
|
||||
link text: No çıko?
|
||||
link text: no çıko?
|
||||
current email address: "E-postay şımaya newki:"
|
||||
home location: "Herun:"
|
||||
image: "Resim:"
|
||||
|
@ -765,14 +765,14 @@ diq:
|
|||
new image: Resim deke
|
||||
openid:
|
||||
link: http://wiki.openstreetmap.org/wiki/OpenID
|
||||
link text: No çıko?
|
||||
link text: no çıko?
|
||||
openid: "OpenID:"
|
||||
preferred editor: "Editorê ke tercih kerê:"
|
||||
preferred languages: "Zıwanê ke tercih kerê:"
|
||||
public editing:
|
||||
disabled link text: Ezo çı nêşena bıvurna?
|
||||
enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits
|
||||
enabled link text: No çıko?
|
||||
enabled link text: no çıko?
|
||||
heading: "Pêron rê akerde vurnayış:"
|
||||
public editing note:
|
||||
heading: "Pêron rê akerde vurnayış:"
|
||||
|
@ -829,7 +829,7 @@ diq:
|
|||
logout_button: Bıvciyê
|
||||
title: Bıvciyê
|
||||
lost_password:
|
||||
email address: "Adresê e-posta:"
|
||||
email address: "Adresa e-postey:"
|
||||
heading: To parola ke xo vira?
|
||||
new password button: Parola reset ke
|
||||
title: Parolaya vınibyayi
|
||||
|
@ -840,7 +840,7 @@ diq:
|
|||
confirm password: "Parolay tesdiq ke:"
|
||||
continue: Dewam ke
|
||||
display name: "Nameyo ke Aseno:"
|
||||
email address: "Adresê e-posta:"
|
||||
email address: "Adresa e-postey:"
|
||||
openid: "%{logo} OpenID:"
|
||||
password: "Parola:"
|
||||
use openid: ALternativey, %{logo} OpenID ra karfiye
|
||||
|
@ -890,7 +890,7 @@ diq:
|
|||
description: Şınasnayış
|
||||
diary: rocek
|
||||
edits: vurnayışi
|
||||
email address: "Adresê e-posta:"
|
||||
email address: "Adresa e-postey:"
|
||||
hide_user: nê karberi bınımnê
|
||||
km away: "%{count} km duriyo"
|
||||
latest edit: "vurnayışê peyênê %{ago}:"
|
||||
|
|
|
@ -199,14 +199,10 @@ dsb:
|
|||
node: Suk
|
||||
relation: Relacija
|
||||
way: Puś
|
||||
start:
|
||||
manually_select: Drugi wurězk manuelnje wubraś
|
||||
view_data: Daty aktualnego kórtowego wurězka zwobrazniś
|
||||
start_rjs:
|
||||
data_frame_title: Daty
|
||||
data_layer_name: Kórtowe daty pśepytaś
|
||||
details: Drobnostki
|
||||
drag_a_box: Wobłuk nad kórtu rozćěgnuś, aby se wurězk wubrał
|
||||
edited_by_user_at_timestamp: Wobźěłany wót %{user} %{timestamp}
|
||||
hide_areas: Wobcerki schowaś
|
||||
history_for_feature: Historija za %{feature}
|
||||
|
|
|
@ -192,14 +192,10 @@ el:
|
|||
node: Κόμβος
|
||||
relation: Σχέση
|
||||
way: Διαδρομή
|
||||
start:
|
||||
manually_select: Χειροκίνητη επιλογή διαφορετικής περιοχής
|
||||
view_data: Προβολή δεδομένων για την τρέχουσα προβολή χάρτη
|
||||
start_rjs:
|
||||
data_frame_title: Δεδομένα
|
||||
data_layer_name: Περιήγηση Δεδομένων Χάρτη
|
||||
details: Λεπτομέρειες
|
||||
drag_a_box: Σύρε ένα πλαίσιο στο χάρτη για να επιλέξεις μια περιοχή
|
||||
edited_by_user_at_timestamp: Επεξεργάστηκε από τον %{user} στις %{timestamp}
|
||||
hide_areas: Απόκρυψη περιοχών
|
||||
history_for_feature: Ιστορικό για %{feature}
|
||||
|
|
|
@ -221,15 +221,12 @@ en:
|
|||
relation_title: "Relation: %{relation_name}"
|
||||
download_xml: "Download XML"
|
||||
view_history: "View history"
|
||||
start:
|
||||
view_data: "View data for current map view"
|
||||
manually_select: "Manually select a different area"
|
||||
start_rjs:
|
||||
notes_layer_name: "Browse Notes"
|
||||
data_layer_name: "Browse Map Data"
|
||||
data_frame_title: "Data"
|
||||
zoom_or_select: "Zoom in or select an area of the map to view"
|
||||
drag_a_box: "Drag a box on the map to select an area"
|
||||
view_data: "View data for current map view"
|
||||
manually_select: "Manually select a different area"
|
||||
hide_areas: "Hide areas"
|
||||
show_areas: "Show areas"
|
||||
|
|
|
@ -183,14 +183,10 @@ eo:
|
|||
node: Nodo
|
||||
relation: Rilato
|
||||
way: Vojo
|
||||
start:
|
||||
manually_select: Mane elekti alian areon
|
||||
view_data: Vidi datumojn por la naŭa mapvidon
|
||||
start_rjs:
|
||||
data_frame_title: Datumo
|
||||
data_layer_name: Datumo
|
||||
details: Detaloj
|
||||
drag_a_box: Desegnu skatolon sur la mapo por elekti areon
|
||||
edited_by_user_at_timestamp: Redaktita de %{user} je %{timestamp}
|
||||
hide_areas: Kaŝi areojn
|
||||
history_for_feature: Historio por %{feature}
|
||||
|
|
|
@ -208,14 +208,10 @@ es:
|
|||
node: Nodo
|
||||
relation: Relación
|
||||
way: Vía
|
||||
start:
|
||||
manually_select: Seleccionar manualmente un área diferente
|
||||
view_data: Ver datos para el encuadre actual
|
||||
start_rjs:
|
||||
data_frame_title: Datos
|
||||
data_layer_name: Examinar datos del mapa
|
||||
details: Detalles
|
||||
drag_a_box: Arrastre en el mapa para dibujar un área de encuadre
|
||||
edited_by_user_at_timestamp: Editado por %{user} el %{timestamp}
|
||||
hide_areas: Ocultar áreas
|
||||
history_for_feature: Historial de %{feature}
|
||||
|
|
|
@ -145,13 +145,10 @@ et:
|
|||
node: Sõlm
|
||||
relation: relatsioon
|
||||
way: joon
|
||||
start:
|
||||
manually_select: Vali käsitsi teine ala
|
||||
start_rjs:
|
||||
data_frame_title: Andmed
|
||||
data_layer_name: Andmed
|
||||
details: Detailid
|
||||
drag_a_box: Märgi kaardil hiirega uus ala
|
||||
edited_by_user_at_timestamp: Viimati muudetud kasutaja %{user} poolt kell %{timestamp}
|
||||
hide_areas: Peida alad
|
||||
history_for_feature: Omaduse %{feature} ajalugu
|
||||
|
|
|
@ -176,14 +176,10 @@ fa:
|
|||
node: گره
|
||||
relation: ارتباط
|
||||
way: راه
|
||||
start:
|
||||
manually_select: به صورت دستی منطقه دیگری را انتخاب کنید
|
||||
view_data: مشاهده اطلاعات برای نمایش نقشه فعلی
|
||||
start_rjs:
|
||||
data_frame_title: داده ها
|
||||
data_layer_name: داده ها
|
||||
details: جزئیات
|
||||
drag_a_box: " جعبهای را روی نقشه برای انتخاب یک منطقه بکشید"
|
||||
edited_by_user_at_timestamp: "%{timestamp} در %{user} ویرایش توسط"
|
||||
hide_areas: پنهانکردن منطقهها
|
||||
history_for_feature: "%{feature} تاریخچه برای"
|
||||
|
|
|
@ -114,8 +114,8 @@ fi:
|
|||
one: "Sisältää seuraavan relaation:"
|
||||
other: "Sisältää seuraavat %{count} relaatiota:"
|
||||
has_ways:
|
||||
one: "Sisältää seuraavan viivan:"
|
||||
other: "Sisältää seuraavat %{count} viivaa:"
|
||||
one: "Sisältää seuraavan polun:"
|
||||
other: "Sisältää seuraavat %{count} polkua:"
|
||||
no_bounding_box: Tässä muutoskokoelmassa ei ole rajattua aluetta.
|
||||
show_area_box: Näytä rajattu alue
|
||||
common_details:
|
||||
|
@ -206,14 +206,10 @@ fi:
|
|||
node: Piste
|
||||
relation: Relaatio
|
||||
way: Polku
|
||||
start:
|
||||
manually_select: Valitse pienempi alue
|
||||
view_data: Näytä tiedot nykyisestä karttanäkymästä
|
||||
start_rjs:
|
||||
data_frame_title: Tiedot
|
||||
data_layer_name: Selaa karttatietoja
|
||||
details: Tarkemmin
|
||||
drag_a_box: Valitse alue kartalta hiirellä maalaamalla
|
||||
edited_by_user_at_timestamp: Viimeinen muokkaaja %{user} %{timestamp}
|
||||
hide_areas: Piilota alueet
|
||||
history_for_feature: Ominaisuuden %{feature} historia
|
||||
|
@ -264,8 +260,8 @@ fi:
|
|||
way_title: "Polku: %{way_name}"
|
||||
way_details:
|
||||
also_part_of:
|
||||
one: on myös osana viivaa %{related_ways}
|
||||
other: on myös osana viivoja %{related_ways}
|
||||
one: on myös osana polkua %{related_ways}
|
||||
other: on myös osana polkuja %{related_ways}
|
||||
nodes: "Pisteet:"
|
||||
part_of: "Relaatiojäsenyydet:"
|
||||
way_history:
|
||||
|
@ -331,7 +327,7 @@ fi:
|
|||
diary_entry:
|
||||
comment_count:
|
||||
one: 1 kommentti
|
||||
other: "%{count} kommenttia"
|
||||
other: zerp=Ei kommentteja
|
||||
comment_link: Kommentoi tätä kirjoitusta
|
||||
confirm: Vahvista
|
||||
edit_link: Muokkaa päiväkirjamerkintää
|
||||
|
@ -1165,7 +1161,7 @@ fi:
|
|||
confirm: "Varmista, että tämän käyttäjätunnuksen on luonut sinä. Jos et ole luonut tätä käyttäjätiliä, poista se napsauttamalla tätä linkkiä:"
|
||||
created: Joku (toivottavasti sinä) on luonut käyttäjätunnuksen osoitteessa %{site_url}.
|
||||
greeting: Hei!
|
||||
subject: "[OpenStreetMap] Sähköpostiosoitteen vahvistus"
|
||||
subject: "[OpenStreetMap] Tervetuloa OpenStreetMap:iin"
|
||||
welcome: Tervetuloa OpenStreetMap-karttapalveluun! Haluaisimme kertoa joitain hyödyllisiä asioita, jotta pääset alkuun.
|
||||
signup_confirm_html:
|
||||
ask_questions: OpenStreetMapista voi esittää kysymyksiä <a href="http://help.openstreetmap.org/">kysymyksiä ja vastauksia -sivulla</a>.
|
||||
|
@ -1578,6 +1574,9 @@ fi:
|
|||
empty: Käyttäjiä ei löytynyt.
|
||||
heading: Käyttäjät
|
||||
hide: Piilota valitut käyttäjät
|
||||
showing:
|
||||
one: Näytetään sivu %{page} (%{first_item}/%{items})
|
||||
other: Näytetään sivu %{page} (%{first_item}-%{last_item} / %{items})
|
||||
title: Käyttäjät
|
||||
login:
|
||||
account is suspended: Valitettavasti käyttäjätilisi on jäädytetty epäilyttävän toiminnan seurauksena.<br />Ole hyvä ja ota yhteyttä <a href="%{webmaster}">webmasteriin</a> jos haluat keskustella tästä.
|
||||
|
|
|
@ -219,14 +219,10 @@ fr:
|
|||
node: Nœud
|
||||
relation: Relation
|
||||
way: Chemin
|
||||
start:
|
||||
manually_select: Sélectionner manuellement une zone différente
|
||||
view_data: Voir les données sur la carte actuelle
|
||||
start_rjs:
|
||||
data_frame_title: Données
|
||||
data_layer_name: Parcourir les données de la carte
|
||||
details: Détails
|
||||
drag_a_box: Cliquez et tirez un cadre sur la carte pour sélectionner une zone
|
||||
edited_by_user_at_timestamp: Modifié par %{user} le %{timestamp}
|
||||
hide_areas: Masquer les zones
|
||||
history_for_feature: Historique pour %{feature}
|
||||
|
|
|
@ -165,14 +165,10 @@ fur:
|
|||
node: Grop
|
||||
relation: Relazion
|
||||
way: Vie
|
||||
start:
|
||||
manually_select: Sielç a man une aree divierse
|
||||
view_data: Viôt i dâts pe viodude atuâl de mape
|
||||
start_rjs:
|
||||
data_frame_title: Dâts
|
||||
data_layer_name: Dâts
|
||||
details: Detais
|
||||
drag_a_box: Disegne un retangul su la mape par sielzi une aree
|
||||
edited_by_user_at_timestamp: Cambiât di %{user} ai %{timestamp}
|
||||
hide_areas: Plate areis
|
||||
history_for_feature: Storic par %{feature}
|
||||
|
|
|
@ -195,14 +195,10 @@ gl:
|
|||
node: Nodo
|
||||
relation: Relación
|
||||
way: Camiño
|
||||
start:
|
||||
manually_select: Escoller manualmente unha zona distinta
|
||||
view_data: Ver os datos para a vista do mapa actual
|
||||
start_rjs:
|
||||
data_frame_title: Datos
|
||||
data_layer_name: Explorar os datos do mapa
|
||||
details: Detalles
|
||||
drag_a_box: Arrastre unha caixa sobre o mapa para escoller unha zona
|
||||
edited_by_user_at_timestamp: Editado por %{user} o %{timestamp}
|
||||
hide_areas: Agochar as zonas
|
||||
history_for_feature: Historial de %{feature}
|
||||
|
|
|
@ -202,14 +202,10 @@ he:
|
|||
node: צומת
|
||||
relation: יחס
|
||||
way: דרך
|
||||
start:
|
||||
manually_select: בחירה ידנית באזור אחר
|
||||
view_data: לצפייה במידע עבור התצוגה הנוכחית של המפה
|
||||
start_rjs:
|
||||
data_frame_title: נתונים
|
||||
data_layer_name: עיון בנתוני מפה
|
||||
details: פרטים
|
||||
drag_a_box: נא לגרור את התיבה על המפה כדי לבחור אזור
|
||||
edited_by_user_at_timestamp: נערך על־ידי %{user} ב־%{timestamp}
|
||||
hide_areas: להסתרת אזורים
|
||||
history_for_feature: ההיסטוריה של %{feature}
|
||||
|
|
|
@ -186,14 +186,10 @@ hr:
|
|||
node: Točka
|
||||
relation: Relacija
|
||||
way: Put
|
||||
start:
|
||||
manually_select: Ručno izaberi drugo područje
|
||||
view_data: Prikaži podatke za trenutni prikaz karte
|
||||
start_rjs:
|
||||
data_frame_title: Podaci
|
||||
data_layer_name: Podaci
|
||||
details: Detalji
|
||||
drag_a_box: Povuci okvir na karti da bi izabrali područje
|
||||
edited_by_user_at_timestamp: Uredio %{user} u %{timestamp}
|
||||
hide_areas: Sakrij područja
|
||||
history_for_feature: Povijest za %{feature}
|
||||
|
|
|
@ -199,14 +199,10 @@ hsb:
|
|||
node: Suk
|
||||
relation: Relacija
|
||||
way: Puć
|
||||
start:
|
||||
manually_select: Druhi wobłuk manuelnje wubrać
|
||||
view_data: Daty za aktualny kartowy napohlad pokazać
|
||||
start_rjs:
|
||||
data_frame_title: Daty
|
||||
data_layer_name: Kartowe daty přepytać
|
||||
details: Podrobnosće
|
||||
drag_a_box: Ramik na kartu ćahnyć, zo by so wobłuk wubrał
|
||||
edited_by_user_at_timestamp: Wobdźěłany wot wužiwarja %{user} dnja %{timestamp}
|
||||
hide_areas: Kónčiny schować
|
||||
history_for_feature: Historija za %{feature}
|
||||
|
|
|
@ -200,14 +200,10 @@ hu:
|
|||
node: "Pont:"
|
||||
relation: "Kapcsolat:"
|
||||
way: "Vonal:"
|
||||
start:
|
||||
manually_select: Más terület kézi kijelölése
|
||||
view_data: Adatok megtekintése a térkép jelenlegi nézetéhez
|
||||
start_rjs:
|
||||
data_frame_title: Adatok
|
||||
data_layer_name: Térképadatok böngészése
|
||||
details: Részletek
|
||||
drag_a_box: Terület kijelöléséhez rajzolj egy négyzetet a térképen
|
||||
edited_by_user_at_timestamp: "%{user} szerkesztette ekkor: %{timestamp}"
|
||||
hide_areas: Területek elrejtése
|
||||
history_for_feature: "%{feature} előzményei"
|
||||
|
|
|
@ -194,14 +194,10 @@ ia:
|
|||
node: Nodo
|
||||
relation: Relation
|
||||
way: Via
|
||||
start:
|
||||
manually_select: Seliger manualmente un altere area
|
||||
view_data: Vider datos pro le vista actual del carta
|
||||
start_rjs:
|
||||
data_frame_title: Datos
|
||||
data_layer_name: Percurrer datos cartographic
|
||||
details: Detalios
|
||||
drag_a_box: Designa un quadro super le carta pro seliger un area
|
||||
edited_by_user_at_timestamp: Modificate per %{user} le %{timestamp}
|
||||
hide_areas: Celar areas
|
||||
history_for_feature: Historia de %{feature}
|
||||
|
@ -320,6 +316,7 @@ ia:
|
|||
comment_count:
|
||||
one: 1 commento
|
||||
other: "%{count} commentos"
|
||||
zero: Nulle commento
|
||||
comment_link: Commentar iste entrata
|
||||
confirm: Confirmar
|
||||
edit_link: Modificar iste entrata
|
||||
|
@ -393,7 +390,7 @@ ia:
|
|||
area_to_export: Area a exportar
|
||||
embeddable_html: HTML incorporabile
|
||||
export_button: Exportar
|
||||
export_details: Le datos de OpenStreetMap es licentiate sub le <a href="http://creativecommons.org/licenses/by-sa/2.0/">licentia Attribution-ShareAlike 2.0 de Creative Commons</a>.
|
||||
export_details: Le datos de OpenStreetMap es licentiate sub le <a href="http://opendatacommons.org/licenses/odbl/1.0/">Open Data Commons Open Database License</a> (ODbL).
|
||||
format: "Formato:"
|
||||
format_to_export: Formato de exportation
|
||||
image_size: "Dimension del imagine:"
|
||||
|
@ -998,6 +995,9 @@ ia:
|
|||
text: In caso de un conflicto inter iste pagina traducite e %{english_original_link}, le pagina in anglese prevalera.
|
||||
title: A proposito de iste traduction
|
||||
legal_babble:
|
||||
attribution_example:
|
||||
alt: Exemplo de como recognoscer OpenStreetMap in un pagina web
|
||||
title: Exemplo de recognoscentia
|
||||
contributors_at_html: "<strong>Austria</strong>: Contine datos ab le\n <a href=\"http://data.wien.gv.at/\">Citate de Vienna</a> licentiate sub\n <a href=\"http://creativecommons.org/licenses/by/3.0/at/deed.de\">CC BY</a>."
|
||||
contributors_ca_html: "<strong>Canada</strong>: Contine datos ab\n GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada), e StatCan (Geography Division,\n Statistics Canada)."
|
||||
contributors_footer_1_html: "Pro ulterior detalios de iste e altere fontes que ha essite usate\npro adjutar a meliorar OpenStreetMap, vide le <a\nhref=\"\"http://wiki.openstreetmap.org/wiki/Contributors\">pagina\nde contributores</a> in le wiki de OpenStreetMap."
|
||||
|
@ -1009,11 +1009,13 @@ ia:
|
|||
contributors_nz_html: "<strong>Nove Zelandia</strong>: Contine datos proveniente de\n Land Information New Zealand. Crown Copyright reservate."
|
||||
contributors_title_html: Nostre contributores
|
||||
contributors_za_html: "<strong>Africa del Sud</strong>: Contine datos proveniente del\n <a href=\"http://www.ngi.gov.za/\">Chief Directorate:\n National Geo-Spatial Information</a>, copyright del Stato reservate."
|
||||
credit_1_html: " Si vos usa imagines cartographic de OpenStreetMap, nos requesta que\n vostre recognoscentia indica al minus “© Contributores de\n OpenStreetMap, CC BY-SA”. Si vos usa solmente datos cartographic,\n nos requesta “Datos cartographic © Contributores de OpenStreetMap,\n CC BY-SA”."
|
||||
credit_2_html: " Si possibile, le parola OpenStreetMap debe esser un hyperligamine a <a\n href=\"http://www.openstreetmap.org/\">http://www.openstreetmap.org/</a>\n e le termino CC BY-SA debe ligar a <a\n href=\"http://creativecommons.org/licenses/by-sa/2.0/\">http://creativecommons.org/licenses/by-sa/2.0/</a>. Si\n vos usa un medio de communication in le qual le ligamines non es possibile (p.ex. un\n obra imprimite), nos suggere que vos dirige vostre lectores a\n www.openstreetmap.org (forsan per inserer iste adresse\n complete in loco del parola ‘OpenStreetMap’) e a\n www.creativecommons.org."
|
||||
credit_1_html: "Nos require que vos usa le recognoscentia “© OpenStreetMap\ncontributors”."
|
||||
credit_2_html: Vos debe anque clarificar que le datos es disponibile sub Open Database License, e si vos usa nostre tegulas cartographic, que le cartographia es licentiate sub CC-BY-SA. Vos pote facer isto con un ligamine a <a href="http://www.openstreetmap.org/copyright">iste pagina de copyright</a>. Alternativemente, e obligatorimente si vos distribue OSM in forma de datos, vos pote nominar e ligar directemente al licentia(s). Si vos usa un medio de communication in le qual le ligamines non es possibile (p.ex. un obra imprimite), nos suggere que vos dirige vostre lectores a www.openstreetmap.org (forsan per inserer iste adresse complete in loco del parola ‘OpenStreetMap’), a www.opendatacommosn.org, e (si relevante) a www.creativecommons.org.
|
||||
credit_3_html: "Pro un carta electronic navigabile, le recognoscentia debe apparer in le angulo del carta. Per exemplo:"
|
||||
credit_title_html: Como dar recognoscentia a OpenStreetMap
|
||||
intro_1_html: " OpenStreetMap es <i>datos aperte</i>, disponibile sub le licentia\n <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">Creative\n Commons Attribution-ShareAlike 2.0</a> (CC BY-SA)."
|
||||
intro_2_html: " Vos es libere de copiar, distribuer, transmitter e adaptar nostre cartas\n e datos, a condition que vos da recognoscentia a OpenStreetMap e su\n contributores. Si vos altera o extende nostre cartas e datos, vos\n pote distribuer le resultato solmente sub le mesme licentia. Le\n complete <a\n href=\"http://creativecommons.org/licenses/by-sa/2.0/legalcode\">codice\n legal</a> explica vostre derectos e responsabilitates."
|
||||
intro_2_html: " Vos es libere de copiar, distribuer, transmitter e adaptar nostre cartas\n e datos, a condition que vos da recognoscentia a OpenStreetMap e su\n contributores. Si vos altera o extende nostre cartas e datos, vos\n pote distribuer le resultato solmente sub le mesme licentia. Le\n complete <a href=\"http://opendatacommons.org/licenses/odbl/1.0/\">codice\n legal</a> explica vostre derectos e responsabilitates."
|
||||
intro_3_html: "Le cartographia in nostre tegulas de carta, e nostre documentation, son\npublicate sub licentia <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">Creative\nCommons Attribution-ShareAlike 2.0</a> (CC-BY-SA)."
|
||||
more_1_html: " Lege plus super le uso de nostre datos al <a\n href=\"http://wiki.openstreetmap.org/wiki/Legal_FAQ\">FAQ\n Legal</a>."
|
||||
more_2_html: " Nos rememora al contributores de OSM de nunquam adder datos de alcun\n fonte sub derecto de autor (p.ex. Google Maps o cartas imprimite)\n sin explicite permission del titulares del derecto de autor."
|
||||
more_title_html: Pro saper plus
|
||||
|
|
|
@ -190,14 +190,10 @@ id:
|
|||
node: Node/Titik
|
||||
relation: Relasi
|
||||
way: Way/Garis
|
||||
start:
|
||||
manually_select: Pilih wilayah yang berbeda secara manual
|
||||
view_data: Lihat data untuk tampilan peta saat ini
|
||||
start_rjs:
|
||||
data_frame_title: Data
|
||||
data_layer_name: Telusuri Data Peta
|
||||
details: Rincian
|
||||
drag_a_box: Gambar sebuah kotak pada peta untuk memilih wilayah
|
||||
edited_by_user_at_timestamp: Diedit oleh %{user} pada %{timestamp}
|
||||
hide_areas: Sembunyikan wilayah
|
||||
history_for_feature: Riwayat untuk %{feature}
|
||||
|
|
|
@ -178,14 +178,10 @@ is:
|
|||
node: Hnúturinn
|
||||
relation: Venslin
|
||||
way: Vegurinn
|
||||
start:
|
||||
manually_select: Velja svæði á kortinu
|
||||
view_data: Sýna gögn fyrir núverandi kortasýn
|
||||
start_rjs:
|
||||
data_frame_title: Gögn
|
||||
data_layer_name: Gögn
|
||||
details: Nánar
|
||||
drag_a_box: Teiknaðu kassa á kortið til að velja svæði
|
||||
edited_by_user_at_timestamp: Breytt af %{user} klukkan %{timestamp}
|
||||
history_for_feature: Breytingarskrá fyrir %{feature}
|
||||
load_data: Hlaða inn gögnum
|
||||
|
|
|
@ -207,14 +207,10 @@ it:
|
|||
node: Nodo
|
||||
relation: Relazione
|
||||
way: Percorso
|
||||
start:
|
||||
manually_select: Seleziona manualmente un'area differente
|
||||
view_data: Mostra i dati per la visualizzazione attuale della mappa
|
||||
start_rjs:
|
||||
data_frame_title: Dati
|
||||
data_layer_name: Esplora Dati Mappa
|
||||
details: Dettagli
|
||||
drag_a_box: Tracciare un riquadro sulla mappa per selezionare un'area
|
||||
edited_by_user_at_timestamp: Modificato da %{user} il %{timestamp}
|
||||
hide_areas: Nascondi le aree
|
||||
history_for_feature: Storico per %{feature}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
# Export driver: syck-pecl
|
||||
# Author: Atysn
|
||||
# Author: Fryed-peach
|
||||
# Author: Hayashi
|
||||
# Author: Higa4
|
||||
# Author: Hosiryuhosi
|
||||
# Author: Iwai.masaharu
|
||||
|
@ -201,14 +202,10 @@ ja:
|
|||
node: ノード
|
||||
relation: リレーション
|
||||
way: ウェイ
|
||||
start:
|
||||
manually_select: ドラッグして別の領域を選択
|
||||
view_data: 現在のマップのデータを表示
|
||||
start_rjs:
|
||||
data_frame_title: データ
|
||||
data_layer_name: 地図データを参照
|
||||
details: 詳細
|
||||
drag_a_box: 領域を選択するには地図をドラッグしてください
|
||||
edited_by_user_at_timestamp: "%{user}による%{timestamp}時点の編集"
|
||||
hide_areas: 領域を隠す
|
||||
history_for_feature: "%{feature}の履歴"
|
||||
|
@ -322,8 +319,9 @@ ja:
|
|||
hide_link: このコメントを隠す
|
||||
diary_entry:
|
||||
comment_count:
|
||||
one: 1 コメント
|
||||
one: "%{count} コメント"
|
||||
other: "%{count} コメント"
|
||||
zero: コメントなし
|
||||
comment_link: このエントリにコメント
|
||||
confirm: 確認
|
||||
edit_link: この記事の編集
|
||||
|
@ -919,9 +917,9 @@ ja:
|
|||
javascripts:
|
||||
map:
|
||||
base:
|
||||
cycle_map: 自転車地図
|
||||
cycle_map: サイクリングマップ
|
||||
standard: 標準
|
||||
transport_map: 輸送地図
|
||||
transport_map: 交通マップ
|
||||
site:
|
||||
edit_disabled_tooltip: 地図を編集するには拡大してください
|
||||
edit_tooltip: 地図を編集
|
||||
|
@ -1344,12 +1342,12 @@ ja:
|
|||
headings: 見出し
|
||||
image: 画像
|
||||
link: リンク
|
||||
ordered: 順序付きリスト
|
||||
ordered: 番号付きリスト
|
||||
second: 項目 2
|
||||
subheading: 小見出し
|
||||
text: テキスト
|
||||
title_html: <a href="http://daringfireball.net/projects/markdown/">Markdown</a> で構文解析されます
|
||||
unordered: 順序なしリスト
|
||||
unordered: 番号なしリスト
|
||||
url: URL
|
||||
richtext_area:
|
||||
edit: 編集
|
||||
|
|
|
@ -163,13 +163,10 @@ ka:
|
|||
node: კვანძი
|
||||
relation: ურთიერთობა
|
||||
way: გზა
|
||||
start:
|
||||
manually_select: სხვა ტერიტორიის გამოყოფა ხელით
|
||||
start_rjs:
|
||||
data_frame_title: მონაცემები
|
||||
data_layer_name: რუკის მონაცემების ნახვა
|
||||
details: დეტალები
|
||||
drag_a_box: რეგიონის ასარჩევად რუკაზე გაწელეთ ჩარჩო
|
||||
edited_by_user_at_timestamp: შეცვალა %{user} %{timestamp}-ში
|
||||
hide_areas: ტერიტორიების დამალვა
|
||||
history_for_feature: ისტორია %{feature}-თვის
|
||||
|
|
|
@ -183,14 +183,10 @@ ko:
|
|||
node: 노드
|
||||
relation: 관계
|
||||
way: 길
|
||||
start:
|
||||
manually_select: 다른 지역 수동 선택
|
||||
view_data: 현재 지도 표기로 정보 보기
|
||||
start_rjs:
|
||||
data_frame_title: 데이터
|
||||
data_layer_name: 지도 데이터 찾아보기
|
||||
details: 자세한 사항
|
||||
drag_a_box: 지역을 보기 위해 지도로 끌어 놓으세요
|
||||
edited_by_user_at_timestamp: "%{timestamp}에 %{user}가 수정"
|
||||
hide_areas: 지역 숨기기
|
||||
history_for_feature: "%{feature}의 역사"
|
||||
|
|
|
@ -120,8 +120,6 @@ lb:
|
|||
node: Knuet
|
||||
relation: Relatioun
|
||||
way: Wee
|
||||
start:
|
||||
manually_select: En anere Beräich manuell eraussichen
|
||||
start_rjs:
|
||||
data_frame_title: Donnéeën
|
||||
data_layer_name: Donnéeë vun de Kaarten duerchkucken
|
||||
|
|
|
@ -197,14 +197,10 @@ lt:
|
|||
node: Taškas
|
||||
relation: Ryšys
|
||||
way: Kelias
|
||||
start:
|
||||
manually_select: Rankiniu būdu parinkite kitą plotą
|
||||
view_data: Peržiūrėti duomenis pasirinktame žemėlapyje
|
||||
start_rjs:
|
||||
data_frame_title: Duomenys
|
||||
data_layer_name: Duomenys
|
||||
details: Detalės
|
||||
drag_a_box: Tempkite lauką ant žemėlapio, kad pažymėtumėte plotą
|
||||
edited_by_user_at_timestamp: Keitė %{user}. Keitimo laikas %{timestamp}
|
||||
hide_areas: Slėpti sritis
|
||||
history_for_feature: Istorija apie %{feature}
|
||||
|
|
|
@ -200,14 +200,10 @@ lv:
|
|||
node: Punkts
|
||||
relation: Relācija
|
||||
way: Līnija
|
||||
start:
|
||||
manually_select: Manuāli izvēlēties citu apgabalu
|
||||
view_data: Skatīt datus pašreizējā kartes skatā
|
||||
start_rjs:
|
||||
data_frame_title: Dati
|
||||
data_layer_name: Pārlūkot kartes datus
|
||||
details: Sīkāka informācija
|
||||
drag_a_box: Uzvelciet rāmi uz kartes, lai izvēlētos apgabalu
|
||||
edited_by_user_at_timestamp: Rediģēja %{user} %{timestamp}
|
||||
hide_areas: Paslēpt zonas
|
||||
history_for_feature: Vēsture %{feature}
|
||||
|
@ -1151,7 +1147,7 @@ lv:
|
|||
header: "OpenStreetMap lietotājs %{from_user} ir jums nosūtījis ziņu ar tematu %{subject}:"
|
||||
hi: Sveiks %{to_user},
|
||||
signup_confirm:
|
||||
subject: "[OpenStreetMap] Apstipriniet savu e-pasta adresi"
|
||||
subject: "[OpenStreetMap] Laipni lūgti OpenStreetMap"
|
||||
signup_confirm_html:
|
||||
ask_questions: Tu vari jautāt jebkurus jautājumus par OpenStreetMap mūsu <a href="http://help.openstreetmap.org/">jautājumu un atbilžu lapā</a>.
|
||||
current_user: Saraksts ar pašreizējiem lietotājiem kategorijās, pamatojoties uz to, kur tie atrodas pasaulē, ir pieejams no <a href="http://wiki.openstreetmap.org/wiki/Category:Users_by_geographical_region">Category:Users_by_geographical_region</a>.
|
||||
|
|
|
@ -194,14 +194,10 @@ mk:
|
|||
node: Јазол
|
||||
relation: Однос
|
||||
way: Пат
|
||||
start:
|
||||
manually_select: Рачно избери друга површина
|
||||
view_data: Погледајте податоци за тековниот поглед на картата
|
||||
start_rjs:
|
||||
data_frame_title: Податоци
|
||||
data_layer_name: Прелист. податоци за картата
|
||||
details: Подробно
|
||||
drag_a_box: Повлечете рамка на картата за да одберете простор
|
||||
edited_by_user_at_timestamp: Уредено од %{user} во %{timestamp}
|
||||
hide_areas: Скриј подрачја
|
||||
history_for_feature: Историја за %{feature}
|
||||
|
|
|
@ -188,14 +188,10 @@ ms:
|
|||
node: Nod
|
||||
relation: Hubungan
|
||||
way: Jalan
|
||||
start:
|
||||
manually_select: Pilih kawasan yang lain secara insani
|
||||
view_data: Lihat data untuk paparan peta semasa
|
||||
start_rjs:
|
||||
data_frame_title: Data
|
||||
data_layer_name: Telusuri Data Peta
|
||||
details: Butiran
|
||||
drag_a_box: Seretkan petak di atas peta untuk memilih kawasan
|
||||
edited_by_user_at_timestamp: Disunting oleh %{user} pada %{timestamp}
|
||||
hide_areas: Sorokkan kawasan
|
||||
history_for_feature: Sejarah %{feature}
|
||||
|
|
|
@ -203,14 +203,10 @@ nb:
|
|||
node: Node
|
||||
relation: Relasjon
|
||||
way: Vei
|
||||
start:
|
||||
manually_select: Velg et annet område manuelt
|
||||
view_data: Vis data for gjeldende kartvisning
|
||||
start_rjs:
|
||||
data_frame_title: Data
|
||||
data_layer_name: Bla gjennom kartdata
|
||||
details: Detaljer
|
||||
drag_a_box: Dra en boks på kartet for å velge et område
|
||||
edited_by_user_at_timestamp: Redigert av %{user}, %{timestamp}
|
||||
hide_areas: Skjul områder
|
||||
history_for_feature: Historikk for %{feature}
|
||||
|
|
|
@ -200,14 +200,10 @@ nl:
|
|||
node: Node
|
||||
relation: Relatie
|
||||
way: Weg
|
||||
start:
|
||||
manually_select: Handmatig een ander gebied selecteren
|
||||
view_data: Gegevens voor de huidige kaartweergave weergeven
|
||||
start_rjs:
|
||||
data_frame_title: Gegevens
|
||||
data_layer_name: Kaartgegevens verkennen
|
||||
details: Details
|
||||
drag_a_box: Teken een rechthoek op de kaart om een gebied te selecteren
|
||||
edited_by_user_at_timestamp: Bewerkt door %{user} op %{timestamp}
|
||||
hide_areas: Gebieden verbergen
|
||||
history_for_feature: Geschiedenis voor %{feature}
|
||||
|
@ -324,8 +320,9 @@ nl:
|
|||
hide_link: Opmerking verbergen
|
||||
diary_entry:
|
||||
comment_count:
|
||||
one: één reactie
|
||||
one: Eén reactie
|
||||
other: "%{count} reacties"
|
||||
zero: Geen reacties
|
||||
comment_link: Reactie plaatsen bij dit bericht
|
||||
confirm: Bevestigen
|
||||
edit_link: Bericht bewerken
|
||||
|
|
|
@ -209,14 +209,10 @@ nn:
|
|||
node: Node
|
||||
relation: Relasjon
|
||||
way: Veg
|
||||
start:
|
||||
manually_select: Vel eit anna område manuelt
|
||||
view_data: Vis data for gjeldande kartvising
|
||||
start_rjs:
|
||||
data_frame_title: Data
|
||||
data_layer_name: Kartdata
|
||||
details: Detaljar
|
||||
drag_a_box: Dra ein boks på kartet for å velje eit område
|
||||
edited_by_user_at_timestamp: Redigert av %{user}, %{timestamp}
|
||||
hide_areas: Skjul områder
|
||||
history_for_feature: Historikk for %{feature}
|
||||
|
|
|
@ -203,14 +203,10 @@ pl:
|
|||
node: Węzeł
|
||||
relation: Relacja
|
||||
way: Droga
|
||||
start:
|
||||
manually_select: Manualnie wybierz inny obszar
|
||||
view_data: Zobacz dane w aktualnym widoku mapy
|
||||
start_rjs:
|
||||
data_frame_title: Dane
|
||||
data_layer_name: Przeglądaj dane mapy
|
||||
details: Szczegóły
|
||||
drag_a_box: Zaznacz myszą prostokąt na mapie, aby wybrać obszar
|
||||
edited_by_user_at_timestamp: Edytowany przez %{user} ostatni raz %{timestamp}
|
||||
hide_areas: Ukryj obszary
|
||||
history_for_feature: Historia zmian dla %{feature}
|
||||
|
|
|
@ -208,14 +208,10 @@ pt-BR:
|
|||
node: Ponto
|
||||
relation: Relação
|
||||
way: Caminho
|
||||
start:
|
||||
manually_select: Selecionar manualmente uma área diferente
|
||||
view_data: Ver dados para do mapa em visualização atual
|
||||
start_rjs:
|
||||
data_frame_title: Dados
|
||||
data_layer_name: Navegar nos Dados do Mapa
|
||||
details: Detalhes
|
||||
drag_a_box: Clique e arraste para selecionar uma área no mapa
|
||||
edited_by_user_at_timestamp: Editado por %{user} at %{timestamp}
|
||||
hide_areas: Ocultar áreas
|
||||
history_for_feature: Histórico para %{feature}
|
||||
|
|
|
@ -207,14 +207,10 @@ pt:
|
|||
node: Nó
|
||||
relation: Relação
|
||||
way: Linha
|
||||
start:
|
||||
manually_select: Selecionar manualmente uma área diferente
|
||||
view_data: Ver dados para a vista atual do mapa
|
||||
start_rjs:
|
||||
data_frame_title: Dados
|
||||
data_layer_name: Inspecionar dados técnicos do mapa
|
||||
details: Ver Detalhes
|
||||
drag_a_box: Arraste uma seleção no mapa para escolher uma área
|
||||
edited_by_user_at_timestamp: Editado por %{user} em %{timestamp}
|
||||
hide_areas: Ocultar áreas
|
||||
history_for_feature: Histórico de %{feature}
|
||||
|
|
|
@ -187,14 +187,10 @@ ro:
|
|||
node: Nod
|
||||
relation: Relație
|
||||
way: Cale
|
||||
start:
|
||||
manually_select: Selectare manuală a unei alte zone
|
||||
view_data: Vizualizare date pentru perspectiva curentă a hărții
|
||||
start_rjs:
|
||||
data_frame_title: Date
|
||||
data_layer_name: Navigare prin datele hărții
|
||||
details: Detalii
|
||||
drag_a_box: Trageți cu mouse-ul și creați un dreptunghi pentru a selecta zona hărții
|
||||
edited_by_user_at_timestamp: Editat de %{user} la %{timestamp}
|
||||
hide_areas: Ascunde suprafețele
|
||||
history_for_feature: Istoric pentru %{feature}
|
||||
|
|
|
@ -222,14 +222,10 @@ ru:
|
|||
node: Точка
|
||||
relation: Отношение
|
||||
way: Линия
|
||||
start:
|
||||
manually_select: Выделить другую область
|
||||
view_data: Посмотреть данные для текущего вида
|
||||
start_rjs:
|
||||
data_frame_title: Данные
|
||||
data_layer_name: Просмотр данных карты
|
||||
details: Подробности
|
||||
drag_a_box: Для выбора области растяните рамку по карте
|
||||
edited_by_user_at_timestamp: Изменил %{user} в %{timestamp}
|
||||
hide_areas: Скрыть области
|
||||
history_for_feature: История %{feature}
|
||||
|
|
|
@ -179,6 +179,8 @@ sk:
|
|||
of: z
|
||||
showing_page: Strana
|
||||
redacted:
|
||||
message_html: Verzia %{version} tohto objektu %{type} nemôže byť zobrazené, pretože bola skrytá. Viac informácií nájdete na %{redaction_link}.
|
||||
redaction: Revízia %{id}
|
||||
type:
|
||||
node: bod
|
||||
relation: vzťah
|
||||
|
@ -202,14 +204,10 @@ sk:
|
|||
node: Bod
|
||||
relation: Relácia
|
||||
way: Cesta
|
||||
start:
|
||||
manually_select: Manuálne vybrať inú oblasť
|
||||
view_data: Zobraziť údaje v aktuálnom zobrazení mapy
|
||||
start_rjs:
|
||||
data_frame_title: Dáta
|
||||
data_layer_name: Prehľadávať mapové dáta
|
||||
details: Detaily
|
||||
drag_a_box: Označte myšou na mape zvolenú oblasť
|
||||
edited_by_user_at_timestamp: Upravoval %{user} o %{timestamp}
|
||||
hide_areas: Skryť oblasti
|
||||
history_for_feature: História pre %{feature}
|
||||
|
@ -329,6 +327,7 @@ sk:
|
|||
few: "%{count} komentáre"
|
||||
one: 1 komentár
|
||||
other: "%{count} komentárov"
|
||||
zero: Žiaden komentár
|
||||
comment_link: Komentár k záznamu
|
||||
confirm: Potvrdiť
|
||||
edit_link: Upraviť tento záznam
|
||||
|
@ -1022,7 +1021,7 @@ sk:
|
|||
contributors_title_html: Naši prispievatelia
|
||||
contributors_za_html: "<strong>Juhoafrická republika</strong>: Obsahuje dáta pochádzajúce z <a href=\"http://www.ngi.gov.za/\">Chief Directorate: National Geo-Spatial Information</a>, State copyright reserved."
|
||||
credit_1_html: Vyžadujeme uviesť „<em>© Prispievatelia OpenStreetMap</em>“.
|
||||
credit_2_html: " Ak je to možné, mal byť text <em>OpenStreetMap</em> uvedený ako hypertextový odkaz na <a href=\"http://www.openstreetmap.org/\">http://www.openstreetmap.org/</a> a <em>CC BY-SA</em> na <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">http://creativecommons.org/licenses/by-sa/2.0/</a>. Ak používate médium, ktoré odkazy neumožňuje (napr. v tlačenom diele), navrhujeme, aby ste svojho čitateľa nasmerovali na www.openstreetmap.org (zrejme doplnením <em>OpenStreetMap</em> o túto internetovú adresu) a analogicky <em>CC BY-SA</em> na www.creativecommons.org."
|
||||
credit_2_html: " Musíte zdôrazniť, že dáta sú dostupné pod licenciu Open Database Licence, a pri používaní mapových tajlov, že tieto sú pod licenciou CC-BY-SA. Môžete to urobiť hypertextovým odkazom na <a href=\"http://www.openstreetmap.org/copyright\">http://www.openstreetmap.org/copyright</a>. Alternatívne, ak distribuujete OSM v dátovej forme, môžete vymenovať licencie a vytvoriť hypertextový odkaz priamo na ne. Pri médiách kde hypertextové odkazy nie sú možné (napr. tlačené práce), odporúčame aby ste nasmerovali čitateľov na openstreetmap.org (napríklad rozšírením slova OpenStreetMap na plnú adresu), na opendatacommons.org a na creativecommons.org (ak je to relevenantné)."
|
||||
credit_3_html: "V prípade interaktívnej elektronickej mapy by autorstvo malo byť uvedené v rohu mapy.\nNapríklad:"
|
||||
credit_title_html: Ako uvádzať OpenStreetMap
|
||||
infringement_1_html: Prispievateľom OSM pripomíname, že by nikdy nemali pridávať dáta zo zdrojov chránených autorským právom (napr. Google Maps či tlačené mapy) bez výslovného súhlasu držiteľov práv.
|
||||
|
@ -1261,21 +1260,33 @@ sk:
|
|||
update:
|
||||
flash: Úspešne aktualizované informácie o klientovi
|
||||
redaction:
|
||||
create:
|
||||
flash: Revízia vytvorená.
|
||||
destroy:
|
||||
error: Pri zrušení revízie sa vyskytla chyba.
|
||||
flash: Revízia zrušená.
|
||||
not_empty: Revízia nie je prázdna. Pred zrušením tejto revízie zrušte skrytie všetkých verzií patriacich do tejto revízie.
|
||||
edit:
|
||||
description: Popis
|
||||
heading: Upraviť reláciu
|
||||
submit: Uložiť reláciu
|
||||
title: Upraviť reláciu
|
||||
heading: Upraviť revíziu
|
||||
submit: Uložiť revíziu
|
||||
title: Upraviť revíziu
|
||||
index:
|
||||
heading: Zoznam relácií
|
||||
title: Zoznam relácií
|
||||
empty: Žiadne revízie na zobrazenie.
|
||||
heading: Zoznam revízií
|
||||
title: Zoznam revízií
|
||||
new:
|
||||
description: Popis
|
||||
submit: Vytvoriť reláciu
|
||||
heading: Zadajte informácie k novej revízii.
|
||||
submit: Vytvoriť revíziu
|
||||
title: Vytváranie nových revízií
|
||||
show:
|
||||
confirm: Ste si istý?
|
||||
description: "Popis:"
|
||||
destroy: Odstrániť túto revíziu
|
||||
edit: Upraviť túto revíziu
|
||||
heading: Zobrazujem revíziu "%{title}"
|
||||
title: Zobrazenie revízie
|
||||
user: "Autor:"
|
||||
update:
|
||||
flash: Zmeny boli uložené.
|
||||
|
|
|
@ -199,14 +199,10 @@ sl:
|
|||
node: Vozlišče
|
||||
relation: Zveza
|
||||
way: Pot
|
||||
start:
|
||||
manually_select: Ročno izberite drugo področje
|
||||
view_data: Ogled podatkov trenutno prikazanega zemljevida
|
||||
start_rjs:
|
||||
data_frame_title: Podatki
|
||||
data_layer_name: Prebrskaj podatke zemljevida
|
||||
details: Podrobnosti
|
||||
drag_a_box: Za izbor področja povlecite pravokotnik na zemljevidu
|
||||
edited_by_user_at_timestamp: Uredil %{user} v %{timestamp}
|
||||
hide_areas: Skrij področja
|
||||
history_for_feature: Zgodovina %{feature}
|
||||
|
|
|
@ -199,14 +199,10 @@ sq:
|
|||
node: Pikë
|
||||
relation: Lidhje
|
||||
way: Udhë
|
||||
start:
|
||||
manually_select: Manualisht zgedh ni zon qeter
|
||||
view_data: Shini te dhanat per harten e tanishme
|
||||
start_rjs:
|
||||
data_frame_title: Senet
|
||||
data_layer_name: Shfleto të dhënat e hartës
|
||||
details: Detajet
|
||||
drag_a_box: Bone ni kuti n'hart edhe zgedhe zonen
|
||||
edited_by_user_at_timestamp: Ndryshuar nga %{user} në %{timestamp}
|
||||
hide_areas: Fshih zonat
|
||||
history_for_feature: Historija për %{feature}
|
||||
|
|
|
@ -206,14 +206,10 @@ sr-Latn:
|
|||
node: Čvor
|
||||
relation: Odnos
|
||||
way: Putanja
|
||||
start:
|
||||
manually_select: Ručno izaberite drugo područje
|
||||
view_data: Pogledaj podatke trenutnog prikaza mape
|
||||
start_rjs:
|
||||
data_frame_title: Podaci
|
||||
data_layer_name: Pregledaj podatke sa mape
|
||||
details: Detalji
|
||||
drag_a_box: Prevucite okvir na mapi da biste izabrali područje
|
||||
edited_by_user_at_timestamp: Izmenio %{user} u %{timestamp}
|
||||
hide_areas: Sakrij područja
|
||||
history_for_feature: Istorija za %{feature}
|
||||
|
|
|
@ -210,14 +210,10 @@ sr:
|
|||
node: Чвор
|
||||
relation: Однос
|
||||
way: Путања
|
||||
start:
|
||||
manually_select: Ручно изаберите друго подручје
|
||||
view_data: Погледај податке тренутног приказа мапе
|
||||
start_rjs:
|
||||
data_frame_title: Подаци
|
||||
data_layer_name: Прегледај податке са мапе
|
||||
details: Детаљи
|
||||
drag_a_box: Превуците оквир на мапи да бисте изабрали подручје
|
||||
edited_by_user_at_timestamp: Изменио %{user} у %{timestamp}
|
||||
hide_areas: Сакриј подручја
|
||||
history_for_feature: Историја за %{feature}
|
||||
|
|