@@ -29,25 +29,45 @@ def group_way_nodes(way)
29
29
groups
30
30
end
31
31
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
36
47
end
37
48
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
38
54
end
39
55
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
42
58
element_strikethrough object do
43
59
printable_element_name object
44
60
end
45
61
end
46
62
end
47
63
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 , &
51
71
end
52
72
end
53
73
@@ -90,20 +110,6 @@ def element_strikethrough(object, &)
90
110
end
91
111
end
92
112
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
-
107
113
def link_follow ( object )
108
114
"nofollow" if object . tags . empty?
109
115
end
@@ -145,20 +151,10 @@ def sidebar_classic_pagination(pages, page_param)
145
151
146
152
private
147
153
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
-
154
154
def name_locales ( object )
155
155
object . tags . keys . map { |k | Regexp . last_match ( 1 ) if k =~ /^name:(.*)$/ } . flatten
156
156
end
157
157
158
- def same_related_ways ( wn1 , wn2 )
159
- wn1 . node . ways . uniq . sort == wn2 . node . ways . uniq . sort
160
- end
161
-
162
158
def related_ways_of_way_node ( way_node )
163
159
way_node . node . ways . uniq . sort . reject { |related_way | related_way . id == way_node . way_id }
164
160
end
0 commit comments