53: def submenu( src_node, menu_node, level )
54: if menu_node.nil? \
55: || level > param( 'maxLevels' ) + param( 'startLevel' ) - 1 \
56: || ( ( level > param( 'minLevels' ) + param( 'startLevel' ) - 1 ) \
57: && ( menu_node.level >= src_node.level \
58: || ( param( 'showCurrentSubtreeOnly' ) && !src_node.in_subtree_of?( menu_node.node_info[:node] ) )
59: )
60: ) \
61: || src_node.level < param( 'startLevel' ) \
62: || (level == param('startLevel') && !src_node.in_subtree_of?( menu_node.node_info[:node] ))
63: return ''
64: end
65:
66: submenus = ''
67: out = "<ul>"
68: menu_node.each do |child|
69: menu = child.has_children? ? submenu( src_node, child, level + 1 ) : ''
70: style, link = menu_item_details( src_node, child.node_info[:node] )
71: submenus << menu
72: out << "<li #{style}>#{link}"
73: out << menu
74: out << "</li>"
75: end
76: out << "</ul>"
77:
78: if level < param( 'startLevel' )
79: '' + submenus
80: else
81: out
82: end
83: end