Module: Redmine::WikiFormatting::LinksHelper

Included in:
NullFormatter::Formatter, Textile::Formatter
Defined in:
lib/redmine/wiki_formatting.rb

Constant Summary collapse

%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
 )
 ((?:&gt;)?|[^[:alnum:]_\=\/;\(\)]*?)               # post
 (?=<|\s|$)
}x

Instance Method Summary collapse

Instance Method Details

#auto_link!(text) ⇒ Object

Destructively replaces urls into clickable links


115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/redmine/wiki_formatting.rb', line 115

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


137
138
139
140
141
142
143
144
145
146
# File 'lib/redmine/wiki_formatting.rb', line 137

def auto_mailto!(text)
  text.gsub!(/([\w\.!#\$%\-+.][email protected][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