Sha256: 9b73f7eca9813989d5a0d5183ceffd9b8175ff06a242d2156a3133590fb54a3e

Contents?: true

Size: 1.87 KB

Versions: 6

Compression:

Stored size: 1.87 KB

Contents

module Lookbook
  class PreviewsController < Lookbook::ApplicationController
    include TargetableConcern
    include WithPreviewControllerConcern

    layout false

    before_action :permit_framing, only: [:show]

    def self.controller_path
      "lookbook/previews"
    end

    def index
      respond_to do |format|
        format.json do
          render(
            json: Lookbook.previews.map do |preview|
              {
                name: preview.name,
                scenarios: preview.scenarios.map { |scenario|
                  case scenario
                  when Lookbook::ScenarioEntity
                    scenario_json(scenario)
                  when Lookbook::ScenarioGroupEntity
                    {
                      name: scenario.name,
                      examples: scenario.scenarios.map { |s| scenario_json(s) }
                    }
                  end
                }
              }
            end
          )
        end
      end
    end

    def show
      raise_not_found("Preview not found") unless @target

      @preview_html = preview_controller.process(
        :render_in_layout_to_string,
        "lookbook/previews/group",
        inspector_data,
        layout: @preview.layout,
        append_html: (iframe_content_scripts if embedded?)
      )
    end

    private

    def embedded?
      params[:lookbook_embed] == "true"
    end

    def iframe_content_scripts
      render_to_string("lookbook/partials/_iframe_content_scripts", layout: nil)
    end

    def scenario_json(scenario)
      {
        name: scenario.name,
        inspect_path: scenario.url_path,
        preview_path: scenario.preview_path
      }
    end

    def permit_framing
      headers["X-Frame-Options"] = Lookbook.config.preview_embeds.policy if embedded?
      headers["X-Frame-Options"] = "SAMEORIGIN" if headers["X-Frame-Options"]&.upcase == "DENY"
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
lookbook-2.3.4 app/controllers/lookbook/previews_controller.rb
lookbook-2.3.3 app/controllers/lookbook/previews_controller.rb
lookbook-2.3.2 app/controllers/lookbook/previews_controller.rb
lookbook-2.3.0 app/controllers/lookbook/previews_controller.rb
lookbook-2.2.2 app/controllers/lookbook/previews_controller.rb
lookbook-2.2.1 app/controllers/lookbook/previews_controller.rb