]> git.openstreetmap.org Git - rails.git/commitdiff
Merge branch 'master' into notes
authorTom Hughes <tom@compton.nu>
Tue, 15 Jan 2013 21:11:35 +0000 (21:11 +0000)
committerTom Hughes <tom@compton.nu>
Tue, 15 Jan 2013 21:11:35 +0000 (21:11 +0000)
Conflicts:
Gemfile.lock
app/assets/stylesheets/common.css.scss
app/views/browse/_map.html.erb
app/views/user/view.html.erb
config/locales/en.yml

1  2 
Gemfile
Gemfile.lock
app/assets/javascripts/index.js
app/assets/stylesheets/common.css.scss
app/helpers/application_helper.rb
app/views/browse/_map.html.erb
app/views/user/view.html.erb
config/locales/de.yml
config/locales/en.yml
test/functional/browse_controller_test.rb

diff --combined Gemfile
index 5b5a76e650d15abc1f14bed7fe936864c1102c05,fee9abb2d00605e42d49cb08ff877adaaf85f675..b06702fb39e0d6f44ef90fedbca997fc332113eb
+++ b/Gemfile
@@@ -2,7 -2,7 +2,7 @@@
  source 'http://rubygems.org'
  
  # Require rails
- gem 'rails', '3.2.9'
+ gem 'rails', '3.2.11'
  
  # Require things which have moved to gems in ruby 1.9
  gem 'bigdecimal', :platforms => :ruby_19
@@@ -29,7 -29,6 +29,7 @@@ gem 'paperclip', '~> 2.0
  gem 'deadlock_retry', '>= 1.2.0'
  gem 'i18n-js', '>= 3.0.0.rc2'
  gem 'rack-cors'
 +gem 'jsonify-rails'
  
  # We need ruby-openid 2.2.0 or later for ruby 1.9 support
  gem 'ruby-openid', '>= 2.2.0'
@@@ -67,6 -66,6 +67,6 @@@ group :assets d
    gem 'sass-rails', '~> 3.2.3'
    gem 'coffee-rails', '~> 3.2.1'
    gem 'uglifier', '>= 1.0.3'
-   gem 'therubyracer'
+   gem 'therubyracer', '~> 0.10.2'
    gem 'ejs'
  end
diff --combined Gemfile.lock
index 8fea3da8e6f6d5b9265d9486dda3076946355a24,37129758dd601e4647f917ec51a847255a23401e..ec1d4e3573089b2f53504cfb75ae326a718190af
@@@ -2,12 -2,12 +2,12 @@@ GE
    remote: http://rubygems.org/
    specs:
      SystemTimer (1.2.3)
-     actionmailer (3.2.9)
-       actionpack (= 3.2.9)
+     actionmailer (3.2.11)
+       actionpack (= 3.2.11)
        mail (~> 2.4.4)
-     actionpack (3.2.9)
-       activemodel (= 3.2.9)
-       activesupport (= 3.2.9)
+     actionpack (3.2.11)
+       activemodel (= 3.2.11)
+       activesupport (= 3.2.11)
        builder (~> 3.0.0)
        erubis (~> 2.7.0)
        journey (~> 1.0.4)
        rack-cache (~> 1.2)
        rack-test (~> 0.6.1)
        sprockets (~> 2.2.1)
-     activemodel (3.2.9)
-       activesupport (= 3.2.9)
+     activemodel (3.2.11)
+       activesupport (= 3.2.11)
        builder (~> 3.0.0)
-     activerecord (3.2.9)
-       activemodel (= 3.2.9)
-       activesupport (= 3.2.9)
+     activerecord (3.2.11)
+       activemodel (= 3.2.11)
+       activesupport (= 3.2.11)
        arel (~> 3.0.2)
        tzinfo (~> 0.3.29)
-     activeresource (3.2.9)
-       activemodel (= 3.2.9)
-       activesupport (= 3.2.9)
-     activesupport (3.2.9)
+     activeresource (3.2.11)
+       activemodel (= 3.2.11)
+       activesupport (= 3.2.11)
+     activesupport (3.2.11)
        i18n (~> 0.6)
        multi_json (~> 1.0)
      arel (3.0.2)
      bigdecimal (1.1.0)
      builder (3.0.4)
--    cocaine (0.4.2)
++    climate_control (0.0.3)
++      activesupport (>= 3.0)
++    cocaine (0.5.1)
++      climate_control (>= 0.0.3, < 1.0)
      coffee-rails (3.2.2)
        coffee-script (>= 2.2.0)
        railties (~> 3.2.0)
      htmlentities (4.3.1)
      http_accept_language (1.0.2)
      httpauth (0.2.0)
-     httpclient (2.3.0.1)
+     httpclient (2.3.2)
      i18n (0.6.1)
      i18n-js (3.0.0.rc3)
        i18n
      iconv (0.1)
      journey (1.0.4)
-     jquery-rails (2.1.3)
-       railties (>= 3.1.0, < 5.0)
-       thor (~> 0.14)
-     json (1.7.5)
+     jquery-rails (2.1.4)
+       railties (>= 3.0, < 5.0)
+       thor (>= 0.14, < 2.0)
+     json (1.7.6)
 +    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)
-     libxml-ruby (2.3.3)
+     libxml-ruby (2.4.0)
      mail (2.4.4)
        i18n (>= 0.4.0)
        mime-types (~> 1.16)
        treetop (~> 1.4.8)
-     memcached (1.4.6)
+     memcached (1.5.0)
      mime-types (1.19)
-     minitest (4.3.0)
-     multi_json (1.3.7)
+     minitest (4.4.0)
+     multi_json (1.5.0)
      multipart-post (1.1.5)
-     nokogiri (1.5.5)
+     nokogiri (1.5.6)
      oauth (0.4.7)
      oauth-plugin (0.4.1)
        multi_json
      pg (0.14.1)
      polyglot (0.3.3)
      r2 (0.0.3)
-     rack (1.4.1)
 -    rack (1.4.3)
++    rack (1.4.4)
      rack-cache (1.2)
        rack (>= 0.4)
      rack-cors (0.2.7)
        rack
      rack-test (0.6.2)
        rack (>= 1.0)
-     rails (3.2.9)
-       actionmailer (= 3.2.9)
-       actionpack (= 3.2.9)
-       activerecord (= 3.2.9)
-       activeresource (= 3.2.9)
-       activesupport (= 3.2.9)
+     rails (3.2.11)
+       actionmailer (= 3.2.11)
+       actionpack (= 3.2.11)
+       activerecord (= 3.2.11)
+       activeresource (= 3.2.11)
+       activesupport (= 3.2.11)
        bundler (~> 1.0)
-       railties (= 3.2.9)
-     rails-i18n (0.7.0)
+       railties (= 3.2.11)
+     rails-i18n (0.7.2)
        i18n (~> 0.5)
-     railties (3.2.9)
-       actionpack (= 3.2.9)
-       activesupport (= 3.2.9)
+     railties (3.2.11)
+       actionpack (= 3.2.11)
+       activesupport (= 3.2.11)
        rack-ssl (~> 1.3.2)
        rake (>= 0.8.7)
        rdoc (~> 3.4)
        thor (>= 0.14.6, < 2.0)
-     rake (10.0.2)
+     rake (10.0.3)
      rdoc (3.12)
        json (~> 1.4)
      redcarpet (2.2.2)
      ruby-openid (2.2.2)
      sanitize (2.0.3)
        nokogiri (>= 1.4.4, < 1.6)
-     sass (3.2.3)
-     sass-rails (3.2.5)
+     sass (3.2.5)
 -    sass-rails (3.2.5)
++    sass-rails (3.2.6)
        railties (~> 3.2.0)
        sass (>= 3.1.10)
        tilt (~> 1.3)
-     sprockets (2.2.1)
+     sprockets (2.2.2)
        hike (~> 1.2)
        multi_json (~> 1.0)
        rack (~> 1.0)
        libv8 (~> 3.3.10)
      thor (0.16.0)
      tilt (1.3.3)
-     timecop (0.5.3)
 -    timecop (0.5.7)
++    timecop (0.5.9)
      treetop (1.4.12)
        polyglot
        polyglot (>= 0.3.1)
@@@ -183,7 -178,6 +186,7 @@@ DEPENDENCIE
    i18n-js (>= 3.0.0.rc2)
    iconv
    jquery-rails
 +  jsonify-rails
    libxml-ruby (>= 2.0.5)
    memcached (>= 1.4.1)
    minitest
    pg
    r2
    rack-cors
-   rails (= 3.2.9)
+   rails (= 3.2.11)
    rails-i18n (>= 0.6.3)
    redcarpet
    rinku (>= 1.2.2)
    ruby-openid (>= 2.2.0)
    sanitize
    sass-rails (~> 3.2.3)
-   therubyracer
+   therubyracer (~> 0.10.2)
    timecop
    uglifier (>= 1.0.3)
    validates_email_format_of (>= 1.5.1)
index c90d96c3997d93219c95293c8fd192f1bb27a7cc,5cf9c15ff0311a7d5763a72f95f160624125341a..dc5c40bf2eb5d8af589c7885fa7de25077714f97
@@@ -2,7 -2,6 +2,7 @@@
  //= require index/browse
  //= require index/export
  //= require index/key
 +//= require index/notes
  
  $(document).ready(function () {
    var permalinks = $("#permalink").html();
    if ($("#query").val()) {
      $("#search_form").submit();
    }
+   // Focus the search field for browsers that don't support
+   // the HTML5 'autofocus' attribute
+   if (!("autofocus" in document.createElement("input"))) {
+     $("#query").focus();
+   }
  });
index 96856228c0b1b23acde7a14cf42853bc8a574469,255b846cf8159a0634700ef46b7143d6cead09c0..062c782a7c13c34328ccc59f10885fe5f03f0b94
@@@ -1,11 -1,57 +1,57 @@@
  /* Styles common to large and small screens */
  
