source 'http://rubygems.org'
# Require rails
- gem 'rails', '3.1.3'
+ gem 'rails', '3.2.2'
# Require the postgres database driver
gem 'pg'
gem 'jquery-rails'
# Load rails plugins
- gem 'rails-i18n-updater'
+ gem 'rails-i18n', ">= 0.5.1"
gem 'dynamic_form'
gem 'rinku', '>= 1.2.2', :require => 'rails_rinku'
gem 'oauth-plugin', '>= 0.4.0.pre7'
gem 'open_id_authentication', '>= 1.1.0'
gem 'validates_email_format_of', '>= 1.5.1'
- gem 'composite_primary_keys', '>= 4.1.1'
+ gem 'composite_primary_keys', '>= 5.0.0'
+ gem 'http_accept_language', '>= 1.0.2'
+ gem 'paperclip', '~> 2.0'
+ gem 'deadlock_retry', '>= 1.2.0'
+gem 'jsonify-rails'
+ # Character conversion support for ruby 1.8
+ gem 'iconv', :platforms => :ruby_18
+
# Load libxml support for XML parsing and generation
gem 'libxml-ruby', '>= 2.0.5', :require => 'libxml'
- # Load ImageMagick support for user picture resizing
- gem 'rmagick', :require => 'RMagick'
-
# Load HTML sanitizer
gem 'sanitize'
gem 'httpclient'
# Load memcache in case we are using it
- gem 'memcache-client'
- gem 'memcached'
+ gem 'memcached', '>= 1.4.1'
# Gems needed for running tests
group :test do
# Gems needed for compiling assets
group :assets do
- gem 'sass-rails', " ~> 3.1.0"
- gem 'coffee-rails', "~> 3.1.0"
- gem 'uglifier'
+ gem 'sass-rails', '~> 3.2.3'
+ gem 'coffee-rails', '~> 3.2.1'
+ gem 'uglifier', '>= 1.0.3'
gem 'therubyracer'
end
remote: http://rubygems.org/
specs:
SystemTimer (1.2.3)
- actionmailer (3.1.3)
- actionpack (= 3.1.3)
- mail (~> 2.3.0)
- actionpack (3.1.3)
- activemodel (= 3.1.3)
- activesupport (= 3.1.3)
+ actionmailer (3.2.2)
+ actionpack (= 3.2.2)
+ mail (~> 2.4.0)
+ actionpack (3.2.2)
+ activemodel (= 3.2.2)
+ activesupport (= 3.2.2)
builder (~> 3.0.0)
erubis (~> 2.7.0)
- i18n (~> 0.6)
- rack (~> 1.3.5)
+ journey (~> 1.0.1)
+ rack (~> 1.4.0)
rack-cache (~> 1.1)
- rack-mount (~> 0.8.2)
rack-test (~> 0.6.1)
- sprockets (~> 2.0.3)
- activemodel (3.1.3)
- activesupport (= 3.1.3)
+ sprockets (~> 2.1.2)
+ activemodel (3.2.2)
+ activesupport (= 3.2.2)
builder (~> 3.0.0)
- i18n (~> 0.6)
- activerecord (3.1.3)
- activemodel (= 3.1.3)
- activesupport (= 3.1.3)
- arel (~> 2.2.1)
+ activerecord (3.2.2)
+ activemodel (= 3.2.2)
+ activesupport (= 3.2.2)
+ arel (~> 3.0.2)
tzinfo (~> 0.3.29)
- activeresource (3.1.3)
- activemodel (= 3.1.3)
- activesupport (= 3.1.3)
- activesupport (3.1.3)
+ activeresource (3.2.2)
+ activemodel (= 3.2.2)
+ activesupport (= 3.2.2)
+ activesupport (3.2.2)
+ i18n (~> 0.6)
multi_json (~> 1.0)
- addressable (2.2.6)
- arel (2.2.1)
+ addressable (2.2.7)
+ arel (3.0.2)
builder (3.0.0)
- coffee-rails (3.1.1)
+ cocaine (0.2.1)
+ coffee-rails (3.2.2)
coffee-script (>= 2.2.0)
- railties (~> 3.1.0)
+ railties (~> 3.2.0)
coffee-script (2.2.0)
coffee-script-source
execjs
- coffee-script-source (1.1.3)
- composite_primary_keys (4.1.1)
- activerecord (~> 3.1)
+ coffee-script-source (1.2.0)
+ composite_primary_keys (5.0.1)
+ activerecord (~> 3.2.0)
+ deadlock_retry (1.2.0)
dynamic_form (1.1.4)
erubis (2.7.0)
- execjs (1.2.9)
+ execjs (1.3.0)
multi_json (~> 1.0)
- faraday (0.7.5)
- addressable (~> 2.2.6)
- multipart-post (~> 1.1.3)
- rack (< 2, >= 1.1.0)
+ faraday (0.7.6)
+ addressable (~> 2.2)
+ multipart-post (~> 1.1)
+ rack (~> 1.1)
hike (1.2.1)
- httpclient (2.2.3)
+ http_accept_language (1.0.2)
+ httpclient (2.2.4)
i18n (0.6.0)
- jquery-rails (1.0.18)
- railties (~> 3.0)
+ iconv (0.1)
+ journey (1.0.3)
+ jquery-rails (2.0.1)
+ railties (>= 3.2.0, < 5.0)
thor (~> 0.14)
- json (1.6.1)
- jsonify (0.2.0)
- jsonify-rails (0.2.0)
+ json (1.6.5)
++ jsonify (0.3.1)
++ multi_json (~> 1.0)
++ jsonify-rails (0.3.1)
+ actionpack
- jsonify (>= 0.2.0)
++ jsonify (>= 0.3.1)
libv8 (3.3.10.4)
libxml-ruby (2.2.2)
- mail (2.3.0)
- mail (2.4.1)
++ mail (2.4.3)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
- memcache-client (1.8.5)
- memcached (1.3.5)
+ memcached (1.4.1)
mime-types (1.17.2)
- multi_json (1.0.3)
- multipart-post (1.1.3)
+ multi_json (1.1.0)
+ multipart-post (1.1.5)
nokogiri (1.5.0)
oauth (0.4.5)
oauth-plugin (0.4.0.rc2)
oauth (~> 0.4.4)
oauth2
rack
- oauth2 (0.5.1)
- faraday (~> 0.7.4)
- multi_json (~> 1.0.3)
+ oauth2 (0.5.2)
+ faraday (~> 0.7)
+ multi_json (~> 1.0)
open_id_authentication (1.1.0)
rack-openid (~> 1.3)
- pg (0.11.0)
+ paperclip (2.7.0)
+ activerecord (>= 2.3.0)
+ activesupport (>= 2.3.2)
+ cocaine (>= 0.0.2)
+ mime-types
+ pg (0.13.2)
polyglot (0.3.3)
- rack (1.3.5)
- rack-cache (1.1)
+ rack (1.4.1)
- rack-cache (1.1)
++ rack-cache (1.2)
rack (>= 0.4)
- rack-mount (0.8.3)
- rack (>= 1.0.0)
rack-openid (1.3.1)
rack (>= 1.1.0)
ruby-openid (>= 2.1.8)
rack
rack-test (0.6.1)
rack (>= 1.0)
- rails (3.1.3)
- actionmailer (= 3.1.3)
- actionpack (= 3.1.3)
- activerecord (= 3.1.3)
- activeresource (= 3.1.3)
- activesupport (= 3.1.3)
+ rails (3.2.2)
+ actionmailer (= 3.2.2)
+ actionpack (= 3.2.2)
+ activerecord (= 3.2.2)
+ activeresource (= 3.2.2)
+ activesupport (= 3.2.2)
bundler (~> 1.0)
- railties (= 3.1.3)
- rails-i18n-updater (1.0.1)
- actionpack
- activesupport
- rails
- railties (3.1.3)
- actionpack (= 3.1.3)
- activesupport (= 3.1.3)
+ railties (= 3.2.2)
+ rails-i18n (0.5.1)
+ i18n (~> 0.5)
+ railties (3.2.2)
+ actionpack (= 3.2.2)
+ activesupport (= 3.2.2)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (~> 0.14.6)
rake (0.9.2.2)
- rdoc (3.11)
+ rdoc (3.12)
json (~> 1.4)
- rinku (1.4.1)
- rmagick (2.13.1)
+ rinku (1.5.1)
ruby-openid (2.1.8)
sanitize (2.0.3)
- nokogiri (< 1.6, >= 1.4.4)
- sass (3.1.10)
- sass-rails (3.1.5)
- actionpack (~> 3.1.0)
- railties (~> 3.1.0)
- sass (~> 3.1.10)
- tilt (~> 1.3.2)
- sprockets (2.0.3)
+ nokogiri (>= 1.4.4, < 1.6)
+ sass (3.1.15)
+ sass-rails (3.2.4)
+ railties (~> 3.2.0)
+ sass (>= 3.1.10)
+ tilt (~> 1.3)
+ sprockets (2.1.2)
hike (~> 1.2)
rack (~> 1.0)
- tilt (!= 1.3.0, ~> 1.1)
- therubyracer (0.9.9)
+ tilt (~> 1.1, != 1.3.0)
+ therubyracer (0.9.10)
libv8 (~> 3.3.10)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
polyglot
polyglot (>= 0.3.1)
-- tzinfo (0.3.31)
- uglifier (1.1.0)
++ tzinfo (0.3.32)
+ uglifier (1.2.3)
execjs (>= 0.3.0)
multi_json (>= 1.0.2)
validates_email_format_of (1.5.3)
DEPENDENCIES
SystemTimer (>= 1.1.3)
- coffee-rails (~> 3.1.0)
- composite_primary_keys (>= 4.1.1)
+ coffee-rails (~> 3.2.1)
+ composite_primary_keys (>= 5.0.0)
+ deadlock_retry (>= 1.2.0)
dynamic_form
+ http_accept_language (>= 1.0.2)
httpclient
+ iconv
jquery-rails
+ jsonify-rails
libxml-ruby (>= 2.0.5)
- memcache-client
- memcached
+ memcached (>= 1.4.1)
oauth-plugin (>= 0.4.0.pre7)
open_id_authentication (>= 1.1.0)
+ paperclip (~> 2.0)
pg
- rails (= 3.1.3)
- rails-i18n-updater
+ rails (= 3.2.2)
+ rails-i18n (>= 0.5.1)
rinku (>= 1.2.2)
- rmagick
sanitize
- sass-rails (~> 3.1.0)
+ sass-rails (~> 3.2.3)
therubyracer
timecop
- uglifier
+ uglifier (>= 1.0.3)
validates_email_format_of (>= 1.5.1)
/* Default rules for the body of every page */
body {
- font-family: Arial,sans-serif;
- color: #000;
+ font-family: 'Helvetica Neue',Arial,sans-serif;
+ font-size: 14px;
+ line-height: 20px;
+ color: #222;
background-color: #fff;
margin: 0px;
padding: 0px;
height: 1px;
}
+ /* Default rules for headings */
+
+ h2 {
+ margin: 5px 0;
+ font-size: 25px;
+ line-height: 30px;
+ }
+
/* Rules for the whole left sidebar, including the logo */
#left {
position: absolute;
top: 0px;
- min-width: 170px;
+ width: 185px;
+ font-size: 11px;
+ line-height: 12px;
}
/* Rules for the OpenStreetMap logo in the top left corner */
width: 170px;
min-width: 170px;
padding: 5px;
- margin: 5px;
- height: 150px;
- background: #fff;
- border: 1px solid #ccd;
- border-radius: 5px;
- -moz-border-radius: 5px;
+ text-align: center;
+ margin: 25px 0 5px 0;
}
#logo h1 {
- font-size: 14px;
+ font-size: 18px;
+ line-height: 20px;
text-align: center;
margin: 0px;
}
#logo h2 {
font-size: 10px;
+ line-height: 15px;
margin: 0px;
}
/* Rules for the introductory text displayed in the left sidebar to new users */
#intro {
- width: 170px;
- padding: 5px;
- margin: 5px;
- border: 1px solid #ccc;
- font-size: 11px;
- border-radius: 5px;
- -moz-border-radius: 5px;
+ border-top: 1px solid #ccc;
}
#intro p {
padding: 5px;
border: 1px solid #ccc;
background: #ea0;
- line-height: 1.2em;
+ line-height: 20px;
font-size: 14px;
border-radius: 5px;
-moz-border-radius: 5px;
/* Rules for the menu displayed in the left sidebar */
.left_menu {
- width: 170px;
- min-width: 170px;
- margin: 5px;
padding: 5px;
- border: 1px solid #ccc;
- background: #ddd;
- line-height: 1.2em;
+ margin: 4px 0;
+ border-top: 1px solid #ccc;
+ border-bottom: 1px solid #ccc;
+ line-height: 20px;
font-size: 14px;
font-weight: bold;
- border-radius: 5px;
- -moz-border-radius: 5px;
- }
-
- .left_menu td {
- font-size: 12px;
}
.left_menu h1 {
*/
.optionalbox {
- width: 170px;
- min-width: 170px;
- margin: 5px;
padding: 5px;
- border: 1px solid #ccc;
- line-height: 1.2em;
- font-size: 12px;
- background: #eee;
- border-radius: 5px;
- -moz-border-radius: 5px;
+ margin: 4px 0;
+ border-top: 1px solid #ccc;
}
.optionalbox h1 {
font-size: 14px;
font-weight: bold;
- line-height: 22px;
+ line-height: 20px;
margin: 0px;
vertical-align: bottom;
}
/* Rules for the search box */
.whereami {
- line-height: 22px;
+ line-height: 20px;
vertical-align: bottom;
}
.search_container {
- height: 16px;
- padding-bottom: 6px;
+ height: 15px;
+ padding-bottom: 5px;
}
#search_field form {
}
.search_help {
- font-size: 10px;
- line-height: 1em;
- margin-top: 3px;
+ margin-top: 2px;
margin-bottom: 0px;
}
/* Rules for donation request box */
.donate {
- width: 170px;
- margin: 5px;
+ width: 155px;
+ margin: 10px 5px;
padding: 5px;
border: 1px solid #ccc;
background: #cbeea7;
- line-height: 1.2em;
+ line-height: 20px;
text-align: center;
font-size: 14px;
border-radius: 5px;
/* Rules for tabbed navigation bar */
- #tabnav
- {
- height: 20px;
- margin: 0px;
- padding-top: 5px;
- background: image-url('tab_bottom.gif') repeat-x bottom;
+ #top-bar {
+ border-bottom: 1px solid #ccc;
+ height: 29px;
}
- #tabnav li
- {
- margin: 0px;
+ #tabnav {
+ padding: 0;
+ margin: 0;
+ overflow:hidden;
+ }
+
+ #tabnav li {
+ margin: 0px;
padding: 0px;
display: inline;
list-style-type: none;
}
- #tabnav a, #tabnav a:link, #tabnav a:visited
- {
- background: #f3f3f3;
- font-size: 13px;
- line-height: 14px;
+ #tabnav a, #tabnav a:link, #tabnav a:visited {
+ background: #fff;
+ font-size: 14px;
+ line-height: 19px;
font-weight: bold;
- padding: 2px 10px;
- border: 1px solid #ccc;
+ padding: 5px 10px;
text-decoration: none;
color: #333;
- border-top-right-radius: 5px;
- -moz-border-radius-topright: 5px;
- border-top-left-radius: 5px;
- -moz-border-radius-topleft: 5px;
}
- #tabnav a:link.active, #tabnav a:visited.active
- {
- border-bottom: 1px solid #fff;
- background: #fff;
+ #tabnav a:link.active, #tabnav a:visited.active {
+ border-bottom: 1px solid #aaa;
+ background: #9ed485;
color: #000;
}
- #tabnav a:link:hover, #tabnav a:visited:hover
- {
- background: #fff;
+ #tabnav a:link:hover, #tabnav a:visited:hover {
+ text-decoration:underline;
}
- #tabnav a:link.disabled, #tabnav a:visited.disabled,
- #tabnav a:link:hover.disabled, #tabnav a:visited:hover.disabled
- {
- background: #bbbbbb;
- color: white
+ #tabnav a:link.disabled,
+ #tabnav a:visited.disabled,
+ #tabnav a:link:hover.disabled,
+ #tabnav a:visited:hover.disabled {
+ color: #888;
}
/* Rules for greeting bar in the top right corner */
#greeting {
- height: 20px;
+ height: 28px;
margin: 0px;
- padding-top: 5px;
font-size: 13px;
- line-height: 14px;
- background: image-url('tab_bottom.gif') repeat-x bottom;
+ line-height: 28px;
}
.greeting-bar-unread {
/* Rules for OpenLayers maps */
#map {
- border: 1px solid black;
- margin: 0px;
+ margin: 0px;
padding: 0px;
}
#permalink {
z-index: 10000;
position: absolute;
- bottom: 15px;
- right: 15px;
+ bottom: 0px;
+ right: 0px;
+ padding: 5px;
+ background:#fff;
text-align: right;
- font-size: smaller;
+ font-size: 12px;
+ }
+
+ #permalink a {
+ padding: 5px;
}
/* Rules for edit menu */
#sidebar {
display: none;
position: absolute;
- border: 1px solid black;
margin: 0px;
padding: 0px;
width: 30%;
overflow: auto;
position: absolute;
font-size: 13px;
- line-height: 14px;
+ line-height: 15px;
top: 29px;
bottom: 0px;
left: 0px;
#sidebar .sidebar_title {
margin: 0px;
- padding: 3px 6px;
+ padding: 3px 6px 4px 6px;
height: 29px;
font-size: 14px;
line-height: 15px;
- border-bottom: 1px solid black;
background: #bbb;
}
.search_results_heading {
margin: 0px;
- padding: 3px 6px;
- border: 1px solid #ccc;
- background: #ddd;
+ padding: 2px 5px;
+ border-bottom: 1px solid #ccc;
+ font-weight: bold;
}
.search_results_entry {
margin: 0px;
- padding: 2px 6px;
+ padding: 2px 5px;
}
.search_results_error {
.export_heading {
margin: 0px;
- padding: 3px 6px;
- border: 1px solid #ccc;
- background: #ddd;
+ padding: 2px 5px;
+ border-bottom: 1px solid #ccc;
+ font-weight: bold;
}
.export_bounds {
/* Rules for the main content area */
#content {
- padding: 0px;
+ padding: 10px;
margin: 0px;
- position: absolute;
- bottom: 10px;
- line-height: 1.2em;
+ position: absolute;
+ bottom: 0px;
+ }
+
+ #content.site_index,
+ #content.site_edit,
+ #content.site_export {
+ border: 0px;
+ padding: 0px;
}
#slim_container {
white-space: nowrap;
}
+td.browse_comments {
+ padding: 0px;
+}
+
+td.browse_comments table {
+ border-collapse: collapse;
+}
+
+td.browse_comments table td {
+ padding-bottom: 10px;
+}
+
+td.browse_comments table td span.by {
+ font-size: small;
+ color: #999999;
+}
+
#browse_map {
width: 250px;
}
position: relative;
width: 90%;
height: 400px;
+ border: 1px solid #ccc;
display: none;
}
position: relative;
width: 500px;
height: 400px;
+ border: 1px solid #ccc;
}
#accountImage td {
position: relative;
width: 400px;
height: 400px;
+ border: 1px solid #ccc;
}
.user_view .user_map p#no_home_location {
.fieldName {
vertical-align: top;
font-weight: bold;
+ font-size: 12px;
+ line-height: 20px;
}
.minorNote {
font-size: 0.8em;
}
- input[type="text"], input[type="email"], input[type="url"], input[type="password"], textarea {
- border: 1px solid black;
- }
-
- input[type="submit"] {
- border: 1px solid black;
+ input[type="text"],
+ input[type="email"],
+ input[type="url"],
+ input[type="password"],
+ textarea {
+ border: 1px solid #888;
}
/* Rules for user images */
/* Rules for doing distinct colour of alternate table rows */
- .table0 {
+ .table0 {
background: #f6f6f6;
}
- .table1 {
+ .table1 {
background: #fff;
}
/* Rules for the main content area */
#content {
- top: 35px;
+ top: 30px;
}
/* Rules for OpenLayers maps */
.olControlPanZoom {
display: none;
}
+
+/* Rules for map bug reporting */
+
+#reportbuganchor {
+ font-size: 150%;
+}
url = "http://nominatim.openstreetmap.org/reverse?lat=#{lat}&lon=#{lon}&zoom=#{zoom}&accept-language=#{language}"
begin
- response = Timeout::timeout(4) do
+ response = OSM::Timer.timeout(4) do
REXML::Document.new(Net::HTTP.get(URI.parse(url)))
end
rescue Exception
def user_image(user, options = {})
options[:class] ||= "user_image"
- if user.image
- image_tag url_for_file_column(user, "image"), options
- else
- image_tag "anon_large.png", options
- end
+ image_tag user.image.url(:large), options
end
def user_thumbnail(user, options = {})
options[:class] ||= "user_thumbnail"
- if user.image
- image_tag url_for_file_column(user, "image"), options
- else
- image_tag "anon_small.png", options
- end
+ image_tag user.image.url(:small), options
end
def preferred_editor
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?
+ h(object.author_name)
+ else
+ link_to h(object.author_name), link_options.merge({:controller => "user", :action => "view", :display_name => object.author_name})
+ end
+ end
+
+ def with_format(format, &block)
+ old_format = @template_format
+ @template_format = format
+ result = block.call
+ @template_format = old_format
+ return result
+ end
+
private
def javascript_strings_for_key(key)
<div id="map">
<div id="permalink">
- <a href="/" id="permalinkanchor" class="geolink llz layers object"><%= t 'site.index.permalink' %></a><br/>
+ <a href="/" id="permalinkanchor" class="geolink llz layers object"><%= t 'site.index.permalink' %></a>
<a href="/" id="shortlinkanchor"><%= t 'site.index.shortlink' %></a>
+ <a href="#" id="createnoteanchor">Report a problem</a>
</div>
</div>
OpenLayers.Lang.setCode("<%= I18n.locale.to_s %>");
+ <% if @user %>
+ var loginName = "<%= @user.display_name %>"
+ <% end %>
+
function mapInit(){
map = createMap("map");
map.dataLayer = new OpenLayers.Layer("<%= I18n.t 'browse.start_rjs.data_layer_name' %>", { "visibility": false });
map.dataLayer.events.register("visibilitychanged", map.dataLayer, toggleData);
map.addLayer(map.dataLayer);
+
+ map.noteLayer = new OpenLayers.Layer.Vector("Notes", {
+ visibility: false,
+ projection: new OpenLayers.Projection("EPSG:4326"),
+ styleMap: new OpenLayers.StyleMap(new OpenLayers.Style({
+ graphicWidth: 22,
+ graphicHeight: 22,
+ graphicOpacity: 0.7,
+ graphicXOffset: -11,
+ graphicYOffset: -11
+ }, {
+ rules: [
+ new OpenLayers.Rule({
+ filter: new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.EQUAL_TO,
+ property: "status",
+ value: "open"
+ }),
+ symbolizer: {
+ externalGraphic: "<%= image_path 'open_note_marker.png' %>"
+ }
+ }),
+ new OpenLayers.Rule({
+ filter: new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.EQUAL_TO,
+ property: "status",
+ value: "closed"
+ }),
+ symbolizer: {
+ externalGraphic: "<%= image_path 'closed_note_marker.png' %>"
+ }
+ })
+ ]
+ })),
+ strategies: [
+ new OpenLayers.Strategy.BBOX()
+ ],
+ protocol: new OpenLayers.Protocol.HTTP({
+ url: "<%= url_for :controller => :note, :action => :list, :format => :json %>",
+ format: new OpenLayers.Format.GeoJSON(),
+ callback: noteCallback
+ })
+ });
+ map.noteLayer.events.register("featureselected", map, noteSelected);
+ map.noteLayer.events.register("featureunselected", map, noteUnselected);
+ map.addLayer(map.noteLayer);
+
+ map.noteControl = new OpenLayers.Control.SelectFeature(map.noteLayer, {
+ autoActivate: true
+ });
+ map.addControl(map.noteControl);
+
+ <% if params[:notes] == "yes" -%>
+ map.noteLayer.setVisibility(true);
+ <% end -%>
+
+ $("#createnoteanchor").click(addNote);
+
+ map.events.register("zoomend", map, allowNoteReports);
<% end %>
<% unless object_zoom %>
<% end %>
}
+ function noteCallback(scope, response) {
+ for (var f = 0; f < response.features.length; f++) {
+ var feature = response.features[f];
+ }
+ }
+
+ function noteSelected(o) {
+ var feature = o.feature;
+ var location = feature.geometry.getBounds().getCenterLonLat();
+
+ feature.popup = new OpenLayers.Popup.FramedCloud(
+ feature.attributes.id, location, null,
+ "<p>" + feature.attributes.id + "</p>",
+ null, true, function (e) { map.noteControl.unselect(feature) }
+ );
+
+ map.addPopup(feature.popup);
+// feature.popup.show();
+ }
+
+ function noteUnselected(o) {
+ var feature = o.feature;
+
+ map.removePopup(feature.popup);
+ delete feature.popup;
+ }
+
+ function addNote() {
+ map.noteLayer.setVisibility(true);
+ map.noteLayer.addNote(map.getCenter());
+ }
+
+ function allowNoteReports() {
+ if (map.getZoom() > 11) {
+ $("#createnoteanchor").show();
+ } else {
+ $("#createnoteanchor").hide();
+ }
+ }
+
$(document).ready(mapInit);
$(document).ready(installEditHandler);
$(document).ready(handleResize);
|
<%= link_to t('user.view.new diary entry'), :controller => 'diary_entry', :action => 'new', :display_name => @user.display_name %>
|
+ <%= link_to t('user.view.my comments' ), :controller => 'diary_entry', :action => 'comments', :display_name => @this_user.display_name %>
+ |
<%= link_to t('user.view.my edits'), :controller => 'changeset', :action => 'list', :display_name => @user.display_name %>
|
- <%= link_to t('user.view.my traces'), :controller => 'trace', :action=>'mine' %>
+ <%= link_to t('user.view.my traces'), :controller => 'trace', :action=> 'mine' %>
+ |
+ <%= link_to t('user.view.my notes'), :controller => 'note', :action=> 'mine' %>
|
<%= link_to t('user.view.my settings'), :controller => 'user', :action => 'account', :display_name => @user.display_name %>
|
|
<%= link_to t('user.view.diary'), :controller => 'diary_entry', :action => 'list', :display_name => @this_user.display_name %>
|
+ <%= link_to t('user.view.comments'), :controller => 'diary_entry', :action => 'comments', :display_name => @this_user.display_name %>
+ |
<%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list', :display_name => @this_user.display_name %>
|
<%= link_to t('user.view.traces'), :controller => 'trace', :action => 'list', :display_name => @this_user.display_name %>
|
+ <%= link_to t('user.view.notes'), :controller => 'note', :action=> 'mine' %>
+ |
<% if @user and @user.is_friends_with?(@this_user) %>
<%= link_to t('user.view.remove as friend'), :controller => 'user', :action => 'remove_friend', :display_name => @this_user.display_name %>
<% else %>
<% if friends.empty? %>
<%= t 'user.view.no friends' %>
<% else %>
- <%= link_to t('user.view.friends_changesets'), {:controller => 'browse', :action => 'friends'} %><br/><br/>
+ <%= link_to t('user.view.friends_changesets'), {:controller => 'browse', :action => 'friends'} %><br/>
+ <%= link_to t('user.view.friends_diaries'), {:controller => 'diary', :action => 'friends'} %><br/><br/>
<table id="friends">
<%= render :partial => "contact", :collection => friends %>
</table>
<% if nearby.empty? %>
<%= t 'user.view.no nearby users' %>
<% else %>
+ <%= link_to t('user.view.nearby_changesets'), {:controller => 'browse', :action => 'nearby'} %><br/>
+ <%= link_to t('user.view.nearby_diaries'), {:controller => 'diary', :action => 'nearby'} %><br/><br/>
<table id="nearbyusers">
<%= render :partial => "contact", :collection => nearby %>
</table>
max_number_of_nodes: 50000
# Maximum number of nodes that can be in a way (checked on save)
max_number_of_way_nodes: 2000
+ # The maximum area you're allowed to request notes from, in square degrees
+ max_note_request_area: 25
# Zoom level to use for postcode results from the geocoder
postcode_zoom: 15
# Zoom level to use for geonames results from the geocoder
# Location of GPX traces and images
gpx_trace_dir: "/home/osm/traces"
gpx_image_dir: "/home/osm/images"
- # Location of data for file columns
- #file_column_root: ""
+ # Location of data for attachments
+ attachments_dir: ":rails_root/public/attachments"
# Log file to use
#log_path: ""
# List of memcache servers to use for caching
list:
description: Letzte Änderungen
description_bbox: Letzte Änderungen in %{bbox}
+ description_friend: Änderungssätze deiner Freunde
+ description_nearby: Änderungssätze von Benutzern in der Nähe
description_user: Letzte Änderungen von %{user}
description_user_bbox: Letzte Änderungen von %{user} in %{bbox}
heading: Änderungssätze
heading_bbox: Änderungssätze
+ heading_friend: Änderungssätze
+ heading_nearby: Änderungssätze
heading_user: Änderungssätze
heading_user_bbox: Änderungssätze
title: Änderungssätze
title_bbox: Änderungssätze in %{bbox}
+ title_friend: Änderungssätze deiner Freunde
+ title_nearby: Änderungssätze von Benutzern in der Nähe
title_user: Änderungssätze von %{user}
title_user_bbox: Änderungssätze von %{user} in %{bbox}
timeout:
sorry: Es hat leider zu lange gedauert, die von dir angeforderten Änderungssätze abzurufen.
diary_entry:
+ comments:
+ ago: vor %{ago}
+ comment: Kommentar
+ has_commented_on: "%{display_name} hat die folgenden Blogeinträge kommentiert"
+ newer_comments: Neuere Kommentare
+ older_comments: Ältere Kommentare
+ post: Blogeintrag
+ when: Zeitpunkt
diary_comment:
comment_from: Kommentar von %{link_user} am %{comment_created_at}
confirm: Bestätigen
older_entries: Ältere
recent_entries: "Neuste Einträge:"
title: Blogs
+ title_friends: Tagebücher meiner Freunde
+ title_nearby: Tagebücher von Nutzern in der Nähe
user_title: "%{user}s Blog"
location:
edit: Bearbeiten
licence: Lizenz
longitude: "Längengrad:"
manually_select: Einen anderen Bereich manuell auswählen
- mapnik_image: Mapnik-Bild
+ map_image: Karte (zeigt die Standardebene)
max: max.
options: Optionen
osm_xml_data: OpenStreetMap-XML-Daten
- osmarender_image: Osmarender-Bild
output: Ausgabe
paste_html: HTML-Code kopieren, um ihn in eine Website einzufügen.
scale: Maßstab
veterinary: Tierarzt
village_hall: Gemeindezentrum
waste_basket: Mülleimer
- wifi: WLAN-Access-Point
+ wifi: WiFi-Zugang
youth_centre: Jugendhaus
boundary:
administrative: Verwaltungsgrenze
base:
cycle_map: Radfahrerkarte
mapquest: MapQuest Open
+ standard: Standard
transport_map: Verkehrskarte
site:
edit_disabled_tooltip: Reinzoomen zum Editieren der Karte
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_blogs: Blogs
community_blogs_title: Blogs von Mitwirkenden bei OpenStreetMap
english_link: dem englischsprachigen Original
text: Für den Fall einer Abweichung zwischen der vorliegenden Übersetzung und %{english_original_link}, ist die englischsprachige Seite maßgebend.
title: Über diese Übersetzung
- legal_babble: "<h2>Urheberrecht und Lizenz</h2>\n\n<p>\n OpenStreetMap besteht aus <i>freien Daten</i>, die gemäß der Lizenz <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">Creative Commons Attribution-ShareAlike 2.0</a> (CC-BY-SA) verfügbar sind.\n</p>\n<p>\n Es steht dir frei unsere Daten und Karten zu kopieren, weiterzugeben, zu übermittelt sowie anzupassen, sofern du OpenStreetMap und die Mitwirkenden als Quelle angibst. Für den Fall, dass du auf Basis unserer Daten und Karten Anpassungen vornimmst, oder sie als Basis für weitere Bearbeitungen verwendest, kannst du das Ergebnis auch nur gemäß der selben Lizenz weitergeben. Der vollständige Lizenztext ist unter <a href=\"http://creativecommons.org/licenses/by-sa/2.0/legalcode\">Lizenz</a> einsehbar und erläutert deine Rechte und Pflichten.\n</p>\n\n<h3>So ist auf die Urheberschaft von OpenStreetMap hinzuweisen</h3>\n<p>\n Sofern du Bilder von OpenStreetMap verwendest, so ist mindestens „© OpenStreetMap und Mitwirkende, CC-BY-SA“ als Quelle anzugeben. Werden hingegen ausschließlich Geodaten genutzt, so ist mindestens „Geodaten © OpenStreetMap und Mitwirkende, CC-BY-SA“ anzugeben.\n</p>\n<p>\n Wo möglich, muss ein Hyperlink auf OpenStreetMap <a href=\"http://www.openstreetmap.org/\">http://www.openstreetmap.org/</a> und die Lizenz CC-BY-SA <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">http://creativecommons.org/licenses/by-sa/2.0/</a> gesetzt werden. Für den Fall, dass du ein Medium einsetzt, bei dem keine derartigen Verweise möglich sind (z. B. ein gedrucktes Buch), schlagen wir vor, dass du deine Leser auf www.openstreetmap.org und www.creativecommons.org hinweist.\n</p>\n\n<h3>Mehr hierzu in Erfahrung bringen</h3>\n<p>\n Mehr dazu, wie unsere Daten verwendet werden können, ist unter <a href=\"http://wiki.openstreetmap.org/wiki/Legal_FAQ\">Häufige rechtliche Fragen</a> nachzulesen.\n</p>\n<p>\n Die Mitwirkenden von OpenStreetMap weisen wir darauf hin, dass du keinesfalls Daten aus urheberrechtlich geschützten Quellen verwenden darfst (z. B. Google Maps oder gedruckte Kartenwerke), ohne vorher die ausdrückliche Erlaubnis des Rechteinhabers erhalten zu haben.\n</p>\n<p>\n Obzwar OpenStreetMap aus freien Daten besteht, können wir Dritten keine kostenfreie Programmierschnittstelle (API) für Karten bereitstellen.\n \n Siehe hierzu die <a href=\"http://wiki.openstreetmap.org/wiki/API_usage_policy\">Richtlinie zur Nutzung einer API</a>, die <a href=\"http://wiki.openstreetmap.org/wiki/Tile_usage_policy\">Richtlinie zur Nutzung von Kachelgrafiken</a> und die <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy\">Nutzungsrichtlinie bezüglich Daten von Nominatim</a>.\n</p>\n\n<h3>Unsere Mitwirkenden</h3>\n<p>\n Die von uns verwendete Lizenz CC-BY-SA verlangt, dass du „für das betreffende Medium oder Mittel in angemessener Weise, auf die ursprünglichen Bearbeiter hinweist.“ Einige an OpenStreetMap Mitwirkende verlangen keine über den Vermerk „OpenStreetMap und Mitwirkende“ hinausgehende Hinweise. Wo allerdings Daten von nationalen Kartografierungsinstitutionen oder aus anderen umfangreichen Quellen einbezogen wurden, ist es sinnvoll, deren Lizenzhinweise direkt wiederzugeben oder auf diese auf dieser Website zu verlinken.\n</p>\n\n<ul id=\"contributors\">\n <li><strong>Australien</strong>: Enthält Daten zu Siedlungen, die auf Daten des <i>Australian Bureau of Statistics</i> basieren.</li>\n <li><strong>Frankreich</strong>: Enthält Daten der <i>Direction Générale des Impôts</i>.</li>\n <li><strong>Kanada</strong>: Enthält Daten von GeoBase®, GeoGratis (© <i>Department of Natural Resources Canada</i>), CanVec (© <i>Department of Natural Resources Canada</i>) und StatCan (<i>Geography Division, Statistics Canada</i>).</li>\n <li><strong>Neuseeland</strong>: Enthält Daten aus <i>Land Information New Zealand</i>. Urheberrecht vorbehalten.</li>\n <li><strong>Österreich</strong>: Enthält Daten der <a href=\"http://data.wien.gv.at/\">Stadt Wien</a>. Lizenziert gemäß <a href=\"http://creativecommons.org/licenses/by/3.0/at/deed.de\">CC-BY</a>.</li>\n <li><strong>Polen</strong>: Enthält Daten aus <a href=\"http://ump.waw.pl/\">UMP-pcPL maps</a>. Copyright UMP-pcPL und Mitwirkende.</li>\n <li><strong>Vereinigtes Königreich</strong>: Enthält Daten des <i>Ordnance Survey</i> © Urheber- und Datenbankrecht 2010.</li>\n</ul>\n\n<p>\n Die Einbeziehung von Daten bei OpenStreetMap impliziert nicht, das der ursprüngliche Datenlieferant OpenStreetMap unterstützt, Gewährleistung gibt, noch Haftung übernimmt.\n</p>"
+ legal_babble: "<h2>Urheberrecht und Lizenz</h2>\n\n<p>\nOpenStreetMap ist <i>„Open Data“</i>, die gemäß der Lizenz <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">Creative Commons Attribution-ShareAlike 2.0</a> (CC BY-SA) verfügbar sind.\n</p>\n<p>\n Es steht dir frei unsere Daten und Karten zu kopieren, weiterzugeben, zu übermittelt sowie anzupassen, sofern du OpenStreetMap und die Mitwirkenden als Quelle angibst. Für den Fall, dass du auf Basis unserer Daten und Karten Anpassungen vornimmst, oder sie als Basis für weitere Bearbeitungen verwendest, kannst du das Ergebnis auch nur gemäß der selben Lizenz weitergeben. Der vollständige Lizenztext ist unter <a href=\"http://creativecommons.org/licenses/by-sa/2.0/legalcode\">Lizenz</a> einsehbar und erläutert deine Rechte und Pflichten.\n</p>\n\n<h3>So ist auf die Urheberschaft von OpenStreetMap hinzuweisen</h3>\n<p>\n Sofern du Bilder von OpenStreetMap verwendest, so ist mindestens „© OpenStreetMap und Mitwirkende, CC BY-SA“ als Quelle anzugeben. Werden hingegen ausschließlich Geodaten genutzt, so ist mindestens „Geodaten © OpenStreetMap und Mitwirkende, CC BY-SA“ anzugeben.\n</p>\n<p>\n Wo möglich, muss ein Hyperlink auf OpenStreetMap <a href=\"http://www.openstreetmap.org/\">http://www.openstreetmap.org/</a> und die Lizenz CC BY-SA <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">http://creativecommons.org/licenses/by-sa/2.0/</a> gesetzt werden. Für den Fall, dass du ein Medium einsetzt, bei dem keine derartigen Verweise möglich sind (z. B. ein gedrucktes Buch), schlagen wir vor, dass du deine Leser auf www.openstreetmap.org und www.creativecommons.org hinweist.\n</p>\n\n<h3>Mehr hierzu in Erfahrung bringen</h3>\n<p>\n Mehr dazu, wie unsere Daten verwendet werden können, ist unter <a href=\"http://wiki.openstreetmap.org/wiki/Legal_FAQ\">Häufige rechtliche Fragen</a> nachzulesen.\n</p>\n<p>\n Die Mitwirkenden von OpenStreetMap weisen wir darauf hin, dass du keinesfalls Daten aus urheberrechtlich geschützten Quellen verwenden darfst (z. B. Google Maps oder gedruckte Kartenwerke), ohne vorher die ausdrückliche Erlaubnis des Rechteinhabers erhalten zu haben.\n</p>\n<p>\n Obwohl OpenStreetMap aus freien Daten besteht, können wir Dritten keine kostenfreie Programmierschnittstelle (API) für Karten bereitstellen.\n \n Siehe hierzu die <a href=\"http://wiki.openstreetmap.org/wiki/API_usage_policy\">Richtlinie zur Nutzung einer API</a>, die <a href=\"http://wiki.openstreetmap.org/wiki/Tile_usage_policy\">Richtlinie zur Nutzung von Kachelgrafiken</a> und die <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy\">Nutzungsrichtlinie bezüglich Daten von Nominatim</a>.\n</p>\n\n<h3>Unsere Mitwirkenden</h3>\n<p>\n Die von uns verwendete Lizenz CC BY-SA verlangt, dass du „für das betreffende Medium oder Mittel in angemessener Weise, auf die ursprünglichen Bearbeiter hinweist.“ Einige an OpenStreetMap Mitwirkende verlangen keine über den Vermerk „OpenStreetMap und Mitwirkende“ hinausgehende Hinweise. Wo allerdings Daten von nationalen Kartografierungsinstitutionen oder aus anderen umfangreichen Quellen einbezogen wurden, ist es sinnvoll, deren Lizenzhinweise direkt wiederzugeben oder auf diese auf dieser Website zu verlinken.\n</p>\n\n<ul id=\"contributors\">\n <li><strong>Australien</strong>: Enthält Daten zu Siedlungen, die auf Daten des <i>Australian Bureau of Statistics</i> basieren.</li>\n <li><strong>Frankreich</strong>: Enthält Daten der <i>Direction Générale des Impôts</i>.</li>\n <li><strong>Kanada</strong>: Enthält Daten von GeoBase®, GeoGratis (© <i>Department of Natural Resources Canada</i>), CanVec (© <i>Department of Natural Resources Canada</i>) und StatCan (<i>Geography Division, Statistics Canada</i>).</li>\n <li><strong>Neuseeland</strong>: Enthält Daten aus <i>Land Information New Zealand</i>. Urheberrecht vorbehalten.</li>\n <li><strong>Österreich</strong>: Enthält Daten der <a href=\"http://data.wien.gv.at/\">Stadt Wien</a>. Lizenziert gemäß <a href=\"http://creativecommons.org/licenses/by/3.0/at/deed.de\">CC BY</a>.</li>\n <li><strong>Polen</strong>: Enthält Daten aus <a href=\"http://ump.waw.pl/\">UMP-pcPL Karten</a>. Urheberrechtlich geschützt, UMP-pcPL und Mitwirkende. <a href=\"http://wiki.openstreetmap.org/wiki/UMP2OSM_Importing\">Mehr zur Nutzung der UMP-Daten durch OSM</a></li>\n <li><strong>Südafrika</strong>: Enthält Daten von <i><a href=\"http://www.ngi.gov.za/\">Chief Directorate: National Geo-Spatial Information</a></i>, Staatliches Urheberrecht vorbehalten.</li>\n <li><strong>Vereinigtes Königreich</strong>: Enthält Daten des <i>Ordnance Survey</i> © Urheber- und Datenbankrecht 2010.</li>\n</ul>\n\n<p>\n Die Einbeziehung von Daten bei OpenStreetMap impliziert nicht, dass der ursprüngliche Datenlieferant OpenStreetMap unterstützt, Gewährleistung gibt, noch Haftung übernimmt.\n</p>"
native:
mapping_link: mit dem Kartieren anfangen
native_link: deutschen Sprachversion
inbox:
date: Datum
from: Absender
+ messages: Du hast %{new_messages} und %{old_messages}
my_inbox: Posteingang
+ new_messages:
+ one: eine neue Nachricht
+ other: "%{count} neue Nachrichten"
no_messages_yet: Du hast noch keine Nachrichten. Trete doch mit %{people_mapping_nearby_link} in Kontakt.
+ old_messages:
+ one: eine alte Nachricht
+ other: "%{count} alte Nachrichten"
outbox: Gesendet
people_mapping_nearby: Mappern in deiner Nähe
subject: Betreff
title: Posteingang
- you_have: Du hast %{new_count} neue Nachrichten und %{old_count} alte Nachrichten
mark:
as_read: Nachricht als gelesen markiert
as_unread: Nachricht als ungelesen markiert
outbox:
date: Datum
inbox: Posteingang
+ messages:
+ one: Du hast eine Nachricht gesendet
+ other: Du hast %{count} Nachrichten gesendet
my_inbox: "%{inbox_link}"
no_sent_messages: Du hast noch keine Nachrichten versendet. Trete doch mit %{people_mapping_nearby_link} in Kontakt.
outbox: Gesendet
subject: Betreff
title: Gesendet
to: An
- you_have_sent_messages: Du hast %{count} Nachrichten versendet
read:
back_to_inbox: Zurück zum Posteingang
back_to_outbox: Zurück zu Gesendete Nachrichten
summary_no_ip: "%{name} erstellt am %{date}"
title: Benutzer
login:
+ account is suspended: Dein Benutzerkonto wurde aufgrund verdächtiger Aktivitäten gesperrt.<br />Bitte kontaktiere den <a href="%{webmaster}">Webmaster</a>, sofern du dies klären möchtest.
account not active: Leider wurde dein Benutzerkonto bislang noch nicht aktiviert.<br />Bitte aktiviere dein Benutzerkonto, indem du auf den Link in deiner Bestätigungs-E-Mail klickst oder <a href="%{reconfirm}">eine neue Bestätigungs-E-Mail anforderst</a>.
- account suspended: Dein Benutzerkonto wurde aufgrund verdächtiger Aktivitäten gesperrt, um potentiellen Schaden von OpenStreetMap abzuwenden. <br /> Bitte kontaktiere den %{webmaster}, sofern du diese Angelegenheit klären möchtest.
auth failure: Sorry, Anmelden mit diesen Daten nicht möglich.
create account minute: Erstelle ein Benutzerkonto. Es dauert nur eine Minute.
email or username: "E-Mail-Adresse oder Benutzername:"
login_button: Anmelden
lost password link: Passwort vergessen?
new to osm: Neu bei OpenStreetMap?
+ no account: Du hast noch kein Benutzerkonto?
notice: <a href="http://wiki.openstreetmap.org/wiki/DE:ODbL/Wir_wechseln_die_Lizenz">Informiere dich über den bevorstehenden Lizenzwechsel bei OpenStreetMap</a> (<a href="http://wiki.openstreetmap.org/wiki/ODbL/We_Are_Changing_The_License">Übersetzungen</a>) (<a href="http://wiki.openstreetmap.org/wiki/Talk:ODbL/Upcoming">Diskussion</a>)
+ notice_terms: OpenStreetMap stellt am 1. April 2012 auf eine neuen Lizenz um. Es handelt sich bei der neuen Lizenz um eine ebenso freie Lizenz, wie es die aktuelle ist, allerdings sind deren rechtliche Rahmenbedingungen besser auf die Bedürfnisse unserer Kartendatenbank abgestimmt. Wir würden es sehr begrüßen, sofern wir deine Beiträge zu OpenStreetMap weiterhin speichern und zugänglich machen könnten. Dies ist allerdings nur dann möglich, sofern du zustimmst, dass wir dies gemäß den Bedingungen der neuen Lizenz auch tun dürfen. Anderenfalls müssen wir deine Beiträge aus der Datenbank löschen.<br /><br />Bitte melde dich an, um die neuen Bedingungen zu lesen und zu akzeptieren. Vielen Dank.
openid: "%{logo} OpenID:"
openid invalid: Deine OpenID scheint leider fehlerhaft zu sein.
openid missing provider: Wir konnten leider keine Verbindung zu deinem OpenID-Dienst herstellen.
remember: "Anmeldedaten merken:"
title: Anmelden
to make changes: Um Datenänderungen bei OpenStreetMap vornehmen zu können, musst Du ein Benutzerkonto haben.
- webmaster: Webmaster
with openid: "Alternativ kannst du deine OpenID zum Anmelden nutzen:"
with username: "Hast du bereits ein Konto bei OpenStreetMap? Bitte melde dich mit deinem Benutzernamen und Passwort an:"
logout:
block_history: Erhaltene Sperren anzeigen
blocks by me: Selbst vergebene Sperren
blocks on me: Erhaltene Sperren
+ comments: Kommentare
confirm: Bestätigen
confirm_user: Bestätige den Benutzer
create_block: Diesen Nutzer sperren
created from: "erstellt aus:"
+ ct accepted: Vor %{ago} akzeptiert
+ ct declined: Abgelehnt
+ ct status: "Vereinbarung für Mitwirkende:"
+ ct undecided: Unentschlossen
deactivate_user: Benutzer deaktivieren
delete_user: Benutzer löschen
description: Beschreibung
diary: Blog
edits: Bearbeitungen
email address: "E-Mail-Adresse:"
+ friends_changesets: Alle Änderungssätze deiner Freunde durchsuchen
+ friends_diaries: Alle Tagebucheinträge von Freunden durchsuchen
hide_user: Benutzer verstecken
if set location: Wenn du deinen Standort angegeben hast, erscheint eine Karte am Seitenende. Du kannst deinen Standort in deinen %{settings_link} ändern.
km away: "%{count} km entfernt"
m away: "%{count} m entfernt"
mapper since: "Mapper seit:"
moderator_history: Vergebene Sperren anzeigen
+ my comments: Eigene Kommentare
my diary: Eigener Blog
my edits: Eigene Bearbeitungen
my settings: Eigene Einstellungen
my traces: Eigene Tracks
nearby users: Anwender in der Nähe
+ nearby_changesets: Alle Änderungssätze von Benutzern in der Nähe durchsuchen
+ nearby_diaries: Alle Tagebucheinträge von Benutzern in der Nähe durchsuchen
new diary entry: Neuer Blogeintrag
no friends: Du hast bis jetzt keine Freunde hinzugefügt.
no nearby users: Es gibt bisher keine Benutzer, die einen Standort in deiner Nähe angegeben haben.
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:"
download_xml: "Download XML"
view_history: "view history"
edit: "edit"
+ note:
+ open_title: "Unresolved issue: %{note_name}"
+ closed_title: "Resolved issue: %{note_name}"
+ opened: "Opened:"
+ last_modified: "Last modified:"
+ closed: "Closed:"
+ at_by: "%{when} ago by %{user}"
+ description: "Description:"
+ comments: "Comments:"
changeset:
changeset_paging_nav:
showing_page: "Showing page %{page}"
title_bbox: "Changesets within %{bbox}"
title_user_bbox: "Changesets by %{user} within %{bbox}"
title_friend: "Changesets by your friends"
-
+ title_nearby: "Changesets by nearby users"
heading: "Changesets"
heading_user: "Changesets"
heading_bbox: "Changesets"
heading_user_bbox: "Changesets"
heading_friend: "Changesets"
-
+ heading_nearby: "Changesets"
description: "Recent changes"
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"
timeout:
sorry: "Sorry, the list of changesets you requested took too long to retrieve."
diary_entry:
title: New Diary Entry
list:
title: "Users' diaries"
+ title_friends: "Friends' diaries"
+ title_nearby: "Nearby Users' diaries"
user_title: "%{user}'s diary"
in_language_title: "Diary Entries in %{language}"
new: New Diary Entry
all:
title: "OpenStreetMap diary entries"
description: "Recent diary entries from users of OpenStreetMap"
+ comments:
+ has_commented_on: "%{display_name} has commented on the following diary entries"
+ post: Post
+ when: When
+ comment: Comment
+ ago: %{ago} ago
+ newer_comments: "Newer Comments"
+ older_comments: "Older Comments"
export:
start:
area_to_export: "Area to Export"
manually_select: "Manually select a different area"
format_to_export: "Format to Export"
osm_xml_data: "OpenStreetMap XML Data"
- mapnik_image: "Mapnik Image"
- osmarender_image: "Osmarender Image"
+ map_image: "Map Image (shows standard layer)"
embeddable_html: "Embeddable HTML"
licence: "Licence"
export_details: 'OpenStreetMap data is licensed under the <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative Commons Attribution-ShareAlike 2.0 license</a>.'
foundation_title: The OpenStreetMap Foundation
sotm2011: 'Come to the 2011 OpenStreetMap Conference, The State of the Map, September 9-11th in Denver!'
license:
- alt: CC by-sa 2.0
+ alt: CC BY-SA 2.0
title: OpenStreetMap data is licensed under the Creative Commons Attribution-Share Alike 2.0 Generic License
make_a_donation:
title: Support OpenStreetMap with a monetary donation
<p>
OpenStreetMap is <i>open data</i>, licensed under the <a
href="http://creativecommons.org/licenses/by-sa/2.0/">Creative
- Commons Attribution-ShareAlike 2.0</a> licence (CC-BY-SA).
+ Commons Attribution-ShareAlike 2.0</a> licence (CC BY-SA).
</p>
<p>
You are free to copy, distribute, transmit and adapt our maps
<p>
If you are using OpenStreetMap map images, we request that
your credit reads at least “© OpenStreetMap
- contributors, CC-BY-SA”. If you are using map data only,
+ contributors, CC BY-SA”. If you are using map data only,
we request “Map data © OpenStreetMap contributors,
- CC-BY-SA”.
+ CC BY-SA”.
</p>
<p>
Where possible, OpenStreetMap should be hyperlinked to <a
href="http://www.openstreetmap.org/">http://www.openstreetmap.org/</a>
- and CC-BY-SA to <a
+ and CC BY-SA to <a
href="http://creativecommons.org/licenses/by-sa/2.0/">http://creativecommons.org/licenses/by-sa/2.0/</a>. If
you are using a medium where links are not possible (e.g. a
printed work), we suggest you direct your readers to
<h3>Our contributors</h3>
<p>
- Our CC-BY-SA licence requires you to “give the Original
+ Our CC BY-SA licence requires you to “give the Original
Author credit reasonable to the medium or means You are
utilising”. Individual OSM mappers do not request a
credit over and above that to “OpenStreetMap
on Australian Bureau of Statistics data.</li>
<li><strong>Austria</strong>: Contains data from
<a href="http://data.wien.gv.at/">Stadt Wien</a> under
- <a href="http://creativecommons.org/licenses/by/3.0/at/deed.de">CC-BY</a>.</li>
+ <a href="http://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>.</li>
<li><strong>Canada</strong>: Contains data from
GeoBase®, GeoGratis (© Department of Natural
Resources Canada), CanVec (© Department of Natural
Land Information New Zealand. Crown Copyright reserved.</li>
<li><strong>Poland</strong>: Contains data from <a
href="http://ump.waw.pl/">UMP-pcPL maps</a>. Copyright
- UMP-pcPL contributors.</li>
+ UMP-pcPL contributors.
+ <a href="http://wiki.openstreetmap.org/wiki/UMP2OSM_Importing">
+ More about OSM's use of UMP data</a></li>
+ <li><strong>South Africa</strong>: Contains data sourced from
+ <a href="http://www.ngi.gov.za/">Chief Directorate:
+ National Geo-Spatial Information</a>, State copyright reserved.</li>
<li><strong>United Kingdom</strong>: Contains Ordnance
Survey data © Crown copyright and database right
2010.</li>
greeting: "Hi,"
hopefully_you: "Someone (possibly you) has asked for the password to be reset on this email address's openstreetmap.org account."
click_the_link: "If this is you, please click the link below to reset your password."
+ note_plain:
+ subject_own: "[OpenStreetMap] %{commenter} has commented on one of your notes"
+ subject_other: "[OpenStreetMap] %{commenter} has commented on a note you are interested in"
+ greeting: "Hi,"
+ your_note: "%{commenter} has left a comment on one of your map notes near %{place}."
+ commented_note: "%{commenter} has left a comment on a map note you have commented on. The note is near %{place}."
+ details: "More details about the note can be found at %{URL}."
message:
inbox:
title: "Inbox"
my_inbox: "My inbox"
outbox: "outbox"
- you_have: "You have %{new_count} new messages and %{old_count} old messages"
+ messages: "You have %{new_messages} and %{old_messages}"
+ new_messages:
+ one: "%{count} new message"
+ other: "%{count} new messages"
+ old_messages:
+ one: "%{count} old message"
+ other: "%{count} old messages"
from: "From"
subject: "Subject"
date: "Date"
my_inbox: "My %{inbox_link}"
inbox: "inbox"
outbox: "outbox"
- you_have_sent_messages: "You have %{count} sent messages"
+ messages:
+ one: "You have %{count} sent message"
+ other: "You have %{count} sent messages"
to: "To"
subject: "Subject"
date: "Date"
email or username: "Email Address or Username:"
password: "Password:"
openid: "%{logo} OpenID:"
- remember: "Remember me:"
+ remember: "Remember me"
lost password link: "Lost your password?"
login_button: "Login"
register now: Register now
new to osm: New to OpenStreetMap?
to make changes: To make changes to the OpenStreetMap data, you must have an account.
create account minute: Create an account. It only takes a minute.
+ no account: Don't have an account?
account not active: "Sorry, your account is not active yet.<br />Please use the link in the account confirmation email to activate your account, or <a href=\"%{reconfirm}\">request a new confirmation email</a>."
- account suspended: Sorry, your account has been suspended due to suspicious activity.<br />Please contact the %{webmaster} if you wish to discuss this.
- webmaster: webmaster
+ account is suspended: Sorry, your account has been suspended due to suspicious activity.<br />Please contact the <a href="%{webmaster}">webmaster</a> if you wish to discuss this.
auth failure: "Sorry, could not log in with those details."
notice: "<a href=\"http://www.osmfoundation.org/wiki/License/We_Are_Changing_The_License\">Find out more about OpenStreetMap's upcoming license change</a> (<a href=\"http://wiki.openstreetmap.org/wiki/ODbL/We_Are_Changing_The_License\">translations</a>) (<a href=\"http://wiki.openstreetmap.org/wiki/Talk:ODbL/Upcoming\">discussion</a>)"
notice_terms: "OpenStreetMap is moving to a new licence on 1st April 2012. It's just as open as our current one, but the legal bits are much better suited to our map database. We'd love to keep your contributions in OpenStreetMap, but we can only do so if you agree to let us distribute them under the new licence. Otherwise, we'll have to remove them from the database.<br /><br />Please log in, then take a few seconds to review and accept the new terms. Thank you!"
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
blocks on me: blocks on me
blocks by me: blocks by me
diary: diary
edits: edits
traces: traces
+ notes: map notes
remove as friend: remove as friend
add as friend: add as friend
mapper since: "Mapper since:"
moderator: "Revoke moderator access"
block_history: "view blocks received"
moderator_history: "view blocks given"
+ comments: "comments"
create_block: "block this user"
activate_user: "activate this user"
deactivate_user: "deactivate 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"
popup:
your location: "Your location"
nearby mapper: "Nearby mapper"
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:
- mapnik: Mapnik
- osmarender: Osmarender
+ standard: Standard
cycle_map: Cycle Map
transport_map: Transport Map
mapquest: MapQuest Open
history_tooltip: View edits for this area
history_disabled_tooltip: Zoom in to view edits for this area
history_zoom_alert: You must zoom in to view edits for this area
+ note:
+ closed: Closed Note
+ open: Open Note
+ details: Details
+ permalink: Permalink
+ description: Description
+ comment: Comment
+ render_warning: This error has been fixed already. However, it might take a couple of days before the map image is updated.
+ update: Update
+ nickname: Nickname
+ login: Login
+ add_comment: Add Comment
+ close: Close
+ cancel: Cancel
+ create: Create Note
+ create_title: Report a problem with the map
+ create_help1: Please drag the marker to the location of the problem
+ create_help2: and descripe it as accurate as possible
+ report: Report Problem
+ edityourself: You can also edit the map directly your self
match 'api/0.6/gpx/:id/data.:format' => 'trace#api_data'
# AMF (ActionScript) API
-
match 'api/0.6/amf/read' => 'amf#amf_read'
match 'api/0.6/amf/write' => 'amf#amf_write'
match 'api/0.6/swf/trackpoints' => 'swf#trackpoints'
+ # Map notes API
+ match 'api/0.6/notes' => 'note#list'
+ match 'api/0.6/notes.:format' => 'note#list'
+ match 'api/0.6/notes/search' => 'note#search'
+ match 'api/0.6/notes/rss' => 'notes#rss'
+ match 'api/0.6/note/create' => 'note#create'
+ match 'api/0.6/note/:id/comment' => 'note#update', :id => /\d+/
+ match 'api/0.6/note/:id/close' => 'note#close', :id => /\d+/
+ match 'api/0.6/note/:id' => 'note#read', :via => :get, :id => /\d+/
+ match 'api/0.6/note/:id.:format' => 'note#read', :via => :get, :id => /\d+/
+ match 'api/0.6/note/:id' => 'note#delete', :via => :delete, :id => /\d+/
+ match 'api/0.6/notes/getBugs' => 'note#list'
+ match 'api/0.6/notes/addPOIexec' => 'note#create'
+ match 'api/0.6/notes/closePOIexec' => 'note#close'
+ match 'api/0.6/notes/editPOIexec' => 'note#update'
+ match 'api/0.6/notes/getGPX' => 'note#list', :format => :gpx
+ match 'api/0.6/notes/getRSSfeed' => 'note#rss'
+
# Data browsing
match '/browse/start' => 'browse#start'
match '/browse/way/:id' => 'browse#way', :id => /\d+/
match '/user/:display_name/edits' => 'changeset#list'
match '/user/:display_name/edits/feed' => 'changeset#feed', :format => :atom
match '/browse/friends' => 'changeset#list', :friends => true
+ match '/browse/nearby' => 'changeset#list', :nearby => true
match '/browse/changesets' => 'changeset#list'
match '/browse/changesets/feed' => 'changeset#feed', :format => :atom
+ match '/browse/note/:id' => 'browse#note', :id => /\d+/
+ match '/user/:display_name/notes' => 'note#mine'
match '/browse' => 'changeset#list'
# web site
- match '/' => 'site#index'
+ root :to => 'site#index'
match '/edit' => 'site#edit'
- match '/copyright' => 'site#copyright'
match '/copyright/:copyright_locale' => 'site#copyright'
+ match '/copyright' => 'site#copyright'
match '/history' => 'changeset#list'
match '/history/feed' => 'changeset#feed', :format => :atom
match '/export' => 'site#export'
# diary pages
match '/diary/new' => 'diary_entry#new'
+ match '/diary/friends' => 'diary_entry#list', :friends => true
+ match '/diary/nearby' => 'diary_entry#list', :nearby => true
match '/user/:display_name/diary/rss' => 'diary_entry#rss', :format => :rss
match '/diary/:language/rss' => 'diary_entry#rss', :format => :rss
match '/diary/rss' => 'diary_entry#rss', :format => :rss
+ match '/user/:display_name/diary/comments/:page' => 'diary_entry#comments', :page => /\d+/
+ match '/user/:display_name/diary/comments/' => 'diary_entry#comments'
match '/user/:display_name/diary' => 'diary_entry#list'
match '/diary/:language' => 'diary_entry#list'
match '/diary' => 'diary_entry#list'
end
end
- if defined?(ActiveRecord::ConnectionAdapters::MysqlAdapter)
- class MysqlAdapter
- alias_method :old_native_database_types, :native_database_types
-
- def native_database_types
- types = old_native_database_types
- types[:bigint] = { :name => "bigint", :limit => 20 }
- types[:double] = { :name => "double" }
- types[:integer_pk] = { :name => "integer DEFAULT NULL auto_increment PRIMARY KEY" }
- types[:bigint_pk] = { :name => "bigint(20) DEFAULT NULL auto_increment PRIMARY KEY" }
- types[:bigint_pk_64] = { :name => "bigint(64) DEFAULT NULL auto_increment PRIMARY KEY" }
- types[:bigint_auto_64] = { :name => "bigint(64) DEFAULT NULL auto_increment" }
- types[:bigint_auto_11] = { :name => "bigint(11) DEFAULT NULL auto_increment" }
- types[:bigint_auto_20] = { :name => "bigint(20) DEFAULT NULL auto_increment" }
- types[:four_byte_unsigned] = { :name=> "integer unsigned" }
- types[:inet] = { :name=> "integer unsigned" }
-
- enumerations.each do |e,v|
- types[e.to_sym]= { :name => "enum('#{v.join '\',\''}')" }
- end
-
- types
- end
-
- def change_column(table_name, column_name, type, options = {})
- unless options_include_default?(options)
- options[:default] = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Default"]
-
- unless type == :string or type == :text
- options.delete(:default) if options[:default] = "";
- end
- end
-
- change_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
- add_column_options!(change_column_sql, options)
- execute(change_column_sql)
- end
-
- def myisam_table
- return { :id => false, :force => true, :options => "ENGINE=MyIsam" }
- end
-
- def innodb_table
- return { :id => false, :force => true, :options => "ENGINE=InnoDB" }
- end
-
- def innodb_option
- return "ENGINE=InnoDB"
- end
-
- def change_engine (table_name, engine)
- execute "ALTER TABLE #{table_name} ENGINE = #{engine}"
- end
-
- def add_fulltext_index (table_name, column)
- execute "CREATE FULLTEXT INDEX `#{table_name}_#{column}_idx` ON `#{table_name}` (`#{column}`)"
- end
-
- def enumerations
- @enumerations ||= Hash.new
- end
-
- def create_enumeration (enumeration_name, values)
- enumerations[enumeration_name] = values
- end
-
- def drop_enumeration (enumeration_name)
- enumerations.delete(enumeration_name)
- end
+ class PostgreSQLAdapter
+ alias_method :old_native_database_types, :native_database_types
+
+ def native_database_types
+ types = old_native_database_types
+ types[:double] = { :name => "double precision" }
+ types[:integer_pk] = { :name => "serial PRIMARY KEY" }
+ types[:bigint_pk] = { :name => "bigserial PRIMARY KEY" }
+ types[:bigint_pk_64] = { :name => "bigserial PRIMARY KEY" }
+ types[:bigint_auto_64] = { :name => "bigint" } #fixme: need autoincrement?
+ types[:bigint_auto_11] = { :name => "bigint" } #fixme: need autoincrement?
+ types[:bigint_auto_20] = { :name => "bigint" } #fixme: need autoincrement?
+ types[:four_byte_unsigned] = { :name => "bigint" } # meh
+ types[:inet] = { :name=> "inet" }
+
+ enumerations.each_key do |e|
+ types[e.to_sym]= { :name => e }
+ end
+
+ types
+ end
- def alter_primary_key(table_name, new_columns)
- execute("alter table #{table_name} drop primary key, add primary key (#{new_columns.join(',')})")
- end
+ def myisam_table
+ return { :id => false, :force => true, :options => ""}
+ end
- def interval_constant(interval)
- "'#{interval}'"
- end
+ def innodb_table
+ return { :id => false, :force => true, :options => ""}
end
- end
- if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
- class PostgreSQLAdapter
- alias_method :old_native_database_types, :native_database_types
-
- def native_database_types
- types = old_native_database_types
- types[:double] = { :name => "double precision" }
- types[:integer_pk] = { :name => "serial PRIMARY KEY" }
- types[:bigint_pk] = { :name => "bigserial PRIMARY KEY" }
- types[:bigint_pk_64] = { :name => "bigserial PRIMARY KEY" }
- types[:bigint_auto_64] = { :name => "bigint" } #fixme: need autoincrement?
- types[:bigint_auto_11] = { :name => "bigint" } #fixme: need autoincrement?
- types[:bigint_auto_20] = { :name => "bigint" } #fixme: need autoincrement?
- types[:four_byte_unsigned] = { :name => "bigint" } # meh
- types[:inet] = { :name=> "inet" }
-
- enumerations.each_key do |e|
- types[e.to_sym]= { :name => e }
- end
-
- types
- end
+ def innodb_option
+ return ""
+ end
- def myisam_table
- return { :id => false, :force => true, :options => ""}
- end
+ def change_engine (table_name, engine)
+ end
- def innodb_table
- return { :id => false, :force => true, :options => ""}
- end
+ def add_fulltext_index (table_name, column)
+ execute "CREATE INDEX #{table_name}_#{column}_idx on #{table_name} (#{column})"
+ end
- def innodb_option
- return ""
- end
+ def enumerations
+ @enumerations ||= Hash.new
+ end
- def change_engine (table_name, engine)
- end
- def create_enumeration (enumeration_name, values)
++ def create_enumeration(enumeration_name, values)
+ enumerations[enumeration_name] = values
- execute "create type #{enumeration_name} as enum ('#{values.join '\',\''}')"
++ execute "CREATE TYPE #{enumeration_name} AS ENUM ('#{values.join '\',\''}')"
+ end
- def add_fulltext_index (table_name, column)
- execute "CREATE INDEX #{table_name}_#{column}_idx on #{table_name} (#{column})"
- end
- def drop_enumeration (enumeration_name)
- execute "drop type #{enumeration_name}"
++ def drop_enumeration(enumeration_name)
++ execute "DROP TYPE #{enumeration_name}"
+ enumerations.delete(enumeration_name)
+ end
- def enumerations
- @enumerations ||= Hash.new
- end
++ def rename_enumeration(old_name, new_name)
++ execute "ALTER TYPE #{quote_table_name(old_name)} RENAME TO #{quote_table_name(new_name)}"
++ end
+
- def create_enumeration(enumeration_name, values)
- enumerations[enumeration_name] = values
- execute "CREATE TYPE #{enumeration_name} AS ENUM ('#{values.join '\',\''}')"
- end
+ def alter_primary_key(table_name, new_columns)
- execute "alter table #{table_name} drop constraint #{table_name}_pkey; alter table #{table_name} add primary key (#{new_columns.join(',')})"
++ execute "ALTER TABLE #{table_name} DROP CONSTRAINT #{table_name}_pkey"
++ execute "ALTER TABLE #{table_name} ADD PRIMARY KEY (#{new_columns.join(',')})"
+ end
- def drop_enumeration(enumeration_name)
- execute "DROP TYPE #{enumeration_name}"
- enumerations.delete(enumeration_name)
- end
+ def interval_constant(interval)
+ "'#{interval}'::interval"
+ end
- def rename_enumeration(old_name, new_name)
- execute "ALTER TYPE #{quote_table_name(old_name)} RENAME TO #{quote_table_name(new_name)}"
- end
+ def add_index(table_name, column_name, options = {})
+ column_names = Array(column_name)
+ index_name = index_name(table_name, :column => column_names)
- def alter_primary_key(table_name, new_columns)
- execute "ALTER TABLE #{table_name} DROP CONSTRAINT #{table_name}_pkey"
- execute "ALTER TABLE #{table_name} ADD PRIMARY KEY (#{new_columns.join(',')})"
+ if Hash === options # legacy support, since this param was a string
+ index_type = options[:unique] ? "UNIQUE" : ""
+ index_name = options[:name] || index_name
+ index_method = options[:method] || "BTREE"
+ else
+ index_type = options
end
- def interval_constant(interval)
- "'#{interval}'::interval"
+ quoted_column_names = column_names.map { |e| quote_column_name(e) }
+ if Hash === options and options[:lowercase]
+ quoted_column_names = quoted_column_names.map { |e| "LOWER(#{e})" }
end
+ quoted_column_names = quoted_column_names.join(", ")
- def add_index(table_name, column_name, options = {})
- column_names = Array(column_name)
- index_name = index_name(table_name, :column => column_names)
-
- if Hash === options # legacy support, since this param was a string
- index_type = options[:unique] ? "UNIQUE" : ""
- index_name = options[:name] || index_name
- index_method = options[:method] || "BTREE"
- else
- index_type = options
- end
-
- quoted_column_names = column_names.map { |e| quote_column_name(e) }
- if Hash === options and options[:lowercase]
- quoted_column_names = quoted_column_names.map { |e| "LOWER(#{e})" }
- end
- quoted_column_names = quoted_column_names.join(", ")
-
- execute "CREATE #{index_type} INDEX #{quote_column_name(index_name)} ON #{quote_table_name(table_name)} USING #{index_method} (#{quoted_column_names})"
- end
+ execute "CREATE #{index_type} INDEX #{quote_column_name(index_name)} ON #{quote_table_name(table_name)} USING #{index_method} (#{quoted_column_names})"
end
+
+ def rename_index(table_name, old_name, new_name)
+ execute "ALTER INDEX #{quote_table_name(old_name)} RENAME TO #{quote_table_name(new_name)}"
+ end
+
+ def rename_sequence(table_name, old_name, new_name)
+ execute "ALTER SEQUENCE #{quote_table_name(old_name)} RENAME TO #{quote_table_name(new_name)}"
+ end
end
end
end