Sha256: 1c84a468152bb06537a68be2df94259027cbc96016733ac7e82f66768a242188

Contents?: true

Size: 1.88 KB

Versions: 21

Compression:

Stored size: 1.88 KB

Contents

module Fiona7
  module LinkConverter
    class FionaToScrivito
      include ERB::Util

      def initialize(obj)
        @obj = obj
      end

      def convert(content)
        return content unless content.present?

        convert_links(content)
      end

      protected

      LINK_PATTERN = '<?\binternallink:(\d+)\b>?'
      LINK_EXPRESSION = %r(#{LINK_PATTERN})

      def link_map
        @link_map ||= Hash[@obj.attr_values["text_links"].map{|l| [l["link_id"].to_s, l]}]
      end

      def convert_links(content_attribute)
        return content_attribute unless content_attribute =~ LINK_EXPRESSION

        content_attribute.gsub(%r(#{LINK_PATTERN}(['"]?))) do
          link = link_map[$1.to_s]
          if link.blank?
            raise "Unable to convert links"
            "#{RailsConnector::DefaultCmsRoutingHelper::LINK_TO_UNREACHABLE}#{$2}"
          else

            uri = "#{cms_path(link)}#{$2}"
            html_link(link, uri)
          end
        end
      end

      def cms_path(link)
        if link["type"] == "internal"
          base = "objid:#{link['destination']}"
          base += "?#{link['search']}" if link['search'].present?
          base += "##{link['fragment']}" if link['fragment'].present?
          base
        else
          # This cleans-up pseudo-external links.
          # Such links have a external: scheme.
          link["url"].to_s.sub(/^external:/, '')
        end
      end

      def html_link(link, uri)
        subst = uri
        name, value =
          case link["tag_name"]
          when 'img', 'input'
            ['alt', link["title"] || ""]
          when 'a', 'link'
            ['title', begin link["title"] unless link["title"].blank? end]
          end
        if value
          subst << %( #{name}="#{h(value)}")
        end
        subst << %( target="#{h(link['target'])}") unless link['target'].blank?
        subst
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
infopark_fiona7-1.6.1.1.5 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.6.1.1.1 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.6.1.1.0 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.2.0.2.3 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.2.0.2.1 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.2.0.2.2 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.5.5.5.1 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.5.5.5.0 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.2.0.1.4 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.5.5.4.1 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.5.5.4.0 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.2.0.1.3 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.5.5.3.1 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.5.4.3.0 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.5.3.2.0 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.5.3.2.0.pre.beta1 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.5.2.1.0.pre.beta1 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.5.2.0.0 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.2.0.1.1 lib/fiona7/link_converter/fiona_to_scrivito.rb
infopark_fiona7-1.2.0.0.1 lib/fiona7/link_converter/fiona_to_scrivito.rb