From: Marius Balteanu Date: Sun, 10 Nov 2024 15:54:34 +0000 (+0000) Subject: Allows plugins to add custom SVG icons for menu items added by the plugin (#23980). X-Git-Tag: 6.0.0~5^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d8fa577550c3773676c21344555b450feecd36cf;p=redmine.git Allows plugins to add custom SVG icons for menu items added by the plugin (#23980). Patch by Takenori TAKAKI (user:takenory). git-svn-id: https://svn.redmine.org/redmine/trunk@23234 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/lib/redmine/menu_manager.rb b/lib/redmine/menu_manager.rb index e342add0b..5d14fc1f4 100644 --- a/lib/redmine/menu_manager.rb +++ b/lib/redmine/menu_manager.rb @@ -182,7 +182,7 @@ module Redmine end label = if item.icon.present? - sprite_icon(item.icon, h(caption)) + sprite_icon(item.icon, h(caption), plugin: item.plugin) else h(caption) end @@ -431,7 +431,7 @@ module Redmine class MenuItem < MenuNode include Redmine::I18n attr_reader :name, :url, :param, :condition, :parent, - :child_menus, :last, :permission, :icon + :child_menus, :last, :permission, :icon, :plugin def initialize(name, url, options={}) if options[:if] && !options[:if].respond_to?(:call) @@ -461,6 +461,7 @@ module Redmine @parent = options[:parent] @child_menus = options[:children] @last = options[:last] || false + @plugin = options[:plugin] super(@name.to_sym) end diff --git a/test/unit/lib/redmine/menu_manager/menu_helper_test.rb b/test/unit/lib/redmine/menu_manager/menu_helper_test.rb index 3d9570182..4b6151c9d 100644 --- a/test/unit/lib/redmine/menu_manager/menu_helper_test.rb +++ b/test/unit/lib/redmine/menu_manager/menu_helper_test.rb @@ -42,6 +42,17 @@ class Redmine::MenuManager::MenuHelperTest < Redmine::HelperTest assert_select("a.testing", "This is a test") end + def test_render_single_menu_node_with_plugin_icon + node = Redmine::MenuManager::MenuItem.new(:testing, '/test', { :icon => 'plugin_icon_name',:plugin => 'test_plugin_name' }) + @output_buffer = render_single_menu_node(node, 'This is a test', node.url, false) + + assert_select("a.testing", "This is a test") do + assert_select("svg.icon-svg") do + assert_select("use[href=?]", "/assets/plugin_assets/test_plugin_name/icons.svg#icon--plugin_icon_name") + end + end + end + def test_render_menu_node single_node = Redmine::MenuManager::MenuItem.new(:single_node, '/test', {}) @output_buffer = render_menu_node(single_node, nil) diff --git a/test/unit/lib/redmine/menu_manager/menu_item_test.rb b/test/unit/lib/redmine/menu_manager/menu_item_test.rb index 12d6fa2f6..d5d9cdbde 100644 --- a/test/unit/lib/redmine/menu_manager/menu_item_test.rb +++ b/test/unit/lib/redmine/menu_manager/menu_item_test.rb @@ -102,6 +102,13 @@ class Redmine::MenuManager::MenuItemTest < ActiveSupport::TestCase end end + def test_new_menu_item_should_allow_setting_the_plugin + menu_item = Redmine::MenuManager::MenuItem.new( + :test_plugin_menu, '/test', {:plugin => 'test_plugin_name'} + ) + assert_equal 'test_plugin_name', menu_item.plugin + end + def test_has_children parent_item = get_menu_item(:test_menu, :parent) assert parent_item.children.present?