Class: HTML::Pipeline::CustomLinksFilter

Inherits:
Filter
  • Object
show all
Defined in:
lib/html/pipeline/custom_links_filter.rb

Constant Summary collapse

LF_REGEXP =
/\[\[\[([ '\.:\-\p{Word}]+)\]\]\]/
WP_REGEXP =
/\[\[([ '\.+:!\-\(\)\p{Word}]+)\]\]/
LF_TITLE =
"Lien du wiki interne LinuxFr.org"
WP_TITLE =
"Définition Wikipédia"
IGNORE_PARENTS =

Don’t look for links in text nodes that are children of these elements

%w(pre code a).to_set

Instance Attribute Summary

Attributes inherited from Filter

#context, #result

Instance Method Summary collapse

Methods inherited from Filter

#base_url, call, #current_user, #doc, #has_ancestor?, #html, #initialize, #needs, #parse_html, #repository, to_document, to_html, #validate

Constructor Details

This class inherits a constructor from HTML::Pipeline::Filter

Instance Method Details

#callObject



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/html/pipeline/custom_links_filter.rb', line 18

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


32
33
34
35
36
37
38
39
# File 'lib/html/pipeline/custom_links_filter.rb', line 32

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


41
42
43
44
45
46
47
48
# File 'lib/html/pipeline/custom_links_filter.rb', line 41

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