Module: ActionView::Helpers::UrlHelper

Defined in:
lib/facebooker/rails/facebook_url_helper.rb

Instance Method Summary collapse

Instance Method Details

#button_to_with_facebooker(name, options = {}, html_options = {}) ⇒ Object

Alters one and only one line of the Rails button_to. See below.



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/facebooker/rails/facebook_url_helper.rb', line 52

def button_to_with_facebooker(name, options={}, html_options = {})
  if !respond_to?(:request_comes_from_facebook?) || !request_comes_from_facebook?
     button_to_without_facebooker(name,options,html_options)
  else
    html_options = html_options.stringify_keys
    convert_boolean_attributes!(html_options, %w( disabled ))

    method_tag = ''
    if (method = html_options.delete('method')) && %w{put delete}.include?(method.to_s)
      method_tag = tag('input', :type => 'hidden', :name => '_method', :value => method.to_s)
    end

    form_method = method.to_s == 'get' ? 'get' : 'post'
  
    request_token_tag = ''
    if form_method == 'post' && protect_against_forgery?
      request_token_tag = tag(:input, :type => "hidden", :name => request_forgery_protection_token.to_s, :value => form_authenticity_token)
    end
  
    if confirm = html_options.delete("confirm")
      # this line is the only change => html_options["onclick"] = "return #{confirm_javascript_function(confirm)}"
      html_options["onclick"] = "#{confirm_javascript_function(confirm, 'a.getForm().submit();')}return false;"
    end

    url = options.is_a?(String) ? options : self.url_for(options)
    name ||= url
 
    html_options.merge!("type" => "submit", "value" => name)

    "<form method=\"#{form_method}\" action=\"#{escape_once url}\" class=\"button-to\"><div>" +
      method_tag + tag("input", html_options) + request_token_tag + "</div></form>"
  end
end