sharing_tags 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7c68b7e6d6ea6c6b14a0c9d8941dafb74656cf86
4
- data.tar.gz: 0101e259f4e610bcd60f5711b606b2c9742f2beb
3
+ metadata.gz: 5fb477566fe6d310fe532406ac33317b51a35826
4
+ data.tar.gz: 4cbc0cce2a9f871533146f65f09a5a3a6e274543
5
5
  SHA512:
6
- metadata.gz: bcf785bf5ce8826b4a8c8c5dd0b5d7bd048fd7429ff7ad22e4e4a79c019a05b636668212f9d008daf9cdc4934fa0f29ae39a3a26c42b7598a9ad580eef9d81ed
7
- data.tar.gz: 84c3523b9d729616a604f289de47d49fe816277265553f4dffb16e2ce48111ca748cc483cf3be4a856dc5eebf4a548bd5972d0cd54771363fd5713358fe98fe2
6
+ metadata.gz: 04d3e69d58ed8925d52913d4b5ad77e4e4e11a81322aba836ba1ccf66aa2a7a77204782bdc951004273fa261f9b29d025498bb81d29814bf4790686349761e28
7
+ data.tar.gz: 182188e1a0e6267f740d5ff6c3c307e58e3de46eab0af85576e7c9d4f633da607de51fd0c83f98885dd2f6bb48dd3542e4dbc06308e0f993a308c27a4b097c06
data/README.md CHANGED
@@ -95,6 +95,20 @@ end
95
95
 
