Sha256: 4deb6b1a80aefac8c3a261a829406ef09dcc8675af99aafa7cbe7b361c6f6bb8

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

# frozen_string_literal: true

module Sunrise
  module WidgetsHelper
    def render_content_widget(widget, content, params = {})
      content.gsub(widget.regexp) do |sub|
        if widget.cells?
          render_cell :widgets, widget.code, matcher: widget.regexp.match(sub), params: params
        else
          render file: widget.file, locals: { matcher: widget.regexp.match(sub), params: params }
        end
      end.html_safe
    end

    def render_widgets(content, params = {})
      return if content.blank?

      ContentWidget.all.each do |widget|
        content = render_content_widget(widget, content, params[widget.code])
      end

      content = render_accordion_widget(content, params)

      content
    end

    def render_accordion_widget(content, _args = {})
      return content unless content.include?('[WIDGET:ACCORDION:START]')

      content.gsub(/\[WIDGET:ACCORDION:START\](.+)\[WIDGET:ACCORDION:END\]/m) do |text|
        items = []
        text.gsub(/\[WIDGET:ACCORDION:ITEM:START\](.+?)\[WIDGET:ACCORDION:ITEM:END\]/m) do |item_text|
          items << {
            title: item_text.gsub(/.*\[WIDGET:ACCORDION:TITLE:START\](.+)\[WIDGET:ACCORDION:TITLE:END\].*/m, '\1'),
            content: item_text.gsub(/.*\[WIDGET:ACCORDION:CONTENT:START\](.+)\[WIDGET:ACCORDION:CONTENT:END\].*/m, '\1')
          }
          ''
        end
        render_cell(:widgets, :accordion, text: text, items: items)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
translation_cms-0.1.5 app/helpers/sunrise/widgets_helper.rb