class Kramdown::Converter::Prismic

Constants

TYPOGRAPHIC_SYMS

Public Instance Methods

convert(root) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 8
def convert(root)
  cleanup_ast(root).map do |child|
    convert_element(child)
  end.compact.flatten
end

Private Instance Methods

cleanup_ast(root) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 16
def cleanup_ast(root)
  remove_blanks(root)
  root.children.map do |child|
    elements = []
    extract_non_nestable_elements(child, elements)
    [child, elements]
  end.flatten.compact
end
convert_a(element) click to toggle source

This can only apply when an link with an image inside has been detected

# File lib/kramdown/converter/prismic.rb, line 131
def convert_a(element)
  image = element.children.first
  {
    type: 'image',
    content: {
      text: '',
      spans: []
    },
    data: {
      origin: {
        url: image.attr['src']
      },
      alt: image.attr['alt'],
      linkTo: {
        url: element.attr['href']
      }
    }
  }
end
convert_blockquote(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 105
def convert_blockquote(element)
  {
    type: 'preformatted',
    content: extract_content(element)
  }
end
convert_codeblock(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 95
def convert_codeblock(element)
  {
    type: 'preformatted',
    content: {
      text: element.value,
      spans: []
    }
  }
end
convert_comment(_element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 202
def convert_comment(_element)
  warning('translating comment is not supported')
  nil
end
convert_dl(_element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 192
def convert_dl(_element)
  warning('translating dl is not supported')
  nil
end
convert_element(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 54
def convert_element(element)
  send("convert_#{element.type}", element)
end
convert_em(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 155
def convert_em(element)
  convert_sub_html_element(element, 'em')
end
convert_header(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 58
def convert_header(element)
  {
    type: "heading#{element.options[:level]}",
    content: extract_content(element)
  }
end
convert_hr(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 112
def convert_hr(element); end
convert_html_element(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 168
def convert_html_element(element)
  if element.value == 'iframe'
    {
      content: {
        spans: [],
        text: ''
      },
      type: 'embed',
      data: {
        embed_url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
        type: 'link'
      }
    }
  else
    warning('translating html elements is not supported')
    nil
  end
end
convert_img(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 114
def convert_img(element)
  {
    type: 'image',
    content: {
      text: '',
      spans: []
    },
    data: {
      origin: {
        url: element.attr['src']
      },
      alt: element.attr['alt']
    }
  }
end
convert_li(type, element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 88
def convert_li(type, element)
  {
    type: type,
    content: extract_content(element)
  }
end
convert_list(element, type) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 82
def convert_list(element, type)
  element.children.map do |child|
    convert_li(type, child)
  end
end
convert_math(_element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 197
def convert_math(_element)
  warning('translating math is not supported')
  nil
end
convert_ol(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 74
def convert_ol(element)
  convert_list(element, 'o-list-item')
end
convert_p(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 65
def convert_p(element)
  return nil if element.children.size.zero?

  {
    type: 'paragraph',
    content: extract_content(element)
  }
end
convert_raw(_element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 212
def convert_raw(_element)
  warning('translating raw is not supported')
  nil
end
convert_strong(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 151
def convert_strong(element)
  convert_sub_html_element(element, 'strong')
end
convert_sub_html_element(element, type) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 159
def convert_sub_html_element(element, type)
  content = extract_content(element)
  content[:spans].push({ type: type, start: 0, end: content[:text].size })
  {
    type: 'paragraph',
    content: content
  }
end
convert_table(_element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 187
def convert_table(_element)
  warning('translating table is not supported')
  nil
end
convert_text(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 217
def convert_text(element)
  {
    type: 'paragraph',
    content: {
      text: element.value,
      spans: []
    }
  }
end
convert_ul(element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 78
def convert_ul(element)
  convert_list(element, 'list-item')
end
convert_xml_comment(_element) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 207
def convert_xml_comment(_element)
  warning('translating xml comment is not supported')
  nil
end
extract_content(element, memo = { text: '', spans: [] }) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 227
def extract_content(element, memo = { text: '', spans: [] })
  element.children.each_with_object(memo) do |child, memo2|
    send("extract_span_#{child.type}", child, memo2)
  end
end
extract_non_nestable_elements(child, elements) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 34
def extract_non_nestable_elements(child, elements)
  child.children = child.children.each_with_object([]) do |element, memo|
    if element.type == :a && element.children.size == 1 && element.children.first.type == :img
      elements << element
    elsif element.type == :img
      elements << element
      if child.children.size > 1
        warning('images inside content will be moved to the top level and may be rendered differently')
      end
    elsif element.type == :ul
      warning('nested list moved to the top level')
      elements << element
      extract_non_nestable_elements(element, elements)
    else
      memo << element
      extract_non_nestable_elements(element, elements)
    end
  end
end
extract_span_a(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 246
def extract_span_a(element, memo)
  insert_span(element, memo, {
                type: 'hyperlink',
                data: {
                  url: element.attr['href']
                }
              })
end
extract_span_abbreviation(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 288
def extract_span_abbreviation(element, memo)
  warning('translating abbreviation is not supported')
  memo[:text] += element.value
end
extract_span_br(_element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 271
def extract_span_br(_element, memo)
  memo[:text] += "\n"
end
extract_span_codespan(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 275
def extract_span_codespan(element, memo)
  warning('translating inline code is not supported')
  memo[:text] += element.value
end
extract_span_em(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 261
def extract_span_em(element, memo)
  insert_span(element, memo, {
                type: 'em'
              })
end
extract_span_entity(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 311
def extract_span_entity(element, memo)
  memo[:text] += element.value.char
end
extract_span_footnote(_element, _memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 284
def extract_span_footnote(_element, _memo)
  warning('translating footnote is not supported')
end
extract_span_html_element(_element, _memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 280
def extract_span_html_element(_element, _memo)
  warning('translating html elements is not supported')
end
extract_span_p(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 267
def extract_span_p(element, memo)
  extract_content(element, memo)
end
extract_span_smart_quote(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 315
def extract_span_smart_quote(element, memo)
  memo[:text] += Utils::Entities.entity(element.value.to_s).char
end
extract_span_strong(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 255
def extract_span_strong(element, memo)
  insert_span(element, memo, {
                type: 'strong'
              })
end
extract_span_text(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 241
def extract_span_text(element, memo)
  memo[:text] += element.value
  memo
end
extract_span_typographic_sym(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 306
def extract_span_typographic_sym(element, memo)
  value = TYPOGRAPHIC_SYMS[element.value].map(&:char).join('')
  memo[:text] += value
end
extract_span_xml_comment(element, memo) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 293
def extract_span_xml_comment(element, memo)
  warning('translating xml comment is not supported')
end
insert_span(element, memo, span) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 233
def insert_span(element, memo, span)
  span[:start] = memo[:text].size
  extract_content(element, memo)
  span[:end] = memo[:text].size
  memo[:spans] << span
  memo
end
remove_blanks(root) click to toggle source
# File lib/kramdown/converter/prismic.rb, line 25
def remove_blanks(root)
  root.children = root.children.each_with_object([]) do |child, memo|
    unless child.type == :blank
      remove_blanks(child)
      memo << child
    end
  end
end