tracks/vendor/plugins/unobtrusive_javascript/lib/ujs/behaviour_helper.rb

62 lines
2.3 KiB
Ruby
Raw Normal View History

module UJS
# The helper methods in this module can all be passed as arguments to apply_behaviour and allow
# you to reproduce common functionailty such as drag and drop and sorting in a simple way. Think
# of them as the apply_javascript equivilent to the Scriptaculous helpers.
#
# Usage:
#
# apply_behaviour '.products', make_draggable
# apply_behaviour '.help', make_remote_link( :action => 'showhelp' )
# apply_behaviour '.todolist', make_sortable
#
module BehaviourHelper
# Make a link send an Ajax request. options identical to linkt_to_remote except that
# :url defaults to the href attribute of the link.
def make_remote_link(options={})
options[:url] ||= javascript_variable('this.href');
"this.observe('click', function(event) {\n#{remote_function(options)};\nreturn false;\n});"
end
# Make a form submit via an Ajax request. options identical remote_form except that
# :url defaults to the action attribute of the form.
def make_remote_form(options={})
options[:url] ||= javascript_variable('this.action');
options[:with] ||= 'Form.serialize(this)'
"this.observe('submit', function(event) {\n#{remote_function(options)};\nreturn false;\n});"
end
# Observe a form or form field (specified with the type argument) using the given options
# which are the same as observe_form and observe_field.
def make_observed(type, options={})
obs = (type.to_s == 'form') ? 'Form' : 'Form.Element'
if options[:frequency] && options[:frequency] > 0
build_observer_js("#{obs}.Observer", javascript_variable('this'), options)
else
build_observer_js("#{obs}.EventObserver", javascript_variable('this'), options)
end
end
# Makes the children of the element sortable.
def make_sortable(options={})
sortable_element_js(javascript_variable('this'), options)
end
# Makes the element draggable.
def make_draggable(options={})
draggable_element_js(javascript_variable('this'), options)
end
# Makes the element a drop target.
def make_drop_receiving(options={})
drop_receiving_element_js(javascript_variable('this'), options)
end
def make_autocomplete # :nodoc:
end
def make_in_place_editor # :nodoc:
end
end
end