class Slacken::Filters::GroupInlines

Public: Group inline elements and wrap them in a wrapper node.

Wrapper nodes are introduced to group inline nodes in a paragraph.

Public Instance Methods

call(component) click to toggle source
# File lib/slacken/filters/group_inlines.rb, line 5
def call(component)
  if component.block?
    component.derive(group_component(component))
  else
    component.derive(component.children.map(&method(:call)))
  end
end
valid?(component) click to toggle source
# File lib/slacken/filters/group_inlines.rb, line 13
def valid?(component)
  if component.type.member_of?(:wrapper)
    true
  elsif component.inline?
    false
  else
    component.children.all?(&method(:valid?))
  end
end

Private Instance Methods

group_component(component) click to toggle source
# File lib/slacken/filters/group_inlines.rb, line 25
def group_component(component)
  component.children.map(&method(:call)).chunk(&:inline?).map do |is_inline, group|
    is_inline ? component.class.new(:wrapper, group) : group
  end.flatten
end