Method: Redmine::MenuManager::Mapper#push
- Defined in:
- lib/redmine/menu_manager.rb
#push(name, url, options = {}) ⇒ Object
Adds an item at the end of the menu. Available options:
-
param: the parameter name that is used for the project id (default is :id)
-
if: a Proc that is called before rendering the item, the item is displayed only if it returns true
-
caption that can be:
-
a localized string Symbol
-
a String
-
a Proc that can take the project as argument
-
-
before, after: specify where the menu item should be inserted (eg. :after => :activity)
-
parent: menu item will be added as a child of another named menu (eg. :parent => :issues)
-
children: a Proc that is called before rendering the item. The Proc should return an array of MenuItems, which will be added as children to this item. eg. :children => Proc.new {|project| [Redmine::MenuManager::MenuItem.new(…)] }
-
last: menu item will stay at the end (eg. :last => true)
-
html_options: a hash of html options that are passed to link_to
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 |
# File 'lib/redmine/menu_manager.rb', line 291 def push(name, url, ={}) = .dup if [:parent] subtree = self.find([:parent]) target_root = subtree || @menu_items.root else target_root = @menu_items.root end target_root.children.reject! {|item| item.name == name} # menu item position if first = .delete(:first) target_root.prepend(MenuItem.new(name, url, )) elsif before = .delete(:before) if exists?(before) target_root.add_at(MenuItem.new(name, url, ), position_of(before)) else target_root.add(MenuItem.new(name, url, )) end elsif after = .delete(:after) if exists?(after) target_root.add_at(MenuItem.new(name, url, ), position_of(after) + 1) else target_root.add(MenuItem.new(name, url, )) end elsif [:last] # don't delete, needs to be stored target_root.add_last(MenuItem.new(name, url, )) else target_root.add(MenuItem.new(name, url, )) end end |