Module: Redmine::WikiFormatting::LinksHelper
- Included in:
- Markdown::Formatter, NullFormatter::Formatter, Textile::Formatter
- Defined in:
- lib/redmine/wiki_formatting.rb
Overview
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
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 |
#restore_redmine_links(html) ⇒ Object
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/redmine/wiki_formatting.rb', line 166 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. [@jsmith@somenet.foo] html.gsub!(%r{[@\A]<a(\sclass="email")? href="mailto:(.*?)">(.*?)</a>}) do "@#{$2}" end # restore user links with @ in login name eg. [user:jsmith@somenet.foo] html.gsub!(%r{\buser:<a(\sclass="email")? href="mailto:(.*?)">(.*?)<\/a>}) do "user:#{$2}" end # restore attachments links with @ in file name eg. [attachment:image@2x.png] html.gsub!(%r{\battachment:<a(\sclass="email")? href="mailto:(.*?)">(.*?)</a>}) do "attachment:#{$2}" end # restore hires images which are misrecognized as email address eg. [printscreen@2x.png] html.gsub!(%r{<a(\sclass="email")? href="mailto:[^"]+@\dx\.(bmp|gif|jpg|jpe|jpeg|png)">(.*?)</a>}) do "#{$3}" end html end |