Add support for markdown links

This commit is contained in:
livefromthemoon@gmail.com 2010-10-30 19:24:46 +02:00
parent ebf9dd464f
commit bcb17aae16
2 changed files with 23 additions and 5 deletions

View file

@ -19,6 +19,9 @@ module StatusMessagesHelper
# next line is important due to XSS! (h is rail's make_html_safe-function) # next line is important due to XSS! (h is rail's make_html_safe-function)
message = h(message).html_safe message = h(message).html_safe
message.gsub!(/\[([^\[]+)\]\(([^ ]+) \&quot;(([^&]|(&[^q])|(&q[^u])|(&qu[^o])|(&quo[^t])|(&quot[^;]))+)\&quot;\)/, '<a href="\2" title="\3">\1</a>')
message.gsub!(/\[([^\[]+)\]\(([^ ]+)\)/, '<a href="\2">\1</a>')
message.gsub!(/( |^)(www\.[^ ]+\.[^ ])/) do |m| message.gsub!(/( |^)(www\.[^ ]+\.[^ ])/) do |m|
res = "#{$1}http://#{$2}" res = "#{$1}http://#{$2}"
res.gsub!(/^(\*|_)$/) { |m| "\\#{$1}" } res.gsub!(/^(\*|_)$/) { |m| "\\#{$1}" }
@ -29,13 +32,16 @@ module StatusMessagesHelper
res.gsub!(/(\*|_)/) { |m| "\\#{$1}" } res.gsub!(/(\*|_)/) { |m| "\\#{$1}" }
res res
end end
message.gsub!(/(https|http|ftp):\/\/([^ ]+)/) do |m| message.gsub!(/(<a href=")?(https|http|ftp):\/\/([^ ]+)/) do |m|
res = %{<a target="_blank" href="#{$1}://#{$2}">#{$2}</a>} if $1 == '<a href="'
m
else
res = %{<a target="_blank" href="#{$2}://#{$3}">#{$3}</a>}
res.gsub!(/(\*|_)/) { |m| "\\#{$1}" } res.gsub!(/(\*|_)/) { |m| "\\#{$1}" }
res res
end end
end
# markdown
message.gsub!(/([^\\]|^)\*\*(([^*]|([^*]\*[^*]))*[^*\\])\*\*/, '\1<strong>\2</strong>') message.gsub!(/([^\\]|^)\*\*(([^*]|([^*]\*[^*]))*[^*\\])\*\*/, '\1<strong>\2</strong>')
message.gsub!(/([^\\]|^)__(([^_]|([^_]_[^_]))*[^_\\])__/, '\1<strong>\2</strong>') message.gsub!(/([^\\]|^)__(([^_]|([^_]_[^_]))*[^_\\])__/, '\1<strong>\2</strong>')
message.gsub!(/([^\\]|^)\*([^*]*[^\\])\*/, '\1<em>\2</em>') message.gsub!(/([^\\]|^)\*([^*]*[^\\])\*/, '\1<em>\2</em>')

View file

@ -104,6 +104,18 @@ describe StatusMessagesHelper do
end end
end end
describe "links" do
it "should be recognized without title attribute" do
message = "[link text](http://someurl.com) [link text](http://someurl.com)"
make_links(message).should == '<a href="http://someurl.com">link text</a> <a href="http://someurl.com">link text</a>'
end
it "should be recognized with title attribute" do
message = '[link text](http://someurl.com "some title") [link text](http://someurl.com "some title")'
make_links(message).should == '<a href="http://someurl.com" title="some title">link text</a> <a href="http://someurl.com" title="some title">link text</a>'
end
end
it "should allow escaping" do it "should allow escaping" do
message = '*some text* \\*some text* \\**some text* _some text_ \\_some text_ \\__some text_' message = '*some text* \\*some text* \\**some text* _some text_ \\_some text_ \\__some text_'
make_links(message).should == "<em>some text</em> *some text<em> *</em>some text <em>some text</em> _some text<em> _</em>some text" make_links(message).should == "<em>some text</em> *some text<em> *</em>some text <em>some text</em> _some text<em> _</em>some text"