+ /* Minimal CSS reset */
+ html, body, ul, ol, li, form, fieldset, legend, h1, h2, h3, h4, h5, h6, p {
+   margin: 0;
+   padding: 0;
+   border: 0;
+   font-size:100%;
+ }
+ fieldset,img { border: 0; }
+ legend { color: #000; }
+ sup { vertical-align: text-top; }
+ sub { vertical-align: text-bottom; }
+ table {
+   border-collapse: collapse;
+   border-spacing: 0;
+ }
+ li { list-style: none; }
+ input,
+ select,
+ textarea,
+ body { font: 14px/20px "Helvetica Neue",Arial,sans-serif; }
+ abbr, acronym {
+   border-bottom: .1em dotted;
+   cursor: help;
+ }
+ /* Micro Clearfix | Details: http://nicolasgallagher.com/micro-clearfix-hack/ */
+ .clearfix:before,
+ .clearfix:after {
+     content: " ";
+     display: table;
+ }
+ .clearfix:after {
+     clear: both;
+ }
  /* Default rules for the body of every page */
  
  body {
    font-family: 'Helvetica Neue',Arial,sans-serif;
    font-size: 14px;
-   line-height: 20px;
+   line-height: 1.6666;
    color: #222;
    background-color: #fff;
    margin: 0px;
@@@ -17,15 -63,75 +63,75 @@@ body.slim 
    background-color: #f0f0f0;
  }
  
+ h1, h2, h3 {
+   margin-top: 10px;
+   margin-bottom: 20px;
+   font-weight: bold;
+   line-height: 1.2;
+ }
+ h1, h2 {
+   font-size: 32px;
+ }
+ #content h2 {
+   font-size: 24px;
+ }
+ h3 {
+   font-size: 21px;
+   margin-top: 10px;
+   margin-bottom: 20px;
+ }
+ h4,h5,h6 {
+   font-size: 14px;
+   margin-top: 10px;
+   margin-bottom: 20px;
+   font-weight: bold;
+   line-height: 1.5;
+ }
+ p, ul {
+   margin-bottom: 20px;
+ }
+ p > img {
+   width: auto;
+   max-width: 100%;
+ }
+ small, aside {
+   font-size: 12px;
+ }
+ h1:first-child,
+ h2:first-child,
+ h3:first-child,
+ h4:first-child,
+ h5:first-child,
+ h6:first-child {
+   margin-top: 0;
+ }
+ .column-1 {
+   width: 50%;
+   margin-bottom: 20px;
+ }
+ .small_icon {
+   vertical-align: middle;
+   margin-right: 5px;
+ }
  /* Rules for links */
  
  a {
    color: #00f;
    text-decoration: none;
- }
- a:hover {
-   text-decoration: underline;
+   &:hover {
+     text-decoration: underline;
+   }
  }
  
  /* Rules for horizontal lines */
@@@ -37,23 -143,34 +143,34 @@@ hr 
    height: 1px;
  }
  
- /* Default rules for headings */
+ /* General styles for tables */
  
- h2 {
-   margin: 5px 0;
-   font-size: 25px;
-   line-height: 30px;
+ table {
+   width: 100%;
+   margin-bottom: 20px;
+   th, td {
+     text-align: left;
+     padding: 5px;
+     line-height: 20px;
+   }
+   th {
+     font-weight: bold;
+     vertical-align: top;
+   }
+   td {
+     vertical-align: middle;
+   }
  }
  
  /* Rules for the whole left sidebar, including the logo */
  
  #left {
    position: absolute;
-   top: 30px;
-   bottom: 0;
+   height: 100%;
    width: 185px;
    font-size: 11px;
    line-height: 12px;
+   z-index: 100;
    border-right: 1px solid #ccc;
  }
  
    display: block;
    width: 170px;
    min-width: 170px;
-   padding: 5px;
+   padding: 20px 5px;
    text-align: center;
    margin: auto;
  }
  
- #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 {
   */
  
  .sidebar-alert {
-   padding: 4px 5px 4px 5px;
+   padding: 5px;
    border-top: 1px solid #ccc;
    margin-top: 4px;
    margin-bottom: -4px;
    background: #e00;
-   font-size: 13px;
+   font-size: 12px;
    font-weight: bold;
-   line-height: 17px;
    p {
      margin: 5px;
    }
   */
  
  .sidebar-notice {
-   padding: 4px 5px 4px 5px;
+   padding: 5px;
    border-top: 1px solid #ccc;
    margin-top: 4px;
    margin-bottom: -4px;
    background: #ea0;
-   font-size: 13px;
-   line-height: 17px;
+   font-size: 12px;
    p {
      margin: 5px;
    }
    border-top: 1px solid #ccc;
  }
  
+ .left_menu img {
+   margin: 10px 0px;
+ }
  .left_menu ul {
    padding: 0;
    margin: 0;
    text-align: left;
  }
  
- .optionalbox h1 {
-   font-size: 14px;
-   font-weight: bold;
-   line-height: 20px;
-   margin: 0px;
-   vertical-align: bottom;
- }
  /* Rules for the search box */
  
- .whereami {
- }
  #search_field form {
    width: 165px;
-   margin: 0px;
-   padding: 0px;
  }
  
  #search_field {
  
  #search_field input[type="text"] {
    width: 165px;
+   padding: 3px;
    font-size: 14px;
    line-height: 15px;
    height: 25px;
  }
  
  #search_field input[type="submit"] {
+   border: 0;
+   margin: 0;
+   padding: 0;
    width: 15px;
    height: 15px;
-   border: 0px;
    text-indent: -1000px;
    overflow: hidden;
-   text-transform: capitalize;
-   padding-left: 0px;
-   padding-right: 0px;
-   background: image-url("sprite.png");
+   background: image-url("sprite.png") 0 0 no-repeat;
    position: absolute;
    top: 5px;
-   right: 4px;
+   right: 5px;
    cursor: pointer;
  }
  
    margin: 5px 0 0 0;
  }
  
+ /* Utility for de-emphasizing content */
  .deemphasize {
    color: #999;
- }
- .deemphasize a {
-   color: #7092FF;
+   a {
+     color: #7092FF;
+   }
  }
  
  /* Rules for donation request box */
    display: block;
    position: relative;
    width: 153px;
-   margin: 10px 10px 0px 10px;
    padding: 5px;
    border: 1px solid #AED1A0;
    background: #cbeea7;
    border-radius: 2px;
    -moz-border-radius: 2px;
    color: #222;
+   margin: 10px 10px 0px 10px;
  }
  
  .donate:hover {
    width: 15px;
    height: 15px;
    border: 0px;
-   padding-left: 0px;
-   padding-right: 0px;
    background: image-url("sprite.png") 0 -30px no-repeat;
    position: absolute;
    top: 8px;
  /* Rules for Creative Commons logo button */
  
  #cclogo {
-   margin-top: 10px;
-   margin-bottom: 10px;
+   margin: 10px 0;
+   float: right;
  }
  
  /* Rules for tabbed navigation bar */
  
  #top-bar {
-   position: absolute;
-   z-index: 10000;
-   top: 0;
-   left: 185px;
-   right: 0;
+   position: relative;
+   margin-left: 185px;
    height: 29px;
    border-bottom: 1px solid #ccc;
    background: white;
+   z-index: 100;
+ }
+ .site-edit #top-bar,
+ .site-index #top-bar,
+ .site-export #top-bar {
+   position: fixed;
+   left: 0;
+   right: 0;
  }
  
  #tabnav {
-   padding: 0;
-   margin0;
-   overflow:hidden;
+   height: 29px;
+   margin-bottom:0;
+   overflow: hidden;
  }
  
  #tabnav li {
-   margin: 0px;
-   padding: 0px;
    display: inline;
-   list-style-type: none;
  }
  
  #tabnav a, #tabnav a:link, #tabnav a:visited {
    float: left;
    background: #fff;
-   font-size: 14px;
-   line-height: 19px;
    font-weight: bold;
-   padding: 5px 10px;
-   margin-right: 1px;
+   padding: 3px 10px;
    text-decoration: none;
    color: #333;
+   float: left;
+   margin-right: 1px;
    -webkit-transition: color 200ms ease-in;
-   -moz-transition: color 200ms ease-in;
-   -o-transition: color 200ms ease-in;
-   transition: color 200ms ease-in;
+      -moz-transition: color 200ms ease-in;
+        -o-transition: color 200ms ease-in;
+           transition: color 200ms ease-in;
  }
  
body.site-index #tabnav a#viewanchor,
body.site-edit #tabnav a#editanchor,
body.changeset-list #tabnav a#historyanchor,
body.site-export #tabnav a#exportanchor {
+ .site-index #tabnav a#viewanchor,
+ .site-edit #tabnav a#editanchor,
.changeset_list #tabnav a#historyanchor,
+ .site-export #tabnav a#exportanchor {
    border-bottom: 1px solid #aaa;
    background: #9ed485;
    color: #000;
  }
  
  #tabnav a:link:hover, #tabnav a:visited:hover {
-   text-decoration:underline;
+   text-decoration: underline;
  }
  
  #tabnav a:link.disabled,
    text-decoration: none;
  }
  
+ /* Utility for styling notification numbers */
  .count-number {
    padding: 2px 5px;
    border-radius: 3px;
-   background: #eee;
+   background: #d7d7ff;
    margin: 0 2px;
    font-size: 11px;
    color: #333;
  
  #greeting {
    float: right;
-   height: 28px;
-   margin: 0px;
-   padding-right: 10px;
-   font-size: 13px;
-   line-height: 28px;
+   padding-top: 3px;
  }
  
  .greeting-bar-unread {
  
  /* Rules for Leaflet maps */
  
- #map {
-   margin: 0px;
-   border: 0px;
-   padding: 0px;
- }
  #permalink {
    z-index: 10000;
    position: absolute;
    right: 0px;
    padding: 5px;
    background:#fff;
