diff --git a/app/logical/d_text.rb b/app/logical/d_text.rb
index b851798b7..9de9018a3 100644
--- a/app/logical/d_text.rb
+++ b/app/logical/d_text.rb
@@ -17,7 +17,18 @@ class DText
str.gsub!(/\n/m, "
")
str.gsub!(/\[b\](.+?)\[\/b\]/i, '\1')
str.gsub!(/\[i\](.+?)\[\/i\]/i, '\1')
- str.gsub!(/("[^"]+":(https?:\/\/|\/)\S+|https?:\/\/\S+)/m) do |url|
+ str.gsub!(/\[spoilers?\](.+?)(?:\[\/?spoilers?\]|$)/, '\1')
+
+ str = parse_links(str)
+ str = parse_aliased_wiki_links(str)
+ str = parse_wiki_links(str)
+ str = parse_post_links(str)
+ str = parse_id_links(str)
+ str
+ end
+
+ def self.parse_links(str)
+ str.gsub(/("[^"]+":(https?:\/\/|\/)\S+|https?:\/\/\S+)/m) do |url|
if url =~ /^"([^"]+)":(.+)$/
text = $1
url = $2
@@ -34,17 +45,6 @@ class DText
'' + text + '' + ch
end
- # str.gsub!(/\[url\](http.+?)\[\/url\]/i) do
- # %{#{$1}}
- # end
- # str.gsub!(/\[url=(http.+?)\](.+?)\[\/url\]/m) do
- # %{#{$2}}
- # end
- str = parse_aliased_wiki_links(str)
- str = parse_wiki_links(str)
- str = parse_post_links(str)
- str = parse_id_links(str)
- str
end
def self.parse_aliased_wiki_links(str)
@@ -121,8 +121,6 @@ class DText
unless options[:inline]
str.gsub!(/\s*\[quote\]\s*/m, "\n\n[quote]\n\n")
str.gsub!(/\s*\[\/quote\]\s*/m, "\n\n[/quote]\n\n")
- str.gsub!(/\s*\[spoilers?\](?!\])\s*/m, "\n\n[spoiler]\n\n")
- str.gsub!(/\s*\[\/spoilers?\]\s*/m, "\n\n[/spoiler]\n\n")
end
str.gsub!(/(?:\r?\n){3,}/, "\n\n")
@@ -163,16 +161,6 @@ class DText
""
end
- when /\[spoilers?\](?!\])/
- stack << "div"
- '
' + parse_inline(block) + "
" end diff --git a/test/unit/dtext_test.rb b/test/unit/dtext_test.rb index 33f1441ba..3f3b9d680 100644 --- a/test/unit/dtext_test.rb +++ b/test/unit/dtext_test.rb @@ -17,8 +17,10 @@ class DTextTest < ActiveSupport::TestCase end def test_spoilers - assert_equal("this is
an inline spoiler
.
", p("this is [spoiler]an inline spoiler[/spoiler].")) - assert_equal("this is
a block spoiler
.
", p("this is\n\n[spoiler]\na block spoiler\n[/spoiler].")) + assert_equal("", p("this is [spoiler]an inline spoiler[/spoiler].")) + assert_equal("", p("this is\n\n[spoiler]\na block spoiler\n[/spoiler].")) + assert_equal("", p("[spoiler]this is a spoiler with no closing tag\nnew text")) + assert_equal("", p("[spoiler]this is [spoiler]a nested[/spoiler] spoiler[/spoiler]")) end def test_paragraphs