From: Tom Hughes Date: Tue, 15 Jan 2013 21:11:35 +0000 (+0000) Subject: Merge branch 'master' into notes X-Git-Tag: live~5741^2~51 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/3d7eb387a7c3573f1a1d17df00adcaa1fb9b9fa5?hp=-c Merge branch 'master' into notes 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 --- 3d7eb387a7c3573f1a1d17df00adcaa1fb9b9fa5 diff --combined Gemfile index 5b5a76e65,fee9abb2d..b06702fb3 --- a/Gemfile +++ 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 8fea3da8e,37129758d..ec1d4e357 --- a/Gemfile.lock +++ b/Gemfile.lock @@@ -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) @@@ -15,24 -15,24 +15,27 @@@ 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) @@@ -54,35 -54,30 +57,35 @@@ 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 @@@ -105,7 -100,7 +108,7 @@@ 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) @@@ -117,24 -112,24 +120,24 @@@ 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) @@@ -142,12 -137,12 +145,12 @@@ 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) @@@ -156,7 -151,7 +159,7 @@@ 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 @@@ -193,14 -187,14 +196,14 @@@ 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) diff --combined app/assets/javascripts/index.js index c90d96c39,5cf9c15ff..dc5c40bf2 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@@ -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(); @@@ -129,4 -128,10 +129,10 @@@ 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(); + } }); diff --combined app/assets/stylesheets/common.css.scss index 96856228c,255b846cf..062c782a7 --- a/app/assets/stylesheets/common.css.scss +++ b/app/assets/stylesheets/common.css.scss @@@ -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; } @@@ -63,15 -180,11 +180,11 @@@ 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; @@@ -91,10 -204,6 +204,6 @@@ display: none; } - #small-title img { - border: 0px; - } - /* Rules for the introductory text displayed in the left sidebar to new users */ .sidebar-copy { @@@ -117,15 -226,13 +226,13 @@@ */ .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; } @@@ -138,14 -245,12 +245,12 @@@ */ .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; } @@@ -164,6 -269,10 +269,10 @@@ border-top: 1px solid #ccc; } + .left_menu img { + margin: 10px 0px; + } + .left_menu ul { padding: 0; margin: 0; @@@ -212,23 -321,10 +321,10 @@@ 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 { @@@ -237,6 -333,7 +333,7 @@@ #search_field input[type="text"] { width: 165px; + padding: 3px; font-size: 14px; line-height: 15px; height: 25px; @@@ -254,18 -351,17 +351,17 @@@ } #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; } @@@ -273,12 -369,13 +369,13 @@@ 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 */ @@@ -287,7 -384,6 +384,6 @@@ display: block; position: relative; width: 153px; - margin: 10px 10px 0px 10px; padding: 5px; border: 1px solid #AED1A0; background: #cbeea7; @@@ -297,6 -393,7 +393,7 @@@ border-radius: 2px; -moz-border-radius: 2px; color: #222; + margin: 10px 10px 0px 10px; } .donate:hover { @@@ -313,8 -410,6 +410,6 @@@ 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; @@@ -324,63 -419,65 +419,65 @@@ /* 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; - margin: 0; - 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, @@@ -398,10 -495,12 +495,12 @@@ 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; @@@ -411,11 -510,7 +510,7 @@@ #greeting { float: right; - height: 28px; - margin: 0px; - padding-right: 10px; - font-size: 13px; - line-height: 28px; + padding-top: 3px; } .greeting-bar-unread { @@@ -433,12 -528,6 +528,6 @@@ /* Rules for Leaflet maps */ - #map { - margin: 0px; - border: 0px; - padding: 0px; - } - #permalink { z-index: 10000; position: absolute; @@@ -446,24 -535,11 +535,17 @@@ 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; } @@@ -474,19 -550,13 +556,19 @@@ 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; } } @@@ -502,13 -572,10 +584,10 @@@ .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; } @@@ -519,7 -586,8 +598,8 @@@ display: none; } - .attribution_license { + .attribution_license, + .attribution_project { text-align: left; } @@@ -527,63 -595,63 +607,63 @@@ 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 { @@@ -592,8 -660,8 +672,8 @@@ 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 */ @@@ -603,77 -671,80 +683,80 @@@ 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; @@@ -683,21 -754,23 +766,23 @@@ #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 { @@@ -728,6 -801,7 +813,7 @@@ margin: 10px; position: absolute; top: 0px; + margin-right: 5px; } #slim_header img { @@@ -736,23 -810,44 +822,44 @@@ 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; @@@ -773,110 -868,88 +880,110 @@@ /* 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; } +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; + } + } + } +} + - #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; - } - /* 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; } @@@ -906,113 -979,231 +1013,231 @@@ 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 { @@@ -1040,7 -1224,7 +1258,7 @@@ } form#termsForm input#agree { - margin-left: 50px; + margin-left: 40px; } div#slim_content form#termsForm { @@@ -1048,10 -1232,10 +1266,10 @@@ } 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; } @@@ -1067,24 -1251,14 +1285,14 @@@ #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 { @@@ -1103,66 -1277,16 +1311,16 @@@ 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 { @@@ -1170,12 -1294,20 +1328,20 @@@ } .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 { @@@ -1183,8 -1315,9 +1349,9 @@@ } .info-line { - border-bottom: 1px solid #ccc; + margin-bottom: 20px; padding: 5px 0px 4px 0px; + border-bottom: 1px solid #ccc; } .info-line form, @@@ -1196,48 -1329,30 +1363,30 @@@ 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; } @@@ -1245,18 -1360,17 +1394,17 @@@ #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; @@@ -1270,11 -1384,15 +1418,15 @@@ #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; @@@ -1288,7 -1406,7 +1440,7 @@@ } .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; } @@@ -1364,83 -1555,54 +1589,73 @@@ .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; + } +} diff --combined app/helpers/application_helper.rb index e32d1bb6e,10895dd60..7aae6b777 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@@ -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 @@@ -95,16 -95,4 +95,16 @@@ 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 diff --combined app/views/browse/_map.html.erb index f694d0464,f44e5bb31..cf59a4679 --- a/app/views/browse/_map.html.erb +++ b/app/views/browse/_map.html.erb @@@ -1,8 -1,8 +1,8 @@@ -
+
- <% 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" %> @@@ -19,12 -19,6 +19,12 @@@ :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, @@@ -37,36 -31,38 +37,45 @@@ <%= content_tag "div", "", :id => "small_map", :data => data %> <%= t 'browse.map.loading' %> - <% 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", +
    +
  • - <%= 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 -%> +
  • +
  • + <%= 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 -%> -
    - <%= 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" %> +
  • +
