Sha256: b8bb9bda4f3f091134fb778c236608a8b26610196e67e7b5f533ae3deab1fc1e

Contents?: true

Size: 1.47 KB

Versions: 5

Compression:

Stored size: 1.47 KB

Contents

# encoding: utf-8
require "active_support/core_ext/string/inflections"

module HTML
  class Pipeline

    class CustomLinksFilter < Filter

      LF_REGEXP = /\[\[\[([ '\.:\-\p{Word}]+)\]\]\]/
      WP_REGEXP = /\[\[([ '\.+:!\-\/\(\)\p{Word}]+)\]\]/

      LF_TITLE = "Lien du wiki interne LinuxFr.org"
      WP_TITLE = "Définition Wikipédia"

      # Don't look for links in text nodes that are children of these elements
      IGNORE_PARENTS = %w(pre code a).to_set

      def call
        doc.search('.//text()').each do |node|
          content = node.to_html
          next if !content.include?('[[')
          next if has_ancestor?(node, IGNORE_PARENTS)
          html = content
          html = process_internal_wiki_links html
          html = process_wikipedia_links html
          next if html == content
          node.replace(html)
        end
        doc
      end

      def process_internal_wiki_links(text)
        base_url = "//#{context[:host]}/wiki"
        text.gsub(LF_REGEXP) do
          word = $1
          slug = word.parameterize
          "<a href=\"#{base_url}/#{slug}\" title=\"#{LF_TITLE}\">#{word}</a>"
        end
      end

      def process_wikipedia_links(text)
        text.gsub(WP_REGEXP) do
          word = $1
          parts = word.split(":")
          parts.shift if %w(de en es eo wikt).include?(parts.first)
          "<a href=\"https://fr.wikipedia.org/wiki/#{word}\" title=\"#{WP_TITLE}\")>#{parts.join ':'}</a>"
        end
      end

    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
html-pipeline-linuxfr-0.15.7 lib/html/pipeline/custom_links_filter.rb
html-pipeline-linuxfr-0.15.6 lib/html/pipeline/custom_links_filter.rb
html-pipeline-linuxfr-0.15.5 lib/html/pipeline/custom_links_filter.rb
html-pipeline-linuxfr-0.15.4 lib/html/pipeline/custom_links_filter.rb
html-pipeline-linuxfr-0.15.3 lib/html/pipeline/custom_links_filter.rb