sharing_tags 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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