gem 'http_accept_language', '>= 1.0.2'
gem 'paperclip', '~> 2.0'
gem 'deadlock_retry', '>= 1.2.0'
+ gem 'i18n-js', '>= 3.0.0.rc2'
+gem 'jsonify-rails'
# We need ruby-openid 2.2.0 or later for ruby 1.9 support
gem 'ruby-openid', '>= 2.2.0'
- # Browser detection support
- gem 'browser'
-
# Markdown formatting support
gem 'redcarpet'
multi_json (~> 1.0)
arel (3.0.2)
bigdecimal (1.1.0)
- browser (0.1.4)
-- builder (3.0.0)
-- cocaine (0.2.1)
++ builder (3.0.3)
++ cocaine (0.3.0)
coffee-rails (3.2.2)
coffee-script (>= 2.2.0)
railties (~> 3.2.0)
http_accept_language (1.0.2)
httpauth (0.1)
httpclient (2.2.7)
-- i18n (0.6.0)
++ i18n (0.6.1)
+ i18n-js (3.0.0.rc2)
+ i18n
iconv (0.1)
journey (1.0.4)
-- jquery-rails (2.1.1)
++ jquery-rails (2.1.2)
railties (>= 3.1.0, < 5.0)
thor (~> 0.14)
json (1.7.5)
+ jsonify (0.3.1)
+ multi_json (~> 1.0)
+ jsonify-rails (0.3.2)
+ actionpack
+ jsonify (< 0.4.0)
jwt (0.1.5)
multi_json (>= 1.0)
libv8 (3.3.10.4)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
-- memcached (1.4.3)
++ memcached (1.4.5)
mime-types (1.19)
-- minitest (3.3.0)
++ minitest (3.4.0)
multi_json (1.3.6)
multipart-post (1.1.5)
nokogiri (1.5.5)
-- oauth (0.4.6)
++ oauth (0.4.7)
oauth-plugin (0.4.1)
multi_json
oauth (~> 0.4.4)
activesupport (>= 2.3.2)
cocaine (>= 0.0.2)
mime-types
-- pg (0.14.0)
++ pg (0.14.1)
polyglot (0.3.3)
rack (1.4.1)
rack-cache (1.2)
activesupport (= 3.2.8)
bundler (~> 1.0)
railties (= 3.2.8)
-- rails-i18n (0.6.5)
++ rails-i18n (0.6.6)
i18n (~> 0.5)
railties (3.2.8)
actionpack (= 3.2.8)
libv8 (~> 3.3.10)
thor (0.16.0)
tilt (1.3.3)
-- timecop (0.4.5)
++ timecop (0.5.1)
treetop (1.4.10)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.33)
-- uglifier (1.2.7)
++ uglifier (1.3.0)
execjs (>= 0.3.0)
-- multi_json (~> 1.3)
++ multi_json (~> 1.0, >= 1.0.2)
validates_email_format_of (1.5.3)
PLATFORMS
DEPENDENCIES
SystemTimer (>= 1.1.3)
bigdecimal
- browser
coffee-rails (~> 3.2.1)
composite_primary_keys (>= 5.0.8)
deadlock_retry (>= 1.2.0)
htmlentities
http_accept_language (>= 1.0.2)
httpclient
+ i18n-js (>= 3.0.0.rc2)
iconv
jquery-rails
+ jsonify-rails
libxml-ruby (>= 2.0.5)
memcached (>= 1.4.1)
minitest
//= require jquery_ujs
//= require jquery.autogrowtextarea
//= require jquery.timers
+ //= require jquery.cookie
+ //= require augment
+ //= require openlayers
+ //= require i18n/translations
+ //= require globals
+ //= require params
+ //= require piwik
+ //= require browse
+ //= require export
+ //= require map
+ //= require key
+ //= require menu
+ //= require sidebar
+ //= require richtext
+ //= require resize
++//= require notes
+
+ function zoomPrecision(zoom) {
+ var decimals = Math.pow(10, Math.floor(zoom/3));
+ return function(x) {
+ return Math.round(x * decimals) / decimals;
+ };
+ }
/*
* Called as the user scrolls/zooms around to aniplate hrefs of the
* view tab and various other links
*/
function updatelinks(lon,lat,zoom,layers,minlon,minlat,maxlon,maxlat,objtype,objid) {
- var decimals = Math.pow(10, Math.floor(zoom/3));
+ var toPrecision = zoomPrecision(zoom);
var node;
- lat = Math.round(lat * decimals) / decimals;
- lon = Math.round(lon * decimals) / decimals;
+ lat = toPrecision(lat);
+ lon = toPrecision(lon);
if (minlon) {
- minlon = Math.round(minlon * decimals) / decimals;
- minlat = Math.round(minlat * decimals) / decimals;
- maxlon = Math.round(maxlon * decimals) / decimals;
- maxlat = Math.round(maxlat * decimals) / decimals;
+ minlon = toPrecision(minlon);
+ minlat = toPrecision(minlat);
+ maxlon = toPrecision(maxlon);
+ maxlat = toPrecision(maxlat);
}
$(".geolink").each(function (index, link) {
args[objtype] = objid;
}
- var classes = $(link).attr("class").split(" ");
-
- $(classes).each(function (index, classname) {
- if (match = classname.match(/^minzoom([0-9]+)$/)) {
- var minzoom = match[1];
+ var minzoom = $(link).data("minzoom");
+ if (minzoom) {
var name = link.id.replace(/anchor$/, "");
$(link).off("click.minzoom");
if (zoom >= minzoom) {
- $(link).attr("title", i18n("javascripts.site." + name + "_tooltip"));
+ $(link).attr("title", I18n.t("javascripts.site." + name + "_tooltip"));
$(link).removeClass("disabled");
} else {
- $(link).on("click.minzoom", function () { alert(i18n("javascripts.site." + name + "_zoom_alert")); return false; });
- $(link).attr("title", i18n("javascripts.site." + name + "_disabled_tooltip"));
+ $(link).on("click.minzoom", function () { alert(I18n.t("javascripts.site." + name + "_zoom_alert")); return false; });
+ $(link).attr("title", I18n.t("javascripts.site." + name + "_disabled_tooltip"));
$(link).addClass("disabled");
}
- }
- });
+ }
link.href = setArgs(link.href, args);
});
return url.replace(/\?.*$/, "") + "?" + queryitems.join("&");
}
- /*
- * Called to interpolate JavaScript variables in strings using a
- * similar syntax to rails I18n string interpolation - the only
- * difference is that [[foo]] is the placeholder syntax instead
- * of {{foo}} which allows the same string to be processed by both
- * rails and then later by javascript.
- */
- function i18n(string, keys) {
- string = i18n_strings[string] || string;
-
- for (var key in keys) {
- var re_key = '\\[\\[' + key + '\\]\\]';
- var re = new RegExp(re_key, "g");
-
- string = string.replace(re, keys[key]);
- }
-
- return string;
- }
-
/*
* Called to interlace the bits in x and y, making a Morton code.
*/
}
/*
- * Click handler to switch a rich text control to preview mode
+ * Forms which have been cached by rails may have he wrong
+ * authenticity token, so patch up any forms with the correct
+ * token taken from the page header.
*/
- function previewRichtext(event) {
- var editor = $(this).parents(".richtext_container").find("textarea");
- var preview = $(this).parents(".richtext_container").find(".richtext_preview");
- var width = editor.outerWidth() - preview.outerWidth() + preview.innerWidth();
- var minHeight = editor.outerHeight() - preview.outerHeight() + preview.innerHeight();
-
- if (preview.contents().length == 0) {
- preview.oneTime(500, "loading", function () {
- preview.addClass("loading");
- });
-
- preview.load(editor.attr("data-preview-url"), { text: editor.val() }, function () {
- preview.stopTime("loading");
- preview.removeClass("loading");
- });
- }
-
- editor.hide();
- preview.width(width);
- preview.css("min-height", minHeight + "px");
- preview.show();
-
- $(this).siblings(".richtext_doedit").prop("disabled", false);
- $(this).prop("disabled", true);
-
- event.preventDefault();
- }
-
- /*
- * Click handler to switch a rich text control to edit mode
- */
- function editRichtext(event) {
- var editor = $(this).parents(".richtext_container").find("textarea");
- var preview = $(this).parents(".richtext_container").find(".richtext_preview");
-
- preview.hide();
- editor.show();
-
- $(this).siblings(".richtext_dopreview").prop("disabled", false);
- $(this).prop("disabled", true);
-
- event.preventDefault();
- }
+ $(document).ready(function () {
+ var auth_token = $("meta[name=csrf-token]").attr("content");
+ $("form input[name=authenticity_token]").val(auth_token);
+ });
/*
- * Setup any rich text controls
+ * Enable auto expansion for all text areas
*/
$(document).ready(function () {
- $(".richtext_preview").hide();
- $(".richtext_content textarea").change(function () {
- $(this).parents(".richtext_container").find(".richtext_preview").empty();
- });
- $(".richtext_doedit").prop("disabled", true);
- $(".richtext_dopreview").prop("disabled", false);
- $(".richtext_doedit").click(editRichtext);
- $(".richtext_dopreview").click(previewRichtext);
+ $("textarea").autoGrow();
});
margin: 25px 0 5px 0;
}
+ #logo img {
+ border: 0px;
+ }
+
#logo h1 {
font-size: 18px;
line-height: 20px;
display: none;
}
+ #small-title img {
+ border: 0px;
+ }
+
/* Rules for the introductory text displayed in the left sidebar to new users */
.sidebar-copy {
padding: 5px 10px;
text-decoration: none;
color: #333;
+ -webkit-transition: color 200ms ease-in;
+ -moz-transition: color 200ms ease-in;
+ -o-transition: color 200ms ease-in;
+ transition: color 200ms ease-in;
}
- #tabnav a:link.active, #tabnav a:visited.active {
+ body.site-index #tabnav a#viewanchor,
+ body.site-edit #tabnav a#editanchor,
+ body.changeset-list #tabnav a#historyanchor,
+ body.site-export #tabnav a#exportanchor {
border-bottom: 1px solid #aaa;
background: #9ed485;
color: #000;
#map {
margin: 0px;
+ border: 0px;
padding: 0px;
}
padding-right: 5px;
}
- #mapkey .mapkey-table-key {
+ #mapkey .mapkey-table-key img {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
}
#mapkey .mapkey-table-value {
bottom: 0px;
}
- #content.site_index,
- #content.site_edit,
- #content.site_export {
+ .site-index #content,
+ .site-edit #content,
+ .site-export #content {
border: 0px;
padding: 0px;
}
/* Rules for the home page */
- .site_index #map {
+ .site-index #map {
position: absolute;
top: 0px;
bottom: 0px;
right: 0px;
}
- .site_export #map {
+ .site-export #map {
position: absolute;
top: 0px;
bottom: 0px;
/* Rules for the edit page */
- .site_edit #map {
+ .site-edit #map {
position: absolute;
top: 0px;
bottom: 0px;
left: 0px;
right: 0px;
+ overflow: hidden;
}
/* Rules for the changeset list shown by the history tab etc */
white-space: nowrap;
}
+td.browse_comments {
+ padding: 0px;
+}
+
+td.browse_comments table {
+ border-collapse: collapse;
+}
+
+td.browse_comments table td {
+ padding-bottom: 10px;
+}
+
+td.browse_comments table td span.by {
+ font-size: small;
+ color: #999999;
+}
+
#browse_map {
width: 250px;
}
/* Rules for the user view */
- .user_view .user_map {
+ .user-view .user_map {
position: relative;
width: 400px;
height: 400px;
border: 1px solid #ccc;
}
- .user_view .user_map p#no_home_location {
+ .user-view .user_map p#no_home_location {
position: absolute;
top: 0px;
bottom: 0px;
class BrowseController < ApplicationController
- layout 'site'
+ layout 'site', :except => [ :start ]
before_filter :authorize_web
before_filter :set_locale
around_filter :web_timeout, :except => [:start]
def start
- @max_features = case
- when browser.ie? && browser.version.to_i < 8 then 100
- when browser.ie? && browser.version.to_i < 9 then 500
- else 2000
- end
end
def relation
rescue ActiveRecord::RecordNotFound
render :action => "not_found", :status => :not_found
end
+
+ def note
+ @type = "note"
+ @note = Note.find(params[:id])
+ @next = Note.find(:first, :order => "id ASC", :conditions => [ "status != 'hidden' AND id > :id", { :id => @note.id }] )
+ @prev = Note.find(:first, :order => "id DESC", :conditions => [ "status != 'hidden' AND id < :id", { :id => @note.id }] )
+ rescue ActiveRecord::RecordNotFound
+ render :action => "not_found", :status => :not_found
+ end
end
end
end
- def html_escape_unicode(text)
- chars = ActiveSupport::Multibyte::Unicode.u_unpack(text).map do |c|
- c < 127 ? c.chr : "&##{c.to_s};"
- end
-
- return chars.join("")
- end
-
def rss_link_to(*args)
return link_to(image_tag("RSS.gif", :size => "16x16", :border => 0), Hash[*args], { :class => "rsssmall" });
end
return link_to(image_tag("RSS.gif", :size => "16x16", :border => 0), Hash[*args], { :class => "rsssmall" });
end
- def javascript_strings
- js = ""
-
- js << "<script type='text/javascript'>\n"
- js << "i18n_strings = new Array();\n"
- js << javascript_strings_for_key("javascripts")
- js << "</script>\n"
-
- return raw(js)
- end
-
def style_rules
css = ""
end
end
end
-
- private
-
- def javascript_strings_for_key(key)
- js = ""
- value = I18n.t(key, :locale => "en")
-
- if value.is_a?(String)
- js << "i18n_strings['#{key}'] = '" << escape_javascript(t(key)) << "';\n"
- else
- value.each_key do |k|
- js << javascript_strings_for_key("#{key}.#{k}")
- end
- end
-
- return js
- end
+
+ def friendly_date(date)
+ content_tag(:span, time_ago_in_words(date), :title => l(date, :format => :friendly))
+ end
+
+ def note_author(object, link_options = {})
+ if object.author.nil?
+ h(object.author_name)
+ else
+ link_to h(object.author_name), link_options.merge({:controller => "user", :action => "view", :display_name => object.author_name})
+ end
+ end
end
has_many :tokens, :class_name => "UserToken"
has_many :preferences, :class_name => "UserPreference"
has_many :changesets, :order => 'created_at DESC'
+ has_many :note_comments, :foreign_key => :author_id
+ has_many :notes, :through => :note_comments
has_many :client_applications
has_many :oauth_tokens, :class_name => "OauthToken", :order => "authorized_at desc", :include => [:client_application]
self.image = nil
self.email_valid = false
self.new_email = nil
+ self.openid_url = nil
self.status = "deleted"
self.save
end
- <%= javascript_include_tag 'openlayers.js' %>
- <%= javascript_include_tag 'map.js' %>
-
<iframe id="linkloader" style="display: none">
</iframe>
<div id="browse_map">
- <% if map.instance_of? Changeset or (map.instance_of? Node and map.version > 1) or map.visible %>
+ <% if map.instance_of? Changeset or (map.instance_of? Node and map.version > 1) or map.visible? %>
<div id="small_map">
</div>
<span id="loading"><%= t 'browse.map.loading' %></span>
+ <% if map.instance_of? Note -%>
+ <%= link_to(t("browse.map.larger.area"), { :controller => :site, :action => :index, :notes => "yes" }, { :id => "area_larger_map", :class => "geolink bbox" }) %>
+ <% else -%>
<%= link_to(t("browse.map.larger.area"), { :controller => :site, :action => :index, :box => "yes" }, { :id => "area_larger_map", :class => "geolink bbox" }) %>
+ <% end -%>
<br />
<%= link_to(h(t("browse.map.edit.area")) + content_tag(:span, "â–¾", :class => "menuicon"), { :controller => :site, :action => :edit }, { :id => "area_edit", :class => "geolink bbox" }) %>
- <% unless map.instance_of? Changeset %>
+ <% unless map.instance_of? Changeset or map.instance_of? Note %>
<br />
<%= link_to(t("browse.map.larger." + map.class.to_s.downcase), { :controller => :site, :action => :index }, { :id => "object_larger_map", :class => "geolink object" }) %>
<br />
</ul>
</div>
-<% if map.instance_of? Changeset or (map.instance_of? Node and map.version > 1) or map.visible %>
+<% if map.instance_of? Changeset or (map.instance_of? Node and map.version > 1) or map.visible? %>
<script type="text/javascript">
- OpenLayers.Lang.setCode("<%= I18n.locale.to_s %>");
-
function remoteEditHandler(event, bbox, select) {
var left = bbox.left - 0.0001;
var top = bbox.top + 0.0001;
});
<% end -%>
- updatelinks(centre.lon, centre.lat, 16, null, minlon, minlat, maxlon, maxlat);
- <% else -%>
+ updatelinks(centre.lon, centre.lat, 16, null, minlon, minlat, maxlon, maxlat)
+ <% elsif map.instance_of? Note %>
+ var centre = new OpenLayers.LonLat(<%= map.lon %>, <%= map.lat %>);
+
+ setMapCenter(centre, 16);
+ addMarkerToMap(centre);
+
+ var bbox = getMapExtent();
+
+ $("#loading").hide();
+ $("#browse_map .geolink").show();
+
+ $("#remote_area_edit").click(function (event) {
+ return remoteEditHandler(event, bbox);
+ });
+
+ <% if preferred_editor == "remote" -%>
+ $("#area_edit").click(function (event) {
+ return remoteEditHandler(event, bbox);
+ });
+ <% end -%>
+
+ updatelinks(centre.lon, centre.lat, 16, null, bbox.left, bbox.bottom, bbox.right, bbox.top)
+ <% else %>
var obj_type = "<%= map.class.name.downcase %>";
var obj_id = <%= map.id %>;
var obj_version = <%= map.version %>;
<% unless STATUS == :api_offline or STATUS == :database_offline -%>
<% content_for :editmenu do -%>
- <li><%= link_to t("browse.start_rjs.data_layer_name"), "#", :id => "show_data" %></li>
+ <li><%= link_to t("browse.start_rjs.notes_layer_name"), "#", :id => "show_notes" %></li>
+ <li><%= link_to t("browse.start_rjs.data_layer_name"), { :controller => :browse, :action => :start }, :id => "show_data" %></li>
<% end -%>
<% end -%>
- <%= render :partial => 'sidebar', :locals => { :onopen => "resizeMap();", :onclose => "resizeMap();" } %>
+ <%= render :partial => 'sidebar' %>
<%= render :partial => 'key' %>
<%= render :partial => 'search' %>
<div id="permalink">
<a href="/" id="permalinkanchor" class="geolink llz layers object"><%= t 'site.index.permalink' %></a>
<a href="/" id="shortlinkanchor"><%= t 'site.index.shortlink' %></a>
+ <a href="#" id="createnoteanchor">Report a problem</a>
</div>
</div>
<td class="attribution_project"><%= t'site.index.license.project_url' %></td>
</tr>
<tr>
- <td colspan="2" class="attribution_notice"><%=
- t'site.index.license.notice',
- :license_name => t('site.index.license.license_name'),
- :project_name => t('site.index.license.project_name')
- %></td>
+ <td colspan="2" class="attribution_notice"><%= t'site.index.license.copyright' %></td>
</tr>
</table>
</div>
- <%
- if params[:mlon] and params[:mlat]
- marker = true
- mlon = params[:mlon].to_f
- mlat = params[:mlat].to_f
- end
-
- if params[:node] or params[:way] or params[:relation]
- object = true
- object_zoom = true
-
- if params[:node]
- object_type = 'node'
- object_id = params[:node].to_i
- elsif params[:way]
- object_type = 'way'
- object_id = params[:way].to_i
- elsif params[:relation]
- object_type = 'relation'
- object_id = params[:relation].to_i
- end
- end
-
- # Decide on a lat lon to initialise the map with. Various ways of doing this
- if params[:bbox]
- bbox = true
- minlon, minlat, maxlon, maxlat = params[:bbox].split(",").collect { |c| c.to_f }
- layers = params[:layers]
- box = true if params[:box] == "yes"
- object_zoom = false
- elsif params[:minlon] and params[:minlat] and params[:maxlon] and params[:maxlat]
- bbox = true
- minlon = params[:minlon].to_f
- minlat = params[:minlat].to_f
- maxlon = params[:maxlon].to_f
- maxlat = params[:maxlat].to_f
- layers = params[:layers]
- box = true if params[:box]=="yes"
- object_zoom = false
- elsif params[:lon] and params[:lat]
- lon = params[:lon].to_f
- lat = params[:lat].to_f
- zoom = params.fetch(:zoom, 5).to_i
- layers = params[:layers]
- object_zoom = false
- elsif params[:mlon] and params[:mlat]
- lon = params[:mlon].to_f
- lat = params[:mlat].to_f
- zoom = params.fetch(:zoom, 12).to_i
- layers = params[:layers]
- object_zoom = false
- elsif cookies.key?("_osm_location")
- lon,lat,zoom,layers = cookies["_osm_location"].split("|")
- elsif @user and !@user.home_lon.nil? and !@user.home_lat.nil?
- lon = @user.home_lon
- lat = @user.home_lat
- zoom = 10
- else
- unless STATUS == :database_readonly or STATUS == :database_offline
- session[:location] = OSM::IPLocation(request.env['REMOTE_ADDR']) unless session[:location]
- end
-
- if session[:location]
- bbox = true
- minlon = session[:location][:minlon]
- minlat = session[:location][:minlat]
- maxlon = session[:location][:maxlon]
- maxlat = session[:location][:maxlat]
- else
- lon = -0.1
- lat = 51.5
- zoom = params.fetch(:zoom, 5).to_i
- end
-
- layers = params[:layers]
- end
- %>
-
- <%= javascript_include_tag 'openlayers.js' %>
- <%= javascript_include_tag 'map.js' %>
- <%= javascript_include_tag 'notes.js' %>
-
- <%= render :partial => 'resize' %>
-
<script type="text/javascript">
var marker;
var map;
-
- OpenLayers.Lang.setCode("<%= I18n.locale.to_s %>");
+ var params = OSM.mapParams();
+ <% if @user %>
+ var loginName = "<%= @user.display_name %>"
+ <% end %>
+
function mapInit(){
map = createMap("map");
- <% unless object_zoom %>
- <% if bbox %>
- var bbox = new OpenLayers.Bounds(<%= minlon %>, <%= minlat %>, <%= maxlon %>, <%= maxlat %>);
+ <% unless STATUS == :api_offline or STATUS == :database_offline %>
+ map.dataLayer = new OpenLayers.Layer("<%= I18n.t 'browse.start_rjs.data_layer_name' %>", {
+ visibility: false,
+ displayInLayerSwitcher: false
+ });
+ map.addLayer(map.dataLayer);
+
+ map.noteLayer = addNoteLayer(map, "<%= notes_url :format => 'json' %>", $("#createnoteanchor"), 11);
+
+ <% if params[:notes] == "yes" -%>
+ map.noteLayer.setVisibility(true);
+ <% end -%>
+ <% end %>
+
+ if (!params.object_zoom) {
+ if (params.bbox) {
+ var bbox = new OpenLayers.Bounds(params.minlon, params.minlat, params.maxlon, params.maxlat);
map.zoomToExtent(proj(bbox));
- <% if box %>
+ if (params.box) {
$(window).load(function() { addBoxToMap(bbox) });
- <% end %>
- <% else %>
- var centre = new OpenLayers.LonLat(<%= lon %>, <%= lat %>);
- <% if params[:scale].to_f > 0 then -%>
- var zoom = <%= scale_to_zoom params[:scale] %>;
- <% else -%>
- var zoom = <%= zoom %>;
- <% end -%>
-
- setMapCenter(centre, zoom);
- <% end %>
- <% end %>
+ }
+ } else {
+ setMapCenter(new OpenLayers.LonLat(params.lon, params.lat), params.zoom);
+ }
+ }
- <% if !layers.nil? and !layers.empty? %>
- setMapLayers("<%= layers %>");
- <% end %>
+ if (params.layers) {
+ setMapLayers(params.layers);
+ }
- <% if marker %>
- marker = addMarkerToMap(new OpenLayers.LonLat(<%= mlon %>, <%= mlat %>));
- <% end %>
+ if (params.marker) {
+ marker = addMarkerToMap(new OpenLayers.LonLat(params.mlon, params.mlat));
+ }
- <% if object %>
- var url = "/api/<%= "#{API_VERSION}" %>/<%= object_type %>/<%= object_id %>";
+ if (params.object) {
+ var url = "/api/" + OSM.API_VERSION + "/" + params.object_type + "/" + params.object_id;
- <% if object_type != "node" %>
+ if (params.object_type != "node") {
url += "/full";
- <% end %>
+ }
- $(window).load(function() { addObjectToMap(url, <%= object_zoom %>) });
- <% end %>
+ $(window).load(function() { addObjectToMap(url, params.object_zoom) });
+ }
map.events.register("moveend", map, updateLocation);
map.events.register("changelayer", map, updateLocation);
}
$(document).ready(function () {
- $("#show_data").click(function () {
- $.ajax({ url: "<%= url_for :controller => :browse, :action => :start %>" });
+ $("#show_notes").click(function () {
+ map.noteLayer.setVisibility(true);
+ });
+
+ $("#show_data").click(function (e) {
+ $.ajax({ url: $(this).attr('href'), success: function (sidebarHtml) {
+ startBrowse(sidebarHtml);
+ }});
+ e.preventDefault();
});
$("body").on("click", "a.set_position", function () {
var layers = getMapLayers();
var extents = unproj(map.getExtent());
var expiry = new Date();
- var objtype;
- var objid;
-
- <% if object %>
- objtype = "<%= object_type %>";
- objid = <%= object_id %>;
- <% end %>
- updatelinks(lonlat.lon, lonlat.lat, zoom, layers, extents.left, extents.bottom, extents.right, extents.top, objtype, objid);
+ updatelinks(lonlat.lon, lonlat.lat, zoom, layers, extents.left, extents.bottom, extents.right, extents.top, params.object_type, params.object_id);
expiry.setYear(expiry.getFullYear() + 10);
- document.cookie = "_osm_location=" + lonlat.lon + "|" + lonlat.lat + "|" + zoom + "|" + layers + "; expires=" + expiry.toGMTString();
+ $.cookie("_osm_location", [lonlat.lon, lonlat.lat, zoom, layers].join("|"), {expires: expiry});
}
function remoteEditHandler(event) {
$(document).ready(function () {
$("#exportanchor").click(function (e) {
- $.ajax({ url: "<%= url_for :controller => :export, :action => :start %>" });
+ $.ajax({ url: "<%= url_for :controller => :export, :action => :start %>", success: function (sidebarHtml) {
+ startExport(sidebarHtml);
+ }});
e.preventDefault();
});
- <% if params[:action] == 'export' -%>
- $.ajax({ url: "<%= url_for :controller => :export, :action => :start %>" });
+ <% if params[:export] -%>
+ $("#exportanchor").click();
<% end -%>
<% if params[:query] -%>
<%= link_to t('user.view.my traces'), :controller => 'trace', :action=>'mine' %>
<span class='count-number'><%= number_with_delimiter(@user.traces.size) %></span>
|
+ <%= link_to t('user.view.my notes'), :controller => 'note', :action=> 'mine' %>
+ |
<%= link_to t('user.view.my diary'), :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name %>
|
<%= link_to t('user.view.my comments' ), :controller => 'diary_entry', :action => 'comments', :display_name => @user.display_name %>
<%= link_to t('user.view.traces'), :controller => 'trace', :action => 'list', :display_name => @this_user.display_name %>
<span class='count-number'><%= number_with_delimiter(@this_user.traces.size) %></span>
|
+ <%= link_to t('user.view.notes'), :controller => 'note', :action=> 'mine' %>
+ |
<!-- Displaying another user's profile page -->
<%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => @this_user.display_name %>
|
<% end %>
</div>
- <p><b><%= t 'user.view.mapper since' %></b> <%= l @this_user.creation_time, :format => :friendly %> <%= t 'user.view.ago', :time_in_words_ago => time_ago_in_words(@this_user.creation_time) %></p>
+ <div id="description"><%= @this_user.description.to_html %></div>
- <p><b><%= t 'user.view.ct status' %></b>
+ <p class='deemphasize'><small>
+ <%= t 'user.view.mapper since' %> <%= l @this_user.creation_time.to_date, :format => :long %>
+ /
+ <%= t 'user.view.ct status' %>
<% if not @this_user.terms_agreed.nil? -%>
- <%= t 'user.view.ct accepted', :ago =>time_ago_in_words(@this_user.terms_agreed) %>
+ <%= t 'user.view.ct accepted', :ago =>time_ago_in_words(@this_user.terms_agreed) %>
<% elsif not @this_user.terms_seen? -%>
<%= t 'user.view.ct undecided' %>
<% else -%>
<%= t 'user.view.ct declined' %>
<% end -%>
+ </small>
</p>
<% if @user and @user.administrator? -%>
<p><b><%= t 'user.view.spam score' %></b> <%= @this_user.spam_score %></p>
<% end -%>
- <h3><%= t 'user.view.description' %></h3>
-
- <div id="description"><%= @this_user.description.to_html %></div>
-
<% if @user and @this_user.id == @user.id %>
<div id="map" class="user_map">
<% if @this_user.home_lat.nil? or @this_user.home_lon.nil? %>
server_url: "www.openstreetmap.org"
# The generator
generator: "OpenStreetMap server"
+ copyright_owner: "OpenStreetMap and contributors"
+ attribution_url: "http://www.openstreetmap.org/copyright"
+ license_url: "http://opendatacommons.org/licenses/odbl/1-0/"
# Sender addresses for emails
email_from: "OpenStreetMap <webmaster@openstreetmap.org>"
email_return_path: "bounces@openstreetmap.org"
max_number_of_nodes: 50000
# Maximum number of nodes that can be in a way (checked on save)
max_number_of_way_nodes: 2000
+ # The maximum area you're allowed to request notes from, in square degrees
+ max_note_request_area: 25
# Zoom level to use for postcode results from the geocoder
postcode_zoom: 15
# Zoom level to use for geonames results from the geocoder
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]]
+ edited_by_user_at_timestamp: Bearbeitet von %{user} am %{timestamp}
hide_areas: Gebiete ausblenden
- history_for_feature: Chronik für [[feature]]
+ history_for_feature: Chronik für %{feature}
load_data: Daten laden
- loaded_an_area_with_num_features: Du hast einen Bereich geladen, der [[num_features]] Elemente enthält. Manche Browser haben Probleme bei der Darstellung einer solch großen Datenmenge. Normalerweise ist es am besten, nur weniger als [[max_features]] Elemente zu betrachten. Alles andere macht deinen Browser langsam bzw. lässt ihn nicht mehr auf Eingaben reagieren. Sofern du dir sicher bist, dass du dir diese Daten anzeigen lassen möchtest, klicke unten auf „Daten laden“.
+ loaded_an_area_with_num_features: Du hast einen Bereich geladen, der %{num_features} Elemente enthält. Manche Browser haben Probleme bei der Darstellung einer solch großen Datenmenge. Normalerweise ist es am besten, nur weniger als %{max_features} Elemente zu betrachten. Alles andere macht deinen Browser langsam bzw. lässt ihn nicht mehr auf Eingaben reagieren. Sofern du dir sicher bist, dass du dir diese Daten anzeigen lassen möchtest, klicke unten auf „Daten laden“.
loading: Lade …
manually_select: Einen anderen Kartenausschnitt manuell auswählen
object_list:
heading: Objektliste
history:
type:
- node: Knoten [[id]]
- way: Weg [[id]]
+ node: Knoten %{id}
+ way: Weg %{id}
selected:
type:
- node: Knoten [[id]]
- way: Weg [[id]]
+ node: Knoten %{id}
+ way: Weg %{id}
type:
node: Knoten
way: Weg
private_user: Anonymer Benutzer
show_areas: Gebiete einblenden
show_history: Chronik
- unable_to_load_size: "Konnte nicht geladen werden: Bereich der Größe [[bbox_size]] ist zu groß (soll kleiner als %{max_bbox_size} sein)"
+ unable_to_load_size: "Das Laden ist nicht möglich: Der Größe %{bbox_size} des Bereichs ist zu groß und muss kleiner als %{max_bbox_size} sein."
wait: Verarbeiten …
zoom_or_select: Karte vergrößern oder einen Bereich auf der Karte auswählen
tag_details:
history_disabled_tooltip: Reinzoomen um Änderungen für diesen Bereich anzuzeigen
history_tooltip: Änderungen für diesen Bereich anzeigen
history_zoom_alert: Du musst näher heranzoomen, um die Chronik zu sehen
+ osb:
+ Fixed Error: Behobener Fehler
+ Unresolved Error: Offener Fehler
+ Description: Beschreibung
+ Comment: Kommentar
+ Has been fixed: Der Fehler wurde bereits behoben. Es kann jedoch bis zu einigen Tagen dauern, bis die Kartenansicht aktualisiert wird.
+ Comment/Close: Kommentieren/Schließen
+ Nickname: Benutzername
+ Add comment: Kommentar hinzufügen
+ Mark as fixed: Als behoben markieren
+ Cancel: Abbrechen
+ Create OpenStreetBug: OpenStreetBug melden
+ Create bug: Bug anlegen
+ Bug description: Fehlerbeschreibung
+ Create: Anlegeeen
+ Permalink: Permalink
layouts:
community: Gemeinschaft
community_blogs: Blogs
intro_2_license: Freien Lizenz
intro_2_use: genutzt
intro_2_use_url: http://wiki.openstreetmap.org/wiki/DE:Using_OpenStreetMap
- license:
- title: Daten von OpenStreetMap stehen unter der „Creative Commons Attribution-Share Alike 2.0 Generic“-Lizenz
log_in: Anmelden
log_in_tooltip: Für dein Benutzerkonto anmelden
logo:
partners_url: http://wiki.openstreetmap.org/wiki/Partners
sign_up: Registrieren
sign_up_tooltip: Ein Benutzerkonto zum Daten bearbeiten erstellen
- sotm2012: Komm zur OpenStreetMap-Konferenz „The State of the Map“ 2012 vom 6. bis 8. September in Tokio!
tag_line: Die freie Wiki-Weltkarte
user_diaries: Benutzer-Blogs
user_diaries_tooltip: Benutzer-Blogs lesen
title: Über diese Übersetzung
legal_babble:
contributors_at_html: "<strong>Österreich</strong>: Enthält Daten der <a href=\"http://data.wien.gv.at/\">Stadt Wien</a>, lizenziert gemäß <a href=\"http://creativecommons.org/licenses/by/3.0/at/deed.de\">CC BY AT</a>, <a href=\"http://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm\">des Lands Vorarlberg</a> und des Lands Tirol (<a href=\"http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/\">lizenziert gemäß CC BY AT mit Anpassungen zur Lizenz</a>)."
- contributors_au_html: "<strong>Australien</strong>: Enthält Daten zu Siedlungen, die auf Daten des <i>Australian Bureau of Statistics</i> basieren."
contributors_ca_html: "<strong>Kanada</strong>: Enthält Daten von GeoBase®, GeoGratis (© <i>Department of Natural Resources Canada</i>), CanVec (© <i>Department of Natural Resources Canada</i>) und StatCan (<i>Geography Division, Statistics Canada</i>)."
contributors_footer_1_html: Für weitere diesbezügliche Einzelheiten sowie anderer Datenquellen, die zur Verbesserung von OpenStreetMap genutzt wurden, besuche bitte <a href="http://wiki.openstreetmap.org/wiki/Contributors">die Seite über die Mitwirkenden</a> im Wiki von OpenStreetMap.
contributors_footer_2_html: Die Einbeziehung von Daten bei OpenStreetMap impliziert nicht, dass der ursprüngliche Datenlieferant OpenStreetMap unterstützt, Gewährleistung gibt, noch Haftung übernimmt.
contributors_intro_html: Die von uns verwendete Lizenz CC BY-SA verlangt, dass du „in dem betreffenden Medium in angemessener Weise, auf die ursprünglichen Bearbeiter hinweist.“ Einige an OpenStreetMap Mitwirkende verlangen keine über den Vermerk „OpenStreetMap und Mitwirkende“ hinausgehende Hinweise. Wo allerdings Daten von nationalen Kartografierungsinstitutionen oder aus anderen umfangreichen Quellen einbezogen wurden, ist es sinnvoll, deren Lizenzhinweise direkt wiederzugeben oder auf diese auf dieser Website zu verlinken.
contributors_nl_html: "<strong>Niederlande</strong>: Enthält, © AND-Daten, 2007 (<a href=\"http://www.and.com\">www.and.com</a>)"
contributors_nz_html: "<strong>Neuseeland</strong>: Enthält Daten aus <i>Land Information New Zealand</i>. Urheberrecht vorbehalten."
- contributors_pl_html: "<strong>Polen</strong>: Enthält Daten aus <a href=\"http://ump.waw.pl/\">UMP-pcPL Karten</a>. Urheberrechtlich geschützt, UMP-pcPL und Mitwirkende. <a href=\"http://wiki.openstreetmap.org/wiki/UMP2OSM_Importing\">Mehr zur Nutzung der UMP-Daten durch OSM</a>"
contributors_title_html: Unsere Mitwirkenden
contributors_za_html: "<strong>Südafrika</strong>: Enthält Daten von <i><a href=\"http://www.ngi.gov.za/\">Chief Directorate: National Geo-Spatial Information</a></i>, Staatliches Urheberrecht vorbehalten."
credit_1_html: Sofern du Bilder von OpenStreetMap verwendest, so ist mindestens „© OpenStreetMap und Mitwirkende, CC BY-SA“ als Quelle anzugeben. Werden hingegen ausschließlich Geodaten genutzt, so ist mindestens „Geodaten © OpenStreetMap und Mitwirkende, CC BY-SA“ anzugeben.
intro_2_html: Es steht dir frei unsere Daten und Karten zu kopieren, weiterzugeben, zu übermittelt sowie anzupassen, sofern du OpenStreetMap und die Mitwirkenden als Quelle angibst. Für den Fall, dass du auf Basis unserer Daten und Karten Anpassungen vornimmst, oder sie als Basis für weitere Bearbeitungen verwendest, kannst du das Ergebnis auch nur gemäß der selben Lizenz weitergeben. Der vollständige Lizenztext ist unter <a href="http://creativecommons.org/licenses/by-sa/2.0/legalcode">Lizenz</a> einsehbar und erläutert deine Rechte und Pflichten.
more_1_html: Mehr dazu, wie unsere Daten verwendet werden können, kann man unter <a href="http://wiki.openstreetmap.org/wiki/Legal_FAQ">Häufige rechtliche Fragen</a> nachlesen.
more_2_html: Die Mitwirkenden von OpenStreetMap weisen wir darauf hin, dass du keinesfalls Daten aus urheberrechtlich geschützten Quellen verwenden darfst (z. B. Google Maps oder gedruckte Kartenwerke), ohne vorher die ausdrückliche Erlaubnis des Rechteinhabers erhalten zu haben.
- more_3_html: Obwohl OpenStreetMap aus freien Daten besteht, können wir Dritten keine kostenfreie Programmierschnittstelle (API) für Karten bereitstellen. Siehe hierzu die <a href="http://wiki.openstreetmap.org/wiki/API_usage_policy">Richtlinie zur Nutzung einer API</a>, die <a href="http://wiki.openstreetmap.org/wiki/Tile_usage_policy">Richtlinie zur Nutzung von Kachelgrafiken</a> und die <a href="http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy">Richtlinie zur Nutzung von Daten von Nominatim</a>.
more_title_html: Mehr hierzu in Erfahrung bringen
title_html: Urheberrecht und Lizenz
native:
index:
js_1: Dein Browser unterstützt kein JavaScript oder du hast es deaktiviert.
js_2: OpenStreetMap nutzt JavaScript für die Kartendarstellung.
- license:
- license_name: Creative Commons „Namensnennung, Weitergabe unter gleichen Bedingungen 2.0“
- notice: Lizenziert unter %{license_name} Lizenz durch das %{project_name} und seine Mitwirkenden.
- project_name: OpenStreetMap Projekt
permalink: Permanentlink
remote_failed: Das Bearbeiten ist fehlgeschlagen. Stelle sicher, dass JOSM oder Merkaartor gestartet ist und die Remote-Control-Option aktiviert ist.
shortlink: Shortlink
lost password link: Passwort vergessen?
new to osm: Neu bei OpenStreetMap?
no account: Du hast noch kein Benutzerkonto?
- notice: <a href="http://wiki.openstreetmap.org/wiki/DE:ODbL/Wir_wechseln_die_Lizenz">Informiere dich über den bevorstehenden Lizenzwechsel bei OpenStreetMap</a> (<a href="http://wiki.openstreetmap.org/wiki/ODbL/We_Are_Changing_The_License">Übersetzungen</a>) (<a href="http://wiki.openstreetmap.org/wiki/Talk:ODbL/Upcoming">Diskussion</a>)
- notice_terms: OpenStreetMap stellt am 1. April 2012 auf eine neuen Lizenz um. Es handelt sich bei der neuen Lizenz um eine ebenso freie Lizenz, wie es die aktuelle ist, allerdings sind deren rechtliche Rahmenbedingungen besser auf die Bedürfnisse unserer Kartendatenbank abgestimmt. Wir würden es sehr begrüßen, sofern wir deine Beiträge zu OpenStreetMap weiterhin speichern und zugänglich machen könnten. Dies ist allerdings nur dann möglich, sofern du zustimmst, dass wir dies gemäß den Bedingungen der neuen Lizenz auch tun dürfen. Anderenfalls müssen wir deine Beiträge aus der Datenbank löschen.<br /><br />Bitte melde dich an, um die neuen Bedingungen zu lesen und zu akzeptieren. Vielen Dank.
openid: "%{logo} OpenID:"
openid invalid: Deine OpenID scheint leider fehlerhaft zu sein.
openid missing provider: Wir konnten leider keine Verbindung zu deinem OpenID-Dienst herstellen.
next_relation_tooltip: "Next relation"
prev_changeset_tooltip: "Previous changeset"
next_changeset_tooltip: "Next changeset"
+ prev_note_tooltip: "Previous note"
+ next_note_tooltip: "Next note"
changeset_details:
created_at: "Created at:"
closed_at: "Closed at:"
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"
manually_select: "Manually select a different area"
hide_areas: "Hide areas"
show_areas: "Show areas"
- loaded_an_area_with_num_features: "You have loaded an area which contains [[num_features]] features. In general, some browsers may not cope well with displaying this quantity of data. Generally, browsers work best at displaying less than [[max_features]] features at a time: doing anything else may make your browser slow/unresponsive. If you are sure you want to display this data, you may do so by clicking the button below."
+ loaded_an_area_with_num_features: "You have loaded an area which contains %{num_features} features. In general, some browsers may not cope well with displaying this quantity of data. Generally, browsers work best at displaying less than %{max_features} features at a time: doing anything else may make your browser slow/unresponsive. If you are sure you want to display this data, you may do so by clicking the button below."
load_data: "Load Data"
- unable_to_load_size: "Unable to load: Bounding box size of [[bbox_size]] is too large (must be smaller than %{max_bbox_size})"
+ unable_to_load_size: "Unable to load: Bounding box size of %{bbox_size} is too large (must be smaller than %{max_bbox_size})"
loading: "Loading..."
show_history: "Show History"
wait: "Wait..."
- history_for_feature: "History for [[feature]]"
+ history_for_feature: "History for %{feature}"
details: "Details"
private_user: "private user"
- edited_by_user_at_timestamp: "Edited by [[user]] at [[timestamp]]"
+ edited_by_user_at_timestamp: "Edited by %{user} at %{timestamp}"
object_list:
heading: "Object list"
back: "Display object list"
details: "Details"
selected:
type:
- node: "Node [[id]]"
- way: "Way [[id]]"
+ node: "Node %{id}"
+ way: "Way %{id}"
# There is no 'relation' type because it is not represented in OpenLayers
history:
type:
- node: "Node [[id]]"
- way: "Way [[id]]"
+ node: "Node %{id}"
+ way: "Way %{id}"
# There is no 'relation' type because it is not represented in OpenLayers
tag_details:
tags: "Tags:"
download_xml: "Download XML"
view_history: "View history"
edit: "Edit way"
+ note:
+ open_title: "Unresolved issue: %{note_name}"
+ closed_title: "Resolved issue: %{note_name}"
+ opened: "Opened:"
+ last_modified: "Last modified:"
+ closed: "Closed:"
+ at_by: "%{when} ago by %{user}"
+ description: "Description:"
+ comments: "Comments:"
changeset:
changeset_paging_nav:
showing_page: "Showing page %{page}"
map_image: "Map Image (shows standard layer)"
embeddable_html: "Embeddable HTML"
licence: "Licence"
- export_details: 'OpenStreetMap data is licensed under the <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative Commons Attribution-ShareAlike 2.0 license</a>.'
+ export_details: 'OpenStreetMap data is licensed under the <a href="http://opendatacommons.org/licenses/odbl/1.0/">Open Data Commons Open Database License</a> (ODbL).'
too_large:
heading: "Area Too Large"
body: "This area is too large to be exported as OpenStreetMap XML Data. Please zoom in or select a smaller area."
us_postcode: 'Results from <a href="http://geocoder.us/">Geocoder.us</a>'
uk_postcode: 'Results from <a href="http://www.npemap.org.uk/">NPEMap / FreeThe Postcode</a>'
ca_postcode: 'Results from <a href="http://geocoder.ca/">Geocoder.CA</a>'
- osm_namefinder: 'Results from <a href="http://gazetteer.openstreetmap.org/namefinder/">OpenStreetMap Namefinder</a>'
osm_nominatim: 'Results from <a href="http://nominatim.openstreetmap.org/">OpenStreetMap Nominatim</a>'
geonames: 'Results from <a href="http://www.geonames.org/">GeoNames</a>'
- search_osm_namefinder:
- prefix: "%{type}"
- suffix_place: ", %{distance} %{direction} of %{placename}"
- suffix_parent: "%{suffix} (%{parentdistance} %{parentdirection} of %{parentname})"
- suffix_suburb: "%{suffix}, %{parentname}"
search_osm_nominatim:
prefix_format: "%{name}"
prefix:
weir: "Weir"
description:
title:
- osm_namefinder: '%{types} from <a href="http://gazetteer.openstreetmap.org/namefinder/">OpenStreetMap Namefinder</a>'
osm_nominatim: 'Location from <a href="http://nominatim.openstreetmap.org/">OpenStreetMap Nominatim</a>'
geonames: 'Location from <a href="http://www.geonames.org/">GeoNames</a>'
types:
cities: Cities
towns: Towns
places: Places
- description_osm_namefinder:
- prefix: "%{distance} %{direction} of %{type}"
results:
no_results: "No results found"
more_results: "More results"
community_blogs_title: "Blogs from members of the OpenStreetMap community"
foundation: Foundation
foundation_title: The OpenStreetMap Foundation
- sotm2012: 'Come to the 2012 OpenStreetMap Conference, The State of the Map, September 6-8th in Tokyo!'
- license:
- alt: CC BY-SA 2.0
- title: OpenStreetMap data is licensed under the Creative Commons Attribution-Share Alike 2.0 Generic License
+ sotm2012: 'Come to the 2012 United States OpenStreetMap Conference, The State of the Map US, October 13-14th in Portland, Oregon!'
make_a_donation:
title: Support OpenStreetMap with a monetary donation
text: Make a Donation
title_html: Copyright and License
intro_1_html: |
OpenStreetMap is <i>open data</i>, licensed under the <a
- href="http://creativecommons.org/licenses/by-sa/2.0/">Creative
- Commons Attribution-ShareAlike 2.0</a> licence (CC BY-SA).
+ href="http://opendatacommons.org/licenses/odbl/">Open Data
+ Commons Open Database License</a> (ODbL).
intro_2_html: |
- You are free to copy, distribute, transmit and adapt our maps
- and data, as long as you credit OpenStreetMap and its
- contributors. If you alter or build upon our maps or data, you
+ You are free to copy, distribute, transmit and adapt our data,
+ as long as you credit OpenStreetMap and its
+ contributors. If you alter or build upon our data, you
may distribute the result only under the same licence. The
- full <a
- href="http://creativecommons.org/licenses/by-sa/2.0/legalcode">legal
+ full <a href="http://opendatacommons.org/licenses/odbl/1.0/">legal
code</a> explains your rights and responsibilities.
+ intro_3_html: |
+ The cartography in our map tiles, and our documentation, are
+ licensed under the <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative
+ Commons Attribution-ShareAlike 2.0</a> license (CC-BY-SA).
credit_title_html: How to credit OpenStreetMap
credit_1_html: |
- If you are using OpenStreetMap map images, we request that
- your credit reads at least “© OpenStreetMap
- contributors, CC BY-SA”. If you are using map data only,
- we request “Map data © OpenStreetMap contributors,
- CC BY-SA”.
+ We require that you use the credit “© OpenStreetMap
+ contributors”.
credit_2_html: |
- Where possible, OpenStreetMap should be hyperlinked to <a
- href="http://www.openstreetmap.org/">http://www.openstreetmap.org/</a>
- and CC BY-SA to <a
- href="http://creativecommons.org/licenses/by-sa/2.0/">http://creativecommons.org/licenses/by-sa/2.0/</a>. If
- you are using a medium where links are not possible (e.g. a
- printed work), we suggest you direct your readers to
- www.openstreetmap.org (perhaps by expanding
- ‘OpenStreetMap’ to this full address) and to
- www.creativecommons.org.
+ You must also make it clear that the data is available under the Open
+ Database License, and if using our map tiles, that the cartography is
+ licensed as CC-BY-SA. You may do this by linking to
+ <a href="http://www.openstreetmap.org/copyright">this copyright page</a>.
+ Alternatively, and as a requirement if you are distributing OSM in a
+ data form, you can name and link directly to the license(s). In media
+ where links are not possible (e.g. printed works), we suggest you
+ direct your readers to openstreetmap.org (perhaps by expanding
+ 'OpenStreetMap' to this full address), to opendatacommons.org, and
+ if relevant, to creativecommons.org.
more_title_html: Finding out more
more_1_html: |
- Read more about using our data at the <a
+ Read more about using our data, and how to credit us, at the <a
href="http://wiki.openstreetmap.org/wiki/Legal_FAQ">Legal
FAQ</a>.
more_2_html: |
- OSM contributors are reminded never to add data from any
- copyrighted sources (e.g. Google Maps or printed maps) without
- explicit permission from the copyright holders.
- more_3_html: |
Although OpenStreetMap is open data, we cannot provide a
free-of-charge map API for third-party developers.
See our <a href="http://wiki.openstreetmap.org/wiki/API_usage_policy">API Usage Policy</a>,
and <a href="http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy">Nominatim Usage Policy</a>.
contributors_title_html: Our contributors
contributors_intro_html: |
- Our CC BY-SA licence requires you to “give the Original
- Author credit reasonable to the medium or means You are
- utilising”. Individual OSM mappers do not request a
- credit over and above that to “OpenStreetMap
- contributors”, but where data from a national mapping
- agency or other major source has been included in
- OpenStreetMap, it may be reasonable to credit them by directly
- reproducing their credit or by linking to it on this page.
- contributors_au_html: |
- <strong>Australia</strong>: Contains suburb data based
- on Australian Bureau of Statistics data.
+ Our contributors are thousands of individuals. We also include
+ openly-licensed data from national mapping agencies
+ and other sources, among them:
contributors_at_html: |
<strong>Austria</strong>: Contains data from
<a href="http://data.wien.gv.at/">Stadt Wien</a> (under
contributors_nz_html: |
<strong>New Zealand</strong>: Contains data sourced from
Land Information New Zealand. Crown Copyright reserved.
- contributors_pl_html: |
- <strong>Poland</strong>: Contains data from <a
- href="http://ump.waw.pl/">UMP-pcPL maps</a>. Copyright
- UMP-pcPL contributors.
- <a href="http://wiki.openstreetmap.org/wiki/UMP2OSM_Importing">
- More about OSM's use of UMP data</a>
contributors_za_html: |
<strong>South Africa</strong>: Contains data sourced from
<a href="http://www.ngi.gov.za/">Chief Directorate:
contributors_gb_html: |
<strong>United Kingdom</strong>: Contains Ordnance
Survey data © Crown copyright and database right
- 2010.
+ 2010-12.
contributors_footer_1_html: |
For further details of these, and other sources that have been used
to help improve OpenStreetMap, please see the <a
Inclusion of data in OpenStreetMap does not imply that the original
data provider endorses OpenStreetMap, provides any warranty, or
accepts any liability.
+ infringement_title_html: Copyright infringement
+ infringement_1_html: |
+ OSM contributors are reminded never to add data from any
+ copyrighted sources (e.g. Google Maps or printed maps) without
+ explicit permission from the copyright holders.
+ infringement_2_html: |
+ If you believe that copyrighted material has been inappropriately
+ added to the OpenStreetMap database or this site, please refer
+ to our <a href="http://www.osmfoundation.org/wiki/License/Takedown_procedure">takedown
+ procedure</a> or file directly at our
+ <a href="http://dmca.openstreetmap.org/">on-line filing page</a>.
notifier:
diary_comment_notification:
subject: "[OpenStreetMap] %{user} commented on your diary entry"
greeting: "Hi,"
hopefully_you: "Someone (possibly you) has asked for the password to be reset on this email address's openstreetmap.org account."
click_the_link: "If this is you, please click the link below to reset your password."
+ note_plain:
+ subject_own: "[OpenStreetMap] %{commenter} has commented on one of your notes"
+ subject_other: "[OpenStreetMap] %{commenter} has commented on a note you are interested in"
+ greeting: "Hi,"
+ your_note: "%{commenter} has left a comment on one of your map notes near %{place}."
+ commented_note: "%{commenter} has left a comment on a map note you have commented on. The note is near %{place}."
+ details: "More details about the note can be found at %{URL}."
message:
inbox:
title: "Inbox"
permalink: Permalink
shortlink: Shortlink
license:
- notice: "Licensed under the %{license_name} license by the %{project_name} and its contributors."
- license_name: "Creative Commons Attribution-Share Alike 2.0"
- license_url: "http://creativecommons.org/licenses/by-sa/2.0/"
- project_name: "OpenStreetMap project"
+ copyright: "Copyright OpenStreetMap and contributors, under an open license"
+ license_url: "http://openstreetmap.org/copyright"
project_url: "http://openstreetmap.org"
remote_failed: "Editing failed - make sure JOSM or Merkaartor is loaded and the remote control option is enabled"
edit:
account not active: "Sorry, your account is not active yet.<br />Please use the link in the account confirmation email to activate your account, or <a href=\"%{reconfirm}\">request a new confirmation email</a>."
account is suspended: Sorry, your account has been suspended due to suspicious activity.<br />Please contact the <a href="%{webmaster}">webmaster</a> if you wish to discuss this.
auth failure: "Sorry, could not log in with those details."
- notice: "<a href=\"http://www.osmfoundation.org/wiki/License/We_Are_Changing_The_License\">Find out more about OpenStreetMap's upcoming license change</a> (<a href=\"http://wiki.openstreetmap.org/wiki/ODbL/We_Are_Changing_The_License\">translations</a>) (<a href=\"http://wiki.openstreetmap.org/wiki/Talk:ODbL/Upcoming\">discussion</a>)"
- notice_terms: "OpenStreetMap is moving to a new licence on 1st April 2012. It's just as open as our current one, but the legal bits are much better suited to our map database. We'd love to keep your contributions in OpenStreetMap, but we can only do so if you agree to let us distribute them under the new licence. Otherwise, we'll have to remove them from the database.<br /><br />Please log in, then take a few seconds to review and accept the new terms. Thank you!"
openid missing provider: "Sorry, could not contact your OpenID provider"
openid invalid: "Sorry, your OpenID seems to be malformed"
openid_logo_alt: "Log in with an OpenID"
new diary entry: new diary entry
my edits: my edits
my traces: my traces
+ my notes: my map notes
my settings: my settings
my comments: my comments
oauth settings: oauth settings
diary: diary
edits: edits
traces: traces
+ notes: map notes
remove as friend: remove as friend
add as friend: add as friend
mapper since: "Mapper since:"
back: "View all blocks"
revoker: "Revoker:"
needs_view: "The user needs to log in before this block will be cleared."
+ note:
+ description:
+ opened_at_by: "Created %{when} ago by %{user}"
+ commented_at_by: "Updated %{when} ago by %{user}"
+ closed_at_by: "Resolved %{when} ago by %{user}"
+ reopened_at_by: "Reactivated %{when} ago by %{user}"
+ rss:
+ title: "OpenStreetMap Notes"
+ description_area: "A list of notes, reported, commented on or closed in your area [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]"
+ description_item: "An rss feed for note %{id}"
+ closed: "closed note (near %{place})"
+ new: "new note (near %{place})"
+ comment: "new comment (near %{place})"
+ mine:
+ title: "Notes submitted or commented on by %{user}"
+ heading: "%{user}'s notes"
+ description: "Notes submitted or commented on by %{user}"
+ id: "Id"
+ last_changed: "Last changed"
javascripts:
map:
base:
history_tooltip: View edits for this area
history_disabled_tooltip: Zoom in to view edits for this area
history_zoom_alert: You must zoom in to view edits for this area
+ note:
+ closed: Closed Note
+ open: Open Note
+ details: Details
+ permalink: Permalink
+ description: Description
+ comment: Comment
+ render_warning: This error has been fixed already. However, it might take a couple of days before the map image is updated.
+ update: Update
+ nickname: Nickname
+ login: Login
+ add_comment: Add Comment
+ close: Close
+ cancel: Cancel
+ create: Create Note
+ create_title: Report a problem with the map
+ create_help1: Please drag the marker to the location of the problem
+ create_help2: and descripe it as accurate as possible
+ report: Report Problem
+ edityourself: You can also edit the map directly your self
redaction:
edit:
description: "Description"
match 'api/0.6/gpx/:id/data' => 'trace#api_data', :via => :get
# AMF (ActionScript) API
-
match 'api/0.6/amf/read' => 'amf#amf_read', :via => :post
match 'api/0.6/amf/write' => 'amf#amf_write', :via => :post
match 'api/0.6/swf/trackpoints' => 'swf#trackpoints', :via => :get
+ # Map notes API
+ scope "api/0.6" do
+ resources :notes, :except => [ :new, :edit, :update ], :constraints => { :id => /\d+/ }, :defaults => { :format => "xml" } do
+ collection do
+ get 'search'
+ get 'feed', :defaults => { :format => "rss" }
+ end
+
+ member do
+ post 'comment'
+ post 'close'
+ end
+ end
+
+ match 'notes/addPOIexec' => 'notes#create', :via => :post
+ match 'notes/closePOIexec' => 'notes#close', :via => :post
+ match 'notes/editPOIexec' => 'notes#comment', :via => :post
+ match 'notes/getGPX' => 'notes#index', :via => :get, :format => "gpx"
+ match 'notes/getRSSfeed' => 'notes#feed', :via => :get, :format => "rss"
+ end
+
# Data browsing
match '/browse/start' => 'browse#start', :via => :get
match '/browse/way/:id' => 'browse#way', :via => :get, :id => /\d+/
match '/browse/relation/:id' => 'browse#relation', :via => :get, :id => /\d+/
match '/browse/relation/:id/history' => 'browse#relation_history', :via => :get, :id => /\d+/
match '/browse/changeset/:id' => 'browse#changeset', :via => :get, :as => :changeset, :id => /\d+/
+ match '/browse/note/:id' => 'browse#note', :via => :get, :id => /\d+/
match '/user/:display_name/edits' => 'changeset#list', :via => :get
match '/user/:display_name/edits/feed' => 'changeset#feed', :via => :get, :format => :atom
+ match '/user/:display_name/notes' => 'notes#mine', :via => :get
match '/browse/friends' => 'changeset#list', :via => :get, :friends => true, :as => "friend_changesets"
match '/browse/nearby' => 'changeset#list', :via => :get, :nearby => true, :as => "nearby_changesets"
match '/browse/changesets' => 'changeset#list', :via => :get
match '/copyright' => 'site#copyright', :via => :get
match '/history' => 'changeset#list', :via => :get
match '/history/feed' => 'changeset#feed', :via => :get, :format => :atom
- match '/export' => 'site#export', :via => :get
+ match '/export' => 'site#index', :export => true, :via => :get
match '/login' => 'user#login', :via => [:get, :post]
match '/logout' => 'user#logout', :via => [:get, :post]
match '/offline' => 'site#offline', :via => :get
- match '/key' => 'site#key', :via => :post
+ match '/key' => 'site#key', :via => :get
match '/user/new' => 'user#new', :via => :get
match '/user/terms' => 'user#terms', :via => [:get, :post]
match '/user/save' => 'user#save', :via => :post