Module: Redmine::WikiFormatting::LinksHelper
- Included in:
- Markdown::Formatter, NullFormatter::Formatter, Textile::Formatter
- Defined in:
- lib/redmine/wiki_formatting/links_helper.rb
Constant Summary collapse
- AUTO_LINK_RE =
%r{ ( # leading text <\w+[^>]*?>| # leading HTML tag, or [\s\(\[,;]| # leading punctuation, or ^ # beginning of line ) ( (?:https?://)| # protocol spec, or (?:s?ftps?://)| (?:www\.) # www.* ) ( ([^<]\S*?) # url (\/)? # slash ) ((?:>)?|[^[:alnum:]_\=\/;\(\)\-]*?) # post (?=<|\s|$) }x
Instance Method Summary collapse
-
#auto_link!(text) ⇒ Object
Destructively replaces urls into clickable links.
-
#auto_mailto!(text) ⇒ Object
Destructively replaces email addresses into clickable links.
- #restore_redmine_links(html) ⇒ Object
Instance Method Details
#auto_link!(text) ⇒ Object
Destructively replaces urls into clickable links
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/redmine/wiki_formatting/links_helper.rb', line 45 def auto_link!(text) text.gsub!(AUTO_LINK_RE) do all, leading, proto, url, post = $&, $1, $2, $3, $6 if /<a\s/i.match?(leading) || /![<>=]?/.match?(leading) # don't replace URLs that are already linked # and URLs prefixed with ! !> !< != (textile images) all else # Idea below : an URL with unbalanced parenthesis and # ending by ')' is put into external parenthesis if url[-1] == ")" && ((url.count("(") - url.count(")")) < 0) url = url[0..-2] # discard closing parenthesis from url post = ")" + post # add closing parenthesis to post end content = proto + url href = "#{proto=="www."?"http://www.":proto}#{url}" %(#{leading}<a class="external" href="#{ERB::Util.html_escape href}">#{ERB::Util.html_escape content}</a>#{post}).html_safe end end end |
#auto_mailto!(text) ⇒ Object
Destructively replaces email addresses into clickable links
67 68 69 70 71 72 73 74 75 76 |
# File 'lib/redmine/wiki_formatting/links_helper.rb', line 67 def auto_mailto!(text) text.gsub!(/([\w\.!#\$%\-+.\/]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)+)/) do mail = $1 if /<a\b[^>]*>(.*)(#{Regexp.escape(mail)})(.*)<\/a>/.match?(text) mail else %(<a class="email" href="mailto:#{ERB::Util.html_escape mail}">#{ERB::Util.html_escape mail}</a>).html_safe end end end |
#restore_redmine_links(html) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/redmine/wiki_formatting/links_helper.rb', line 78 def restore_redmine_links(html) # restore wiki links eg. [[Foo]] html.gsub!(%r{\[<a href="(.*?)">(.*?)</a>\]}) do "[[#{$2}]]" end # restore Redmine links with double-quotes, eg. version:"1.0" html.gsub!(/(\w):"(.+?)"/) do "#{$1}:\"#{$2}\"" end # restore user links with @ in login name eg. [@[email protected]] html.gsub!(%r{[@\A]<a(\sclass="email")? href="mailto:(.*?)">(.*?)</a>}) do "@#{$2}" end # restore user links with @ in login name eg. [user:[email protected]] html.gsub!(%r{\buser:<a(\sclass="email")? href="mailto:(.*?)">(.*?)<\/a>}) do "user:#{$2}" end # restore attachments links with @ in file name eg. [attachment:[email protected]] html.gsub!(%r{\battachment:<a(\sclass="email")? href="mailto:(.*?)">(.*?)</a>}) do "attachment:#{$2}" end # restore hires images which are misrecognized as email address eg. [[email protected]] html.gsub!(%r{<a(\sclass="email")? href="mailto:[^"]+@\dx\.(bmp|gif|jpg|jpe|jpeg|png)">(.*?)</a>}) do "#{$3}" end html end |