Merge branch 'master' into redesign
authorJohn Firebaugh <john.firebaugh@gmail.com>
Sat, 16 Nov 2013 00:47:49 +0000 (16:47 -0800)
committerJohn Firebaugh <john.firebaugh@gmail.com>
Sat, 16 Nov 2013 00:47:49 +0000 (16:47 -0800)
Conflicts:
app/controllers/browse_controller.rb
app/views/layouts/_head.html.erb
config/environments/production.rb
config/routes.rb

1  2 
app/controllers/geocoder_controller.rb
app/controllers/site_controller.rb
app/views/layouts/_head.html.erb
config/environments/production.rb
config/locales/en.yml
config/routes.rb

index 592ff020abd2e9e4852de984aea25bb4f29cd18d,6db70a6f37fc3ca21dbf72d8de37e1401e34403d..87eb329abfe9fc998c271af4ad1b328ae807bfd6
@@@ -13,6 -13,7 +13,7 @@@ class GeocoderController < ApplicationC
  
      @sources = []
      if params[:lat] && params[:lon]
+       @sources.push "latlon"
        @sources.push "osm_nominatim_reverse"
        @sources.push "geonames_reverse"
      elsif params[:query].match(/^\d{5}(-\d{4})?$/)
        @sources.push "osm_nominatim"
        @sources.push "geonames" if defined?(GEONAMES_USERNAME)
      end
 +
 +    render :layout => map_layout
    end
  
+   def search_latlon
+     lat = params[:lat].to_f
+     lon = params[:lon].to_f
+     if lat < -90 or lat > 90
+       @error = "Latitude #{lat} out of range"
+       render :action => "error"
+     elsif lon < -180 or lon > 180
+       @error = "Longitude #{lon} out of range"
+       render :action => "error"
+     else
+       @results = [{:lat => lat, :lon => lon,
+                    :zoom => params[:zoom],
+                    :name => "#{lat}, #{lon}"}]
+       render :action => "results"
+     end
+   end
    def search_us_postcode
      # get query parameters
      query = params[:query]
        type = place.attributes["type"].to_s
        name = place.attributes["display_name"].to_s
        min_lat,max_lat,min_lon,max_lon = place.attributes["boundingbox"].to_s.split(",")
-       prefix_name = t "geocoder.search_osm_nominatim.prefix.#{klass}.#{type}", :default => type.gsub("_", " ").capitalize
+       if type.empty?
+         prefix_name = ""
+       else
+         prefix_name = t "geocoder.search_osm_nominatim.prefix.#{klass}.#{type}", :default => type.gsub("_", " ").capitalize
+       end
        if klass == 'boundary' and type == 'administrative'
          rank = (place.attributes["place_rank"].to_i + 1) / 2
          prefix_name = t "geocoder.search_osm_nominatim.admin_levels.level#{rank}", :default => prefix_name
index 9979739228d87366a7ffe09ee07a928c37979cf1,cea37fbf36da54ab423293f54e4ff937b4efe358..1757e771a9fc085a5c85c8b8c7906d5ebdf56aad
@@@ -1,10 -1,9 +1,10 @@@
  class SiteController < ApplicationController
 -  layout 'site', :except => [:key, :permalink]
 -  layout false, :only => [:key, :permalink]
 +  layout 'site'
 +  layout :map_layout, :only => [:index, :export]
  
    before_filter :authorize_web
    before_filter :set_locale
 +  before_filter :redirect_browse_params, :only => :index
    before_filter :redirect_map_params, :only => [:index, :edit, :export]
    before_filter :require_user, :only => [:edit, :welcome]
    before_filter :require_oauth, :only => [:index]
  
    def key
      expires_in 7.days, :public => true
 +    render :layout => false
    end
  
    def edit
      editor = preferred_editor
  
      if editor == "remote"
