Sha256: 5884506c9eb7eae608fce39f177b757e8c9eef6f60c635553629fe7b31dba638

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true

module RenderEditorjs
  module Blocks
    # Render for  https://github.com/editor-js/image
    class Image < Base
      DEFAULT_OPTIONS = {}.freeze

      SCHEMA = YAML.safe_load(<<~YAML)
        type: object
        additionalProperties: false
        properties:
          file:
            type: object
            properties:
              url:
                type: string
            required:
            - url
          caption:
            type: string
          stretched:
            type: boolean
          withBackground:
            type: boolean
          withBorder:
            type: boolean
        required:
        - file
      YAML

      def render(data)
        return unless valid?(data)

        data = sanitize(data)
        url = data["file"]["url"]
        caption = data["caption"]
        with_border = data["withBorder"]
        with_background = data["withBackground"]
        stretched = data["stretched"]

        html_class = "picture"
        html_class += " picture--stretched" if stretched
        html_class += " picture--with-background" if with_background
        html_class += " picture--with-border" if with_border

        html_str = content_tag :div, class: html_class do
          content_tag :img, "", src: url
        end
        html_str << content_tag(:div, caption.html_safe, class: "caption").html_safe
      end

      def sanitize(data)
        %w[caption url].each do |key|
          str = Sanitize.fragment(data[key], remove_contents: true).strip
          str.gsub!("&amp;", "&") if key == "url"
          data[key] = str
        end

        data
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
render_editorjs-0.1.0 lib/render_editorjs/blocks/image.rb