-   text-align: right;
-   font-size: 12px;
- }
- #permalink a {
-   padding: 5px;
  }
  
 +.leaflet-control-attribution a.disabled {
 +  color: #99c9dc;
 +  cursor: default;
 +  text-decoration: none;
 +}
 +
  .site-index .leaflet-top,
  .site-export .leaflet-top {
-   top: 40px !important;
+   top: 10px !important;
    .leaflet-control {
      margin-top: 0px !important;
    }
    left: 10px !important;
  }
  
 +.leaflet-popup-scrolled {
 +  padding-right: 20px;
 +  border-bottom: 0px !important;
 +  border-top: 0px !important;
 +}
 +
  /* Rules for edit menu */
  
  .menuicon {
-   padding: 5px;
+   padding: 0 5px;
+   font-weight: normal;
+   display: inline-block;
    &:hover {
-     background: #eee;
      text-decoration: none !important;
    }
  }
  
  .menu ul {
    margin: 0px;
-   padding: 0px;
  }
  
  .menu li {
    padding: 2px 5px;
-   margin: 0px;
-   list-style-type: none;
    border-top: 1px solid #eee;
    white-space: nowrap;
  }
    display: none;
  }
  
- .attribution_license {
+ .attribution_license,
+ .attribution_project {
    text-align: left;
  }
  
    text-align: center;
  }
  
- .attribution_project {
-   text-align: right;
- }
  /* Rules for the popout map sidebar */
  
  #sidebar {
    display: none;
    position: absolute;
-   margin: 30px 0px 0px 0px;
-   padding: 0px;
-   border-right: 1px solid #ccc;
-   width: 30%;
+   overflow: auto;
    top: 0px;
    bottom: 0px;
    left: 0px;
+   border-right: 1px solid #ccc;
+   width: 33.3333%;
+   .sidebar_heading {
+     position: relative;
+     padding: 10px 20px;
+     z-index: 9999;
+     background: #F4F4FF;
+     border-bottom: 1px solid #ccc;
+   }
+   h4 {
+     margin: 0;
+   }
+   ul {
+     margin-bottom: 0;
+     li {
+       margin-bottom: 5px;
+       &:last-child {
+         margin-bottom: 0;
+       }
+     }
+   }
  }
  
- #sidebar #sidebar_content {
-   overflow: auto;
+ #sidebar_close {
    position: absolute;
-   font-size: 13px;
-   line-height: 15px;
-   top: 29px;
-   bottom: 0px;
-   left: 0px;
-   right: 0px;
- }
- #sidebar .sidebar_title {
-   margin: 0px;
-   padding: 3px 6px 4px 6px;
-   height: 29px;
-   font-size: 14px;
-   line-height: 15px;
-   background: #ccc;
- }
- #sidebar #sidebar_title {
-   text-align: left;
+   height: 20px;
+   top: 0px;
+   bottom: 0;
+   right: 20px;
+   margin: auto;
  }
  
- #sidebar #sidebar_close {
-   text-align: right;
+ #sidebar_content {
+   position: relative;
+   bottom: 0;
+   width: 100%;
+   h4 {
+     padding: 0 20px 10px 20px;
+     margin-top: 10px;
+     margin-bottom: 0;
+     border-bottom: 1px solid #ddd;
+   }
  }
  
  /* Rules for the map key which appears in the popout sidebar */
  
- #mapkey h3 {
-   font-size: 110%;
-   font-weight: normal;
-   text-align: center;
- }
- #mapkey .mapkey-table {
-   padding-left: 5px;
-   padding-right: 5px;
+ #mapkey {
+   padding: 20px;
  }
  
  #mapkey .mapkey-table-key img {
    margin-right: auto;
  }
  
- #mapkey .mapkey-table-value {
-   font-size: 90%;
+ #mapkey td {
+   padding: 0 5px 5px 5px;
  }
  
  /* Rules for search results which appear in the popout sidebar */
    margin-bottom: 5px;
  }
  
- .search_results_heading {
-   margin: 0px;
-   padding: 2px 5px;
-   border-bottom: 1px solid #ccc;
-   font-weight: bold;
+ .search_results_entry {
+   margin-bottom: 0 ;
  }
  
- .search_results_entry {
-   margin: 0px;
-   padding: 2px 5px;
+ .search_results_entry .search_searching {
+   text-align: center;
+   margin: 20px auto;
+   width: 20px;
+   display: block;
  }
  
+ ul.results-list li { border-bottom: 1px solid #ccc; }
  .search_results_error {
-   margin: 0px;
-   padding: 2px 6px 0px;
    color: #f00;
  }
  
  /* Rules for data browser information which appears in the popout sidebar */
  
- .browse_heading {
-   margin: 0px;
-   padding: 3px 6px;
-   border: 1px solid #ccc;
-   background: #ddd;
+ #browse_content {
+   position: relative;
+   .browse_show_list.button {
+     position: absolute;
+     left: 20px;
+     right: 20px;
+     bottom: -40px;
+     margin-bottom: 0;
+   }
+   a.more-details {
+     position: absolute;
+     top: 0;
+     right: 20px;
+   }
+   ul li {
+     margin-bottom: 0;
+   }
  }
  
  .browse_details {
-   margin: 0px;
-   padding: 0px 6px;
+   position: relative;
  }
  
- /* Rules for export information which appears in the popout sidebar */
- .export_heading {
-   margin: 0px;
-   padding: 2px 5px;
-   border-bottom: 1px solid #ccc;
-   font-weight: bold;
+ .browse_status {
+   display: none;
  }
  
+ /* Rules for export information which appears in the popout sidebar */
  .export_bounds {
-   width: 100%;
    text-align: center;
  }
  
- .export_bound {
-   margin: 5px;
+ .export_area_inputs {
+   margin-bottom: 10px;
  }
  
- .export_details {
-   padding: 2px 6px;
+ .export_bound {
+   margin: 5px;
  }
  
#export_osm {
-   display: none;
.export_details input[type="text"]#export_html_text {
+   width: 100%;
  }
  
- #export_mapnik {
-   display: none;
+ #sidebar #marker_inputs li:last-child {
+   margin-bottom: 10px;
  }
  
+ #export_osm,
+ #export_mapnik,
  #export_osmarender {
    display: none;
  }
  
- .export_hint {
-   padding: 0px 12px;
-   font-style: italic;
- }
  .export_buttons {
    width: 100%;
    text-align: center;
  
  #content {
    padding: 20px;
-   margin: 30px 0px 0px 185px;
-   border-left: 1px solid #ccc;
-   text-align: left;
+   position: relative;
  }
  
  .site-edit #content,
  .site-index #content,
  .site-export #content {
    position: fixed;
-   margin-top: 0px;
-   left: 0px;
-   right: 0px;
-   top: 0px;
-   bottom: 0px;
-   padding: 0px;
+   padding: 0;
+   top: 30px; bottom: 0;
+   left: 185px; right: 0;
+   border-left: 1px solid #ccc;
+ }
+ .wrapper {
+   margin-left: 185px;
+   border-left: 1px solid #ccc;
+   text-align: left;
  }
  
  .site-edit #content {
    margin: 10px;
    position: absolute;
    top: 0px;
+   margin-right: 5px;
  }
  
  #slim_header img {
    margin-right: 5px;
  }
  
- /* Rules for text content pages */
- .wide-table {
-   width: 100%;
- }
+ .content-heading {
+   position: relative;
+   padding: 20px;
+   background: #F4F4FF;
+   h1, h2 {
+     margin-bottom: 10px;
+     line-height: 100%;
+     &:last-child {
+       margin-bottom: 0;
+     }
+   }
+   p {
+     margin-top: 10px;
+     margin-bottom: 0px;
+   }
+ }
  
- /* Rules for the home page */
+ /* Rules for small maps in content areas */
  
- .site-index #map {
-   position: absolute;
-   top: 0px;
-   bottom: 0px;
-   left: 0px;
-   right: 0px;
+ .content_map {
+   position: relative;
+   width: 45%;
+   height: 398px;
+   border: 1px solid #ccc;
+   margin-bottom: 20px;
+   float: right;
+ }
+ .content_map #small_map {
+   height: 100%;
+   width: 100%;
+   margin-bottom: 20px;
  }
  
- .site-export #map {
+ /* Rules for the home page */
+ .site-export #map,
+ .site-index #map {
    position: absolute;
    top: 0px;
    bottom: 0px;
  
  /* Rules for the changeset list shown by the history tab etc */
  
- #changeset_list_container {
-   position: relative;
- }
  #changeset_list {
-   width: 50%;
-   font-size: small;
-   border-collapse: collapse;
-   border-width: 0px;
-   margin-top: 1px;
-   margin-bottom: 1px;
-   text-align: left;
- }
- #changeset_list td {
-   vertical-align: top;
-   padding: 3px;
- }
- #changeset_list .date {
-   white-space: nowrap;
+   width: 100%;
+   ul {
+     padding: 10px 0;
+     margin-bottom: 0px;
+     border-top: 1px solid #ccc;
+     &:last-child {
+       border-bottom: 1px solid #ccc;
+     }
+   }
+   .selected {
+     background-color: rgb(255, 255, 160);
+   }
+   .date,
+   .user {
+     border-left: 1px solid #ccc;
+     padding-left: 5px;
+     margin-right: 5px;
+   }
  }
  
- #changeset_list .user {
-   white-space: nowrap;
+ #changeset_list_map {
+   position: absolute;
+   bottom: 20px;
+   top: 20px;
+   right: 20px;
+   width: 45%;
+   min-height: 398px;
+   max-height: 598px;
+   border: 1px solid #ccc;
  }
  
- #changeset_list .area {
-   white-space: nowrap;
- }
+ /* Rules for the data browser */
  
- #changeset_list .selected {
-   background-color: rgb(255, 255, 160);
-   background-color: rgba(255, 255, 85, 0.5);
+ .browse-section {
+   border-top: 1px solid #ccc;
+   margin-top: 10px;
+   padding-top: 10px;
+   &:first-child {
+     margin-top: 0;
+   }
+   h4, p {
+     margin-bottom: 5px;
+   }
+   p, ul, .bbox {
+     margin-left: 33.3333%;
+   }
+   h4 {
+     width: 33.3333%;
+     float: left;
+   }
  }
  
