X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/e731dd71a77ad4ad1e9db22535e89444bb98e5d9..7f611b295f39b8c42219a5ce6c84582db74ce8f7:/app/helpers/user_roles_helper.rb diff --git a/app/helpers/user_roles_helper.rb b/app/helpers/user_roles_helper.rb index b9430535e..02017bdb9 100644 --- a/app/helpers/user_roles_helper.rb +++ b/app/helpers/user_roles_helper.rb @@ -1,38 +1,42 @@ module UserRolesHelper def role_icons(user) - UserRole::ALL_ROLES.reduce("".html_safe) do |acc, elem| - acc + " " + role_icon(user, elem) - end + safe_join(UserRole::ALL_ROLES.filter_map { |role| role_icon(user, role) }, " ") end def role_icon(user, role) if current_user&.administrator? - if user.has_role?(role) - image = "roles/#{role}" - alt = t("users.show.role.revoke.#{role}") - title = t("users.show.role.revoke.#{role}") - url = revoke_role_path(:display_name => user.display_name, :role => role) - confirm = t("user_role.revoke.are_you_sure", :name => user.display_name, :role => role) + if user.role?(role) + link_to role_icon_svg_tag(role, false, t("users.show.role.revoke.#{role}")), + user_role_path(user, role), + :method => :delete, + :data => { :confirm => t("user_role.revoke.are_you_sure", :name => user.display_name, :role => role) } else - image = "roles/blank_#{role}" - alt = t("users.show.role.grant.#{role}") - title = t("users.show.role.grant.#{role}") - url = grant_role_path(:display_name => user.display_name, :role => role) - confirm = t("user_role.grant.are_you_sure", :name => user.display_name, :role => role) + link_to role_icon_svg_tag(role, true, t("users.show.role.grant.#{role}")), + user_role_path(user, role), + :method => :post, + :data => { :confirm => t("user_role.grant.are_you_sure", :name => user.display_name, :role => role) } end - elsif user.has_role?(role) - image = "roles/#{role}" - alt = t("users.show.role.#{role}") - title = t("users.show.role.#{role}") + elsif user.role?(role) + role_icon_svg_tag(role, false, t("users.show.role.#{role}")) end + end - if image - svg_icon = tag("source", :srcset => image_path("#{image}.svg"), :type => "image/svg+xml") - png_icon = image_tag("#{image}.png", :srcset => image_path("#{image}.svg"), :size => "20x20", :border => 0, :alt => alt, :title => title) - icon = content_tag("picture", svg_icon + png_icon) - icon = link_to(icon, url, :method => :post, :confirm => confirm) if url - end + def role_icon_svg_tag(role, blank, title, **options) + role_colors = { + "administrator" => "#f69e42", + "moderator" => "#447eff", + "importer" => "#38e13a" + } + color = role_colors[role] || "currentColor" - icon + path_data = "M 10,2 8.125,8 2,8 6.96875,11.71875 5,18 10,14 15,18 13.03125,11.71875 18,8 11.875,8 10,2 z" + tag.svg(:width => 20, :height => 20, **options) do + concat tag.title(title) + concat tag.path(:d => path_data, + :fill => blank ? "none" : color, + :stroke => color, + "stroke-width" => blank ? 1.5 : 2, + "stroke-linejoin" => "round") + end end end