Sha256: dbb360feff78ea81f500d4c9e4bdf7a4d63d02b66cb5552a83a27eb96388a208

Contents?: true

Size: 1.14 KB

Versions: 3

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

module Katalyst
  module Content
    class Table < Item
      has_rich_text :content

      attribute :heading_rows, :integer
      attribute :heading_columns, :integer

      validates :content, presence: true

      default_scope { with_rich_text_content }

      after_initialize :set_defaults

      def initialize_copy(source)
        super

        content.body = source.content&.body if source.content.is_a?(ActionText::RichText)
      end

      def self.permitted_params
        super + %i[content heading_rows heading_columns]
      end

      def valid?(context = nil)
        super(context)
      end

      def to_plain_text
        content.to_plain_text if visible?
      end

      def content=(value)
        Tables::Importer.call(self, value)

        set_defaults

        content
      end

      private

      def set_defaults
        super

        if content.present? && (fragment = content.body.fragment)
          self.heading_rows    ||= fragment.find_all("thead > tr").count
          self.heading_columns ||= fragment.find_all("tbody > tr:first-child > th").count
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
katalyst-content-2.3.2 app/models/katalyst/content/table.rb
katalyst-content-2.3.1 app/models/katalyst/content/table.rb
katalyst-content-2.3.0 app/models/katalyst/content/table.rb