You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

145 lines
4.7 KiB

module Admin::NodesHelper
def node_structure_for_select(parent, node)
result = []
result << [parent.title, parent.id] if parent.root?
parent.children.ordered.each do |child|
result << ["#{"\u00A0\u00A0" * (child.depth)}#{child.title}".html_safe, child.id, { disabled: (child == node or child.ancestor_ids.include?(node.id)) }]
result = result + node_structure_for_select(child, node)
end
result
end
def spacer_node(node)
return if node.root?
tag.div class: 'spacer' do
node.depth.times do
concat tag.div nil
end
end
end
def toggle_node(node)
return tag.div nil, class: 'child' if node.document?
link_to url_for(controller: 'nodes', action: 'children', id: node.id),
class: 'child parent',
data: {
turbo_stream: true,
controller: "nodes",
action: "click->nodes#toggle_children"
} do
concat tag.span('expand_more')
concat tag.span('keyboard_arrow_right')
end
end
def tree_title(node)
# result = [link_to(ENV['PROJECT_NAME'],
# url_for(url_base_options.merge(id: nil)),
# class: "list-title-link#{' has-popup-menu' if node.blank?}",
# data: {
# icon: 'museum',
# action: node.blank? ? 'click->popup#toggle' : 'click->nodes#set_current',
# turbo_stream: node.blank? ? nil : true,
# })]
result = []
node&.path&.each do |n|
result << tree_node_title_link(n, node)
end
result[-1] = "#{tag.div "#{result[-1]}#{node_popup_menu(node)}".html_safe, data: {controller: 'popup'} }"
result.join(tag.span('>')).html_safe
end
def node_popup_menu(node=nil)
tag.div class: 'popup-menu' do
tag.ul do
concat tag.li(link_to t('ui.edit'), edit_admin_node_path(node), data: {icon: 'edit', turbo_action: 'advance'}) if node
Node.categories.each do |node_category|
concat tag.li button_to(t(node_category, scope: 'nodes.new_categories'),
url_for(controller: 'nodes', action: 'create'),
params: {node: {parent_id: node&.id}},
data: {
action: 'click->popup#close_open',
icon: t(node_category, scope: 'nodes.icons')
})
end
# concat tag.li button_to(t('ui.reindex'),
# url_for(controller: 'nodes', action: 'reindex', id: node.id),
# method: :patch,
# data: {
# action: 'click->popup#close_open',
# icon: 'refresh'
# }) if node
end
end
end
def node_link_title(node)
# return node.title if !node.document? or node.attachments.blank? or !node.attachments.first.asset.representable?
# asset = node.attachments.first.asset
# node_icon = image_tag(rails_storage_proxy_path(asset.representation(resize_to_limit: [48,72], format: :jpg))) if asset.representable?
node_icon = nil
node_title = tag.span(node.title)
(node_icon || '').concat(node_title).html_safe
end
def node_flags(node)
return if node.copyright_with_inheritance.blank? and node.tags_with_inheritance.blank?
tag.div class: 'node__flags' do
concat tag.span('copyright') if node.copyright_with_inheritance.present?
concat tag.span('sell') if node.tags_with_inheritance.any?
end
end
def drawer_node_link(node)
link_to tag.span(node.title),
url_for(controller: 'nodes', action: node.document? ? 'edit' : 'tree', id: node.id),
title: node.title,
class: 'node-title',
id: dom_id(node, 'drawer-link'),
data: {
nodes_id_param: node.id,
turbo_stream: true,
action: 'click->nodes#set_current',
icon: t("nodes.icons.#{node.category}")
}
end
def tree_node_title_link(node, current_node=nil)
current_node ||= node
url_base_options = {controller: 'nodes', action: 'tree'}
link_to(node.title,
url_for(url_base_options.merge(id: node.id)),
class: current_node == node ? 'list-title-link has-popup-menu' : 'list-title-link',
id: dom_id(node, 'list-title-link'),
data: {
action: current_node == node ? 'click->popup#toggle' : 'click->nodes#set_current',
turbo_stream: current_node != node ? true : nil,
nodes_id_param: node.id,
icon: t("nodes.icons.#{node.category}")
})
end
end