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