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