Module: HakumiComponents::Tree::Concerns::NodeRendering
- Extended by:
- ActiveSupport::Concern, T::Helpers, T::Sig
- Included in:
- HakumiComponents::Tree::Component
- Defined in:
- app/components/hakumi_components/tree/concerns/node_rendering.rb
Constant Summary collapse
- NodeState =
T.type_alias { HakumiComponents::Tree::Component::NodeState }
- IconInput =
T.type_alias { HakumiComponents::BaseComponent::SymbolInput }
- AriaAttributes =
T.type_alias { T::Hash[Symbol, Types::HtmlPrimitive] }
Instance Method Summary collapse
- #render_indent(level_mask) ⇒ Object
- #render_node_template ⇒ Object
- #render_nodes(nodes, level_mask: [], level: 0, parent_key: nil) ⇒ Object
Instance Method Details
#render_indent(level_mask) ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'app/components/hakumi_components/tree/concerns/node_rendering.rb', line 45 def render_indent(level_mask) inner_html = level_mask.inject(ActiveSupport::SafeBuffer.new) do |buffer, has_line| classes = [ "hakumi-tree-indent-unit" ] classes << "hakumi-tree-indent-unit-active" if has_line buffer << renderer.content_tag(:span, "", class: classes) end renderer.content_tag(:span, inner_html, class: "hakumi-tree-indent", aria: { hidden: true }) end |
#render_node_template ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'app/components/hakumi_components/tree/concerns/node_rendering.rb', line 21 def render_node_template switcher_content = render_switcher_icon_markup(resolve_switcher_config(tree_switcher_icon)) switcher = renderer.content_tag(:button, type: "button", class: "hakumi-tree-switcher", data: { action: "click->hakumi--tree#toggle" }) do switcher_content end checkbox = if tree_checkable? renderer.content_tag(:button, type: "button", class: "hakumi-tree-checkbox", data: { action: "click->hakumi--tree#toggleCheck" }) do renderer.content_tag(:span, "", class: "hakumi-tree-checkbox-inner") end end icon = renderer.content_tag(:span, default_icon_markup, class: "hakumi-tree-icon", style: default_icon_style) title = renderer.content_tag(:button, type: "button", class: "hakumi-tree-title", data: { action: "click->hakumi--tree#select" }) do renderer.content_tag(:span, "", class: "hakumi-tree-title-text") end indent = renderer.content_tag(:span, "", class: "hakumi-tree-indent", data: { hakumi__tree_target: "indent" }) content_inner = renderer.safe_join([ checkbox, icon, title ].compact) content_wrapper = renderer.content_tag(:div, content_inner, class: "hakumi-tree-node-content-wrapper", data: { hakumi__tree_target: "content", action: "click->hakumi--tree#select" }) row = renderer.content_tag(:div, renderer.safe_join([ indent, switcher, content_wrapper ]), class: "hakumi-tree-node-row") children = renderer.content_tag(:div, "", class: "hakumi-tree-children", role: "group", data: { hakumi__tree_target: "children" }) renderer.content_tag(:div, renderer.safe_join([ row, children ]), class: "hakumi-tree-node", role: "treeitem", tabindex: "-1", data: { hakumi__tree_target: "node" }) end |
#render_nodes(nodes, level_mask: [], level: 0, parent_key: nil) ⇒ Object
63 64 65 66 67 68 |
# File 'app/components/hakumi_components/tree/concerns/node_rendering.rb', line 63 def render_nodes(nodes, level_mask: [], level: 0, parent_key: nil) renderer.safe_join(nodes.map.with_index do |node, index| has_next = index < nodes.size - 1 render_node(node, index: index, total: nodes.size, level_mask: level_mask, has_next: has_next, level: level, parent_key: parent_key) end) end |