merged cont.
[opensuse:yast-rest-service.git] / webyast / app / helpers / view_helpers / effect_helper.rb
1 #--
2 # Webyast Webclient framework
3 #
4 # Copyright (C) 2009, 2010 Novell, Inc. 
5 #   This library is free software; you can redistribute it and/or modify
6 # it only under the terms of version 2.1 of the GNU Lesser General Public
7 # License as published by the Free Software Foundation. 
8 #
9 #   This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
12 # details. 
13 #
14 #   You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software 
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 #++
18
19 module ViewHelpers::EffectHelper
20   include GetText
21
22   # show_hide_elements - create links and JavaScript snippets to show and hide one or more HTML elements
23   #   takes two parameters
24   #   1. String or Symbol or Array of these both with the element ID(s) (required)
25   #   2. Hash with confugiration parameters (optional)
26   #      Hash keys:
27   #        :hidden => <true/false>  -  is/are the element(s) initially hidden? - reverses the function
28   #        :hide_msg => "str"       -  string to show for the "hide" action
29   #        :show_msg => "str"       -  string to show for the "show" action
30   #        :effect_opt => Hash      -  effect options, eg. {:duration => 3} for a 3 sec. effect
31   #        :hide_effect => :symbol  -  effect to use for the "hide" action
32   #        :show_effect => :symbol  -  effect to use for the "show" action (see jrails.rb for more SCRIPTACULOUS_EFFECTS)
33   #
34   #  Examples:
35   #  show_hide_elements :elementid, { :hidden => true, :hide_msg => _("Hide Details"), :show_msg => _("Show Details") }
36   #  show_hide_elements [:thisthing, :otherthing, "thirdthing"], { :show_effect => :bounce_in,
37   #                                                                :hide_effect => :drop_out,
38   #                                                                :effect_opt  => { :duration => 3 }  }
39   def show_hide_elements(elm, options={})
40     if    elm.kind_of?(Array) then
41       elements = elm
42     elsif elm.kind_of?(String) || elm.kind_of?(Symbol) then
43       elements = Array.new([elm])
44     else
45       return "<h2 style='color: red'>No element IDs defined for show_hide_elements effect.</h2>"
46     end
47     options = Hash.new unless options.kind_of?(Hash)
48
49     hidden      = !options[:hidden].nil? ? options[:hidden] : true
50     hide_msg    = options[:hide_msg]    || _("Hide Details")
51     show_msg    = options[:show_msg]    || _("Show Details")
52     show_effect = options[:show_effect] || :switch_on
53     hide_effect = options[:hide_effect] || :switch_off
54     effect_opt  = options[:effect_opt]  || Hash[ :duration => 0 ]
55
56     hide_id = "hidedetails" + elements.object_id.to_s
57     show_id = "showdetails" + elements.object_id.to_s
58     ret = "<p id='#{hide_id}' "
59     ret += " style='display: none' " if hidden
60     ret += ">"
61     ret += link_to_function hide_msg do |p|
62              p.visual_effect( :switch_off, hide_id, {:duration => 0} )
63              p.visual_effect( :switch_on,  show_id, {:duration => 0} )
64              elements.each do |e|
65                p.visual_effect( hide_effect, e, effect_opt )
66              end
67            end
68     ret += "</p>"
69     ret += "<p id='#{show_id}' "
70     ret += " style='display: none' " unless hidden
71     ret += ">"
72     ret += link_to_function show_msg do |p|
73              p.visual_effect( :switch_off, show_id, {:duration => 0} )
74              p.visual_effect( :switch_on,  hide_id, {:duration => 0} )
75              elements.each do |e|
76                p.visual_effect( show_effect,  e, effect_opt )
77              end
78            end
79     ret += "</p>"
80     ret
81   end
82
83 end