autoprefixer-rails (10.4.16.0)
execjs (~> 2)
aws-eventstream (1.3.0)
- aws-partitions (1.889.0)
- aws-sdk-core (3.191.1)
+ aws-partitions (1.894.0)
+ aws-sdk-core (3.191.2)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
+ base64
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.77.0)
aws-sdk-core (~> 3, >= 3.191.0)
activerecord (>= 3.0, < 8.0)
delayed_job (>= 3.0, < 5)
docile (1.4.0)
- doorkeeper (5.6.8)
+ doorkeeper (5.6.9)
railties (>= 5)
doorkeeper-i18n (5.2.7)
doorkeeper (>= 5.2)
ffi-libarchive (1.1.14)
ffi (~> 1.0)
file_exists (0.2.0)
- frozen_record (0.27.0)
+ frozen_record (0.27.1)
activemodel
fspath (3.1.2)
gd2-ffij (0.4.0)
ffi (>= 1.0.0)
globalid (1.2.1)
activesupport (>= 6.1)
- google-protobuf (3.25.2)
+ google-protobuf (3.25.3)
hashdiff (1.1.0)
hashie (5.0.0)
highline (3.0.1)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
json (2.7.1)
- jwt (2.7.1)
+ jwt (2.8.0)
+ base64
kgio (2.11.4)
kramdown (2.4.0)
rexml
parser (3.3.0.5)
ast (~> 2.4.1)
racc
- pg (1.5.4)
+ pg (1.5.5)
popper_js (2.11.8)
progress (3.6.0)
psych (5.1.2)
google-protobuf (~> 3.23)
rake (>= 13.0.0)
secure_headers (6.5.0)
- selenium-webdriver (4.17.0)
+ selenium-webdriver (4.18.1)
base64 (~> 0.2)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
i18n
vendorer (0.2.0)
version_gem (1.1.3)
- webmock (3.20.0)
+ webmock (3.21.2)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
margin-left: 25px;
}
- /* Deleted objects */
-
- .deleted { text-decoration: line-through; }
-
/* Nodes (and ways as areas) */
.aeroway.aerodrome::before { content: image-url('browse/aerodrome.p.16.png'); }
module BrowseHelper
- def printable_name(object, version: false)
+ 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
+ element_strikethrough object do
+ printable_element_name object
+ end
+ end
+ end
+
+ def element_list_item(type, object, &block)
+ tag.li :class => element_class(type, object), :title => element_title(object) do
+ element_strikethrough object, &block
+ end
+ end
+
+ def printable_element_name(object)
id = if object.id.is_a?(Array)
object.id[0]
else
object.id
end
- name = t "printable_name.with_id", :id => id.to_s
- name = t "printable_name.with_version", :id => name, :version => object.version.to_s if version
+ name = id.to_s
# don't look at object tags if redacted, so as to avoid giving
# away redacted version tag information.
name
end
- def link_class(type, object)
- classes = [type]
+ def printable_element_version(object)
+ t "printable_name.version", :version => object.version
+ end
- if object.redacted?
- classes << "deleted"
+ def element_strikethrough(object, &block)
+ if object.redacted? || !object.visible?
+ tag.s(&block)
else
- classes += icon_tags(object).flatten.map { |t| h(t) }
- classes << "deleted" unless object.visible?
+ yield
end
+ end
+ def element_class(type, object)
+ classes = [type]
+ classes += icon_tags(object).flatten.map { |t| h(t) } unless object.redacted?
classes.join(" ")
end
- def link_title(object)
+ def element_title(object)
if object.redacted?
""
else
-<li><%= linked_name = link_to printable_name(containing_relation.relation), :action => "relation", :id => containing_relation.relation.id.to_s
+<li><%= linked_name = link_to printable_element_name(containing_relation.relation), :action => "relation", :id => containing_relation.relation.id.to_s
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><%= link_to printable_name(way), way_path(way), { :class => link_class("way", way), :title => link_title(way) } %></li>
+ <li><%= element_single_current_link "way", way, way_path(way) %></li>
<% end %>
</ul>
</details>
-<% member_class = link_class(relation_member.member_type.downcase, relation_member.member)
- linked_name = link_to printable_name(relation_member.member), { :controller => :browse, :action => relation_member.member_type.downcase, :id => relation_member.member_id.to_s }, { :title => link_title(relation_member.member), :rel => link_follow(relation_member.member) }
+<% 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) }
type_str = t ".type.#{relation_member.member_type.downcase}" %>
-<li class="<%= member_class %>">
+<%= element_list_item relation_member.member_type.downcase, relation_member.member do %>
<%= if relation_member.member_role.blank?
t ".entry_html", :type => type_str, :name => linked_name
else
t ".entry_role_html", :type => type_str, :name => linked_name, :role => relation_member.member_role
end %>
-</li>
+<% end %>
<ul class="list-unstyled">
<% way.way_nodes.each do |wn| %>
<li>
- <%= link_to printable_name(wn.node), node_path(wn.node), { :class => link_class("node", wn.node), :title => link_title(wn.node), :rel => link_follow(wn.node) } %>
+ <%= element_single_current_link "node", wn.node, node_path(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| link_to(printable_name(w), way_path(w), { :class => link_class("way", w), :title => link_title(w) }) }) %>)
+ (<%= 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) }) %>)
<% end %>
</li>
<% end %>
<%= render :partial => "paging_nav", :locals => { :heading => type_and_paginated_count("way", @way_pages), :pages => @way_pages, :page_param => "way_page" } %>
<ul class="list-unstyled">
<% @ways.each do |way| %>
- <li><%= link_to printable_name(way, :version => true), { :action => "way", :id => way.way_id.to_s }, { :class => link_class("way", way), :title => link_title(way) } %></li>
+ <%= element_list_item "way", way do %>
+ <%= t "printable_name.current_and_old_links_html",
+ :current_link => link_to(printable_element_name(way), way_path(way.way_id)),
+ :old_link => link_to(printable_element_version(way), old_way_path(way.way_id, way.version)) %>
+ <% end %>
<% end %>
</ul>
<% end %>
<%= render :partial => "paging_nav", :locals => { :heading => type_and_paginated_count("relation", @relation_pages), :pages => @relation_pages, :page_param => "relation_page" } %>
<ul class="list-unstyled">
<% @relations.each do |relation| %>
- <li><%= link_to printable_name(relation, :version => true), { :action => "relation", :id => relation.relation_id.to_s }, { :class => link_class("relation", relation), :title => link_title(relation) } %></li>
+ <%= element_list_item "relation", relation do %>
+ <%= t "printable_name.current_and_old_links_html",
+ :current_link => link_to(printable_element_name(relation), relation_path(relation.relation_id)),
+ :old_link => link_to(printable_element_version(relation), old_relation_path(relation.relation_id, relation.version)) %>
+ <% end %>
<% end %>
</ul>
<% end %>
<%= render :partial => "paging_nav", :locals => { :heading => type_and_paginated_count("node", @node_pages), :pages => @node_pages, :page_param => "node_page" } %>
<ul class="list-unstyled">
<% @nodes.each do |node| %>
- <li><%= link_to printable_name(node, :version => true), { :action => "node", :id => node.node_id.to_s }, { :class => link_class("node", node), :title => link_title(node), :rel => link_follow(node) } %></li>
+ <%= element_list_item "node", node do %>
+ <%= t "printable_name.current_and_old_links_html",
+ :current_link => link_to(printable_element_name(node), node_path(node.node_id), { :rel => link_follow(node) }),
+ :old_link => link_to(printable_element_version(node), old_node_path(node.node_id, node.version), { :rel => link_follow(node) }) %>
+ <% end %>
<% end %>
</ul>
<% end %>
-<% set_title(t("browse.#{@type}.title_html", :name => printable_name(@feature))) %>
+<% set_title(t("browse.#{@type}.title_html", :name => printable_element_name(@feature))) %>
-<%= render "sidebar_header", :title => t("browse.#{@type}.title_html", :name => printable_name(@feature)) %>
+<%= render "sidebar_header", :title => t("browse.#{@type}.title_html", :name => printable_element_name(@feature)) %>
<%= render :partial => @type, :object => @feature %>
-<% set_title(t("browse.#{@type}.history_title_html", :name => printable_name(@feature))) %>
+<% set_title(t("browse.#{@type}.history_title_html", :name => printable_element_name(@feature))) %>
-<%= render "sidebar_header", :title => t("browse.#{@type}.history_title_html", :name => printable_name(@feature)) %>
+<%= 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 %>
-<% set_title t("browse.node.title_html", :name => printable_name(@feature)) %>
+<% set_title t("browse.node.title_html", :name => printable_element_name(@feature)) %>
-<%= render "sidebar_header", :title => t("browse.node.title_html", :name => printable_name(@feature)) %>
+<%= render "sidebar_header", :title => t("browse.node.title_html", :name => printable_element_name(@feature)) %>
<%= render :partial => "browse/node", :object => @feature %>
-<% set_title t("browse.relation.title_html", :name => printable_name(@feature)) %>
+<% set_title t("browse.relation.title_html", :name => printable_element_name(@feature)) %>
-<%= render "sidebar_header", :title => t("browse.relation.title_html", :name => printable_name(@feature)) %>
+<%= render "sidebar_header", :title => t("browse.relation.title_html", :name => printable_element_name(@feature)) %>
<%= render :partial => "browse/relation", :object => @feature %>
-<% set_title t("browse.way.title_html", :name => printable_name(@feature)) %>
+<% set_title t("browse.way.title_html", :name => printable_element_name(@feature)) %>
-<%= render "sidebar_header", :title => t("browse.way.title_html", :name => printable_name(@feature)) %>
+<%= render "sidebar_header", :title => t("browse.way.title_html", :name => printable_element_name(@feature)) %>
<%= render :partial => "browse/way", :object => @feature %>
one: "%{count} year ago"
other: "%{count} years ago"
printable_name:
- with_id: "%{id}"
- with_version: "%{id}, v%{version}"
+ version: "v%{version}"
with_name_html: "%{name} (%{id})"
+ current_and_old_links_html: "%{current_link}, %{old_link}"
editor:
default: "Default (currently %{name})"
id:
assert_select "div.changeset-comments ul li", :count => 4
end
+ def test_read_changeset_element_links
+ changeset = create(:changeset)
+ node = create(:node, :with_history, :changeset => changeset)
+
+ browse_check :changeset_path, changeset.id, "browse/changeset"
+ assert_dom "a[href='#{node_path node}']", :count => 1
+ assert_dom "a[href='#{old_node_path node, 1}']", :count => 1
+ end
+
##
# Methods to check redaction.
#
include ERB::Util
include ApplicationHelper
- def test_printable_name
+ def test_printable_element_name
node = create(:node, :with_history, :version => 2)
node_v1 = node.old_nodes.find_by(:version => 1)
node_v2 = node.old_nodes.find_by(:version => 2)
deleted_node = create(:node, :deleted)
- assert_dom_equal deleted_node.id.to_s, printable_name(deleted_node)
- assert_dom_equal "<bdi>Test Node</bdi> (<bdi>#{node.id}</bdi>)", printable_name(node)
- assert_dom_equal "<bdi>Test Node</bdi> (<bdi>#{node.id}</bdi>)", printable_name(node_v2)
- assert_dom_equal node.id.to_s, printable_name(node_v1)
- assert_dom_equal "<bdi>Test Node</bdi> (<bdi>#{node.id}, v2</bdi>)", printable_name(node_v2, :version => true)
- assert_dom_equal "#{node.id}, v1", printable_name(node_v1, :version => true)
- assert_dom_equal "<bdi>3.1415926</bdi> (<bdi>#{node_with_ref_without_name.id}</bdi>)", printable_name(node_with_ref_without_name)
+ assert_dom_equal deleted_node.id.to_s, printable_element_name(deleted_node)
+ assert_dom_equal "<bdi>Test Node</bdi> (<bdi>#{node.id}</bdi>)", printable_element_name(node)
+ assert_dom_equal "<bdi>Test Node</bdi> (<bdi>#{node.id}</bdi>)", printable_element_name(node_v2)
+ assert_dom_equal node.id.to_s, printable_element_name(node_v1)
+ assert_dom_equal "<bdi>3.1415926</bdi> (<bdi>#{node_with_ref_without_name.id}</bdi>)", printable_element_name(node_with_ref_without_name)
I18n.with_locale "pt" do
- assert_dom_equal deleted_node.id.to_s, printable_name(deleted_node)
- assert_dom_equal "<bdi>Nó teste</bdi> (<bdi>#{node.id}</bdi>)", printable_name(node)
- assert_dom_equal "<bdi>Nó teste</bdi> (<bdi>#{node.id}</bdi>)", printable_name(node_v2)
- assert_dom_equal node.id.to_s, printable_name(node_v1)
- assert_dom_equal "<bdi>Nó teste</bdi> (<bdi>#{node.id}, v2</bdi>)", printable_name(node_v2, :version => true)
- assert_dom_equal "#{node.id}, v1", printable_name(node_v1, :version => true)
- assert_dom_equal "<bdi>3.1415926</bdi> (<bdi>#{node_with_ref_without_name.id}</bdi>)", printable_name(node_with_ref_without_name)
+ assert_dom_equal deleted_node.id.to_s, printable_element_name(deleted_node)
+ assert_dom_equal "<bdi>Nó teste</bdi> (<bdi>#{node.id}</bdi>)", printable_element_name(node)
+ assert_dom_equal "<bdi>Nó teste</bdi> (<bdi>#{node.id}</bdi>)", printable_element_name(node_v2)
+ assert_dom_equal node.id.to_s, printable_element_name(node_v1)
+ assert_dom_equal "<bdi>3.1415926</bdi> (<bdi>#{node_with_ref_without_name.id}</bdi>)", printable_element_name(node_with_ref_without_name)
end
I18n.with_locale "pt-BR" do
- assert_dom_equal deleted_node.id.to_s, printable_name(deleted_node)
- assert_dom_equal "<bdi>Nó teste</bdi> (<bdi>#{node.id}</bdi>)", printable_name(node)
- assert_dom_equal "<bdi>Nó teste</bdi> (<bdi>#{node.id}</bdi>)", printable_name(node_v2)
- assert_dom_equal node.id.to_s, printable_name(node_v1)
- assert_dom_equal "<bdi>Nó teste</bdi> (<bdi>#{node.id}, v2</bdi>)", printable_name(node_v2, :version => true)
- assert_dom_equal "#{node.id}, v1", printable_name(node_v1, :version => true)
- assert_dom_equal "<bdi>3.1415926</bdi> (<bdi>#{node_with_ref_without_name.id}</bdi>)", printable_name(node_with_ref_without_name)
+ assert_dom_equal deleted_node.id.to_s, printable_element_name(deleted_node)
+ assert_dom_equal "<bdi>Nó teste</bdi> (<bdi>#{node.id}</bdi>)", printable_element_name(node)
+ assert_dom_equal "<bdi>Nó teste</bdi> (<bdi>#{node.id}</bdi>)", printable_element_name(node_v2)
+ assert_dom_equal node.id.to_s, printable_element_name(node_v1)
+ assert_dom_equal "<bdi>3.1415926</bdi> (<bdi>#{node_with_ref_without_name.id}</bdi>)", printable_element_name(node_with_ref_without_name)
end
I18n.with_locale "de" do
- assert_dom_equal deleted_node.id.to_s, printable_name(deleted_node)
- assert_dom_equal "<bdi>Test Node</bdi> (<bdi>#{node.id}</bdi>)", printable_name(node)
- assert_dom_equal "<bdi>Test Node</bdi> (<bdi>#{node.id}</bdi>)", printable_name(node_v2)
- assert_dom_equal node.id.to_s, printable_name(node_v1)
- assert_dom_equal "<bdi>Test Node</bdi> (<bdi>#{node.id}, v2</bdi>)", printable_name(node_v2, :version => true)
- assert_dom_equal "#{node.id}, v1", printable_name(node_v1, :version => true)
- assert_dom_equal "<bdi>3.1415926</bdi> (<bdi>#{node_with_ref_without_name.id}</bdi>)", printable_name(node_with_ref_without_name)
+ assert_dom_equal deleted_node.id.to_s, printable_element_name(deleted_node)
+ assert_dom_equal "<bdi>Test Node</bdi> (<bdi>#{node.id}</bdi>)", printable_element_name(node)
+ assert_dom_equal "<bdi>Test Node</bdi> (<bdi>#{node.id}</bdi>)", printable_element_name(node_v2)
+ assert_dom_equal node.id.to_s, printable_element_name(node_v1)
+ assert_dom_equal "<bdi>3.1415926</bdi> (<bdi>#{node_with_ref_without_name.id}</bdi>)", printable_element_name(node_with_ref_without_name)
end
end
- def test_link_class
+ def test_element_strikethrough
+ node = create(:node, :with_history, :version => 2)
+ node_v1 = node.old_nodes.find_by(:version => 1)
+ node_v2 = node.old_nodes.find_by(:version => 2)
+ node_v1.redact!(create(:redaction))
+
+ normal_output = element_strikethrough(node_v2) { "test" }
+ assert_equal "test", normal_output
+
+ redacted_output = element_strikethrough(node_v1) { "test" }
+ assert_equal "<s>test</s>", redacted_output
+
+ deleted_output = element_strikethrough(create(:node, :deleted)) { "test" }
+ assert_equal "<s>test</s>", deleted_output
+ end
+
+ def test_element_class
node = create(:node, :with_history, :version => 2)
node_v1 = node.old_nodes.find_by(:version => 1)
node_v2 = node.old_nodes.find_by(:version => 2)
add_old_tags_selection(node_v2)
add_old_tags_selection(node_v1)
- assert_equal "node", link_class("node", create(:node))
- assert_equal "node deleted", link_class("node", create(:node, :deleted))
+ assert_equal "node", element_class("node", create(:node))
+ assert_equal "node", element_class("node", create(:node, :deleted))
- assert_equal "node building yes shop gift tourism museum", link_class("node", node)
- assert_equal "node building yes shop gift tourism museum", link_class("node", node_v2)
- assert_equal "node deleted", link_class("node", node_v1)
+ assert_equal "node building yes shop gift tourism museum", element_class("node", node)
+ assert_equal "node building yes shop gift tourism museum", element_class("node", node_v2)
+ assert_equal "node", element_class("node", node_v1)
end
- def test_link_title
+ def test_element_title
node = create(:node, :with_history, :version => 2)
node_v1 = node.old_nodes.find_by(:version => 1)
node_v2 = node.old_nodes.find_by(:version => 2)
add_old_tags_selection(node_v2)
add_old_tags_selection(node_v1)
- assert_equal "", link_title(create(:node))
- assert_equal "", link_title(create(:node, :deleted))
+ assert_equal "", element_title(create(:node))
+ assert_equal "", element_title(create(:node, :deleted))
- assert_equal "building=yes, shop=gift, and tourism=museum", link_title(node)
- assert_equal "building=yes, shop=gift, and tourism=museum", link_title(node_v2)
- assert_equal "", link_title(node_v1)
+ assert_equal "building=yes, shop=gift, and tourism=museum", element_title(node)
+ assert_equal "building=yes, shop=gift, and tourism=museum", element_title(node_v2)
+ assert_equal "", element_title(node_v1)
end
def test_icon_tags