activemodel (= 7.1.3.2)
activesupport (= 7.1.3.2)
timeout (>= 0.4.0)
- activerecord-import (1.5.1)
+ activerecord-import (1.6.0)
activerecord (>= 4.2)
activestorage (7.1.3.2)
actionpack (= 7.1.3.2)
autoprefixer-rails (10.4.16.0)
execjs (~> 2)
aws-eventstream (1.3.0)
- aws-partitions (1.896.0)
- aws-sdk-core (3.191.3)
+ aws-partitions (1.899.0)
+ aws-sdk-core (3.191.4)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
jmespath (~> 1, >= 1.6.1)
- aws-sdk-kms (1.77.0)
+ aws-sdk-kms (1.78.0)
aws-sdk-core (~> 3, >= 3.191.0)
aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.143.0)
+ aws-sdk-s3 (1.146.0)
aws-sdk-core (~> 3, >= 3.191.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.8)
erubi (>= 1.0.0)
rack (>= 0.9.0)
rouge (>= 1.0.0)
- better_html (2.0.2)
+ better_html (2.1.1)
actionview (>= 6.0)
activesupport (>= 6.0)
ast (~> 2.0)
erubi (~> 1.4)
parser (>= 2.4)
smart_properties
- bigdecimal (3.1.6)
+ bigdecimal (3.1.7)
binding_of_caller (1.0.1)
debug_inspector (>= 1.2.0)
bootsnap (1.18.3)
regexp_parser (>= 1.5, < 3.0)
xpath (~> 3.2)
concurrent-ruby (1.2.3)
- config (5.3.0)
+ config (5.4.0)
deep_merge (~> 1.2, >= 1.2.1)
connection_pool (2.4.1)
crack (1.0.0)
faraday-net_http (3.1.0)
net-http
ffi (1.16.3)
- ffi-compiler (1.0.1)
- ffi (>= 1.0.0)
+ ffi-compiler (1.3.2)
+ ffi (>= 1.15.5)
rake
ffi-libarchive (1.1.14)
ffi (~> 1.0)
mini_portile2 (2.8.5)
mini_racer (0.8.0)
libv8-node (~> 18.16.0.0)
- minitest (5.22.2)
+ minitest (5.22.3)
minitest-focus (1.4.0)
minitest (>= 4, < 6)
msgpack (1.7.2)
net-smtp (0.4.0.1)
net-protocol
nio4r (2.7.0)
- nokogiri (1.16.2)
+ nokogiri (1.16.3)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oauth (0.4.7)
rails-html-sanitizer (1.6.0)
loofah (~> 2.21)
nokogiri (~> 1.14)
- rails-i18n (7.0.8)
+ rails-i18n (7.0.9)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
railties (7.1.3.2)
rexml (3.2.6)
rinku (2.0.6)
rotp (6.3.0)
- rouge (4.2.0)
+ rouge (4.2.1)
rtlcss (0.2.1)
mini_racer (>= 0.6.3)
rubocop (1.62.1)
include CanCan::Ability
def initialize(user)
- can [:relation, :relation_history, :way, :way_history, :node, :node_history, :query], :browse
- can [:show], OldNode
- can [:show], OldWay
- can [:show], OldRelation
+ can :query, :browse
+ can :show, [Node, Way, Relation]
+ can [:index, :show], [OldNode, OldWay, OldRelation]
can [:show, :new], Note
can :search, :direction
can [:index, :permalink, :edit, :help, :fixthemap, :offline, :export, :about, :communities, :preview, :copyright, :key, :id], :site
if user.terms_agreed?
can [:create, :update, :upload, :close, :subscribe, :unsubscribe], Changeset
can :create, ChangesetComment
- can [:create, :update, :delete], Node
- can [:create, :update, :delete], Way
- can [:create, :update, :delete], Relation
+ can [:create, :update, :delete], [Node, Way, Relation]
end
if user.moderator?
can [:destroy, :restore], ChangesetComment
can :destroy, Note
- if user.terms_agreed?
- can :redact, OldNode
- can :redact, OldWay
- can :redact, OldRelation
- end
+ can :redact, [OldNode, OldWay, OldRelation] if user.terms_agreed?
end
end
end
if user.terms_agreed?
can [:create, :update, :upload, :close, :subscribe, :unsubscribe], Changeset if scope?(token, :write_api)
can :create, ChangesetComment if scope?(token, :write_api)
- can [:create, :update, :delete], Node if scope?(token, :write_api)
- can [:create, :update, :delete], Way if scope?(token, :write_api)
- can [:create, :update, :delete], Relation if scope?(token, :write_api)
+ can [:create, :update, :delete], [Node, Way, Relation] if scope?(token, :write_api)
end
if user.moderator?
can [:destroy, :restore], ChangesetComment if scope?(token, :write_api)
can :destroy, Note if scope?(token, :write_notes)
- if user&.terms_agreed?
- can :redact, OldNode if scope?(token, :write_api) || scope?(token, :write_redactions)
- can :redact, OldWay if scope?(token, :write_api) || scope?(token, :write_redactions)
- can :redact, OldRelation if scope?(token, :write_api) || scope?(token, :write_redactions)
- end
+ can :redact, [OldNode, OldWay, OldRelation] if user&.terms_agreed? && (scope?(token, :write_api) || scope?(token, :write_redactions))
end
end
end
-<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs><style>.a{fill:#575352;}.b{fill:#f25022;}.c{fill:#7fba00;}.d{fill:#00a4ef;}.e{fill:#ffb900;}</style></defs><rect class="a" width="36" height="36"/><rect class="b" x="4" y="3.99" width="13.31" height="13.31"/><rect class="c" x="18.69" y="3.99" width="13.31" height="13.31"/><rect class="d" x="4" y="18.69" width="13.31" height="13.3"/><rect class="e" x="18.69" y="18.69" width="13.31" height="13.3"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="21" height="21" viewBox="0 0 21 21"><title>MS-SymbolLockup</title><rect x="1" y="1" width="9" height="9" fill="#f25022"/><rect x="1" y="11" width="9" height="9" fill="#00a4ef"/><rect x="11" y="1" width="9" height="9" fill="#7fba00"/><rect x="11" y="11" width="9" height="9" fill="#ffb900"/></svg>
\ No newline at end of file
before_action -> { check_database_readable(:need_api => true) }
before_action :require_oauth
before_action :update_totp, :only => [:query]
- before_action :require_moderator_for_unredacted_history, :only => [:relation_history, :way_history, :node_history]
around_action :web_timeout
authorize_resource :class => false
- def relation
- @type = "relation"
- @feature = Relation.preload(:relation_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :relation_members => :member).find(params[:id])
- render "feature"
- rescue ActiveRecord::RecordNotFound
- render :action => "not_found", :status => :not_found
- end
-
- def relation_history
- @type = "relation"
- @feature = Relation.preload(:relation_tags, :old_relations => [:old_tags, { :changeset => [:changeset_tags, :user], :old_members => :member }]).find(params[:id])
- render "history"
- rescue ActiveRecord::RecordNotFound
- render :action => "not_found", :status => :not_found
- end
-
- def way
- @type = "way"
- @feature = Way.preload(:way_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :nodes => [:node_tags, { :ways => :way_tags }]).find(params[:id])
- render "feature"
- rescue ActiveRecord::RecordNotFound
- render :action => "not_found", :status => :not_found
- end
-
- def way_history
- @type = "way"
- @feature = Way.preload(:way_tags, :old_ways => [:old_tags, { :changeset => [:changeset_tags, :user], :old_nodes => { :node => [:node_tags, :ways] } }]).find(params[:id])
- render "history"
- rescue ActiveRecord::RecordNotFound
- render :action => "not_found", :status => :not_found
- end
-
- def node
- @type = "node"
- @feature = Node.preload(:node_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :ways => :way_tags).find(params[:id])
- render "feature"
- rescue ActiveRecord::RecordNotFound
- render :action => "not_found", :status => :not_found
- end
-
- def node_history
- @type = "node"
- @feature = Node.preload(:node_tags, :old_nodes => [:old_tags, { :changeset => [:changeset_tags, :user] }]).find(params[:id])
- render "history"
- rescue ActiveRecord::RecordNotFound
- render :action => "not_found", :status => :not_found
- end
-
def query; end
-
- private
-
- def require_moderator_for_unredacted_history
- deny_access(nil) if params[:show_redactions] && !current_user&.moderator?
- end
end
--- /dev/null
+class NodesController < ApplicationController
+ layout :map_layout
+
+ before_action :authorize_web
+ before_action :set_locale
+ before_action -> { check_database_readable(:need_api => true) }
+ before_action :require_oauth
+
+ authorize_resource
+
+ around_action :web_timeout
+
+ def show
+ @type = "node"
+ @feature = Node.preload(:node_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :ways => :way_tags).find(params[:id])
+ render "browse/feature"
+ rescue ActiveRecord::RecordNotFound
+ render "browse/not_found", :status => :not_found
+ end
+end
before_action :require_moderator_for_unredacted_history
around_action :web_timeout
+ def index
+ @type = "node"
+ @feature = Node.preload(:node_tags, :old_nodes => [:old_tags, { :changeset => [:changeset_tags, :user] }]).find(params[:id])
+ render "browse/history"
+ rescue ActiveRecord::RecordNotFound
+ render "browse/not_found", :status => :not_found
+ end
+
def show
@type = "node"
@feature = OldNode.preload(:old_tags, :changeset => [:changeset_tags, :user]).find([params[:id], params[:version]])
before_action :require_moderator_for_unredacted_history
around_action :web_timeout
+ def index
+ @type = "relation"
+ @feature = Relation.preload(:relation_tags, :old_relations => [:old_tags, { :changeset => [:changeset_tags, :user], :old_members => :member }]).find(params[:id])
+ render "browse/history"
+ rescue ActiveRecord::RecordNotFound
+ render "browse/not_found", :status => :not_found
+ end
+
def show
@type = "relation"
@feature = OldRelation.preload(:old_tags, :changeset => [:changeset_tags, :user], :old_members => :member).find([params[:id], params[:version]])
before_action :require_moderator_for_unredacted_history
around_action :web_timeout
+ def index
+ @type = "way"
+ @feature = Way.preload(:way_tags, :old_ways => [:old_tags, { :changeset => [:changeset_tags, :user], :old_nodes => { :node => [:node_tags, :ways] } }]).find(params[:id])
+ render "browse/history"
+ rescue ActiveRecord::RecordNotFound
+ render "browse/not_found", :status => :not_found
+ end
+
def show
@type = "way"
@feature = OldWay.preload(:old_tags, :changeset => [:changeset_tags, :user], :old_nodes => { :node => [:node_tags, :ways] }).find([params[:id], params[:version]])
--- /dev/null
+class RelationsController < ApplicationController
+ layout :map_layout
+
+ before_action :authorize_web
+ before_action :set_locale
+ before_action -> { check_database_readable(:need_api => true) }
+ before_action :require_oauth
+
+ authorize_resource
+
+ around_action :web_timeout
+
+ def show
+ @type = "relation"
+ @feature = Relation.preload(:relation_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :relation_members => :member).find(params[:id])
+ render "browse/feature"
+ rescue ActiveRecord::RecordNotFound
+ render "browse/not_found", :status => :not_found
+ end
+end
--- /dev/null
+class WaysController < ApplicationController
+ layout :map_layout
+
+ before_action :authorize_web
+ before_action :set_locale
+ before_action -> { check_database_readable(:need_api => true) }
+ before_action :require_oauth
+
+ authorize_resource
+
+ around_action :web_timeout
+
+ def show
+ @type = "way"
+ @feature = Way.preload(:way_tags, :containing_relation_members, :changeset => [:changeset_tags, :user], :nodes => [:node_tags, { :ways => :way_tags }]).find(params[:id])
+ render "browse/feature"
+ rescue ActiveRecord::RecordNotFound
+ render "browse/not_found", :status => :not_found
+ end
+end
module BrowseHelper
- def element_single_current_link(type, object, url)
- link_to url, { :class => element_class(type, object), :title => element_title(object), :rel => (link_follow(object) if type == "node") } do
+ def element_single_current_link(type, object)
+ link_to object, { :class => element_class(type, object), :title => element_title(object), :rel => (link_follow(object) if type == "node") } do
element_strikethrough object do
printable_element_name object
end
if changeset.user.status == "deleted"
t("users.no_such_user.deleted")
elsif changeset.user.data_public?
- link_to(changeset.user.display_name, user_path(changeset.user))
+ link_to changeset.user.display_name, changeset.user
else
t("browse.anonymous")
end
html_options = { :class => "set_position stretched-link", :data => {} }
url = if result[:type] && result[:id]
- url_for(:controller => :browse, :action => result[:type], :id => result[:id])
+ url_for(:controller => result[:type].pluralize, :action => :show, :id => result[:id])
elsif result[:min_lon] && result[:min_lat] && result[:max_lon] && result[:max_lat]
"/?bbox=#{result[:min_lon]},#{result[:min_lat]},#{result[:max_lon]},#{result[:max_lat]}"
else
def auth_button(name, provider, options = {})
link_to(
- image_tag("#{name}.svg", :alt => t("sessions.new.auth_providers.#{name}.alt"), :class => "rounded-3"),
+ image_tag("#{name}.svg",
+ :alt => t("sessions.new.auth_providers.#{name}.alt"),
+ :class => "rounded-3",
+ :size => "36"),
auth_path(options.merge(:provider => provider)),
:method => :post,
:class => "auth_button",
@changeset_comment = comment.changeset.tags["comment"].presence
@time = comment.created_at
@changeset_author = comment.changeset.user.display_name
- @unsubscribe_url = changeset_unsubscribe_url(comment.changeset)
+ @unsubscribe_url = unsubscribe_changeset_url(comment.changeset)
@author = @commenter
subject = if @owner
set_list_headers(
"#{comment.changeset.id}.changeset.www.openstreetmap.org",
t(".description", :id => comment.changeset.id),
- :subscribe => changeset_subscribe_url(comment.changeset),
+ :subscribe => subscribe_changeset_url(comment.changeset),
:unsubscribe => @unsubscribe_url,
:archive => @changeset_url
)
-<li><%= linked_name = link_to printable_element_name(containing_relation.relation), :action => "relation", :id => containing_relation.relation.id.to_s
+<li><%= linked_name = link_to printable_element_name(containing_relation.relation), containing_relation.relation
if containing_relation.member_role.blank?
t ".entry_html", :relation_name => linked_name
else
<summary><%= t "browse.part_of_ways", :count => node.ways.uniq.count %></summary>
<ul class="list-unstyled">
<% node.ways.uniq.each do |way| %>
- <li><%= element_single_current_link "way", way, way_path(way) %></li>
+ <li><%= element_single_current_link "way", way %></li>
<% end %>
</ul>
</details>
<details <%= "open" if relation.containing_relation_members.count < 10 %>>
<summary><%= t "browse.part_of_relations", :count => relation.containing_relation_members.uniq.count %></summary>
<ul class="list-unstyled">
- <%= render :partial => "containing_relation", :collection => relation.containing_relation_members.uniq %>
+ <%= render :partial => "browse/containing_relation", :collection => relation.containing_relation_members.uniq %>
</ul>
</details>
<% end %>
-<% linked_name = link_to printable_element_name(relation_member.member), { :controller => :browse, :action => relation_member.member_type.downcase, :id => relation_member.member_id.to_s }, { :rel => link_follow(relation_member.member) }
+<% linked_name = link_to printable_element_name(relation_member.member), relation_member.member, { :rel => link_follow(relation_member.member) }
type_str = t ".type.#{relation_member.member_type.downcase}" %>
<%= element_list_item relation_member.member_type.downcase, relation_member.member do %>
<%= if relation_member.member_role.blank?
<div class='secondary-actions'>
- <%= link_to t("browse.view_details"), :controller => :browse, :action => @type %>
+ <%= link_to t("browse.view_details"), :controller => @type.pluralize, :action => :show %>
<% if !@feature.redacted? %>
·
<%= link_to t("browse.download_xml"), :controller => "api/old_#{@type.pluralize}", :action => :show %>
<% end %>
·
<% end %>
- <%= link_to t("browse.view_history"), :controller => :browse, :action => "#{@type}_history" %>
+ <%= link_to t("browse.view_history"), :action => :index %>
<% unless @feature.latest_version? %>
·
<%= link_to({ :version => @feature.version + 1 }, { :class => "icon-link" }) do %>
<details <%= "open" if way.containing_relation_members.count < 10 %>>
<summary><%= t "browse.part_of_relations", :count => way.containing_relation_members.uniq.count %></summary>
<ul class="list-unstyled">
- <%= render :partial => "containing_relation", :collection => way.containing_relation_members.uniq %>
+ <%= render :partial => "browse/containing_relation", :collection => way.containing_relation_members.uniq %>
</ul>
</details>
<% end %>
<ul class="list-unstyled">
<% way.way_nodes.each do |wn| %>
<li>
- <%= element_single_current_link "node", wn.node, node_path(wn.node) %>
+ <%= element_single_current_link "node", wn.node %>
<% related_ways = wn.node.ways.reject { |w| w.id == wn.way_id } %>
<% if related_ways.size > 0 then %>
(<%= t ".also_part_of_html",
:count => related_ways.size,
- :related_ways => to_sentence(related_ways.map { |w| element_single_current_link "way", w, way_path(w) }) %>)
+ :related_ways => to_sentence(related_ways.map { |w| element_single_current_link "way", w }) %>)
<% end %>
</li>
<% end %>
<%= render "sidebar_header", :title => t("browse.#{@type}.title_html", :name => printable_element_name(@feature)) %>
-<%= render :partial => @type, :object => @feature %>
+<%= render :partial => "browse/#{@type}", :object => @feature %>
<% if @feature.visible? %>
<div class='secondary-actions'>
<% end %>
·
<% end %>
- <%= link_to t("browse.view_history"), :action => "#{@type}_history" %>
+ <%= link_to t("browse.view_history"), :controller => "old_#{@type.pluralize}" %>
<% if current_user&.moderator? %>
·
- <%= link_to(t("browse.view_unredacted_history"), :action => "#{@type}_history", :params => { :show_redactions => true }) %>
+ <%= link_to(t("browse.view_unredacted_history"), :controller => "old_#{@type.pluralize}", :params => { :show_redactions => true }) %>
<% end %>
<% if @feature.version > 1 %>
·
<%= render "sidebar_header", :title => t("browse.#{@type}.history_title_html", :name => printable_element_name(@feature)) %>
-<%= render :partial => @type, :collection => @feature.send(:"old_#{@type}s").reverse %>
+<%= render :partial => "browse/#{@type}", :collection => @feature.send(:"old_#{@type}s").reverse %>
<div class='secondary-actions'>
- <%= link_to(t("browse.download_xml"), :controller => "api/old_#{@type.pluralize}", :action => "history") %>
+ <%= link_to t("browse.download_xml"), :controller => "api/old_#{@type.pluralize}", :action => "history" %>
·
- <%= link_to(t("browse.view_details"), :action => @type) %>
+ <%= link_to t("browse.view_details"), :controller => @type.pluralize, :action => :show %>
<% if params[:show_redactions] %>
·
- <%= link_to(t("browse.view_history"), :action => "#{@type}_history") %>
+ <%= link_to t("browse.view_history") %>
<% elsif current_user&.moderator? %>
·
- <%= link_to(t("browse.view_unredacted_history"), :action => "#{@type}_history", :params => { :show_redactions => true }) %>
+ <%= link_to t("browse.view_unredacted_history"), :params => { :show_redactions => true } %>
<% end %>
</div>
<%= user_thumbnail changeset.user %>
</div>
<div class="col">
- <h2><%= link_to title, changeset_path(changeset) %></h2>
+ <h2><%= link_to title, changeset %></h2>
</div>
</div>
<small class='text-muted'>
- <%= t(".created_by_html", :link_user => link_to(changeset.user.display_name, user_path(changeset.user)), :created => l(changeset.created_at, :format => :blog)) %>
+ <%= t(".created_by_html", :link_user => link_to(changeset.user.display_name, changeset.user), :created => l(changeset.created_at, :format => :blog)) %>
</small>
</div>
<small class='text-muted'>
<%= t comment.visible ? ".comment_by_html" : ".hidden_comment_by_html",
:time_ago => friendly_date_ago(comment.created_at),
- :user => link_to(comment.author.display_name, user_path(comment.author)) %>
+ :user => link_to(comment.author.display_name, comment.author) %>
<% if current_user&.moderator? %>
—
<%= tag.button t("javascripts.changesets.show.#{comment.visible ? 'hide' : 'unhide'}_comment"),
<% if @next_by_user || @prev_by_user %>
<div class='secondary-actions'>
<% if @prev_by_user %>
- <%= link_to({ :id => @prev_by_user.id }, :class => "icon-link") do %>
+ <%= link_to @prev_by_user, :class => "icon-link" do %>
<%= previous_page_svg_tag :height => 11 %>
<%= @prev_by_user.id %>
<% end %>
link_to tag.bdi(user), :controller => "changesets", :action => "index", :display_name => user %>
<% if @next_by_user %>
·
- <%= link_to({ :id => @next_by_user.id }, :class => "icon-link") do %>
+ <%= link_to @next_by_user, :class => "icon-link" do %>
<%= @next_by_user.id %>
<%= next_page_svg_tag :height => 11 %>
<% end %>
</div>
<div class="col">
<p class='text-muted mb-0'>
- <%= link_to contact.display_name, user_path(contact) %>
+ <%= link_to contact.display_name, contact %>
<% if @user.home_location? and contact.home_location? %>
<% distance = @user.distance(contact) %>
<% if distance < 1 %>
<% if changeset %>
<%= t(".latest_edit_html", :ago => friendly_date_ago(changeset.created_at)) %>
<% comment = changeset.tags["comment"].to_s == "" ? t("browse.no_comment") : changeset.tags["comment"] %>
- <q><%= link_to comment, changeset_path(changeset), :title => t("changesets.changeset.view_changeset_details") %></q>
+ <q><%= link_to comment, changeset, :title => t("changesets.changeset.view_changeset_details") %></q>
<% else %>
<%= t "changesets.changeset.no_edits" %>
<% end %>
</div>
<div class="col mx-1">
<p><%= t(".#{type}") %></p>
- <p><%= link_to popup.display_name, user_path(popup) %></p>
+ <p><%= link_to popup.display_name, popup %></p>
</div>
</div>
<% comments.each do |comment| %>
<div class="row">
<div class="col-auto">
- <%= link_to user_thumbnail(comment.user), user_path(comment.user) %>
+ <%= link_to user_thumbnail(comment.user), comment.user %>
</div>
<div class="col">
<p class="text-muted">
- <%= t ".comment_from_html", :user_link => link_to(comment.user.display_name, user_path(comment.user)),
+ <%= t ".comment_from_html", :user_link => link_to(comment.user.display_name, comment.user),
:comment_created_at => tag.time(l(comment.created_at.to_datetime, :format => :friendly),
:datetime => comment.created_at.xmlschema) %>
</p>
<% reports.each do |report| %>
<div class="row">
<div class="col-auto">
- <%= link_to user_thumbnail(report.user), user_path(report.user) %>
+ <%= link_to user_thumbnail(report.user), report.user %>
</div>
<div class="col">
<p class="text-muted">
<%= t ".reported_by_html", :category => report.category,
- :user => link_to(report.user.display_name, user_path(report.user)),
+ :user => link_to(report.user.display_name, report.user),
:updated_at => tag.time(l(report.updated_at.to_datetime, :format => :friendly),
:datetime => report.updated_at.xmlschema) %>
</p>
<td><%= t ".states.#{issue.status}" %></td>
<td class="text-nowrap"><%= link_to t(".reports_count", :count => issue.reports_count), issue %></td>
<td><%= link_to reportable_title(issue.reportable), reportable_url(issue.reportable) %></td>
- <td><%= link_to issue.reported_user.display_name, user_path(issue.reported_user) if issue.reported_user %></td>
+ <td><%= link_to issue.reported_user.display_name, issue.reported_user if issue.reported_user %></td>
<td>
<% if issue.user_updated %>
- <%= t ".last_updated_time_ago_user_html", :user => link_to(issue.user_updated.display_name, user_path(issue.user_updated)),
+ <%= t ".last_updated_time_ago_user_html", :user => link_to(issue.user_updated.display_name, issue.user_updated),
:time_ago => friendly_date_ago(issue.updated_at) %>
<% else %>
<%= friendly_date_ago(issue.updated_at) %>
| <%= t ".last_updated_at_html",
:datetime => tag.time(l(@issue.updated_at.to_datetime, :format => :friendly),
:datetime => @issue.updated_at.xmlschema),
- :displayname => link_to(@issue.user_updated.display_name, user_path(@issue.user_updated)) %>
+ :displayname => link_to(@issue.user_updated.display_name, @issue.user_updated) %>
<% end %>
</small>
</p>
<tr id="inbox-<%= message_summary.id %>" class="inbox-row<%= "-unread" unless message_summary.message_read? %>">
- <td><%= link_to message_summary.sender.display_name, user_path(message_summary.sender) %></td>
- <td><%= link_to message_summary.title, message_path(message_summary) %></td>
+ <td><%= link_to message_summary.sender.display_name, message_summary.sender %></td>
+ <td><%= link_to message_summary.title, message_summary %></td>
<td class="text-nowrap"><%= l message_summary.sent_on, :format => :friendly %></td>
<td class="text-nowrap d-flex justify-content-end gap-1">
<%= button_to t(".unread_button"), message_mark_path(message_summary, :mark => "unread"), :remote => true, :class => "btn btn-sm btn-primary", :form => { :class => "inbox-mark-unread", :hidden => !message_summary.message_read? } %>
<tr class="inbox-row">
- <td><%= link_to sent_message_summary.recipient.display_name, user_path(sent_message_summary.recipient) %></td>
- <td><%= link_to sent_message_summary.title, message_path(sent_message_summary) %></td>
+ <td><%= link_to sent_message_summary.recipient.display_name, sent_message_summary.recipient %></td>
+ <td><%= link_to sent_message_summary.title, sent_message_summary %></td>
<td class="text-nowrap"><%= l sent_message_summary.sent_on, :format => :friendly %></td>
<td class="text-nowrap d-flex justify-content-end gap-1">
<%= button_to t(".destroy_button"), message_path(sent_message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger", :form_class => "inbox-destroy" %>
<% if current_user.messages.size > 0 %>
<%= render :partial => "messages_table", :locals => { :columns => %w[from subject date], :messages => current_user.messages, :inner_partial => "message_summary" } %>
<% else %>
- <div><%= t(".no_messages_yet_html", :people_mapping_nearby_link => link_to(t(".people_mapping_nearby"), user_path(current_user))) %></div>
+ <div><%= t(".no_messages_yet_html", :people_mapping_nearby_link => link_to(t(".people_mapping_nearby"), dashboard_path)) %></div>
<% end %>
<% content_for :heading do %>
- <h1><%= t(".send_message_to_html", :name => link_to(@message.recipient.display_name, user_path(@message.recipient))) %></h1>
+ <h1><%= t(".send_message_to_html", :name => link_to(@message.recipient.display_name, @message.recipient)) %></h1>
<% end %>
<%= bootstrap_form_for @message do |f| %>
<% if current_user.sent_messages.size > 0 %>
<%= render :partial => "messages_table", :locals => { :columns => %w[to subject date], :messages => current_user.sent_messages, :inner_partial => "sent_message_summary" } %>
<% else %>
- <div class="messages"><%= t(".no_sent_messages_html", :people_mapping_nearby_link => link_to(t(".people_mapping_nearby"), user_path(current_user))) %></div>
+ <div class="messages"><%= t(".no_sent_messages_html", :people_mapping_nearby_link => link_to(t(".people_mapping_nearby"), dashboard_path)) %></div>
<% end %>
<div class='mb-3 border-bottom border-grey py-1 d-flex gap-1 flex-wrap'>
<% if current_user == @message.recipient %>
<%= user_thumbnail_tiny @message.sender %>
- <%= link_to @message.sender.display_name, user_path(@message.sender) %>
+ <%= link_to @message.sender.display_name, @message.sender %>
<% else %>
<%= user_thumbnail_tiny @message.recipient %>
- <%= link_to @message.recipient.display_name, user_path(@message.recipient) %>
+ <%= link_to @message.recipient.display_name, @message.recipient %>
<% end %>
<span class="ms-auto">
<%= l @message.sent_on, :format => :friendly %>
<label class="form-label"><%= t ".with external" %></label>
<ul class='list-inline' id="login_auth_buttons">
- <li class="list-inline-item me-3"><%= link_to image_tag("openid.png", :alt => t(".auth_providers.openid.title")), "#", :id => "openid_open_url", :title => t(".auth_providers.openid.title") %></li>
+ <li class="list-inline-item me-3">
+ <%= link_to image_tag("openid.png",
+ :alt => t(".auth_providers.openid.title"),
+ :size => "36"),
+ "#",
+ :id => "openid_open_url",
+ :title => t(".auth_providers.openid.title") %>
+ </li>
+
<% %w[google facebook microsoft github wikipedia].each do |provider| %>
<% if Settings.key?("#{provider}_auth_id".to_sym) -%>
<li class="list-inline-item me-3"><%= auth_button provider, provider %></li>
-<%= image_tag(url_for(:controller => :traces, :action => :icon, :id => description.id, :display_name => description.user.display_name)) %>
+<%= image_tag trace_icon_path(description.user, description.id) %>
<% if description.size -%>
<%= t ".description_with_count", :count => description.size, :user => description.user.display_name %>
<% else -%>
<td>
<% if Settings.status != "gpx_offline" %>
<% if trace.inserted %>
- <a href="<%= url_for :controller => "traces", :action => "show", :id => trace.id, :display_name => trace.user.display_name %>"><img src="<%= url_for :controller => "traces", :action => "icon", :id => trace.id, :display_name => trace.user.display_name %>" border="0" alt="" /></a>
+ <%= link_to image_tag(trace_icon_path(trace.user, trace), :alt => ""), show_trace_path(trace.user, trace) %>
<% else %>
<span class="text-danger"><%= t ".pending" %></span>
<% end %>
<td>
<ul class="list-inline mb-0">
<li class="list-inline-item">
- <%= link_to trace.name, :controller => "traces", :action => "show", :display_name => trace.user.display_name, :id => trace.id %>
+ <%= link_to trace.name, show_trace_path(trace.user, trace) %>
</li>
<% if trace.inserted? %>
</ul>
<p class="text-muted mb-0">
<%= friendly_date_ago(trace.timestamp) %>
- <%= t ".by" %> <%= link_to trace.user.display_name, user_path(trace.user) %>
+ <%= t ".by" %> <%= link_to trace.user.display_name, trace.user %>
<% if !trace.tags.empty? %>
<%= t ".in" %>
<%= safe_join(trace.tags.collect { |tag| link_to_tag tag.tag }, ", ") %>
<nav class="secondary-actions">
<ul>
<li>
- <%= link_to t(".view_map"), { :controller => "site", :action => "index", :mlat => trace.latitude, :mlon => trace.longitude, :anchor => "map=14/#{trace.latitude}/#{trace.longitude}" } %>
+ <%= link_to t(".view_map"), root_path(:mlat => trace.latitude, :mlon => trace.longitude, :anchor => "map=14/#{trace.latitude}/#{trace.longitude}") %>
</li>
<li>
- <%= link_to t(".edit_map"), { :controller => "site", :action => "edit", :gpx => trace.id } %>
+ <%= link_to t(".edit_map"), edit_path(:gpx => trace.id) %>
</li>
</ul>
</nav>
<h1><%= t ".heading", :name => @trace.name %></h1>
<% end %>
-<img src="<%= url_for :controller => "traces", :action => "picture", :id => @trace.id, :display_name => @trace.user.display_name %>">
+<%= image_tag trace_picture_path(@trace.user, @trace) %>
<%= bootstrap_form_for @trace do |f| %>
<%= f.text_field :name, :disabled => true %>
xml.item do
xml.title trace.name
- xml.link url_for(:controller => :traces, :action => :show, :id => trace.id, :display_name => trace.user.display_name, :only_path => false)
- xml.guid url_for(:controller => :traces, :action => :show, :id => trace.id, :display_name => trace.user.display_name, :only_path => false)
+ xml.link show_trace_url(trace.user, trace)
+ xml.guid show_trace_url(trace.user, trace)
xml.description do
xml.cdata! render(:partial => "description", :object => trace, :formats => [:html])
<% if Settings.status != "gpx_offline" %>
<% if @trace.inserted %>
- <img src="<%= url_for :controller => "traces", :action => "picture", :id => @trace.id, :display_name => @trace.user.display_name %>">
+ <%= image_tag trace_picture_path(@trace.user, @trace) %>
<% else %>
<span class="text-danger"><%= t ".pending" %></span>
<% end %>
:latitude => tag.span(number_with_delimiter(@trace.latitude), :class => "latitude"),
:longitude => tag.span(number_with_delimiter(@trace.longitude), :class => "longitude") %>
</div>
- (<%= link_to t(".map"), :controller => "site", :action => "index", :mlat => @trace.latitude, :mlon => @trace.longitude, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %> / <%= link_to t(".edit"), :controller => "site", :action => "edit", :gpx => @trace.id, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %>)</td>
+ (<%= link_to t(".map"), root_path(:mlat => @trace.latitude, :mlon => @trace.longitude, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}") %> / <%= link_to t(".edit"), edit_path(:gpx => @trace.id, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}") %>)</td>
</tr>
<% end %>
<tr>
<th><%= t ".owner" %></th>
- <td><%= link_to @trace.user.display_name, user_path(@trace.user) %></td>
+ <td><%= link_to @trace.user.display_name, @trace.user %></td>
</tr>
<tr>
<th><%= t ".description" %></th>
<% if current_user == @trace.user %>
<%= link_to t(".edit_trace"), edit_trace_path(@trace), :class => "btn btn-outline-primary" %>
<% end %>
- <%= link_to t(".delete_trace"), { :controller => "traces", :action => "destroy", :id => @trace.id }, { :method => :delete, :class => "btn btn-outline-danger", :data => { :confirm => t(".confirm_delete") } } %>
+ <%= link_to t(".delete_trace"), @trace, { :method => :delete, :class => "btn btn-outline-danger", :data => { :confirm => t(".confirm_delete") } } %>
</div>
<% end %>
<tr>
<% if show_user_name %>
- <td><%= link_to block.user.display_name, user_path(block.user) %></td>
+ <td><%= link_to block.user.display_name, block.user %></td>
<% end %>
<% if show_creator_name %>
- <td><%= link_to block.creator.display_name, user_path(block.creator) %></td>
+ <td><%= link_to block.creator.display_name, block.creator %></td>
<% end %>
<td><%= h truncate(block.reason) %></td>
<td><%= h block_status(block) %></td>
<% if block.revoker_id.nil? %>
<%= t(".not_revoked") %>
<% else %>
- <%= link_to block.revoker.display_name, user_path(block.revoker) %>
+ <%= link_to block.revoker.display_name, block.revoker %>
<% end %>
</td>
<td><%= link_to t(".show"), block %></td>
<% @title = t(".title", :name => @user.display_name) %>
<% content_for :heading do %>
- <h1><%= t(".heading_html", :name => link_to(@user.display_name, user_path(@user))) %></h1>
+ <h1><%= t(".heading_html", :name => link_to(@user.display_name, @user)) %></h1>
<% end %>
<% unless @user_blocks.empty? %>
<% @title = t(".title", :name => @user.display_name) %>
<% content_for :heading do %>
- <h1><%= t(".heading_html", :name => link_to(@user.display_name, user_path(@user))) %></h1>
+ <h1><%= t(".heading_html", :name => link_to(@user.display_name, @user)) %></h1>
<% end %>
<% unless @user_blocks.empty? %>
<% @title = t ".title", :name => @user_block.user.display_name %>
<% content_for :heading do %>
- <h1><%= t(".heading_html",
- :name => link_to(@user_block.user.display_name,
- user_path(@user_block.user))) %></h1>
+ <h1><%= t(".heading_html", :name => link_to(@user_block.user.display_name, @user_block.user)) %></h1>
<nav class='secondary-actions'>
<ul class='clearfix'>
<li><%= link_to t(".show"), @user_block %></li>
<% @title = t ".title", :name => @user.display_name %>
<% content_for :heading do %>
- <h1><%= t(".heading_html",
- :name => link_to(@user.display_name,
- user_path(@user))) %></h1>
+ <h1><%= t(".heading_html", :name => link_to(@user.display_name, @user)) %></h1>
<% end %>
<%= bootstrap_form_for(@user_block) do |f| %>
<%= hidden_field_tag "display_name", @user.display_name, :autocomplete => "off" %>
<% content_for :heading do %>
<h1><%= t(".heading_html",
- :block_on => link_to(@user_block.user.display_name,
- user_path(@user_block.user)),
- :block_by => link_to(@user_block.creator.display_name,
- user_path(@user_block.creator))) %></h1>
+ :block_on => link_to(@user_block.user.display_name, @user_block.user),
+ :block_by => link_to(@user_block.creator.display_name, @user_block.creator)) %></h1>
<% end %>
<% if @user_block.ends_at > Time.now %>
-<% @title = t ".title",
- :block_on => @user.display_name %>
+<% @title = t ".title", :block_on => @user.display_name %>
<% content_for :heading do %>
- <h1><%= t ".heading_html",
- :block_on => link_to(@user.display_name,
- user_path(@user)) %></h1>
+ <h1><%= t ".heading_html", :block_on => link_to(@user.display_name, @user) %></h1>
<% end %>
<% unless @user.blocks.active.empty? %>
<% content_for :heading do %>
<h1><%= t(".heading_html",
- :block_on => link_to(@user_block.user.display_name,
- user_path(@user_block.user)),
- :block_by => link_to(@user_block.creator.display_name,
- user_path(@user_block.creator))) %></h1>
+ :block_on => link_to(@user_block.user.display_name, @user_block.user),
+ :block_by => link_to(@user_block.creator.display_name, @user_block.creator)) %></h1>
<nav class='secondary-actions'>
<ul class='clearfix'>
<% if @user_block.ends_at > Time.now.getutc %>
<dl class="row">
<% if @user_block.revoker %>
<dt class="col-sm-3"><%= t ".revoker" %></dt>
- <dd class="col-sm-9"><%= link_to @user_block.revoker.display_name, user_path(@user_block.revoker) %></dd>
+ <dd class="col-sm-9"><%= link_to @user_block.revoker.display_name, @user_block.revoker %></dd>
<% end %>
<dt class="col-sm-3"><%= t ".created" %></dt>
<div class='header-illustration new-user-main'>
<h1><%= t "users.new.title" %></h1>
</div>
- <div class='header-illustration new-user-arm'></div>
<% end %>
-<div class="message">
- <h1><%= t "users.new.no_auto_account_create" %></h1>
- <h2><%= t "users.new.please_contact_support_html", :support_link => mail_to(Settings.support_email, t("users.new.support")) %></h2>
+<div class="mx-auto my-0">
+ <p><strong><%= t "users.new.no_auto_account_create" %></strong></p>
+ <p><%= t "users.new.please_contact_support_html", :support_link => mail_to(Settings.support_email, t("users.new.support")) %></p>
</div>
daarvan is gratis en val onder 'n oop-lisensie.
intro_2_create_account: Skep 'n gebruikerrekening
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: vennote
tou: Gebruiksvoorwaardes
osm_offline: Die OpenStreetMap-databasis is tans vanlyn terwyl noodsaaklike onderhoud
intro_text: خريطة الشارع المفتوحة هي خريطة العالم، أُنشِئت بواسطة أشخاص مثلك وحرة
الاستخدام برخصة مفتوحة.
intro_2_create_account: أنشئ حساب مستخدم
- hosting_partners_html: يتم دعم الاستضافة بواسطة %{ucl} و%{fastly} و%{bytemark}
- و%{partners} آخرين.
- partners_ucl: UCL
partners_fastly: بسرعة
- partners_bytemark: استضافة Bytemark
partners_partners: الشركاء
tou: شروط الاستخدام
osm_offline: حاليًا قاعدة بيانات خريطة الشارع المفتوحة مغلقة بينما يتم الانتهاء
intro_text: OpenStreetMap ye un mapa del mundu, creáu por persones como tu y d'usu
llibre baxo una llicencia abierta.
intro_2_create_account: Crear una cuenta d'usuariu
- hosting_partners_html: L'agospiamientu tien l'encontu de %{ucl}, %{bytemark}, y
- otros %{partners}.
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: asociaos
tou: Condiciones d'usu
osm_offline: La base de datos d'OpenStreetMap anguaño ta desconectada mentanto
edit_with: '%{editor} köməyi ilə dəyişdir'
tag_line: Azad Viki Dünya Xəritəsi
intro_2_create_account: İstifadəçi hesabı yarat
- partners_bytemark: Bytemark Hosting
partners_partners: partnyorlar
help: Kömək
copyright: Müəllif hüquqları və Lisenziyalar
edit_with: Рэдагаваць праз %{editor}
tag_line: Вольная Wiki-мапа сьвету
intro_2_create_account: Стварыце рахунак
- partners_ucl: UCL
osm_offline: База зьвестак OpenStreetMap у цяперашні момант недаступная, таму
што праводзяцца неабходныя тэхнічныя работы.
osm_read_only: База зьвестак OpenStreetMap у цяперашні момант даступная толькі
title: Выдаліць мой уліковы запіс
warning: Увага! Працэс выдалення ўліковага запісу з'яўляецца канчатковым і
не можа быць зменены.
+ delete_account: Выдаліць уліковы запіс
+ delete_introduction: 'Вы можаце выдаліць свой уліковы запіс OpenStreetMap
+ з дапамогай кнопкі ніжэй. Звярніце ўвагу на наступныя дэталі:'
+ delete_profile: Інфармацыя вашага ўліковага запісу, разам з вашым аватарам,
+ апісаннем і месцазнаходжаннем дома, будзе выдалена.
+ delete_display_name: Назва вашага ўліковага запісу будзе выдалена і можа быць
+ паўторна выкарыстана іншымі ўліковымі запісамі.
+ retain_caveats: 'Аднак некаторая інфармацыя пра вас будзе захоўвацца на OpenStreetMap
+ нават пасля выдалення вашага ўліковага запісу:'
+ retain_edits: Вашыя змены ў базе даных карты, калі такія маюцца, будуць захаваныя.
+ retain_traces: Вашыя трасіроўкі, калі такія маюцца, будуць захаваны.
+ retain_diary_entries: Вашыя запісы і каментарыі ў дзённіку, калі такія маюцца,
+ будуць захаваныя, але схаваныя ад назірання.
+ retain_notes: Вашы нататкі на карце і каментарыі да іх, калі такія маюцца,
+ будуць захаваныя, але схаваныя ад назірання.
+ retain_changeset_discussions: Вашыя абмеркаванні зменаў, калі такія маюцца,
+ будуць захаваныя.
+ retain_email: Ваш адрас электроннай пошты будзе захаваны.
+ recent_editing_html: Вы нядаўна рэдагавалі ваш уліковы запіс, таму зараз яго
+ нельга выдаліць. Выдаленне будзе магчымае праз %{time}.
+ confirm_delete: Вы ўпэўненыя?
+ cancel: Скасаваць
accounts:
edit:
title: Рэдагаваць уліковы запіс
ананімныя.
disabled link text: чаму я не магу рэдагаваць?
contributor terms:
- heading: 'Умовы ўдзелу:'
+ heading: Умовы ўдзелу
agreed: Вы пагадзіліся на новыя ўмовы ўдзелу.
not yet agreed: Вы яшчэ не пагадзіліся на новыя ўмовы ўдзелу.
review link text: Калі ласка, прайдзіце па гэтай спасылцы для Вашай зручнасці,
ў агульнай уласнасці.
link text: што гэта?
save changes button: Запісаць змены
+ delete_account: Выдаліць уліковы запіс...
go_public:
- heading: 'Публічнае рэдагаванне:'
+ heading: Публічнае рэдагаванне
make_edits_public_button: Зрабіць усе мае змены публічнымі
update:
success_confirm_needed: Звесткі аб карыстальніку паспяхова абноўленыя. Праверце
сваю эл.пошту, вам павінен прыйсці запыт на пацвярджэнне вашага новага адраса.
success: Звесткі аб карыстальніку паспяхова абноўленыя.
+ destroy:
+ success: Уліковы запіс выдалены.
browse:
+ deleted_ago_by_html: Выдалена %{time_ago} карыстальнікам %{user}
+ edited_ago_by_html: Адрэдагавана %{time_ago} карыстальнікам %{user}
version: Версія
+ redacted_version: Адрэдагаваная версія
in_changeset: Пакет правак
anonymous: ананімны
no_comment: (без каментароў)
part_of: Частка
download_xml: Спампаваць XML
view_history: Прагляд гісторыі
+ view_unredacted_history: Прагляд неадрэдагаванай гісторыі
view_details: Прагляд звестак
+ view_redacted_data: Прагляд адрэдагаваных даных
+ view_redaction_message: Прагляд паведамлення аб рэдагаванні
location: 'Месца:'
node:
title_html: 'Пункт: %{name}'
entry_html: Дачыненне %{relation_name}
entry_role_html: Дачыненне %{relation_name} (як %{relation_role})
not_found:
+ title: Не знойдзена
sorry: Прабачце, %{type} з нумарам %{id} не знойдзены.
type:
node: пункт
changeset: пакет правак
note: заўвага
timeout:
+ title: Памылка
sorry: Прабачце, атрыманне даных для %{type} з ідэнтыфікатарам %{id} заняла
зашмат часу.
type:
wikimedia_commons_link: '%{page} ў Вікісховішчы'
telephone_link: Патэлефанаваць %{phone_number}
colour_preview: Прагляд колеру %{colour_value}
+ email_link: Электронная пошта %{email}
query:
title: Пошук аб’ектаў
introduction: Націсніце на карце, каб атрымаць звесткі пра аб’екты паблізу.
index:
title: Пакет правак
title_user: Пакет правак ад %{user}
+ title_user_link_html: Змены ад %{user_link}
title_friend: Пакеты правак ад вашых сяброў
title_nearby: Пакеты правак ад карыстальнікаў паблізу
empty: Пакеты правак не знойдзены.
created: Створаны
closed: Зачынены
belongs_to: Аўтар
+ subscribe:
+ heading: Падпісацца на наступнае абмеркаванне зменаў?
+ button: Падпісацца на абмеркаванне
+ unsubscribe:
+ heading: Скасаваць падпіску на наступнае абмеркаванне зменаў?
+ button: Адпісацца ад абмеркавання
+ heading:
+ title: Набор змен %{id}
show:
title: 'Набор змен: %{id}'
+ created: 'Створана: %{when}'
discussion: Абмеркаванне
join_discussion: Увайдзіце ў сістэму, каб далучыцца да абмеркавання
still_open: Пакет правак яшчэ адкрыты. Абмеркаванне стане даступным, як толькі
nearby mapper: Карыстальнік
friend: Сябар
show:
+ title: Мая панэль
+ edit_your_profile: Адрэдагуйце свой профіль
my friends: Мае сябры
no friends: Вы пакуль не дадалі нікога ў сябры.
nearby users: 'Карыстальнікі паблізу:'
new:
title: Новы запіс дзённіку
form:
- location: 'Месца:'
+ location: Месца
use_map_link: карыстацца картай
index:
title: Дзённікі карыстальнікаў
show:
title: Дзённік карыстальніка %{user} | %{title}
user_title: Дзённік карыстальніка %{user}
+ discussion: Абмеркаванне
leave_a_comment: Пакінуць каментар
login_to_leave_a_comment_html: '%{login_link} каб пакінуць каментар'
login: Увайсці
one: 1 каментар
zero: Каментароў няма
other: 'Каментароў: %{count}'
+ no_comments: Няма каментароў
edit_link: Правіць гэты запіс
hide_link: Схаваць гэты запіс
unhide_link: Паказаць гэты запіс
title: Дзеннікавыя запісы OpenStreetMap
description: Свежыя дзеннікавыя запісы карыстальнікаў OpenStreetMap
comments:
+ no_comments: Няма каментароў у дзённіку
post: Апублікаваць
when: Калі
comment: Каментар
intro_text: OpenStreetMap - гэта карта свету, створаная людзьмі, як вы, і бясплатная
для выкарыстання на ўмовах адкрытай ліцэнзіі.
intro_2_create_account: Стварыць уліковы запіс удзельніка
- hosting_partners_html: Хостынг падтрымліваецца %{ucl}, %{bytemark}, і іншымі %{partners}.
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: партнёрамi
tou: Умовы карыстання
osm_offline: База дадзеных OpenStreetMap зараз па-за сецівам, таму што праходзіць
help: Даведка
about: Пра праект
copyright: Аўтарскае права
+ communities: Супольнасці
community: Супольнасьць
community_blogs: Блогі супольнасці
community_blogs_title: Блогі ўдзельнікаў супольнасці OpenStreetMap
more: Больш падрабязна
user_mailer:
diary_comment_notification:
+ description: 'Запіс у дзённіку OpenStreetMap #%{id}'
subject: '[OpenStreetMap] %{user} пакінуў каментар у вашым дзённіку'
hi: Вітанні, %{to_user},
header: '%{from_user} пракаментаваў ваш запіс у дзённіку на OpenStreetMap з
тэмай %{subject}:'
+ header_html: '%{from_user} пракаментаваў ваш запіс у дзённіку на OpenStreetMap
+ з тэмай %{subject}:'
footer: Вы можаце прагледзець каментар на %{readurl} і пракаментаваць на %{commenturl}
ці адказаць на %{replyurl}
+ footer_html: Вы можаце прагледзець каментар на %{readurl} і пракаментаваць на
+ %{commenturl} ці адказаць на %{replyurl}
+ footer_unsubscribe: Вы можаце адмовіцца ад падпіскі на абмеркаванне праз %{unsubscribeurl}
+ footer_unsubscribe_html: Вы можаце адмовіцца ад падпіскі на абмеркаванне праз
+ %{unsubscribeurl}
message_notification:
+ subject: '[OpenStreetMap] %{message_title}'
hi: Прывітанне, %{to_user},
header: '%{from_user} адправіў вам паведамленне з тэмай %{subject} праз OpenStreetMap:'
+ header_html: '%{from_user} адправіў вам паведамленне з тэмай %{subject} у OpenStreetMap:'
+ footer: Вы можаце таксама прачытаць паведамленне на %{readurl}, і вы можаце
+ адказаць на %{replyurl}
footer_html: Вы можаце таксама прачытаць паведамленне на %{readurl}, і вы можаце
адказаць на %{replyurl}
friendship_notification:
had_added_you: '%{user} пасябраваў з Вамі на OpenStreetMap.'
see_their_profile: Вы можаце прагледзець профіль на %{userurl} і дадаць, як
сябра, у адказ, калі хочаце.
+ see_their_profile_html: Вы можаце прагледзець профіль на %{userurl}.
befriend_them: Вы таксама можаце пасябраваць з імі на %{befriendurl}.
+ befriend_them_html: Вы таксама можаце дадаць як сябра па спасылцы %{befriendurl}.
+ gpx_description:
+ description_with_tags_html: 'Падобна, што ваш файл GPX %{trace_name} з апісаннем
+ %{trace_description} і наступнымі тэгамі: %{tags}'
+ description_with_no_tags_html: Падобна, што ваш файл GPX %{trace_name} з апісаннем
+ %{trace_description} і без тэгаў
gpx_failure:
+ hi: Прывітанне, %{to_user},
failed_to_import: 'збой імпарту. Адбылася памылка:'
subject: '[OpenStreetMap] Збой імпарту GPX'
gpx_success:
para_1: Калі трэба ўнесці дробнае ўдакладненне, дзеля якога не варта марнаваць
час на рэгістрацыю і вывучэнне правілаў рэдагавання, раім проста дадаць
заўвагу на карту.
+ communities:
+ title: Супольнасці
+ lede_text: |-
+ Людзі з усяго свету ўносяць свой уклад у OpenStreetMap або выкарыстоўваюць яго.
+ Многія ўдзельнічаюць паасобку, іншыя стварылі свае супольнасці.
+ Супольнасці бываюць розных памераў і могуць прадстаўляць як невялікія гарады, так і цэлыя рэгіёны з некалькімі краінамі.
+ Яны таксама могуць быць афіцыйнымі і неафіцыйнымі.
traces:
visibility:
private: Прыватны (ананімны з неспарадкаванымі пунктамі)
traces_waiting: У вас %{count} след у чарзе. Калі ласка, пачакайце, пакуль яны
будуць апрацаваныя, каб не блакірваць чаргу для астатніх карстальнікаў.
edit:
+ cancel: Скасаваць
title: Рэдагаванне следу %{name}
heading: Рэдагаванне следу %{name}
visibility_help: што гэта значыць?
uploaded: 'Прысланы:'
points: 'Пункты:'
start_coordinates: 'Каардынаты пачатку:'
+ coordinates_html: '%{latitude}; %{longitude}'
map: карта
edit: правіць
owner: 'Уладальнік:'
in: у
index:
public_traces: Агульныя GPS-сляды
+ my_gps_traces: Мае GPS-трэкі
public_traces_from: Агульныя GPS-сляды карыстальніка %{user}
description: Агляд нядаўна дададзеных GPS-слядоў
tagged_with: ' з тэгамі: %{tags}'
+ empty_title: Тут яшчэ нічога няма
+ empty_upload_html: '%{upload_link} або даведайцеся больш пра адсочванне GPS
+ на %{wiki_link}.'
upload_trace: Адаслаць GPS-след
my_traces: Мае GPS-сляды
destroy:
intro_text: OpenStreetMap е карта на света създадена от хора като вас, за свободно
ползване и под отворен лиценз.
intro_2_create_account: Създаване на сметка
- hosting_partners_html: Хостингът се поддържа от %{ucl}, %{fastly}, %{bytemark}
- и други %{partners}.
- partners_ucl: UCL
- partners_bytemark: Bytemark
partners_partners: партньори
tou: Условия за ползване
osm_offline: Базата на данни на OpenStreetMap в момента е изключена докато се
intro_text: ওপেনস্ট্রিটম্যাপ বিশ্বের একটি মানচিত্র; যা আপনার মতো মানুষের দ্বারা
নির্মিত এবং এটি মুক্ত লাইসেন্সের অধীনে বিনামূল্যে ব্যবহারযোগ্য।
intro_2_create_account: একটি ব্যবহারকারী অ্যাকাউন্ট তৈরি করুন
- partners_ucl: UCL
partners_partners: সহযোগীগণ
tou: ব্যবহারের শর্তাবলী
help: সাহায্য
intro_text: Ur gartenn eus ar bed eo OprenStreetMap, krouet gant tud eveldoc'h
ha frank hec'h implij dindan un aotre-implij digor.
intro_2_create_account: Krouiñ ur gont implijer
- hosting_partners_html: Kemeret eo an herberc'hiañ e karg gant %{ucl}, %{fastly},
- %{bytemark}, ha %{partners} all.
- partners_ucl: ↓"Universiy College" Londrez
partners_fastly: Fastly
- partners_bytemark: ↓Herberc'hiañ Bytemark
partners_partners: Kevelourien
tou: Termenoù implijout
osm_offline: Ezlinenn eo diaz roadennoù OpenStreetMap evit bremañ e-pad ma pleder
intro_text: OpenStreetMap predstavlja mapu svijeta, kreiranu od strane ljudi kao
što ste vi i može se besplatno koristiti.
intro_2_create_account: Napravite korisnički račun
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: partnera
osm_offline: OpenStreetMap baza podataka je trenutno nedostupna dok se ne završe
važni radovi na održavanju.
intro_text: L'OpenStreetMap és un mapa del món creat per persones com tu i d'ús
lliure sota una llicència oberta.
intro_2_create_account: Crea un compte d’usuari
- hosting_partners_html: L'allotjament és a càrrec de %{ucl}, %{fastly}, %{bytemark}
- i d'altres %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: socis
tou: Condicions d’ús
osm_offline: La base de dades OpenStreetMap és fora de línia mentre es fan les
gps_traces: GPS-трекаш
gps_traces_tooltip: Болхбе GPS-трекашца
user_diaries: Декъашхочун дневник
- partners_ucl: UCL
help: ГӀо
about: Проектах лаьцна
copyright: Авторийн бакъонаш
intro_text: OpenStreetMap je mapa světa, vytvořená lidmi jako vy a volně využitelná
pod otevřenou licencí.
intro_2_create_account: Vytvořit uživatelský účet
- hosting_partners_html: Hosting podporují %{ucl}, %{fastly}, %{bytemark} a další
- %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partneři
tou: Podmínky užití
osm_offline: Databáze OpenStreetMap je momentálně kvůli probíhající neodkladné
intro_text: Mae OpenStreetMap yn fap o'r byd, wedi'i greu gan bobl fel chi ac
sydd ar gael i'w ddefnyddio am ddim a dan drwydded rydd.
intro_2_create_account: Creu cyfrif defnyddiwr
- hosting_partners_html: Cefnogir y gynhaliaeth gan %{ucl}, %{fastly}, %{bytemark}
- a %{partners} eraill
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: phartneriaid
tou: Telerau Gwasanaeth
osm_offline: Mae cronfa ddata OpenStreetMap all-lein ar hyn o bryd er mwyn gwaith
# Author: Kaare
# Author: Luckas
# Author: Macofe
+# Author: Mehanika
# Author: Mikini
# Author: Mjjzf
# Author: Nemo bis
name: iD
description: iD (redigér i browseren)
remote:
- name: Fjernbetjening
- description: Fjernbetjening (JOSM, Potlatch eller Merkaartor)
+ name: Eksternt program
+ description: eksternt program (JOSM, Potlatch eller Merkaartor)
auth:
providers:
none: Ingen
friend: Ven
show:
title: Mit kontrolpanel
- no_home_location_html: '%{edit_profile_link} og definer hvor du bor for at se
- brugere i nærheden.'
+ no_home_location_html: '%{edit_profile_link} og angiv din hjemmeposition for
+ at se brugere i nærheden.'
edit_your_profile: Rediger din profil
my friends: Mine venner
no friends: Du har ikke tilføjet nogle venner endnu.
intro_text: OpenStreetMap er et kort over verden, skabt af folk som dig og gratis
at bruge under en åben licens.
intro_2_create_account: Opret en brugerkonto
- hosting_partners_html: Driften støttes af %{ucl}, %{fastly}, %{bytemark} og andre
- %{partners}.
- partners_ucl: University College London
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
+ partners_corpmembers: OSMF virksomhedsmedlemmer
partners_partners: partnere
tou: Vilkår for anvendelse
osm_offline: OpenStreetMap-databasen er for øjeblikket offline på grund af nødvendig
copyright: Ophavsret tilhører OpenStreetMap og bidragsydere, under en åben
licens
remote_failed: Redigering mislykkede - tjek at JOSM eller Merkaartor er startet
- og fjernbetjening er aktiveret
+ og at ekstern betjening er aktiveret
edit:
not_public: Du har ikke angivet af dine ændringer skal være offentlige.
not_public_description_html: Du kan ikke længere redigere kortet medmindre du
intro_text: OpenStreetMap ist eine Karte der Welt, erstellt von Menschen wie dir
und frei verwendbar unter einer offenen Lizenz.
intro_2_create_account: Erstelle ein Benutzerkonto
- hosting_partners_html: Das Hosting wird von %{ucl}, %{fastly}, %{bytemark} und
- anderen %{partners} unterstützt.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: Partnern
tou: Nutzungsbedingungen
osm_offline: Die OpenStreetMap-Datenbank ist im Moment wegen wichtiger Wartungsarbeiten
description: Wopisanje
home_lat: 'Šyrina:'
home_lon: 'Dlinina:'
- languages: Rěcy
+ languages: Preferěrowane rěcy
+ preferred_editor: Preferěrowany editor
pass_crypt: Gronidło
help:
trace:
intro_text: OpenStreetMap jó kórta swěta, napórana wót luźi ako ty a dajo se licho
pód wótwórjoneju licencu wužywaś.
intro_2_create_account: Załož wužywarske konto
- partners_ucl: z UCL VR Centre
- partners_bytemark: Bytemark Hosting
partners_partners: partnerow
osm_offline: Datowa banka OpenStreetMap jo tuchylu offline, dokulaž se wažne źěło
za wótglědowanje datoweje banki pśewjedujo.
flash token bad: Njejo móžno było ten token namakaś, pšosym pśekontrolěruj URL.
update:
flash changed: Twójo gronidło jo se změniło.
+ preferences:
+ show:
+ title: Móje preference
+ preferred_editor: Preferěrowany editor
+ preferred_languages: Preferěrowane rěcy
+ edit_preferences: Preference wobźěłaś
+ edit:
+ title: Preference wobźěłaś
+ update_success_flash:
+ message: Preference su se zaktualizěrowali.
profiles:
edit:
image: 'Wobraz:'
my profile: Mój profil
my settings: Móje nastajenja
my comments: Móje komentary
+ my_preferences: Móje preference
my_dashboard: Mój pśeglědowy bok
blocks on me: Dostane blokowanja
blocks by me: Dane blokěrowanja
intro_text: Το OpenStreetMap είναι χάρτης του κόσμου, που δημιουργήθηκε από ανθρώπους
σαν κι εσάς και είναι δωρεάν, υπό άδεια ελεύθερης χρήσης.
intro_2_create_account: Δημιουργήστε ένα λογαριασμό χρήστη
- hosting_partners_html: Η φιλοξενία υποστηρίζεται από %{ucl}, %{fastly}, %{bytemark},
- και άλλους %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: συνεργάτες
tou: Όροι χρήσης
osm_offline: Η βάση δεδομένων του OpenStreetMap είναι προσωρινά εκτός λειτουργίας
intro_text: OpenStreetMap is a map of the world, created by people like you and
free to use under an open licence.
intro_2_create_account: Create a user account
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: partners
osm_offline: The OpenStreetMap database is currently offline while essential database
maintenance work is carried out.
discussion: "Discussion"
leave_a_comment: "Leave a comment"
login_to_leave_a_comment_html: "%{login_link} to leave a comment"
- login: "Login"
+ login: "Log in"
no_such_entry:
title: "No such diary entry"
heading: "No entry with the id: %{id}"
one: "%{count} muted message"
other: "You have %{count} muted messages"
reply:
- wrong_user: "You are logged in as `%{user}' but the message you have asked to reply to was not sent to that user. Please login as the correct user in order to reply."
+ wrong_user: "You are logged in as `%{user}' but the message you have asked to reply to was not sent to that user. Please log in as the correct user in order to reply."
show:
title: "Read message"
reply_button: "Reply"
unread_button: "Mark as unread"
destroy_button: "Delete"
back: "Back"
- wrong_user: "You are logged in as `%{user}' but the message you have asked to read was not sent by or to that user. Please login as the correct user in order to read it."
+ wrong_user: "You are logged in as `%{user}' but the message you have asked to read was not sent by or to that user. Please log in as the correct user in order to read it."
sent_message_summary:
destroy_button: "Delete"
heading:
failure: Couldn't update profile.
sessions:
new:
- title: "Login"
- heading: "Login"
+ title: "Log in"
+ heading: "Log in"
email or username: "Email Address or Username"
password: "Password"
openid_html: "%{logo} OpenID"
remember: "Remember me"
lost password link: "Lost your password?"
- login_button: "Login"
+ login_button: "Log in"
register now: Register now
- with external: "Alternatively, use a third party to login:"
+ with external: "Alternatively, use a third party to log in:"
no account: Don't have an account?
auth failure: "Sorry, could not log in with those details."
openid_logo_alt: "Log in with an OpenID"
auth_providers:
openid:
- title: Login with OpenID
- alt: Login with an OpenID URL
+ title: Log in with OpenID
+ alt: Log in with an OpenID URL
google:
- title: Login with Google
- alt: Login with a Google OpenID
+ title: Log in with Google
+ alt: Log in with a Google OpenID
facebook:
- title: Login with Facebook
- alt: Login with a Facebook Account
+ title: Log in with Facebook
+ alt: Log in with a Facebook Account
microsoft:
- title: Login with Microsoft
- alt: Login with a Microsoft Account
+ title: Log in with Microsoft
+ alt: Log in with a Microsoft Account
github:
- title: Login with GitHub
- alt: Login with a GitHub Account
+ title: Log in with GitHub
+ alt: Log in with a GitHub Account
wikipedia:
- title: Login with Wikipedia
- alt: Login with a Wikipedia Account
+ title: Log in with Wikipedia
+ alt: Log in with a Wikipedia Account
wordpress:
- title: Login with Wordpress
- alt: Login with a Wordpress OpenID
+ title: Log in with Wordpress
+ alt: Log in with a Wordpress OpenID
aol:
- title: Login with AOL
- alt: Login with an AOL OpenID
+ title: Log in with AOL
+ alt: Log in with an AOL OpenID
destroy:
title: "Logout"
heading: "Logout from OpenStreetMap"
paragraph_2: Sign up to get started contributing. We'll send an email to confirm your account.
display name description: "Your publicly displayed username. You can change this later in the preferences."
external auth: "Third Party Authentication:"
- use external auth: "Alternatively, use a third party to login"
+ use external auth: "Alternatively, use a third party to log in"
auth no password: "With third party authentication a password is not required, but some extra tools or server may still need one."
continue: Sign Up
terms accepted: "Thanks for accepting the new contributor terms!"
If you are new to OpenStreetMap, please create a new account
using the form below.
option_2: |
- If you already have an account, you can login to your account
+ If you already have an account, you can log in to your account
using your username and password and then associate the account
with your ID in your user settings.
user_role:
intro_text: OpenStreetMap estas mapo de la mondo, kreata de homoj kiel vi, kaj
libere uzebla laŭ malferma permesilo.
intro_2_create_account: Krei konton
- hosting_partners_html: Retgastigo estas subtenata de %{ucl}, %{fastly}, %{bytemark}
+ hosting_partners_2024_html: Retgastigo estas provizata de %{fastly}, %{corpmembers}
kaj aliaj %{partners}.
- partners_ucl: University College London
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
+ partners_corpmembers: firmaaj anoj de OSMF
partners_partners: kunlaborantoj
tou: Uzkondiĉoj
osm_offline: La OpenStreetMap-datumbazo estas nuntempe nealireabla pro necesaj
# Author: Dgstranz
# Author: Egofer
# Author: Ejegg
+# Author: Eulalio
# Author: Fitoschido
# Author: Fortega
# Author: Francodiaz7
intro_text: OpenStreetMap es un mapa del mundo, creado por gente como tú y de
uso libre bajo una licencia abierta.
intro_2_create_account: Crear una cuenta de usuario
- hosting_partners_html: '%{ucl}, %{fastly}, %{bytemark} y otros %{partners} patrocinan
- el alojamiento.'
- partners_ucl: UCL
+ hosting_partners_2024_html: El alojamiento cuenta con el respaldo de %{fastly},
+ %{corpmembers} y otros %{partners}.
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
+ partners_corpmembers: Miembros corporativos de OSMF
partners_partners: socios
tou: Términos de Uso
osm_offline: La base de datos de OpenStreetMap no está disponible en estos momentos
intro_text: OpenStreetMap on maailma kaart, mille on loonud inimesed nagu sina
ja seda võib vabalt kasutada avatud litsentsi tingimustel.
intro_2_create_account: loo oma konto
- hosting_partners_html: Majutust toetavad %{ucl}, %{fastly}, %{bytemark} ja teised
- %{partners}.
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: partnerid
osm_offline: OpenStreetMapi andmebaas ei ole hetkel juurdepääsetav sest teostatakse
vajalikke hooldustöid.
intro_text: OpenStreetMap munduko mapa da, zu bezalako jendeak sortutakoa eta
doako lizentzia irekiarekin erabiltzeko dagoena.
intro_2_create_account: Erabiltzaile kontua sortu
- hosting_partners_html: Ostatatzea %{ucl}, %{fastly}, %{bytemark} eta beste %{partners}
- babestua.
- partners_ucl: UCLa
partners_fastly: Fastly
- partners_bytemark: Bytemark Ostatua
partners_partners: bazkideak
tou: Erabilera-baldintzak
osm_offline: OpenStreetMap datu-basea orain konexiorik gabe dago funtsezko datu-basearen
intro_text: OpenStreetMap نقشهای از جهان است که افرادی مانند شما آن را ساختهاند
و آزادید آن را تحت پروانهای آزاد استفاده کنید.
intro_2_create_account: ساخت حساب کاربری
- hosting_partners_html: میزبانی وب را %{ucl}، %{fastly}، %{bytemark} و سایر %{partners}
- پشتیبانی میکنند.
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: شرکای تجاری
tou: شرایط استفاده
osm_offline: پایگاه دادهٔ OpenStreetMap هماکنون برونخط است تا کارهای ضروری برای
belongs_to: Lähettäjä
show:
title: 'Muutoskokoelma: %{id}'
+ created: 'Luotu: %{when}'
+ closed: 'Suljettu: %{when}'
created_ago_html: Luotu %{time_ago}
closed_ago_html: Suljettu %{time_ago}
created_ago_by_html: Luonut %{user}, %{time_ago}
intro_text: OpenStreetMap on vapaaehtoisten luoma maailmankartta, jota voi käyttää
vapaasti avoimella lisenssillä.
intro_2_create_account: luomalla ensin käyttäjätunnuksen
- hosting_partners_html: Palvelinkapasiteettia meille tarjoaa %{ucl}, %{fastly},
- %{bytemark} ja muut %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: kumppanimme
tou: Käyttöehdot
osm_offline: OpenStreetMapin tietokanta ei toistaiseksi ole käytettävissä välttämättömien
intro_text: OpenStreetMap est une carte du monde, créée par des gens comme vous
et libre d’utilisation sous licence libre.
intro_2_create_account: Créez un compte d’utilisateur
- hosting_partners_html: L’hébergement est pris en charge par %{ucl}, %{fastly},
- %{bytemark}, et d’autres %{partners}.
- partners_ucl: l’University College de Londres
partners_fastly: Fastly
- partners_bytemark: l'Hébergeur Bytemark
partners_partners: partenaires
tou: Conditions d’utilisation
osm_offline: La base de données OpenStreetMap est actuellement hors ligne ; une
intro_text: OpenStreetMap e je une mape dal mont, creade di int come te e di ûs
libar sot di une licence vierte.
intro_2_create_account: Cree il to profîl utent
- hosting_partners_html: L'hosting al è sostignût di %{ucl}, %{fastly}, %{bytemark}
- e altris %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: associâts
tou: Cundizions pal ûs
osm_offline: La base di dâts di OpenStreetMap e je par cumò fûr linie parcè che
intro_text: OpenStreetMap is in wrâldkaart makke troch minsken krekt as jo, en
frij te brûken ûnder in iepen lisinsje.
intro_2_create_account: Meitsje in akkount as meidogger
- hosting_partners_html: It webstee is ûnderdak by %{ucl}, %{fastly}, %{bytemark}
- en oare %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partners
tou: Gebrûksbetingsten
osm_offline: De OpenStreetMap-databank is op it stuit ôfline, wylst der it nedige
intro_text: Is léarscáil den domhan é OpenStreetMap, a chruthaigh daoine cosúil
leatsa agus atá saor in aisce le húsáid faoi cheadúnas oscailte.
intro_2_create_account: Cruthaigh cuntas úsáideora
- hosting_partners_html: Tacaíonn %{ucl}, %{bytemark} agus %{partners} eile leis
- an óstáil.
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: comhpháirtithe
osm_offline: Tá bunachar sonraí OpenStreetMap as líne faoi láthair fad agus atá
obair chothabhála riachtanach á dhéanamh ar an mbunachar sonraí.
intro_text: '''S e mapa an t-saoghail a tha san OpenStreetMap a chaidh a chruthachadh
le daoine mar thu fhèin ''s a tha saor fo cheadachas fhosgailte.'
intro_2_create_account: Cruthaich cunntas cleachdaiche
- partners_ucl: UCL VR Centre
- partners_bytemark: Bytemark Hosting
partners_partners: com-pàirtichean eile
osm_offline: Tha an stòr-dàta aig OpenStreetMap far loidhńe an-dràsta on a tha
sinn a' dèanamh obair-charaidh riatanach air.
intro_text: O OpenStreetMap é un mapa do mundo, creado por xente coma ti e de
libre uso baixo unha licenza aberta.
intro_2_create_account: Crea unha conta de usuario
- hosting_partners_html: O aloxamento está fornecido por %{ucl}, %{fastly}, %{bytemark}
- e outros %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: socios
tou: Termos de uso
osm_offline: A base de datos do OpenStreetMap atópase desconectada mentres realizamos
intro_text: OpenStreetMap היא מפה של העולם, שנוצרת על־ידי אנשים כמוך, וחופשית
לשימוש תחת רישיון פתוח.
intro_2_create_account: נא ליצור חשבון משתמש
- hosting_partners_html: האירוח בתמיכת %{ucl}, %{fastly}, %{bytemark}, ו%{partners}
- נוספים.
- partners_ucl: UCL
+ hosting_partners_2024_html: האירוח נתמך על־ידי %{fastly}, %{corpmembers} ועוד
+ %{partners}
partners_fastly: פאסטלי
- partners_bytemark: בייטמארק הוסטינג
+ partners_corpmembers: חברים תאגידיים אחרים ב־OSMF
partners_partners: שותפים
tou: תנאי השימוש
osm_offline: מסד הנתונים של אתר OpenStreetMap אינו מקוון כעת בשל עבודות תחזוקה
intro_text: OpenStreetMap je karta svijeta, stvorena od strane ljudi (volontera/doprinositelja)
i može se slobodno koristiti pod licencijom otvorenog koda (ODbL).
intro_2_create_account: Stvori korisnički račun
- hosting_partners_html: Hosting podržavaju %{ucl}, %{fastly}, %{bytemark} i drugi
- %{partners}.
osm_offline: OpenStreetMap baza podataka je trenutno nedostupna dok se ne završe
važni radovi na održavanju.
osm_read_only: Zbog radova na održavanju baze podataka OpenStreetMapa, istu trenutačno
intro_text: OpenStreetMap je karta swěta, wutworjena wot ludźi kaž tebje a hodźi
so swobodnje pod wotewrjenej licencu wužiwać.
intro_2_create_account: Załož wužiwarske konto
- hosting_partners_html: Hosting so wot %{ucl}, %{fastly}, %{bytemark} a druhich
- %{partners} podpěruje.
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: partnerow
tou: Wužiwanske wuměnjenja
osm_offline: Datowa banka OpenStreetMap je tuchwilu offline, dokelž so wažne hladanske
flash changed: Twoje hesło je so změniło.
preferences:
show:
- title: Moje nastajenja
+ title: Moje preferency
preferred_editor: Preferowany editor
preferred_languages: Preferowane rěče
- edit_preferences: Nastajenja wobdźěłać
+ edit_preferences: Preferency wobdźěłać
edit:
- title: Nastajenja wobdźěłać
+ title: Preferency wobdźěłać
save: Nastajenja aktualizować
cancel: Přetorhnyć
update:
my profile: Mój profil
my settings: Moje nastajenja
my comments: Moje komentary
- my_preferences: Moje nastajenja
+ my_preferences: Moje preferency
my_dashboard: Moja přehladna strona
blocks on me: Dostane blokowanja
blocks by me: Date blokowanja
intro_text: Az OpenStreetMap egy világtérkép, amelyet hozzád hasonló emberek készítenek
és szabad licenc alatt elérhető.
intro_2_create_account: Felhasználói fiók létrehozása
- hosting_partners_html: 'Az üzemeltetés támogatói: %{ucl}, %{fastly}, %{bytemark},
- és további %{partners}.'
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partnerek
tou: Felhasználási feltételek
osm_offline: Az OpenStreetMap-adatbázis jelenleg offline, miközben alapvető adatbázis-karbantartási
intro_text: OpenStreetMap es un carta del mundo, create per gente como tu e libere
de usar sub un licentia aperte.
intro_2_create_account: Crea un conto de usator
- hosting_partners_html: Le allogiamento web es supportate per %{ucl}, %{fastly},
- %{bytemark} e altere %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partners
tou: Conditiones de uso
osm_offline: Le base de datos de OpenStreetMap non es disponibile al momento debite
intro_text: OpenStreetMap adalah peta dunia, diciptakan oleh orang-orang seperti
Anda dan bebas untuk digunakan di bawah lisensi terbuka.
intro_2_create_account: Buat Akun
- hosting_partners_html: Hosting didukung oleh %{ucl}, %{fastly}, %{bytemark}, dan
- %{partners} lainnya.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Hosting Bytemark
partners_partners: mitra
tou: Ketentuan Penggunaan
osm_offline: Database OpenStreetMap saat ini sedang dimatikan karena sedang dilakukan
intro_text: OpenStreetMap er heimskort gert af fólki eins og þér. Það er gefið
út með opnu hugbúnaðarleyfi og það kostar ekkert að nota það.
intro_2_create_account: Búa til notandaaðgang
- hosting_partners_html: Vefhýsing er studd af %{ucl},%{fastly}, %{bytemark} og
- öðrum %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: samstarfsaðilum
tou: Notkunarskilmálar
osm_offline: OpenStreetMap gagnagrunnurinn er niðri vegna viðhalds.
intro_text: OpenStreetMap è una mappa del mondo, creata da persone come te e libera
da utilizzare secondo una licenza aperta.
intro_2_create_account: Crea un account utente
- hosting_partners_html: L'hosting è supportato da %{ucl}, %{fastly}, %{bytemark},
- e da altri %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partner
tou: Condizioni d'uso
osm_offline: Il database di OpenStreetMap è al momento non in linea per permettere
alt: Accedi con un OpenID di Google
facebook:
title: Accedi con Facebook
- alt: Accedi con un account Facebook
+ alt: Accedi con un'utenza Facebook
microsoft:
title: Accedi con Microsoft
- alt: Accedi con un account Microsoft
+ alt: Accedi con un'utenza Microsoft
github:
title: Accedi con GitHub
alt: Effettua l'acceso con un'utenza GitHub
intro_header: OpenStreetMap へようこそ!
intro_text: OpenStreetMap は、あなたのような人々が作成した世界地図であり、オープン ライセンスの下で自由に利用できます。
intro_2_create_account: 新しい利用者アカウントを作成
- hosting_partners_html: ホスティングは、%{ucl}、%{fastly}、%{bytemark}、およびその他の%{partners}によってサポートされています。
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: バイトマーク ホスティング
partners_partners: パートナー
tou: 利用規約
osm_offline: OpenStreetMap のデータベースはメンテナンスのため一時的に停止しています。
intro_text: OpenStreetMap d takarḍa n umadal, rnna-tt yemdanen am kečč d tilellit
i useqdec ddaw n turagt tilellit.
intro_2_create_account: Rnu amiḍan n useqdac
- partners_ucl: UCL
- partners_bytemark: Tanezduɣt n Bytemark
partners_partners: imendiden
osm_offline: Taffa n isefka n OpenStreetMap ur teqqin ara yakan tura imi aseǧǧem
ilaqen yettwaselkam akken ad teddu akken iwata.
user_diaries: Қолданушылардың күнделіктері
edit_with: '%{editor} көмегімен өңдеу'
intro_header: OpenStreetMap-ке қош келдіңіз!
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
help: Анықтама
about: Жоба туралы
copyright: Авторлық құқықтар
export_data: ದತ್ತಾಂಶ ರಫ್ತುಮಾಡು
intro_header: ಒಪನ್ ಸ್ಟ್ರೀಟ್ ಮ್ಯಾಪ್ ಗೆ ಸುಸ್ವಾಗತ!
intro_2_create_account: ಹೊಸ ಬಳಕೆದಾರ ಖಾತೆಯನ್ನು ರಚಿಸಿ
- partners_ucl: ಯುಸಿಎಲ್
- partners_bytemark: ಬೈಟ್ಮಾರ್ಕ್ ಹೋಸ್ಟಿಂಗ್
tou: ಬಳಕೆಯ ನಿಬಂಧನೆಗಳು
help: ಸಹಾಯ
about: ನಮ್ಮ ಬಗ್ಗೆ
intro_text: 오픈스트리트맵 (OpenStreetMap)은 여러분과 같은 사람들이 만들어, 개방형 라이선스에 따라 자유롭게 사용할 수
있는 세계 지도입니다.
intro_2_create_account: 사용자 계정을 만드세요
- hosting_partners_html: 호스팅은 %{ucl}, %{fastly}, %{bytemark}, 다른 %{partners}에서 지원합니다.
- partners_ucl: UCL
partners_fastly: 빠르게
- partners_bytemark: 바이트마크 호스팅
partners_partners: 협력단체
tou: 이용 약관
osm_offline: 데이터베이스 점검을 위해 현재 오픈스트리트맵의 데이터가 오프라인 상태에 있습니다.
intro_text: OpenStreetMap xerîteyekî dinyayê ye ku ji aliyê kesên wek te ve tê
çêkirin û emilandina we belaş e û di bin lîsansa azad de ye.
intro_2_create_account: Ji xwe re hesabekî çêbike
- hosting_partners_html: Xizmeta hewandinê tê piştgirîkirin ji aliyê %{ucl}, %{fastly},
- %{bytemark}, û %{partners} din ve.
- partners_ucl: University College London
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: şirîkên me
tou: Mercên Bikaranînê
osm_offline: Databasa OpenStreetMapê vê gavê offline e ji ber ku niha xebatên
intro_text: OpenStreetMap ass eng Kaart vun der Welt, déi vu Leit wéi Iech gemaach
gouf an déi fräi ënner enger oppener Lizenz benotzt ka ginn.
intro_2_create_account: E Benotzerkont uleeën
- hosting_partners_html: Den Hosting gëtt vun %{ucl}, %{fastly}, %{bytemark} an
- anere(n) %{partners} ënnerstëtzt.
- partners_ucl: '''''University College'''' zu London'
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: Partneren
tou: Benotzungs-Bedéngungen
osm_offline: D'OpenStreetMap Datebank ass elo net disponibel well dru geschafft
intro_text: OpenStreetMap yra pasaulio žemėlapis, kuriamas žmonių, tokių kaip
jūs. Jis atviras ir laisvas - naudojamas pagal atvirą licenciją.
intro_2_create_account: sukurti naudotojo paskyrą
- hosting_partners_html: Hostinimo paslaugas teikia %{ucl}, %{fastly}, %{bytemark}
- ir kiti %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark serveris
partners_partners: partneriai
tou: Naudojimo sąlygos
osm_offline: Šiuo metu OpenStreetMap duomenų bazė išjungta, nes vykdomi svarbūs
intro_text: OpenStreetMap ir pasaules karte, kuru veido cilvēki kā tu, un tā ir
bezmaksas lietošanai zem atvērtas licences.
intro_2_create_account: Izveidot lietotāja kontu
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: partneri
tou: Lietošanas noteikumi
osm_offline: OpenStreetMap datubāze šobrīd nav pieejama, tiek veikti svarīgi datubāzes
intro_text: OpenStreetMap е карта на светот создадена од луѓе како вас и се нуди
за слободна употреба под отворена лиценца.
intro_2_create_account: Создајте корисничка сметка
- hosting_partners_html: Вдомувањето е поддржано од %{ucl}, %{fastly}, %{bytemark}
+ hosting_partners_2024_html: Вдомувањето е поддржано од %{fastly}, %{corpmembers},
и други %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: вдомителот „Bytemark“
+ partners_corpmembers: Корпоративни членови на OSMF
partners_partners: партнери
tou: Услови на употреба
osm_offline: Базата на податоци на OpenStreetMap моментално е исклучена додека
intro_text: OpenStreetMap есте о хартэ а лумий, креатэ де оамень ка ши думнявоастрэ,
ши поате фи утилизатэ ын мод либер суб о личенцэ дескисэ.
intro_2_create_account: Креаць ун конт де утилизатор
- partners_ucl: Колеӂиул Университар дин Лондра (UCL)
- partners_bytemark: Хостингул Bytemark
partners_partners: партенерь
help: Ажутор
about: Деспре проект
intro_text: ओपनस्ट्रीटमॅप हा जगाचा नकाशा आहे, जो आपल्यासारख्या लोकांनी तयार केला
आहे, व जो खुल्या परवान्यांतर्गत वापरास मुक्त आहे.
intro_2_create_account: सदस्यखाते तयार करा
- partners_ucl: UCL VR सेंटर
- partners_bytemark: बाईटमार्क होस्टिंग
partners_partners: भागीदार
osm_offline: डाटाबेसचे आवश्यक देखरेखीचे काम असल्यामुळे ओपनस्ट्रीटमॅप डाटाबेस ही
जालावेगळी करण्यात आलेली आहे.
intro_text: OpenStreetMap ialah peta dunia yang diwujudkan oleh insan seperti
anda, dan bebas digunakan dengan berlandaskan lesen terbuka.
intro_2_create_account: Buka akaun pengguna
- partners_ucl: Pusat VR UCL
- partners_bytemark: Bytemark Hosting
partners_partners: rakan-rakan kongsi
tou: Syarat-Syarat Penggunaan
osm_offline: Pangkalan data OpenStreetMap kini diputuskan sambungannya sementara
intro_text: OpenStreetMap er et kart over verden, skapt av mennesker som deg,
og gratis å bruke under en åpen lisens.
intro_2_create_account: Opprett en brukerkonto
- hosting_partners_html: Hosting støttes av %{ucl}, %{fastly}, %{bytemark}, og andre
- %{partners}.
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: partnere
tou: Bruksvilkår
osm_offline: OpenStreetMap databasen er for øyeblikket utilgjengelig mens essensielt
intro_text: OpenStreetMap is een kaart van de wereld, gemaakt door mensen zoals
u en vrij te gebruiken onder een open licentie.
intro_2_create_account: Maak een account aan
- hosting_partners_html: Hosting wordt ondersteund door %{ucl}, %{fastly}, %{bytemark},
- en andere %{partners}.
- partners_ucl: het UCL VR Centre
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partners
tou: Gebruiksvoorwaarden
osm_offline: De OpenStreetMap-database is momenteel niet beschikbaar wegens het
andre kontoar.
retain_caveats: Somme opplysingar vil verte tatt vare på, til og med etter
at kontoen din er sletta.
- retain_edits: Eventuelle redigeringer av kartdatabasen vil behaldast.
+ retain_edits: Eventuelle endringar av kartdatabasen vil behaldast.
retain_traces: Spor du har lasta opp vil behaldast.
retain_diary_entries: Innlegg og kommentarar frå deg i brukardagboken vil
verte tekne vare på, men skylte frå ålmenta.
intro_text: OpenStreetMap er eit verdskart, laga av folk som deg. Kartet er gratis
å bruke under ein open lisens.
intro_2_create_account: Opprett ein brukarkonto
- hosting_partners_html: Drifta er støtta av %{ucl}, %{fastly}, %{bytemark} og andre
- %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partnarar
tou: Bruksvilkår
osm_offline: OpenStreetMap databasen er for augneblunken utilgjengelig medan essensielt
intro_text: ߏߔߌ߲߫ ߛߕߑߙߌߕ ߡߊߔ ߦߋ߫ ߘߎߢߊ߫ ߔߊ߬ߔߘߊ ߟߋ߬ ߘߌ߫߸ ߡߍ߲ ߛߌ߲ߘߌߣߍ߲߫ ߦߋ߫ ߡߐ߱ ߟߎ߬
ߓߟߏ߫ ߦߏ߫ ߌߟߋ߸ ߊ߬ ߟߊߓߊ߯ߙߊ ߦߋ߫ ߛߙߊ߬ߓߊߟߌ ߟߋ߬ ߘߌ߫ ߟߊ߬ߘߤߊ߬ߟߌ߫ ߘߊߦߟߍ߬ߣߍ߲ ߞߘߐ߫.
intro_2_create_account: ߖߊ߬ߕߋ߬ߘߊ ߘߏ߫ ߘߊߦߟߍ߬
- partners_ucl: UCL
partners_fastly: ߝߊߛߕߑߟߋ߫
partners_partners: ߞߊ߬ߝߏ߬ߢߐ߲߮ ߠߎ߬
tou: ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ ߛߙߊߕߌ
intro_text: OpenStreetMap es una mapa dau monde, creada per de personas coma vos
e liura d’utilizacion sota licéncia liura.
intro_2_create_account: Creatz un compte d'utilizaire
- hosting_partners_html: L'aubergament es pres en carga per %{ucl}, %{fastly}, %{bytemark},
- e d'autres %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Albergament Bytemark
partners_partners: partenaris
tou: Condicions d'utilizacion
osm_offline: La basa de donadas de OpenStreetMap es actualament fòra linha; una
export_data: ਸਮੱਗਰੀ ਬਰਾਮਦ ਕਰੋ
edit_with: '%{editor} ਨਾਲ ਸੋਧੋ'
intro_2_create_account: ਇੱਕ ਵਰਤੋਂਕਾਰ ਖਾਤਾ ਬਣਾਉ
- partners_bytemark: ਬਾਈਟਮਾਰਕ ਹੋਸਟਿੰਗ
partners_partners: ਜੋੜੀਦਾਰ
help: ਮਦਦ
about: ਬਾਬਤ
intro_text: OpenStreetMap to mapa świata stworzona przez ludzi takich jak ty i
z możliwością użycia pod otwartą licencją.
intro_2_create_account: Utwórz konto
- hosting_partners_html: Hosting obsługuje %{ucl}, %{fastly}, %{bytemark}, a także
- %{partners}.
- partners_ucl: University College London
partners_fastly: Fastly
- partners_bytemark: Hosting Bytemark
partners_partners: partnerzy
tou: Warunki użytkowania
osm_offline: Baza danych OpenStreetMap jest niedostępna na czas ważnych zadań
tag_line: آزاد نقشہ جو جہڑے جہڑے سودھ سکدے اے
intro_header: اوپن سٹریٹ میپ تے سواگت اے!
intro_2_create_account: ورتنوالے دا کھاتہ بݨاؤݨ
- partners_ucl: یو سی ایل
partners_fastly: فَیستلی
- partners_bytemark: بائیٹمارک ہوستِنگ
partners_partners: جوڑیدار
tou: ورتن شرطاں
help: مدد
intro_text: O OpenStreetMap é um mapa do mundo, criado por pessoas como tu e de
uso livre sob uma licença aberta.
intro_2_create_account: Cria uma conta de utilizador
- hosting_partners_html: O alojamento é suportado por %{ucl}, %{fastly}, %{bytemark}
- e outros %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: parceiros
tou: Condições de utilização
osm_offline: A base de dados do OpenStreetMap está indisponível devido a trabalhos
intro_text: O OpenStreetMap é um mapa do mundo, criado por pessoas como você e
de uso livre sob uma licença aberta.
intro_2_create_account: Criar uma conta de usuário
- hosting_partners_html: O hospedagem é suportada por %{ucl}, %{fastly}, %{bytemark}
- e outros %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Hospedagem Bytemark
partners_partners: parceiros
tou: Termo de uso
osm_offline: A base de dados do OpenStreetMap está fora do ar para manutenção.
intro_text: OpenStreetMap este o hartă a lumii, creată de oameni ca tine și liberă
pentru utilizare sub o licență deschisă.
intro_2_create_account: Creează un cont de utilizator
- hosting_partners_html: Gazduirea este susținută de %{ucl}, %{fastly}, %{bytemark}
- și alți %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Găzduire Bytemark
partners_partners: parteneri
tou: Termeni de Utilizare
osm_offline: Baza de date OpenStreetMap este în prezent offline, în timp ce se
intro_text: OpenStreetMap является картой мира, созданной такими же людьми, как
и вы, и может свободно использоваться под открытой лицензией.
intro_2_create_account: Создайте учётную запись
- hosting_partners_html: Хостинг поддерживается %{ucl}, %{fastly}, %{bytemark} и
- другими %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: партнёрами
tou: Условия использования
osm_offline: База данных OpenStreetMap в данный момент не доступна, так как проводится
intro_text: OpenStreetMap est una mapa de su mundu, creada dae persones che a
tie e de impreu lìberu suta de una litzèntzia aberta.
intro_2_create_account: Crea unu contu de utente
- hosting_partners_html: S'allògiu est a càrrigu de %{ucl}, %{fastly}, %{bytemark}
- e de àteros %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: sòtzios
tou: Conditziones de impreu
osm_offline: In custu momentu sa base de datos de OpenStreetMap est foras de lìnia,
intro_text: OpenStreetMap è na cartina dû munnu, criata di genti comu a tìa e
lìbbira a adupirari secunnu na licenza graputa.
intro_2_create_account: Crea un cuntu d'utenti
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: cullabburatura
osm_offline: La basi di dati d'OpenStreetMap comu a ora nun è n lìnia pirchì si
stannu facennu travagghî di manutinzioni funnamintali.
intro_text: OpenStreetMap is a cairt o the warld, creatit bi fowk lik ye an free
tae uise unner an open license.
intro_2_create_account: Create a uiser accoont
- partners_ucl: the UCL VR Centre
- partners_bytemark: Bytemark Hosting
partners_partners: pairtners
osm_offline: The OpenStreetMap database is currently offline while essential database
maintenance wirk is carried oot.
intro_text: OpenStreetMap je karta svijeta stvorena od strane ljudi kao što ste
vi i može se slobodno koristiti pod licencom otvorenog koda.
intro_2_create_account: Napravi korisnički račun
- hosting_partners_html: Hosting podržavaju %{ucl}, %{fastly}, %{bytemark} i drugi
- %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partneri
tou: Uslovi korištenja
osm_offline: OpenStreetMap baza podataka je trenutno nedostupna dok se ne završe
intro_text: OpenStreetMap je mapa sveta, vytvorené ľuďmi ako vy, voľne využiteľná
pod slobodnou licenciou.
intro_2_create_account: Založte si konto
- hosting_partners_html: Hosting podporuje %{ucl}, %{fastly}, %{bytemark} a ďalší
- %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partneri
tou: Podmienky používania
osm_offline: OpenStreetMap databáza je teraz offline, zatiaľ čo potrebná údržba
issues: مسئلے
data: ڈیٹا
export_data: ڈَیٹا برامد کرو
- partners_ucl: یو سی ایل
partners_fastly: تکھیرے
partners_partners: بھائیوال
tou: ورتݨ شرطاں
intro_text: OpenStreetMap je zemljevid sveta, ki ga ustvarjajo ljudje, kot ste
vi, in brezplačen za uporabo pod odprto licenco.
intro_2_create_account: Ustvarite uporabniški račun
- hosting_partners_html: Gostovanje omogočajo %{ucl}, %{fastly}, %{bytemark} in
- drugi %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partnerji
tou: Pogoji uporabe
osm_offline: Baza OpenStreetMap zaradi izvajanja nujnih vzdrževalnih del trenutno
edit_with: Uredi uređivačem %{editor}
tag_line: Slobodna viki mapa sveta
intro_2_create_account: Otvorite nalog
- partners_ucl: VR centar UCL-a
- partners_bytemark: Hosting „Bajtmark“
partners_partners: partneri
osm_offline: Baza podataka Openstritmapa je trenutno nedostupna dok se ne završe
važni radovi na održavanju.
belongs_to: Аутор
show:
title: 'Скуп промена: %{id}'
+ created: 'Направљено: %{when}'
created_ago_html: Направљено %{time_ago}
closed_ago_html: Затворено %{time_ago}
created_ago_by_html: Направљено %{time_ago} од %{user}
intro_text: OpenStreetMap је мапа света коју су направили људи попут вас. Слободна
је за коришћење под отвореном лиценцом.
intro_2_create_account: Отворите кориснички налог
- hosting_partners_html: Хостинг пружају %{ucl}, %{fastly}, %{bytemark}, и други
+ hosting_partners_2024_html: Хостинг пружају %{fastly}, %{corpmembers}, и други
%{partners}.
- partners_ucl: UCL
- partners_bytemark: Bytemark Hosting
partners_partners: партнери
tou: Услови коришћења
osm_offline: База OpenStreetMap-а је тренутно недоступна док се не заврше неопходни
intro_text: OpenStreetMap är en karta över världen, skapad av människor som du
och fri att använda under en öppen licens.
intro_2_create_account: Skapa ett användarkonto
- hosting_partners_html: Drivs via %{ucl}, %{fastly}, %{bytemark} och andra %{partners}.
- partners_ucl: University College London
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: partners
tou: Användarvillkor
osm_offline: OpenStreetMap-databasen är inte tillgänglig just nu, då nödvändigt
intro_text: OpenStreetMap, ఓ ప్రపంచ మ్యాపు. మీలాంటి వారే దీన్ని తయారు చేసారు.
స్వేచ్ఛా లైసెన్సు ద్వారా స్వేచ్ఛగా దీన్ని వాడుకోవచ్చు.
intro_2_create_account: వాడుకరి ఖాతాను సృష్టించుకోండి
- hosting_partners_html: '%{ucl}, %{fastly}, %{bytemark}, ఇతర %{partners} హోస్టింగుకు
- మద్దతు నిస్తున్నారు.'
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: భాగస్వాములు
tou: వాడుక నియమాలు
osm_offline: OpenStreetMap డేటాబేసులో అత్యావశ్యకమైన నిర్వహణ పనులు జరుగుతున్నందున
intro_header: ยินดีต้อนรับสู่ OpenStreetMap!
intro_text: OpenStreetMap เป็นแผนที่โลกที่สร้างโดยผู้คนเช่นท่าน และใช้งานได้ไม่เสียค่าใช้จ่ายภายใต้สัญญาอนุญาตแบบเปิด
intro_2_create_account: สร้างบัญชีผู้ใช้ใหม่
- hosting_partners_html: การโฮสต์ได้รับการสนับสนุนโดย %{ucl}, %{bytemark}, และ%{partners}อื่น
- ๆ
- partners_ucl: ยูซีแอล (วิทยาลัยอุดมศึกษาลอนดอน)
- partners_bytemark: ไบต์มาร์กโฮสติง
partners_partners: องค์กรพันธมิตร
tou: ข้อกำหนดการใช้งาน
osm_offline: ฐานข้อมูลของ OpenStreetMap กำลังออฟไลน์เพื่อให้สามารถดำเนินการบำรุงรักษาตามปกติได้
intro_text: Ang OpenStreetMap ay isang mapa ng mundo na nilikha ng mga taong katulad
mo at malayang gamitin sa ilalim ng isang bukas na lisensya.
intro_2_create_account: Lumikha ng isang akawnt ng tagagamit
- hosting_partners_html: Ang pagpapasinaya ay sinusuportahan ng %{ucl}, %{fastly},
- %{bytemark}, at iba pang %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: mga kawaksi
tou: Pagtatakda sa Paggamit
osm_offline: Ang kalipunan ng dato ng OpenStreetMap ay pangkasalukuyang nakapatay
intro_text: OpenStreetMap, sizler tarafından oluşturulan ve açık lisans altında
ücretsiz olarak kullanılabilen bir dünya haritasıdır.
intro_2_create_account: Bir kullanıcı hesabı oluşturun
- hosting_partners_html: Barındırma hizmeti; %{ucl}, %{fastly}, %{bytemark} ve diğer
+ hosting_partners_2024_html: Barındırma hizmeti; %{fastly}, %{corpmembers} ve diğer
%{partners} tarafından sağlanmaktadır.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
+ partners_corpmembers: OSMF kurumsal üyeleri
partners_partners: iş birlikçiler
tou: Kullanım Şartları
osm_offline: OpenStreetMap veritabanı bakım çalışmaları yürütüldüğü için veritabanı
messages:
invalid_email_address: не схоже на коректну адресу електронної пошти
email_address_not_routable: недоступний
+ display_name_is_user_n: не може бути user_n, якщо n не є вашим ідентифікатором
+ користувача
models:
user_mute:
is_already_muted: вже стишено
deleted_ago_by_html: Вилучив(ла) %{time_ago} %{user}
edited_ago_by_html: Змінено %{user} %{time_ago}
version: Версія
+ redacted_version: Очищена Версія
in_changeset: Набір змін
anonymous: анонім
no_comment: (без коментарів)
other: ""
download_xml: Завантажити XML
view_history: Перегляд історії
+ view_unredacted_history: Перегляд невідредагованої історії
view_details: Поточна інформація
+ view_redacted_data: Переглянути очищені дані
+ view_redaction_message: Переглянути повідомлення про очищення
location: 'Координати:'
node:
title_html: 'Точка: %{name}'
introduction: Клацніть на мапі, щоб отримати дані про об’єкти поруч.
nearby: Об’єкти поруч
enclosing: Оточуючі об’єкти
+ old_nodes:
+ not_found:
+ sorry: 'На жаль, точку #%{id} версії %{version} не знайдено.'
+ old_ways:
+ not_found:
+ sorry: 'На жаль, лінію #%{id} версії %{version} не знайдено.'
+ old_relations:
+ not_found:
+ sorry: 'На жаль, звʼязок #%{id} версії %{version} не знайдено.'
changesets:
changeset_paging_nav:
showing_page: Сторінка %{page}
created: Створено
closed: Закрито
belongs_to: Автор
+ subscribe:
+ heading: Підписатися на обговорення набору змін?
+ button: Підписатись на обговорення
+ unsubscribe:
+ heading: Відписатись від обговорення набору змін?
+ button: Відписатися від обговорення
+ heading:
+ title: Набір змін %{id}
+ created_by_html: Створений %{link_user} %{created}.
+ no_such_entry:
+ title: Немає такого набору змін
+ heading: Немає запису з id %{id}
+ body: На жаль, немає набору змін %{id}. Будь ласка, перевірте посилання, або,
+ можливо, посилання, яке ви натиснули, неправильне.
show:
title: 'Набір змін: %{id}'
+ created: 'Створено: %{when}'
+ closed: 'Закрито: %{when}'
created_ago_html: Створено %{time_ago}
closed_ago_html: Закрито %{time_ago}
created_ago_by_html: Створив(ла) %{user} %{time_ago}
show:
title: Щоденник %{user} | %{title}
user_title: Щоденник %{user}
+ discussion: Обговорення
leave_a_comment: Лишити коментар
login_to_leave_a_comment_html: '%{login_link}, аби залишити коментар'
login: Увійти
comment: Коментар
newer_comments: Нові коментарі
older_comments: Старіші коментарі
+ subscribe:
+ heading: Підписатись на обговорення цього допису щоденника?
+ button: Підписатись на обговорення
+ unsubscribe:
+ heading: Відписатись від обговорення цього допису щоденника?
+ button: Відписатися від обговорення
doorkeeper:
errors:
messages:
intro_text: OpenStreetMap — мапа світу, створена такими ж людьми, як і ви, для
вільного використання під відкритою ліцензією.
intro_2_create_account: Створіть обліковий запис
- hosting_partners_html: Хостинг підтримується %{ucl}, %{fastly}, %{bytemark} та
+ hosting_partners_2024_html: Хостинг підтримується %{fastly}, %{corpmembers} та
іншими %{partners}.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
+ partners_corpmembers: Корпоративні члени OSMF
partners_partners: партнерами
tou: Умови використання
osm_offline: База даних OpenStreetMap в даний момент недоступна, бо саме проводиться
more: Більше
user_mailer:
diary_comment_notification:
+ description: 'Запис у щоденнику OpenStreetMap #%{id}'
subject: '[OpenStreetMap] %{user} залишив коментар у вашому щоденнику'
hi: Привіт, %{to_user},
header: '%{from_user} прокоментував ваш допис у щоденнику у OpenStreetMap з
або відповісти — %{replyurl}
footer_html: Ви можете ознайомитись з коментарем за посиланням %{readurl}, відповісти
на коментар - %{commenturl}, чи надіслати повідомлення автору - %{replyurl}
+ footer_unsubscribe: Ви можете скасувати підписку на обговорення за адресою %{unsubscribeurl}
+ footer_unsubscribe_html: Ви можете скасувати підписку на обговорення за адресою
+ %{unsubscribeurl}
message_notification:
subject: '[OpenStreetMap] %{message_title}'
hi: Привіт, %{to_user},
few: 'успішно завантажено %{trace_points} точки з %{count} можливих. '
many: успішно завантажено %{trace_points} точок з %{count} можливих.
other: ""
+ all_your_traces_html: Усі успішно завантажені треки GPX можна знайти за адресою
+ %{url}.
subject: '[OpenStreetMap] Імпорт GPX пройшов успішно'
signup_confirm:
subject: '[OpenStreetMap] Ласкаво просимо до OpenStreetMap'
click_the_link: Якщо це ви, будь ласка, клацніть на посилання нижче, щоб змінити
свій пароль.
note_comment_notification:
+ description: 'Нотатка OpenStreetMap #%{id}'
anonymous: Анонімний учасник
greeting: Привіт,
commented:
details: Докладніше про нотатку %{url}.
details_html: Докладніше про нотатку %{url}.
changeset_comment_notification:
+ description: 'Набір змін OpenStreetMap #%{id}'
hi: Привіт %{to_user},
greeting: Привіт,
commented:
partial_changeset_without_comment: без коментарів
details: Більше деталей про зміни, які можуть бути знайдені в %{url}.
details_html: Більше деталей про набір змін можна знайти за посиланням - %{url}.
- unsubscribe: Щоб відмовитись від отримання повідомлень для цього набору змін,
- пеÑ\80ейдÑ\96Ñ\82Ñ\8c за поÑ\81иланнÑ\8fм %{url} й наÑ\82иÑ\81нÑ\96Ñ\82Ñ\8c кнопкÑ\83 â\80\9eÐ\92Ñ\96дпиÑ\81аÑ\82иÑ\81Ñ\8câ\80\9c.
+ unsubscribe: Щоб відмовитись від отримання повідомлень для цього набору змін
+ за поÑ\81иланнÑ\8fм %{url}.
unsubscribe_html: Щоб відмовитись від отримання повідомлень для цього набору
- змін, перейдіть за посиланням %{url} й натисніть кнопку «Відписатись».
+ змін за посиланням %{url}.
confirmations:
confirm:
heading: Перевірте вашу електронну пошту!
new:
title: Відновлення пароля
heading: Забули пароль?
- email address: 'Адреса ел. пошти:'
+ email address: Адреса ел. пошти
new password button: Вишліть мені новий пароль
help_text: Введіть адресу вашої електронної пошти, яку ви використовували для
реєстрації, і ми надішлемо інструкції, як можна відновити ваш пароль.
+ create:
+ send_paranoid_instructions: Якщо адреса вашої електронної пошти є в нашій базі,
+ ви отримаєте посилання для відновлення пароля через кілька хвилин.
edit:
title: Скидання пароля
heading: Скидання пароля для %{user}
new:
title: Ласкаво просимо
heading: Ласкаво просимо
- email or username: 'Ел. пошта або прізвисько:'
- password: 'Пароль:'
+ email or username: Ел. пошта або прізвисько
+ password: Пароль
remember: Запам’ятати мене
lost password link: Забули пароль?
login_button: Увійти
title: Посібник новачка
description: Посібник для новачків від спільноти.
community:
- title: Форум спільноти
- description: Місце де можна поспілкуватись про OpenStreetMap.
+ title: Ð\94опомога Ñ\82а ФоÑ\80Ñ\83м Ñ\81пÑ\96лÑ\8cноÑ\82и
+ description: Ð\9cÑ\96Ñ\81Ñ\86е де можна оÑ\82Ñ\80имаÑ\82и допомогÑ\83 Ñ\82а поÑ\81пÑ\96лкÑ\83ваÑ\82иÑ\81Ñ\8c пÑ\80о OpenStreetMap.
mailing_lists:
title: Списки розсилки
description: Поставте запитання або обговоріть цікаві речі у широкому виборі
allotments: Сади-городи, дачні ділянки
pitch: Спортмайданчик
centre: Спортивний центр
+ beach: Пляж
reserve: Заповідник
military: Військова зона
school: Школа
bus_stop: Автобусна зупинка
stop: Зупинка
bicycle_shop: Веломагазин
+ bicycle_rental: Прокат велосипедів
bicycle_parking: Велопарковка
+ bicycle_parking_small: Невелика велопарковка
toilets: Туалети
welcome:
title: Ласкаво просимо!
oauth_clients:
new:
title: Зареєструвати новий застосунок
+ disabled: Реєстрацію програм OAuth 1 вимкнено
edit:
title: Змінити дані вашого застосунку
show:
title: Авторизовані застосунки
application: Застосунок
permissions: Дозволи
+ last_authorized: Останній авторизований
no_applications_html: У вас ще немає застосунків авторизованих через %{oauth2}.
application:
revoke: Відкликати доступ
importer: Відкликати доступ на імпорт
block_history: Активні блокування
moderator_history: Створені блокування
+ revoke_all_blocks: Скасувати всі блокування
comments: Коментарі
create_block: Заблокувати цього учасника
activate_user: Активувати цього учасника
confirm: Ви впевнені, що бажаєте зняти це блокування?
revoke: Зняти блокування!
flash: Це блокування було знято.
+ revoke_all:
+ title: Зняти блокування з %{block_on}
+ heading_html: Зняти блокування з %{block_on}
+ empty: '%{name} не має активних блоків.'
+ confirm: Ви впевнені, що бажаєте відкликати %{active_blocks}?
+ active_blocks:
+ one: '%{count} активне блокування'
+ few: '%{count} активні блокування'
+ many: '%{count} активних блокувань'
+ other: ""
+ revoke: Відкликати!
+ flash: Усі активні блокування скасовано.
helper:
time_future_html: До закінчення %{time}.
until_login: Активне доти, доки учасник не здійснить вхід.
intro_text: OpenStreetMap là bản đồ thế giới do những người như bạn xây dựng và
cho phép sử dụng thoải mái theo một giấy phép nguồn mở.
intro_2_create_account: Mở tài khoản mới
- hosting_partners_html: Dịch vụ lưu trữ nhờ sự hỗ trợ của %{ucl}, %{fastly}, %{bytemark},
- và %{partners} khác.
- partners_ucl: UCL
partners_fastly: Fastly
- partners_bytemark: Bytemark Hosting
partners_partners: các công ty bảo trợ
tou: Điều khoản sử dụng
osm_offline: Cơ sở dữ liệu OpenStreetMap đang ngoại tuyến trong lúc đang thực
intro_header: 欢迎访问 OpenStreetMap!
intro_text: OpenStreetMap 是一个世界地图,由像您一样的人们所构筑,可依据开放许可协议自由使用。
intro_2_create_account: 创建用户账户
- hosting_partners_html: 主机由%{ucl}、%{fastly}、%{bytemark},以及其他%{partners}所支持。
- partners_ucl: 伦敦大学学院
partners_fastly: Fastly
- partners_bytemark: Bytemark主机
partners_partners: 合作伙伴
tou: 使用条款
osm_offline: 由于正在进行基本的数据库维护工作,OpenStreetMap 数据库目前处于脱机状态。
title: 使用Google登录
alt: 使用Google OpenID登录
facebook:
- title: 使用脸书登录
+ title: 使用Facebook登录
alt: 使用Facebook账户登录
microsoft:
title: 使用Microsoft登录
intro_header: 歡迎來到 OpenStreetMap!
intro_text: OpenStreetMap 是一幅世界地圖,由像您這樣的人們所建立,在開放授權下可以自由使用。
intro_2_create_account: 建立使用者帳號
- hosting_partners_html: 由%{ucl}、%{fastly}、%{bytemark},和其他%{partners}支援代管。
- partners_ucl: 倫敦大學學院
+ hosting_partners_2024_html: 由%{fastly}、%{corpmembers},和其他%{partners}支援代管。
partners_fastly: Fastly
- partners_bytemark: Bytemark 主æ©\9f代管
+ partners_corpmembers: OSMF å\9c\98é«\94æ\88\90å\93¡
partners_partners: 合作夥伴
tou: 使用條款
osm_offline: OpenStreetMap 資料庫目前正在離線,直到必要的資料庫維護工作完成為止。
end
# Data browsing
- get "/way/:id" => "browse#way", :id => /\d+/, :as => :way
- get "/way/:id/history" => "browse#way_history", :id => /\d+/, :as => :way_history
+ get "/way/:id" => "ways#show", :id => /\d+/, :as => :way
+ get "/way/:id/history" => "old_ways#index", :id => /\d+/, :as => :way_history
resources :old_ways, :path => "/way/:id/history", :id => /\d+/, :version => /\d+/, :param => :version, :only => :show
- get "/node/:id" => "browse#node", :id => /\d+/, :as => :node
- get "/node/:id/history" => "browse#node_history", :id => /\d+/, :as => :node_history
+ get "/node/:id" => "nodes#show", :id => /\d+/, :as => :node
+ get "/node/:id/history" => "old_nodes#index", :id => /\d+/, :as => :node_history
resources :old_nodes, :path => "/node/:id/history", :id => /\d+/, :version => /\d+/, :param => :version, :only => :show
- get "/relation/:id" => "browse#relation", :id => /\d+/, :as => :relation
- get "/relation/:id/history" => "browse#relation_history", :id => /\d+/, :as => :relation_history
+ get "/relation/:id" => "relations#show", :id => /\d+/, :as => :relation
+ get "/relation/:id/history" => "old_relations#index", :id => /\d+/, :as => :relation_history
resources :old_relations, :path => "/relation/:id/history", :id => /\d+/, :version => /\d+/, :param => :version, :only => :show
- resources :changesets, :path => "changeset", :id => /\d+/, :only => :show
+ resources :changesets, :path => "changeset", :id => /\d+/, :only => :show do
+ match :subscribe, :unsubscribe, :on => :member, :via => [:get, :post]
+ end
get "/changeset/:id/comments/feed" => "changeset_comments#index", :as => :changeset_comments_feed, :id => /\d*/, :defaults => { :format => "rss" }
resources :notes, :path => "note", :only => [:show, :new]
get "/user/:display_name/notes" => "notes#index", :as => :user_notes
get "/history/friends" => "changesets#index", :friends => true, :as => "friend_changesets", :defaults => { :format => :html }
get "/history/nearby" => "changesets#index", :nearby => true, :as => "nearby_changesets", :defaults => { :format => :html }
- match "/changeset/:id/subscribe" => "changesets#subscribe", :via => [:get, :post], :as => "changeset_subscribe"
- match "/changeset/:id/unsubscribe" => "changesets#unsubscribe", :via => [:get, :post], :as => "changeset_unsubscribe"
get "/browse/way/:id", :to => redirect(:path => "/way/%{id}")
get "/browse/way/:id/history", :to => redirect(:path => "/way/%{id}/history")
within "form", :text => "Email Address or Username" do
fill_in "username", :with => user.email
fill_in "password", :with => "test"
- click_on "Login"
+ click_on "Log in"
end
end
##
# test all routes which lead to this controller
def test_routes
- assert_routing(
- { :path => "/node/1", :method => :get },
- { :controller => "browse", :action => "node", :id => "1" }
- )
- assert_routing(
- { :path => "/node/1/history", :method => :get },
- { :controller => "browse", :action => "node_history", :id => "1" }
- )
- assert_routing(
- { :path => "/way/1", :method => :get },
- { :controller => "browse", :action => "way", :id => "1" }
- )
- assert_routing(
- { :path => "/way/1/history", :method => :get },
- { :controller => "browse", :action => "way_history", :id => "1" }
- )
- assert_routing(
- { :path => "/relation/1", :method => :get },
- { :controller => "browse", :action => "relation", :id => "1" }
- )
- assert_routing(
- { :path => "/relation/1/history", :method => :get },
- { :controller => "browse", :action => "relation_history", :id => "1" }
- )
assert_routing(
{ :path => "/query", :method => :get },
{ :controller => "browse", :action => "query" }
)
end
- def test_read_relation
- relation = create(:relation)
- sidebar_browse_check :relation_path, relation.id, "browse/feature"
- assert_select "h4", /^Version/ do
- assert_select "a[href='#{old_relation_path relation, 1}']", :text => "1", :count => 1
- end
- assert_select ".secondary-actions a[href='#{api_relation_path relation}']", :count => 1
- assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
- assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 0
- end
-
- def test_multiple_version_relation_links
- relation = create(:relation, :with_history, :version => 2)
- sidebar_browse_check :relation_path, relation.id, "browse/feature"
- assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
- assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 1
- assert_select ".secondary-actions a[href='#{old_relation_path relation, 2}']", :count => 1
- end
-
- def test_read_relation_history
- relation = create(:relation, :with_history)
- sidebar_browse_check :relation_history_path, relation.id, "browse/history"
- assert_select "h4", /^Version/ do
- assert_select "a[href='#{old_relation_path relation, 1}']", :text => "1", :count => 1
- end
- end
-
- def test_read_way
- way = create(:way)
- sidebar_browse_check :way_path, way.id, "browse/feature"
- assert_select "h4", /^Version/ do
- assert_select "a[href='#{old_way_path way, 1}']", :text => "1", :count => 1
- end
- assert_select ".secondary-actions a[href='#{api_way_path way}']", :count => 1
- assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
- assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 0
- end
-
- def test_multiple_version_way_links
- way = create(:way, :with_history, :version => 2)
- sidebar_browse_check :way_path, way.id, "browse/feature"
- assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
- assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 1
- assert_select ".secondary-actions a[href='#{old_way_path way, 2}']", :count => 1
- end
-
- def test_read_way_history
- way = create(:way, :with_history)
- sidebar_browse_check :way_history_path, way.id, "browse/history"
- assert_select "h4", /^Version/ do
- assert_select "a[href='#{old_way_path way, 1}']", :text => "1", :count => 1
- end
- end
-
- def test_read_node
- node = create(:node)
- sidebar_browse_check :node_path, node.id, "browse/feature"
- assert_select "h4", /^Version/ do
- assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
- end
- assert_select ".secondary-actions a[href='#{api_node_path node}']", :count => 1
- assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
- assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 0
- end
-
- def test_multiple_version_node_links
- node = create(:node, :with_history, :version => 2)
- sidebar_browse_check :node_path, node.id, "browse/feature"
- assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
- assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 1
- assert_select ".secondary-actions a[href='#{old_node_path node, 2}']", :count => 1
- end
-
- def test_read_deleted_node
- node = create(:node, :visible => false)
- sidebar_browse_check :node_path, node.id, "browse/feature"
- assert_select "h4", /^Version/ do
- assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
- end
- assert_select "a[href='#{api_node_path node}']", :count => 0
- end
-
- def test_read_node_history
- node = create(:node, :with_history)
- sidebar_browse_check :node_history_path, node.id, "browse/history"
- assert_select "h4", /^Version/ do
- assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
- end
- end
-
- ##
- # Methods to check redaction.
- #
- # 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
- # then please make it more easily (and robustly) testable!
- ##
- def test_redacted_node
- node = create(:node, :with_history, :deleted, :version => 2)
- node_v1 = node.old_nodes.find_by(:version => 1)
- node_v1.redact!(create(:redaction))
-
- get node_path(:id => node)
- assert_response :success
- assert_template "feature"
-
- # check that we don't show lat/lon for a redacted node.
- assert_select ".browse-section", 1
- assert_select ".browse-section.browse-node", 1
- assert_select ".browse-section.browse-node .latitude", 0
- assert_select ".browse-section.browse-node .longitude", 0
- end
-
- def test_redacted_node_history
- node = create(:node, :with_history, :deleted, :version => 2)
- node_v1 = node.old_nodes.find_by(:version => 1)
- node_v1.redact!(create(:redaction))
-
- get node_history_path(:id => node)
- assert_response :success
- assert_template "browse/history"
-
- # there are 2 revisions of the redacted node, but only one
- # should be showing details here.
- assert_select ".browse-section", 2
- assert_select ".browse-section.browse-redacted", 1
- assert_select ".browse-section.browse-node", 1
- assert_select ".browse-section.browse-node .latitude", 0
- assert_select ".browse-section.browse-node .longitude", 0
- end
-
- def test_redacted_node_unredacted_history
- session_for(create(:moderator_user))
- node = create(:node, :with_history, :deleted, :version => 2)
- node_v1 = node.old_nodes.find_by(:version => 1)
- node_v1.redact!(create(:redaction))
-
- get node_history_path(:id => node, :params => { :show_redactions => true })
- assert_response :success
- assert_template "browse/history"
-
- assert_select ".browse-section", 2
- assert_select ".browse-section.browse-redacted", 0
- assert_select ".browse-section.browse-node", 2
- end
-
- def test_redacted_way_history
- way = create(:way, :with_history, :version => 4)
- way_v1 = way.old_ways.find_by(:version => 1)
- way_v1.redact!(create(:redaction))
- way_v3 = way.old_ways.find_by(:version => 3)
- way_v3.redact!(create(:redaction))
-
- get way_history_path(:id => way)
- assert_response :success
- assert_template "browse/history"
-
- # there are 4 revisions of the redacted way, but only 2
- # should be showing details here.
- assert_select ".browse-section", 4
- assert_select ".browse-section.browse-redacted", 2
- assert_select ".browse-section.browse-way", 2
- end
-
- def test_redacted_way_unredacted_history
- session_for(create(:moderator_user))
- way = create(:way, :with_history, :version => 4)
- way_v1 = way.old_ways.find_by(:version => 1)
- way_v1.redact!(create(:redaction))
- way_v3 = way.old_ways.find_by(:version => 3)
- way_v3.redact!(create(:redaction))
-
- get way_history_path(:id => way, :params => { :show_redactions => true })
- assert_response :success
- assert_template "browse/history"
-
- assert_select ".browse-section", 4
- assert_select ".browse-section.browse-redacted", 0
- assert_select ".browse-section.browse-way", 4
- end
-
- def test_redacted_relation_history
- relation = create(:relation, :with_history, :version => 4)
- relation_v1 = relation.old_relations.find_by(:version => 1)
- relation_v1.redact!(create(:redaction))
- relation_v3 = relation.old_relations.find_by(:version => 3)
- relation_v3.redact!(create(:redaction))
-
- get relation_history_path(:id => relation)
- assert_response :success
- assert_template "browse/history"
-
- # there are 4 revisions of the redacted relation, but only 2
- # should be showing details here.
- assert_select ".browse-section", 4
- assert_select ".browse-section.browse-redacted", 2
- assert_select ".browse-section.browse-relation", 2
- end
-
- def test_redacted_relation_unredacted_history
- session_for(create(:moderator_user))
- relation = create(:relation, :with_history, :version => 4)
- relation_v1 = relation.old_relations.find_by(:version => 1)
- relation_v1.redact!(create(:redaction))
- relation_v3 = relation.old_relations.find_by(:version => 3)
- relation_v3.redact!(create(:redaction))
-
- get relation_history_path(:id => relation, :params => { :show_redactions => true })
- assert_response :success
- assert_template "browse/history"
-
- assert_select ".browse-section", 4
- assert_select ".browse-section.browse-redacted", 0
- assert_select ".browse-section.browse-relation", 4
- end
-
def test_query
get query_path
assert_response :success
assert_template "browse/query"
end
-
- def test_anonymous_user_feature_page_secondary_actions
- node = create(:node, :with_history)
- get node_path(:id => node)
- assert_response :success
- assert_select ".secondary-actions a", :text => "View Details", :count => 0
- assert_select ".secondary-actions a", :text => "View History", :count => 1
- assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
- end
-
- def test_regular_user_feature_page_secondary_actions
- session_for(create(:user))
- node = create(:node, :with_history)
- get node_path(:id => node)
- assert_response :success
- assert_select ".secondary-actions a", :text => "View Details", :count => 0
- assert_select ".secondary-actions a", :text => "View History", :count => 1
- assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
- end
-
- def test_moderator_user_feature_page_secondary_actions
- session_for(create(:moderator_user))
- node = create(:node, :with_history)
- get node_path(:id => node)
- assert_response :success
- assert_select ".secondary-actions a", :text => "View Details", :count => 0
- assert_select ".secondary-actions a", :text => "View History", :count => 1
- assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 1
- end
-
- def test_anonymous_user_history_page_secondary_actions
- node = create(:node, :with_history)
- get node_history_path(:id => node)
- assert_response :success
- assert_select ".secondary-actions a", :text => "View Details", :count => 1
- assert_select ".secondary-actions a", :text => "View History", :count => 0
- assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
- end
-
- def test_regular_user_history_page_secondary_actions
- session_for(create(:user))
- node = create(:node, :with_history)
- get node_history_path(:id => node)
- assert_response :success
- assert_select ".secondary-actions a", :text => "View Details", :count => 1
- assert_select ".secondary-actions a", :text => "View History", :count => 0
- assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
- end
-
- def test_moderator_user_history_page_secondary_actions
- session_for(create(:moderator_user))
- node = create(:node, :with_history)
- get node_history_path(:id => node)
- assert_response :success
- assert_select ".secondary-actions a", :text => "View Details", :count => 1
- assert_select ".secondary-actions a", :text => "View History", :count => 0
- assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 1
- end
-
- def test_anonymous_user_unredacted_history_page_secondary_actions
- node = create(:node, :with_history)
- get node_history_path(:id => node, :params => { :show_redactions => true })
- assert_response :redirect
- end
-
- def test_regular_user_unredacted_history_page_secondary_actions
- session_for(create(:user))
- node = create(:node, :with_history)
- get node_history_path(:id => node, :params => { :show_redactions => true })
- assert_response :redirect
- end
-
- def test_moderator_user_unredacted_history_page_secondary_actions
- session_for(create(:moderator_user))
- node = create(:node, :with_history)
- get node_history_path(:id => node, :params => { :show_redactions => true })
- assert_response :success
- assert_select ".secondary-actions a", :text => "View Details", :count => 1
- assert_select ".secondary-actions a", :text => "View History", :count => 1
- assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
- end
end
assert_dom "p", :text => "tested-changeset-comment"
assert_dom "li#c#{changeset_comment.id}" do
assert_dom "> small", :text => /^Comment from #{commenting_user.display_name}/
+ assert_dom "a[href='#{user_path(commenting_user)}']"
end
end
end
end
+ def test_show_adjacent_changesets
+ user = create(:user)
+ changesets = create_list(:changeset, 3, :user => user)
+
+ sidebar_browse_check :changeset_path, changesets[1].id, "changesets/show"
+ assert_dom "a[href='#{changeset_path changesets[0]}']", :count => 1
+ assert_dom "a[href='#{changeset_path changesets[2]}']", :count => 1
+ end
+
##
# This should display the last 20 non-empty changesets
def test_feed
user = create(:user)
other_user = create(:user)
changeset = create(:changeset, :user => user)
- path = changeset_subscribe_path(changeset)
+ path = subscribe_changeset_path(changeset)
get path
assert_redirected_to login_path(:referer => path)
session_for(other_user)
assert_difference "changeset.subscribers.count", 1 do
- post changeset_subscribe_path(changeset)
+ post subscribe_changeset_path(changeset)
end
assert_redirected_to changeset_path(changeset)
assert changeset.reload.subscribed?(other_user)
# not signed in
assert_no_difference "changeset.subscribers.count" do
- post changeset_subscribe_path(changeset)
+ post subscribe_changeset_path(changeset)
end
assert_response :forbidden
session_for(other_user)
# bad diary id
- post changeset_subscribe_path(999111)
+ post subscribe_changeset_path(999111)
assert_response :not_found
# trying to subscribe when already subscribed
- post changeset_subscribe_path(changeset)
+ post subscribe_changeset_path(changeset)
assert_no_difference "changeset.subscribers.count" do
- post changeset_subscribe_path(changeset)
+ post subscribe_changeset_path(changeset)
end
end
user = create(:user)
other_user = create(:user)
changeset = create(:changeset, :user => user)
- path = changeset_unsubscribe_path(changeset)
+ path = unsubscribe_changeset_path(changeset)
get path
assert_redirected_to login_path(:referer => path)
session_for(other_user)
assert_difference "changeset.subscribers.count", -1 do
- post changeset_unsubscribe_path(changeset)
+ post unsubscribe_changeset_path(changeset)
end
assert_redirected_to changeset_path(changeset)
assert_not changeset.reload.subscribed?(other_user)
# not signed in
assert_no_difference "changeset.subscribers.count" do
- post changeset_unsubscribe_path(changeset)
+ post unsubscribe_changeset_path(changeset)
end
assert_response :forbidden
session_for(other_user)
# bad diary id
- post changeset_unsubscribe_path(999111)
+ post unsubscribe_changeset_path(999111)
assert_response :not_found
# trying to unsubscribe when not subscribed
assert_no_difference "changeset.subscribers.count" do
- post changeset_unsubscribe_path(changeset)
+ post unsubscribe_changeset_path(changeset)
end
end
# Make sure that you are redirected to the login page when you are
# not logged in, without and with the id of the entry you want to edit
- get edit_diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+ get edit_diary_entry_path(entry.user, entry)
assert_redirected_to login_path(:referer => "/user/#{ERB::Util.u(entry.user.display_name)}/diary/#{entry.id}/edit")
session_for(other_user)
# Verify that you get redirected to show if you are not the user
# that created the entry
- get edit_diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+ get edit_diary_entry_path(entry.user, entry)
assert_redirected_to :action => :show, :display_name => entry.user.display_name, :id => entry.id
session_for(entry.user)
# Verify that you get a not found error, when you pass a bogus id
- get edit_diary_entry_path(:display_name => entry.user.display_name, :id => 9999)
+ get edit_diary_entry_path(entry.user, :id => 9999)
assert_response :not_found
assert_select "div.content-heading", :count => 1 do
assert_select "h1", :text => "No entry with the id: 9999", :count => 1
# Now pass the id, and check that you can edit it, when using the same
# user as the person who created the entry
- get edit_diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+ get edit_diary_entry_path(entry.user, entry)
assert_response :success
assert_select "title", :text => /Edit Diary Entry/, :count => 1
assert_select "div.content-heading", :count => 1 do
new_latitude = "1.1"
new_longitude = "2.2"
new_language_code = "en"
- put diary_entry_path(:display_name => entry.user.display_name, :id => entry, :commit => "save",
- :diary_entry => { :title => new_title, :body => new_body, :latitude => new_latitude,
- :longitude => new_longitude, :language_code => new_language_code })
+ put diary_entry_path(entry.user, entry, :commit => "save",
+ :diary_entry => { :title => new_title, :body => new_body, :latitude => new_latitude,
+ :longitude => new_longitude, :language_code => new_language_code })
assert_redirected_to :action => :show, :display_name => entry.user.display_name, :id => entry.id
# Now check that the new data is rendered, when logged in
- get diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+ get diary_entry_path(entry.user, entry)
assert_response :success
assert_template "show"
assert_select "title", :text => /Users' Diaries | /, :count => 1
# and when not logged in as the user who wrote the entry
session_for(create(:user))
- get diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+ get diary_entry_path(entry.user, entry)
assert_response :success
assert_template "show"
assert_select "title", :text => /Users' Diaries | /, :count => 1
user = create(:user)
diary_entry = create(:diary_entry, :language_code => "en", :user => user)
session_for(user)
- get edit_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ get edit_diary_entry_path(user, diary_entry)
assert_response :success
assert_select "span[class=translation_missing]", false, "Missing translation in edit diary entry"
end
create(:diary_entry_subscription, :diary_entry => entry, :user => user)
# Make sure that you are denied when you are not logged in
- post comment_diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+ post comment_diary_entry_path(entry.user, entry)
assert_response :forbidden
session_for(other_user)
# Verify that you get a not found error, when you pass a bogus id
- post comment_diary_entry_path(:display_name => entry.user.display_name, :id => 9999)
+ post comment_diary_entry_path(entry.user, :id => 9999)
assert_response :not_found
assert_select "div.content-heading", :count => 1 do
assert_select "h1", :text => "No entry with the id: 9999", :count => 1
assert_no_difference "DiaryComment.count" do
assert_no_difference "entry.subscribers.count" do
perform_enqueued_jobs do
- post comment_diary_entry_path(:display_name => entry.user.display_name, :id => entry, :diary_comment => { :body => "" })
+ post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => "" })
end
end
end
assert_difference "DiaryComment.count", 1 do
assert_difference "entry.subscribers.count", 1 do
perform_enqueued_jobs do
- post comment_diary_entry_path(:display_name => entry.user.display_name, :id => entry, :diary_comment => { :body => "New comment" })
+ post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => "New comment" })
end
end
end
assert_equal "New comment", comment.body
# Now show the diary entry, and check the new comment is present
- get diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+ get diary_entry_path(entry.user, entry)
assert_response :success
assert_select ".diary-comment", :count => 1 do
assert_select "#comment#{comment.id}", :count => 1 do
assert_difference "ActionMailer::Base.deliveries.size", 1 do
assert_difference "DiaryComment.count", 1 do
perform_enqueued_jobs do
- post comment_diary_entry_path(:display_name => entry.user.display_name, :id => entry, :diary_comment => { :body => spammy_text })
+ post comment_diary_entry_path(entry.user, entry, :diary_comment => { :body => spammy_text })
end
end
end
assert_redirected_to :controller => :users, :action => :suspended
# Now show the diary entry, and check the new comment is not present
- get diary_entry_path(:display_name => entry.user.display_name, :id => entry)
+ get diary_entry_path(entry.user, entry)
assert_response :success
assert_select ".diary-comment", :count => 0
end
# Try a normal entry that should work
diary_entry = create(:diary_entry, :user => user)
- get diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ get diary_entry_path(user, diary_entry)
assert_response :success
assert_template :show
# Try a deleted entry
diary_entry_deleted = create(:diary_entry, :user => user, :visible => false)
- get diary_entry_path(:display_name => user.display_name, :id => diary_entry_deleted)
+ get diary_entry_path(user, diary_entry_deleted)
assert_response :not_found
# Try an entry by a suspended user
diary_entry_suspended_user = create(:diary_entry, :user => suspended_user)
- get diary_entry_path(:display_name => suspended_user.display_name, :id => diary_entry_suspended_user)
+ get diary_entry_path(suspended_user, diary_entry_suspended_user)
assert_response :not_found
# Try an entry by a deleted user
diary_entry_deleted_user = create(:diary_entry, :user => deleted_user)
- get diary_entry_path(:display_name => deleted_user.display_name, :id => diary_entry_deleted_user)
+ get diary_entry_path(deleted_user, diary_entry_deleted_user)
assert_response :not_found
# Now try as a moderator
session_for(create(:moderator_user))
- get diary_entry_path(:display_name => user.display_name, :id => diary_entry_deleted)
+ get diary_entry_path(user, diary_entry_deleted)
assert_response :success
assert_template :show
# Finally try as an administrator
session_for(create(:administrator_user))
- get diary_entry_path(:display_name => user.display_name, :id => diary_entry_deleted)
+ get diary_entry_path(user, diary_entry_deleted)
assert_response :success
assert_template :show
end
deleted_user_comment = create(:diary_comment, :diary_entry => diary_entry, :user => create(:user, :deleted))
hidden_comment = create(:diary_comment, :diary_entry => diary_entry, :visible => false)
- get diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ get diary_entry_path(user, diary_entry)
assert_response :success
assert_template :show
assert_select "div.comments" do
diary_entry = create(:diary_entry, :user => user)
# Try without logging in
- post hide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ post hide_diary_entry_path(user, diary_entry)
assert_response :forbidden
assert DiaryEntry.find(diary_entry.id).visible
# Now try as a normal user
session_for(user)
- post hide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ post hide_diary_entry_path(user, diary_entry)
assert_redirected_to :controller => :errors, :action => :forbidden
assert DiaryEntry.find(diary_entry.id).visible
# Now try as a moderator
session_for(create(:moderator_user))
- post hide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ post hide_diary_entry_path(user, diary_entry)
assert_redirected_to :action => :index, :display_name => user.display_name
assert_not DiaryEntry.find(diary_entry.id).visible
# Finally try as an administrator
session_for(create(:administrator_user))
- post hide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ post hide_diary_entry_path(user, diary_entry)
assert_redirected_to :action => :index, :display_name => user.display_name
assert_not DiaryEntry.find(diary_entry.id).visible
end
# Try without logging in
diary_entry = create(:diary_entry, :user => user, :visible => false)
- post unhide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ post unhide_diary_entry_path(user, diary_entry)
assert_response :forbidden
assert_not DiaryEntry.find(diary_entry.id).visible
# Now try as a normal user
session_for(user)
- post unhide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ post unhide_diary_entry_path(user, diary_entry)
assert_redirected_to :controller => :errors, :action => :forbidden
assert_not DiaryEntry.find(diary_entry.id).visible
# Now try as a moderator
session_for(create(:moderator_user))
- post unhide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ post unhide_diary_entry_path(user, diary_entry)
assert_redirected_to :action => :index, :display_name => user.display_name
assert DiaryEntry.find(diary_entry.id).visible
# Finally try as an administrator
session_for(create(:administrator_user))
- post unhide_diary_entry_path(:display_name => user.display_name, :id => diary_entry)
+ post unhide_diary_entry_path(user, diary_entry)
assert_redirected_to :action => :index, :display_name => user.display_name
assert DiaryEntry.find(diary_entry.id).visible
end
diary_comment = create(:diary_comment, :diary_entry => diary_entry)
# Try without logging in
- post hide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+ post hide_diary_comment_path(user, diary_entry, diary_comment)
assert_response :forbidden
assert DiaryComment.find(diary_comment.id).visible
# Now try as a normal user
session_for(user)
- post hide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+ post hide_diary_comment_path(user, diary_entry, diary_comment)
assert_redirected_to :controller => :errors, :action => :forbidden
assert DiaryComment.find(diary_comment.id).visible
# Try as a moderator
session_for(create(:moderator_user))
- post hide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+ post hide_diary_comment_path(user, diary_entry, diary_comment)
assert_redirected_to :action => :show, :display_name => user.display_name, :id => diary_entry.id
assert_not DiaryComment.find(diary_comment.id).visible
# Finally try as an administrator
session_for(create(:administrator_user))
- post hide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+ post hide_diary_comment_path(user, diary_entry, diary_comment)
assert_redirected_to :action => :show, :display_name => user.display_name, :id => diary_entry.id
assert_not DiaryComment.find(diary_comment.id).visible
end
diary_comment = create(:diary_comment, :diary_entry => diary_entry, :visible => false)
# Try without logging in
- post unhide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+ post unhide_diary_comment_path(user, diary_entry, diary_comment)
assert_response :forbidden
assert_not DiaryComment.find(diary_comment.id).visible
# Now try as a normal user
session_for(user)
- post unhide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+ post unhide_diary_comment_path(user, diary_entry, diary_comment)
assert_redirected_to :controller => :errors, :action => :forbidden
assert_not DiaryComment.find(diary_comment.id).visible
# Now try as a moderator
session_for(create(:moderator_user))
- post unhide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+ post unhide_diary_comment_path(user, diary_entry, diary_comment)
assert_redirected_to :action => :show, :display_name => user.display_name, :id => diary_entry.id
assert DiaryComment.find(diary_comment.id).visible
# Finally try as an administrator
session_for(create(:administrator_user))
- post unhide_diary_comment_path(:display_name => user.display_name, :id => diary_entry, :comment => diary_comment)
+ post unhide_diary_comment_path(user, diary_entry, diary_comment)
assert_redirected_to :action => :show, :display_name => user.display_name, :id => diary_entry.id
assert DiaryComment.find(diary_comment.id).visible
end
user = create(:user)
other_user = create(:user)
diary_entry = create(:diary_entry, :user => user)
- path = diary_entry_subscribe_path(:id => diary_entry, :display_name => user.display_name)
+ path = diary_entry_subscribe_path(user, diary_entry)
get path
assert_redirected_to login_path(:referer => path)
get path
assert_response :success
assert_dom ".content-body" do
- assert_dom "a[href='#{diary_entry_path(:id => diary_entry, :display_name => user.display_name)}']", :text => diary_entry.title
+ assert_dom "a[href='#{diary_entry_path(user, diary_entry)}']", :text => diary_entry.title
assert_dom "a[href='#{user_path(user)}']", :text => user.display_name
end
end
session_for(other_user)
assert_difference "diary_entry.subscribers.count", 1 do
- post diary_entry_subscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+ post diary_entry_subscribe_path(user, diary_entry)
end
assert_response :redirect
end
# not signed in
assert_no_difference "diary_entry.subscribers.count" do
- post diary_entry_subscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+ post diary_entry_subscribe_path(user, diary_entry)
end
assert_response :forbidden
session_for(other_user)
# bad diary id
- post diary_entry_subscribe_path(:id => 999111, :display_name => "username")
+ post diary_entry_subscribe_path("username", 999111)
assert_response :not_found
# trying to subscribe when already subscribed
- post diary_entry_subscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+ post diary_entry_subscribe_path(user, diary_entry)
assert_no_difference "diary_entry.subscribers.count" do
- post diary_entry_subscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+ post diary_entry_subscribe_path(user, diary_entry)
end
end
user = create(:user)
other_user = create(:user)
diary_entry = create(:diary_entry, :user => user)
- path = diary_entry_unsubscribe_path(:id => diary_entry, :display_name => user.display_name)
+ path = diary_entry_unsubscribe_path(user, diary_entry)
get path
assert_redirected_to login_path(:referer => path)
get path
assert_response :success
assert_dom ".content-body" do
- assert_dom "a[href='#{diary_entry_path(:id => diary_entry, :display_name => user.display_name)}']", :text => diary_entry.title
+ assert_dom "a[href='#{diary_entry_path(user, diary_entry)}']", :text => diary_entry.title
assert_dom "a[href='#{user_path(user)}']", :text => user.display_name
end
end
session_for(other_user)
assert_difference "diary_entry.subscribers.count", -1 do
- post diary_entry_unsubscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+ post diary_entry_unsubscribe_path(user, diary_entry)
end
assert_response :redirect
end
# not signed in
assert_no_difference "diary_entry.subscribers.count" do
- post diary_entry_unsubscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+ post diary_entry_unsubscribe_path(user, diary_entry)
end
assert_response :forbidden
session_for(other_user)
# bad diary id
- post diary_entry_unsubscribe_path(:id => 999111, :display_name => "username")
+ post diary_entry_unsubscribe_path("username", 999111)
assert_response :not_found
# trying to unsubscribe when not subscribed
assert_no_difference "diary_entry.subscribers.count" do
- post diary_entry_unsubscribe_path(:id => diary_entry, :display_name => diary_entry.user.display_name)
+ post diary_entry_unsubscribe_path(user, diary_entry)
end
end
# When not logged in a GET should ask us to login
get make_friend_path(friend)
- assert_redirected_to login_path(:referer => make_friend_path(:display_name => friend.display_name))
+ assert_redirected_to login_path(:referer => make_friend_path(friend))
# When not logged in a POST should error
post make_friend_path(friend)
def test_make_friend_unknown_user
# Should error when a bogus user is specified
session_for(create(:user))
- get make_friend_path(:display_name => "No Such User")
+ get make_friend_path("No Such User")
assert_response :not_found
assert_template :no_such_user
end
# When not logged in a GET should ask us to login
get remove_friend_path(friend)
- assert_redirected_to login_path(:referer => remove_friend_path(:display_name => friend.display_name))
+ assert_redirected_to login_path(:referer => remove_friend_path(friend))
# When not logged in a POST should error
post remove_friend_path, :params => { :display_name => friend.display_name }
def test_remove_friend_unknown_user
# Should error when a bogus user is specified
session_for(create(:user))
- get remove_friend_path(:display_name => "No Such User")
+ get remove_friend_path("No Such User")
assert_response :not_found
assert_template :no_such_user
end
def test_new_no_login
# Check that the new message page requires us to login
user = create(:user)
- get new_message_path(:display_name => user.display_name)
- assert_redirected_to login_path(:referer => new_message_path(:display_name => user.display_name))
+ get new_message_path(user)
+ assert_redirected_to login_path(:referer => new_message_path(user))
end
##
session_for(user)
# Check that the new message page loads
- get new_message_path(:display_name => recipient_user.display_name)
+ get new_message_path(recipient_user)
assert_response :success
assert_template "new"
assert_select "title", "Send message | OpenStreetMap"
+ assert_select "a[href='#{user_path recipient_user}']", :text => recipient_user.display_name
assert_select "form[action='/messages']", :count => 1 do
assert_select "input[type='hidden'][name='display_name'][value='#{recipient_user.display_name}']"
assert_select "input#message_title", :count => 1
assert_difference "ActionMailer::Base.deliveries.size", 0 do
assert_difference "Message.count", 0 do
perform_enqueued_jobs do
- get new_message_path(:display_name => recipient_user.display_name,
- :message => { :title => "Test Message", :body => "Test message body" })
+ get new_message_path(recipient_user, :message => { :title => "Test Message", :body => "Test message body" })
end
end
end
assert_equal "markdown", m.body_format
# Asking to send a message with a bogus user name should fail
- get new_message_path(:display_name => "non_existent_user")
+ get new_message_path("non_existent_user")
assert_response :not_found
assert_template "users/no_such_user"
assert_select "h1", "The user non_existent_user does not exist"
# Check that we can't reply to somebody else's message
get message_reply_path(:message_id => unread_message)
assert_redirected_to login_path(:referer => message_reply_path(:message_id => unread_message.id))
- assert_equal "You are logged in as `#{other_user.display_name}' but the message you have asked to reply to was not sent to that user. Please login as the correct user in order to reply.", flash[:notice]
+ assert_equal "You are logged in as `#{other_user.display_name}' but the message you have asked to reply to was not sent to that user. Please log in as the correct user in order to reply.", flash[:notice]
# Login as the right user
session_for(recipient_user)
# Check that we can't read the message
get message_path(:id => unread_message)
assert_redirected_to login_path(:referer => message_path(:id => unread_message.id))
- assert_equal "You are logged in as `#{other_user.display_name}' but the message you have asked to read was not sent by or to that user. Please login as the correct user in order to read it.", flash[:notice]
+ assert_equal "You are logged in as `#{other_user.display_name}' but the message you have asked to read was not sent by or to that user. Please log in as the correct user in order to read it.", flash[:notice]
# Login as the message sender
session_for(user)
get message_path(:id => unread_message)
assert_response :success
assert_template "show"
+ assert_select "a[href='#{user_path recipient_user}']", :text => recipient_user.display_name
assert_not Message.find(unread_message.id).message_read
# Login as the message recipient
get message_path(:id => unread_message)
assert_response :success
assert_template "show"
+ assert_select "a[href='#{user_path user}']", :text => user.display_name
assert Message.find(unread_message.id).message_read
# Asking to read a message with no ID should fail
assert_template "inbox"
assert_select ".content-inner > table", :count => 1 do
assert_select "tr", :count => 2
- assert_select "tr#inbox-#{read_message.id}.inbox-row", :count => 1
+ assert_select "tr#inbox-#{read_message.id}.inbox-row", :count => 1 do
+ assert_select "a[href='#{user_path read_message.sender}']", :text => read_message.sender.display_name
+ assert_select "a[href='#{message_path read_message}']", :text => read_message.title
+ end
end
end
# test the outbox action
def test_outbox
user = create(:user)
- create(:message, :sender => user)
+ message = create(:message, :sender => user)
# Check that the outbox page requires us to login
get outbox_messages_path
assert_template "outbox"
assert_select ".content-inner > table", :count => 1 do
assert_select "tr", :count => 2
- assert_select "tr.inbox-row", :count => 1
+ assert_select "tr.inbox-row", :count => 1 do
+ assert_select "a[href='#{user_path message.recipient}']", :text => message.recipient.display_name
+ assert_select "a[href='#{message_path message}']", :text => message.title
+ end
end
end
--- /dev/null
+require "test_helper"
+
+class NodesControllerTest < ActionDispatch::IntegrationTest
+ ##
+ # test all routes which lead to this controller
+ def test_routes
+ assert_routing(
+ { :path => "/node/1", :method => :get },
+ { :controller => "nodes", :action => "show", :id => "1" }
+ )
+ end
+
+ def test_show
+ node = create(:node)
+ sidebar_browse_check :node_path, node.id, "browse/feature"
+ assert_select "h4", /^Version/ do
+ assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
+ end
+ assert_select ".secondary-actions a[href='#{api_node_path node}']", :count => 1
+ assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
+ assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 0
+ end
+
+ def test_show_multiple_versions
+ node = create(:node, :with_history, :version => 2)
+ sidebar_browse_check :node_path, node.id, "browse/feature"
+ assert_select ".secondary-actions a[href='#{node_history_path node}']", :count => 1
+ assert_select ".secondary-actions a[href='#{old_node_path node, 1}']", :count => 1
+ assert_select ".secondary-actions a[href='#{old_node_path node, 2}']", :count => 1
+ end
+
+ def test_show_relation_member
+ member = create(:node)
+ relation = create(:relation)
+ create(:relation_member, :relation => relation, :member => member)
+ sidebar_browse_check :node_path, member.id, "browse/feature"
+ assert_select "a[href='#{relation_path relation}']", :count => 1
+ end
+
+ def test_show_deleted
+ node = create(:node, :visible => false)
+ sidebar_browse_check :node_path, node.id, "browse/feature"
+ assert_select "h4", /^Version/ do
+ assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
+ end
+ assert_select "a[href='#{api_node_path node}']", :count => 0
+ end
+
+ def test_show_redacted
+ node = create(:node, :with_history, :deleted, :version => 2)
+ node_v1 = node.old_nodes.find_by(:version => 1)
+ node_v1.redact!(create(:redaction))
+
+ get node_path(node)
+ assert_response :success
+ assert_template "feature"
+
+ # check that we don't show lat/lon for a redacted node.
+ assert_select ".browse-section", 1
+ assert_select ".browse-section.browse-node", 1
+ assert_select ".browse-section.browse-node .latitude", 0
+ assert_select ".browse-section.browse-node .longitude", 0
+ end
+
+ def test_show_secondary_actions_to_anonymous_user
+ node = create(:node, :with_history)
+ get node_path(node)
+ assert_response :success
+ assert_select ".secondary-actions a", :text => "View Details", :count => 0
+ assert_select ".secondary-actions a", :text => "View History", :count => 1
+ assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
+ end
+
+ def test_show_secondary_actions_to_regular_user
+ session_for(create(:user))
+ node = create(:node, :with_history)
+ get node_path(node)
+ assert_response :success
+ assert_select ".secondary-actions a", :text => "View Details", :count => 0
+ assert_select ".secondary-actions a", :text => "View History", :count => 1
+ assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
+ end
+
+ def test_show_secondary_actions_to_moderator
+ session_for(create(:moderator_user))
+ node = create(:node, :with_history)
+ get node_path(node)
+ assert_response :success
+ assert_select ".secondary-actions a", :text => "View Details", :count => 0
+ assert_select ".secondary-actions a", :text => "View History", :count => 1
+ assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 1
+ end
+end
create(:note_comment, :note => note, :author => second_user)
end
- # Note that the table rows include a header row
- get user_notes_path(:display_name => first_user.display_name)
+ get user_notes_path(first_user)
assert_response :success
- assert_select "table.note_list tr", :count => 2
+ assert_select "table.note_list tbody tr", :count => 1
- get user_notes_path(:display_name => second_user.display_name)
+ get user_notes_path(second_user)
assert_response :success
- assert_select "table.note_list tr", :count => 2
+ assert_select "table.note_list tbody tr", :count => 1
- get user_notes_path(:display_name => "non-existent")
+ get user_notes_path("non-existent")
assert_response :not_found
session_for(moderator_user)
- get user_notes_path(:display_name => first_user.display_name)
+ get user_notes_path(first_user)
assert_response :success
- assert_select "table.note_list tr", :count => 2
+ assert_select "table.note_list tbody tr", :count => 1
- get user_notes_path(:display_name => second_user.display_name)
+ get user_notes_path(second_user)
assert_response :success
- assert_select "table.note_list tr", :count => 3
+ assert_select "table.note_list tbody tr", :count => 2
- get user_notes_path(:display_name => "non-existent")
+ get user_notes_path("non-existent")
assert_response :not_found
end
create(:note_comment, :note => note, :author => user)
end
- get user_notes_path(:display_name => user.display_name)
+ get user_notes_path(user)
assert_response :success
- assert_select "table.note_list tr", :count => 11
+ assert_select "table.note_list tbody tr", :count => 10
- get user_notes_path(:display_name => user.display_name, :page => 2)
+ get user_notes_path(user, :page => 2)
assert_response :success
- assert_select "table.note_list tr", :count => 11
+ assert_select "table.note_list tbody tr", :count => 10
end
def test_empty_page
user = create(:user)
- get user_notes_path(:display_name => user.display_name)
+ get user_notes_path(user)
assert_response :success
assert_select "h4", :html => "No notes"
end
create_list(:client_application, 2, :user => user)
create_list(:access_token, 2, :user => user)
- get oauth_clients_path(:display_name => user.display_name)
- assert_redirected_to login_path(:referer => oauth_clients_path(:display_name => user.display_name))
+ get oauth_clients_path(user)
+ assert_redirected_to login_path(:referer => oauth_clients_path(user))
session_for(user)
- get oauth_clients_path(:display_name => user.display_name)
+ get oauth_clients_path(user)
assert_response :success
assert_template "index"
assert_select "li.client_application", 2
def test_new
user = create(:user)
- get new_oauth_client_path(:display_name => user.display_name)
- assert_redirected_to login_path(:referer => new_oauth_client_path(:display_name => user.display_name))
+ get new_oauth_client_path(user)
+ assert_redirected_to login_path(:referer => new_oauth_client_path(user))
session_for(user)
- get new_oauth_client_path(:display_name => user.display_name)
+ get new_oauth_client_path(user)
assert_response :success
assert_template "new"
assert_select "form", 1 do
user = create(:user)
with_settings(:oauth_10_registration => false) do
- get new_oauth_client_path(:display_name => user.display_name)
- assert_redirected_to login_path(:referer => new_oauth_client_path(:display_name => user.display_name))
+ get new_oauth_client_path(user)
+ assert_redirected_to login_path(:referer => new_oauth_client_path(user))
session_for(user)
- get new_oauth_client_path(:display_name => user.display_name)
- assert_redirected_to oauth_clients_path(:display_name => user.display_name)
+ get new_oauth_client_path(user)
+ assert_redirected_to oauth_clients_path(user)
end
end
user = create(:user)
assert_difference "ClientApplication.count", 0 do
- post oauth_clients_path(:display_name => user.display_name)
+ post oauth_clients_path(user)
end
assert_response :forbidden
session_for(user)
assert_difference "ClientApplication.count", 0 do
- post oauth_clients_path(:display_name => user.display_name,
- :client_application => { :name => "Test Application" })
+ post oauth_clients_path(user, :client_application => { :name => "Test Application" })
end
assert_response :success
assert_template "new"
assert_difference "ClientApplication.count", 1 do
- post oauth_clients_path(:display_name => user.display_name,
- :client_application => { :name => "Test Application",
- :url => "http://test.example.com/" })
+ post oauth_clients_path(user, :client_application => { :name => "Test Application",
+ :url => "http://test.example.com/" })
end
assert_redirected_to oauth_client_path(:id => ClientApplication.find_by(:name => "Test Application").id)
end
client = create(:client_application, :user => user)
other_client = create(:client_application)
- get oauth_client_path(:display_name => user.display_name, :id => client)
- assert_redirected_to login_path(:referer => oauth_client_path(:display_name => user.display_name, :id => client.id))
+ get oauth_client_path(user, client)
+ assert_redirected_to login_path(:referer => oauth_client_path(user, client.id))
session_for(user)
- get oauth_client_path(:display_name => user.display_name, :id => other_client)
+ get oauth_client_path(user, other_client)
assert_response :not_found
assert_template "not_found"
- get oauth_client_path(:display_name => user.display_name, :id => client)
+ get oauth_client_path(user, client)
assert_response :success
assert_template "show"
end
client = create(:client_application, :user => user)
other_client = create(:client_application)
- get edit_oauth_client_path(:display_name => user.display_name, :id => client)
- assert_redirected_to login_path(:referer => edit_oauth_client_path(:display_name => user.display_name, :id => client.id))
+ get edit_oauth_client_path(user, client)
+ assert_redirected_to login_path(:referer => edit_oauth_client_path(user, client.id))
session_for(user)
- get edit_oauth_client_path(:display_name => user.display_name, :id => other_client)
+ get edit_oauth_client_path(user, other_client)
assert_response :not_found
assert_template "not_found"
- get edit_oauth_client_path(:display_name => user.display_name, :id => client)
+ get edit_oauth_client_path(user, client)
assert_response :success
assert_template "edit"
assert_select "form", 1 do
client = create(:client_application, :user => user)
other_client = create(:client_application)
- put oauth_client_path(:display_name => user.display_name, :id => client)
+ put oauth_client_path(user, client)
assert_response :forbidden
session_for(user)
- put oauth_client_path(:display_name => user.display_name, :id => other_client)
+ put oauth_client_path(user, other_client)
assert_response :not_found
assert_template "not_found"
- put oauth_client_path(:display_name => user.display_name, :id => client,
- :client_application => { :name => "New Name", :url => nil })
+ put oauth_client_path(user, client, :client_application => { :name => "New Name", :url => nil })
assert_response :success
assert_template "edit"
- put oauth_client_path(:display_name => user.display_name, :id => client,
- :client_application => { :name => "New Name", :url => "http://new.example.com/url" })
+ put oauth_client_path(user, client, :client_application => { :name => "New Name", :url => "http://new.example.com/url" })
assert_redirected_to oauth_client_path(:id => client.id)
end
other_client = create(:client_application)
assert_difference "ClientApplication.count", 0 do
- delete oauth_client_path(:display_name => user.display_name, :id => client)
+ delete oauth_client_path(user, client)
end
assert_response :forbidden
session_for(user)
assert_difference "ClientApplication.count", 0 do
- delete oauth_client_path(:display_name => user.display_name, :id => other_client)
+ delete oauth_client_path(user, other_client)
end
assert_response :not_found
assert_template "not_found"
assert_difference "ClientApplication.count", -1 do
- delete oauth_client_path(:display_name => user.display_name, :id => client)
+ delete oauth_client_path(user, client)
end
- assert_redirected_to oauth_clients_path(:display_name => user.display_name)
+ assert_redirected_to oauth_clients_path(user)
end
end
class OldNodesControllerTest < ActionDispatch::IntegrationTest
def test_routes
+ assert_routing(
+ { :path => "/node/1/history", :method => :get },
+ { :controller => "old_nodes", :action => "index", :id => "1" }
+ )
assert_routing(
{ :path => "/node/1/history/2", :method => :get },
{ :controller => "old_nodes", :action => "show", :id => "1", :version => "2" }
)
end
+ def test_history
+ node = create(:node, :with_history)
+ sidebar_browse_check :node_history_path, node.id, "browse/history"
+ assert_select "h4", /^Version/ do
+ assert_select "a[href='#{old_node_path node, 1}']", :text => "1", :count => 1
+ end
+ end
+
+ def test_history_of_redacted
+ node = create(:node, :with_history, :deleted, :version => 2)
+ node_v1 = node.old_nodes.find_by(:version => 1)
+ node_v1.redact!(create(:redaction))
+
+ get node_history_path(:id => node)
+ assert_response :success
+ assert_template "browse/history"
+
+ # there are 2 revisions of the redacted node, but only one
+ # should be showing details here.
+ assert_select ".browse-section", 2
+ assert_select ".browse-section.browse-redacted", 1
+ assert_select ".browse-section.browse-node", 1
+ assert_select ".browse-section.browse-node .latitude", 0
+ assert_select ".browse-section.browse-node .longitude", 0
+ end
+
+ def test_unredacted_history_of_redacted
+ session_for(create(:moderator_user))
+ node = create(:node, :with_history, :deleted, :version => 2)
+ node_v1 = node.old_nodes.find_by(:version => 1)
+ node_v1.redact!(create(:redaction))
+
+ get node_history_path(:id => node, :params => { :show_redactions => true })
+ assert_response :success
+ assert_template "browse/history"
+
+ assert_select ".browse-section", 2
+ assert_select ".browse-section.browse-redacted", 0
+ assert_select ".browse-section.browse-node", 2
+ end
+
+ def test_anonymous_user_history_page_secondary_actions
+ node = create(:node, :with_history)
+ get node_history_path(:id => node)
+ assert_response :success
+ assert_select ".secondary-actions a", :text => "View Details", :count => 1
+ assert_select ".secondary-actions a", :text => "View History", :count => 0
+ assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
+ end
+
+ def test_regular_user_history_page_secondary_actions
+ session_for(create(:user))
+ node = create(:node, :with_history)
+ get node_history_path(:id => node)
+ assert_response :success
+ assert_select ".secondary-actions a", :text => "View Details", :count => 1
+ assert_select ".secondary-actions a", :text => "View History", :count => 0
+ assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
+ end
+
+ def test_moderator_user_history_page_secondary_actions
+ session_for(create(:moderator_user))
+ node = create(:node, :with_history)
+ get node_history_path(:id => node)
+ assert_response :success
+ assert_select ".secondary-actions a", :text => "View Details", :count => 1
+ assert_select ".secondary-actions a", :text => "View History", :count => 0
+ assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 1
+ end
+
+ def test_anonymous_user_unredacted_history_page_secondary_actions
+ node = create(:node, :with_history)
+ get node_history_path(:id => node, :params => { :show_redactions => true })
+ assert_response :redirect
+ end
+
+ def test_regular_user_unredacted_history_page_secondary_actions
+ session_for(create(:user))
+ node = create(:node, :with_history)
+ get node_history_path(:id => node, :params => { :show_redactions => true })
+ assert_response :redirect
+ end
+
+ def test_moderator_user_unredacted_history_page_secondary_actions
+ session_for(create(:moderator_user))
+ node = create(:node, :with_history)
+ get node_history_path(:id => node, :params => { :show_redactions => true })
+ assert_response :success
+ assert_select ".secondary-actions a", :text => "View Details", :count => 1
+ assert_select ".secondary-actions a", :text => "View History", :count => 1
+ assert_select ".secondary-actions a", :text => "View Unredacted History", :count => 0
+ end
+
def test_visible_with_one_version
node = create(:node, :with_history)
get old_node_path(node, 1)
class OldRelationsControllerTest < ActionDispatch::IntegrationTest
def test_routes
+ assert_routing(
+ { :path => "/relation/1/history", :method => :get },
+ { :controller => "old_relations", :action => "index", :id => "1" }
+ )
assert_routing(
{ :path => "/relation/1/history/2", :method => :get },
{ :controller => "old_relations", :action => "show", :id => "1", :version => "2" }
)
end
+ def test_history
+ relation = create(:relation, :with_history)
+ sidebar_browse_check :relation_history_path, relation.id, "browse/history"
+ assert_select "h4", /^Version/ do
+ assert_select "a[href='#{old_relation_path relation, 1}']", :text => "1", :count => 1
+ end
+ end
+
+ def test_history_of_redacted
+ relation = create(:relation, :with_history, :version => 4)
+ relation_v1 = relation.old_relations.find_by(:version => 1)
+ relation_v1.redact!(create(:redaction))
+ relation_v3 = relation.old_relations.find_by(:version => 3)
+ relation_v3.redact!(create(:redaction))
+
+ get relation_history_path(:id => relation)
+ assert_response :success
+ assert_template "browse/history"
+
+ # there are 4 revisions of the redacted relation, but only 2
+ # should be showing details here.
+ assert_select ".browse-section", 4
+ assert_select ".browse-section.browse-redacted", 2
+ assert_select ".browse-section.browse-relation", 2
+ end
+
+ def test_unredacted_history_of_redacted
+ session_for(create(:moderator_user))
+ relation = create(:relation, :with_history, :version => 4)
+ relation_v1 = relation.old_relations.find_by(:version => 1)
+ relation_v1.redact!(create(:redaction))
+ relation_v3 = relation.old_relations.find_by(:version => 3)
+ relation_v3.redact!(create(:redaction))
+
+ get relation_history_path(:id => relation, :params => { :show_redactions => true })
+ assert_response :success
+ assert_template "browse/history"
+
+ assert_select ".browse-section", 4
+ assert_select ".browse-section.browse-redacted", 0
+ assert_select ".browse-section.browse-relation", 4
+ end
+
def test_visible_with_one_version
relation = create(:relation, :with_history)
get old_relation_path(relation, 1)
class OldWaysControllerTest < ActionDispatch::IntegrationTest
def test_routes
+ assert_routing(
+ { :path => "/way/1/history", :method => :get },
+ { :controller => "old_ways", :action => "index", :id => "1" }
+ )
assert_routing(
{ :path => "/way/1/history/2", :method => :get },
{ :controller => "old_ways", :action => "show", :id => "1", :version => "2" }
)
end
+ def test_history
+ way = create(:way, :with_history)
+ sidebar_browse_check :way_history_path, way.id, "browse/history"
+ assert_select "h4", /^Version/ do
+ assert_select "a[href='#{old_way_path way, 1}']", :text => "1", :count => 1
+ end
+ end
+
+ def test_history_of_redacted
+ way = create(:way, :with_history, :version => 4)
+ way_v1 = way.old_ways.find_by(:version => 1)
+ way_v1.redact!(create(:redaction))
+ way_v3 = way.old_ways.find_by(:version => 3)
+ way_v3.redact!(create(:redaction))
+
+ get way_history_path(:id => way)
+ assert_response :success
+ assert_template "browse/history"
+
+ # there are 4 revisions of the redacted way, but only 2
+ # should be showing details here.
+ assert_select ".browse-section", 4
+ assert_select ".browse-section.browse-redacted", 2
+ assert_select ".browse-section.browse-way", 2
+ end
+
+ def test_unredacted_history_of_redacted
+ session_for(create(:moderator_user))
+ way = create(:way, :with_history, :version => 4)
+ way_v1 = way.old_ways.find_by(:version => 1)
+ way_v1.redact!(create(:redaction))
+ way_v3 = way.old_ways.find_by(:version => 3)
+ way_v3.redact!(create(:redaction))
+
+ get way_history_path(:id => way, :params => { :show_redactions => true })
+ assert_response :success
+ assert_template "browse/history"
+
+ assert_select ".browse-section", 4
+ assert_select ".browse-section.browse-redacted", 0
+ assert_select ".browse-section.browse-way", 4
+ end
+
def test_visible_with_one_version
way = create(:way, :with_history)
get old_way_path(way, 1)
--- /dev/null
+require "test_helper"
+
+class RelationsControllerTest < ActionDispatch::IntegrationTest
+ ##
+ # test all routes which lead to this controller
+ def test_routes
+ assert_routing(
+ { :path => "/relation/1", :method => :get },
+ { :controller => "relations", :action => "show", :id => "1" }
+ )
+ end
+
+ def test_show
+ relation = create(:relation)
+ sidebar_browse_check :relation_path, relation.id, "browse/feature"
+ assert_select "h4", /^Version/ do
+ assert_select "a[href='#{old_relation_path relation, 1}']", :text => "1", :count => 1
+ end
+ assert_select ".secondary-actions a[href='#{api_relation_path relation}']", :count => 1
+ assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
+ assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 0
+ end
+
+ def test_show_multiple_versions
+ relation = create(:relation, :with_history, :version => 2)
+ sidebar_browse_check :relation_path, relation.id, "browse/feature"
+ assert_select ".secondary-actions a[href='#{relation_history_path relation}']", :count => 1
+ assert_select ".secondary-actions a[href='#{old_relation_path relation, 1}']", :count => 1
+ assert_select ".secondary-actions a[href='#{old_relation_path relation, 2}']", :count => 1
+ end
+
+ def test_show_relation_member
+ member = create(:relation)
+ relation = create(:relation)
+ create(:relation_member, :relation => relation, :member => member)
+ sidebar_browse_check :relation_path, member.id, "browse/feature"
+ assert_select "a[href='#{relation_path relation}']", :count => 1
+ end
+end
# Test the index page redirects
def test_index_redirect
get root_path(:node => 123)
- assert_redirected_to :controller => :browse, :action => :node, :id => 123
+ assert_redirected_to node_path(123)
get root_path(:way => 123)
- assert_redirected_to :controller => :browse, :action => :way, :id => 123
+ assert_redirected_to way_path(123)
get root_path(:relation => 123)
- assert_redirected_to :controller => :browse, :action => :relation, :id => 123
+ assert_redirected_to relation_path(123)
get root_path(:note => 123)
assert_redirected_to :controller => :notes, :action => :show, :id => 123
assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4.8779296875/3.955078125&layers=T"
get permalink_path(:code => "wBz3--", :node => 1)
- assert_redirected_to :controller => :browse, :action => :node, :id => 1, :anchor => "map=3/4.8779296875/3.955078125"
+ assert_redirected_to node_path(1, :anchor => "map=3/4.8779296875/3.955078125")
get permalink_path(:code => "wBz3--", :way => 2)
- assert_redirected_to :controller => :browse, :action => :way, :id => 2, :anchor => "map=3/4.8779296875/3.955078125"
+ assert_redirected_to way_path(2, :anchor => "map=3/4.8779296875/3.955078125")
get permalink_path(:code => "wBz3--", :relation => 3)
- assert_redirected_to :controller => :browse, :action => :relation, :id => 3, :anchor => "map=3/4.8779296875/3.955078125"
+ assert_redirected_to relation_path(3, :anchor => "map=3/4.8779296875/3.955078125")
get permalink_path(:code => "wBz3--", :changeset => 4)
- assert_redirected_to changeset_path(:id => 4, :anchor => "map=3/4.8779296875/3.955078125")
+ assert_redirected_to changeset_path(4, :anchor => "map=3/4.8779296875/3.955078125")
end
# Test the key page
public_trace_file = create(:trace, :visibility => "public")
# First with no auth, which should work since the trace is public
- get show_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+ get show_trace_path(public_trace_file.user, public_trace_file)
check_trace_show public_trace_file
# Now with some other user, which should work since the trace is public
session_for(create(:user))
- get show_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+ get show_trace_path(public_trace_file.user, public_trace_file)
check_trace_show public_trace_file
# And finally we should be able to do it with the owner of the trace
session_for(public_trace_file.user)
- get show_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+ get show_trace_path(public_trace_file.user, public_trace_file)
check_trace_show public_trace_file
end
anon_trace_file = create(:trace, :visibility => "private")
# First with no auth
- get show_trace_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+ get show_trace_path(anon_trace_file.user, anon_trace_file)
assert_redirected_to :action => :index
# Now with some other user, which should not work since the trace is anon
session_for(create(:user))
- get show_trace_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+ get show_trace_path(anon_trace_file.user, anon_trace_file)
assert_redirected_to :action => :index
# And finally we should be able to do it with the owner of the trace
session_for(anon_trace_file.user)
- get show_trace_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+ get show_trace_path(anon_trace_file.user, anon_trace_file)
check_trace_show anon_trace_file
end
deleted_trace_file = create(:trace, :deleted)
# First with a trace that has never existed
- get show_trace_path(:display_name => create(:user).display_name, :id => 0)
+ get show_trace_path(create(:user), 0)
assert_redirected_to :action => :index
# Now with a trace that has been deleted
session_for(deleted_trace_file.user)
- get show_trace_path(:display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file)
+ get show_trace_path(deleted_trace_file.user, deleted_trace_file)
assert_redirected_to :action => :index
end
public_trace_file = create(:trace, :visibility => "public", :fixture => "a")
# First with no auth, which should work since the trace is public
- get trace_picture_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+ get trace_picture_path(public_trace_file.user, public_trace_file)
check_trace_picture public_trace_file
# Now with some other user, which should work since the trace is public
session_for(create(:user))
- get trace_picture_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+ get trace_picture_path(public_trace_file.user, public_trace_file)
check_trace_picture public_trace_file
# And finally we should be able to do it with the owner of the trace
session_for(public_trace_file.user)
- get trace_picture_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+ get trace_picture_path(public_trace_file.user, public_trace_file)
check_trace_picture public_trace_file
end
anon_trace_file = create(:trace, :visibility => "private", :fixture => "b")
# First with no auth
- get trace_picture_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+ get trace_picture_path(anon_trace_file.user, anon_trace_file)
assert_response :forbidden
# Now with some other user, which shouldn't work since the trace is anon
session_for(create(:user))
- get trace_picture_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+ get trace_picture_path(anon_trace_file.user, anon_trace_file)
assert_response :forbidden
# And finally we should be able to do it with the owner of the trace
session_for(anon_trace_file.user)
- get trace_picture_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+ get trace_picture_path(anon_trace_file.user, anon_trace_file)
check_trace_picture anon_trace_file
end
deleted_trace_file = create(:trace, :deleted)
# First with a trace that has never existed
- get trace_picture_path(:display_name => create(:user).display_name, :id => 0)
+ get trace_picture_path(create(:user), 0)
assert_response :not_found
# Now with a trace that has been deleted
session_for(deleted_trace_file.user)
- get trace_picture_path(:display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file)
+ get trace_picture_path(deleted_trace_file.user, deleted_trace_file)
assert_response :not_found
end
public_trace_file = create(:trace, :visibility => "public", :fixture => "a")
# First with no auth, which should work since the trace is public
- get trace_icon_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+ get trace_icon_path(public_trace_file.user, public_trace_file)
check_trace_icon public_trace_file
# Now with some other user, which should work since the trace is public
session_for(create(:user))
- get trace_icon_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+ get trace_icon_path(public_trace_file.user, public_trace_file)
check_trace_icon public_trace_file
# And finally we should be able to do it with the owner of the trace
session_for(public_trace_file.user)
- get trace_icon_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
+ get trace_icon_path(public_trace_file.user, public_trace_file)
check_trace_icon public_trace_file
end
anon_trace_file = create(:trace, :visibility => "private", :fixture => "b")
# First with no auth
- get trace_icon_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+ get trace_icon_path(anon_trace_file.user, anon_trace_file)
assert_response :forbidden
# Now with some other user, which shouldn't work since the trace is anon
session_for(create(:user))
- get trace_icon_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+ get trace_icon_path(anon_trace_file.user, anon_trace_file)
assert_response :forbidden
# And finally we should be able to do it with the owner of the trace
session_for(anon_trace_file.user)
- get trace_icon_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
+ get trace_icon_path(anon_trace_file.user, anon_trace_file)
check_trace_icon anon_trace_file
end
deleted_trace_file = create(:trace, :deleted)
# First with a trace that has never existed
- get trace_icon_path(:display_name => create(:user).display_name, :id => 0)
+ get trace_icon_path(create(:user), 0)
assert_response :not_found
# Now with a trace that has been deleted
session_for(deleted_trace_file.user)
- get trace_icon_path(:display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file)
+ get trace_icon_path(deleted_trace_file.user, deleted_trace_file)
assert_response :not_found
end
assert_select row, "li", Regexp.new(Regexp.escape("#{trace.size} points")) if trace.inserted?
assert_select row, "td", Regexp.new(Regexp.escape(trace.description))
assert_select row, "td", Regexp.new(Regexp.escape("by #{trace.user.display_name}"))
+ assert_select row, "a[href='#{user_path trace.user}']", :text => trace.user.display_name
end
end
end
assert_select "table", :count => 1 do
assert_select "td", /^#{Regexp.quote(trace.name)} /
- assert_select "td", trace.user.display_name
+ assert_select "td a[href='#{user_path trace.user}']", :text => trace.user.display_name
assert_select "td", trace.description
end
end
##
# test the index action
def test_index
+ revoked_block = create(:user_block, :revoked)
+
+ get user_blocks_path
+ assert_response :success
+ assert_select "table#block_list tbody tr", :count => 1 do
+ assert_select "a[href='#{user_path revoked_block.user}']", :text => revoked_block.user.display_name
+ assert_select "a[href='#{user_path revoked_block.creator}']", :text => revoked_block.creator.display_name
+ assert_select "a[href='#{user_path revoked_block.revoker}']", :text => revoked_block.revoker.display_name
+ end
+
active_block = create(:user_block)
expired_block = create(:user_block, :expired)
- revoked_block = create(:user_block, :revoked)
get user_blocks_path
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", 4
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", 3
assert_select "a[href='#{user_block_path(active_block)}']", 1
assert_select "a[href='#{user_block_path(expired_block)}']", 1
assert_select "a[href='#{user_block_path(revoked_block)}']", 1
get user_blocks_path
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", :count => 21
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", :count => 20
end
get user_blocks_path(:page => 2)
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", :count => 21
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", :count => 20
end
end
# Viewing an expired block should work
get user_block_path(:id => expired_block)
assert_response :success
+ assert_select "h1 a[href='#{user_path expired_block.user}']", :text => expired_block.user.display_name
+ assert_select "h1 a[href='#{user_path expired_block.creator}']", :text => expired_block.creator.display_name
# Viewing a revoked block should work
get user_block_path(:id => revoked_block)
assert_response :success
+ assert_select "h1 a[href='#{user_path revoked_block.user}']", :text => revoked_block.user.display_name
+ assert_select "h1 a[href='#{user_path revoked_block.creator}']", :text => revoked_block.creator.display_name
+ assert_select "a[href='#{user_path revoked_block.revoker}']", :text => revoked_block.revoker.display_name
# Viewing an active block should work, but shouldn't mark it as seen
get user_block_path(:id => active_block)
assert_response :success
+ assert_select "h1 a[href='#{user_path active_block.user}']", :text => active_block.user.display_name
+ assert_select "h1 a[href='#{user_path active_block.creator}']", :text => active_block.creator.display_name
assert UserBlock.find(active_block.id).needs_view
# Login as the blocked user
target_user = create(:user)
# Check that the block creation page requires us to login
- get new_user_block_path(:display_name => target_user.display_name)
- assert_redirected_to login_path(:referer => new_user_block_path(:display_name => target_user.display_name))
+ get new_user_block_path(target_user)
+ assert_redirected_to login_path(:referer => new_user_block_path(target_user))
# Login as a normal user
session_for(create(:user))
# Check that normal users can't load the block creation page
- get new_user_block_path(:display_name => target_user.display_name)
+ get new_user_block_path(target_user)
assert_redirected_to :controller => "errors", :action => "forbidden"
# Login as a moderator
session_for(create(:moderator_user))
# Check that the block creation page loads for moderators
- get new_user_block_path(:display_name => target_user.display_name)
+ get new_user_block_path(target_user)
assert_response :success
+ assert_select "h1 a[href='#{user_path target_user}']", :text => target_user.display_name
assert_select "form#new_user_block", :count => 1 do
assert_select "textarea#user_block_reason", :count => 1
assert_select "select#user_block_period", :count => 1
# Check that the block edit page loads for moderators
get edit_user_block_path(:id => active_block)
assert_response :success
+ assert_select "h1 a[href='#{user_path active_block.user}']", :text => active_block.user.display_name
assert_select "form#edit_user_block_#{active_block.id}", :count => 1 do
assert_select "textarea#user_block_reason", :count => 1
assert_select "select#user_block_period", :count => 1
post user_blocks_path(:display_name => target_user.display_name,
:user_block_period => "99")
end
- assert_redirected_to new_user_block_path(:display_name => target_user.display_name)
+ assert_redirected_to new_user_block_path(target_user)
assert_equal "The blocking period must be one of the values selectable in the drop-down list.", flash[:error]
# Check that creating a block works
get revoke_user_block_path(:id => active_block)
assert_response :success
assert_template "revoke"
+ assert_select "h1 a[href='#{user_path active_block.user}']", :text => active_block.user.display_name
assert_select "form", :count => 1 do
assert_select "input#confirm[type='checkbox']", :count => 1
assert_select "input[type='submit'][value='Revoke!']", :count => 1
create(:user_block, :user => blocked_user)
# Asking for the revoke all blocks page with a bogus user name should fail
- get user_blocks_on_path(:display_name => "non_existent_user")
+ get user_blocks_on_path("non_existent_user")
assert_response :not_found
# Check that the revoke all blocks page requires us to login
# Check that the revoke all blocks page loads for moderators
get revoke_all_user_blocks_path(blocked_user)
assert_response :success
+ assert_select "h1 a[href='#{user_path blocked_user}']", :text => blocked_user.display_name
end
##
expired_block = create(:user_block, :expired, :user => unblocked_user)
# Asking for a list of blocks with a bogus user name should fail
- get user_blocks_on_path(:display_name => "non_existent_user")
+ get user_blocks_on_path("non_existent_user")
assert_response :not_found
assert_template "users/no_such_user"
assert_select "h1", "The user non_existent_user does not exist"
# Check the list of blocks for a user that has never been blocked
- get user_blocks_on_path(:display_name => normal_user.display_name)
+ get user_blocks_on_path(normal_user)
assert_response :success
assert_select "table#block_list", false
assert_select "p", "#{normal_user.display_name} has not been blocked yet."
# Check the list of blocks for a user that is currently blocked
- get user_blocks_on_path(:display_name => blocked_user.display_name)
+ get user_blocks_on_path(blocked_user)
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", 3
+ assert_select "h1 a[href='#{user_path blocked_user}']", :text => blocked_user.display_name
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", 2
assert_select "a[href='#{user_block_path(active_block)}']", 1
assert_select "a[href='#{user_block_path(revoked_block)}']", 1
end
# Check the list of blocks for a user that has previously been blocked
- get user_blocks_on_path(:display_name => unblocked_user.display_name)
+ get user_blocks_on_path(unblocked_user)
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", 2
+ assert_select "h1 a[href='#{user_path unblocked_user}']", :text => unblocked_user.display_name
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", 1
assert_select "a[href='#{user_block_path(expired_block)}']", 1
end
end
user = create(:user)
create_list(:user_block, 50, :user => user)
- get user_blocks_on_path(:display_name => user.display_name)
+ get user_blocks_on_path(user)
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", :count => 21
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", :count => 20
end
- get user_blocks_on_path(:display_name => user.display_name, :page => 2)
+ get user_blocks_on_path(user, :page => 2)
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", :count => 21
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", :count => 20
end
end
revoked_block = create(:user_block, :revoked, :creator => second_moderator_user)
# Asking for a list of blocks with a bogus user name should fail
- get user_blocks_by_path(:display_name => "non_existent_user")
+ get user_blocks_by_path("non_existent_user")
assert_response :not_found
assert_template "users/no_such_user"
assert_select "h1", "The user non_existent_user does not exist"
# Check the list of blocks given by one moderator
- get user_blocks_by_path(:display_name => moderator_user.display_name)
+ get user_blocks_by_path(moderator_user)
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", 2
+ assert_select "h1 a[href='#{user_path moderator_user}']", :text => moderator_user.display_name
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", 1
assert_select "a[href='#{user_block_path(active_block)}']", 1
end
# Check the list of blocks given by a different moderator
- get user_blocks_by_path(:display_name => second_moderator_user.display_name)
+ get user_blocks_by_path(second_moderator_user)
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", 3
+ assert_select "h1 a[href='#{user_path second_moderator_user}']", :text => second_moderator_user.display_name
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", 2
assert_select "a[href='#{user_block_path(expired_block)}']", 1
assert_select "a[href='#{user_block_path(revoked_block)}']", 1
end
# Check the list of blocks (not) given by a normal user
- get user_blocks_by_path(:display_name => normal_user.display_name)
+ get user_blocks_by_path(normal_user)
assert_response :success
assert_select "table#block_list", false
assert_select "p", "#{normal_user.display_name} has not made any blocks yet."
user = create(:moderator_user)
create_list(:user_block, 50, :creator => user)
- get user_blocks_by_path(:display_name => user.display_name)
+ get user_blocks_by_path(user)
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", :count => 21
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", :count => 20
end
- get user_blocks_by_path(:display_name => user.display_name, :page => 2)
+ get user_blocks_by_path(user, :page => 2)
assert_response :success
- assert_select "table#block_list", :count => 1 do
- assert_select "tr", :count => 21
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", :count => 20
end
end
end
super_user = create(:super_user)
# Granting should fail when not logged in
- post grant_role_path(:display_name => target_user.display_name, :role => "moderator")
+ post grant_role_path(target_user, "moderator")
assert_response :forbidden
# Login as an unprivileged user
session_for(normal_user)
# Granting should still fail
- post grant_role_path(:display_name => target_user.display_name, :role => "moderator")
+ post grant_role_path(target_user, "moderator")
assert_redirected_to :controller => :errors, :action => :forbidden
# Login as an administrator
UserRole::ALL_ROLES.each do |role|
# Granting a role to a non-existent user should fail
assert_difference "UserRole.count", 0 do
- post grant_role_path(:display_name => "non_existent_user", :role => role)
+ post grant_role_path("non_existent_user", role)
end
assert_response :not_found
assert_template "users/no_such_user"
# Granting a role to a user that already has it should fail
assert_no_difference "UserRole.count" do
- post grant_role_path(:display_name => super_user.display_name, :role => role)
+ post grant_role_path(super_user, role)
end
assert_redirected_to user_path(super_user)
assert_equal "The user already has role #{role}.", flash[:error]
# Granting a role to a user that doesn't have it should work...
assert_difference "UserRole.count", 1 do
- post grant_role_path(:display_name => target_user.display_name, :role => role)
+ post grant_role_path(target_user, role)
end
assert_redirected_to user_path(target_user)
# ...but trying a second time should fail
assert_no_difference "UserRole.count" do
- post grant_role_path(:display_name => target_user.display_name, :role => role)
+ post grant_role_path(target_user, role)
end
assert_redirected_to user_path(target_user)
assert_equal "The user already has role #{role}.", flash[:error]
# Granting a non-existent role should fail
assert_difference "UserRole.count", 0 do
- post grant_role_path(:display_name => target_user.display_name, :role => "no_such_role")
+ post grant_role_path(target_user, "no_such_role")
end
assert_redirected_to user_path(target_user)
assert_equal "The string `no_such_role' is not a valid role.", flash[:error]
super_user = create(:super_user)
# Revoking should fail when not logged in
- post revoke_role_path(:display_name => target_user.display_name, :role => "moderator")
+ post revoke_role_path(target_user, "moderator")
assert_response :forbidden
# Login as an unprivileged user
session_for(normal_user)
# Revoking should still fail
- post revoke_role_path(:display_name => target_user.display_name, :role => "moderator")
+ post revoke_role_path(target_user, "moderator")
assert_redirected_to :controller => :errors, :action => :forbidden
# Login as an administrator
UserRole::ALL_ROLES.each do |role|
# Removing a role from a non-existent user should fail
assert_difference "UserRole.count", 0 do
- post revoke_role_path(:display_name => "non_existent_user", :role => role)
+ post revoke_role_path("non_existent_user", role)
end
assert_response :not_found
assert_template "users/no_such_user"
# Removing a role from a user that doesn't have it should fail
assert_no_difference "UserRole.count" do
- post revoke_role_path(:display_name => target_user.display_name, :role => role)
+ post revoke_role_path(target_user, role)
end
assert_redirected_to user_path(target_user)
assert_equal "The user does not have role #{role}.", flash[:error]
# Removing a role from a user that has it should work...
assert_difference "UserRole.count", -1 do
- post revoke_role_path(:display_name => super_user.display_name, :role => role)
+ post revoke_role_path(super_user, role)
end
assert_redirected_to user_path(super_user)
# ...but trying a second time should fail
assert_no_difference "UserRole.count" do
- post revoke_role_path(:display_name => super_user.display_name, :role => role)
+ post revoke_role_path(super_user, role)
end
assert_redirected_to user_path(super_user)
assert_equal "The user does not have role #{role}.", flash[:error]
# Revoking a non-existent role should fail
assert_difference "UserRole.count", 0 do
- post revoke_role_path(:display_name => target_user.display_name, :role => "no_such_role")
+ post revoke_role_path(target_user, "no_such_role")
end
assert_redirected_to user_path(target_user)
assert_equal "The string `no_such_role' is not a valid role.", flash[:error]
# Revoking administrator role from current user should fail
- post revoke_role_path(:display_name => administrator_user.display_name, :role => "administrator")
+ post revoke_role_path(administrator_user, "administrator")
assert_redirected_to user_path(administrator_user)
assert_equal "Cannot revoke administrator role from current user.", flash[:error]
end
# information for the user
def test_show
# Test a non-existent user
- get user_path(:display_name => "unknown")
+ get user_path("unknown")
assert_response :not_found
# Test a normal user
get users_path
assert_response :success
assert_template :index
- assert_select "table#user_list tr", :count => 7 + 1
+ assert_select "table#user_list tbody tr", :count => 7
# Should be able to limit by status
get users_path, :params => { :status => "suspended" }
assert_response :success
assert_template :index
- assert_select "table#user_list tr", :count => 1 + 1
+ assert_select "table#user_list tbody tr", :count => 1
# Should be able to limit by IP address
get users_path, :params => { :ip => "1.2.3.4" }
assert_response :success
assert_template :index
- assert_select "table#user_list tr", :count => 1 + 1
+ assert_select "table#user_list tbody tr", :count => 1
end
def test_index_get_paginated
get users_path
assert_response :success
assert_template :index
- assert_select "table#user_list tr", :count => 51
+ assert_select "table#user_list tbody tr", :count => 50
get users_path, :params => { :page => 2 }
assert_response :success
assert_template :index
- assert_select "table#user_list tr", :count => 51
+ assert_select "table#user_list tbody tr", :count => 50
get users_path, :params => { :page => 3 }
assert_response :success
assert_template :index
- assert_select "table#user_list tr", :count => 3
+ assert_select "table#user_list tbody tr", :count => 2
end
def test_index_post_confirm
--- /dev/null
+require "test_helper"
+
+class WaysControllerTest < ActionDispatch::IntegrationTest
+ ##
+ # test all routes which lead to this controller
+ def test_routes
+ assert_routing(
+ { :path => "/way/1", :method => :get },
+ { :controller => "ways", :action => "show", :id => "1" }
+ )
+ end
+
+ def test_show
+ way = create(:way)
+ sidebar_browse_check :way_path, way.id, "browse/feature"
+ assert_select "h4", /^Version/ do
+ assert_select "a[href='#{old_way_path way, 1}']", :text => "1", :count => 1
+ end
+ assert_select ".secondary-actions a[href='#{api_way_path way}']", :count => 1
+ assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
+ assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 0
+ end
+
+ def test_show_multiple_versions
+ way = create(:way, :with_history, :version => 2)
+ sidebar_browse_check :way_path, way.id, "browse/feature"
+ assert_select ".secondary-actions a[href='#{way_history_path way}']", :count => 1
+ assert_select ".secondary-actions a[href='#{old_way_path way, 1}']", :count => 1
+ assert_select ".secondary-actions a[href='#{old_way_path way, 2}']", :count => 1
+ end
+
+ def test_show_relation_member
+ member = create(:way)
+ relation = create(:relation)
+ create(:relation_member, :relation => relation, :member => member)
+ sidebar_browse_check :way_path, member.id, "browse/feature"
+ assert_select "a[href='#{relation_path relation}']", :count => 1
+ end
+end
def test_auth_button
button = auth_button("google", "google")
- assert_equal("<a class=\"auth_button\" title=\"Login with Google\" rel=\"nofollow\" data-method=\"post\" href=\"/auth/google\"><img alt=\"Login with a Google OpenID\" class=\"rounded-3\" src=\"/images/google.svg\" /></a>", button)
+ img_tag = "<img alt=\"Log in with a Google OpenID\" class=\"rounded-3\" src=\"/images/google.svg\" width=\"36\" height=\"36\" />"
+ assert_equal("<a class=\"auth_button\" title=\"Log in with Google\" rel=\"nofollow\" data-method=\"post\" href=\"/auth/google\">#{img_tag}</a>", button)
end
private
assert_select body, "a[href^='#{url}']"
assert_select body, "a[href='#{unsubscribe_url}']", :count => 1
end
+
+ def test_changeset_comment_notification
+ create(:language, :code => "en")
+ user = create(:user)
+ other_user = create(:user)
+ changeset = create(:changeset, :user => user)
+ changeset_comment = create(:changeset_comment, :changeset => changeset)
+ email = UserMailer.changeset_comment_notification(changeset_comment, other_user)
+ body = Rails::Dom::Testing.html_document_fragment.parse(email.html_part.body)
+
+ url = Rails.application.routes.url_helpers.changeset_url(changeset, :host => Settings.server_url, :protocol => Settings.server_protocol)
+ unsubscribe_url = Rails.application.routes.url_helpers.unsubscribe_changeset_url(changeset, :host => Settings.server_url, :protocol => Settings.server_protocol)
+ assert_select body, "a[href^='#{url}']"
+ assert_select body, "a[href='#{unsubscribe_url}']", :count => 1
+ end
end