module Admin::NodeHelper
def render_nodes(page, starting_index, parent_index = nil, simple = false)
@rendered_html = ""
render_node page, starting_index, parent_index, simple
@rendered_html
end
def render_node(page, index, parent_index = nil, simple = false)
@current_node = prepare_page(page)
@rendered_html += (render :partial => 'admin/pages/node',
:locals => {level: index, index: index, parent_index: parent_index,
page: page, simple: simple, branch: (page.children.count > 0) })
index
end
def prepare_page(page)
page.extend MenuRenderer
page.view = self
if page.additional_menu_features?
page.extend(*page.menu_renderer_modules)
end
page
end
def homepage
@homepage ||= Page.find_by_parent_id(nil)
end
def show_all?
controller.action_name == 'remove'
end
def expanded_rows
unless @expanded_rows
@expanded_rows = case
when rows = cookies[:expanded_rows]
rows.split(',').map { |x| Integer(x) rescue nil }.compact
else
[]
end
if homepage and !@expanded_rows.include?(homepage.id)
@expanded_rows << homepage.id
end
end
@expanded_rows
end
def expanded
show_all? || expanded_rows.include?(@current_node.id)
end
def padding_left(level)
(level * 23) + 9
end
def children_class
unless @current_node.children.empty?
if expanded
" children_visible"
else
" children_hidden"
end
else
" no_children"
end
end
def virtual_class
@current_node.virtual? ? " virtual": ""
end
def expander(level)
unless @current_node.children.empty? or level == 0
image((expanded ? "collapse" : "expand"),
:class => "expander", :alt => 'toggle children',
:title => '')
else
""
end
end
def icon
icon_name = @current_node.virtual? ? 'virtual_page' : 'page'
image(icon_name, :class => "icon", :alt => '', :title => '')
end
def node_title
%{#{ h(@current_node.title) }}.html_safe
end
def page_type
display_name = @current_node.class.display_name
if display_name == 'Page'
""
else
%{(#{ h(display_name) })}.html_safe
end
end
def spinner
image('spinner.gif',
:class => 'busy', :id => "busy_#{@current_node.id}",
:alt => "", :title => "",
:style => 'display: none;')
end
end