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
|