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
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'
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
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)
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)
//= 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();
+ }
});
/* 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;
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 */
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;
- 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,
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 {
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"],
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;
}
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;
+ }
+}
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
<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 %>
- <%= 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 %>
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
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"
{ :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