Sha256: fdea7b8a5f16daaed07b4876a25a3fbe0ee4bcc23118769721032ad318b1b1d3

Contents?: true

Size: 901 Bytes

Versions: 4

Compression:

Stored size: 901 Bytes

Contents

# frozen_string_literal: true

require 'singleton'
require 'terser'

module CKEditor5::Rails::Assets
  class WebComponentBundle
    include ActionView::Helpers::TagHelper
    include Singleton

    WEBCOMPONENTS_PATH = File.join(__dir__, 'webcomponents')
    WEBCOMPONENTS_MODULES = [
      'utils.mjs',
      'components/editable.mjs',
      'components/ui-part.mjs',
      'components/editor.mjs',
      'components/context.mjs'
    ].freeze

    def source
      @source ||= compress_source(raw_source)
    end

    def to_html
      @to_html ||= tag.script(source, type: 'module', nonce: true)
    end

    private

    def raw_source
      @raw_source ||= WEBCOMPONENTS_MODULES.map do |file|
        File.read(File.join(WEBCOMPONENTS_PATH, file))
      end.join("\n")
    end

    def compress_source(code)
      Terser.new(compress: true, mangle: true).compile(code).html_safe
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ckeditor5-1.23.4 lib/ckeditor5/rails/assets/webcomponent_bundle.rb
ckeditor5-1.23.2 lib/ckeditor5/rails/assets/webcomponent_bundle.rb
ckeditor5-1.23.1 lib/ckeditor5/rails/assets/webcomponent_bundle.rb
ckeditor5-1.23.0 lib/ckeditor5/rails/assets/webcomponent_bundle.rb