@@ -84,6 +84,14 module TreeNodePatch | |||
|
84 | 84 | |
|
85 | 85 | end |
|
86 | 86 | |
|
87 | # Wrapp remove! making sure to decrement the last_items counter if | |
|
88 | # the removed child was a last item | |
|
89 | def remove!(child) | |
|
90 | @last_items_count -= +1 if child && child.last | |
|
91 | super | |
|
92 | end | |
|
93 | ||
|
94 | ||
|
87 | 95 | # Will return the position (zero-based) of the current child in |
|
88 | 96 | # it's parent |
|
89 | 97 | def position |
@@ -352,7 +360,7 module Redmine | |||
|
352 | 360 | target_root.add(MenuItem.new(name, url, options)) |
|
353 | 361 | end |
|
354 | 362 | |
|
355 | elsif options.delete(:last) | |
|
363 | elsif options[:last] # don't delete, needs to be stored | |
|
356 | 364 | target_root.add_last(MenuItem.new(name, url, options)) |
|
357 | 365 | else |
|
358 | 366 | target_root.add(MenuItem.new(name, url, options)) |
@@ -386,7 +394,7 module Redmine | |||
|
386 | 394 | |
|
387 | 395 | class MenuItem < Tree::TreeNode |
|
388 | 396 | include Redmine::I18n |
|
389 | attr_reader :name, :url, :param, :condition, :parent, :child_menus | |
|
397 | attr_reader :name, :url, :param, :condition, :parent, :child_menus, :last | |
|
390 | 398 | |
|
391 | 399 | def initialize(name, url, options) |
|
392 | 400 | raise ArgumentError, "Invalid option :if for menu item '#{name}'" if options[:if] && !options[:if].respond_to?(:call) |
@@ -403,6 +411,7 module Redmine | |||
|
403 | 411 | @html_options[:class] = [@html_options[:class], @name.to_s.dasherize].compact.join(' ') |
|
404 | 412 | @parent = options[:parent] |
|
405 | 413 | @child_menus = options[:children] |
|
414 | @last = options[:last] || false | |
|
406 | 415 | super @name.to_sym |
|
407 | 416 | end |
|
408 | 417 |
@@ -17,7 +17,7 | |||
|
17 | 17 | |
|
18 | 18 | require File.dirname(__FILE__) + '/../../../../test_helper' |
|
19 | 19 | |
|
20 |
class Redmine::MenuManager::MapperTest < |
|
|
20 | class Redmine::MenuManager::MapperTest < ActiveSupport::TestCase | |
|
21 | 21 | context "Mapper#initialize" do |
|
22 | 22 | should "be tested" |
|
23 | 23 | end |
@@ -163,4 +163,21 class Redmine::MenuManager::MapperTest < Test::Unit::TestCase | |||
|
163 | 163 | menu_mapper = Redmine::MenuManager::Mapper.new(:test_menu, {}) |
|
164 | 164 | assert_nil menu_mapper.delete(:test_missing) |
|
165 | 165 | end |
|
166 | ||
|
167 | test 'deleting all items' do | |
|
168 | # Exposed by deleting :last items | |
|
169 | Redmine::MenuManager.map :test_menu do |menu| | |
|
170 | menu.push :not_last, Redmine::Info.help_url | |
|
171 | menu.push :administration, { :controller => 'projects', :action => 'show'}, {:last => true} | |
|
172 | menu.push :help, Redmine::Info.help_url, :last => true | |
|
173 | end | |
|
174 | ||
|
175 | assert_nothing_raised do | |
|
176 | Redmine::MenuManager.map :test_menu do |menu| | |
|
177 | menu.delete(:administration) | |
|
178 | menu.delete(:help) | |
|
179 | menu.push :test_overview, { :controller => 'projects', :action => 'show'}, {} | |
|
180 | end | |
|
181 | end | |
|
182 | end | |
|
166 | 183 | end |
General Comments 0
You need to be logged in to leave comments.
Login now