Class: Redmine::MenuManager::Mapper
- Inherits:
-
Object
- Object
- Redmine::MenuManager::Mapper
- Defined in:
- lib/redmine/menu_manager.rb
Instance Attribute Summary collapse
-
#menu ⇒ Object
readonly
Returns the value of attribute menu.
-
#menu_items ⇒ Object
readonly
Returns the value of attribute menu_items.
Instance Method Summary collapse
-
#delete(name) ⇒ Object
Removes a menu item.
-
#exists?(name) ⇒ Boolean
Checks if a menu item exists.
- #find(name) ⇒ Object
-
#initialize(menu, items) ⇒ Mapper
constructor
A new instance of Mapper.
- #position_of(name) ⇒ Object
-
#push(name, url, options = {}) ⇒ Object
Adds an item at the end of the menu.
Constructor Details
#initialize(menu, items) ⇒ Mapper
Returns a new instance of Mapper
240 241 242 243 244 |
# File 'lib/redmine/menu_manager.rb', line 240 def initialize(, items) items[] ||= MenuNode.new(:root, {}) @menu = @menu_items = items[] end |
Instance Attribute Details
#menu ⇒ Object (readonly)
Returns the value of attribute menu
238 239 240 |
# File 'lib/redmine/menu_manager.rb', line 238 def @menu end |
#menu_items ⇒ Object (readonly)
Returns the value of attribute menu_items
238 239 240 |
# File 'lib/redmine/menu_manager.rb', line 238 def @menu_items end |
Instance Method Details
#delete(name) ⇒ Object
Removes a menu item
301 302 303 304 305 |
# File 'lib/redmine/menu_manager.rb', line 301 def delete(name) if found = self.find(name) @menu_items.remove!(found) end end |
#exists?(name) ⇒ Boolean
Checks if a menu item exists
308 309 310 |
# File 'lib/redmine/menu_manager.rb', line 308 def exists?(name) @menu_items.any? {|node| node.name == name} end |
#find(name) ⇒ Object
312 313 314 |
# File 'lib/redmine/menu_manager.rb', line 312 def find(name) @menu_items.find {|node| node.name == name} end |
#position_of(name) ⇒ Object
316 317 318 319 320 321 322 |
# File 'lib/redmine/menu_manager.rb', line 316 def position_of(name) @menu_items.each do |node| if node.name == name return node.position end end end |
#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
259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 |
# File 'lib/redmine/menu_manager.rb', line 259 def push(name, url, ={}) = .dup if [:parent] subtree = self.find([:parent]) if subtree target_root = subtree else target_root = @menu_items.root end else target_root = @menu_items.root end # 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 |