Sha256: c8989703dd4b83eeb1d2ab65c7bfb51ce84b8cd0b86c923b22106d3b3460a7ba

Contents?: true

Size: 1.52 KB

Versions: 13

Compression:

Stored size: 1.52 KB

Contents

# frozen_string_literal: true

require "doc2text"
require "tempfile"

module Decidim
  module Proposals
    # This class parses a participatory text document in markdown and
    # produces Proposals in the form of sections and articles.
    #
    # This implementation uses Redcarpet Base renderer.
    # Redcarpet::Render::Base performs a callback for every block it finds, what MarkdownToProposals
    # does is to implement callbacks for the blocks which it is interested in performing some actions.
    #
    class DocToMarkdown
      MARKDOWN_MIME_TYPE = "text/markdown"
      # sometimes markdown documents are classified as text/plain
      TEXT_PLAIN_MIME_TYPE = "text/plain"
      ODT_MIME_TYPE = "application/vnd.oasis.opendocument.text"

      # Accepted mime types
      # keys: are used for dynamic help text on admin form.
      # values: are used to validate the file format of imported document.
      ACCEPTED_MIME_TYPES = {
        md: MARKDOWN_MIME_TYPE,
        odt: ODT_MIME_TYPE
      }.freeze

      # Public: Initializes the serializer with a proposal.
      def initialize(doc, mime_type)
        @doc = doc
        @transformer = case mime_type
                       # when MARKDOWN_MIME_TYPE
                       # no transformer required
                       when ODT_MIME_TYPE
                         # convert libreoffice odt to markdown
                         OdtToMarkdown.new(doc)
                       end
      end

      def to_md
        @transformer ? @transformer.to_md : @doc
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
decidim-proposals-0.29.1 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.28.4 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.29.0 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.28.3 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.29.0.rc4 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.29.0.rc3 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.29.0.rc2 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.29.0.rc1 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.28.2 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.28.1 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.28.0 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.28.0.rc5 lib/decidim/proposals/doc_to_markdown.rb
decidim-proposals-0.28.0.rc4 lib/decidim/proposals/doc_to_markdown.rb