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