- #changeset_list_map {
-   position: absolute;
-   float: right;
-   top: 0px;
-   bottom: 0px;
-   right: 0px;
-   width: 49%;
-   min-height: 400px;
-   border: solid 1px black;
+ .bbox {
+   div {
+     width: 33.3333%;
+     text-align: center;
+     padding: 5px 0;
+     overflow: hidden;
+     text-overflow: ellipsis;
+     float: left;
+   }
+   .max_lat,
+   .min_lat {
+     margin-left: auto;
+     margin-right: auto;
+     width: 100%;
+   }
  }
  
- /* Rules for the data browser */
- #browse_navigation {
-   float: right;
-   width: 250px;
-   margin-left: 10px;
-   text-align: center;
+ #browse_map .geolink {
+   display: none;
  }
  
table.browse_details th {
-   white-space: nowrap;
#browse_map .secondary-actions {
+   margin-bottom: 10px;
  }
  
- #browse_map {
-   float: right;
-   width: 250px;
-   text-align: right;
-   margin-left: 10px;
- }
- #browse_map #small_map {
-   width: 250px;
-   height: 300px;
-   border: solid 1px black;
- }
- #browse_map .geolink {
-   display: none;
- }
 +td.browse_comments {
 +  padding: 0px;
 +
 +  table {
 +    border-collapse: collapse;
 +
 +    td {
 +      padding-bottom: 10px;
 +
 +      p {
 +        margin-top: 0px;
 +        margin-bottom: 0px;
 +      }
 +
 +      span.by {
 +        font-size: small;
 +        color: #999999;
 +      }
 +    }
 +  }
 +}
 +
  /* Rules for the trace list shown by the traces tab etc */
  
  #trace_list {
-   font-size: small;
-   border-collapse: collapse;
+   font-size: 10px;
    border-width: 0px;
    text-align: right;
  }
    color: red;
  }
  
- /* Rules for the user list */
+ /* Rules for the user profile page */
  
- #user_list {
+ #userinformation {
+   min-height: 100px;
+   .userinformation-inner {
+     float: left;
+   }
+   h2 {
+     margin-top: 0;
+   }
+   .user-description {
+     width: 100%;
+     clear: both;
+   }
+   .deemphasize {
+     margin: 0;
+   }
+ }
+ .admin-user-info small {
+   margin-bottom: 10px;
+   display: inline;
+   margin-right: 20px;
+ }
+ .activity-block {
+   border-bottom: 1px solid #ccc;
+   padding-bottom: 20px;
+   float: left;
+   h3 {
+     margin-bottom: 10px;
+   }
+ }
+ .contact-activity {
+   margin-top: 20px;
    width: 100%;
-   font-size: small;
  }
  
- #user_list tr {
-   vertical-align: middle;
+ .activity-details p {
+   margin-left: 72px;
+   margin-bottom: 0;
  }
  
- #user_list p {
+ #friends-container .contact-activity ul {
+   margin-left: 72px;
+   }
+ .user-view p#no_home_location {
+   margin: 20px;
+ }
+ .user-view .user_thumbnail {
+   margin-top: 5px;
+   float: left;
+ }
+ /* Rules for the user map */
+ .content_map .leaflet-popup-content {
+   margin: 10px 15px;
+   min-height: 62px;
+ }
+ .content_map .leaflet-popup-content-wrapper {
+ -webkit-border-radius: 4px;
+   border-radius: 4px;
+ }
+ /* Rules for user popups on maps */
+ .user_popup {
+   min-width: 200px;
+ }
+ .user_popup p {
+   padding-top: 3px;
+   padding-bottom: 3px;
    margin-top: 0px;
    margin-bottom: 0px;
+   margin-left: 55px;
+   margin-right: 2px;
  }
  
#user_list_actions {
-   float: right;
-   margin-top: 10px;
.user_popup img.user_thumbnail {
+   float: left;
+   margin-right: 10px;
  }
  
- /* Rules for the diary list */
+ /* Rules for user popups on maps */
  
- .diary_entry-list img.user_image {
-   float: right;
+ .user_popup p {
+   margin-bottom: 0;
+   margin-left: 60px;
+   font-size: 12px;
  }
  
- .diary_entry-list img.user_thumbnail {
-   float: right;
+ /* Rules for the user list */
+ #user_list {
+   font-size: 10px;
+   width: 100%;
  }
  
- /* Rules for the diary entry view */
+ #user_list tr {
+   vertical-align: middle;
+ }
  
- .diary_entry-view img.user_image {
-   float: right;
+ #user_list p {
+   margin-top: 0px;
+   margin-bottom: 0px;
  }
  
.diary_entry-view img.user_thumbnail {
#user_list_actions {
    float: right;
+   margin-top: 10px;
  }
  
- /* Rules for the new diary entry page */
+ /* Rules for the diary list page */
  
- .diary_entry div#map {
-   position: relative;
-   width: 90%;
-   height: 400px;
-   border: 1px solid #ccc;
-   display: none;
+ .diary_entry-list img.user_thumbnail {
+   float: left;
  }
  
- /* Rules for the login page */
+ .diary_post {
+   position: relative;
+   margin-top: 20px;
+   padding-top: 20px;
+   border-top: 1px solid #ccc;
  
- #login_wrapper div {
-   margin: 5px;
-   padding: 15px;
-   border-radius: 15px;
-   -moz-border-radius: 15px;
+   &:first-child {
+     margin-top: 0;
+     border-top: 0;
+     padding-top: 0;
+   }
+   h1, h2 {
+     font-size: 21px;
+     line-height: 21px;
+   }
+   small.deemphasize {
+     display: block;
+   }
+   ul,
+   ol {
+     margin-bottom: 20px;
+     font-style: italic;
+     margin-left: 20px;
+   }
+   ul li {
+     list-style: disc;
+   }
+   ol li {
+     list-style: decimal;
+   }
+   ul.secondary-actions { display: inline-block;}
  }
  
- #login_login {
-   background-color: #f5f5ff;
-   border: 1px solid #f3f3ff;
-   border-radius: 15px;
-   -moz-border-radius: 15px;
+ .content-heading .hide_unless_logged_in { // hacky selector, better to just add a new class to this div
+   display: inline;
  }
  
- #login_login h1 {
-   margin-top: 5px;
+ .post_heading {
+   margin-bottom: 20px;
+   h2 {
+     margin-top: 0;
+     margin-bottom: 0;
+     font-size: 24px;
+     float: left;
+     line-height: 32px;
+   }
  }
  
- table#login_openid_buttons {
-   padding-bottom: 10px;
- }
+ /* Rules for the diary entry page */
  
- #login_openid_buttons td {
-   padding-left: 10px;
-   padding-right: 10px;
-   padding-top: 5px;
-   padding-bottom: 5px;
+ .diary_entry {
+   #map {
+     position: relative;
+     width: 90%;
+     height: 398px;
+     border: 1px solid #ccc;
+     display: none;
+     margin-bottom: 20px;
+   }
+   #newcomment {
+     border-top: 1px solid #ccc;
+     padding-top: 20px;
+     margin-top: 10px;
+   }
+   .diary-comment {
+     margin-top: 10px;
+     &:first-child {
+       margin-top: 20px;
+       padding-top: 20px;
+       border-top: 1px solid #ccc;
+     }
+     p {
+       margin-bottom: 10px;
+       margin-left: 70px;
+     }
+     .comment-heading {
+       margin-bottom: 0;
+       margin-top: 0;
+     }
+   }
  }
  
#login_openid_buttons img {
-   border: 0;
.diary_entry-view img.user_thumbnail {
+   float: left;
  }
  
- #login_signup form.button-to div {
-   margin: 0px;
-   padding: 0px;
+ /* Rules for the login page */
+ #login_openid_buttons li {
+   float: left;
+   padding: 5px 10px;
  }
  
  /* Rules for the account confirmation page */
  
  div#contributorTerms {
-   border: 1px solid black;
-   padding: 4px;
+   border: 1px solid #ccc;
+   padding: 20px;
+   margin-bottom: 20px;
    overflow: auto;
-   width: 95%;
-   height: 400px;
- }
- div#slim_content div#contributorTerms {
-   width: auto;
- }
- div#contributorTerms p#first {
-   margin-top: 0px;
+   height: 398px;
  }
  
  div#contributorTerms p#last {
@@@ -1025,14 -1216,7 +1250,7 @@@ div#contributorTerms ol 
  
  div#contributorTerms img {
    display: block;
-   margin-left: auto;
-   margin-right: auto;
-   margin-top: 10%;
- }
- form#termsForm {
-   width: 95%;
-   margin-bottom: 3em;
+   margin: 20px auto inherit auto;
  }
  
  form#termsForm div#buttons {
  }
  
  form#termsForm input#agree {
-   margin-left: 50px;
+   margin-left: 40px;
  }
  
  div#slim_content form#termsForm {
  }
  
  p#contributorGuidance {
-   background-color: #f5f5ff;
-   border: 1px solid #f3f3ff;
-   border-radius: 15px;
-   -moz-border-radius: 15px;
+   background-color: #f4f4ff;
+   border-radius: 3px;
+   -moz-border-radius: 3px;
+   margin-top: 20px;
    padding: 10px;
  }
  
  
  #accountForm .user_map {
    position: relative;
-   width: 500px;
-   height: 400px;
+   width: 498px;
+   height: 398px;
    border: 1px solid #ccc;
  }
  
- #accountForm td.accountImage {
-   img {
-     vertical-align: top;
-     margin-top: 3px;
-   }
-   table {
-     display: inline-block;
-     td {
-       padding-bottom: 0px;
-     }
-   }
+ .accountImage-options {
+   width: 50%;
+   display: inline-block;
  }
  
  .nohome .location {
    margin-top: 15px;
  }
  
