www-apps/redmine/files/redmine-rubytree-r8214.patch
author Da Risk <da_risk@elyzion.net>
Wed, 20 Feb 2013 20:55:34 +0100
changeset 61 47675f6649b5
permissions -rw-r--r--
Add latest redmine ebuild
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
61
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
     1
Index: test/unit/lib/redmine/menu_manager/menu_item_test.rb
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
     2
===================================================================
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
     3
--- test/unit/lib/redmine/menu_manager/menu_item_test.rb	(リビジョン 8213)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
     4
+++ test/unit/lib/redmine/menu_manager/menu_item_test.rb	(リビジョン 8214)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
     5
@@ -114,7 +114,7 @@
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
     6
 
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
     7
   def test_has_children
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
     8
     parent_item = get_menu_item(:test_menu, :parent)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
     9
-    assert parent_item.hasChildren?
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    10
+    assert parent_item.children.present?
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    11
     assert_equal 2, parent_item.children.size
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    12
     assert_equal get_menu_item(:test_menu, :child_menu), parent_item.children[0]
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    13
     assert_equal get_menu_item(:test_menu, :child2_menu), parent_item.children[1]
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    14
Index: config/environment.rb
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    15
===================================================================
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    16
--- config/environment.rb	(リビジョン 8213)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    17
+++ config/environment.rb	(リビジョン 8214)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    18
@@ -54,7 +54,6 @@
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    19
   # It will automatically turn deliveries on
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    20
   config.action_mailer.perform_deliveries = false
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    21
 
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    22
-  config.gem 'rubytree', :lib => 'tree'
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    23
   config.gem 'coderay', :version => '~>1.0.0'
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    24
 
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    25
   # Load any local configuration that is kept out of source control
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    26
Index: lib/redmine/menu_manager.rb
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    27
===================================================================
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    28
--- lib/redmine/menu_manager.rb	(リビジョン 8213)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    29
+++ lib/redmine/menu_manager.rb	(リビジョン 8214)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    30
@@ -15,93 +15,6 @@
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    31
 # along with this program; if not, write to the Free Software
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    32
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    33
 
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    34
-require 'tree' # gem install rubytree
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    35
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    36
-# Monkey patch the TreeNode to add on a few more methods :nodoc:
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    37
-module TreeNodePatch
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    38
-  def self.included(base)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    39
-    base.class_eval do
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    40
-      attr_reader :last_items_count
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    41
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    42
-      alias :old_initilize :initialize
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    43
-      def initialize(name, content = nil)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    44
-        old_initilize(name, content)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    45
-      	@childrenHash ||= {}
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    46
-        @last_items_count = 0
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    47
-        extend(InstanceMethods)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    48
-      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    49
-    end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    50
-  end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    51
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    52
-  module InstanceMethods
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    53
-    # Adds the specified child node to the receiver node.  The child node's
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    54
-    # parent is set to be the receiver.  The child is added as the first child in
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    55
-    # the current list of children for the receiver node.
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    56
-    def prepend(child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    57
-      raise "Child already added" if @childrenHash.has_key?(child.name)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    58
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    59
-      @childrenHash[child.name]  = child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    60
-      @children = [child] + @children
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    61
-      child.parent = self
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    62
-      return child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    63
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    64
-    end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    65
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    66
-    # Adds the specified child node to the receiver node.  The child node's
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    67
-    # parent is set to be the receiver.  The child is added at the position
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    68
-    # into the current list of children for the receiver node.
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    69
-    def add_at(child, position)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    70
-      raise "Child already added" if @childrenHash.has_key?(child.name)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    71
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    72
-      @childrenHash[child.name]  = child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    73
-      @children = @children.insert(position, child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    74
-      child.parent = self
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    75
-      return child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    76
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    77
-    end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    78
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    79
-    def add_last(child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    80
-      raise "Child already added" if @childrenHash.has_key?(child.name)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    81
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    82
-      @childrenHash[child.name]  = child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    83
-      @children <<  child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    84
-      @last_items_count += 1
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    85
-      child.parent = self
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    86
-      return child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    87
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    88
-    end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    89
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    90
-    # Adds the specified child node to the receiver node.  The child node's
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    91
-    # parent is set to be the receiver.  The child is added as the last child in
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    92
-    # the current list of children for the receiver node.
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    93
-    def add(child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    94
-      raise "Child already added" if @childrenHash.has_key?(child.name)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    95
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    96
-      @childrenHash[child.name]  = child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    97
-      position = @children.size - @last_items_count
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    98
-      @children.insert(position, child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
    99
-      child.parent = self
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   100
-      return child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   101
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   102
-    end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   103
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   104
-    # Wrapp remove! making sure to decrement the last_items counter if
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   105
-    # the removed child was a last item
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   106
-    def remove!(child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   107
-      @last_items_count -= +1 if child && child.last
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   108
-      super
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   109
-    end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   110
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   111
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   112
-    # Will return the position (zero-based) of the current child in
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   113
-    # it's parent
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   114
-    def position
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   115
-      self.parent.children.index(self)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   116
-    end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   117
-  end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   118
-end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   119
-Tree::TreeNode.send(:include, TreeNodePatch)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   120
-
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   121
 module Redmine
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   122
   module MenuManager
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   123
     class MenuError < StandardError #:nodoc:
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   124
@@ -169,7 +82,7 @@
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   125
 
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   126
       def display_main_menu?(project)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   127
         menu_name = project && !project.new_record? ? :project_menu : :application_menu
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   128
-        Redmine::MenuManager.items(menu_name).size > 1 # 1 element is the root
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   129
+        Redmine::MenuManager.items(menu_name).children.present?
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   130
       end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   131
 
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   132
       def render_menu(menu, project=nil)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   133
@@ -181,7 +94,7 @@
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   134
       end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   135
 
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   136
       def render_menu_node(node, project=nil)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   137
-        if node.hasChildren? || !node.child_menus.nil?
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   138
+        if node.children.present? || !node.child_menus.nil?
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   139
           return render_menu_node_with_children(node, project)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   140
         else
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   141
           caption, url, selected = extract_node_details(node, project)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   142
@@ -306,13 +219,13 @@
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   143
       end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   144
 
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   145
       def items(menu_name)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   146
-        @items[menu_name.to_sym] || Tree::TreeNode.new(:root, {})
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   147
+        @items[menu_name.to_sym] || MenuNode.new(:root, {})
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   148
       end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   149
     end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   150
 
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   151
     class Mapper
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   152
       def initialize(menu, items)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   153
-        items[menu] ||= Tree::TreeNode.new(:root, {})
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   154
+        items[menu] ||= MenuNode.new(:root, {})
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   155
         @menu = menu
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   156
         @menu_items = items[menu]
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   157
       end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   158
@@ -398,7 +311,102 @@
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   159
       end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   160
     end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   161
 
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   162
-    class MenuItem < Tree::TreeNode
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   163
+    class MenuNode
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   164
+      include Enumerable
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   165
+      attr_accessor :parent
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   166
+      attr_reader :last_items_count, :name
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   167
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   168
+      def initialize(name, content = nil)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   169
+        @name = name
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   170
+        @childrenHash ||= {}
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   171
+        @children = []
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   172
+        @last_items_count = 0
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   173
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   174
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   175
+      def children
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   176
+        if block_given?
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   177
+          @children.each {|child| yield child}
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   178
+        else
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   179
+          @children
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   180
+        end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   181
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   182
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   183
+      # Returns the number of descendants + 1
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   184
+      def size
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   185
+        @children.inject(1) {|sum, node| sum + node.size}
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   186
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   187
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   188
+      def each &block
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   189
+        yield self
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   190
+        children { |child| child.each(&block) }
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   191
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   192
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   193
+      # Adds a child at first position
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   194
+      def prepend(child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   195
+        raise "Child already added" if @childrenHash.has_key?(child.name)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   196
+  
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   197
+        @childrenHash[child.name]  = child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   198
+        @children = [child] + @children
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   199
+        child.parent = self
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   200
+        return child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   201
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   202
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   203
+      # Adds a child at given position
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   204
+      def add_at(child, position)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   205
+        raise "Child already added" if @childrenHash.has_key?(child.name)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   206
+  
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   207
+        @childrenHash[child.name]  = child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   208
+        @children = @children.insert(position, child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   209
+        child.parent = self
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   210
+        return child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   211
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   212
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   213
+      # Adds a child as last child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   214
+      def add_last(child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   215
+        raise "Child already added" if @childrenHash.has_key?(child.name)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   216
+  
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   217
+        @childrenHash[child.name]  = child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   218
+        @children <<  child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   219
+        @last_items_count += 1
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   220
+        child.parent = self
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   221
+        return child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   222
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   223
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   224
+      # Adds a child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   225
+      def add(child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   226
+        raise "Child already added" if @childrenHash.has_key?(child.name)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   227
+  
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   228
+        @childrenHash[child.name]  = child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   229
+        position = @children.size - @last_items_count
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   230
+        @children.insert(position, child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   231
+        child.parent = self
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   232
+        return child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   233
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   234
+      alias :<< :add
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   235
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   236
+      # Removes a child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   237
+      def remove!(child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   238
+        @childrenHash.delete(child.name)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   239
+        @children.delete(child)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   240
+        @last_items_count -= +1 if child && child.last
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   241
+        child.parent = nil
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   242
+        child
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   243
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   244
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   245
+      # Returns the position for this node in it's parent
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   246
+      def position
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   247
+        self.parent.children.index(self)
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   248
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   249
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   250
+      # Returns the root for this node
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   251
+      def root
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   252
+        root = self
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   253
+        root = root.parent while root.parent
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   254
+        root
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   255
+      end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   256
+    end
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   257
+
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   258
+    class MenuItem < MenuNode
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   259
       include Redmine::I18n
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   260
       attr_reader :name, :url, :param, :condition, :parent, :child_menus, :last
47675f6649b5 Add latest redmine ebuild
Da Risk <da_risk@elyzion.net>
parents:
diff changeset
   261