96
96
  ```
97
97
 
98
+ ### Javascript
99
+
100
+ You can subscribe to javascript events
101
+
102
+ ```coffeescript
103
+ # click on sharing link
104
+ jQuery("body").on "sharing_tags.click_action", ({network, context, target})->
105
+ # your code
106
+
107
+ # after successful sharing
108
+ jQuery("body").on "sharing_tags.shared", ({network, context, target})->
109
+ # your code
110
+ ```
111
+
98
112
  ## Tools for testing
99
113
 
100
114
  Facebook Debugger (https://developers.facebook.com/tools/debug)
data/Todo.md CHANGED
@@ -1,11 +1,10 @@
1
1
  # TODO
2
2
 
3
- * Write specs
3
+ * Write specs views/js/requests
4
+ * Init context running helper class on init railie (should work in console)
4
5
  * Run js and ruby specs by default rake task
5
- * Add default values to image networks
6
6
  * Correct merge values in default context and defined
7
7
  * Define network list
8
- * Render icons with links
9
8
  * Add to install task sample of view and require assets
10
9
  * Add recommendation about image size and length of text
11
10
  * Add version to sharing tags: append ?version=1 to links and assets
@@ -1,2 +1,4 @@
1
1
  #= require sharing_tags/share
2
- #= require sharing_tags/links
2
+ #= require sharing_tags/share/facebook
3
+ #= require sharing_tags/links
4
+ #= require sharing_tags/init
@@ -0,0 +1,2 @@
1
+
2
+ @SharingTags.FacebookShare.init()
@@ -2,12 +2,17 @@
2
2
  $(document).on 'click', "@sharing_tags_share", (event) ->
3
3
  event.preventDefault()
4
4
  self = $(@)
5
+ network = self.data('network')
6
+ context = self.data('context')
7
+ jQuery?("body").trigger(type: "sharing_tags.click_action", network: network, context: context, target: self)
8
+
5
9
  SharingTags.share(
6
- self.data('network'),
10
+ network,
7
11
  mobile: device?.mobile() # for mobile devices
8
12
  page_url: self.attr("href")
9
13
  url: self.data 'share-url'
10
14
  title: self.data 'title'
11
15
  message: self.data 'description'
12
16
  image: self.data 'image'
17
+ app_id: self.data 'app-id'
13
18
  )
@@ -4,14 +4,17 @@ class @SharingTags
4
4
  share_object = if attributes?.mobile then SharingTags.MobileShare else SharingTags.Share
5
5
  share_object[network]?(attributes, callback)
6
6
 
7
- #=require sharing_tags/share/facebook
8
7
  class @Error extends Error
9
8
  constructor: -> super
10
9
 
11
10
  class @Share
12
11
 
13
- @facebook: ({url}, callback) ->
14
- @_share("http://www.facebook.com/sharer.php", u: url, callback)
12
+ @facebook: ({url, app_id}, callback) ->
13
+ if app_id
14
+ social_share = new SharingTags.FacebookShare url: url, app_id: app_id
15
+ social_share.share()
16
+ else
17
+ @_share("http://www.facebook.com/sharer.php", u: url, callback)
15
18
 
16
19
  @twitter: ({url, message}, callback) ->
17
20
  @_share("http://twitter.com/intent/tweet", text: message, url: url, callback)
@@ -52,6 +55,7 @@ class @SharingTags
52
55
  if @_checkSharing(share_url, share_window, iteration)
53
56
  clearInterval @interval
54
57
  callback() if callback
58
+ jQuery?("body").trigger("sharing_tags.shared")
55
59
  ), 500)
56
60
 
57
61
  @_checkSharing: (share_url, share_window, iteration)=>
@@ -61,11 +65,11 @@ class @SharingTags
61
65
  class @MobileShare extends @Share
62
66
 
63
67
  @facebook: ({url, return_url, app_id}, callback) ->
64
- if app_id
65
- return_url = url if !return_url
66
- @_share("http://www.facebook.com/dialog/share", href: url, redirect_uri: return_url, app_id: app_id, display: 'touch', callback)
67
- else
68
- super
68
+ # if app_id
69
+ # return_url = url if !return_url
70
+ # @_share("http://www.facebook.com/dialog/share", href: url, redirect_uri: return_url, app_id: app_id, display: 'touch', callback)
71
+ # else
72
+ super
69
73
 
70
74
  @twitter: ({title, url, message}, callback) ->
71
75
  # todo: fix adding hash tags
@@ -5,33 +5,88 @@ class @SharingTags.BaseShare
5
5
  description: null
6
6
 
7
7
  constructor: ({@url, @title, @description})->
8
- unless @url && @title && @description
9
- throw new SharingTags.Error("Error could not initialize sharing class, with params:#{ " #{arg}: '#{val}'" for arg, val of arguments[0]}")
8
+ @_assert_vars 'url'
10
9
 
11
- open_popup: ->
10
+ _open_popup: (api_url, params)->
11
+ share_url = if params then "#{api_url}?#{$.param(params)}" else api_url
12
+ share_window = window.open share_url, 'Sharing', 'width=740,height=440'
13
+
14
+ clearInterval(@interval)
15
+ iteration = 0
16
+ @interval = setInterval((=>
17
+ iteration++
18
+ if @_checkSharing(share_url, share_window, iteration)
19
+ clearInterval @interval
20
+ jQuery("body").trigger("sharing_tags.shared") if jQuery
21
+ ), 500)
22
+
23
+ _checkSharing: (share_url, share_window, iteration)=>
24
+ # console.log("check desktop sharing", share_url, share_window, iteration)
25
+ share_window?.closed || iteration >= 15
26
+
27
+ _after_callback: =>
28
+ jQuery?("body").trigger("sharing_tags.shared")
29
+
30
+ _assert_vars: (vars...)->
31
+ for var_name in vars
32
+ if ! @[var_name]
33
+ arguments_list = ''
34
+ arguments_list += " #{var_name}: '#{@[var_name]}'" for arg, val in vars
35
+ throw new SharingTags.Error("Error could not initialize sharing class, with params: #{arguments_list}")
12
36
 
13
37
  class @SharingTags.FacebookShare extends @SharingTags.BaseShare
14
38
 
15
39
  # available providers: sharer, fb_ui, dialog
16
40
  @default_provider: "fb_ui"
17
- @provider: "fb_ui"
18
41
 
19
42
  app_id: null
20
43
  return_url: null
21
44
  provider: null
22
45
 
23
46
  constructor: ({@app_id, @return_url, @provider})->
47
+ @provider = @_detect_provider() if !@provider
48
+
49
+ # todo: throw error for invalid provider
50
+ @constructor.init() if @provider is 'fb_ui' and not FB?
51
+
24
52
  super
25
53
 
54
+ @init: (locale="en_US")->
55
+ if not FB?
56
+ jQuery.ajax(
57
+ url: "//connect.facebook.net/#{locale}/all.js"
58
+ dataType: "script"
59
+ cache: true
60
+ )
61
+
26
62
  share: ()->
63
+ @["_#{@provider}"]()
64
+
65
+ _sharer: ->
66
+ @_assert_vars "url"
67
+ @_open_popup("http://www.facebook.com/sharer.php", u: @url)
27
68
 
28
- sharer: ->
29
- # @open_popup("http://www.facebook.com/sharer.php", u: @url)
69
+ _fb_ui: =>
70
+ @_assert_vars "url", "app_id"
71
+ return @constructor.init().done(@_fb_ui) if not FB?
30
72
 
31
- fb_ui: ->
73
+ FB?.ui(method: 'share', href: @url, app_id: @app_id, (response)=>
74
+ @_after_callback(response)
75
+ # if response && !response.error_code
76
+ # @_after_callback(response)
77
+ # else
78
+ # # another callback
79
+ )
32
80
 
33
- dialog: ->
81
+ _dialog: (display = 'page')->
82
+ @_assert_vars 'url', 'return_url'
83
+ @_open_popup("http://www.facebook.com/dialog/share", href: @url, redirect_uri: @return_url, app_id: @app_id, display: display)
34
84
 
35
85
 
36
- # call trigger
86
+ _detect_provider: ->
87
+ # todo: detect provider by params
88
+ # try fb_ui url, app_id
89
+ # try dialog url, return_url
90
+ # try sharer url
37
91
 
92
+ @constructor.default_provider
@@ -8,7 +8,7 @@ module SharingTags::ActionView::ButtonHelper
8
8
  end
9
9
 
10
10
  def link_to_facebook_share(name_or_options = nil, &block)
11
- share_link_to name_or_options, :facebook, [], &block
11
+ share_link_to name_or_options, :facebook, [:app_id], &block
12
12
  end
13
13
 
14
14
  def link_to_vkontakte_share(name_or_options = nil, &block)
@@ -32,6 +32,7 @@ module SharingTags::ActionView::ButtonHelper
32
32
  def share_link_to(name_or_options = nil, network = nil, data_params = [], &block)
33
33
  params = sharing_tags[network]
34
34
  data_attrs = params.get(*(data_params +[:network, :share_url]))
35
+ data_attrs[:context] = SharingTags.config.current_context.name
35
36
 
36
37
  if block_given?
37
38
  name_or_options = {} if !name_or_options || name_or_options.is_a?(String)
@@ -1,3 +1,3 @@
1
1
  module SharingTags
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -11,5 +11,23 @@
11
11
  "url": "http://partial.url",
12
12
  "title": "Partial title",
13
13
  "description": "Description"
14
+ },
15
+
16
+ "fb_ui": {
17
+ "url": "http://fb_ui.url",
18
+ "app_id": "123",
19
+ "provider": "fb_ui"
20
+ },
21
+
22
+ "dialog": {
23
+ "url": "http://dialog/share.url",
24
+ "return_url": "http://dialog/return.url",
25
+ "provider": "dialog"
26
+ },
27
+
28
+ "sharer": {
29
+ "url": "http://fb_ui.url",
30
+ "provider": "sharer"
14
31
  }
32
+
15
33
  }
@@ -44,43 +44,114 @@ describe "SharingTags.FacebookShare", ->
44
44
  delete @fb_partial.url
45
45
  expect(=> new subject(@fb_partial)).toThrow(SharingTags.Error(), /Error could not initialize sharing class/)
46
46
 
47
- it "expect error if init without title", ->
48
- delete @fb_partial.title
49
- expect(=> new subject(@fb_partial)).toThrow(SharingTags.Error(), /Error could not initialize sharing class/)
47
+ describe "share", ->
50
48
 
51
- it "expect error if init without description", ->
52
- delete @fb_partial.description
53
- expect(=> new subject(@fb_partial)).toThrow(SharingTags.Error(), /Error could not initialize sharing class/)
49
+ it "expect call fb_ui sharing", ->
50
+ @share = new subject(@fb_fixture.fb_ui)
51
+ spyOn(@share, "_fb_ui")
52
+
53
+ @share.share()
54
+ expect(@share._fb_ui).toHaveBeenCalled()
55
+
56
+ it "expect call sharer sharing", ->
57
+ @share = new subject(@fb_fixture.sharer)
58
+ spyOn(@share, "_sharer")
59
+
60
+ @share.share()
61
+ expect(@share._sharer).toHaveBeenCalled()
62
+
63
+ it "expect call _dialog sharing", ->
64
+ @share = new subject(@fb_fixture.dialog)
65
+ spyOn(@share, "_dialog")
66
+
67
+ @share.share()
68
+ expect(@share._dialog).toHaveBeenCalled()
54
69
 
55
70
  describe "share provider", ->
56
- it "expect use default provider"
57
- it "expect change default provider"
58
- it "expect change provider on initialize"
59
71
 
72
+ it "expect fb_ui as default provider", ->
73
+ @share = new subject(@fb_fixture.full)
74
+ expect(@share.provider).toBe "fb_ui"
60
75
 
61
- describe "callback", ->
62
- it "set global callback"
63
- it "set callback with initializer"
76
+ it "expect change provider to sharer on initialize", ->
77
+ @share = new subject(@fb_fixture.sharer)
78
+ expect(@share.provider).toBe "sharer"
64
79
 
65
80
  describe "events", ->
66
81
  it "expect trigger event start sharing"
67
82
  it "expect trigger event after sharing"
68
83
 
69
- # describe "mobile version", ->
70
- # beforeEach ->
71
- # spyOn(SharingTags.MobileShare, "_share")
72
- # spyOn(SharingTags.Share, "_share")
73
- #
74
- # it "expect call share mobile version when app_id defined", ->
75
- # share_params = url: "share url", return_url: "return url", app_id: "app id"
76
- # callback = -> "callback"
77
- # SharingTags.MobileShare.facebook(share_params, callback)
78
- # expect(SharingTags.MobileShare._share).toHaveBeenCalled()
79
- # expect(SharingTags.MobileShare._share).toHaveBeenCalledWith("http://www.facebook.com/dialog/share", href: "share url", redirect_uri: "return url", app_id: "app id", display: 'touch', callback)
80
- #
81
- ## it "expect call share desktop version without app_id", ->
82
- ## SharingTags.MobileShare.facebook(url: "share_url")
83
- ## expect(SharingTags.Share._share).toHaveBeenCalled()
84
- ## expect(SharingTags.MobileShare._share).toHaveBeenCalled()
85
- ## spyOn(SharingTags.MobileShare, "_share")
86
- #
84
+ describe "#_sharer", ->
85
+ beforeEach ->
86
+ @fb = @fb_fixture.sharer
87
+ @share = new subject(@fb)
88
+ spyOn(@share, "_open_popup")
89
+
90
+ it "expect call open popup with params", ->
91
+ @share._sharer()
92
+ expect(@share._open_popup).toHaveBeenCalled()
93
+ expect(@share._open_popup).toHaveBeenCalledWith("http://www.facebook.com/sharer.php", u: @fb.url)
94
+
95
+ it "expect error if init without url", ->
96
+ delete @share.url
97
+ expect(=> @share._sharer()).toThrow(SharingTags.Error(), /Error could not initialize sharing class/)
98
+
99
+ describe "#_dialog", ->
100
+ beforeEach ->
101
+ @fb = @fb_fixture.dialog
102
+ @share = new subject(@fb)
103
+ spyOn(@share, "_open_popup")
104
+
105
+ it "expect call open popup with params", ->
106
+ @share._dialog()
107
+ expect(@share._open_popup).toHaveBeenCalled()
108
+ expect(@share._open_popup).toHaveBeenCalledWith(
109
+ "http://www.facebook.com/dialog/share",
110
+ jasmine.objectContaining(href: @fb.url, redirect_uri: @fb.return_url, app_id: @fb.app_id, display: 'page')
111
+ )
112
+
113
+ it "expect error if init without return_url", ->
114
+ delete @share.return_url
115
+ expect(=> @share._dialog()).toThrow(SharingTags.Error(), /Error could not initialize sharing class/)
116
+
117
+ it "expect error if init without url", ->
118
+ delete @share.url
119
+ expect(=> @share._dialog()).toThrow(SharingTags.Error(), /Error could not initialize sharing class/)
120
+
121
+
122
+ describe "#_fb_ui", ->
123
+ beforeEach ->
124
+ @fb = @fb_fixture.fb_ui
125
+ @share = new subject(@fb)
126
+ window.FB
127
+
128
+ afterEach ->
129
+ delete window.FB
130
+
131
+ describe "loaded FB js SDK", ->
132
+ beforeEach ->
133
+ window.FB = jasmine.createSpyObj "FB", ['ui', 'init']
134
+
135
+ it "expect call FB.ui method with params", ->
136
+ @share._fb_ui()
137
+ expect(FB.ui).toHaveBeenCalled()
138
+ expect(FB.ui).toHaveBeenCalledWith(
139
+ jasmine.objectContaining(app_id: @fb.app_id, href: @fb.url, method: 'share'),
140
+ jasmine.any(Function)
141
+ )
142
+
143
+ it "expect error if init without url", ->
144
+ delete @share.url
145
+ expect(=> @share._fb_ui()).toThrow(SharingTags.Error(), /Error could not initialize sharing class/)
146
+
147
+ describe "loading FB.ui", ->
148
+ beforeEach ->
149
+ spyOn(@share.constructor, "init").andCallThrough()
150
+ spyOn(@share, "_fb_ui").andCallThrough()
151
+
152
+ it "expect load FB.ui if FB undefined", ->
153
+ expect(typeof FB).toBe('undefined')
154
+
155
+ @share._fb_ui()
156
+ expect(@share.constructor.init).toHaveBeenCalled()
157
+ expect(@share._fb_ui).toHaveBeenCalled()
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sharing_tags
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anatoliy Kovalchuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-17 00:00:00.000000000 Z
11
+ date: 2015-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -287,8 +287,9 @@ files:
287
287
  - app/assets/images/sharing_tags/icons/twitter.svg
288
288
  - app/assets/images/sharing_tags/icons/vkontakte.svg
289
289
  - app/assets/javascripts/sharing_tags.js.coffee
290
+ - app/assets/javascripts/sharing_tags/init.js.coffee
290
291
  - app/assets/javascripts/sharing_tags/links.js.coffee
291
- - app/assets/javascripts/sharing_tags/share.coffee
292
+ - app/assets/javascripts/sharing_tags/share.js.coffee
292
293
  - app/assets/javascripts/sharing_tags/share/facebook.coffee
293
294
  - app/assets/stylesheets/sharing_tags.css.sass
294
295
  - app/assets/stylesheets/sharing_tags/icons.css.sass