Module: Facebooker::Rails::Helpers::FbConnect

Includes:
StreamPublish
Included in:
Facebooker::Rails::Helpers
Defined in:
lib/facebooker/rails/helpers/fb_connect.rb

Instance Method Summary collapse

Methods included from StreamPublish

#stream_publish

Instance Method Details



140
141
142
143
144
145
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 140

def fb_bookmark_link(text,url,*args)
  js = update_page do |page|
    page.call "FB.Connect.showBookmarkDialog",url
  end
  link_to_function text, js, *args
end

#fb_connect_javascript_tag(options = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 6

def fb_connect_javascript_tag(options = {})
  # accept both Rails and Facebook locale formatting, i.e. "en-US" and "en_US".
  lang = "/#{options[:lang].to_s.gsub('-', '_')}" if options[:lang]
  # dont use the javascript_include_tag helper since it adds a .js at the end
  if request.ssl?
    "<script src=\"https://ssl.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php#{lang}\" type=\"text/javascript\"></script>"
  else
    "<script src=\"http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php#{lang}\" type=\"text/javascript\"></script>"
  end.html_safe
end

#fb_connect_stream_publish(stream_post, user_message_prompt = nil, callback = nil, auto_publish = false, actor = nil) ⇒ Object



154
155
156
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 154

def fb_connect_stream_publish(stream_post,user_message_prompt=nil,callback=nil,auto_publish=false,actor=nil)
  stream_publish("FB.Connect.streamPublish",stream_post,user_message_prompt,callback,auto_publish,actor)
end

#fb_login_and_redirect(url, options = {}) ⇒ Object

Render an <fb:login-button> element, similar to fb_login_button. Adds a js redirect to the onlogin event via rjs.

Examples

fb_login_and_redirect '/other_page'
=> <fb:login-button onlogin="window.location.href = &quot;/other_page&quot;;"></fb:login-button>

Like #fb_login_button, this also supports the :text option

fb_login_and_redirect '/other_page', :text => "Login with Facebook", :v => '2'
=> <fb:login-button onlogin="window.location.href = &quot;/other_page&quot;;" v="2">Login with Facebook</fb:login-button>


119
120
121
122
123
124
125
126
127
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 119

def (url, options = {})
  js = update_page do |page|
    page.redirect_to url
  end

  text = options.delete(:text)
  
  ("fb:login-button",text,options.merge(:onlogin=>js))
end

#fb_login_button(*args) ⇒ Object

Render an <fb:login-button> element

Examples

<%= fb_login_button%>
=> <fb:login-button></fb:login-button>

Specifying a javascript callback

<%= fb_login_button 'update_something();'%>
=> <fb:login-button onlogin='update_something();'></fb:login-button>

Adding options See: wiki.developers.facebook.com/index.php/Fb:login-button

<%= fb_login_button 'update_something();', :size => :small, :background => :dark%>
=> <fb:login-button background='dark' onlogin='update_something();' size='small'></fb:login-button>

:text option allows you to set the text value of the button. *A note!* This will only do what you expect it to do if you set :v => 2 as well.

<%= fb_login_button 'update_somethign();',
     :text => 'Loginto Facebook', :v => 2 %>
=> <fb:login-button v='2' onlogin='update_something();'>Login to Facebook</fb:login-button>


94
95
96
97
98
99
100
101
102
103
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 94

def (*args)

  callback = args.first
  options = args[1] || {}
  options.merge!(:onlogin=>callback) if callback

  text = options.delete(:text)

  ("fb:login-button",text, options)
end


133
134
135
136
137
138
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 133

def fb_logout_link(text,url,*args)
  js = update_page do |page|
    page.call "FB.Connect.logoutAndRedirect",url
  end
  link_to_function text, js, *args
end

#fb_unconnected_friends_countObject



129
130
131
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 129

def fb_unconnected_friends_count
   "fb:unconnected-friends-count",nil
end

#fb_user_action(action, user_message = nil, prompt = "", callback = nil) ⇒ Object



147
148
149
150
151
152
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 147

def fb_user_action(action, user_message = nil, prompt = "", callback = nil)
  defaulted_callback = callback || "null"
  update_page do |page|
    page.call("FB.Connect.showFeedDialog",action.template_id,action.data,action.target_ids,action.body_general,nil,page.literal("FB.RequireConnect.promptConnect"),page.literal(defaulted_callback),prompt,user_message.nil? ? nil : {:value=>user_message})
  end
end

#init_fb_connect(*required_features, &proc) ⇒ Object

For information on the :app_settings argument see wiki.developers.facebook.com/index.php/JS_API_M_FB.Facebook.Init_2 While it would be nice to treat :app_settings as a hash, some of the arguments do different things if they are a string vs a javascript function and Rails’ Hash#to_json always quotes strings so there is no way to indicate when the value should be a javascript function. For this reason :app_settings needs to be a string that is valid JSON (including the {}‘s).



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 23

def init_fb_connect(*required_features,&proc)
  additions = ""
  if block_given?
    additions = capture(&proc)
  end

  # Yes, app_settings is set to a string of an empty JSON element. That's intentional.
  options = {:js => :prototype, :app_settings => '{}'}

  if required_features.last.is_a?(Hash)
    options.merge!(required_features.pop.symbolize_keys)
  end

  if request.ssl?
    init_string = "FB.init('#{Facebooker.api_key}','#{root_url(:locale => nil)}/xd_receiver_ssl.html', #{options[:app_settings]});"
  else
    init_string = "FB.init('#{Facebooker.api_key}', '#{root_url(:locale => nil)}/xd_receiver.html', #{options[:app_settings]});"
  end
  unless required_features.blank?
     init_string = <<-FBML
     #{case options[:js]
       when :jquery then "jQuery(document).ready("
       when :mootools then "window.addEvent('domready',"
       when :dojo then "dojo.addOnLoad("
       else "Element.observe(window,'load',"
       end} function() {
        if (typeof FB_RequireFeatures != 'undefined') FB_RequireFeatures(#{required_features.to_json}, function() {
          #{init_string}
          #{additions}
        });
      });
      FBML
  end

  # block_is_within_action_view? is rails 2.1.x and has been
  # deprecated.  rails >= 2.2.x uses block_called_from_erb?
  block_tester = respond_to?(:block_is_within_action_view?) ?
    :block_is_within_action_view? : :block_called_from_erb?

  if block_given? && send(block_tester, proc)
    versioned_concat(javascript_tag(init_string),proc.binding)
  else
    javascript_tag init_string
  end
end