[ruby/rdoc] Generate meta tags based on page's content
(https://github.com/ruby/rdoc/pull/1091) https://github.com/ruby/rdoc/commit/716bc16a7d
This commit is contained in:
parent
f45eb3dcb9
commit
ed993b5bcc
@ -780,4 +780,19 @@ class RDoc::Generator::Darkfish
|
||||
template
|
||||
end
|
||||
|
||||
# Returns an excerpt of the content for usage in meta description tags
|
||||
def excerpt(content)
|
||||
text = content.is_a?(RDoc::Comment) ? content.text : content
|
||||
|
||||
# Match from a capital letter to the first period, discarding any links, so
|
||||
# that we don't end up matching badges in the README
|
||||
first_paragraph_match = text.match(/[A-Z][^\.:\/]+\./)
|
||||
return text[0...150].gsub(/\n/, " ").squeeze(" ") unless first_paragraph_match
|
||||
|
||||
extracted_text = first_paragraph_match[0]
|
||||
second_paragraph = first_paragraph_match.post_match.match(/[A-Z][^\.:\/]+\./)
|
||||
extracted_text << " " << second_paragraph[0] if second_paragraph
|
||||
|
||||
extracted_text[0...150].gsub(/\n/, " ").squeeze(" ")
|
||||
end
|
||||
end
|
||||
|
@ -3,6 +3,28 @@
|
||||
|
||||
<title><%= h @title %></title>
|
||||
|
||||
<%- if defined?(klass) -%>
|
||||
<meta name="keywords" content="ruby,<%= h "#{klass.type},#{klass.full_name}" %>">
|
||||
|
||||
<%- if klass.comment.empty? -%>
|
||||
<meta name="description" content="Documentation for the <%= h "#{klass.full_name} #{klass.type}" %>">
|
||||
<%- else -%>
|
||||
<meta name="description" content="<%= h "#{klass.type} #{klass.full_name}: #{excerpt(klass.comment)}" %>">
|
||||
<%- end -%>
|
||||
<%- elsif defined?(file) -%>
|
||||
<meta name="keywords" content="ruby,documentation,<%= h file.page_name %>">
|
||||
<meta name="description" content="<%= h "#{file.page_name}: #{excerpt(file.comment)}" %>">
|
||||
<%- elsif @title -%>
|
||||
<meta name="keywords" content="ruby,documentation,<%= h @title %>">
|
||||
|
||||
<%- if @options.main_page and
|
||||
main_page = @files.find { |f| f.full_name == @options.main_page } then %>
|
||||
<meta name="description" content="<%= h "#{@title}: #{excerpt(main_page.comment)}" %>">
|
||||
<%- else -%>
|
||||
<meta name="description" content="Documentation for <%= h @title %>">
|
||||
<%- end -%>
|
||||
<%- end -%>
|
||||
|
||||
<script type="text/javascript">
|
||||
var rdoc_rel_prefix = "<%= h asset_rel_prefix %>/";
|
||||
var index_rel_prefix = "<%= h rel_prefix %>/";
|
||||
|
@ -322,6 +322,51 @@ class TestRDocGeneratorDarkfish < RDoc::TestCase
|
||||
assert_main_title(File.binread('index.html'), title)
|
||||
end
|
||||
|
||||
def test_meta_tags_for_index
|
||||
@options.title = "My awesome Ruby project"
|
||||
@g.generate
|
||||
|
||||
content = File.binread("index.html")
|
||||
|
||||
assert_include(content, '<meta name="keywords" content="ruby,documentation,My awesome Ruby project">')
|
||||
assert_include(content, '<meta name="description" content="Documentation for My awesome Ruby project">')
|
||||
end
|
||||
|
||||
def test_meta_tags_for_classes
|
||||
top_level = @store.add_file("file.rb")
|
||||
top_level.add_class(@klass.class, @klass.name)
|
||||
inner = @klass.add_class(RDoc::NormalClass, "Inner")
|
||||
inner.add_comment("This is a normal class. It is fully documented.", top_level)
|
||||
|
||||
@g.generate
|
||||
|
||||
content = File.binread("Klass/Inner.html")
|
||||
assert_include(content, '<meta name="keywords" content="ruby,class,Klass::Inner">')
|
||||
assert_include(
|
||||
content,
|
||||
'<meta name="description" content="class Klass::Inner: This is a normal class. It is fully documented.">',
|
||||
)
|
||||
end
|
||||
|
||||
def test_meta_tags_for_pages
|
||||
top_level = @store.add_file("CONTRIBUTING.rdoc", parser: RDoc::Parser::Simple)
|
||||
top_level.comment = <<~RDOC
|
||||
= Contributing
|
||||
|
||||
Here are the instructions for contributing. Begin by installing Ruby.
|
||||
RDOC
|
||||
|
||||
@g.generate
|
||||
|
||||
content = File.binread("CONTRIBUTING_rdoc.html")
|
||||
assert_include(content, '<meta name="keywords" content="ruby,documentation,CONTRIBUTING">')
|
||||
assert_include(
|
||||
content,
|
||||
"<meta name=\"description\" content=\"CONTRIBUTING: Contributing Here are the instructions for contributing." \
|
||||
" Begin by installing Ruby.\">",
|
||||
)
|
||||
end
|
||||
|
||||
##
|
||||
# Asserts that +filename+ has a link count greater than 1 if hard links to
|
||||
# @tmpdir are supported.
|
||||
|
Loading…
x
Reference in New Issue
Block a user