Add support for markdown links
This commit is contained in:
parent
ebf9dd464f
commit
bcb17aae16
2 changed files with 23 additions and 5 deletions
|
|
@ -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!(/\[([^\[]+)\]\(([^ ]+) \"(([^&]|(&[^q])|(&q[^u])|(&qu[^o])|(&quo[^t])|("[^;]))+)\"\)/, '<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="'
|
||||||
res.gsub!(/(\*|_)/) { |m| "\\#{$1}" }
|
m
|
||||||
res
|
else
|
||||||
|
res = %{<a target="_blank" href="#{$2}://#{$3}">#{$3}</a>}
|
||||||
|
res.gsub!(/(\*|_)/) { |m| "\\#{$1}" }
|
||||||
|
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>')
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue