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.

[View source]

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