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



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

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
end

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



161
162
163
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 161

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>


123
124
125
126
127
128
129
130
131
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 123

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>


98
99
100
101
102
103
104
105
106
107
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 98

def (*args)

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

  text = options.delete(:text)

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


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

def fb_logout_link(text,url,*args)
  js = update_page do |page|
    page.call "FB.Connect.logoutAndRedirect",url
    # When session is valid, this call is meaningless, since we already redirect
    # When session is invalid, it will log the user out of the system.
    page.redirect_to url
  end
  link_to_function text, js, *args
end

#fb_unconnected_friends_countObject



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

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

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



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

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
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 23

def init_fb_connect(*required_features, &proc)
  init_fb_connect_with_options({},*required_features, &proc)
end

#init_fb_connect_with_options(options = {}, *required_features, &proc) ⇒ Object



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
68
69
70
71
# File 'lib/facebooker/rails/helpers/fb_connect.rb', line 27

def init_fb_connect_with_options(options = {},*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 = options.merge({: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}','/xd_receiver_ssl.html', #{options[:app_settings]});"
  else
    init_string = "FB.init('#{Facebooker.api_key}','/xd_receiver.html', #{options[:app_settings]});"
  end
  unless required_features.blank?
     init_string = <<-FBML
     #{case options[:js]
       when :jquery then "jQuery(document).ready("
       when :dojo then "dojo.addOnLoad("
       when :mootools then "window.addEvent('domready',"
       else "Event.observe(window,'load',"
       end} function() {
        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