diff options
author | Xavier Noria <fxn@hashref.com> | 2017-02-07 12:51:49 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-07 12:51:49 -0800 |
commit | 770e685c22ba84a8b04d317a434cf2565f378c68 (patch) | |
tree | f070ad0d880fde2717a9939862d1272ba01f7929 /guides | |
parent | 6599e07674d2389de45b91a11d3be5eb0fbd92f3 (diff) | |
parent | ea141d62dfbb8cb02f20137e75da0fa9977e84c8 (diff) | |
download | rails-770e685c22ba84a8b04d317a434cf2565f378c68.tar.gz rails-770e685c22ba84a8b04d317a434cf2565f378c68.tar.bz2 rails-770e685c22ba84a8b04d317a434cf2565f378c68.zip |
Merge pull request #27232 from robin850/guides-linking
Improve linking inside guides
Diffstat (limited to 'guides')
-rw-r--r-- | guides/rails_guides/markdown/renderer.rb | 43 | ||||
-rw-r--r-- | guides/source/5_0_release_notes.md | 2 |
2 files changed, 43 insertions, 2 deletions
diff --git a/guides/rails_guides/markdown/renderer.rb b/guides/rails_guides/markdown/renderer.rb index deab741023..97df6f0559 100644 --- a/guides/rails_guides/markdown/renderer.rb +++ b/guides/rails_guides/markdown/renderer.rb @@ -15,6 +15,16 @@ module RailsGuides HTML end + def link(url, title, content) + if url.start_with?('http://api.rubyonrails.org') + %(<a href="#{api_link(url)}">#{content}</a>) + elsif title + %(<a href="#{url}" title="#{title}">#{content}</a>) + else + %(<a href="#{url}">#{content}</a>) + end + end + def header(text, header_level) # Always increase the heading level by 1, so we can use h1, h2 heading in the document header_level += 1 @@ -23,7 +33,9 @@ HTML end def paragraph(text) - if text =~ /^(TIP|IMPORTANT|CAUTION|WARNING|NOTE|INFO|TODO)[.:]/ + if text =~ %r{^NOTE:\s+Defined\s+in\s+<code>(.*?)</code>\.?$} + %(<div class="note"><p>Defined in <code><a href="#{github_file_url($1)}">#{$1}</a></code>.</p></div>) + elsif text =~ /^(TIP|IMPORTANT|CAUTION|WARNING|NOTE|INFO|TODO)[.:]/ convert_notes(text) elsif text.include?("DO NOT READ THIS FILE ON GITHUB") elsif text =~ /^\[<sup>(\d+)\]:<\/sup> (.+)$/ @@ -79,6 +91,35 @@ HTML %(<div class="#{css_class}"><p>#{$2.strip}</p></div>) end end + + def github_file_url(file_path) + root, rest = file_path.split('/', 2) + + case root + when 'abstract_controller', 'action_controller', 'action_dispatch' + path = ['actionpack', 'lib', root, rest].join('/') + when 'active_support', 'active_record', 'active_model', 'action_view', + 'action_cable', 'action_mailer', 'action_pack', 'active_job' + path = [root.sub('_', ''), 'lib', root, rest].join('/') + else + path = file_path + end + + ["https://github.com/rails/rails/tree", version || 'master', path].join('/') + end + + def version + ENV['RAILS_VERSION'] + end + + def api_link(url) + if version && !url.match(/v\d\.\d\.\d/) + url.insert(url.index('.org')+4, "/#{version}") + url.sub('http://edgeapi', 'http://api') if url.include?('edgeapi') + end + + url + end end end end diff --git a/guides/source/5_0_release_notes.md b/guides/source/5_0_release_notes.md index 24fb0ca6e1..e1b3b0a42e 100644 --- a/guides/source/5_0_release_notes.md +++ b/guides/source/5_0_release_notes.md @@ -150,7 +150,7 @@ The type of an attribute is given the opportunity to change how dirty tracking is performed. See its -[documentation](http://api.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html) +[documentation](http://api.rubyonrails.org/v5.0.1/classes/ActiveRecord/Attributes/ClassMethods.html) for a detailed write up. |