module Cms
module SectionNodesHelper
def draggable_class?(modifiable_sections, section_node, parent)
if !section_node.root? && current_user_can_modify(modifiable_sections, section_node, parent)
'draggable'
else
''
end
end
def add_page_path_data(section_node, parent_section_node)
section = figure_out_target_section(parent_section_node, section_node)
new_section_page_path(section)
end
def add_link_path_data(section_node, parent_section_node)
section = figure_out_target_section(parent_section_node, section_node)
new_section_link_path(section)
end
def add_section_path_data(section_node, parent_section_node)
section = figure_out_target_section(parent_section_node, section_node)
new_section_path(section_id: section)
end
# When sitemap initially renders, we only want to show first level.
def initial_visibility_class(section_node)
section_node.depth > 1 ? 'hide' : ''
end
# Returns a css class for determine sitemap depth.
def sitemap_depth_class(section_node)
one_based_depth = section_node.depth + 1
"level-#{one_based_depth}"
end
# Generate HTML for 'hidden' icon for hidden content.
# @param [Object] content
# @return [String] HTML (HTML safe)
def hidden_icon_tag(content)
if content.respond_to?(:hidden?) && content.hidden?
''.html_safe
else
''
end
end
def guest_accessible_icon_tag(parent, content)
unless content.accessible_to_guests?(@public_sections, parent)
''.html_safe
else
''
end
end
# Generate the HTML for a given section node.
def icon_tag(section_node, children)
name = if section_node.ancestors.size == 0
'earth'
elsif section_node.home?
'house'
elsif section_node.link?
'link'
elsif section_node.page?
'file'
elsif section_node.section? && children.empty?
'folder-open'
elsif section_node.section?
'folder'
else
'list' # All other content types.
end
content_tag("span", "", {'aria-hidden' => true, class: "type-icon icon-#{name}"})
end
# Marks a section to determine if it can be opened/closed in the sitemap.
def closable_data(section_node, children)
if (section_node.root?)
false
elsif !children.empty?
true
else
false
end
end
def current_user_can_modify(modifiable_sections, section_node, parent_section_node)
if section_node.section?
modifiable_sections.include?(section_node.node)
else
modifiable_sections.include?(parent_section_node.node)
end
end
# Determines if a row is leaf or folder based on whether there are any subchildren.
def row_type_tag(section_node)
section_node.section? ? 'folder' : 'leaf'
end
private
# Need to determine if we should be adding content to a node or its parent.
def figure_out_target_section(parent_section_node, section_node)
if section_node.section?
section_node.node
else
parent_section_node.node
end
end
end
end