Module: Redmine::WikiFormatting::LinksHelper
- Included in:
- NullFormatter::Formatter, Textile::Formatter
- Defined in:
- lib/redmine/wiki_formatting.rb
Constant Summary
- 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.
Instance Method Details
#auto_link!(text) ⇒ Object
Destructively replaces urls into clickable links
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/redmine/wiki_formatting.rb', line 133 def auto_link!(text) text.gsub!(AUTO_LINK_RE) do all, leading, proto, url, post = $&, $1, $2, $3, $6 if leading =~ /<a\s/i || 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]==?) and ((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
155 156 157 158 159 160 161 162 163 164 |
# File 'lib/redmine/wiki_formatting.rb', line 155 def auto_mailto!(text) text.gsub!(/([\w\.!#\$%\-+.\/]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)+)/) do mail = $1 if text.match(/<a\b[^>]*>(.*)(#{Regexp.escape(mail)})(.*)<\/a>/) mail else %(<a class="email" href="mailto:#{ERB::Util.html_escape mail}">#{ERB::Util.html_escape mail}</a>).html_safe end end end |