- /* Rules for the user view */
- .user-view img.user_image {
-   float: right;
- }
- .user-view .user_map {
-   float: right;
-   position: relative;
-   width: 400px;
-   height: 400px;
-   border: 1px solid #ccc;
- }
- .user-view .user_map p#no_home_location {
-   position: absolute;
-   top: 0px;
-   bottom: 0px;
-   width: 90%;
-   height: 30%;
-   margin: auto 5%
- }
- /* Rules for the user map */
- .user_map .leaflet-control-pan,
- .user_map .leaflet-control-zoomslider {
-   display: none;
- }
- .user_map .leaflet-control-zoom {
-   display: block;
- }
- /* Rules for user popups on maps */
- .user_popup {
-   min-width: 200px;
- }
- .user_popup p {
-   padding-top: 3px;
-   padding-bottom: 3px;
-   margin-top: 0px;
-   margin-bottom: 0px;
-   margin-left: 55px;
-   margin-right: 2px;
- }
- .user_popup img.user_thumbnail {
-   float: left;
+ .content_map.settings_map {
+   float: none;
+   width: 50%;
  }
  
  /* Rules for message in/out box page */
  
  .messages {
    width: 100%;
-   border-collapse: collapse;
-   border-spacing: 0px;
-   border-width: 0px;
+   border: 1px solid #ddd;
  }
  
  .messages tbody tr {
  }
  
  .messages .inbox-row {
-   background: #eee;
+   background: #f8f8ff;
+ }
+ .messages .inbox-row-unread {
+   background:#CBEEA7;
+ }
+ .right {
+   float: right;
  }
  
  .messages tr td,
  .messages tr th {
-   padding: 0px 5px;
+   padding: 5px;
  }
  
  .inbox-row .inbox-mark-read {
  }
  
  .info-line {
-   border-bottom: 1px solid #ccc;
+   margin-bottom: 20px;
    padding: 5px 0px 4px 0px;
+   border-bottom: 1px solid #ccc;
  }
  
  .info-line form,
    vertical-align: middle;
  }
  
- .right {
-   float: right;
- }
  .inbox-row-unread .inbox-mark-unread {
    display: none;
  }
  
  /* Rules for "flash" notice boxes shown at the top of the content area */
  
- #error {
-   border: 1px solid red;
-   padding: 7px;
-   background-color: #fff0f0;
-   margin-bottom: 20px;
-   border-radius: 5px;
-   -moz-border-radius: 5px;
- }
- #warning {
-   border: 1px solid orange;
-   padding: 7px;
-   background-color: #fff6f0;
-   margin-bottom: 20px;
-   border-radius: 5px;
-   -moz-border-radius: 5px;
- }
- #notice {
-   border: 1px solid green;
-   padding: 7px;
-   background-color: #f0fff0;
-   margin-bottom: 20px;
-   border-radius: 5px;
-   -moz-border-radius: 5px;
+ .flash {
+     padding: 20px;
+   &#error {
+     background-color: #ff7070;
+   }
+   &#warning {
+     background-color: #fff6f0;
+   }
+   &#notice {
+     background-color: #CBEEA7;
+   }
  }
  
  /* Rules for highlighting fields with rails validation errors */
  
  .field_with_errors {
    padding: 2px;
-   background-color: red;
+   background-color: #ff7070;
    display: table;
  }
  
  
  #errorExplanation {
    width: 400px;
-   border: 2px solid red;
-   padding: 7px;
-   padding-bottom: 12px;
+   border: 2px solid #ff7070;
+   padding: 10px;
    margin-bottom: 20px;
    background-color: #f0f0f0;
  }
  
  #errorExplanation h2 {
+   margin: -10px;
+   padding: 5px 5px 5px 15px;
    font-weight: bold;
    font-size: 12px;
-   padding: 5px 5px 5px 15px;
-   margin: -7px;
    background-color: #c00;
    color: #fff;
    text-align: left;
  
  #errorExplanation ul li {
    font-size: 12px;
-   list-style: square;
+   list-style: disc;
  }
  
  /* Rules for forms */
  
+ .submitButton {
+   text-align: center;
+ }
  .fieldName {
    vertical-align: top;
    font-weight: bold;
  }
  
  .minorNote {
-   font-size: 0.8em;
+   font-size: 12px;
  }
  
  input[type="text"],
@@@ -1299,28 -1417,27 +1451,27 @@@ textarea 
    border: 1px solid #ccc;
  }
  
- input.openid_url {
-   background: image-url('openid_input.png') repeat-y left white;
-   padding-left: 16px;
- }
  /* Rules for user images */
  
  img.user_image {
-   max-width: 100px;
-   max-height: 100px;
+   width: 100px;
+   height: 100px;
    border: 1px solid #ccc;
+   margin-bottom: 20px;
+   float: left;
+   margin-right: 20px;
  }
  
  img.user_thumbnail {
-   max-width: 50px;
-   max-height: 100px;
+   width: 50px;
+   height: 50px;
    border: 1px solid #ccc;
+   margin-right: 20px;
  }
  
  img.user_thumbnail_tiny {
-   max-width: 25px;
-   max-height: 25px;
+   max-width: 24px;
+   max-height: 24px;
    border: 1px solid #ccc;
  }
  
@@@ -1343,13 -1460,87 +1494,87 @@@ abbr.geo 
    top: 4px;
  }
  
+ /* General styles for action lists / subnavs / pager navs */
+ ul.secondary-actions {
+   font-style: normal;
+   margin-bottom: 0;
+   margin-left: 0;
+   &.pager {
+     display: inline-block;
+     margin-bottom: 20px;
+     margin-right: 60px;
+   }
+   li {
+     display: block;
+     float: left;
+     list-style: none;
+     border-left: 1px solid #ccc;
+     padding-left: 5px;
+     margin-right: 5px;
+     &:first-child {
+       border-left: 0;
+       padding-left: 0;
+     }
+   }
+   .hidden li,
+   .hide_unless_logged_in li,
+   .hide_unless_administrator li {
+     border-left: 1px solid #ccc;
+     padding-left: 5px;
+     }
+   .hidden:first-child li,
+   .hide_unless_logged_in:first-child li,
+   .hide_unless_administrator:first-child li {
+     border-left: 0;
+     padding-left: 0;
+   }
+ }
+ /* Utility for managing inner content areas */
+ .inner22 { padding: 20px;}
+ .inner12 { padding: 10px 20px;}
+ .inner02 { padding: 0 20px;}
+ /* Utility for general button styles */
+ a.button {
+   display: block;
+   padding: 5px;
+   min-width: 120px;
+   margin-bottom: 10px;
+   color: white;
+   background: #7092FF;
+   text-align: center;
+   border-radius: 2px;
+   -moz-border-radius: 2px;
+   &:hover {
+     background: blue;
+     text-decoration: none;
+   }
+   &:last-child {
+     margin-bottom: 0;
+   }
+ }
+ a.button.submit {
+   background-color: #cbeea7;
+   &:hover {
+     background-color: #9ed485;
+   }
+ }
  /* Rules for doing distinct colour of alternate table rows */
  
