X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/34e3e51456774127d43408b7ab65c24f41373f62..6094a97ce6297d390e5bbf733f5c2b4cc6b2076c:/app/helpers/user_roles_helper.rb diff --git a/app/helpers/user_roles_helper.rb b/app/helpers/user_roles_helper.rb index 37fbf8634..02017bdb9 100644 --- a/app/helpers/user_roles_helper.rb +++ b/app/helpers/user_roles_helper.rb @@ -1,37 +1,42 @@ module UserRolesHelper def role_icons(user) - UserRole::ALL_ROLES.reduce("".html_safe) { |s,r| s + " " + role_icon(user, r) } + safe_join(UserRole::ALL_ROLES.filter_map { |role| role_icon(user, role) }, " ") end def role_icon(user, role) - if @user and @user.administrator? - if user.has_role?(role) - image = "roles/#{role}.png" - alt = t("user.view.role.revoke.#{role}") - title = t("user.view.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 current_user&.administrator? + 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}.png" - alt = t("user.view.role.grant.#{role}") - title = t("user.view.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}.png" - alt = t("user.view.role.#{role}") - title = t("user.view.role.#{role}") + elsif user.role?(role) + role_icon_svg_tag(role, false, t("users.show.role.#{role}")) end + end - if image - icon = image_tag(image, :size => "20x20", :border => 0, :alt => alt, :title => title) + def role_icon_svg_tag(role, blank, title, **options) + role_colors = { + "administrator" => "#f69e42", + "moderator" => "#447eff", + "importer" => "#38e13a" + } + color = role_colors[role] || "currentColor" - if url - icon = link_to(icon, url, :method => :post, :confirm => confirm) - end + 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 - - icon end end