- <% unless map.instance_of? Changeset %> + <% unless map.instance_of? Changeset or map.instance_of? Note %> -
- <%= link_to t("browse.map.larger." + map.class.to_s.downcase), - root_path, - :id => "object_larger_map", - :class => "geolink object" %> -
- <%= 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" %> +
    +
  • + <%= link_to t("browse.map.larger." + map.class.to_s.downcase), + root_path, + :id => "object_larger_map", + :class => "geolink object" %> +
  • +
  • + <%= 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" %> +
  • +
<% end %> <% else %> diff --combined app/views/user/view.html.erb index 04fc4cb3b,de2e93f94..699ff3caf --- a/app/views/user/view.html.erb +++ b/app/views/user/view.html.erb @@@ -1,158 -1,220 +1,226 @@@ - <%= user_image @this_user %> + <% content_for :heading do %> +
+ <%= user_image @this_user %> +
+

<%= @this_user.display_name %><%= role_icons(@this_user) %>

+ <% if @user and @this_user.id == @user.id %> + +
    +
  • + <%= link_to t('user.view.my edits'), :controller => 'changeset', :action => 'list', :display_name => @user.display_name %> + <%= number_with_delimiter(@user.changesets.size) %> +
  • ++
  • ++ <%= link_to t('user.view.my notes'), :controller => 'notes', :action=> 'mine' %> ++
  • +
  • + <%= link_to t('user.view.my traces'), :controller => 'trace', :action=>'mine' %> + <%= number_with_delimiter(@user.traces.size) %> +
  • +
  • + <%= link_to t('user.view.my diary'), :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name %> + <%= number_with_delimiter(@user.diary_entries.size) %> +
  • +
  • + <%= 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 %> +
  • -

    <%= @this_user.display_name %><%= role_icons(@this_user) %>

    + <% if @user.blocks.exists? %> +
  • + <%= link_to t('user.view.blocks on me'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @user.display_name %> + <%= number_with_delimiter(@user.blocks.active.size) %> +
  • + <% 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 %> + <%= number_with_delimiter(@user.blocks_created.active.size) %> +
  • + <% end %> + +
+ + <% else %> + +
    + +
  • + <%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list', :display_name => @this_user.display_name %> + <%= number_with_delimiter(@this_user.changesets.size) %> +
  • ++
  • ++ <%= link_to t('user.view.notes'), :controller => 'notes', :action=> 'mine' %> ++
  • +
  • + <%= link_to t('user.view.traces'), :controller => 'trace', :action => 'list', :display_name => @this_user.display_name %> + <%= number_with_delimiter(@this_user.traces.size) %> +
  • + + + +
  • + <%= 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 %> + <%= number_with_delimiter(@this_user.diary_entries.size) %> +
  • +
  • + <%= 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 %> + <% 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 %> + <%= number_with_delimiter(@this_user.blocks.active.size) %> +
  • + <% 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 %> + <%= number_with_delimiter(@this_user.blocks_created.active.size) %> +
  • + <% end %> + + <% if @user and @user.moderator? %> +
  • + <%= link_to t('user.view.create_block'), :controller => 'user_blocks', :action => 'new', :display_name => @this_user.display_name %> +
  • + <% end %> + +
+ + <% end %> + + <% if @user and @user.administrator? %> + +
    + <% 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') } %> + <% 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') } %> +
  • + <% end %> +
  • + <%= link_to t('user.view.delete_user'), delete_user_path(:display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> +
  • +
+ + <% end %> + +

+ + <%= 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 -%> + +

+
+ +
<%= @this_user.description.to_html %>
+ +
+ + <% if @user and @user.administrator? -%> + + <% end -%> + + <% end %> -
<% if @user and @this_user.id == @user.id %> - - <%= link_to t('user.view.my edits'), :controller => 'changeset', :action => 'list', :display_name => @user.display_name %> - <%= number_with_delimiter(@user.changesets.size) %> - | - <%= link_to t('user.view.my traces'), :controller => 'trace', :action=>'mine' %> - <%= number_with_delimiter(@user.traces.size) %> - | - <%= 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 %> - <%= number_with_delimiter(@user.diary_entries.size) %> - | - <%= 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 %> - <%= number_with_delimiter(@user.blocks.active.size) %> - <% 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 %> - <%= number_with_delimiter(@user.blocks_created.active.size) %> - <% end %> - <% else %> - <%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list', :display_name => @this_user.display_name %> - <%= number_with_delimiter(@this_user.changesets.size) %> - | - <%= link_to t('user.view.traces'), :controller => 'trace', :action => 'list', :display_name => @this_user.display_name %> - <%= number_with_delimiter(@this_user.traces.size) %> - | - <%= link_to t('user.view.notes'), :controller => 'notes', :action=> 'mine' %> - | - - <%= 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 %> - <%= number_with_delimiter(@this_user.diary_entries.size) %> - | - <%= 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? %> +
+

<%= 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)) %>