- .table0 {
-   background: #f6f6f6;
+ .table0,
+ .item0 {
+   background: #F4F4FF;
  }
  
- .table1 {
+ .table1,
+ .item1 {
    background: #fff;
  }
  
  
  .richtext_container {
    white-space: nowrap;
    .richtext_content {
      display: inline-block;
      vertical-align: top;
      .richtext_preview {
        display: inline-block;
-       margin-top: 1px;
-       margin-bottom: 1px;
-       border: 4px solid #eee;
-       background-color: #eee;
+       padding: 20px;
+       background-color: #f4f4ff;
        white-space: normal;
        &.loading {
          background-image: image-url("loading.gif");
          background-repeat: no-repeat;
          background-position: center;
        }
        > :first-child {
          margin-top: 0px;
        }
      }
    }
    .richtext_help {
      display: inline-block;
      vertical-align: top;
-     background-color: #ddd;
      margin-left: 15px;
-     padding: 5px 10px 10px 10px;
-     font-size: 12px;
+     background-color: #f8f8ff;
+     padding: 20px;
      p {
        margin: 0px;
      }
      th {
        vertical-align: top;
        text-align: left;
        padding: 0px 15px 0px 0px !important;
      }
+     table > thead th {
+       font-weight: bold;
+     }
      td {
-       text-align: left;
        font-family: fixed;
        line-height: 16px;
+       text-align: left;
        padding: 0px !important;
      }
      input.richtext_doedit {
        margin-top: 5px !important;
        margin-right: 10px !important;
      }
      input.richtext_dopreview {
        margin-top: 5px !important;
        margin-left: 10px !important;
      }
    }
  }
 +
 +/* Rules for the notes interface */
 +
 +.note {
 +  .comment_body {
 +    margin-top: 4px;
 +    margin-bottom: 4px;
 +
 +    p {
 +      margin-top: 0px;
 +      margin-bottom: 0px;
 +    }
 +  }
 +
 +  .buttons {
 +    margin-top: 5px;
 +    text-align: right;
 +  }
 +}
index e32d1bb6ead572bace0b7d64a7c86f1776b9f087,10895dd60e1f57d9b2797709d2d875bc4a6720ab..7aae6b777687a2858c9150ecba661f9628c30bcf
@@@ -10,11 -10,11 +10,11 @@@ module ApplicationHelpe
    end
  
    def rss_link_to(*args)
-     return link_to(image_tag("RSS.gif", :size => "16x16", :border => 0), Hash[*args], { :class => "rsssmall" });
+     return link_to(image_tag("RSS.png", :size => "16x16", :border => 0), Hash[*args], { :class => "rsssmall" });
    end
  
    def atom_link_to(*args)
-     return link_to(image_tag("RSS.gif", :size => "16x16", :border => 0), Hash[*args], { :class => "rsssmall" });
+     return link_to(image_tag("RSS.png", :size => "16x16", :border => 0), Hash[*args], { :class => "rsssmall" });
    end
  
    def style_rules
        I18n.t("html.dir")
      end
    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?
 +      ""
 +    else
 +      link_to h(object.author.display_name), link_options.merge({:controller => "user", :action => "view", :display_name => object.author.display_name})
 +    end
 +  end
  end
index f694d04644ebfcdd0228d39d701b98ada8409481,f44e5bb318e92871a3aada2e85e1de15f731adf0..cf59a4679423395c7fc20a047ed5f2578404ff15
@@@ -1,8 -1,8 +1,8 @@@
  <iframe id="linkloader" style="display: none">
  </iframe>
  
- <div id="browse_map">
+ <div id="browse_map" class='clearfix content_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? %>
  
    <% content_for :head do %>
      <%= javascript_include_tag "browse" %>
           :maxlon => bbox.max_lon,
           :maxlat => bbox.max_lat
         }
 +     elsif map.instance_of? Note
 +       data = {
 +         :type => "note",
 +         :lon  => map.lon,
 +         :lat  => map.lat
 +       }
       else
         data = {
           :type    => map.class.name.downcase,
    <%= content_tag "div", "", :id => "small_map", :data => data %>
    <span id="loading"><%= t 'browse.map.loading' %></span>
  
-   <% if map.instance_of? Note -%>
-     <%= link_to t("browse.map.larger.area"),
-                 root_path(:notes => "yes"),
-                 :id => "area_larger_map",
-                 :class => "geolink bbox" %>
-   <% else -%>
-     <%= link_to t("browse.map.larger.area"),
-                 root_path(:box => "yes"),
-                 :id => "area_larger_map",
+ <ul class='secondary-actions clearfix'>
+   <li>
 -    <%= link_to t("browse.map.larger.area"),
 -                root_path(:box => "yes"),
 -                :id => "area_larger_map",
 -                :class => "geolink bbox" %>
++    <% if map.instance_of? Note -%>
++      <%= link_to t("browse.map.larger.area"),
++                  root_path(:notes => "yes"),
++                  :id => "area_larger_map",
++                  :class => "geolink bbox" %>
++    <% else -%>
++      <%= link_to t("browse.map.larger.area"),
++                  root_path(:box => "yes"),
++                  :id => "area_larger_map",
++                  :class => "geolink bbox" %>
++    <% end -%>
+   </li>
+   <li>
+     <%= link_to h(t("browse.map.edit.area")) + content_tag(:span, "▾", :class => "menuicon"),
+                 edit_path,
+                 :id => "area_edit",
+                 :data => { :editor => preferred_editor },
                  :class => "geolink bbox" %>
-   <% end -%>
-   <br />
-   <%= link_to h(t("browse.map.edit.area")) + content_tag(:span, "▾", :class => "menuicon"),
-               edit_path,
-               :id => "area_edit",
-               :data => { :editor => preferred_editor },
-               :class => "geolink bbox" %>
+   </li>
+ </ul>
  
 -  <% 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),
-                 root_path,
-                 :id => "object_larger_map",
-                 :class => "geolink object" %>
-     <br />
-     <%= link_to h(t("browse.map.edit." + map.class.to_s.downcase)) + content_tag(:span, "▾", :class => "menuicon"),
-                 edit_path,
-                 :id => "object_edit",
-                 :data => { :editor => preferred_editor },
-                 :class => "geolink object" %>
+   <ul class='secondary-actions clearfix'>
+     <li>
+       <%= link_to t("browse.map.larger." + map.class.to_s.downcase),
+                   root_path,
+                   :id => "object_larger_map",
+                   :class => "geolink object" %>
+     </li>
+     <li>
+       <%= link_to h(t("browse.map.edit." + map.class.to_s.downcase)) + content_tag(:span, "▾", :class => "menuicon"),
+                   edit_path,
+                   :id => "object_edit",
+                   :data => { :editor => preferred_editor },
+                   :class => "geolink object" %>
+     </li>
+   </ul>
    <% end %>
  
    <% else %>
index 04fc4cb3b09346184981d3f27aca73108949fcaf,de2e93f9439c2ac4757ddee1d40119832cd6b3c4..699ff3cafa467a64f284381ff5aa33b63c0e3a4a
- <%= user_image @this_user %>
+ <% content_for :heading do %>
+   <div id='userinformation'>
+     <%= user_image @this_user %>
+     <div class='userinformation-inner'>
+       <h2><%= @this_user.display_name %><%= role_icons(@this_user) %></h2>
+       <% if @user and @this_user.id == @user.id %>
+         <!-- Displaying user's own profile page -->
+         <ul class='secondary-actions clearfix'>
+           <li>
+             <%= link_to t('user.view.my edits'), :controller => 'changeset', :action => 'list', :display_name => @user.display_name %>
+             <span class='count-number'><%= number_with_delimiter(@user.changesets.size) %></span>
+           </li>
++          <li>
++            <%= link_to t('user.view.my notes'), :controller => 'notes', :action=> 'mine' %>
++          </li>
+           <li>
+             <%= link_to t('user.view.my traces'), :controller => 'trace', :action=>'mine' %>
+             <span class='count-number'><%= number_with_delimiter(@user.traces.size) %></span>
+           </li>
+           <li>
+             <%= link_to t('user.view.my diary'), :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name %>
+             <span class='count-number'><%= number_with_delimiter(@user.diary_entries.size) %></span>
+           </li>
+           <li>
+             <%= link_to t('user.view.my comments' ), :controller => 'diary_entry', :action => 'comments', :display_name => @user.display_name %>
+           </li>
+           <li>
+             <%= link_to t('user.view.my settings'), :controller => 'user', :action => 'account', :display_name => @user.display_name %>
+           </li>
  
- <h2><%= @this_user.display_name %><%= role_icons(@this_user) %></h2>
+           <% if @user.blocks.exists? %>
+             <li>
+               <%= link_to t('user.view.blocks on me'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @user.display_name %>
+               <span class='count-number'><%= number_with_delimiter(@user.blocks.active.size) %></span>
+             </li>
+           <% end %>
+           <% if @user and @user.moderator? and @user.blocks_created.exists? %>
+             <li>
+               <%= link_to t('user.view.blocks by me'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => @user.display_name %>
+               <span class='count-number'><%= number_with_delimiter(@user.blocks_created.active.size) %></span>
+             </li>
+           <% end %>
+         </ul>
+         <% else %>
+         <ul class='secondary-actions clearfix'>
+           <li>
+             <%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list', :display_name => @this_user.display_name %>
+             <span class='count-number'><%= number_with_delimiter(@this_user.changesets.size) %></span>
+           </li>
++          <li>
++            <%= link_to t('user.view.notes'), :controller => 'notes', :action=> 'mine' %>
++          </li>
+           <li>
+             <%= 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>
+           </li>
+           <!-- Displaying another user's profile page -->
+           <li>
+             <%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => @this_user.display_name %>
+           </li>
+           <li>
+             <%= link_to t('user.view.diary'), :controller => 'diary_entry', :action => 'list', :display_name => @this_user.display_name %>
+             <span class='count-number'><%= number_with_delimiter(@this_user.diary_entries.size) %></span>
+           </li>
+           <li>
+             <%= link_to t('user.view.comments'), :controller => 'diary_entry', :action => 'comments', :display_name => @this_user.display_name %>
+           </li>
+           <li>
+             <% if @user and @user.is_friends_with?(@this_user) %>
+               <%= link_to t('user.view.remove as friend'), remove_friend_path(:display_name => @this_user.display_name), :method => :post %>
+             <% else %>
+               <%= link_to t('user.view.add as friend'), make_friend_path(:display_name => @this_user.display_name), :method => :post %>
+             <% end %>
+           </li>
+           <% if @this_user.blocks.exists? %>
+             <li>
+               <%= link_to t('user.view.block_history'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @this_user.display_name %>
+               <span class='count-number'><%= number_with_delimiter(@this_user.blocks.active.size) %></span>
+             </li>
+           <% end %>
+           <% if @this_user.moderator? and @this_user.blocks_created.exists? %>
+             <li>
+               <%= link_to t('user.view.moderator_history'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => @this_user.display_name %>
+               <span class='count-number'><%= number_with_delimiter(@this_user.blocks_created.active.size) %></span>
+             </li>
+           <% end %>
+           <% if @user and @user.moderator? %>
+             <li>
+             <%= link_to t('user.view.create_block'), :controller => 'user_blocks', :action => 'new', :display_name => @this_user.display_name %>
+             </li>
+           <% end %>
+         </ul>
+       <% end %>
+       <% if @user and @user.administrator? %>
+         <ul class='secondary-actions clearfix'>
+           <% if ["active", "confirmed"].include? @this_user.status %>
+             <li>
+               <%= link_to t('user.view.deactivate_user'), set_status_user_path(:status => 'pending', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %>
+             </li>
+           <% elsif ["pending"].include? @this_user.status %>
+             <li>
+               <%= link_to t('user.view.activate_user'), set_status_user_path(:status => 'active', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %>
+             </li>
+           <% end %>
+           <% if ["active", "suspended"].include? @this_user.status %>
+             <li>
+               <%= link_to t('user.view.confirm_user'), set_status_user_path(:status => 'confirmed', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %>
+             </li>
+           <% end %>
+             <li>
+               <% if ["pending", "active", "confirmed", "suspended"].include? @this_user.status %>
+                 <%= link_to t('user.view.hide_user'), set_status_user_path(:status => 'deleted', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %>
+             <% else %>
+               <%= link_to t('user.view.unhide_user'), set_status_user_path(:status => 'active', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %>
+             </li>
+           <% end %>
+           <li>
+             <%= link_to t('user.view.delete_user'), delete_user_path(:display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %>
+           </li>
+         </ul>
+         <% end %>
+       <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)  %>
+           <% elsif not @this_user.terms_seen? -%>
+           <%= t 'user.view.ct undecided' %>
+           <% else -%>
+           <%= t 'user.view.ct declined' %>
+           <% end -%>
+         </small>
+       </p>
+     </div>
+     <div class='user-description'><%= @this_user.description.to_html %></div>
+   </div>
+   <% if @user and @user.administrator? -%>
+     <div class='admin-user-info deemphasize'>
+       <small><b><%= t 'user.view.email address' %></b> <%= @this_user.email %></small>
+       <% unless @this_user.creation_ip.nil? -%>
+         <small><b><%= t 'user.view.created from' %></b> <%= @this_user.creation_ip %></small>
+       <% end -%>
+       <small><b><%= t 'user.view.status' %></b> <%= @this_user.status.capitalize %></small>
+       <small><b><%= t 'user.view.spam score' %></b> <%= @this_user.spam_score %></small>
+     </div>
+   <% end -%>
+ <% end %>
  
- <div id="userinformation">
    <% if @user and @this_user.id == @user.id %>
-     <!-- Displaying user's own profile page -->
-     <%= link_to t('user.view.my edits'), :controller => 'changeset', :action => 'list', :display_name => @user.display_name %>
-     <span class='count-number'><%= number_with_delimiter(@user.changesets.size) %></span>
-     |
-     <%= 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 => 'notes', :action=> 'mine' %>
-     |
-     <%= link_to t('user.view.my diary'), :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name %>
-     <span class='count-number'><%= number_with_delimiter(@user.diary_entries.size) %></span>
-     |
-     <%= link_to t('user.view.my comments' ), :controller => 'diary_entry', :action => 'comments', :display_name => @user.display_name %>
-     |
-     <%= link_to t('user.view.my settings'), :controller => 'user', :action => 'account', :display_name => @user.display_name %>
-     <% if @user.blocks.exists? %>
-       |
-       <%= link_to t('user.view.blocks on me'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @user.display_name %>
-       <span class='count-number'><%= number_with_delimiter(@user.blocks.active.size) %></span>
-     <% end %>
-     <% if @user and @user.moderator? and @user.blocks_created.exists? %>
-       |
-       <%= link_to t('user.view.blocks by me'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => @user.display_name %>
-       <span class='count-number'><%= number_with_delimiter(@user.blocks_created.active.size) %></span>
-     <% end %>
-   <% else %>
-     <%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list', :display_name => @this_user.display_name %>
-     <span class='count-number'><%= number_with_delimiter(@this_user.changesets.size) %></span>
-     |
-     <%= 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 => 'notes', :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 %>
-     |
-     <%= link_to t('user.view.diary'), :controller => 'diary_entry', :action => 'list', :display_name => @this_user.display_name %>
-     <span class='count-number'><%= number_with_delimiter(@this_user.diary_entries.size) %></span>
-     |
-     <%= link_to t('user.view.comments'), :controller => 'diary_entry', :action => 'comments', :display_name => @this_user.display_name %>
-     |
-     <% if @user and @user.is_friends_with?(@this_user) %>
-       <%= link_to t('user.view.remove as friend'), remove_friend_path(:display_name => @this_user.display_name), :method => :post %>
+     <% if @this_user.home_lat.nil? or @this_user.home_lon.nil? %>
+       <div id="map" class="content_map">
+         <p id="no_home_location"><%= raw(t 'user.view.if set location', :settings_link => (link_to t('user.view.settings_link_text'), :controller => 'user', :action => 'account', :display_name => @user.display_name)) %></p>
+       </div>
      <% else %>
-       <%= link_to t('user.view.add as friend'), make_friend_path(:display_name => @this_user.display_name), :method => :post %>
-     <% end %>
-     <% if @this_user.blocks.exists? %>
-       |
-       <%= link_to t('user.view.block_history'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @this_user.display_name %>
-       <span class='count-number'><%= number_with_delimiter(@this_user.blocks.active.size) %></span>
-     <% end %>
-     <% if @this_user.moderator? and @this_user.blocks_created.exists? %>
-       |
-       <%= link_to t('user.view.moderator_history'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => @this_user.display_name %>
-       <span class='count-number'><%= number_with_delimiter(@this_user.blocks_created.active.size) %></span>
-     <% end %>
-     <% if @user and @user.moderator? %>
-       | <%= link_to t('user.view.create_block'), :controller => 'user_blocks', :action => 'new', :display_name => @this_user.display_name %>
+       <% content_for :head do %>
+         <%= javascript_include_tag "user" %>
+       <% end %>
+       <%
+         user_data = {
+           :lon => @user.home_lon,
+           :lat => @user.home_lat,
+           :icon => image_path("marker-red.png"),
+           :description => render(:partial => "popup", :object => @user, :locals => {:type => "your location"})
+         }
+       %>
+       <%= content_tag "div", "", :id => "map", :class => "content_map", :data => {:user => user_data} %>
      <% end %>
-   <% end %>
-   <% if @user and @user.administrator? %>
-     <br/>
-     <% if ["active", "confirmed"].include? @this_user.status %>
-       <%= link_to t('user.view.deactivate_user'), set_status_user_path(:status => 'pending', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> |
-     <% elsif ["pending"].include? @this_user.status %>
-       <%= link_to t('user.view.activate_user'), set_status_user_path(:status => 'active', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> |
-     <% end %>
-     <% if ["active", "suspended"].include? @this_user.status %>
-       <%= link_to t('user.view.confirm_user'), set_status_user_path(:status => 'confirmed', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> |
-     <% end %>
-     <% if ["pending", "active", "confirmed", "suspended"].include? @this_user.status %>
-       <%= link_to t('user.view.hide_user'), set_status_user_path(:status => 'deleted', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> |
+     <% friends = @this_user.friends.collect { |f| f.befriendee } %>
+     <% nearby = @this_user.nearby - friends %>
+   <div class="activity-block column-1">
+     <h3><%= t 'user.view.your friends' %></h3>
+     <% if friends.empty? %>
+       <%= t 'user.view.no friends' %>
      <% else %>
-       <%= link_to t('user.view.unhide_user'), set_status_user_path(:status => 'active', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> |
+       <ul class='secondary-actions clearfix'>
+         <li><%= link_to t('user.view.friends_changesets'), friend_changesets_path %></li>
+         <li><%= link_to t('user.view.friends_diaries'), friend_diaries_path %></li>
+       </ul>
+       <div id="friends-container">
+         <%= render :partial => "contact", :collection => friends, :locals => {:type => "friend"} %>
+       </div>
      <% end %>
-     <%= link_to t('user.view.delete_user'), delete_user_path(:display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %>
-   <% end %>
- </div>
- <div id="description"><%= @this_user.description.to_html %></div>
- <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)  %>
- <% 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.email address' %></b> <%= @this_user.email %></p>
-   <% unless @this_user.creation_ip.nil? -%>
-   <p><b><%= t 'user.view.created from' %></b> <%= @this_user.creation_ip %></p>
-   <% end -%>
-   <p><b><%= t 'user.view.status' %></b> <%= @this_user.status.capitalize %></p>
-   <p><b><%= t 'user.view.spam score' %></b> <%= @this_user.spam_score %></p>
- <% end -%>
- <% if @user and @this_user.id == @user.id %>
-   <% if @this_user.home_lat.nil? or @this_user.home_lon.nil? %>
-     <div id="map" class="user_map">
-       <p id="no_home_location"><%= raw(t 'user.view.if set location', :settings_link => (link_to t('user.view.settings_link_text'), :controller => 'user', :action => 'account', :display_name => @user.display_name)) %></p>
-     </div>
-   <% else %>
-     <% content_for :head do %>
-       <%= javascript_include_tag "user" %>
+   </div>
+   <div class="activity-block column-1">
+     <h3><%= t 'user.view.nearby users' %></h3>
+     <% if nearby.empty? %>
+       <%= t 'user.view.no nearby users' %>
+     <% else %>
+       <ul class='secondary-actions clearfix'>
+         <li><%= link_to t('user.view.nearby_changesets'), nearby_changesets_path %></li>
+         <li><%= link_to t('user.view.nearby_diaries'), nearby_diaries_path %></li>
+       </ul>
+       <div id="nearbyusers">
+         <%= render :partial => "contact", :collection => nearby, :locals => {:type => "nearby mapper"} %>
+       </div>
      <% end %>
-     <%
-       user_data = {
-         :lon => @user.home_lon,
-         :lat => @user.home_lat,
-         :icon => image_path("marker-red.png"),
-         :description => render(:partial => "popup", :object => @user, :locals => {:type => "your location"})
-       }
-     %>
-     <%= content_tag "div", "", :id => "map", :class => "user_map", :data => {:user => user_data} %>
-   <% end %>
-   <% friends = @this_user.friends.collect { |f| f.befriendee } %>
-   <% nearby = @this_user.nearby - friends %>
-   <h3 style="margin-top: 0"><%= t 'user.view.your friends' %></h3>
-   <% if friends.empty? %>
-     <%= t 'user.view.no friends' %>
-   <% else %>
-     <%= link_to t('user.view.friends_changesets'), friend_changesets_path %><br/>
-     <%= link_to t('user.view.friends_diaries'), friend_diaries_path %><br/><br/>
-     <table id="friends">
-       <%= render :partial => "contact", :collection => friends, :locals => {:type => "friend"} %>
-     </table>
-   <% end %>
-   <h3><%= t 'user.view.nearby users' %></h3>
-   <% if nearby.empty? %>
-     <%= t 'user.view.no nearby users' %>
-   <% else %>
-     <%= link_to t('user.view.nearby_changesets'), nearby_changesets_path %><br/>
-     <%= link_to t('user.view.nearby_diaries'), nearby_diaries_path %><br/><br/>
-     <table id="nearbyusers">
-       <%= render :partial => "contact", :collection => nearby, :locals => {:type => "nearby mapper"} %>
-     </table>
-   <% end %>
+   </div>
  <% end %>
diff --combined config/locales/de.yml
index 9861997354b89e43f30052fc9bc8facfcfeb1be4,b160d6febbf35f0452178aa54c3996f2ffcf396d..74f3cc49969cef67fccfd84f211cf388a1ae56aa
@@@ -249,6 -249,7 +249,7 @@@ de
        show_areas: Gebiete einblenden
        show_history: Chronik
        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."
+       view_data: Daten für aktuelle Kartenansicht ansehen
        wait: Verarbeiten …
        zoom_or_select: Karte vergrößern oder einen Bereich auf der Karte auswählen
      tag_details: 
        hide_link: Diesen Kommentar verbergen
      diary_entry: 
        comment_count: 
-         one: 1 Kommentar
+         one: Ein Kommentar
          other: "%{count} Kommentare"
+         zero: Keine Kommentare
        comment_link: Kommentar zu diesem Eintrag
        confirm: Bestätigen
        edit_link: Diesen Eintrag bearbeiten
        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
diff --combined config/locales/en.yml
index 3490163352fa192abddfeda093e6a520e5c9c912,831311615b007b89807fa0e58c4891aba202e98e..09d3ceae0da169b782928a6c992b7a507a3c62b0
@@@ -120,8 -120,6 +120,8 @@@ en
          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:"
          relation: relation
          changeset: changeset
      paging_nav:
-       showing_page: "Showing page"
+       showing_page: "page"
        of: "of"
      redacted:
        redaction: "Redaction %{id}"
        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"
        edited_by_user_at_timestamp: "Edited by %{user} at %{timestamp}"
        object_list:
          heading: "Object list"
-         back: "Display object list"
+         back: "Back to object list"
          type:
            node: "Node"
            way: "Way"
        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_html: "%{when} ago by %{user}"
 +      description: "Description:"
 +      comments: "Comments:"
    changeset:
      changeset_paging_nav:
-       showing_page: "Showing page %{page}"
+       showing_page: "Page %{page}"
        next: "Next »"
        previous: "« Previous"
      changeset:
-       id: "#%{id}"
        still_editing: "(still editing)"
        anonymous: "Anonymous"
        no_comment: "(none)"
        heading_user_bbox: "Changesets"
        heading_friend: "Changesets"
        heading_nearby: "Changesets"
-       description: "Recent changes"
+       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_anon_html: "No edits made yet."
      timeout:
        sorry: "Sorry, the list of changesets you requested took too long to retrieve."
    diary_entry:
        new: New Diary Entry
        new_title: Compose a new entry in your user diary
        no_entries: No diary entries
-       recent_entries: "Recent diary entries:"
+       recent_entries: "Recent diary entries"
        older_entries: Older Entries
        newer_entries: Newer Entries
      edit:
        h1: OpenStreetMap
      logo:
        alt_text: OpenStreetMap logo
-     welcome_user: "Welcome, %{user_link}"
      welcome_user_link_tooltip: Your user page
      home: home
      home_tooltip: Go to home location
        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_comment_notification:
 +      anonymous: An anonymous user
 +      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"
        js_2: "OpenStreetMap uses JavaScript for its slippy map."
        permalink: Permalink
        shortlink: Shortlink
 +      createnote: Add a note
        license:
          copyright: "Copyright OpenStreetMap and contributors, under an open license"
          license_url: "http://openstreetmap.org/copyright"
        trace_not_found: "Trace not found!"
        visibility: "Visibility:"
      trace_paging_nav:
-       showing_page: "Showing page %{page}"
+       showing_page: "Page %{page}"
        older: "Older Traces"
        newer: "Newer Traces"
      trace:
        public_traces: "Public GPS traces"
        your_traces: "Your GPS traces"
        public_traces_from: "Public GPS traces from %{user}"
+       description: "Browse recent GPS track uploads"
        tagged_with: " tagged with %{tags}"
        empty_html: "Nothing here yet. <a href='%{upload_link}'>Upload a new trace</a> or learn more about GPS tracing on the <a href='http://wiki.openstreetmap.org/wiki/Beginners_Guide_1.2'>wiki page</a>."
      delete:
        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
-       remove as friend: remove as friend
-       add as friend: add as friend
 +      notes: map notes
+       remove as friend: unfriend
+       add as friend: add friend
        mapper since: "Mapper since:"
        ago: "(%{time_in_words_ago} ago)"
        ct status: "Contributor terms:"
        spam score: "Spam Score:"
        description: Description
        user location: User location
-       if set location: "If you set your location, a pretty map and stuff will appear here. You can set your home location on your %{settings_link} page."
+       if set location: "Set your home location on the %{settings_link} page to see nearby users."
        settings_link_text: settings
        your friends: Your friends
        no friends: You have not added any friends yet.
        unhide_user: "unhide this user"
        delete_user: "delete this user"
        confirm: "Confirm"
-       friends_changesets: "Browse all changesets by friends"
-       friends_diaries: "Browse all diary entries by friends"
-       nearby_changesets: "Browse all changesets by nearby users"
-       nearby_diaries: "Browse all diary entries by nearby users"
+       friends_changesets: "friends' changesets"
+       friends_diaries: "friends' diary entries"
+       nearby_changesets: "nearby user changesets"
+       nearby_diaries: "nearby user diary entries"
      popup:
        your location: "Your location"
        nearby mapper: "Nearby mapper"
      make_friend:
        heading: "Add %{user} as a friend?"
        button: "Add as friend"
-       success: "%{name} is now your friend."
+       success: "%{name} is now your friend!"
        failed: "Sorry, failed to add %{name} as a friend."
        already_a_friend: "You are already friends with %{name}."
      remove_friend:
-       heading: "Remove %{user} as a friend?"
-       button: "Remove as friend"
+       heading: "Unfriend %{user}?"
+       button: "Unfriend"
        success: "%{name} was removed from your friends."
        not_a_friend: "%{name} is not one of your friends."
      filter:
        title: Users
        heading: Users
        showing:
-         one: Showing page %{page} (%{first_item} of %{items})
-         other: Showing page %{page} (%{first_item}-%{last_item} of %{items})
+         one: Page %{page} (%{first_item} of %{items})
+         other: Page %{page} (%{first_item}-%{last_item} of %{items})
        summary: "%{name} created from %{ip_address} on %{date}"
        summary_no_ip: "%{name} created on %{date}"
        confirm: Confirm Selected Users
        status: "Status"
        revoker_name: "Revoked by"
        not_revoked: "(not revoked)"
-       showing_page: "Showing page %{page}"
+       showing_page: "Page %{page}"
        next: "Next »"
        previous: "« Previous"
      helper:
        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
 +      createnote_tooltip: Add a note to the map
 +      createnote_disabled_tooltip: Zoom in to add a note to the map
 +      createnote_zoom_alert: You must zoom in to add a note to the map
 +    notes:
 +      new:
 +        intro: "Move the marker to the correct position and add your comment in the box below:"
 +        add: Add Note
 +      show:
 +        title: Note %{id}
 +        event: "%{action} by <a href='%{user_url}'>%{user}</a> at %{time}"
 +        anonymous_event: "%{action} by anonymous at %{time}"
 +        close: Close
 +        comment_and_close: Comment & Close
 +        comment: Comment
    redaction:
      edit:
        description: "Description"
index 63c3d0b04555857926eb46562190d2fdfc3a2e6c,b6c11fd3c816dee9a534ac1bc8e0c53643d89b89..11f51ae5cb9846b196d6798a7e5cbae1a0a3bc52
@@@ -39,41 -39,37 +39,41 @@@ class BrowseControllerTest < ActionCont
        { :path => "/browse/changeset/1", :method => :get },
        { :controller => "browse", :action => "changeset", :id => "1" }
      )
 +    assert_routing(
 +      { :path => "/browse/note/1", :method => :get },
 +      { :controller => "browse", :action => "note", :id => "1" }
 +    )
    end
  
    def test_start
      xhr :get, :start
      assert_response :success
    end
-   
    def test_read_relation
      browse_check 'relation', relations(:visible_relation).relation_id
    end
-   
    def test_read_relation_history
      browse_check 'relation_history', relations(:visible_relation).relation_id
    end
-   
    def test_read_way
      browse_check 'way', ways(:visible_way).way_id
    end
-   
    def test_read_way_history
      browse_check 'way_history', ways(:visible_way).way_id
    end
-   
    def test_read_node
      browse_check 'node', nodes(:visible_node).node_id
    end
-   
    def test_read_node_history
      browse_check 'node_history', nodes(:visible_node).node_id
    end
-   
    def test_read_changeset
      browse_check 'changeset', changesets(:normal_user_first_change).id
    end
    #
    # note that these are presently highly reliant on the structure of the
    # page for the selection tests, which doesn't work out particularly
-   # well if that structure changes. so... if you change the page layout 
+   # well if that structure changes. so... if you change the page layout
    # then please make it more easily (and robustly) testable!
    ##
    def test_redacted_node_history
      get :node_history, :id => nodes(:redacted_node_redacted_version).node_id
      assert_response :success
      assert_template 'node_history'
-     
      # there are 2 revisions of the redacted node, but only one
      # should be showing up here.
-     assert_select "body div[id=content] table[class=browse_details]", 1
-     assert_select "body div[id=content] table[class=browse_details][id=1]", 0
+     assert_select "body div[id=content] div[class=browse_details]", 1
+     assert_select "body div[id=content] div[class=browse_details][id=1]", 0
    end
-   
    def test_redacted_way_history
      get :way_history, :id => ways(:way_with_redacted_versions_v1).way_id
      assert_response :success
      assert_template 'way_history'
-     
      # there are 4 revisions of the redacted way, but only 2
      # should be showing up here.
-     assert_select "body div[id=content] table[class=browse_details]", 2
+     assert_select "body div[id=content] div[class=browse_details]", 2
      # redacted revisions are 2 & 3
-     assert_select "body div[id=content] table[class=browse_details][id=2]", 0
-     assert_select "body div[id=content] table[class=browse_details][id=3]", 0
+     assert_select "body div[id=content] div[class=browse_details][id=2]", 0
+     assert_select "body div[id=content] div[class=browse_details][id=3]", 0
    end
-   
    def test_redacted_relation_history
      get :relation_history, :id => relations(:relation_with_redacted_versions_v1).relation_id
      assert_response :success
      assert_template 'relation_history'
-     
      # there are 4 revisions of the redacted relation, but only 2
      # should be showing up here.
-     assert_select "body div[id=content] table[class=browse_details]", 2
+     assert_select "body div[id=content] div[class=browse_details]", 2
      # redacted revisions are 2 & 3
-     assert_select "body div[id=content] table[class=browse_details][id=2]", 0
-     assert_select "body div[id=content] table[class=browse_details][id=3]", 0
+     assert_select "body div[id=content] div[class=browse_details][id=2]", 0
+     assert_select "body div[id=content] div[class=browse_details][id=3]", 0
    end
-   
    # This is a convenience method for most of the above checks
    # First we check that when we don't have an id, it will correctly return a 404
    # then we check that we get the correct 404 when a non-existant id is passed
    # then we check that it will get a successful response, when we do pass an id
-   def browse_check(type, id) 
+   def browse_check(type, id)
      assert_raise ActionController::RoutingError do
        get type
      end