Module: BivouacHelpers::ScriptAculoUsView
- Defined in:
- lib/bivouac/helpers/view/goh/scriptaculous.rb
Constant Summary collapse
- TOGGLE_EFFECTS =
[:toggle_appear, :toggle_slide, :toggle_blind]
Instance Method Summary collapse
-
#draggable_element(element_id, options = {}) ⇒ Object
Makes the element with the DOM ID specified by
element_iddraggable. -
#draggable_element_js(element_id, options = {}) ⇒ Object
:nodoc:.
-
#drop_receiving_element(element_id, options = {}) ⇒ Object
Makes the element with the DOM ID specified by
element_idreceive dropped draggable elements (created by draggable_element). -
#drop_receiving_element_js(element_id, options = {}) ⇒ Object
:nodoc:.
-
#sortable_element(element_id, options = {}) ⇒ Object
Makes the element with the DOM ID specified by
element_idsortable by drag-and-drop and make an Ajax call whenever the sort order has changed. -
#sortable_element_js(element_id, options = {}) ⇒ Object
:nodoc:.
-
#unsortable_element_js(element_id) ⇒ Object
:nodoc:.
-
#visual_effect(name, element_id = false, js_options = {}) ⇒ Object
Returns a JavaScript snippet to be used on the Ajax callbacks for starting visual effects.
Instance Method Details
#draggable_element(element_id, options = {}) ⇒ Object
Makes the element with the DOM ID specified by element_id draggable.
Example:
draggable_element("my_image", :revert => true)
You can change the behaviour with various options, see http://script.aculo.us for more documentation.
98 99 100 |
# File 'lib/bivouac/helpers/view/goh/scriptaculous.rb', line 98 def draggable_element(element_id, = {}) javascript_tag(draggable_element_js(element_id, ) + ";\n") end |
#draggable_element_js(element_id, options = {}) ⇒ Object
:nodoc:
102 103 104 |
# File 'lib/bivouac/helpers/view/goh/scriptaculous.rb', line 102 def draggable_element_js(element_id, = {}) #:nodoc: %(new Draggable(#{element_id.inspect}, #{options_for_javascript(options)})) end |
#drop_receiving_element(element_id, options = {}) ⇒ Object
Makes the element with the DOM ID specified by element_id receive
dropped draggable elements (created by draggable_element).
and make an AJAX call. By default, the action called gets the DOM ID
of the element as parameter.
Example:
drop_receiving_element("my_cart", :onDrop => {
:url => R(CartAdd),
:update => 'drop-info'
} )
You can change the behaviour with various options, see http://script.aculo.us for more documentation.
119 120 121 |
# File 'lib/bivouac/helpers/view/goh/scriptaculous.rb', line 119 def drop_receiving_element(element_id, = {}) javascript_tag(drop_receiving_element_js(element_id, ) + ";\n") end |
#drop_receiving_element_js(element_id, options = {}) ⇒ Object
:nodoc:
123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/bivouac/helpers/view/goh/scriptaculous.rb', line 123 def drop_receiving_element_js(element_id, = {}) #:nodoc: if [:onDrop].is_a?( Hash) [:onDrop][:with] = "'id=' + encodeURIComponent(element.id)" [:onDrop] = "function(element){" + remote_function([:onDrop]) + "}" elsif [:onDrop].is_a?( String ) [:onDrop] = "function(){" + [:onDrop] + ";}" end [:accept] = array_or_string_for_javascript([:accept]) if [:accept] [:hoverclass] = "'#{options[:hoverclass]}'" if [:hoverclass] %(Droppables.add(#{element_id.inspect}, #{options_for_javascript(options)})) end |
#sortable_element(element_id, options = {}) ⇒ Object
Makes the element with the DOM ID specified by element_id sortable
by drag-and-drop and make an Ajax call whenever the sort order has
changed. By default, the action called gets the serialized sortable
element as parameters.
See http://script.aculo.us for avalaible options.
If you wan't to use onChange and/or onUpdate you can pass a javascript string
or a Hash, if you want to call a remote function.
Important: For this to work, the elements contained in your Sortable must have id attributes in the following form:
id="string_identifier"
Example:
ul( :id => 'my_list' ) do
li "Google", :id => "crawler_1"
li "Yahoo", :id => "crawler_2"
li "Accoona", :id => "crawler_3"
li "Ask.com", :id => "crawler_4"
li "Baidu", :id => "crawler_5"
li "Exalead", :id => "crawler_6"
li "Voila", :id => "crawler_7"
li "Lycos", :id => "crawler_8"
end
sortable_element( 'my_list',
:onChange => {
:url => R(SaveListOrder),
:success => visual_effect( :highlight, 'my_list' )
}
)
58 59 60 |
# File 'lib/bivouac/helpers/view/goh/scriptaculous.rb', line 58 def sortable_element( element_id, = {} ) javascript_tag( sortable_element_js( element_id, ) + ";\n" ) end |
#sortable_element_js(element_id, options = {}) ⇒ Object
:nodoc:
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/bivouac/helpers/view/goh/scriptaculous.rb', line 62 def sortable_element_js( element_id, = {} ) #:nodoc: if [:onUpdate].is_a?( Hash ) [:onUpdate][:with] ||= "Sortable.serialize('#{element_id}')" [:onUpdate] = "function(){" + remote_function([:onUpdate]) + "}" elsif [:onUpdate].is_a?( String ) [:onUpdate] = "function(){" + [:onUpdate] + ";}" end if [:onChange].is_a?( Hash ) [:onChange][:with] ||= "Sortable.serialize('#{element_id}')" [:onChange] = "function(){" + remote_function([:onChange]) + "}" elsif [:onChange].is_a?( String ) [:onChange] = "function(){" + [:onChange] + ";}" end [:tag, :overlap, :constraint, :handle].each do |option| [option] = "'#{options[option]}'" if [option] end [:containment] = array_or_string_for_javascript([:containment]) if [:containment] [:only] = array_or_string_for_javascript([:only]) if [:only] %(Sortable.create(#{element_id.inspect}, #{options_for_javascript(options)})) end |
#unsortable_element_js(element_id) ⇒ Object
:nodoc:
87 88 89 |
# File 'lib/bivouac/helpers/view/goh/scriptaculous.rb', line 87 def unsortable_element_js( element_id ) #:nodoc: %(Sortable.destroy(#{element_id.inspect})) end |
#visual_effect(name, element_id = false, js_options = {}) ⇒ Object
Returns a JavaScript snippet to be used on the Ajax callbacks for starting visual effects.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/bivouac/helpers/view/goh/scriptaculous.rb', line 11 def visual_effect(name, element_id = false, = {}) element = element_id ? element_id : "element" [:queue] = if [:queue].is_a?(Hash) '{' + [:queue].map {|k, v| k == :limit ? "#{k}:#{v}" : "#{k}:'#{v}'" }.join(',') + '}' elsif [:queue] "'#{js_options[:queue]}'" end if [:queue] if TOGGLE_EFFECTS.include? name.to_sym %(Effect.toggle(#{element.inspect},'#{name.to_s.gsub(/^toggle_/,'')}',#{options_for_javascript(js_options)})) else %(new Effect.#{name.to_s.camelize}('#{element}',#{options_for_javascript(js_options)})) end end |