+
<% 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 %> - <%= number_with_delimiter(@this_user.blocks.active.size) %> - <% 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 %> - <%= number_with_delimiter(@this_user.blocks_created.active.size) %> - <% 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? %> -
- <% 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 %> + +
+

<%= t 'user.view.your friends' %>

+ + <% 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') } %> | +
    +
  • <%= link_to t('user.view.friends_changesets'), friend_changesets_path %>
  • +
  • <%= link_to t('user.view.friends_diaries'), friend_diaries_path %>
  • +
+
+ <%= render :partial => "contact", :collection => friends, :locals => {:type => "friend"} %> +
<% end %> - <%= link_to t('user.view.delete_user'), delete_user_path(:display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> - <% end %> -
- -
<%= @this_user.description.to_html %>
- -

- <%= 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 -%> - -

- - <% if @user and @user.administrator? -%> -

<%= t 'user.view.email address' %> <%= @this_user.email %>

- <% unless @this_user.creation_ip.nil? -%> -

<%= t 'user.view.created from' %> <%= @this_user.creation_ip %>

- <% end -%> -

<%= t 'user.view.status' %> <%= @this_user.status.capitalize %>

-

<%= t 'user.view.spam score' %> <%= @this_user.spam_score %>

- <% end -%> - - <% if @user and @this_user.id == @user.id %> - <% if @this_user.home_lat.nil? or @this_user.home_lon.nil? %> -
-

<%= 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)) %>

