Module: InPlaceMacrosHelper

Included in:
InPlaceEditingTest
Defined in:
lib/six-updater-web/vendor/plugins/in_place_editing/lib/in_place_macros_helper.rb

Instance Method Summary collapse

Instance Method Details

#in_place_editor(field_id, options = {}) ⇒ Object

Makes an HTML element specified by the DOM ID field_id become an in-place editor of a property.

A form is automatically created and displayed when the user clicks the element, something like this:

<form id="myElement-in-place-edit-form" target="specified url">
  <input name="value" text="The content of myElement"/>
  <input type="submit" value="ok"/>
  <a onclick="javascript to cancel the editing">cancel</a>
</form>

The form is serialized and sent to the server using an AJAX call, the action on the server should process the value and return the updated value in the body of the reponse. The element will automatically be updated with the changed value (as returned from the server).

Required options are:

:url

Specifies the url where the updated value should be sent after the user presses “ok”.

Addtional options are:

:rows

Number of rows (more than 1 will use a TEXTAREA)

:cols

Number of characters the text input should span (works for both INPUT and TEXTAREA)

:size

Synonym for :cols when using a single line text input.

:cancel_text

The text on the cancel link. (default: “cancel”)

:save_text

The text on the save link. (default: “ok”)

:loading_text

The text to display while the data is being loaded from the server (default: “Loading…”)

:saving_text

The text to display when submitting to the server (default: “Saving…”)

:external_control

The id of an external control used to enter edit mode.

:load_text_url

URL where initial value of editor (content) is retrieved.

:options

Pass through options to the AJAX call (see prototype’s Ajax.Updater)

:with

JavaScript snippet that should return what is to be sent in the AJAX call, form is an implicit parameter

:script

Instructs the in-place editor to evaluate the remote JavaScript response (default: false)

:click_to_edit_text::The text shown during mouseover the editable text (default: “Click to edit”)



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/six-updater-web/vendor/plugins/in_place_editing/lib/in_place_macros_helper.rb', line 38

def in_place_editor(field_id, options = {})
  function =  "new Ajax.InPlaceEditor("
  function << "'#{field_id}', "
  function << "'#{url_for(options[:url])}'"

  js_options = {}

  if protect_against_forgery?
    options[:with] ||= "Form.serialize(form)"
    options[:with] += " + '&authenticity_token=' + encodeURIComponent('#{form_authenticity_token}')"
  end

  js_options['cancelText'] = %('#{options[:cancel_text]}') if options[:cancel_text]
  js_options['okText'] = %('#{options[:save_text]}') if options[:save_text]
  js_options['loadingText'] = %('#{options[:loading_text]}') if options[:loading_text]
  js_options['savingText'] = %('#{options[:saving_text]}') if options[:saving_text]
  js_options['rows'] = options[:rows] if options[:rows]
  js_options['cols'] = options[:cols] if options[:cols]
  js_options['size'] = options[:size] if options[:size]
  js_options['externalControl'] = "'#{options[:external_control]}'" if options[:external_control]
  js_options['loadTextURL'] = "'#{url_for(options[:load_text_url])}'" if options[:load_text_url]        
  js_options['ajaxOptions'] = options[:options] if options[:options]
  js_options['htmlResponse'] = !options[:script] if options[:script]
  js_options['callback']   = "function(form) { return #{options[:with]} }" if options[:with]
  js_options['clickToEditText'] = %('#{options[:click_to_edit_text]}') if options[:click_to_edit_text]
  js_options['textBetweenControls'] = %('#{options[:text_between_controls]}') if options[:text_between_controls]
  function << (', ' + options_for_javascript(js_options)) unless js_options.empty?
  
  function << ')'

  javascript_tag(function).force_encoding("utf-8") # TODO: Only on Ruby 1.9!
end

#in_place_editor_field(object, method, tag_options = {}, in_place_editor_options = {}) ⇒ Object

Renders the value of the specified object and method with in-place editing capabilities.



72
73
74
75
76
77
78
79
80
# File 'lib/six-updater-web/vendor/plugins/in_place_editing/lib/in_place_macros_helper.rb', line 72

def in_place_editor_field(object, method, tag_options = {}, in_place_editor_options = {})
  instance_tag = ::ActionView::Helpers::InstanceTag.new(object, method, self)
  tag_options = {:tag => "span",
                 :id => "#{object}_#{method}_#{instance_tag.object.id}_in_place_editor",
                 :class => "in_place_editor_field"}.merge!(tag_options)
  in_place_editor_options[:url] = in_place_editor_options[:url] || url_for({ :action => "set_#{object}_#{method}", :id => instance_tag.object.id })
  tag = (tag_options.delete(:tag), h(instance_tag.value(instance_tag.object)),tag_options)
  return (tag + in_place_editor(tag_options[:id], in_place_editor_options)).force_encoding("utf-8")  # TODO: Only on Ruby 1.9!
end