Module: Coradoc::Html
- Defined in:
- lib/coradoc/html.rb,
lib/coradoc/html.rb,
lib/coradoc/html/spa.rb,
lib/coradoc/html/drop.rb,
lib/coradoc/html/input.rb,
lib/coradoc/html/theme.rb,
lib/coradoc/html/config.rb,
lib/coradoc/html/escape.rb,
lib/coradoc/html/static.rb,
lib/coradoc/html/version.rb,
lib/coradoc/html/renderer.rb,
lib/coradoc/html/drop/base.rb,
lib/coradoc/html/title_text.rb,
lib/coradoc/html/toc_builder.rb,
lib/coradoc/html/drop/toc_drop.rb,
lib/coradoc/html/converter_base.rb,
lib/coradoc/html/drop/term_drop.rb,
lib/coradoc/html/toc_serializer.rb,
lib/coradoc/html/drop/block_drop.rb,
lib/coradoc/html/drop/image_drop.rb,
lib/coradoc/html/drop/table_drop.rb,
lib/coradoc/html/layout_renderer.rb,
lib/coradoc/html/template_config.rb,
lib/coradoc/html/template_caching.rb,
lib/coradoc/html/template_helpers.rb,
lib/coradoc/html/template_locator.rb,
lib/coradoc/html/drop/drop_factory.rb,
lib/coradoc/html/drop/document_drop.rb,
lib/coradoc/html/drop/footnote_drop.rb,
lib/coradoc/html/section_numberable.rb,
lib/coradoc/html/drop/list_item_drop.rb,
lib/coradoc/html/drop/table_row_drop.rb,
lib/coradoc/html/drop/toc_entry_drop.rb,
lib/coradoc/html/drop/annotation_drop.rb,
lib/coradoc/html/drop/list_block_drop.rb,
lib/coradoc/html/drop/table_cell_drop.rb,
lib/coradoc/html/drop/bibliography_drop.rb,
lib/coradoc/html/drop/text_content_drop.rb,
lib/coradoc/html/transform/to_core_model.rb,
lib/coradoc/html/drop/inline_element_drop.rb,
lib/coradoc/html/drop/definition_item_drop.rb,
lib/coradoc/html/drop/definition_list_drop.rb,
lib/coradoc/html/transform/from_core_model.rb,
lib/coradoc/html/drop/bibliography_entry_drop.rb
Defined Under Namespace
Modules: Config, Drop, Escape, FormatDetection, SectionNumberable, TemplateCaching, TemplateFilters, Theme, TitleText, Transform Classes: ConverterBase, LayoutRenderer, Renderer, Spa, Static, TemplateConfig, TemplateLocator, TocBuilder, TocSerializer
Constant Summary collapse
Class Method Summary collapse
- .available_templates ⇒ Object
- .configuration ⇒ Object
- .configure {|configuration| ... } ⇒ Object
-
.from_core_model(core_document) ⇒ Object
Transform CoreModel to HTML-ready structure.
-
.from_file(filename) ⇒ Object
Parse HTML file.
-
.handles_model?(model) ⇒ Boolean
Check if this format can transform the given model to CoreModel.
-
.parse(html, options = {}) ⇒ Object
Parse HTML content and return CoreModel elements (may be an Array).
-
.parse_to_core(html, options = {}) ⇒ Coradoc::CoreModel::DocumentElement
Parse HTML content directly into a CoreModel document.
- .reset_configuration! ⇒ Object
-
.serialize(document, options = {}) ⇒ String
Serialize CoreModel document to HTML.
-
.serialize_as(document, format, options = {}) ⇒ String
Serialize CoreModel document to HTML with specified format.
-
.serialize_spa(document, config = {}) ⇒ String
Serialize CoreModel document to SPA HTML.
-
.serialize_static(document, config = {}) ⇒ String
Serialize CoreModel document to static HTML.
- .template_path_for(name) ⇒ Object
- .to_core(document) ⇒ Object
-
.to_core_model(document) ⇒ Coradoc::CoreModel::Base
Transform HTML model to CoreModel.
-
.validate_core_model!(document) ⇒ Object
Validate that input is a CoreModel type.
Class Method Details
.available_templates ⇒ Object
83 84 85 |
# File 'lib/coradoc/html/template_config.rb', line 83 def available_templates TemplateConfig.available_templates end |
.configuration ⇒ Object
71 72 73 |
# File 'lib/coradoc/html/template_config.rb', line 71 def configuration @configuration ||= TemplateConfig.new end |
.configure {|configuration| ... } ⇒ Object
75 76 77 |
# File 'lib/coradoc/html/template_config.rb', line 75 def configure yield(configuration) if block_given? end |
.from_core_model(core_document) ⇒ Object
Transform CoreModel to HTML-ready structure
199 200 201 |
# File 'lib/coradoc/html.rb', line 199 def self.from_core_model(core_document) Transform::FromCoreModel.transform(core_document) end |
.from_file(filename) ⇒ Object
Parse HTML file
110 111 112 113 |
# File 'lib/coradoc/html.rb', line 110 def self.from_file(filename, **) content = File.read(filename) parse(content, **) end |
.handles_model?(model) ⇒ Boolean
Check if this format can transform the given model to CoreModel
HTML uses Nokogiri as its model layer. Accepts Nokogiri nodes and CoreModel objects (pass-through).
185 186 187 188 189 |
# File 'lib/coradoc/html.rb', line 185 def self.handles_model?(model) model.is_a?(Nokogiri::XML::Node) || model.is_a?(Nokogiri::XML::Document) || model.is_a?(Coradoc::CoreModel::Base) end |
.parse(html, options = {}) ⇒ Object
Parse HTML content and return CoreModel elements (may be an Array)
73 74 75 |
# File 'lib/coradoc/html.rb', line 73 def self.parse(html, = {}) ::Coradoc::Input::Html.to_coradoc(html, ) end |
.parse_to_core(html, options = {}) ⇒ Coradoc::CoreModel::DocumentElement
Parse HTML content directly into a CoreModel document
Unlike #parse which returns an Array of CoreModel elements, this wraps the result into a top-level DocumentElement document suitable for use with Coradoc.serialize and other CoreModel pipelines.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/coradoc/html.rb', line 86 def self.parse_to_core(html, = {}) elements = parse(html, ) return elements if elements.is_a?(Coradoc::CoreModel::Base) # Extract document title from the first heading element title = nil children = elements if elements.is_a?(Array) && !elements.empty? first = elements.first if first.is_a?(Coradoc::CoreModel::StructuralElement) && first.section? && first.level == 1 title = first.title children = first.children + elements[1..] end end Coradoc::CoreModel::DocumentElement.new( title: title, children: Array(children) ) end |
.reset_configuration! ⇒ Object
79 80 81 |
# File 'lib/coradoc/html/template_config.rb', line 79 def reset_configuration! @configuration = nil end |
.serialize(document, options = {}) ⇒ String
Serialize CoreModel document to HTML
Uses the unified Liquid template renderer.
122 123 124 125 126 127 128 |
# File 'lib/coradoc/html.rb', line 122 def self.serialize(document, = {}) validate_core_model!(document) layout = .delete(:layout) || :static renderer = Renderer.new(template_dirs: .delete(:template_dirs)) renderer.render_html5(document, layout: layout, **) end |
.serialize_as(document, format, options = {}) ⇒ String
Serialize CoreModel document to HTML with specified format
158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/coradoc/html.rb', line 158 def self.serialize_as(document, format, = {}) case format.to_sym when :static, :html_static, :classic serialize_static(document, ) when :spa, :html_spa, :modern serialize_spa(document, ) else raise ArgumentError, "Unknown output format: #{format}. " \ 'Valid formats: :static, :spa' end end |
.serialize_spa(document, config = {}) ⇒ String
Serialize CoreModel document to SPA HTML
Uses the modern theme renderer for Vue.js + Tailwind output.
148 149 150 |
# File 'lib/coradoc/html.rb', line 148 def self.serialize_spa(document, config = {}) Spa.convert(document, config) end |
.serialize_static(document, config = {}) ⇒ String
Serialize CoreModel document to static HTML
Uses the classic theme renderer for traditional HTML output.
137 138 139 |
# File 'lib/coradoc/html.rb', line 137 def self.serialize_static(document, config = {}) Static.convert(document, config) end |
.template_path_for(name) ⇒ Object
87 88 89 |
# File 'lib/coradoc/html/template_config.rb', line 87 def template_path_for(name) TemplateConfig.template_path_for(name) end |
.to_core(document) ⇒ Object
191 192 193 |
# File 'lib/coradoc/html.rb', line 191 def self.to_core(document) to_core_model(document) end |
.to_core_model(document) ⇒ Coradoc::CoreModel::Base
Transform HTML model to CoreModel
174 175 176 |
# File 'lib/coradoc/html.rb', line 174 def self.to_core_model(document) Transform::ToCoreModel.transform(document) end |
.validate_core_model!(document) ⇒ Object
Validate that input is a CoreModel type
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/coradoc/html.rb', line 59 def self.validate_core_model!(document) return document if document.nil? unless document.is_a?(Coradoc::CoreModel::Base) raise ArgumentError, 'coradoc-html only accepts CoreModel types. ' \ "Got: #{document.class}. " \ 'Transform your document to CoreModel before passing to HTML conversion.' end document end |