-
- <% else %> - <% content_for :head do %> - <%= javascript_include_tag "user" %> +
+ +
+

<%= t 'user.view.nearby users' %>

+ + <% if nearby.empty? %> + <%= t 'user.view.no nearby users' %> + <% else %> +
    +
  • <%= link_to t('user.view.nearby_changesets'), nearby_changesets_path %>
  • +
  • <%= link_to t('user.view.nearby_diaries'), nearby_diaries_path %>
  • +
+
+ <%= render :partial => "contact", :collection => nearby, :locals => {:type => "nearby mapper"} %> +
<% 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 %> - -

<%= t 'user.view.your friends' %>

- - <% if friends.empty? %> - <%= t 'user.view.no friends' %> - <% else %> - <%= link_to t('user.view.friends_changesets'), friend_changesets_path %>
- <%= link_to t('user.view.friends_diaries'), friend_diaries_path %>

- - <%= render :partial => "contact", :collection => friends, :locals => {:type => "friend"} %> -
- <% end %> - -

<%= t 'user.view.nearby users' %>

- - <% if nearby.empty? %> - <%= t 'user.view.no nearby users' %> - <% else %> - <%= link_to t('user.view.nearby_changesets'), nearby_changesets_path %>
- <%= link_to t('user.view.nearby_diaries'), nearby_diaries_path %>

- - <%= render :partial => "contact", :collection => nearby, :locals => {:type => "nearby mapper"} %> -
- <% end %> +
<% end %> diff --combined config/locales/de.yml index 986199735,b160d6feb..74f3cc499 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@@ -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: @@@ -338,8 -339,9 +339,9 @@@ 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 @@@ -949,22 -951,6 +951,22 @@@ 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 349016335,831311615..09d3ceae0 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@@ -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:" @@@ -192,7 -190,7 +192,7 @@@ relation: relation changeset: changeset paging_nav: - showing_page: "Showing page" + showing_page: "page" of: "of" redacted: redaction: "Redaction %{id}" @@@ -222,7 -220,6 +222,7 @@@ 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" @@@ -242,7 -239,7 +242,7 @@@ 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" @@@ -282,22 -279,12 +282,21 @@@ 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)" @@@ -324,14 -311,14 +323,14 @@@ 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 Beginners Guide." - 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: @@@ -346,7 -333,7 +345,7 @@@ 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: @@@ -945,7 -932,6 +944,6 @@@ 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 @@@ -1203,14 -1189,6 +1201,14 @@@ 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" @@@ -1287,7 -1265,6 +1285,7 @@@ 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" @@@ -1465,7 -1442,7 +1463,7 @@@ 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: @@@ -1488,6 -1465,7 +1486,7 @@@ 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. Upload a new trace or learn more about GPS tracing on the wiki page." delete: @@@ -1697,7 -1675,6 +1696,7 @@@ 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 @@@ -1707,9 -1684,8 +1706,9 @@@ diary: diary edits: edits traces: traces + notes: map notes - remove as friend: remove as friend - add as friend: add as friend + remove as friend: unfriend + add as friend: add friend mapper since: "Mapper since:" ago: "(%{time_in_words_ago} ago)" ct status: "Contributor terms:" @@@ -1723,7 -1699,7 +1722,7 @@@ 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. @@@ -1751,10 -1727,10 +1750,10 @@@ 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" @@@ -1835,12 -1811,12 +1834,12 @@@ 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: @@@ -1849,8 -1825,8 +1848,8 @@@ 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 @@@ -1949,7 -1925,7 +1948,7 @@@ status: "Status" revoker_name: "Revoked by" not_revoked: "(not revoked)" - showing_page: "Showing page %{page}" + showing_page: "Page %{page}" next: "Next »" previous: "« Previous" helper: @@@ -1978,25 -1954,6 +1977,25 @@@ 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: @@@ -2013,20 -1970,6 +2012,20 @@@ 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 %{user} at %{time}" + anonymous_event: "%{action} by anonymous at %{time}" + close: Close + comment_and_close: Comment & Close + comment: Comment redaction: edit: description: "Description" diff --combined test/functional/browse_controller_test.rb index 63c3d0b04,b6c11fd3c..11f51ae5c --- a/test/functional/browse_controller_test.rb +++ b/test/functional/browse_controller_test.rb @@@ -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 @@@ -83,51 -79,51 +83,51 @@@ # # 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