diff --git a/app/logical/d_text.rb b/app/logical/d_text.rb index 76c665e32..a516dcef7 100644 --- a/app/logical/d_text.rb +++ b/app/logical/d_text.rb @@ -131,6 +131,8 @@ class DText str.gsub!(/\s*\[\/quote\]\s*/m, "\n\n[/quote]\n\n") str.gsub!(/\s*\[code\]\s*/m, "\n\n[code]\n\n") str.gsub!(/\s*\[\/code\]\s*/m, "\n\n[/code]\n\n") + str.gsub!(/\[spoilers?\]\s+/m, "\n\n[spoiler]\n\n") + str.gsub!(/\s+\[\/spoilers?\]/m, "\n\n[/spoiler]\n\n") str.gsub!(/^(h[1-6]\.\s*.+)$/, "\n\n\\1\n\n") end @@ -172,6 +174,18 @@ class DText else "" end + + when "[spoiler]" + stack << "spoiler" + '
' + + when "[/spoiler]" + if stack.last == "spoiler" + stack.pop + "
" + else + "" + end when /\[code\](?!\])/ flags[:code] = true @@ -197,6 +211,8 @@ class DText html << "" elsif tag == "pre" html << "" + elsif tag == "spoiler" + html << "" end end diff --git a/test/unit/dtext_test.rb b/test/unit/dtext_test.rb index a083b5118..a5412ba09 100644 --- a/test/unit/dtext_test.rb +++ b/test/unit/dtext_test.rb @@ -18,10 +18,11 @@ class DTextTest < ActiveSupport::TestCase 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("

this is

a block spoiler

.

", p("this is\n\n[spoiler]\na block spoiler\n[/spoiler].")) assert_equal("

[spoiler]this is a spoiler with no closing tag

new text

", p("[spoiler]this is a spoiler with no closing tag\n\nnew text")) assert_equal("

[spoiler]this is a spoiler with no closing tag
new text

", p("[spoiler]this is a spoiler with no closing tag\nnew text")) assert_equal("

this is [spoiler]a nested spoiler[/spoiler]

", p("[spoiler]this is [spoiler]a nested[/spoiler] spoiler[/spoiler]")) + assert_equal("

this is a block spoiler with no closing tag

", p("[spoiler]\nthis is a block spoiler with no closing tag")) end def test_paragraphs