+       require_oauth
        render :action => :index
        return
      end
  
 -    @extra_body_class = "site-edit-#{editor}"
 -
      if params[:node]
        bbox = Node.find(params[:node]).bbox.to_unscaled
        @lat = bbox.centre_lat
    def welcome
    end
  
 +  def help
 +  end
 +
 +  def about
 +  end
 +
    def preview
      render :text => RichText.new(params[:format], params[:text]).to_html
    end
  
    private
  
 +  def redirect_browse_params
 +    if params[:node]
 +      redirect_to node_path(params[:node])
 +    elsif params[:way]
 +      redirect_to way_path(params[:way])
 +    elsif params[:relation]
 +      redirect_to relation_path(params[:relation])
 +    elsif params[:note]
 +      redirect_to browse_note_path(params[:note])
 +    end
 +  end
 +
    def redirect_map_params
      anchor = []
  
index 46fe40f04227dfb3e75c102758758daa13bf6950,93b48c3155ff56cf570acb94cc680ce49f9260a3..9951737bc1e89ef607942a98373aedb2a2c5b537
@@@ -1,10 -1,9 +1,10 @@@
  <head>
+   <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0"/>
 +  <!--[if lt IE 9]><%= javascript_include_tag "html5shiv" %><![endif]-->
    <%= javascript_include_tag "application" %>
-   <!--[if lt IE 7]><%= javascript_include_tag "pngfix" %><![endif]--> <!-- thanks, microsoft! -->
 -  <%= stylesheet_link_tag "small-#{dir}", :media => "only screen and (max-width:641px)" %>
 -  <%= stylesheet_link_tag "large-#{dir}", :media => "screen and (min-width: 642px)" %>
 +  <%= stylesheet_link_tag "small-#{dir}", :media => "only screen and (max-width:721px)" %>
 +  <%= stylesheet_link_tag "large-#{dir}", :media => "screen and (min-width: 722px)" %>
    <%= stylesheet_link_tag "print-#{dir}", :media => "print" %>
    <%= stylesheet_link_tag "leaflet-all", :media => "screen, print" %>
    <!--[if IE]>
@@@ -46,5 -45,5 +46,5 @@@
      OSM.oauth_consumer_secret = "<%= @oauth.client_application.secret %>";
      <% end -%>
    </script>
 -  <title><%= t 'layouts.project_name.title' %><%= ' | '+ @title if @title %></title>
 +  <title><%= @title %></title>
  </head>
index bbc06aac5a6b463d98954dd227b53aaa669b8595,47358b387847d5620e3afcbfb69d95fb761f43c5..2db9f23662f176092c4c898c48efa89e470c2085
@@@ -69,13 -69,12 +69,13 @@@ OpenStreetMap::Application.configure d
  
    # Precompile additional assets.
    # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
 -  config.assets.precompile += %w( index.js edit.js browse.js changeset.js welcome.js )
 +  config.assets.precompile += %w( index.js browse.js welcome.js )
