1 module Admin::NodeHelper
2
3 def render_node(page, locals = {})
4 @current_node = page
5 page.extend MenuRenderer
6 page.view = self
7 if page.additional_menu_features?
8 page.extend(*page.menu_renderer_modules)
9 end
10 locals.reverse_merge!(:level => 0, :simple => false).merge!(:page => page)
11 render :partial => 'admin/pages/node', :locals => locals
12 end
13
14 def homepage
15 @homepage ||= Page.find_by_parent_id(nil)
16 end
17
18 def show_all?
19 @controller.action_name == 'remove'
20 end
21
22 def expanded_rows
23 unless @expanded_rows
24 @expanded_rows = case
25 when rows = cookies[:expanded_rows]
26 rows.split(',').map { |x| Integer(x) rescue nil }.compact
27 else
28 []
29 end
30
31 if homepage and !@expanded_rows.include?(homepage.id)
32 @expanded_rows << homepage.id
33 end
34 end
35 @expanded_rows
36 end
37
38 def expanded
39 show_all? || expanded_rows.include?(@current_node.id)
40 end
41
42 def padding_left(level)
43 (level * 23) + 9
44 end
45
46 def children_class
47 unless @current_node.children.empty?
48 if expanded
49 " children_visible"
50 else
51 " children_hidden"
52 end
53 else
54 " no_children"
55 end
56 end
57
58 def virtual_class
59 @current_node.virtual? ? " virtual": ""
60 end
61
62 def expander(level)
63 unless @current_node.children.empty? or level == 0
64 image((expanded ? "collapse" : "expand"),
65 :class => "expander", :alt => 'toggle children',
66 :title => '')
67 else
68 ""
69 end
70 end
71
72 def icon
73 icon_name = @current_node.virtual? ? 'virtual_page' : 'page'
74 image(icon_name, :class => "icon", :alt => '', :title => '')
75 end
76
77 def node_title
78 %{<span class="title">#{ h(@current_node.title) }</span>}
79 end
80
81 def page_type
82 display_name = @current_node.class.display_name
83 if display_name == 'Page'
84 ""
85 else
86 %{<span class="info">(#{ h(display_name) })</span>}
87 end
88 end
89
90 def spinner
91 image('spinner.gif',
92 :class => 'busy', :id => "busy_#{@current_node.id}",
93 :alt => "", :title => "",
94 :style => 'display: none;')
95 end
96 end