summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2012-10-20 14:49:32 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2012-10-20 14:49:32 +0000
commitd29fa4735b5744f3288e9c33a9e81a5f36abcca1 (patch)
treea94c328505f4c4a8cba94bc16bf0f70b6a790f78
parent0faab70be58c2b52963b9eb02cc941e32b3c44c7 (diff)
downloadredmine-d29fa4735b5744f3288e9c33a9e81a5f36abcca1.tar.gz
redmine-d29fa4735b5744f3288e9c33a9e81a5f36abcca1.zip
Adds a macro for inserting collapsed text (#12167).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10680 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--config/locales/en.yml1
-rw-r--r--config/locales/fr.yml1
-rw-r--r--lib/redmine/wiki_formatting/macros.rb13
-rw-r--r--test/test_helper.rb5
-rw-r--r--test/unit/lib/redmine/wiki_formatting/macros_test.rb30
5 files changed, 50 insertions, 0 deletions
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 1b2bc5bf9..c223b0f88 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -933,6 +933,7 @@ en:
button_quote: Quote
button_duplicate: Duplicate
button_show: Show
+ button_hide: Hide
button_edit_section: Edit this section
button_export: Export
button_delete_my_account: Delete my account
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 54b17e665..7baf293e7 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -907,6 +907,7 @@ fr:
button_quote: Citer
button_duplicate: Dupliquer
button_show: Afficher
+ button_hide: Cacher
button_edit_section: Modifier cette section
button_export: Exporter
button_delete_my_account: Supprimer mon compte
diff --git a/lib/redmine/wiki_formatting/macros.rb b/lib/redmine/wiki_formatting/macros.rb
index 50dbb853d..a50f2d289 100644
--- a/lib/redmine/wiki_formatting/macros.rb
+++ b/lib/redmine/wiki_formatting/macros.rb
@@ -212,6 +212,19 @@ module Redmine
out
end
+ desc "Inserts of collapsed block of text. Example:\n\n {{collapse(View details...)\nThis is a block of text that is collapsed by default.\nIt can be expanded by clicking a link.\n}}"
+ macro :collapse do |obj, args, text|
+ html_id = "collapse-#{Redmine::Utils.random_hex(4)}"
+ show_label = args[0] || l(:button_show)
+ hide_label = args[1] || args[0] || l(:button_hide)
+ js = "$('##{html_id}-show, ##{html_id}-hide').toggle(); $('##{html_id}').fadeToggle(150);"
+ out = ''.html_safe
+ out << link_to_function(show_label, js, :id => "#{html_id}-show", :class => 'collapsible collapsed')
+ out << link_to_function(hide_label, js, :id => "#{html_id}-hide", :class => 'collapsible', :style => 'display:none;')
+ out << content_tag('div', textilizable(text, :object => obj), :id => html_id, :class => 'collapsed-text', :style => 'display:none;')
+ out
+ end
+
desc "Displays a clickable thumbnail of an attached image. Examples:\n\n<pre>{{thumbnail(image.png)}}\n{{thumbnail(image.png, size=300, title=Thumbnail)}}</pre>"
macro :thumbnail do |obj, args|
args, options = extract_macro_options(args, :size, :title)
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 3c2cece7b..91e0d8cc6 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -185,6 +185,11 @@ class ActiveSupport::TestCase
assert !s.include?(expected), "\"#{expected}\" found in \"#{s}\""
end
+ def assert_select_in(text, *args, &block)
+ d = HTML::Document.new(CGI::unescapeHTML(String.new(text))).root
+ assert_select(d, *args, &block)
+ end
+
def assert_mail_body_match(expected, mail)
if expected.is_a?(String)
assert_include expected, mail_body(mail)
diff --git a/test/unit/lib/redmine/wiki_formatting/macros_test.rb b/test/unit/lib/redmine/wiki_formatting/macros_test.rb
index 53665d017..08b0af462 100644
--- a/test/unit/lib/redmine/wiki_formatting/macros_test.rb
+++ b/test/unit/lib/redmine/wiki_formatting/macros_test.rb
@@ -180,6 +180,36 @@ class Redmine::WikiFormatting::MacrosTest < ActionView::TestCase
assert_include 'Page not found', textilizable(text)
end
+ def test_macro_collapse
+ text = "{{collapse\n*Collapsed* block of text\n}}"
+ result = textilizable(text)
+
+ assert_select_in result, 'div.collapsed-text'
+ assert_select_in result, 'strong', :text => 'Collapsed'
+ assert_select_in result, 'a.collapsible.collapsed', :text => 'Show'
+ assert_select_in result, 'a.collapsible', :text => 'Hide'
+ end
+
+ def test_macro_collapse_with_one_arg
+ text = "{{collapse(Example)\n*Collapsed* block of text\n}}"
+ result = textilizable(text)
+
+ assert_select_in result, 'div.collapsed-text'
+ assert_select_in result, 'strong', :text => 'Collapsed'
+ assert_select_in result, 'a.collapsible.collapsed', :text => 'Example'
+ assert_select_in result, 'a.collapsible', :text => 'Example'
+ end
+
+ def test_macro_collapse_with_two_args
+ text = "{{collapse(Show example, Hide example)\n*Collapsed* block of text\n}}"
+ result = textilizable(text)
+
+ assert_select_in result, 'div.collapsed-text'
+ assert_select_in result, 'strong', :text => 'Collapsed'
+ assert_select_in result, 'a.collapsible.collapsed', :text => 'Show example'
+ assert_select_in result, 'a.collapsible', :text => 'Hide example'
+ end
+
def test_macro_child_pages
expected = "<p><ul class=\"pages-hierarchy\">\n" +
"<li><a href=\"/projects/ecookbook/wiki/Child_1\">Child 1</a>\n" +