sudo apt-get install vagrant
```
-Other Linux distributions should have similar installation instructions using `yum` or similar.
+Other Linux distributions should have similar installation instructions using `dnf`, `pacman`, or similar.
Installers are available for Mac OS X and Windows, please see the [Vagrant project download page](http://www.vagrantup.com/downloads.html) for more information.
+Note than until there are suitable _xenial64_ [vagrant boxes](https://atlas.hashicorp.com/boxes/search?utf8=%E2%9C%93&sort=&provider=&q=xenial64) for other providers,
+the only virtualization provider supported is virtualbox. You might need to install it and specify `--provider virtualbox` when setting up your environment.
+
# Setting up openstreetmap-website
Once Vagrant has been installed, you can start an environment by checking out the openstreetmap-website code if you haven't already, then changing to the directory which contains the Vagrantfile by typing:
file "images/#{image}", "https://unpkg.com/leaflet@1.0.3/dist/images/#{image}"
end
+ from 'git://github.com/aratcliffe/Leaflet.contextmenu.git', :tag => 'v1.2.1' do
+ file 'leaflet.contextmenu.js', 'dist/leaflet.contextmenu.js'
+ file 'leaflet.contextmenu.css', 'dist/leaflet.contextmenu.css'
+ end
+
from 'git://github.com/kajic/leaflet-locationfilter.git' do
file 'leaflet.locationfilter.css', 'src/locationfilter.css'
file 'leaflet.locationfilter.js', 'src/locationfilter.js'
//= require leaflet.share
//= require leaflet.polyline
//= require leaflet.query
+//= require leaflet.contextmenu
+//= require index/contextmenu
//= require index/search
//= require index/browse
//= require index/export
var map = new L.OSM.Map("map", {
zoomControl: false,
- layerControl: false
+ layerControl: false,
+ contextmenu: true,
+ contextmenuWidth: 140
});
map.attributionControl.setPrefix('');
L.control.scale()
.addTo(map);
+ OSM.initializeContextMenu(map);
+
if (OSM.STATUS !== 'api_offline' && OSM.STATUS !== 'database_offline') {
OSM.initializeNotes(map);
if (params.layers.indexOf(map.noteLayer.options.code) >= 0) {
--- /dev/null
+OSM.initializeContextMenu = function (map) {
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.directions_from"),
+ callback: function directionsFromHere(e) {
+ var precision = OSM.zoomPrecision(map.getZoom()),
+ latlng = e.latlng.wrap(),
+ lat = latlng.lat.toFixed(precision),
+ lng = latlng.lng.toFixed(precision);
+
+ OSM.router.route("/directions?" + querystring.stringify({
+ route: lat + "," + lng + ";" + $("#route_to").val()
+ }));
+ }
+ });
+
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.directions_to"),
+ callback: function directionsToHere(e) {
+ var precision = OSM.zoomPrecision(map.getZoom()),
+ latlng = e.latlng.wrap(),
+ lat = latlng.lat.toFixed(precision),
+ lng = latlng.lng.toFixed(precision);
+
+ OSM.router.route("/directions?" + querystring.stringify({
+ route: $("#route_from").val() + ";" + lat + "," + lng
+ }));
+ }
+ });
+
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.add_note"),
+ callback: function addNoteHere(e) {
+ var precision = OSM.zoomPrecision(map.getZoom()),
+ latlng = e.latlng.wrap(),
+ lat = latlng.lat.toFixed(precision),
+ lng = latlng.lng.toFixed(precision);
+
+ OSM.router.route("/note/new?lat=" + lat + "&lon=" + lng);
+ }
+ });
+
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.show_address"),
+ callback: function describeLocation(e) {
+ var precision = OSM.zoomPrecision(map.getZoom()),
+ latlng = e.latlng.wrap(),
+ lat = latlng.lat.toFixed(precision),
+ lng = latlng.lng.toFixed(precision);
+
+ OSM.router.route("/search?query=" + encodeURIComponent(lat + "," + lng));
+ }
+ });
+
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.query_features"),
+ callback: function queryFeatures(e) {
+ var precision = OSM.zoomPrecision(map.getZoom()),
+ latlng = e.latlng.wrap(),
+ lat = latlng.lat.toFixed(precision),
+ lng = latlng.lng.toFixed(precision);
+
+ OSM.router.route("/query?lat=" + lat + "&lon=" + lng);
+ }
+ });
+
+ map.contextmenu.addItem({
+ text: I18n.t("javascripts.context.centre_map"),
+ callback: function centreMap(e) {
+ map.panTo(e.latlng);
+ }
+ });
+
+ map.on("mousedown", function (e) {
+ if (e.originalEvent.shiftKey) map.contextmenu.disable();
+ else map.contextmenu.enable();
+ });
+
+ var updateMenu = function updateMenu () {
+ map.contextmenu.setDisabled(2, map.getZoom() < 12);
+ map.contextmenu.setDisabled(4, map.getZoom() < 14);
+ };
+
+ map.on("zoomend", updateMenu);
+ updateMenu();
+};
}
page.pushstate = page.popstate = function (path) {
- OSM.loadSidebarContent(path, page.load);
+ OSM.loadSidebarContent(path, function () {
+ page.load(path);
+ });
};
function newHalo(loc, a) {
}
}
- page.load = function () {
+ page.load = function (path) {
if (addNoteButton.hasClass("disabled")) return;
if (addNoteButton.hasClass("active")) return;
map.addLayer(noteLayer);
- var mapSize = map.getSize();
- var markerPosition;
+ var params = querystring.parse(path.substring(path.indexOf('?') + 1));
+ var markerLatlng;
+
+ if (params.lat && params.lon) {
+ markerLatlng = L.latLng(params.lat, params.lon);
+
+ var markerPosition = map.latLngToContainerPoint(markerLatlng),
+ mapSize = map.getSize(),
+ panBy = L.point(0, 0);
+
+ if (markerPosition.x < 50) {
+ panBy.x = markerPosition.x - 50;
+ } else if (markerPosition.x > mapSize.x - 50) {
+ panBy.x = 50 - mapSize.x + markerPosition.x;
+ }
- markerPosition = [mapSize.x / 2, mapSize.y / 2];
+ if (markerPosition.y < 50) {
+ panBy.y = markerPosition.y - 50;
+ } else if (markerPosition.y > mapSize.y - 50) {
+ panBy.y = 50 - mapSize.y + markerPosition.y;
+ }
+
+ map.panBy(panBy);
+ } else {
+ markerLatlng = map.getCenter();
+ }
- newNote = L.marker(map.containerPointToLatLng(markerPosition), {
+ newNote = L.marker(markerLatlng, {
icon: noteIcons["new"],
opacity: 0.9,
draggable: true
params.mlon = latLng.lng.toFixed(precision);
}
- var url = 'http://' + OSM.SERVER_URL + '/',
+ var url = window.location.protocol + '//' + OSM.SERVER_URL + '/',
query = querystring.stringify(params),
hash = OSM.formatHash(this);
var zoom = this.getZoom(),
latLng = marker && this.hasLayer(marker) ? marker.getLatLng().wrap() : this.getCenter().wrap(),
str = window.location.hostname.match(/^www\.openstreetmap\.org/i) ?
- 'http://osm.org/go/' : 'http://' + window.location.hostname + '/go/',
+ window.location.protocol + '//osm.org/go/' :
+ window.location.protocol + '//' + window.location.hostname + '/go/',
char_array = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_~",
x = Math.round((latLng.lng + 180.0) * ((1 << 30) / 90.0)),
y = Math.round((latLng.lat + 90.0) * ((1 << 30) / 45.0)),
/*
*= require leaflet
*= require leaflet.locationfilter
+ *= require leaflet.contextmenu
*/
/* Override to serve images through the asset pipeline. */
# have we identified the user?
if @user
# check if the user has been banned
- if @user.blocks.active.exists?
- # NOTE: need slightly more helpful message than this.
- report_error t("application.setup_user_auth.blocked"), :forbidden
+ user_block = @user.blocks.active.take
+ unless user_block.nil?
+ set_locale
+ if user_block.zero_hour?
+ report_error t("application.setup_user_auth.blocked_zero_hour"), :forbidden
+ else
+ report_error t("application.setup_user_auth.blocked"), :forbidden
+ end
end
# if the user hasn't seen the contributor terms then don't
# user block (i.e: whether it's active, what the expiry time is)
def block_status(block)
if block.active?
+ # if the block hasn't expired yet show the date, if the user just needs to login show that
if block.needs_view?
- I18n.t("user_block.helper.until_login")
+ if block.ends_at > Time.now.getutc
+ I18n.t("user_block.helper.time_future_and_until_login", :time => friendly_date(block.ends_at)).html_safe
+ else
+ I18n.t("user_block.helper.until_login")
+ end
else
I18n.t("user_block.helper.time_future", :time => friendly_date(block.ends_at)).html_safe
end
needs_view || ends_at > Time.now.getutc
end
+ ##
+ # returns true if the block is a "zero hour" block
+ def zero_hour?
+ # if the times differ more than 1 minute we probably have more important issues
+ needs_view && (ends_at.to_i - updated_at.to_i) < 60
+ end
+
##
# revokes the block, allowing the user to use the API again. the argument
# is the user object who is revoking the ban.
xml.dc :creator, note.author.display_name if note.author
- xml.pubDate note.updated_at.to_s(:rfc822)
+ xml.pubDate note.created_at.to_s(:rfc822)
xml.geo :lat, note.lat
xml.geo :long, note.lon
xml.georss :point, "#{note.lat} #{note.lon}"
require_moderator:
not_a_moderator: Has de ser moderador pa facer esa aición.
setup_user_auth:
+ blocked_zero_hour: Tienes un mensaxe urxente nel sitiu web d'OpenStreetMap.
+ Tienes de lleer el mensaxe antes de que puedas guardar les ediciones.
blocked: Se bloquió el to accesu a la API. Por favor, coneuta pela interfaz
web pa saber más.
need_to_see_terms: El to accesu a la API ta torgáu de mou temporal. Por favor,
nothing_found: Nun s'alcontraron entidaes
error: 'Error al comunicase con %{server}: %{error}'
timeout: Tiempu escosáu al comunicase con %{server}
+ context:
+ directions_from: Direiciones dende equí
+ directions_to: Direiciones ata equí
+ add_note: Añadir una nota equí
+ show_address: Amosar la direición
+ query_features: Consultar entidaes
+ centre_map: Centrar el mapa equí
redaction:
edit:
description: Descripción
language: Език
message: Съобщение
node: Възел
+ notifier: Известител
old_node: Стар възел
relation: Релация
relation_member: Член на релация
new_note: Нова бележка
description: Описание
open_by: Създадено от %{user} <abbr title='%{exact_time}'>преди %{when}</abbr>
+ query:
+ title: Търсене на особености
changeset:
changeset_paging_nav:
showing_page: Страница %{page}
speed_camera: Камера за контрол на скоростта
steps: Стълбище
street_lamp: Улична лампа
+ track: Полски път
trunk: Скоростен път
trunk_link: Скоростен път
unsurfaced: Път без настилка
log_in: Влизане
log_in_tooltip: Вписване със съществуващ профил
sign_up: Регистриране
+ start_mapping: Картографиране
edit: Редактиране
history: История
export: Изнасяне
english_link: Оригиналът на английски
native:
title: За тази страница
+ mapping_link: картографиране
legal_babble:
title_html: Авторски права и лиценз
infringement_title_html: Нарушаване на авторските права
trunk: Междуградски път
primary: Главен път
secondary: Второстепенен път
+ track: Полски път
bridleway: Конен път
cycleway: Велосипедна пътека
footway: Пътека
cancel: Отказ
image: Изображение
link: Препратка или код
+ long_link: Препратка
+ short_link: Кратка препратка
+ embed: Код
custom_dimensions: Размер по избор
format: 'Формат:'
scale: 'Мащаб:'
+ image_size: На изображението ще бъде обичайната карта с размер
download: Изтегляне
include_marker: Добавяне на маркер
key:
site:
edit_tooltip: Редактиране на картата
createnote_tooltip: Добавяне на бележка на картата
+ queryfeature_tooltip: Търсене на особености
+ queryfeature_disabled_tooltip: Увеличете, за да търсите особености
notes:
new:
add: Добавяне на бележка
destination_without_exit: Пристигнахте на местоназначението
unnamed: неименуван път
time: Време
+ context:
+ add_note: Добавете бележка тук
...
back: পিছনে
to: প্রাপক
sent_message_summary:
- delete_button: মà§\81à¦\9bà§\87 ফà§\87লà§\81ন
+ delete_button: à¦\85পসারণ
mark:
- as_read: বার্তা পঠিত হিসেবে চিহ্নিত
- as_unread: বার্তা অপঠিত হিসেবে চিহ্নিত
+ as_read: বার্তা পঠিত হিসেবে চিহ্নিত করুন
+ as_unread: বার্তা অপঠিত হিসেবে চিহ্নিত করুন
delete:
deleted: বার্তা মোছা হয়েছে
site:
key:
table:
entry:
- motorway: মà§\8bà¦\9fà§\8bরপথ
+ motorway: মোটরপথ
main_road: প্রধান সড়ক
trunk: মূল সড়ক
primary: প্রাথমিক সড়ক
description: 'বিবরণ:'
tags: 'ট্যাগসমূহ:'
save_button: পরিবর্তন সংরক্ষণ
- visibility: দৃষ্টিযোগ্যতা
+ visibility: 'দৃষ্টিযোগ্যতা:'
visibility_help: এটার মানে কি?
trace_form:
upload_gpx: 'জিপিএক্স ফাইল আপলোড:'
edit_track: এই অনুসরণটি সম্পাদনা করুন
delete_track: এই অনুসরণটি মুছে ফেলুন
trace_not_found: অনুসরণ পাওযা যায়নি।
- visibility: দৃষ্টিযোগ্যতা
+ visibility: 'দৃষ্টিযোগ্যতা:'
trace_paging_nav:
showing_page: '%{page} পাতা'
trace:
remember: আমাকে মনে রাখো
login_button: প্রবেশ
register now: এখনই নিবন্ধন করুন
- with username: 'ইতিমধ্যে একটি ওপেনস্ট্রিটম্যাপ অ্যাকাউন্ট আছে? দয়া করে ব্যবহারকারীনাম
- এবং পাসওয়ার্ড দিয়ে প্রবেশ করুন:'
+ with username: 'ইতিমধ্যে একটি ওপেনস্ট্রিটম্যাপ অ্যাকাউন্ট আছে? দয়া করে ব্যবহারকারী
+ নাম à¦\8fবà¦\82 পাসà¦\93য়ারà§\8dড দিয়à§\87 পà§\8dরবà§\87শ à¦\95রà§\81ন:'
new to osm: ওপেনস্ট্রিটম্যাপে নতুন?
no account: কোনও অ্যাকাউন্ট নেই?
auth_providers:
require_moderator:
not_a_moderator: Ret eo deoc'h bezañ habaskaer evit kas an ober-mañ da benn.
setup_user_auth:
+ blocked_zero_hour: Ur gemennadenn vallus zo war lec'hienn OpenStreetMap evidoc'h.
+ Ret eo deoc'h lenn ar gemennadenn-se a-raok gallout enrollañ ho kemmoù.
blocked: Stanket eo bet ho moned d'an API. Kevreit ouzh an etrefas web evit
gouzout hiroc'h.
need_to_see_terms: Evit ar mare n'oc'h ket aotreet da vont war an API ken. Kevreit
nothing_found: Arc'hweladur ebet kavet
error: Fazi o vont e daremmpred gant %{server}:%{error}
timeout: Amzer aet e-biou %{server}
+ context:
+ directions_from: Durc'hadurioù adalek amañ
+ directions_to: Durc'hadurioù betek amañ
+ add_note: Ouzhpennañ un notenn amañ
+ show_address: Diskouez ar chomlec'h
+ query_features: Perzhioù enklask
+ centre_map: Kreizañ ar gartenn amañ
redaction:
edit:
description: Deskrivadur
# Author: Nemo bis
# Author: Paxt
# Author: Reaperman
+# Author: StenSoft
# Author: Tchoř
# Author: Urbanecm
# Author: Veritaslibero
abandoned: Zrušená železniční trať
construction: Železnice ve výstavbě
disused: Nepoužívaná železniční trať
- disused_station: Nepoužívaná železniční stanice
+ disused_station: Zrušená železniční stanice
funicular: Lanová dráha
halt: Železniční zastávka
historic_station: Nádraží historické železnice
level6: Hranice okresu
level8: Hranice obce
level9: Hranice vesnice
- level10: Hranice čtvrti
+ level10: Hranice městské části
description:
title:
osm_nominatim: Poloha podle <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partneři
- partners_url: http://wiki.openstreetmap.org/wiki/Partners?uselang=cs
osm_offline: Databáze OpenStreetMap je momentálně kvůli probíhající neodkladné
údržbě mimo provoz.
osm_read_only: Databáze OpenStreetMap je momentálně kvůli probíhající neodkladné
partners_ic: dem Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: Partnern
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Die OpenStreetMap-Datenbank ist im Moment wegen wichtiger Wartungsarbeiten
nicht verfügbar.
osm_read_only: Die OpenStreetMap-Datenbank ist im Moment wegen wichtiger Wartungsarbeiten
require_moderator:
not_a_moderator: Du musst Moderator sein, um diese Aktion durchführen zu können.
setup_user_auth:
+ blocked_zero_hour: Du hast eine dringende Nachricht auf der OpenStreetMap-Website.
+ Du musst sie zuerst lesen, bevor du deine Bearbeitungen speichern kannst.
blocked: Dein Zugriff auf die API wurde gesperrt. Bitte melde dich auf der Web-Oberfläche
an, um mehr zu erfahren.
need_to_see_terms: Dein Zugriff auf die API wurde vorübergehend ausgesetzt.
helper:
time_future: Endet in %{time}.
until_login: Aktiv, bis der Benutzer sich anmeldet.
+ time_future_and_until_login: Endet in %{time} und nachdem sich der Benutzer
+ angemeldet hat.
time_past: Endete vor %{time}
blocks_on:
title: Sperren für %{name}
nothing_found: Keine Objekte gefunden
error: 'Fehler beim Kontaktieren von %{server}: %{error}'
timeout: Zeitüberschreitung beim Kontaktieren von %{server}
+ context:
+ directions_from: Route von hier
+ directions_to: Route nach hier
+ add_note: Einen Kartenfehler hier einfügen
+ show_address: Adresse anzeigen
+ query_features: Abfrage-Funktionen
+ centre_map: Karte hier zentrieren
redaction:
edit:
description: Beschreibung
edits: Vurnayışi
traces: Rêçi
remove as friend: Embazan ra vec
- add as friend: Embaz bı
+ add as friend: Embazi cı ke
mapper since: 'Demê herdnigarwaniye:'
ago: (%{time_in_words_ago} veror)
ct undecided: Darıdeyo
partners_ic: Imperial College του Λονδίνου
partners_bytemark: Bytemark Hosting
partners_partners: συνεργάτες
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Η βάση δεδομένων του OpenStreetMap είναι προσωρινά εκτός λειτουργίας
λόγω εργασιών συντήρησης της βάσης δεδομένων.
osm_read_only: Η βάση δεδομένων του OpenStreetMap έχει τεθεί προσωρινά σε λειτουργία
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partners
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: The OpenStreetMap database is currently offline while essential database
maintenance work is carried out.
osm_read_only: The OpenStreetMap database is currently in read-only mode while
require_moderator:
not_a_moderator: "You need to be a moderator to perform that action."
setup_user_auth:
+ blocked_zero_hour: "You have an urgent message on the OpenStreetMap web site. You need to read the message before you will be able to save your edits."
blocked: "Your access to the API has been blocked. Please log-in to the web interface to find out more."
need_to_see_terms: "Your access to the API is temporarily suspended. Please log-in to the web interface to view the Contributor Terms. You do not need to agree, but you must view them."
oauth:
helper:
time_future: "Ends in %{time}."
until_login: "Active until the user logs in."
+ time_future_and_until_login: "Ends in %{time} and after the user has logged in."
time_past: "Ended %{time} ago."
blocks_on:
title: "Blocks on %{name}"
nothing_found: No features found
error: "Error contacting %{server}: %{error}"
timeout: "Timeout contacting %{server}"
+ context:
+ directions_from: Directions from here
+ directions_to: Directions to here
+ add_note: Add a note here
+ show_address: Show address
+ query_features: Query features
+ centre_map: Centre map here
redaction:
edit:
description: "Description"
require_moderator:
not_a_moderator: Vi devas esti kontrolanto por fari ĉi tiun agon.
setup_user_auth:
+ blocked_zero_hour: Vi havas urĝan mesaĝon en la OpenStreetMap retejo. Vi devas
+ legi la mesaĝon antaŭ ol vi povos konservi viajn redaktojn.
blocked: Via aliro al API estas blokita. Bonvolu ensaluti al reta interfaco
por sciiĝi pli.
need_to_see_terms: Via aliro al API estas dumtempe provizore haltigita. Bonvolu
nothing_found: Neniuj objektoj trovitaj
error: 'Eraro dum komunikado kun %{server}: %{error}'
timeout: Atingis tempolimon dum kontakto kun %{server}
+ context:
+ directions_from: Direktoj el ĉi tie
+ directions_to: Direktoj al ĉi tie
+ add_note: Aldoni rimarkon ĉi tien
+ show_address: Montri adreson
+ query_features: Informoj pri objektoj
+ centre_map: Centrigi mapon ĉi tien
redaction:
edit:
description: Priskribo
partners_ic: Imperial College de Londres
partners_bytemark: Bytemark Hosting
partners_partners: socios
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: La base de datos de OpenStreetMap no está disponible en estos momentos
debido a trabajos de mantenimiento.
osm_read_only: La base de datos de OpenStreetMap se encuentra en modo de sólo
partners_ic: le Collège impérial de Londres
partners_bytemark: Hébergement Bytemark
partners_partners: partenaires
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: La base de données OpenStreetMap est actuellement hors ligne ; une
maintenance essentielle à son bon fonctionnement est en cours.
osm_read_only: La base de données OpenStreetMap est actuellement en mode lecture
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: com-pàirtichean eile
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Tha an stòr-dàta aig OpenStreetMap far loidhńe an-dràsta on a tha
sinn a' dèanamh obair-charaidh riatanach air.
osm_read_only: Tha an stòr-dàta aig OpenStreetMap sa mhodh leughaidh a-mhàin an-dràsta
partners_ic: המכללה המלכותית של לונדון
partners_bytemark: אירוח בייטמארק
partners_partners: שותפים
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: מסד הנתונים של אתר OpenStreetMap אינו מקוון כעת בשל עבודות תחזוקה
המבוצעות בו.
osm_read_only: מסד הנתונים של אתר OpenStreetMap נתון כעת במצב קריאה בלבד בשל עבודות
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partnerow
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Datowa banka OpenStreetMap je tuchwilu offline, dokelž so wažne wobhladowankse
dźěła na datowej bance přewjedu.
osm_read_only: Datowa banka OpenStreetMap je tuchwilu jenož čitajomna, dokelž
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partners
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Le base de datos de OpenStreetMap non es disponibile al momento debite
a operationes de mantenentia essential.
osm_read_only: Le base de datos de OpenStreetMap es al momento in modo de solmente
title: 'Minnispunktur: %{id}'
new_note: Nýr minnispunktur
description: Lýsing
+ open_title: 'Minnispunktur án lausnar #%{note_name}'
+ closed_title: 'Minnispunktur með lausn #%{note_name}'
hidden_title: 'Falinn minnispunktur #%{note_name}'
+ open_by: Búið til af %{user} <abbr title='%{exact_time}'>fyrir %{when} síðan</abbr>
+ open_by_anonymous: Búið til af nafnlausum notanda <abbr title='{exact_time}'>fyrir
+ %{when} síðan</abbr>
+ commented_by: Umsögn frá %{user} <abbr title='%{exact_time}'>fyrir %{when} síðan</abbr>
+ commented_by_anonymous: Umsögn frá nafnlausum notanda <abbr title='{exact_time}'>fyrir
+ %{when} síðan</abbr>
+ closed_by: Leyst af %{user} <abbr title='%{exact_time}'>fyrir %{when} síðan</abbr>
+ closed_by_anonymous: Leyst af nafnlausum notanda <abbr title='{exact_time}'>fyrir
+ %{when} síðan</abbr>
+ reopened_by: Endurvirkjað af %{user} <abbr title='%{exact_time}'>fyrir %{when}
+ síðan</abbr>
+ reopened_by_anonymous: Endurvirkjað af nafnlausum notanda <abbr title='{exact_time}'>fyrir
+ %{when} síðan</abbr>
+ hidden_by: Falið af %{user} <abbr title='%{exact_time}'>fyrir %{when} síðan</abbr>
query:
title: Rannsaka fitjur
introduction: Smelltu á kortið til að finna fitjur í nágrenninu.
list:
title: Breytingasett
title_user: Breytingar eftir %{user}
+ title_friend: Breytingar eftir vini þína
+ title_nearby: Breytingasett eftir nálæga notendur
+ empty: Engin breytingasett fundust.
load_more: Hlaða inn fleiri
rss:
commented_at_html: Uppfært fyrir %{when} síðan
location:
location: 'Staðsetning:'
view: kort
- edit: breyta
+ edit: Breyta
feed:
user:
title: OpenStreetMap bloggfærslur eftir %{user}
body: Svæðið sem þú ert að reyna að flytja út á OpenStreetMap á XML-sniði
er of stórt. Auktu aðdráttinn eða veldu smærra svæði, nú eða notaðu eina
af eftirfarandi leiðum til að flytja inn mikið magn gagna.
+ planet:
+ title: OSM-plánetan
geofabrik:
title: Niðurhöl frá Geofabrik
other:
longitude: 'Breidd:'
output: Úttak
paste_html: Notaðu þennan HTML kóða til að bæta kortinu á vefsíðu
- export_button: Niðurhala
+ export_button: Flytja út
geocoder:
search:
title:
fire_hydrant: Brunahani
fire_station: Slökkvistöð
fountain: Gosbrunnur
- fuel: Bensínstöð
+ fuel: Eldsneyti
gambling: Fjárhættuspil
grave_yard: Kirkjugarður
gym: Líkamsræktarstöð
landuse:
allotments: Úthlutuð svæði
basin: Lægð
+ brownfield: Byggingarsvæði
cemetery: Grafreitur
commercial: Verslunarsvæði
+ conservation: Verndarsvæði
+ construction: Bygging
farm: Býli
- farmland: Akurlendi
+ farmland: Ræktarland
forest: Skógur
garages: Verkstæði
grass: Gras
+ greenfield: Nýbyggingarsvæði
industrial: Iðnaðarsvæði
landfill: Landfylling
meadow: Skógarlundur
railway: Lestarteinar
reservoir: Uppistöðulón
residential: Íbúðasvæði
+ retail: Smásala
vineyard: Vínekra
"yes": Landnotkun
leisure:
bird_hide: Fuglaskoðunarhús
club: Klúbbur
common: Almenningur
+ dog_park: Hundagarður
fitness_centre: Líkamsræktarstöð
garden: Garður
golf_course: Golfvöllur
houses: Hús
island: Eyja
islet: Smáeyja
+ isolated_dwelling: Einangraður bústaður
locality: Sveitarfélag
+ moor: Mýri
municipality: Sveitarfélag
neighbourhood: Nágrenni
postcode: Póstnúmer
village: Þorp
"yes": Staður
railway:
+ abandoned: Aflögð járnbraut
+ construction: Járnbraut í byggingu
+ historic_station: Söguleg lestarstöð
+ level_crossing: Þverun brautarteina
light_rail: Smálest
+ monorail: Einteinungur
station: Lestarstöð
subway: Neðanjarðarlest
+ subway_entrance: Inngangur í neðanjarðarlest
tram: Sporvagn
tram_stop: Sporvagnastöð
shop:
+ antiques: Antíkverslun
art: Listmunaverslun
bakery: Bakarí
bicycle: Hjólaverslun
alpine_hut: Fjallaskáli
apartment: Íbúð
artwork: Listaverk
+ attraction: Aðdráttarafl
bed_and_breakfast: BB-gisting og veitingar
cabin: Kofi
camp_site: Tjaldstæði
waterfall: Foss
"yes": Siglingaleið
admin_levels:
+ level2: Landamæri
+ level4: Fylkismörk
level5: Héraðsmörk
+ level6: Sýslumörk
level8: Borgarmörk
description:
title:
start_mapping: Hefja kortlagningu
sign_up_tooltip: Stofnaðu aðgang til að geta breytt kortinu
edit: Breyta
- history: Sagnfræði
- export: Niðurhala
+ history: Breytingaskrá
+ export: Flytja út
data: Gögn
export_data: Flytja út gögn
gps_traces: GPS ferlar
tag_line: Frjálsa wiki heimskortið
intro_header: Velkomin í OpenStreetMap!
intro_2_create_account: Búa til notandaaðgang
+ partners_ucl: UCL VR Centre
+ partners_ic: Imperial College London
+ partners_bytemark: Bytemark Hosting
partners_partners: samstarfsaðilar
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: OpenStreetMap gagnagrunnurinn er niðri vegna viðhalds.
osm_read_only: Ekki er hægt að skrifa í OpenStreetMap gagnagrunninn í augnablikinu
vegna viðhalds.
donate: Hjálpaðu OpenStreetMap verkefninu með %{link} í vélbúnaðarsjóðinn.
help: Hjálp
- about: Um
+ about: Um hugbúnaðinn
copyright: Höfundaréttur
community: Samfélag
community_blogs: Blogg félaga
partners_title: Samstarfsaðilar
notifier:
diary_comment_notification:
- subject: '[OpenStreetMap] %{user} bætti við athugasemd á bloggfærslu þína'
+ subject: '[OpenStreetMap] %{user} bætti athugasemd við bloggfærslu þína'
hi: Hæ %{to_user},
- header: '%{from_user} hefur bætt við athugasemd á OpenStreetMap bloggið þitt
+ header: '%{from_user} hefur bætt við athugasemd á OpenStreetMap bloggfærsluna
með titlinum „%{subject}“:'
footer: Þú getur einnig lesið athugasemdina á %{readurl} og skrifað athugasemd
á %{commenturl} eða svarað á %{replyurl}
message_notification:
+ subject_header: '[OpenStreetMap] %{subject}'
hi: Hæ %{to_user},
header: '%{from_user} hefur send þér skilaboð á OpenStreetMap með titlinum „%{subject}“:'
friend_notification:
private: Einkaaðgangur
destination: Umferð leyfileg á ákveðinn áfangastað
construction: Vegir í byggingu
+ bicycle_parking: Reiðhjólastæði
richtext_area:
edit: Breyta
preview: Forskoðun
owner: 'Eigandi:'
description: 'Lýsing:'
tags: 'Merki:'
- none: engin
+ none: Ekkert
edit_track: Breyta
delete_track: Eyða
trace_not_found: Þessi ferill fannst ekki!
oauth_clients:
new:
title: Skrá nýtt forrit
- submit: Skrá
+ submit: Nýskrá
edit:
title: Breyta forritinu þínu
- submit: Vista
+ submit: Breyta
show:
title: OAuth stillingar fyrir %{app_name}
+ authorize_url: 'Leyfa slóð (URL):'
edit: Breyta þessari skráningu
+ delete: Eyða biðlara
confirm: Ertu viss?
requests: 'Óska eftir eftirfarandi leyfum frá notendum:'
allow_read_prefs: Lesa notandastillingar þeirra.
allow_write_diary: Búa til bloggfærslur, setja inn athugasemdir og bæta við
vinum.
allow_write_api: Breyta kortagögnunum.
+ allow_read_gpx: Lesa einka-GPS-ferlana þeirra.
allow_write_gpx: Senda inn GPS ferla.
- allow_write_notes: breyta minnispunktum.
+ allow_write_notes: Breyta minnispunktum.
index:
title: OAuth stillingar
revoke: Eyða banninu
vegna framlaga</a>.
email address: 'Netfang:'
confirm email address: 'Staðfestu netfang:'
- not displayed publicly: Ekki sýnt opinberlega (sjá <a href="http://wiki.openstreetmap.org/index.php?uselang=is&title=Privacy_Policy"
- title="Meðferð persónuupplýsinga, þ.á.m. netfanga">meðferð persónuupplýsinga</a>)
+ not displayed publicly: Netfangið þitt er ekki birt opinberlega, sjá kaflann
+ <a href="http://wiki.osmfoundation.org/wiki/Privacy_Policy" title=Meðferð
+ OSMF á persónuupplýsingum, þar með töldum netföngum">um meðferð persónuupplýsinga</a>
display name: 'Sýnilegt nafn:'
display name description: Nafn þitt sem aðrir notendur sjá, þú getur breytt
því síðar í stillingunum þínum.
+ external auth: 'Auðkenning með þriðja aðila:'
password: 'Lykilorð:'
confirm password: 'Staðfestu lykilorðið:'
continue: Nýskrá
unhide_user: Af-fela þennan notanda
delete_user: Eyða þessum notanda
confirm: Staðfesta
+ friends_changesets: breytingasett vina
+ friends_diaries: bloggfærslur vina
+ nearby_changesets: breytingasett vina í næsta nágrenni
+ nearby_diaries: bloggfærslur vina í næsta nágrenni
popup:
your location: Staðsetning þín
nearby mapper: Nálægur notandi
preferred editor: 'Uppáhaldsritill:'
image: 'Mynd:'
gravatar:
- gravatar: Nota Gravatar-merki
+ gravatar: Nota Gravatar-auðkennismynd
link: http://wiki.openstreetmap.org/wiki/Gravatar
link text: Hvað er þetta?
+ disabled: Gravatar-auðkennismynd hefur verið gerð óvirk.
+ enabled: Birting Gravatar-auðkennismyndar hefur verið gerð virk.
new image: Bæta við mynd
keep image: Halda þessari mynd
delete image: Eyða þessari mynd
flash update success: Stillingarnar þínar voru uppfærðar.
confirm:
heading: Athuga með tölvupóstinn þinn!
+ introduction_1: Við höfum sent þér staðfestingartölvupóst.
press confirm button: Hér getur þú staðfest að þú viljir búa til notanda..
button: Staðfesta
success: Notandinn þinn hefur verið staðfestur.
+ already active: Þessi notandaaðgangur hefur þegar verið staðfestur.
confirm_email:
heading: Staðfesta breytingu á netfangi
press confirm button: Hér getur þú staðfest breytingu á netfangi.
ago: Fyrir %{time} síðan
status: Staða
show: Sýna
- edit: Breyta banninu
+ edit: Breyta
revoke: Eyða banninu
confirm: Ertu viss?
reason: 'Ástæða banns:'
header: Lög á korti
notes: Minnispunktar á korti
data: Gögn korts
+ gps: Opinberir GPS-ferlar
title: Lög
copyright: © <a href='%{copyright_url}'>OpenStreetMap þátttakendur</a>
donate_link_text: <a class='donate-attr' href='%{donate_url}'>Styrkja verkefnið</a>
edit_tooltip: Breyta kortinu
edit_disabled_tooltip: Renndu að til að breyta kortinu
createnote_tooltip: Bæta við minnispunkti á kortið
+ createnote_disabled_tooltip: Renndu að til að bæta minnispunkti á kortið
map_notes_zoom_in_tooltip: Renndu að til að sjá minnispunkta á kortinu
map_data_zoom_in_tooltip: Renndu að til að skoða gögn kortsins
queryfeature_tooltip: Rannsaka fitjur
subscribe: Gerast áskrifandi
unsubscribe: Segja upp áskrift
hide_comment: fela
+ unhide_comment: hætta að fela
notes:
new:
add: Bæta við minnispunkti
show:
hide: Fela
resolve: Leysa
+ reactivate: Virkja aftur
comment: Athugasemd
directions:
engines:
mapzen_bicycle: Reiðhjól (Mapzen)
mapzen_car: Bíll (Mapzen)
mapzen_foot: Fótgangandi (Mapzen)
- directions: Stefnur
+ directions: Leiðir
distance: Vegalengd
errors:
no_route: Gat ekki fundið leið á milli þessara tveggja staða.
no_place: Því miður, gat ekki fundið þennan stað.
+ instructions:
+ continue_without_exit: Halda áfram á %{name}
+ unnamed: ónefnd gata
time: Tími
query:
node: Hnútur
way: Leið
relation: Vensl
nothing_found: Engar fitjur fundust
+ error: 'Villa við að tengjast %{server}: %{error}'
+ timeout: Rann út á tíma við að tengjast %{server}
redaction:
edit:
description: Lýsing
tag_line: თავისუფალი ვიკი-რუკა
intro_2_create_account: მომხმარებლის ანგარიშის შექმნა
partners_partners: პარტნიორები
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
help: დახმარება
copyright: საავტორო უფლები
community: თანასაზოგადოება
nothing_found: 지물을 찾을 수 없습니다
error: '%{server} 연결에 오류: %{error}'
timeout: '%{server} 연결에 시간 초과'
+ context:
+ add_note: 여기에 설명 추가
redaction:
edit:
description: 설명
query:
way: Wee
relation: Relatioun
+ context:
+ directions_from: Vun hei fort
+ directions_to: Heihinn
+ add_note: Eng Notiz hei dobäisetzen
+ show_address: Adress weisen
+ centre_map: Kaart hei zentréieren
redaction:
edit:
description: Beschreiwung
default: Numatytasis (šiuo metu %{name})
potlatch:
name: Potlatch 1
- description: Potlatch 1 (redaktorius naršyklėje)
+ description: Potlatch 1 (rengyklė naršyklėje)
id:
name: iD
- description: iD (naršyklės redaktorius)
+ description: iD (rengyklė naršyklėje)
potlatch2:
name: Potlatch 2
- description: Potlatch 2 (redaktorius naršyklėje)
+ description: Potlatch 2 (rengyklė naršyklėje)
remote:
name: nuotoliniu valdymu
description: nuotolinį valdymą (JOSM arba Merkaartor)
gps_traces_tooltip: Tvarkyti GPS pėdsakus
user_diaries: Dienoraščiai
user_diaries_tooltip: Peržiūrėti naudotojų dienoraščius
- edit_with: Redaguoti per %{editor}
+ edit_with: Redaguoti su %{editor}
tag_line: Atviras wiki žemėlapis
intro_header: Sveiki atvykę į OpenStreetMap!
intro_text: OpenStreetMap yra pasaulio žemėlapis, kuriamas žmonių, tokių kaip
license_page:
foreign:
title: Apie šį vertimą
- text: Konfliktuojant tarp šio išversto puslapio ir %{english_original_link},
+ text: Esant konfliktui tarp šio išversto puslapio ir %{english_original_link},
pirmenybė bus teikiama angliškajai versijai.
english_link: anglų originalas
native:
Sužinokite daugiau apie mūsų duomenų naudojimą, kaip pažymėti prisidėjusius <a
href="http://osmfoundation.org/Licence">OSMF licencijavimo puslapyje</a> ir bendruomenės <a href="http://wiki.openstreetmap.org/wiki/Legal_FAQ">DUK dėl legalumo</a>.
more_2_html: |-
- Nors OpenStreetMap duomenys yra atviri, mes negalime pateikti free-of-charge žemėlapių API trečiųjų šalių vystytojams.
-
- Peržiūrėkite mūsų <a href="http://wiki.openstreetmap.org/wiki/API_usage_policy">API naudojimo politiką</a>, bei <a href="http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy">Nominatim naudojimo politika</a>.
+ Nors OpenStreetMap duomenys yra atviri, mes negalime pateikti
+ nemokamos žemėlapių API trečiosioms šalims.
+ Peržiūrėkite mūsų <a href="https://operations.osmfoundation.org/policies/api/">API naudojimo politiką</a>,
+ <a href="https://operations.osmfoundation.org/policies/tiles/">Kaladėlių naudojimo politiką</a>,
+ bei <a href="https://operations.osmfoundation.org/policies/nominatim/">Nominatim naudojimo politiką</a>.
contributors_title_html: Mūsų autoriai
contributors_intro_html: Mūsų autoriai yra tūkstančiai įvairių žmonių. Taip
pat apimame ir laisvai prieinamą turinį iš valstybinių kartografijos agentūrų,
title: Pagrindiniai žymėjimo terminai
paragraph_1_html: OpenStreetMap turi savo žodyną. Čia keli pagrindiniai naudojami
terminai/žodžiai.
- editor_html: <strong>Redaktorius</strong> - tai programa arba svetainė, kurios
- pagalba galite redaguoti žemėlapį.
+ editor_html: <strong>Rengyklė</strong> - tai programa arba svetainė su kuria
+ galite redaguoti žemėlapį.
node_html: <strong>node/taškas</strong> - taškas žemėlapyje, pavyzdžiui vienas
restoranas ar medis.
way_html: <strong>kelias/way</strong> - linija ar plotas, pavyzdžiui kelias,
legal_title: Teisės
legal_html: "Šis puslapis ir daugelis kitų susijusių paslaugų yra formaliai valdomi
\n<a href='http://osmfoundation.org/'>OpenStreetMap fondo</a> (OSMF) \nbendruomenės
- vardu.\n<br> \n<a href='http://osmfoundation.org/Contact'>Susisiekite su OSMF</a>,
- \njei turite licencijavimo, autoriaus teisių ar kitų teisinių klausimų ar problemų."
+ vardu. Visų OSMF valdomų paslaugų naudojimas yra\npriklausomas nuo <a href=\"http://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy\">\nPriimtino
+ naudojimo politikos</a> ir mūsų <a href=\"http://wiki.osmfoundation.org/wiki/Privacy_Policy\">Privatumo
+ politikos</a>.\n<br> \n<a href='http://osmfoundation.org/Contact'>Susisiekite
+ su OSMF</a>, \njei turite licencijavimo, autoriaus teisių ar kitų teisinių klausimų
+ ar problemų."
partners_title: Partneriai
notifier:
diary_comment_notification:
- subject: '[OpenStreetMap] %{user} pakomentavo jūsų dienoraščio įrašą'
+ subject: '[OpenStreetMap] %{user} pakomentavo dienoraščio įrašą'
hi: Sveiki, %{to_user},
- header: '%{from_user} pakomentavo jūsų paskutinį OpenStreetMap dienoraščio įrašą
- su tema %{subject}:'
+ header: '%{from_user} pakomentavo jūsų OpenStreetMap dienoraščio įrašą su tema
+ %{subject}:'
footer: Taip pat galite perskaityti komentarą adresu %{readurl}, komentuoti
galite adresu %{commenturl}, o atsakyti - adresu %{replyurl}
message_notification:
Pastaba yra netoli %{place}.'
details: Daugiau informacijos apie pastabą galima rasti %{url}.
changeset_comment_notification:
+ hi: Sveiki, %{to_user},
greeting: Labas,
commented:
subject_own: '[OpenStreetMap] %{commenter} pakomentavo vieną iš jūsų pakeitimų'
partial_changeset_with_comment: su komentaru '%{changeset_comment}'
partial_changeset_without_comment: be komentaro
details: Daugiau informacijos apie pakeitimą rasite čia %{url}.
+ unsubscribe: Jei norite atsisakyti šio pakeitimo atnaujinimų, eikite į %{url}
+ ir spauskite „Atsisakyti“.
message:
inbox:
title: Gautieji
edit:
not_public: Jūs nenustatėte savo keitimų, kad būtų vieši
not_public_description: Jūs nebegalite keisti žemėlapio, jei jūs tą darysite.
- Jūs galite nustatyti keitimus,kaip viešus iš savo %{user_page}.
+ Jūs galite nustatyti keitimus, kaip viešus, iš savo %{user_page}.
user_page_link: naudotojo puslapis
anon_edits_link_text: Sužinokite, kodėl taip yra.
- flash_player_required: Jums reikalingas Flash player norint redaguoti su Potlatch
- (atvirojo žemėlapio Flash redagavimo įrankis). Jūs galite <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">parsisiųsti
+ flash_player_required: Jums reikalingas Flash player norint redaguoti su Potlatch,
+ OpenStreetMap Flash rengykle. Jūs galite <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">parsisiųsti
Flash Player iš Adobe.com</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">Taip
pat yra daugybė kitų būdų</a>, kuriais galėsite prisidėti prie OpenStreetMap
žemėlapio redagavimo.
track: Pėdsakas
bridleway: Takas galvijams varyti
cycleway: Dviračių takas
+ cycleway_national: Nacionalinis dviračių takas
+ cycleway_regional: Regioninis dviračių takas
cycleway_local: Vietinis dviračių takas
footway: Pėsčiųjų takas
rail: Geležinkelis
require_moderator:
not_a_moderator: Norėdami atlikti šį veiksmą, turite būti administratoriumi.
setup_user_auth:
+ blocked_zero_hour: Turite skubų pranešimą OpenStreetMap puslapyje. Jums reikia
+ perskaityti šį pranešimą prieš galint išsaugoti pakeitimus.
blocked: Jūsų prieiga prie API užblokuota. Prisijunkite prie žiniatinklio sąsajos,
kad sužinotumėte daugiau.
need_to_see_terms: Jūsų priėjimas prie API laikinai pristabdytas. Jūs turite
sąlygomis</a>.
email address: 'E-pašto adresas:'
confirm email address: 'Patvirtinkite e-pašto adresą:'
- not displayed publicly: Viešai nerodoma (skaitykite <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy"
- title="wiki privatumo politika, įskaitant el. paštą">privatumo politiką</a>)
+ not displayed publicly: Jūsų adresas nėra viešai rodomas, daugiau informacijos
+ rasite <a href="http://wiki.osmfoundation.org/wiki/Privacy_Policy" title="OSMF
+ privatumo politika, įskaitant el. pašto adresus">privatumo politikoje</a>
display name: 'Rodomas vardas:'
display name description: Jūsų viešai rodomas naudotojo vardas. Jei norėsite,
galėsite jį vėliau pakeisti savo nustatymuose.
text: Šiuo metu jūsų keitimai yra anonimiški ir žmonės negali jums siųsti
pranešimų ar matyti jūsų vietovės. Parodymui ką jūs keitėte ir galimybei
kitiems žmonėms su jumis susisiekti per šią svetainę, spauskit nuorodą žemiau.
- <b>Nuo 0.6 API pakeitimo, tik vieši naudotojai gali keisti duoemnis</b>.
- (<a href="http://wiki.openstreetmap.org/wiki/Anonymous_edits">dėl ko taip
- padaryta</a>).<ul><li>Jūsų el. pašto adresas nebus atskleistas kol ne taps
- viešas.</li><li>Šis veiksmas negalės būti atšauktas ir visi nauji naudotojai
- dabar yra vieši pagal nutylėjimą.</li></ul>
+ <b>Nuo 0.6 API pakeitimo, tik vieši naudotojai gali keisti duomenis</b>.
+ (<a href="http://wiki.openstreetmap.org/wiki/Anonymous_edits">sužinokite
+ kodėl</a>).<ul><li>Jūsų el. pašto adresas nebus viešai atskleistas.</li><li>Šis
+ veiksmas negalės būti atšauktas ir visi nauji naudotojai dabar yra automatiškai
+ vieši.</li></ul>
contributor terms:
heading: 'Talkininkų sąlygos:'
agreed: Jūs sutikote su naujomis talkininkų sąlygomis.
link text: kas tai?
profile description: 'Profilio aprašymas:'
preferred languages: 'Pageidautinos kalbos:'
- preferred editor: 'Pageidautinas redaktorius:'
+ preferred editor: 'Pageidautina rengyklė:'
image: 'Nuotrauka:'
gravatar:
gravatar: Naudoti Gravatar
link text: kas tai?
disabled: Gravatar buvo išjungtas.
+ enabled: Jūsų Gravatar rodymas įjungtas.
new image: Pridėti nuotrauką
keep image: Palikti dabartinę nuotrauką
delete image: Pašalintį dabartinę nuotrauką
key:
title: Sutartiniai ženklai
tooltip: Sutartiniai ženklai
- tooltip_disabled: Sutartiniai ženklai galimi tik standartiniame sluoksnyje
+ tooltip_disabled: Sutartiniai ženklai neprieinami šiame sluoksnyje
map:
zoom:
in: Priartinti
header: Žemėlapio sluoksniai
notes: Žemėlapio pastabos
data: Žemėlapio duomenys
+ gps: Vieši GPS pėdsakai
overlays: Įjungti papildomus sluoksnius problemų pranešimui
title: Sluoksniai
copyright: © <a href='%{copyright_url}'>OpenStreetMap talkininkai</a>
instructions:
continue_without_exit: Tęskite kelionę %{name}
slight_right_without_exit: Dešiniau į %{name}
+ offramp_right_without_exit: Pasirinkite rampą dešinėje į %{name}
+ onramp_right_without_exit: Sukite dešinėn ant rampos į %{name}
+ endofroad_right_without_exit: Kelio pabaigoje sukite dešinėn į %{name}
+ merge_right_without_exit: Įsilieti dešinėn į %{name}
+ fork_right_without_exit: Išsišakojime sukite dešinėn į %{name}
turn_right_without_exit: Sukite dešinėn į %{name}
sharp_right_without_exit: Staigus posūkis dešinėn į %{name}
uturn_without_exit: Apsisukite ties %{name}
sharp_left_without_exit: Staigus posūkis kairėn į %{name}
turn_left_without_exit: Sukite kairėn į %{name}
+ offramp_left_without_exit: Pasirinkite rampą kairėje į %{name}
+ onramp_left_without_exit: Sukite kairėn ant rampos į %{name}
+ endofroad_left_without_exit: Kelio pabaigoje sukite kairėn į %{name}
+ merge_left_without_exit: Įsilieti kairėn į %{name}
+ fork_left_without_exit: Išsišakojime sukite kairėn į %{name}
slight_left_without_exit: Kairiau į %{name}
via_point_without_exit: (per tašką)
follow_without_exit: Sekite %{name}
- roundabout_without_exit: Žiede išvažiuokite į %{name}
+ roundabout_without_exit: Žiede pasirinkite %{name}
leave_roundabout_without_exit: Išvažiuokite iš žiedo - %{name}
stay_roundabout_without_exit: Likite žiede - %{name}
start_without_exit: Pradėkite %{name} pabaigoje
destination_without_exit: Pasiekite tikslą
against_oneway_without_exit: Važiuokite prieš eismą %{name}
end_oneway_without_exit: Vienpusio eismo pabaiga %{name}
- roundabout_with_exit: Žiede išvažiuokite %{exit} išvažiavime į %{name}
+ roundabout_with_exit: Žiede pasirinkite išvažiavimą %{exit} į %{name}
+ turn_left_with_exit: Žiede sukite kairėn į %{name}
+ slight_left_with_exit: Žiede šiek tiek kairėn į %{name}
+ turn_right_with_exit: Žiede sukite dešinėn į %{name}
+ slight_right_with_exit: Žiede šiek tiek dešinėn į %{name}
+ continue_with_exit: Žiede tęskite tiesiai į %{name}
unnamed: bevardis
courtesy: Nuorodas pateikė %{link}
time: Laikas
nothing_found: Nerasta objektų
error: 'Klaida jungiantis prie %{server}: %{error}'
timeout: Jungiantis prie %{server} baigėsi laikas
+ context:
+ directions_from: Nuorodos iš čia
+ directions_to: Nuorodos į čia
+ add_note: Pridėti pastabą čia
+ show_address: Rodyti adresą
+ query_features: Ieškoti objektų
+ centre_map: Centruoti žemėlapį čia
redaction:
edit:
description: Aprašymas
partners_ic: Londonas Imperiālā Koledža
partners_bytemark: Bytemark Hosting
partners_partners: partneri
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: OpenStreetMap datubāze šobrīd nav pieejama, tiek veikti svarīgi datubāzes
apkalpošanas darbi.
osm_read_only: OpenStreetMap datubāze šobrīd ir pieejama tikai-lasāmā režīmā,
partners_ic: Империјалниот колеџ - Лондон
partners_bytemark: вдомителот „Bytemark“
partners_partners: партнери
- partners_url: http://wiki.openstreetmap.org/wiki/Partners?uselang=mk
osm_offline: Базата на податоци на OpenStreetMap моментално е исклучена додека
работиме на неопходни одржувања.
osm_read_only: Базата на податоци на OpenStreetMap моментално може само да се
require_moderator:
not_a_moderator: За да го изведете тоа, треба да сте модератор.
setup_user_auth:
+ blocked_zero_hour: Имате итна порака на OpenStreetMap. Ќе мора да ја прочитате
+ пораката пред да ги зачувате уредувањата.
blocked: Пристапот кон API ви е блокиран. Најавете се на посредникот за да дознаете
повеќе.
need_to_see_terms: Вашиот пристап до извршничкиот програм е привремено запрен.
helper:
time_future: Истекува за %{time}.
until_login: Активно додека не се најави корисникот.
+ time_future_and_until_login: Завршува во %{time} и откако корисникот ќе се најави.
time_past: Истечено пред %{time}.
blocks_on:
title: Блокови за %{name}
nothing_found: Не пронајдов ниеден елемент
error: 'Грешка при поврзувањето со %{server}: %{error}'
timeout: Истече времето за поврзување со %{server}
+ context:
+ directions_from: Насоки оттука
+ directions_to: Насоки дотука
+ add_note: Тука ставете белешка
+ show_address: Прикажи адреса
+ query_features: Можности за барања
+ centre_map: Тука сосредоточи ја картата
redaction:
edit:
description: Опис
partners_ic: Imperial College London
partners_bytemark: Hosting Bytemark
partners_partners: partnerzy
- partners_url: http://wiki.openstreetmap.org/wiki/partners
osm_offline: Baza danych OpenStreetMap jest niedostępna na czas ważnych zadań
administracyjnych, które są w tym momencie wykonywane.
osm_read_only: Baza danych OpenStreetMap jest w trybie tylko-do-odczytu na czas
require_moderator:
not_a_moderator: Você precisa ser um moderador para realizar essa ação.
setup_user_auth:
+ blocked_zero_hour: Há uma mensagem urgente para você no site do OpenStreetMap.
+ Você deve lê-la para poder voltar a salvar suas edições.
blocked: Seu acesso à API foi bloqueado. Acesse a interface web para mais detalhes.
need_to_see_terms: O seu acesso à API está temporariamente suspenso. Faça o
login na interface web para ler os Termos do Contribuidor. Você não precisa
nothing_found: Nenhum elemento encontrado
error: 'Erro ao contatar %{server}: %{error}'
timeout: Tempo esgotado com %{server}
+ context:
+ directions_from: Início da Rota
+ directions_to: Destino da Rota
+ add_note: Adicionar uma nota aqui
+ show_address: Mostrar Endereço
+ query_features: Consultar elementos
+ centre_map: Centralizar o mapa aqui
redaction:
edit:
description: Descrição
partners_ic: Imperial College v Londýne
partners_bytemark: Bytemark Hosting
partners_partners: partneri
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: OpenStreetMap databáza je teraz offline, zatiaľ čo potrebná údržba
databázy naďalej prebieha.
osm_read_only: OpenStreetMap databáza je teraz len v móde čítania (bez možnosti
saved_at: Shranjen
user: Uporabnik
comment: Komentar
- area: Področje
+ area: Območje
list:
title: Paketi sprememb
title_user: Paketi sprememb uporabnika %{user}
Data Commons Open Database License</a> (ODbL).
too_large:
advice: 'Če zgornji izvoz spodleti, uporabite enega od spodnjih virov:'
- body: 'To področje je preveliko za izvoz v OpenStreetMap XML. Prosimo, da
- se približate ali izberete manjše območje ali pa da uporabite enega od naslednjih
- virov za obsežen prenos podatkov:'
+ body: 'To področje je preveliko za izvoz v XML OpenStreetMap. Prosimo, da
+ se približate ali izberete manjše področje ali pa da uporabite enega od
+ naslednjih virov za obsežen prenos podatkov:'
planet:
title: Planet OSM
description: Redno posodabljane kopije celotne podatkovne zbirke OpenStreetMap
administrative: Upravna meja
census: Popisna meja
national_park: Nacionalni Park
- protected_area: Zavarovano območje
+ protected_area: Zavarovano področje
bridge:
aqueduct: Akvadukt
suspension: Viseči most
brownfield: Gradbišče
cemetery: Pokopališče
commercial: Poslovna cona
- conservation: Zaštićeno področje
+ conservation: Zaščiteno področje
construction: Gradbišče
farm: Kmetija
farmland: Kmetijsko zemljišče
farmyard: Vrt
forest: Gozd
garages: Garaže
- grass: Travnik
+ grass: Trata
greenfield: Pripravljeno za gradbišče
industrial: Industrijsko podočje
landfill: Smetišče
meadow: Travnik
- military: Vojaško območje
+ military: Vojaško področje
mine: Minsko polje
orchard: Sadovnjak
quarry: Kamnolom
railway: Železnica
- recreation_ground: Rekreacijsko območje
+ recreation_ground: Rekreacijsko področje
reservoir: Zbiralnik
residential: Stanovanjska cona
retail: Trgovine
- road: Območje ceste
+ road: Področje ceste
village_green: Zelenica
vineyard: Vinograd
"yes": Raba tal
bird_hide: Ptičja opazovalnica
club: Klub
common: Javno zemljišče
- fishing: Ribolovno območje
+ fishing: Ribolovno področje
fitness_centre: Fitnes center
fitness_station: Fitnes center
garden: Vrt
- golf_course: Igrišče za Golf
+ golf_course: Igrišče za golf
horse_riding: Jahanje
ice_rink: Drsališče
marina: Marina
park: Park
pitch: Športno igrišče
playground: Otroško igrišče
- recreation_ground: Rekreacijsko območje
+ recreation_ground: Rekreacijsko področje
sauna: Savna
slipway: Rampa
sports_centre: Športni center
beach: Obala
cape: Rt
cave_entrance: Vhod v jamo
- cliff: Klif
+ cliff: Pečina
crater: Krater
dune: Peščina
fell: Planina
forest: Gozd
geyser: Gejzir
glacier: Ledenik
+ grassland: Pašnik
heath: Ravnina
hill: Hrib
island: Otok
subdivision: Pododdelek
suburb: Predmestje
town: Mesto
- unincorporated_area: Nikogaršnje območje
+ unincorporated_area: Nikogaršnje področje
village: Vas
"yes": Kraj
railway:
salon: Lepotilni salon
second_hand: Trgovina z rabljeno opremo
shoes: Trgovina s čevlji
- shopping_centre: Nakupovalno središče
+ shopping_centre: Nakupovalni center
sports: Športna trgovina
stationery: Papirnica
supermarket: Supermarket
vi, brezplačen za uporabo z odprto licenco.
intro_2_create_account: Ustvarite uporabniški račun
partners_html: Gostovanje podpira %{ucl}, %{ic} in %{bytemark}, ter ostali %{partners}.
- partners_ucl: UCL VR Center
+ partners_ucl: Center UCL VR
partners_ic: Imperial College v Londonu
partners_bytemark: Bytemark Hosting
partners_partners: partnerji
node_html: <strong>Vozlišče</strong> je točka na zemljevidu, kot npr. restavracija
ali drevo.
way_html: <strong>Pot</strong> je črta ali področje, kot je npr. cesta, potok,
- jezero ali stavba.
+ jezero ali zgradba.
tag_html: <strong>Oznaka</strong> je podatek o vozlišču ali poti, kot je npr.
ime restavracija ali omejitev hitrosti na cesti.
questions:
admin: Upravna razmejitev
forest: Gozd
wood: Pragozd
- golf: Igrišče za Golf
+ golf: Igrišče za golf
park: Park
resident: Naselje
common:
- Travniki
- travnik
- retail: Trgovsko območje
+ retail: Trgovsko področje
industrial: Industrijsko področje
- commercial: Poslovno območje
+ commercial: Poslovno področje
heathland: Grmičevje
lake:
- Jezero
no_route: Ni mogoče najti poti med tema dvema položajema.
no_place: Žal tega kraja ni bilo mogoče najti.
instructions:
+ continue_without_exit: Nadaljujte po %{name}
+ onramp_right_without_exit: Na priključku zavijte desno na %{name}
+ endofroad_right_without_exit: Na koncu ceste zavijte desno na %{name}
+ fork_right_without_exit: Na razcepu zavijte desno na %{name}
+ sharp_right_without_exit: Ostro desno na %{name}
+ uturn_without_exit: Polkrožno obrnite po %{name}
+ sharp_left_without_exit: Ostro levo na %{name}
+ turn_left_without_exit: Zavijte levo na %{name}
+ onramp_left_without_exit: Na priključku zavijte levo na %{name}
+ endofroad_left_without_exit: Na koncu ceste zavijete levo na %{name}
+ fork_left_without_exit: Na razcepu zavijte levo na %{name}
+ roundabout_without_exit: V krožišču uporabite %{name}
+ stay_roundabout_without_exit: Ostanite v krožišču - %{name}
+ start_without_exit: Začnite na koncu %{name}
+ destination_without_exit: Pojdite do cilja
+ roundabout_with_exit: V krožišču uporabite %{exit}. izhod, da zapeljete na
+ %{name}
+ turn_left_with_exit: V krožišču zavijte levo na %{name}
+ slight_left_with_exit: V krožišču rahlo levo na %{name}
+ turn_right_with_exit: V krožišču zavijete desno na %{name}
+ slight_right_with_exit: V krožišču rahlo desno na %{name}
+ continue_with_exit: Na krožišču nadaljujte naravnost na %{name}
unnamed: neimenovano
- courtesy: Navodila je ponudil %{link}
+ courtesy: Navodila prispeva %{link}
time: Čas
query:
node: Vozlišče
way: Pot
relation: Zveza
nothing_found: Značilnosti ni bilo mogoče najti
+ context:
+ directions_from: Navodila od tu
+ show_address: Prikaži naslov
+ query_features: Poišči značilnosti
+ centre_map: Premakni na sredino
redaction:
edit:
description: Opis
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partners
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: OpenStreetMap-databasen är inte tillgänglig just nu, då nödvändigt
databasunderhåll pågår.
osm_read_only: OpenStreetMap-databasen är skrivskyddad just nu, då nödvändigt
partners_ic: Dalubhasaang Pang-imperyo Londres
partners_bytemark: Pagpapasinaya ng Bytemark
partners_partners: mga kawaksi
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: Ang kalipunan ng dato ng OpenStreetMap ay pangkasalukuyang nakapatay
habang isinasagawa ang mahalagang gawain ng pagpapanatili ng kalipunan ng dato.
osm_read_only: Ang kalipunan ng dato ng OpenStreetMap ay pangkasalukuyang nasa
# Export driver: phpyaml
# Author: Alerque
# Author: Alpkant
+# Author: Archaeodontosaurus
# Author: Captantrips
# Author: Emperyan
# Author: Erdemaslancan
alt: Web sayfasıında OpenStreetMap atıf etmek için bir örnek
title: Atıf örneği
contributors_title_html: Katkıcılarımız
+ infringement_title_html: Telif hakkı ihlali
welcome_page:
title: Hoş geldiniz!
introduction_html: Dünyanın düzenlenebilir ve ücretsiz haritası OpenStreetMap'e
title: Forumlar
irc:
title: IRC
+ switch2osm:
+ title: switch2osm
wiki:
url: http://wiki.openstreetmap.org/
title: wiki.openstreetmap.org
subject_own: '[OpenStreetMap] notlarından birisini %{commenter} tarafından
yorumlandı'
changeset_comment_notification:
+ hi: Merhaba %{to_user},
greeting: Merhaba,
commented:
partial_changeset_without_comment: yorumsuz
private: Özel giriş
destination: Hedef noktası
construction: yapım aşamasında yolu
+ toilets: Tuvaletler
richtext_area:
edit: Düzenle
preview: Ön izle
біля %{place}.'
details: Докладніше про нотатку %{url}.
changeset_comment_notification:
+ hi: Привіт %{to_user},
greeting: Привіт,
commented:
subject_own: '[OpenStreetMap] %{commenter} прокоментував один з ваших наборів
details: |2-
Більше деталей про зміни, які можуть бути знайдені в %{url}.
+ unsubscribe: Щоб відписатися від оновлень за цим набором змін, перейдіть за
+ посиланням %{url} й натисніть кнопку „Відписатись“.
message:
inbox:
title: Вхідні
require_moderator:
not_a_moderator: Ви повинні бути модератором для виконання цієї дії.
setup_user_auth:
+ blocked_zero_hour: У вас є нагальне повідомлення на веб-сайті OpenStreetMap.
+ Вам потрібно прочитати повідомлення, перш ніж ви зможете зберегти ваші зміни.
blocked: Ваш доступ до API заблоковано. Будь ласка, увійдіть через веб-інтерфейс,
щоб дізнатися подробиці.
need_to_see_terms: Ваш доступ до API тимчасово призупинено. Будь ласка, увійдіть
nothing_found: Об’єкти не знайдені
error: 'Помилка зв’язку %{server}: %{error}'
timeout: Сервер не відповідає %{server}
+ context:
+ directions_from: Маршрут звідси
+ directions_to: Маршрут сюди
+ add_note: Додати тут нотатку
+ show_address: Показати адресу
+ query_features: Отримати об’єкти
+ centre_map: Центрувати мапу тут
redaction:
edit:
description: Опис
partners_ic: Đại học Hoàng gia Luân Đôn
partners_bytemark: Bytemark Hosting
partners_partners: các công ty bảo trợ
- partners_url: http://wiki.openstreetmap.org/wiki/Partners?uselang=vi
osm_offline: Cơ sở dữ liệu OpenStreetMap đang ngoại tuyến trong lúc đang thực
hiện những công việc bảo quản cơ sở dữ liệu cần thiết.
osm_read_only: Cơ sở dữ liệu OpenStreetMap đang bị khóa không được sửa đổi trong
require_moderator:
not_a_moderator: Chỉ có các điều hành viên được phép thực hiện tác vụ đó.
setup_user_auth:
+ blocked_zero_hour: Bạn có tin nhắn mới rất quan trọng tại trang Web OpenStreetMap.
+ Bạn phải đọc tin nhắn này trước khi được phép lưu thêm thay đổi.
blocked: Bạn bị chặn không được truy cập qua API. Vui lòng đăng nhập vào giao
diện Web để biết chi tiết.
need_to_see_terms: Bạn tạm không có quyền truy cập API. Xin vui lòng đăng nhập
nothing_found: Không tìm thấy yếu tố nào
error: 'Lỗi khi kết nối với %{server}: %{error}'
timeout: Hết thời gian kết nối với %{server}
+ context:
+ directions_from: Chỉ đường từ đây
+ directions_to: Chỉ đường tới đây
+ add_note: Thêm ghi chú tại đây
+ show_address: Xem địa chỉ
+ query_features: Thăm dò yếu tố
+ centre_map: Tập trung bản đồ tại đây
redaction:
edit:
description: Miêu tả
intro_header: 欢迎访问 OpenStreetMap!
intro_text: OpenStreetMap 是一个世界地图,由像您一样的人们所构筑,可依据开放许可协议自由使用。
intro_2_create_account: 创建用户账户
- partners_html: 主机由%{ucl}、%{ic}、%{bytemark}和其他%{partners}所支持。
+ partners_html: 主机由%{ucl}、%{bytemark}和%{ic},以及其他%{partners}所支持。
partners_ucl: 伦敦大学学院虚拟现实中心
partners_ic: 伦敦帝国学院
partners_bytemark: Bytemark主机
partners_partners: 合作伙伴
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: 由于正在进行基本的数据库维护工作,OpenStreetMap 数据库目前处于脱机状态。
osm_read_only: 由于正在进行基本的数据库维护工作,OpenStreetMap 数据库目前处于只读模式。
donate: 通过给硬件升级基金%{link}支持 OpenStreetMap。
require_moderator:
not_a_moderator: 必须为管理员才能执行该操作。
setup_user_auth:
+ blocked_zero_hour: 您在OpenStreetMap网站有一条紧急消息。在您可以保存您的编辑之前,您需要阅读这条消息。
blocked: 您对 API 的访问已经被阻挡了。请登录到网站以了解更多信息。
need_to_see_terms: 您对 API 的访问已暂时中止。请登录到网站以查看贡献者条款。您不需要同意,但必须查看它们。
oauth:
helper:
time_future: 结束于 %{time}。
until_login: 用户登录时激活。
+ time_future_and_until_login: 结束于%{time},并在用户登录之后。
time_past: 结束于 %{time} 前。
blocks_on:
title: 对 %{name} 的封禁
nothing_found: 没有找到特征
error: 连接 %{server} 时出错:%{error}
timeout: 连接 %{server} 超时
+ context:
+ directions_from: 从这里的指示
+ directions_to: 到这里的指示
+ add_note: 在此添加注释
+ show_address: 显示地址
+ query_features: 查询特征
+ centre_map: 中心地图在此
redaction:
edit:
description: 说明
require_moderator:
not_a_moderator: 您需要是管理人員,才可執行該動作。
setup_user_auth:
+ blocked_zero_hour: 您在OpenStreetMap網站有一個緊急訊息。在您儲存您的編輯內容前請先閱讀該訊息。
blocked: 您已經被封鎖使用 API。請登入網頁介面以瞭解更多資訊。
need_to_see_terms: 我們已暫時中止您使用 API 的權限,請登入網頁介面查閱貢獻者條款,您不需要同意有關條款,但必須查閱它們。
oauth:
helper:
time_future: 於 %{time} 結束。
until_login: 生效直至這個使用者登入為止。
+ time_future_and_until_login: 在用戶已登入後結束於%{time}。
time_past: 於 %{time} 之前結束。
blocks_on:
title: 對 %{name} 的封鎖
nothing_found: 找不到圖徵
error: '%{server} 連線錯誤:%{error}'
timeout: '%{server} 連線逾時'
+ context:
+ directions_from: 從這裡的路線
+ directions_to: 到這裡的路線
+ add_note: 在此添加註釋
+ show_address: 顯示地址
+ query_features: 查詢圖徵
+ centre_map: 中央地圖在此
redaction:
edit:
description: 說明
--- /dev/null
+require "test_helper"
+
+class UserBlocksHelperTest < ActionView::TestCase
+ include ApplicationHelper
+
+ def test_block_status
+ block = create(:user_block, :needs_view, :ends_at => Time.now.getutc)
+ assert_equal "Active until the user logs in.", block_status(block)
+
+ block = create(:user_block, :needs_view, :ends_at => Time.now.getutc + 1.hour)
+ assert_match %r{^Ends in <span title=".*">about 1 hour</span> and after the user has logged in\.$}, block_status(block)
+
+ block = create(:user_block, :ends_at => Time.now.getutc + 1.hour)
+ assert_match %r{^Ends in <span title=".*">about 1 hour</span>\.$}, block_status(block)
+ end
+end
--- /dev/null
+.leaflet-contextmenu {
+ display: none;
+ box-shadow: 0 1px 7px rgba(0,0,0,0.4);
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ padding: 4px 0;
+ background-color: #fff;
+ cursor: default;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+
+.leaflet-contextmenu a.leaflet-contextmenu-item {
+ display: block;
+ color: #222;
+ font-size: 12px;
+ line-height: 20px;
+ text-decoration: none;
+ padding: 0 12px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ cursor: default;
+ outline: none;
+}
+
+.leaflet-contextmenu a.leaflet-contextmenu-item-disabled {
+ opacity: 0.5;
+}
+
+.leaflet-contextmenu a.leaflet-contextmenu-item.over {
+ background-color: #f4f4f4;
+ border-top: 1px solid #f0f0f0;
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.leaflet-contextmenu a.leaflet-contextmenu-item-disabled.over {
+ background-color: inherit;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+}
+
+.leaflet-contextmenu-icon {
+ margin: 2px 8px 0 0;
+ width: 16px;
+ height: 16px;
+ float: left;
+ border: 0;
+}
+
+.leaflet-contextmenu-separator {
+ border-bottom: 1px solid #ccc;
+ margin: 5px 0;
+}
--- /dev/null
+/*
+ Leaflet.contextmenu, a context menu for Leaflet.
+ (c) 2015, Adam Ratcliffe, GeoSmart Maps Limited
+
+ @preserve
+*/
+
+(function(factory) {
+ // Packaging/modules magic dance
+ var L;
+ if (typeof define === 'function' && define.amd) {
+ // AMD
+ define(['leaflet'], factory);
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
+ // Node/CommonJS
+ L = require('leaflet');
+ module.exports = factory(L);
+ } else {
+ // Browser globals
+ if (typeof window.L === 'undefined') {
+ throw new Error('Leaflet must be loaded first');
+ }
+ factory(window.L);
+ }
+})(function(L) {
+L.Map.mergeOptions({
+ contextmenuItems: []
+});
+
+L.Map.ContextMenu = L.Handler.extend({
+ _touchstart: L.Browser.msPointer ? 'MSPointerDown' : L.Browser.pointer ? 'pointerdown' : 'touchstart',
+
+ statics: {
+ BASE_CLS: 'leaflet-contextmenu'
+ },
+
+ initialize: function (map) {
+ L.Handler.prototype.initialize.call(this, map);
+
+ this._items = [];
+ this._visible = false;
+
+ var container = this._container = L.DomUtil.create('div', L.Map.ContextMenu.BASE_CLS, map._container);
+ container.style.zIndex = 10000;
+ container.style.position = 'absolute';
+
+ if (map.options.contextmenuWidth) {
+ container.style.width = map.options.contextmenuWidth + 'px';
+ }
+
+ this._createItems();
+
+ L.DomEvent
+ .on(container, 'click', L.DomEvent.stop)
+ .on(container, 'mousedown', L.DomEvent.stop)
+ .on(container, 'dblclick', L.DomEvent.stop)
+ .on(container, 'contextmenu', L.DomEvent.stop);
+ },
+
+ addHooks: function () {
+ var container = this._map.getContainer();
+
+ L.DomEvent
+ .on(container, 'mouseleave', this._hide, this)
+ .on(document, 'keydown', this._onKeyDown, this);
+
+ if (L.Browser.touch) {
+ L.DomEvent.on(document, this._touchstart, this._hide, this);
+ }
+
+ this._map.on({
+ contextmenu: this._show,
+ mousedown: this._hide,
+ movestart: this._hide,
+ zoomstart: this._hide
+ }, this);
+ },
+
+ removeHooks: function () {
+ var container = this._map.getContainer();
+
+ L.DomEvent
+ .off(container, 'mouseleave', this._hide, this)
+ .off(document, 'keydown', this._onKeyDown, this);
+
+ if (L.Browser.touch) {
+ L.DomEvent.off(document, this._touchstart, this._hide, this);
+ }
+
+ this._map.off({
+ contextmenu: this._show,
+ mousedown: this._hide,
+ movestart: this._hide,
+ zoomstart: this._hide
+ }, this);
+ },
+
+ showAt: function (point, data) {
+ if (point instanceof L.LatLng) {
+ point = this._map.latLngToContainerPoint(point);
+ }
+ this._showAtPoint(point, data);
+ },
+
+ hide: function () {
+ this._hide();
+ },
+
+ addItem: function (options) {
+ return this.insertItem(options);
+ },
+
+ insertItem: function (options, index) {
+ index = index !== undefined ? index: this._items.length;
+
+ var item = this._createItem(this._container, options, index);
+
+ this._items.push(item);
+
+ this._sizeChanged = true;
+
+ this._map.fire('contextmenu.additem', {
+ contextmenu: this,
+ el: item.el,
+ index: index
+ });
+
+ return item.el;
+ },
+
+ removeItem: function (item) {
+ var container = this._container;
+
+ if (!isNaN(item)) {
+ item = container.children[item];
+ }
+
+ if (item) {
+ this._removeItem(L.Util.stamp(item));
+
+ this._sizeChanged = true;
+
+ this._map.fire('contextmenu.removeitem', {
+ contextmenu: this,
+ el: item
+ });
+ }
+ },
+
+ removeAllItems: function () {
+ var item;
+
+ while (this._container.children.length) {
+ item = this._container.children[0];
+ this._removeItem(L.Util.stamp(item));
+ }
+ },
+
+ hideAllItems: function () {
+ var item, i, l;
+
+ for (i = 0, l = this._items.length; i < l; i++) {
+ item = this._items[i];
+ item.el.style.display = 'none';
+ }
+ },
+
+ showAllItems: function () {
+ var item, i, l;
+
+ for (i = 0, l = this._items.length; i < l; i++) {
+ item = this._items[i];
+ item.el.style.display = '';
+ }
+ },
+
+ setDisabled: function (item, disabled) {
+ var container = this._container,
+ itemCls = L.Map.ContextMenu.BASE_CLS + '-item';
+
+ if (!isNaN(item)) {
+ item = container.children[item];
+ }
+
+ if (item && L.DomUtil.hasClass(item, itemCls)) {
+ if (disabled) {
+ L.DomUtil.addClass(item, itemCls + '-disabled');
+ this._map.fire('contextmenu.disableitem', {
+ contextmenu: this,
+ el: item
+ });
+ } else {
+ L.DomUtil.removeClass(item, itemCls + '-disabled');
+ this._map.fire('contextmenu.enableitem', {
+ contextmenu: this,
+ el: item
+ });
+ }
+ }
+ },
+
+ isVisible: function () {
+ return this._visible;
+ },
+
+ _createItems: function () {
+ var itemOptions = this._map.options.contextmenuItems,
+ item,
+ i, l;
+
+ for (i = 0, l = itemOptions.length; i < l; i++) {
+ this._items.push(this._createItem(this._container, itemOptions[i]));
+ }
+ },
+
+ _createItem: function (container, options, index) {
+ if (options.separator || options === '-') {
+ return this._createSeparator(container, index);
+ }
+
+ var itemCls = L.Map.ContextMenu.BASE_CLS + '-item',
+ cls = options.disabled ? (itemCls + ' ' + itemCls + '-disabled') : itemCls,
+ el = this._insertElementAt('a', cls, container, index),
+ callback = this._createEventHandler(el, options.callback, options.context, options.hideOnSelect),
+ icon = this._getIcon(options),
+ iconCls = this._getIconCls(options),
+ html = '';
+
+ if (icon) {
+ html = '<img class="' + L.Map.ContextMenu.BASE_CLS + '-icon" src="' + icon + '"/>';
+ } else if (iconCls) {
+ html = '<span class="' + L.Map.ContextMenu.BASE_CLS + '-icon ' + iconCls + '"></span>';
+ }
+
+ el.innerHTML = html + options.text;
+ el.href = '#';
+
+ L.DomEvent
+ .on(el, 'mouseover', this._onItemMouseOver, this)
+ .on(el, 'mouseout', this._onItemMouseOut, this)
+ .on(el, 'mousedown', L.DomEvent.stopPropagation)
+ .on(el, 'click', callback);
+
+ if (L.Browser.touch) {
+ L.DomEvent.on(el, this._touchstart, L.DomEvent.stopPropagation);
+ }
+
+ // Devices without a mouse fire "mouseover" on tap, but never “mouseout"
+ if (!L.Browser.pointer) {
+ L.DomEvent.on(el, 'click', this._onItemMouseOut, this);
+ }
+
+ return {
+ id: L.Util.stamp(el),
+ el: el,
+ callback: callback
+ };
+ },
+
+ _removeItem: function (id) {
+ var item,
+ el,
+ i, l, callback;
+
+ for (i = 0, l = this._items.length; i < l; i++) {
+ item = this._items[i];
+
+ if (item.id === id) {
+ el = item.el;
+ callback = item.callback;
+
+ if (callback) {
+ L.DomEvent
+ .off(el, 'mouseover', this._onItemMouseOver, this)
+ .off(el, 'mouseover', this._onItemMouseOut, this)
+ .off(el, 'mousedown', L.DomEvent.stopPropagation)
+ .off(el, 'click', callback);
+
+ if (L.Browser.touch) {
+ L.DomEvent.off(el, this._touchstart, L.DomEvent.stopPropagation);
+ }
+
+ if (!L.Browser.pointer) {
+ L.DomEvent.on(el, 'click', this._onItemMouseOut, this);
+ }
+ }
+
+ this._container.removeChild(el);
+ this._items.splice(i, 1);
+
+ return item;
+ }
+ }
+ return null;
+ },
+
+ _createSeparator: function (container, index) {
+ var el = this._insertElementAt('div', L.Map.ContextMenu.BASE_CLS + '-separator', container, index);
+
+ return {
+ id: L.Util.stamp(el),
+ el: el
+ };
+ },
+
+ _createEventHandler: function (el, func, context, hideOnSelect) {
+ var me = this,
+ map = this._map,
+ disabledCls = L.Map.ContextMenu.BASE_CLS + '-item-disabled',
+ hideOnSelect = (hideOnSelect !== undefined) ? hideOnSelect : true;
+
+ return function (e) {
+ if (L.DomUtil.hasClass(el, disabledCls)) {
+ return;
+ }
+
+ if (hideOnSelect) {
+ me._hide();
+ }
+
+ if (func) {
+ func.call(context || map, me._showLocation);
+ }
+
+ me._map.fire('contextmenu:select', {
+ contextmenu: me,
+ el: el
+ });
+ };
+ },
+
+ _insertElementAt: function (tagName, className, container, index) {
+ var refEl,
+ el = document.createElement(tagName);
+
+ el.className = className;
+
+ if (index !== undefined) {
+ refEl = container.children[index];
+ }
+
+ if (refEl) {
+ container.insertBefore(el, refEl);
+ } else {
+ container.appendChild(el);
+ }
+
+ return el;
+ },
+
+ _show: function (e) {
+ this._showAtPoint(e.containerPoint, e);
+ },
+
+ _showAtPoint: function (pt, data) {
+ if (this._items.length) {
+ var map = this._map,
+ layerPoint = map.containerPointToLayerPoint(pt),
+ latlng = map.layerPointToLatLng(layerPoint),
+ event = L.extend(data || {}, {contextmenu: this});
+
+ this._showLocation = {
+ latlng: latlng,
+ layerPoint: layerPoint,
+ containerPoint: pt
+ };
+
+ if (data && data.relatedTarget){
+ this._showLocation.relatedTarget = data.relatedTarget;
+ }
+
+ this._setPosition(pt);
+
+ if (!this._visible) {
+ this._container.style.display = 'block';
+ this._visible = true;
+ }
+
+ this._map.fire('contextmenu.show', event);
+ }
+ },
+
+ _hide: function () {
+ if (this._visible) {
+ this._visible = false;
+ this._container.style.display = 'none';
+ this._map.fire('contextmenu.hide', {contextmenu: this});
+ }
+ },
+
+ _getIcon: function (options) {
+ return L.Browser.retina && options.retinaIcon || options.icon;
+ },
+
+ _getIconCls: function (options) {
+ return L.Browser.retina && options.retinaIconCls || options.iconCls;
+ },
+
+ _setPosition: function (pt) {
+ var mapSize = this._map.getSize(),
+ container = this._container,
+ containerSize = this._getElementSize(container),
+ anchor;
+
+ if (this._map.options.contextmenuAnchor) {
+ anchor = L.point(this._map.options.contextmenuAnchor);
+ pt = pt.add(anchor);
+ }
+
+ container._leaflet_pos = pt;
+
+ if (pt.x + containerSize.x > mapSize.x) {
+ container.style.left = 'auto';
+ container.style.right = Math.min(Math.max(mapSize.x - pt.x, 0), mapSize.x - containerSize.x - 1) + 'px';
+ } else {
+ container.style.left = Math.max(pt.x, 0) + 'px';
+ container.style.right = 'auto';
+ }
+
+ if (pt.y + containerSize.y > mapSize.y) {
+ container.style.top = 'auto';
+ container.style.bottom = Math.min(Math.max(mapSize.y - pt.y, 0), mapSize.y - containerSize.y - 1) + 'px';
+ } else {
+ container.style.top = Math.max(pt.y, 0) + 'px';
+ container.style.bottom = 'auto';
+ }
+ },
+
+ _getElementSize: function (el) {
+ var size = this._size,
+ initialDisplay = el.style.display;
+
+ if (!size || this._sizeChanged) {
+ size = {};
+
+ el.style.left = '-999999px';
+ el.style.right = 'auto';
+ el.style.display = 'block';
+
+ size.x = el.offsetWidth;
+ size.y = el.offsetHeight;
+
+ el.style.left = 'auto';
+ el.style.display = initialDisplay;
+
+ this._sizeChanged = false;
+ }
+
+ return size;
+ },
+
+ _onKeyDown: function (e) {
+ var key = e.keyCode;
+
+ // If ESC pressed and context menu is visible hide it
+ if (key === 27) {
+ this._hide();
+ }
+ },
+
+ _onItemMouseOver: function (e) {
+ L.DomUtil.addClass(e.target || e.srcElement, 'over');
+ },
+
+ _onItemMouseOut: function (e) {
+ L.DomUtil.removeClass(e.target || e.srcElement, 'over');
+ }
+});
+
+L.Map.addInitHook('addHandler', 'contextmenu', L.Map.ContextMenu);
+L.Mixin.ContextMenu = {
+ bindContextMenu: function (options) {
+ L.setOptions(this, options);
+ this._initContextMenu();
+
+ return this;
+ },
+
+ unbindContextMenu: function (){
+ this.off('contextmenu', this._showContextMenu, this);
+
+ return this;
+ },
+
+ addContextMenuItem: function (item) {
+ this.options.contextmenuItems.push(item);
+ },
+
+ removeContextMenuItemWithIndex: function (index) {
+ var items = [];
+ for (var i = 0; i < this.options.contextmenuItems.length; i++) {
+ if (this.options.contextmenuItems[i].index == index){
+ items.push(i);
+ }
+ }
+ var elem = items.pop();
+ while (elem !== undefined) {
+ this.options.contextmenuItems.splice(elem,1);
+ elem = items.pop();
+ }
+ },
+
+ replaceContextMenuItem: function (item) {
+ this.removeContextMenuItemWithIndex(item.index);
+ this.addContextMenuItem(item);
+ },
+
+ _initContextMenu: function () {
+ this._items = [];
+
+ this.on('contextmenu', this._showContextMenu, this);
+ },
+
+ _showContextMenu: function (e) {
+ var itemOptions,
+ data, pt, i, l;
+
+ if (this._map.contextmenu) {
+ data = L.extend({relatedTarget: this}, e);
+
+ pt = this._map.mouseEventToContainerPoint(e.originalEvent);
+
+ if (!this.options.contextmenuInheritItems) {
+ this._map.contextmenu.hideAllItems();
+ }
+
+ for (i = 0, l = this.options.contextmenuItems.length; i < l; i++) {
+ itemOptions = this.options.contextmenuItems[i];
+ this._items.push(this._map.contextmenu.insertItem(itemOptions, itemOptions.index));
+ }
+
+ this._map.once('contextmenu.hide', this._hideContextMenu, this);
+
+ this._map.contextmenu.showAt(pt, data);
+ }
+ },
+
+ _hideContextMenu: function () {
+ var i, l;
+
+ for (i = 0, l = this._items.length; i < l; i++) {
+ this._map.contextmenu.removeItem(this._items[i]);
+ }
+ this._items.length = 0;
+
+ if (!this.options.contextmenuInheritItems) {
+ this._map.contextmenu.showAllItems();
+ }
+ }
+};
+
+var classes = [L.Marker, L.Path],
+ defaultOptions = {
+ contextmenu: false,
+ contextmenuItems: [],
+ contextmenuInheritItems: true
+ },
+ cls, i, l;
+
+for (i = 0, l = classes.length; i < l; i++) {
+ cls = classes[i];
+
+ // L.Class should probably provide an empty options hash, as it does not test
+ // for it here and add if needed
+ if (!cls.prototype.options) {
+ cls.prototype.options = defaultOptions;
+ } else {
+ cls.mergeOptions(defaultOptions);
+ }
+
+ cls.addInitHook(function () {
+ if (this.options.contextmenu) {
+ this._initContextMenu();
+ }
+ });
+
+ cls.include(L.Mixin.ContextMenu);
+}
+return L.Map.ContextMenu;
+});