Skip to content

Commit 5a78405

Browse files
committed
Write browse element icons as <img>
1 parent 0deacc1 commit 5a78405

File tree

12 files changed

+279
-318
lines changed

12 files changed

+279
-318
lines changed

app/assets/stylesheets/browse.scss

-180
This file was deleted.

app/assets/stylesheets/common.scss

+5-29
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
@use "sass:map";
22
@import "parameters";
3-
@import "browse";
43
@import "bootstrap";
54
@import "rails_bootstrap_forms";
65

@@ -961,35 +960,12 @@ img.trace_image {
961960

962961
/* Rules for map sidebar icons */
963962

964-
.browse-section {
965-
.node::before,
966-
.way::before,
967-
.relation::before {
968-
position: absolute;
969-
display: inline-block;
970-
width: 25px;
971-
margin-left: -25px;
972-
}
973-
974-
.node, .way, .relation {
975-
margin-left: 25px;
976-
}
963+
.browse-section .browse-element-list {
964+
line-height: 20px;
977965

978-
.node::before { content: image-url('browse/node.svg'); }
979-
.way::before { content: image-url('browse/way.svg'); }
980-
.relation::before { content: image-url('browse/relation.svg'); }
981-
}
982-
983-
@each $class, $item in $map-sidebar-icons {
984-
.browse-section #{$class}::before {
985-
content: image-url('browse/#{map.get($item, "filename")}');
986-
}
987-
988-
@if map.get($item, "invert") {
989-
@include color-mode(dark) {
990-
.browse-section #{$class}::before {
991-
filter: invert(.8) hue-rotate(180deg);
992-
}
966+
@include color-mode(dark) {
967+
img.invert-in-dark-mode {
968+
filter: invert(.8) hue-rotate(180deg);
993969
}
994970
}
995971
}

app/helpers/browse_helper.rb

+29-33
Original file line numberDiff line numberDiff line change
@@ -29,25 +29,45 @@ def group_way_nodes(way)
2929
groups
3030
end
3131

32-
def element_single_current_link(type, object)
33-
link_to object, { :class => element_class(type, object), :title => element_title(object), :rel => (link_follow(object) if type == "node") } do
34-
element_strikethrough object do
35-
printable_element_name object
32+
def element_icon(type, object)
33+
icon_data = { :filename => "#{type}.svg" }
34+
35+
unless object.redacted?
36+
target_tags = object.tags.find_all { |k, _v| BROWSE_ICONS.key? k.to_sym }.sort
37+
title = target_tags.map { |k, v| "#{k}=#{v}" }.to_sentence unless target_tags.empty?
38+
39+
target_tags.each do |k, v|
40+
k = k.to_sym
41+
v = v.to_sym
42+
if v != :* && BROWSE_ICONS[k].key?(v)
43+
icon_data = BROWSE_ICONS[k][v]
44+
elsif BROWSE_ICONS[k].key?(:*)
45+
icon_data = BROWSE_ICONS[k][:*]
46+
end
3647
end
3748
end
49+
50+
image_tag "browse/#{icon_data[:filename]}",
51+
:size => 20,
52+
:class => ["object-fit-none", { "invert-in-dark-mode" => icon_data[:invert] }],
53+
:title => title
3854
end
3955

40-
def element_single_current_link_without_icon(type, object)
41-
link_to object, { :title => element_title(object), :rel => (link_follow(object) if type == "node") } do
56+
def element_single_current_link(type, object)
57+
link_to object, { :rel => (link_follow(object) if type == "node") } do
4258
element_strikethrough object do
4359
printable_element_name object
4460
end
4561
end
4662
end
4763

48-
def element_list_item(type, object, &block)
49-
tag.li :class => element_class(type, object), :title => element_title(object) do
50-
element_strikethrough object, &block
64+
def element_list_item(type, object, &)
65+
tag.li(tag.div(element_icon(type, object) + tag.div(&), :class => "d-flex gap-1"))
66+
end
67+
68+
def element_list_item_with_strikethrough(type, object, &)
69+
element_list_item type, object do
70+
element_strikethrough object, &
5171
end
5272
end
5373

@@ -90,20 +110,6 @@ def element_strikethrough(object, &)
90110
end
91111
end
92112

93-
def element_class(type, object)
94-
classes = [type]
95-
classes += icon_tags(object).flatten.map { |t| h(t) } unless object.redacted?
96-
classes.join(" ")
97-
end
98-
99-
def element_title(object)
100-
if object.redacted?
101-
""
102-
else
103-
h(icon_tags(object).map { |k, v| "#{k}=#{v}" }.to_sentence)
104-
end
105-
end
106-
107113
def link_follow(object)
108114
"nofollow" if object.tags.empty?
109115
end
@@ -145,20 +151,10 @@ def sidebar_classic_pagination(pages, page_param)
145151

146152
private
147153

148-
ICON_TAGS = %w[aeroway amenity barrier building highway historic landuse leisure man_made natural office railway shop tourism waterway].freeze
149-
150-
def icon_tags(object)
151-
object.tags.find_all { |k, _v| ICON_TAGS.include? k }.sort
152-
end
153-
154154
def name_locales(object)
155155
object.tags.keys.map { |k| Regexp.last_match(1) if k =~ /^name:(.*)$/ }.flatten
156156
end
157157

158-
def same_related_ways(wn1, wn2)
159-
wn1.node.ways.uniq.sort == wn2.node.ways.uniq.sort
160-
end
161-
162158
def related_ways_of_way_node(way_node)
163159
way_node.node.ways.uniq.sort.reject { |related_way| related_way.id == way_node.way_id }
164160
end
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
<li><%= linked_name = link_to printable_element_name(containing_relation.relation), containing_relation.relation
2-
if containing_relation.member_role.blank?
3-
t ".entry_html", :relation_name => linked_name
4-
else
5-
t ".entry_role_html", :relation_name => linked_name, :relation_role => containing_relation.member_role
6-
end %>
7-
</li>
1+
<%= element_list_item "relation", containing_relation.relation do %>
2+
<%= linked_name = link_to printable_element_name(containing_relation.relation), containing_relation.relation
3+
if containing_relation.member_role.blank?
4+
t ".entry_html", :relation_name => linked_name
5+
else
6+
t ".entry_role_html", :relation_name => linked_name, :relation_role => containing_relation.member_role
7+
end %>
8+
<% end %>

app/views/browse/_node.html.erb

+5-3
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,19 @@
1515
<% unless node.ways.empty? %>
1616
<details <%= "open" if node.ways.count < 10 %>>
1717
<summary><%= t "browse.part_of_ways", :count => node.ways.uniq.count %></summary>
18-
<ul class="list-unstyled">
18+
<ul class="list-unstyled browse-element-list">
1919
<% node.ways.uniq.each do |way| %>
20-
<li><%= element_single_current_link "way", way %></li>
20+
<%= element_list_item "way", way do %>
21+
<%= element_single_current_link "way", way %>
22+
<% end %>
2123
<% end %>
2224
</ul>
2325
</details>
2426
<% end %>
2527
<% unless node.containing_relation_members.empty? %>
2628
<details <%= "open" if node.containing_relation_members.count < 10 %>>
2729
<summary><%= t "browse.part_of_relations", :count => node.containing_relation_members.uniq.count %></summary>
28-
<ul class="list-unstyled">
30+
<ul class="list-unstyled browse-element-list">
2931
<%= render :partial => "browse/containing_relation", :collection => node.containing_relation_members.uniq %>
3032
</ul>
3133
</details>

app/views/browse/_relation.html.erb

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<h4><%= t "browse.part_of" %></h4>
1515
<details <%= "open" if relation.containing_relation_members.count < 10 %>>
1616
<summary><%= t "browse.part_of_relations", :count => relation.containing_relation_members.uniq.count %></summary>
17-
<ul class="list-unstyled">
17+
<ul class="list-unstyled browse-element-list">
1818
<%= render :partial => "browse/containing_relation", :collection => relation.containing_relation_members.uniq %>
1919
</ul>
2020
</details>
@@ -24,7 +24,7 @@
2424
<h4><%= t ".members" %></h4>
2525
<details <%= "open" if relation.relation_members.count < 10 %>>
2626
<summary><%= t ".members_count", :count => relation.relation_members.count %></summary>
27-
<ul class="list-unstyled">
27+
<ul class="list-unstyled browse-element-list">
2828
<%= render :partial => "browse/relation_member", :collection => relation.relation_members %>
2929
</ul>
3030
</details>

app/views/browse/_relation_member.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<% linked_name = link_to printable_element_name(relation_member.member), relation_member.member, { :rel => link_follow(relation_member.member) }
22
type_str = t ".type.#{relation_member.member_type.downcase}" %>
3-
<%= element_list_item relation_member.member_type.downcase, relation_member.member do %>
3+
<%= element_list_item_with_strikethrough relation_member.member_type.downcase, relation_member.member do %>
44
<%= if relation_member.member_role.blank?
55
t ".entry_html", :type => type_str, :name => linked_name
66
else

0 commit comments

Comments
 (0)