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.
 
 
 
 
 

138 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 << [ "#{"-" * (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