-   config.assets.precompile += %w( user.js diary_entry.js pngfix.js swfobject.js )
+   config.assets.precompile += %w( user.js diary_entry.js swfobject.js )
    config.assets.precompile += %w( large-ltr.css small-ltr.css print-ltr.css )
    config.assets.precompile += %w( large-rtl.css small-rtl.css print-rtl.css )
 -  config.assets.precompile += %w( browse.css leaflet-all.css leaflet.ie.css )
 +  config.assets.precompile += %w( leaflet-all.css leaflet.ie.css )
    config.assets.precompile += %w( embed.js embed.css )
 +  config.assets.precompile += %w( html5shiv.js )
    config.assets.precompile += %w( images/marker-*.png img/*-handle.png )
    config.assets.precompile += %w( potlatch2.swf )
    config.assets.precompile += %w( potlatch2/assets.zip )
diff --combined config/locales/en.yml
index f33726357a5a642916dfbf1522dda854ad6994bd,d7411e997c0d505b88dc9cc148c3c7517373419d..aaf57e7e830fe1eccf44fecd73c76b72ec09a28a
@@@ -95,62 -95,96 +95,62 @@@ en
        name: "Remote Control"
        description: "Remote Control (JOSM or Merkaartor)"
    browse:
 +    created: "Created"
 +    closed: "Closed"
 +    created_html: "Created <abbr title='%{title}'>%{time} ago</abbr>"
 +    closed_html: "Closed <abbr title='%{title}'>%{time} ago</abbr>"
 +    created_by_html: "Created <abbr title='%{title}'>%{time} ago</abbr> by %{user}"
 +    deleted_by_html: "Deleted <abbr title='%{title}'>%{time} ago</abbr> by %{user}"
 +    edited_by_html: "Edited <abbr title='%{title}'>%{time} ago</abbr> by %{user}"
 +    closed_by_html: "Closed <abbr title='%{title}'>%{time} ago</abbr> by %{user}"
 +    version: "Version"
 +    in_changeset: "Changeset"
 +    anonymous: "anonymous"
 +    no_comment: "(no comment)"
 +    part_of: "Part of"
 +    download_xml: "Download XML"
 +    view_history: "View History"
 +    view_details: "View Details"
      changeset:
 -      title: "Changeset"
 -      changeset: "Changeset: %{id}"
 +      title: "Changeset %{id}"
 +      belongs_to: "Author"
 +      node: "Nodes (%{count})"
 +      node_paginated: "Nodes (%{x}-%{y} of %{count})"
 +      way: "Ways (%{count})"
 +      way_paginated: "Ways (%{x}-%{y} of %{count})"
 +      relation: "Relations (%{count})"
 +      relation_paginated: "Relations (%{x}-%{y} of %{count})"
        changesetxml: "Changeset XML"
        osmchangexml: "osmChange XML"
        feed:
          title: "Changeset %{id}"
          title_comment: "Changeset %{id} - %{comment}"
 -    navigation:
 -      paging:
 -        user:
 -          prev: "« %{id}"
 -          next: "%{id} »"
 -        all:
 -          prev: "« %{id}"
 -          next: "%{id} »"
 -      user:
 -        name_changeset_tooltip: "View edits by %{user}"
 -        prev_changeset_tooltip: "Previous edit by %{user}"
 -        next_changeset_tooltip: "Next edit by %{user}"
 -      all:
 -        prev_node_tooltip: "Previous node"
 -        next_node_tooltip: "Next node"
 -        prev_way_tooltip: "Previous way"
 -        next_way_tooltip: "Next way"
 -        prev_relation_tooltip: "Previous relation"
 -        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:"
 -      belongs_to: "Belongs to:"
 -      bounding_box: "Bounding box:"
 -      no_bounding_box: "No bounding box has been stored for this changeset."
 -      show_area_box: "Show Area Box"
 -      box: "box"
 -      has_nodes:
 -        one: "Has the following %{count} node:"
 -        other: "Has the following %{count} nodes:"
 -      has_ways:
 -        one:  "Has the following %{count} way:"
 -        other: "Has the following %{count} ways:"
 -      has_relations:
 -        one:  "Has the following %{count} relation:"
 -        other: "Has the following %{count} relations:"
 -    common_details:
 -      edited_at: "Edited at:"
 -      edited_by: "Edited by:"
 -      deleted_at: "Deleted at:"
 -      deleted_by: "Deleted by:"
 -      version: "Version:"
 -      in_changeset: "In changeset:"
 -      changeset_comment: "Comment:"
 +    node:
 +      title: "Node: %{name}"
 +      history_title: "Node History: %{name}"
 +    way:
 +      title: "Way: %{name}"
 +      history_title: "Way History: %{name}"
 +      nodes: "Nodes"
 +      also_part_of:
 +        one: "part of way %{related_ways}"
 +        other: "part of ways %{related_ways}"
 +    relation:
 +      title: "Relation: %{name}"
 +      history_title: "Relation History: %{name}"
 +      members: "Members"
 +    relation_member:
 +      entry: "%{type} %{name}"
 +      entry_role: "%{type} %{name} as %{role}"
 +      type:
 +        node: "Node"
 +        way: "Way"
 +        relation: "Relation"
      containing_relation:
        entry: "Relation %{relation_name}"
        entry_role: "Relation %{relation_name} (as %{relation_role})"
 -    map:
 -      loading: "Loading..."
 -      deleted: "Deleted"
 -      larger:
 -        area: "View area on larger map"
 -        node: "View node on larger map"
 -        way: "View way on larger map"
 -        relation: "View relation on larger map"
 -        note: "View note on larger map"
 -      edit:
 -        area: "Edit area"
 -        node: "Edit node"
 -        way: "Edit way"
 -        relation: "Edit relation"
 -        note: "Edit note"
 -    node_details:
 -      coordinates: "Coordinates:"
 -      part_of: "Part of:"
 -    node_history:
 -      node_history: "Node History"
 -      node_history_title: "Node History: %{node_name}"
 -      download_xml: "Download XML"
 -      view_details: "View details"
 -    node:
 -      node: "Node"
 -      node_title: "Node: %{node_name}"
 -      download_xml: "Download XML"
 -      view_history: "View history"
 -      edit: "Edit node"
      not_found:
 -      sorry: "Sorry, the %{type} with the id %{id}, could not be found."
 +      sorry: "Sorry, %{type} #%{id} could not be found."
        type:
          node: node
          way: way
          way: way
          relation: relation
          changeset: changeset
 -    paging_nav:
 -      showing_page: "page"
 -      of: "of"
      redacted:
        redaction: "Redaction %{id}"
        message_html: "Version %{version} of this %{type} cannot be shown as it has been redacted. Please see %{redaction_link} for details."
          node: "node"
          way: "way"
          relation: "relation"
 -    relation_details:
 -      members: "Members:"
 -      part_of: "Part of:"
 -    relation_history:
 -      relation_history: "Relation History"
 -      relation_history_title: "Relation History: %{relation_name}"
 -      download_xml: "Download XML"
 -      view_details: "View details"
 -    relation_member:
 -      entry: "%{type} %{name}"
 -      entry_role: "%{type} %{name} as %{role}"
 -      type:
 -        node: "Node"
 -        way: "Way"
 -        relation: "Relation"
 -    relation:
 -      relation: "Relation"
 -      relation_title: "Relation: %{relation_name}"
 -      download_xml: "Download XML"
 -      view_history: "View history"
      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"
 -      view_data: "View data for current map 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: "Loading %{num_features} features, which may make your browser slow or unresponsive. Are sure you want to display this data?"
        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 map data, too large of an area (%{bbox_size}). Area must be smaller than %{max_bbox_size} square degrees."
        loading: "Loading..."
 -      show_history: "Show History"
 -      wait: "Wait..."
 -      history_for_feature: "History for %{feature}"
 -      details: "Details"
 -      private_user: "private user"
 -      edited_by_user_at_timestamp: "Edited by %{user} at %{timestamp}"
 -      object_list:
 -        heading: "Object list"
 -        back: "Back to object list"
 -        type:
 -          node: "Node"
 -          way: "Way"
 -          # There is no 'relation' type because it is not represented in OpenLayers
 -        api: "Retrieve this area from the API"
 -        details: "Details"
 -        selected:
 -          type:
 -            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}"
 -            # There is no 'relation' type because it is not represented in OpenLayers
      tag_details:
 -      tags: "Tags:"
 +      tags: "Tags"
        wiki_link:
          key: "The wiki description page for the %{key} tag"
          tag: "The wiki description page for the %{key}=%{value} tag"
        wikipedia_link: "The %{page} article on Wikipedia"
 -    way_details:
 -      nodes: "Nodes:"
 -      part_of: "Part of:"
 -      also_part_of:
 -        one: "part of way %{related_ways}"
 -        other: "part of ways %{related_ways}"
 -    way_history:
 -      way_history: "Way History"
 -      way_history_title: "Way History: %{way_name}"
 -      download_xml: "Download XML"
 -      view_details: "View details"
 -    way:
 -      way: "Way"
 -      way_title: "Way: %{way_name}"
 -      download_xml: "Download XML"
 -      view_history: "View history"
 -      edit: "Edit way"
      note:
        title: "Note"
 -      open_title: "Unresolved note: %{note_name}"
 -      closed_title: "Resolved note: %{note_name}"
 -      opened: "Opened:"
 -      last_modified: "Last modified:"
 -      closed: "Closed:"
 -      at_html: "%{when} ago"
 -      at_by_html: "%{when} ago by %{user}"
 -      description: "Description:"
 -      comments: "Comments:"
 +      new_note: "New Note"
 +      open_title: "Unresolved note #%{note_name}"
 +      closed_title: "Resolved note #%{note_name}"
 +      open_by: "Created by %{user} <abbr title='%{exact_time}'>%{when} ago</abbr>"
 +      open_by_anonymous: "Created by anonymous <abbr title='%{exact_time}'>%{when} ago</abbr>"
 +      commented_by: "Comment from %{user} <abbr title='%{exact_time}'>%{when} ago</abbr>"
 +      commented_by_anonymous: "Comment from anonymous <abbr title='%{exact_time}'>%{when} ago</abbr>"
 +      closed_by: "Resolved by %{user} <abbr title='%{exact_time}'>%{when} ago</abbr>"
 +      closed_by_anonymous: "Resolved by anonymous <abbr title='%{exact_time}'>%{when} ago</abbr>"
 +      reopened_by: "Reactivated by %{user} <abbr title='%{exact_time}'>%{when} ago</abbr>"
 +      reopened_by_anonymous: "Reactivated by anonymous <abbr title='%{exact_time}'>%{when} ago</abbr>"
    changeset:
      changeset_paging_nav:
        showing_page: "Page %{page}"
        next: "Next »"
        previous: "« Previous"
      changeset:
 -      still_editing: "(still editing)"
        anonymous: "Anonymous"
 -      no_comment: "(none)"
        no_edits: "(no edits)"
 -      show_area_box: "show area box"
 -      big_area: "(big)"
        view_changeset_details: "View changeset details"
      changesets:
        id: "ID"
      list:
        title: "Changesets"
        title_user: "Changesets by %{user}"
 -      title_bbox: "Changesets within %{bbox}"
 -      title_user_bbox: "Changesets by %{user} within %{bbox}"
        title_friend: "Changesets by your friends"
        title_nearby: "Changesets by nearby users"
 -      heading: "Changesets"
 -      heading_user: "Changesets"
 -      heading_bbox: "Changesets"
 -      heading_user_bbox: "Changesets"
 -      heading_friend: "Changesets"
 -      heading_nearby: "Changesets"
 -      description: "Browse recent contributions to the map"
 -      description_user: "Changesets by %{user}"
 -      description_bbox: "Changesets within %{bbox}"
 -      description_user_bbox: "Changesets by %{user} within %{bbox}"
 -      description_friend: "Changesets by your friends"
 -      description_nearby: "Changesets by nearby users"
 -      empty_user_html: "It looks you haven't made any edits yet. To get started, check out the <a href='http://wiki.openstreetmap.org/wiki/Beginners_Guide_1.3'>Beginners Guide</a>."
 -      empty_anon_html: "No edits made yet."
 +      empty: "No changesets in this area."
 +      no_more: "No more changesets in this area."
 +      load_more: "Load more"
      timeout:
        sorry: "Sorry, the list of changesets you requested took too long to retrieve."
    diary_entry:
        newer_comments: "Newer Comments"
        older_comments: "Older Comments"
    export:
 +    title: "Export"
      start:
        area_to_export: "Area to Export"
        manually_select: "Manually select a different area"
        output: "Output"
        paste_html: "Paste HTML to embed in website"
        export_button: "Export"
 -    start_rjs:
 -      export: "Export"
 -      drag_a_box: "Drag a box on the map to select an area"
 -      manually_select: "Manually select a different area"
 -      click_add_marker: "Click on the map to add a marker"
 -      change_marker: "Change marker position"
 -      add_marker: "Add a marker to the map"
    geocoder:
      search:
        title:
+         latlon: 'Results from <a href="http://openstreetmap.org/">Internal</a>'
          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>'
        alt_text: OpenStreetMap logo
      home: Go to Home Location
      logout: Logout
 -    log_in: log in
 +    log_in: Log In
      log_in_tooltip: Log in with an existing account
 -    sign_up: sign up
 +    sign_up: Sign Up
      sign_up_tooltip: Create an account for editing
 -    view: View
 -    view_tooltip: View the map
      edit: Edit
      history: History
 +    export: Export
      data: Data
      export_data: Export Data
      gps_traces: GPS Traces
      user_diaries_tooltip: View user diaries
      edit_with: Edit with %{editor}
      tag_line: The Free Wiki World Map
 -    intro_1: "OpenStreetMap is a free worldwide map, created by people like you."
 -    intro_2_html: "The data is free to %{download} and %{use} under its %{license}. %{create_account} to improve the map."
 +    intro_header: Welcome to OpenStreetMap!
 +    intro_text: OpenStreetMap is an editable map of the world created by people like you, and free to download and use under an open license.
      intro_2_create_account: "Create a user account"
 -    intro_2_license: "open license"
 -    intro_2_use: "use"
 -    intro_2_download: "download"
 -    intro_2_use_url: "http://wiki.openstreetmap.org/wiki/Using_OpenStreetMap"
      partners_html: "Hosting is supported by %{ucl}, %{ic} and %{bytemark}, and other %{partners}."
      partners_ucl: "the UCL VR Centre"
      partners_ic: "Imperial College London"
      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 essential database maintenance work is carried out."
      donate: "Support OpenStreetMap by %{link} to the Hardware Upgrade Fund."
 -    donate_link_text: donating
      help: Help
 -    help_centre: Help Centre
 -    help_url: http://help.openstreetmap.org/
 -    help_title: Help site for the project
 -    wiki: Wiki
 -    wiki_url: http://wiki.openstreetmap.org/
 -    wiki_title: Wiki site for the project
 -    documentation: Documentation
 -    documentation_title: Documentation for the project
 +    about: About
      copyright: "Copyright & License"
      community: Community
      community_blogs: "Community Blogs"
      make_a_donation:
        title: Support OpenStreetMap with a monetary donation
        text: Make a Donation
 -
 +    learn_more: "Learn More"
    license_page:
      foreign:
        title: About this translation
      questions:
        title: Any questions?
        paragraph_1_html: |
 -        Need help mapping, or not clear on how to use OpenStreetMap? Get your questions answered
 -        on <a href='http://help.openstreetmap.org/'>the help website</a>.
 +        OpenStreetMap has several resources for learning about the project, asking and answering
 +        questions, and collaboratively discussing and documenting mapping topics.
 +        <a href='%{help_url}'>Get help here</a>.
      start_mapping: Start Mapping
      add_a_note:
        title: No Time To Edit? Add a Note!
          Just go to <a href='%{map_url}'>the map</a> and click the note icon:
          <span class='icon note'></span>. This will add a marker to the map, which you can move
          by dragging. Add your message, then click save, and other mappers will investigate.
 +  help_page:
 +    title: Getting Help
 +    introduction: |
 +      OpenStreetMap has several resources for learning about the project, asking and answering questions,
 +      and collaboratively discussing and documenting mapping topics.
 +    welcome:
 +      url: /welcome
 +      title: Welcome to OSM
 +      description: Start with this quick guide covering the OpenStreetMap basics.
 +    help:
 +      url: https://help.openstreetmap.org/
 +      title: help.openstreetmap.org
 +      description: Ask a question or look up answers on OSM's question-and-answer site.
 +    wiki:
 +      url: http://wiki.openstreetmap.org/
 +      title: wiki.openstreetmap.org
 +      description: Browse the wiki for in-depth OSM documentation.
 +  about_page:
 +    next: Next
 +    copyright_html: <span>&copy;</span>OpenStreetMap<br>contributors
 +    used_by: "%{name} powers map data on hundreds of web sites, mobile apps, and hardware devices"
 +    lede_text: |
 +      OpenStreetMap is built by a community of mappers that contribute and maintain data
 +      about roads, trails, cafés, railway stations, and much more, all over the world.
 +    local_knowledge_title: Local Knowledge
 +    local_knowledge_html: |
 +      OpenStreetMap emphasizes local knowledge. Contributors use
 +      aerial imagery, GPS devices, and low-tech field maps to verify that OSM
 +      is accurate and up to date.
 +    community_driven_title: Community Driven
 +    community_driven_html: |
 +      OpenStreetMap's community is diverse, passionate, and growing every day.
 +      Our contributors include enthusiast mappers, GIS professionals, engineers
 +      running the OSM servers, humanitarians mapping disaster-affected areas,
 +      and many more.
 +      To learn more about the community, see the <a href='%{diary_path}'>user diaries</a>,
 +      <a href='http://blogs.openstreetmap.org/'>community blogs</a>, and
 +      the <a href='http://www.osmfoundation.org/'>OSM Foundation</a> website.
 +    open_data_title: Open Data
 +    open_data_html: |
 +      OpenStreetMap is <i>open data</i>: you are free to use it for any purpose
 +      as long as you credit OpenStreetMap and its contributors. If you alter or
 +      build upon the data in certain ways, you may distribute the result only
 +      under the same licence. See the <a href='%{copyright_path}'>Copyright and
 +      License page</a> for details.
 +    partners_title: Partners
    notifier:
      diary_comment_notification:
        subject: "[OpenStreetMap] %{user} commented on your diary entry"
        where_am_i: "Where am I?"
        where_am_i_title: Describe the current location using the search engine
        submit_text: "Go"
 -      search_help: "examples: 'Alkmaar', 'Regent Street, Cambridge', 'CB2 5AQ', or 'post offices near Lünen' <a href='http://wiki.openstreetmap.org/wiki/Search'>more examples...</a>"
      key:
        table:
          entry:
          overlays: Enable overlays for troubleshooting the map
          title: "Layers"
        copyright: "© <a href='%{copyright_url}'>OpenStreetMap contributors</a>"
 +      donate_link_text: "<a class='donate-attr' href='%{donate_url}'>Make a Donation</a>"
      site:
        edit_tooltip: Edit the map
        edit_disabled_tooltip: Zoom in to edit the map
 -      history_tooltip: View edits for this area
 -      history_disabled_tooltip: Zoom in to view edits for this area
        createnote_tooltip: Add a note to the map
        createnote_disabled_tooltip: Zoom in to add a note to the map
 +      map_notes_zoom_in_tooltip: Zoom in to see map notes
 +      map_data_zoom_in_tooltip: Zoom in to see map data
      notes:
        new:
          intro: "In order to improve the map the information you enter is shown to other mappers, so please be as descriptive and precise as possible when moving the marker to the correct position and entering your note below."
diff --combined config/routes.rb
index 9eda73015d74cf470b03e74ed145269dd21172ec,81548af12107e0cb68139462065b703c1187da96..59c5b6803011617f27cc54e00aa3b86387bacc83
@@@ -102,24 -102,23 +102,24 @@@ OpenStreetMap::Application.routes.draw 
    end
  
    # Data browsing
 -  match '/browse/start' => 'browse#start', :via => :get
 -  match '/browse/way/:id' => 'browse#way', :via => :get, :id => /\d+/
 +  match '/browse/way/:id' => 'browse#way', :via => :get, :id => /\d+/, :as => :way
    match '/browse/way/:id/history' => 'browse#way_history', :via => :get, :id => /\d+/
 -  match '/browse/node/:id' => 'browse#node', :via => :get, :id => /\d+/
 +  match '/browse/node/:id' => 'browse#node', :via => :get, :id => /\d+/, :as => :node
    match '/browse/node/:id/history' => 'browse#node_history', :via => :get, :id => /\d+/
 -  match '/browse/relation/:id' => 'browse#relation', :via => :get, :id => /\d+/
 +  match '/browse/relation/:id' => 'browse#relation', :via => :get, :id => /\d+/, :as => :relation
    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+/, :as => "browse_note"
 +  match '/new_note' => 'browse#new_note', :via => :get
    match '/user/:display_name/edits' => 'changeset#list', :via => :get
    match '/user/:display_name/edits/feed' => 'changeset#feed', :via => :get, :defaults => { :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 '/browse/changesets/feed' => 'changeset#feed', :via => :get, :defaults => { :format => :atom }
 -  match '/browse' => 'changeset#list', :via => :get
 +
 +  get '/browse/changesets/feed', :to => redirect('/history/feed')
 +  get '/browse/changesets',      :to => redirect('/history')
 +  get '/browse',                 :to => redirect('/history')
  
    # web site
    root :to => 'site#index', :via => [:get, :post]
    match '/copyright/:copyright_locale' => 'site#copyright', :via => :get
    match '/copyright' => 'site#copyright', :via => :get
    match '/welcome' => 'site#welcome', :via => :get, :as => :welcome
 +  match '/help' => 'site#help', :via => :get, :as => :help
 +  match '/about' => 'site#about', :via => :get, :as => :about
    match '/history' => 'changeset#list', :via => :get
    match '/history/feed' => 'changeset#feed', :via => :get, :defaults => { :format => :atom }
 -  match '/export' => 'site#index', :export => true, :via => :get
 +  match '/export' => 'site#export', :via => :get
    match '/login' => 'user#login', :via => [:get, :post]
    match '/logout' => 'user#logout', :via => [:get, :post]
    match '/offline' => 'site#offline', :via => :get
    match '/traces/mine' => 'trace#mine', :via => :get
    match '/trace/create' => 'trace#create', :via => [:get, :post]
    match '/trace/:id/data' => 'trace#data', :via => :get, :id => /\d+/
-   match '/trace/:id/edit' => 'trace#edit', :via => [:get, :post, :patch], :id => /\d+/
+   match '/trace/:id/edit' => 'trace#edit', :via => [:get, :post, :patch], :id => /\d+/, :as => "trace_edit"
    match '/trace/:id/delete' => 'trace#delete', :via => :post, :id => /\d+/
  
    # diary pages
    match '/users/:status' => 'user#list', :via => [:get, :post]
  
    # geocoder
 -  match '/geocoder/search' => 'geocoder#search', :via => :post
 +  match '/search' => 'geocoder#search', :via => :get, :as => :search
+   match '/geocoder/search_latlon' => 'geocoder#search_latlon', :via => :get
    match '/geocoder/search_us_postcode' => 'geocoder#search_us_postcode', :via => :get
    match '/geocoder/search_uk_postcode' => 'geocoder#search_uk_postcode', :via => :get
    match '/geocoder/search_ca_postcode' => 'geocoder#search_ca_postcode', :via => :get
    match '/geocoder/search_geonames_reverse' => 'geocoder#search_geonames_reverse', :via => :get
  
    # export
 -  match '/export/start' => 'export#start', :via => :get
    match '/export/finish' => 'export#finish', :via => :post
    match '/export/embed' => 'export#embed', :via => :get