Class: Integral::ContentRenderer
- Inherits:
-
Object
- Object
- Integral::ContentRenderer
- Defined in:
- lib/integral/content_renderer.rb
Overview
Handles the rendering of dynamic content (Widgets) within static HTML A widget could be used to list recent articles from the blog, featured content from a list, etc
Example Widget Markup <p class=‘integral-widget’ data-widget-type=‘recent_posts’ data-widget-value-tagged=‘sweet-tag’>
Constant Summary collapse
- PLACEHOLDER_SELECTOR =
Markup defining a widget
'p.integral-widget'.freeze
Class Method Summary collapse
-
.render(raw_html) ⇒ String
Renders WYSIWYG html, converting any widget placeholders to dynamic content.
-
.render_widget(type, options) ⇒ String
Renders a specific widget using the provided options.
-
.respond_with_widget_error(error) ⇒ Object
Handles widget errors.
-
.widget_not_available_message ⇒ String
Widget not available message.
-
.widget_options(placeholder_attributes) ⇒ Hash
Parse placeholder attributes to find any widget options.
-
.widgets ⇒ Array
Available widgets used to render dynamic content.
Class Method Details
.render(raw_html) ⇒ String
Renders WYSIWYG html, converting any widget placeholders to dynamic content
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/integral/content_renderer.rb', line 26 def self.render(raw_html) html = Nokogiri::HTML(raw_html) html.css(self::PLACEHOLDER_SELECTOR).each do |placeholder| = placeholder.attributes['data-widget-type']&.value placeholder.replace((, (placeholder.attributes))) end html.css('body').inner_html.html_safe end |
.render_widget(type, options) ⇒ String
Renders a specific widget using the provided options
56 57 58 59 60 61 62 63 64 |
# File 'lib/integral/content_renderer.rb', line 56 def self.(type, ) = .find { |w| w[0] == type } return unless .present? [1].constantize.render() rescue StandardError => e (e) end |
.respond_with_widget_error(error) ⇒ Object
Handles widget errors
67 68 69 70 71 |
# File 'lib/integral/content_renderer.rb', line 67 def self.(error) Rails.logger.error(error.) '<!-- Error rendering widget -->' end |
.widget_not_available_message ⇒ String
Returns Widget not available message.
74 75 76 |
# File 'lib/integral/content_renderer.rb', line 74 def self. '<!-- Widget not available -->' end |
.widget_options(placeholder_attributes) ⇒ Hash
Parse placeholder attributes to find any widget options
42 43 44 45 46 47 48 |
# File 'lib/integral/content_renderer.rb', line 42 def self.(placeholder_attributes) = {} keys = placeholder_attributes.keys.select { |key| key.starts_with?('data-widget-value-') } keys.each { |key| [key.remove('data-widget-value-').to_sym] = placeholder_attributes[key].value } end |
.widgets ⇒ Array
Returns available widgets used to render dynamic content.
12 13 14 15 16 17 18 19 |
# File 'lib/integral/content_renderer.rb', line 12 def self. = [ ['recent_posts', 'Integral::Widgets::RecentPosts'], ['swiper_list', 'Integral::Widgets::SwiperList'] ] .concat Integral. end |