Added WikiLinkFilter
This commit is contained in:
parent
7d56d592cd
commit
28266d9d61
|
@ -0,0 +1,52 @@
|
||||||
|
require 'uri'
|
||||||
|
|
||||||
|
module Banzai
|
||||||
|
module Filter
|
||||||
|
# HTML filter that "fixes" relative links to files in a repository.
|
||||||
|
#
|
||||||
|
# Context options:
|
||||||
|
# :project_wiki
|
||||||
|
class WikiLinkFilter < HTML::Pipeline::Filter
|
||||||
|
|
||||||
|
def call
|
||||||
|
return doc unless project_wiki?
|
||||||
|
|
||||||
|
doc.search('a:not(.gfm)').each do |el|
|
||||||
|
process_link_attr el.attribute('href')
|
||||||
|
end
|
||||||
|
|
||||||
|
doc
|
||||||
|
end
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def project_wiki?
|
||||||
|
!context[:project_wiki].nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
def process_link_attr(html_attr)
|
||||||
|
return if html_attr.blank?
|
||||||
|
|
||||||
|
uri = URI(html_attr.value)
|
||||||
|
if uri.relative? && uri.path.present? && uri.path
|
||||||
|
html_attr.value = rebuild_wiki_uri(uri).to_s
|
||||||
|
end
|
||||||
|
rescue URI::Error
|
||||||
|
# noop
|
||||||
|
end
|
||||||
|
|
||||||
|
def rebuild_wiki_uri(uri)
|
||||||
|
uri.path = ::File.join(project_wiki_base_path, uri.path)
|
||||||
|
uri
|
||||||
|
end
|
||||||
|
|
||||||
|
def project_wiki
|
||||||
|
context[:project_wiki]
|
||||||
|
end
|
||||||
|
|
||||||
|
def project_wiki_base_path
|
||||||
|
project_wiki && project_wiki.wiki_base_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -2,8 +2,10 @@ module Banzai
|
||||||
module Pipeline
|
module Pipeline
|
||||||
class WikiPipeline < FullPipeline
|
class WikiPipeline < FullPipeline
|
||||||
def self.filters
|
def self.filters
|
||||||
@filters ||= super.insert_after(Filter::TableOfContentsFilter,
|
@filters ||= begin
|
||||||
Filter::GollumTagsFilter)
|
super.insert_after(Filter::TableOfContentsFilter, Filter::GollumTagsFilter)
|
||||||
|
.insert_after(Filter::GollumTagsFilter, Filter::WikiLinkFilter)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue