Class: HTMLPipeline::NodeFilter::TableOfContentsFilter
- Inherits:
-
HTMLPipeline::NodeFilter
- Object
- Filter
- HTMLPipeline::NodeFilter
- HTMLPipeline::NodeFilter::TableOfContentsFilter
- Defined in:
- lib/html_pipeline/node_filter/table_of_contents_filter.rb
Overview
Examples
TocPipeline =
HTMLPipeline.new [
HTMLPipeline::TableOfContentsFilter
]
# => #<HTMLPipeline:0x007fc13c4528d8...>
orig = %(<h1>Ice cube</h1><p>is not for the pop chart</p>)
# => "<h1>Ice cube</h1><p>is not for the pop chart</p>"
result = {}
# => {}
TocPipeline.call(orig, {}, result)
# => {:toc=> ...}
result[:toc]
# => "{:href=>"#ice-cube", :text=>"Ice cube"}"
result[:output].to_s
# => "<h1>\n<a id=\"ice-cube\" class=\"anchor\" href=\"#ice-cube\">..."
Constant Summary collapse
- SELECTOR =
Selma::Selector.new( match_element: "h1 a[href], h2 a[href], h3 a[href], h4 a[href], h5 a[href], h6 a[href]", match_text_within: "h1, h2, h3, h4, h5, h6", )
Instance Attribute Summary
Attributes inherited from HTMLPipeline::NodeFilter
Attributes inherited from Filter
Instance Method Summary collapse
- #after_initialize ⇒ Object
-
#anchor_html ⇒ Object
The icon that will be placed next to an anchored rendered markdown header.
-
#classes ⇒ Object
The class that will be attached on the anchored rendered markdown header.
- #handle_element(element) ⇒ Object
- #handle_text_chunk(text) ⇒ Object
- #selector ⇒ Object
Methods inherited from HTMLPipeline::NodeFilter
call, #html, #initialize, #reset!
Methods inherited from Filter
#base_url, #call, call, #has_ancestor?, #initialize, #needs, #validate
Constructor Details
This class inherits a constructor from HTMLPipeline::NodeFilter
Instance Method Details
#after_initialize ⇒ Object
46 47 48 |
# File 'lib/html_pipeline/node_filter/table_of_contents_filter.rb', line 46 def after_initialize result[:toc] = [] end |
#anchor_html ⇒ Object
The icon that will be placed next to an anchored rendered markdown header
37 38 39 |
# File 'lib/html_pipeline/node_filter/table_of_contents_filter.rb', line 37 def anchor_html @context[:anchor_html] || %(<span aria-hidden="true" class="anchor"></span>) end |
#classes ⇒ Object
The class that will be attached on the anchored rendered markdown header
42 43 44 |
# File 'lib/html_pipeline/node_filter/table_of_contents_filter.rb', line 42 def classes context[:classes] || "anchor" end |
#handle_element(element) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/html_pipeline/node_filter/table_of_contents_filter.rb', line 50 def handle_element(element) header_href = element["href"] return unless header_href.start_with?("#") header_id = header_href[1..-1] element["id"] = header_id element["class"] = classes element.set_inner_content(anchor_html, as: :html) result[:toc] << { href: header_href } end |
#handle_text_chunk(text) ⇒ Object
65 66 67 |
# File 'lib/html_pipeline/node_filter/table_of_contents_filter.rb', line 65 def handle_text_chunk(text) result[:toc].last[:text] = text.to_s end |
#selector ⇒ Object
32 33 34 |
# File 'lib/html_pipeline/node_filter/table_of_contents_filter.rb', line 32 def selector SELECTOR end |