jssocials-rails 0.2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4973c0ee3d6981a9bfceea9094527edd7bef3cff
4
+ data.tar.gz: 7d9f6ae5560f6403d6e12b89878f267cdd8ec999
5
+ SHA512:
6
+ metadata.gz: 457ac61412e9c74563d93f9d181bdd5ddc8d212ff60b3d979780584a1dcff5052d04e8e012f0ab7a5527d53bfb6f5f851c07faca0ed66c070929c1fdaa63a4d8
7
+ data.tar.gz: 4a0debf546094624479097354009ba8ad9ee1d6ca376f32e0129cf0de30de5ae531ff5bd5295c56df98d687d4e212bcfb8c9abab30f7bba25a12a638b59f798d
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in jssocials-rails.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Hyo Seong Choi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1,88 @@
1
+ # Jssocials::Rails
2
+
3
+ jsSocials is a simple social network sharing jQuery plugin.
4
+
5
+ - http://js-socials.com/
6
+ - https://github.com/tabalinas/jssocials
7
+
8
+ This gem was built for the ease use of jsSocials in Rails projects.
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'jssocials-rails'
16
+ ```
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install jssocials-rails
25
+
26
+ ## Usage
27
+
28
+ Add this line to your application's app/assets/javascripts/application.js:
29
+
30
+ ```js
31
+ //= require ...
32
+ //= require jssocials # or jssocials.min
33
+ //= require ...
34
+ ```
35
+
36
+ Add this line to your application's app/assets/javascripts/application.scss:
37
+
38
+ ```css
39
+ ...
40
+ @import 'jssocials';
41
+ @import 'jssocials-theme-flat';
42
+ ...
43
+ ```
44
+
45
+ Finally, add the share container tag to your application's some view template file as follows:
46
+
47
+ ```html
48
+ <div id='share'></div>
49
+ ```
50
+
51
+ and, add this coffeescript to your application's some coffeescript file as follows:
52
+
53
+ ```coffee
54
+ $ ->
55
+ ...
56
+ $('#share').jsSocials
57
+ url: 'http://your-domain'
58
+ text: 'your share message'
59
+ showCount: (screenWidth) ->
60
+ screenWidth > 1024
61
+ showLabel: (screenWidth) ->
62
+ screenWidth > 1280
63
+ shares: [
64
+ {
65
+ share: 'email'
66
+ shareUrl: "mailto:<your-mail-address>?subject={text}&body={url}"
67
+ }
68
+ 'twitter'
69
+ 'facebook'
70
+ 'googleplus'
71
+ 'linkedin'
72
+ 'pinterest'
73
+ ]
74
+ ```
75
+
76
+ That's it.
77
+
78
+ ## Changelog
79
+
80
+ - v 0.2.0.0 : Initially deployed to Rubygems.org
81
+
82
+ ## Contributing
83
+
84
+ 1. Fork it ( https://github.com/[my-github-username]/jssocials-rails/fork )
85
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
86
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
87
+ 4. Push to the branch (`git push origin my-new-feature`)
88
+ 5. Create a new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "jssocials/rails"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'jssocials/rails/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "jssocials-rails"
8
+ spec.version = Jssocials::Rails::VERSION
9
+ spec.authors = ["Hyo Seong Choi"]
10
+ spec.email = ["lucius.choi@gmail.com"]
11
+ spec.license = 'MIT'
12
+ spec.summary = %q{Wrapping Social Network Sharing jQuery Plugin with ruby gem for the easy use in Rails projects}
13
+ spec.description = %q{jsSocials is a simple social network sharing jQuery plugin. It's flexible and easily extensible. Configure visual appearance. Choose one of several themes provided. Add any yet unsupported social network if needed.}
14
+ spec.homepage = "https://github.com/luciuschoi/jssocials-rails"
15
+
16
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
17
+ # delete this section to allow pushing this gem to any host.
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
20
+ else
21
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
22
+ end
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|jssocials)/}) }
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ["lib"]
28
+
29
+ spec.add_development_dependency "bundler", "~> 1.9"
30
+ spec.add_development_dependency "rake", "~> 10.0"
31
+ end
@@ -0,0 +1,8 @@
1
+ require "jssocials/rails/version"
2
+
3
+ module Jssocials
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ module Jssocials
2
+ module Rails
3
+ VERSION = "0.2.0.0"
4
+ end
5
+ end
@@ -0,0 +1,415 @@
1
+ /*! jssocials - v0.2.0 - 2015-05-17
2
+ * http://js-socials.com
3
+ * Copyright (c) 2015 Artem Tabalin; Licensed MIT */
4
+ (function(window, $, undefined) {
5
+
6
+ var JSSOCIALS = "JSSocials",
7
+ JSSOCIALS_DATA_KEY = JSSOCIALS;
8
+
9
+ var getOrApply = function(value, context) {
10
+ if($.isFunction(value)) {
11
+ return value.apply(context, $.makeArray(arguments).slice(2));
12
+ }
13
+ return value;
14
+ };
15
+
16
+ var IMG_SRC_REGEX = /(\.(jpeg|png|gif|bmp)$|^data:image\/(jpeg|png|gif|bmp);base64)/i;
17
+ var URL_PARAMS_REGEX = /(&?[a-zA-Z0-9]+=)\{([a-zA-Z0-9]+)\}/g;
18
+
19
+ var MEASURES = {
20
+ "G": 1000000000,
21
+ "M": 1000000,
22
+ "K": 1000
23
+ };
24
+
25
+ var shares = [];
26
+
27
+ function Socials(element, config) {
28
+ var $element = $(element);
29
+
30
+ $element.data(JSSOCIALS_DATA_KEY, this);
31
+
32
+ this._$element = $element;
33
+
34
+ this.shares = [];
35
+
36
+ this._init(config);
37
+ this._render();
38
+ }
39
+
40
+ Socials.prototype = {
41
+ url: "",
42
+ text: "",
43
+
44
+ showLabel: function(screenWidth) {
45
+ return (this.showCount === false) ?
46
+ (screenWidth > this.smallScreenWidth) :
47
+ (screenWidth >= this.largeScreenWidth);
48
+ },
49
+
50
+ showCount: function(screenWidth) {
51
+ return (screenWidth <= this.smallScreenWidth) ? "inside" : true;
52
+ },
53
+
54
+ smallScreenWidth: 640,
55
+ largeScreenWidth: 1024,
56
+
57
+ resizeTimeout: 200,
58
+
59
+ elementClass: "jssocials",
60
+ sharesClass: "jssocials-shares",
61
+ shareClass: "jssocials-share",
62
+ shareButtonClass: "jssocials-share-button",
63
+ shareLinkClass: "jssocials-share-link",
64
+ shareLogoClass: "jssocials-share-logo",
65
+ shareLabelClass: "jssocials-share-label",
66
+ shareLinkCountClass: "jssocials-share-link-count",
67
+ shareCountBoxClass: "jssocials-share-count-box",
68
+ shareCountClass: "jssocials-share-count",
69
+ shareZeroCountClass: "jssocials-share-no-count",
70
+
71
+ _init: function(config) {
72
+ this._initDefaults();
73
+ $.extend(this, config);
74
+ this._initShares();
75
+ this._attachWindowResizeCallback();
76
+ },
77
+
78
+ _initDefaults: function() {
79
+ this.url = window.location.href;
80
+ this.text = $("meta[name=description]").attr("content") || $("title").text();
81
+ },
82
+
83
+ _initShares: function() {
84
+ this.shares = $.map(this.shares, $.proxy(function(shareConfig) {
85
+ if(typeof shareConfig === "string") {
86
+ shareConfig = { share: shareConfig };
87
+ }
88
+
89
+ var share = (shareConfig.share && shares[shareConfig.share]);
90
+
91
+ if(!share && !shareConfig.renderer) {
92
+ throw Error("Share '" + shareConfig.share + "' is not found");
93
+ }
94
+
95
+ return $.extend({ url: this.url, text: this.text }, share, shareConfig);
96
+ }, this));
97
+ },
98
+
99
+ _attachWindowResizeCallback: function() {
100
+ $(window).on("resize", $.proxy(this._windowResizeHandler, this));
101
+ },
102
+
103
+ _detachWindowResizeCallback: function() {
104
+ $(window).off("resize", this._windowResizeHandler);
105
+ },
106
+
107
+ _windowResizeHandler: function() {
108
+ if($.isFunction(this.showLabel) || $.isFunction(this.showCount)) {
109
+ window.clearTimeout(this._resizeTimer);
110
+ this._resizeTimer = setTimeout($.proxy(this.refresh, this), this.resizeTimeout);
111
+ }
112
+ },
113
+
114
+ _render: function() {
115
+ this._clear();
116
+
117
+ this._defineOptionsByScreen();
118
+
119
+ this._$element.addClass(this.elementClass);
120
+
121
+ this._$shares = $("<div>").addClass(this.sharesClass)
122
+ .appendTo(this._$element);
123
+
124
+ this._renderShares();
125
+ },
126
+
127
+ _defineOptionsByScreen: function() {
128
+ this._screenWidth = $(window).width();
129
+ this._showLabel = getOrApply(this.showLabel, this, this._screenWidth);
130
+ this._showCount = getOrApply(this.showCount, this, this._screenWidth);
131
+ },
132
+
133
+ _renderShares: function() {
134
+ $.each(this.shares, $.proxy(function(_, share) {
135
+ this._renderShare(share);
136
+ }, this));
137
+ },
138
+
139
+ _renderShare: function(share) {
140
+ var $share;
141
+
142
+ if($.isFunction(share.renderer)) {
143
+ $share = $(share.renderer());
144
+ } else {
145
+ $share = this._createShare(share);
146
+ }
147
+
148
+ $share.addClass(this.shareClass)
149
+ .addClass(share.share ? "jssocials-share-" + share.share : "")
150
+ .addClass(share.css)
151
+ .appendTo(this._$shares);
152
+ },
153
+
154
+ _createShare: function(share) {
155
+ var $result = $("<div>");
156
+ var $shareLink = this._createShareLink(share).appendTo($result);
157
+
158
+ if(this._showCount) {
159
+ var isInsideCount = (this._showCount === "inside");
160
+ var $countContainer = isInsideCount ? $shareLink : $("<div>").addClass(this.shareCountBoxClass).appendTo($result);
161
+ $countContainer.addClass(isInsideCount ? this.shareLinkCountClass : this.shareCountBoxClass);
162
+ this._renderShareCount(share, $countContainer);
163
+ }
164
+
165
+ return $result;
166
+ },
167
+
168
+ _createShareLink: function(share) {
169
+ var $result = $("<a>").addClass(this.shareLinkClass)
170
+ .attr({ href: this._getShareUrl(share), target: "_blank" })
171
+ .append(this._createShareLogo(share));
172
+
173
+ if(this._showLabel) {
174
+ $result.append(this._createShareLabel(share));
175
+ }
176
+
177
+ return $result;
178
+ },
179
+
180
+ _getShareUrl: function(share) {
181
+ var shareUrl = getOrApply(share.shareUrl, share);
182
+ return this._formatShareUrl(shareUrl, share);
183
+ },
184
+
185
+ _createShareLogo: function(share) {
186
+ var logo = share.logo;
187
+
188
+ var $result = IMG_SRC_REGEX.test(logo) ?
189
+ $("<img>").attr("src", share.logo) :
190
+ $("<i>").addClass(logo);
191
+
192
+ $result.addClass(this.shareLogoClass);
193
+
194
+ return $result;
195
+ },
196
+
197
+ _createShareLabel: function(share) {
198
+ return $("<span>").addClass(this.shareLabelClass)
199
+ .text(share.label);
200
+ },
201
+
202
+ _renderShareCount: function(share, $container) {
203
+ var $count = $("<span>").addClass(this.shareCountClass);
204
+
205
+ $container.addClass(this.shareZeroCountClass)
206
+ .append($count);
207
+
208
+ this._loadCount(share).done($.proxy(function(count) {
209
+ if(count) {
210
+ $container.removeClass(this.shareZeroCountClass);
211
+ $count.text(count);
212
+ }
213
+ }, this));
214
+ },
215
+
216
+ _loadCount: function(share) {
217
+ var deferred = $.Deferred();
218
+ var countUrl = this._getCountUrl(share);
219
+
220
+ if(!countUrl) {
221
+ return deferred.resolve(0).promise();
222
+ }
223
+
224
+ var handleSuccess = $.proxy(function(response) {
225
+ deferred.resolve(this._getCountValue(response, share));
226
+ }, this);
227
+
228
+ $.getJSON(countUrl).done(handleSuccess)
229
+ .fail(function() {
230
+ $.get(countUrl).done(handleSuccess)
231
+ .fail(function() {
232
+ deferred.resolve(0);
233
+ });
234
+ });
235
+
236
+ return deferred.promise();
237
+ },
238
+
239
+ _getCountUrl: function(share) {
240
+ var countUrl = getOrApply(share.countUrl, share);
241
+ return this._formatShareUrl(countUrl, share);
242
+ },
243
+
244
+ _getCountValue: function(response, share) {
245
+ var count = ($.isFunction(share.getCount) ? share.getCount(response) : response) || 0;
246
+ return (typeof count === "string") ? count : this._formatNumber(count);
247
+ },
248
+
249
+ _formatNumber: function(number) {
250
+ $.each(MEASURES, function(letter, value) {
251
+ if(number >= value) {
252
+ number = parseFloat((number / value).toFixed(2)) + letter;
253
+ return false;
254
+ }
255
+ });
256
+
257
+ return number;
258
+ },
259
+
260
+ _formatShareUrl: function(url, share) {
261
+ return url.replace(URL_PARAMS_REGEX, function(match, key, field) {
262
+ var value = share[field] || "";
263
+ return value ? (key + window.encodeURIComponent(value)) : "";
264
+ });
265
+ },
266
+
267
+ _clear: function() {
268
+ window.clearTimeout(this._resizeTimer);
269
+ this._$element.empty();
270
+ },
271
+
272
+ refresh: function() {
273
+ this._render();
274
+ },
275
+
276
+ destroy: function() {
277
+ this._clear();
278
+ this._detachWindowResizeCallback();
279
+
280
+ this._$element
281
+ .removeClass(this.elementClass)
282
+ .removeData(JSSOCIALS_DATA_KEY);
283
+ },
284
+
285
+ option: function(key, value) {
286
+ if(arguments.length === 1) {
287
+ return this[key];
288
+ }
289
+
290
+ this[key] = value;
291
+ this.refresh();
292
+ }
293
+
294
+ };
295
+
296
+
297
+ $.fn.jsSocials = function(config) {
298
+ var args = $.makeArray(arguments),
299
+ methodArgs = args.slice(1),
300
+ result = this;
301
+
302
+ this.each(function() {
303
+ var $element = $(this),
304
+ instance = $element.data(JSSOCIALS_DATA_KEY),
305
+ methodResult;
306
+
307
+ if(instance) {
308
+ if(typeof config === "string") {
309
+ methodResult = instance[config].apply(instance, methodArgs);
310
+ if(methodResult !== undefined && methodResult !== instance) {
311
+ result = methodResult;
312
+ return false;
313
+ }
314
+ } else {
315
+ instance._detachWindowResizeCallback();
316
+ instance._init(config);
317
+ instance._render();
318
+ }
319
+ } else {
320
+ new Socials($element, config);
321
+ }
322
+ });
323
+
324
+ return result;
325
+ };
326
+
327
+ var setDefaults = function(config) {
328
+ var component;
329
+
330
+ if($.isPlainObject(config)) {
331
+ component = Socials.prototype;
332
+ } else {
333
+ component = shares[config];
334
+ config = arguments[1] || {};
335
+ }
336
+
337
+ $.extend(component, config);
338
+ };
339
+
340
+ window.jsSocials = {
341
+ Socials: Socials,
342
+ shares: shares,
343
+ setDefaults: setDefaults
344
+ };
345
+
346
+ }(window, jQuery));
347
+
348
+ (function(window, $, jsSocials, undefined) {
349
+
350
+ $.extend(jsSocials.shares, {
351
+
352
+ email: {
353
+ label: "E-mail",
354
+ logo: "fa fa-at",
355
+ shareUrl: "mailto:?subject={text}&body={url}",
356
+ countUrl: ""
357
+ },
358
+
359
+ twitter: {
360
+ label: "Tweet",
361
+ logo: "fa fa-twitter",
362
+ shareUrl: "https://twitter.com/share?url={url}&text={text}&via={via}&hashtags={hashtags}",
363
+ countUrl: "https://cdn.api.twitter.com/1/urls/count.json?url={url}&callback=?",
364
+ getCount: function(data) {
365
+ return data.count;
366
+ }
367
+ },
368
+
369
+ facebook: {
370
+ label: "Like",
371
+ logo: "fa fa-facebook",
372
+ shareUrl: "https://facebook.com/sharer/sharer.php?u={url}",
373
+ countUrl: function() {
374
+ return "https://graph.facebook.com/fql?q=SELECT total_count FROM link_stat WHERE url='" + window.encodeURIComponent(this.url) + "'";
375
+ },
376
+ getCount: function(data) {
377
+ return (data.data.length && data.data[0].total_count) || 0;
378
+ }
379
+ },
380
+
381
+ googleplus: {
382
+ label: "+1",
383
+ logo: "fa fa-google-plus",
384
+ shareUrl: "https://plus.google.com/share?url={url}",
385
+ countUrl: function() {
386
+ return "https://cors-anywhere.herokuapp.com/https://plusone.google.com/_/+1/fastbutton?url="+ window.encodeURIComponent(this.url);
387
+ },
388
+ getCount: function(data) {
389
+ return parseFloat((data.match(/\{c: ([.0-9E]+)/) || [])[1]);
390
+ }
391
+ },
392
+
393
+ linkedin: {
394
+ label: "Share",
395
+ logo: "fa fa-linkedin",
396
+ shareUrl: "https://www.linkedin.com/shareArticle?url={url}",
397
+ countUrl: "https://www.linkedin.com/countserv/count/share?format=jsonp&url={url}&callback=?",
398
+ getCount: function(data) {
399
+ return data.count;
400
+ }
401
+ },
402
+
403
+ pinterest: {
404
+ label: "Pin it",
405
+ logo: "fa fa-pinterest",
406
+ shareUrl: "https://pinterest.com/pin/create/bookmarklet/?media={media}&url={url}&description={text}",
407
+ countUrl: "https://api.pinterest.com/v1/urls/count.json?&url={url}&callback=?",
408
+ getCount: function(data) {
409
+ return data.count;
410
+ }
411
+ }
412
+
413
+ });
414
+
415
+ }(window, jQuery, window.jsSocials));
@@ -0,0 +1,4 @@
1
+ /*! jssocials - v0.2.0 - 2015-05-17
2
+ * http://js-socials.com
3
+ * Copyright (c) 2015 Artem Tabalin; Licensed MIT */
4
+ !function(a,b,c){function d(a,c){var d=b(a);d.data(f,this),this._$element=d,this.shares=[],this._init(c),this._render()}var e="JSSocials",f=e,g=function(a,c){return b.isFunction(a)?a.apply(c,b.makeArray(arguments).slice(2)):a},h=/(\.(jpeg|png|gif|bmp)$|^data:image\/(jpeg|png|gif|bmp);base64)/i,i=/(&?[a-zA-Z0-9]+=)\{([a-zA-Z0-9]+)\}/g,j={G:1e9,M:1e6,K:1e3},k=[];d.prototype={url:"",text:"",showLabel:function(a){return this.showCount===!1?a>this.smallScreenWidth:a>=this.largeScreenWidth},showCount:function(a){return a<=this.smallScreenWidth?"inside":!0},smallScreenWidth:640,largeScreenWidth:1024,resizeTimeout:200,elementClass:"jssocials",sharesClass:"jssocials-shares",shareClass:"jssocials-share",shareButtonClass:"jssocials-share-button",shareLinkClass:"jssocials-share-link",shareLogoClass:"jssocials-share-logo",shareLabelClass:"jssocials-share-label",shareLinkCountClass:"jssocials-share-link-count",shareCountBoxClass:"jssocials-share-count-box",shareCountClass:"jssocials-share-count",shareZeroCountClass:"jssocials-share-no-count",_init:function(a){this._initDefaults(),b.extend(this,a),this._initShares(),this._attachWindowResizeCallback()},_initDefaults:function(){this.url=a.location.href,this.text=b("meta[name=description]").attr("content")||b("title").text()},_initShares:function(){this.shares=b.map(this.shares,b.proxy(function(a){"string"==typeof a&&(a={share:a});var c=a.share&&k[a.share];if(!c&&!a.renderer)throw Error("Share '"+a.share+"' is not found");return b.extend({url:this.url,text:this.text},c,a)},this))},_attachWindowResizeCallback:function(){b(a).on("resize",b.proxy(this._windowResizeHandler,this))},_detachWindowResizeCallback:function(){b(a).off("resize",this._windowResizeHandler)},_windowResizeHandler:function(){(b.isFunction(this.showLabel)||b.isFunction(this.showCount))&&(a.clearTimeout(this._resizeTimer),this._resizeTimer=setTimeout(b.proxy(this.refresh,this),this.resizeTimeout))},_render:function(){this._clear(),this._defineOptionsByScreen(),this._$element.addClass(this.elementClass),this._$shares=b("<div>").addClass(this.sharesClass).appendTo(this._$element),this._renderShares()},_defineOptionsByScreen:function(){this._screenWidth=b(a).width(),this._showLabel=g(this.showLabel,this,this._screenWidth),this._showCount=g(this.showCount,this,this._screenWidth)},_renderShares:function(){b.each(this.shares,b.proxy(function(a,b){this._renderShare(b)},this))},_renderShare:function(a){var c;c=b.isFunction(a.renderer)?b(a.renderer()):this._createShare(a),c.addClass(this.shareClass).addClass(a.share?"jssocials-share-"+a.share:"").addClass(a.css).appendTo(this._$shares)},_createShare:function(a){var c=b("<div>"),d=this._createShareLink(a).appendTo(c);if(this._showCount){var e="inside"===this._showCount,f=e?d:b("<div>").addClass(this.shareCountBoxClass).appendTo(c);f.addClass(e?this.shareLinkCountClass:this.shareCountBoxClass),this._renderShareCount(a,f)}return c},_createShareLink:function(a){var c=b("<a>").addClass(this.shareLinkClass).attr({href:this._getShareUrl(a),target:"_blank"}).append(this._createShareLogo(a));return this._showLabel&&c.append(this._createShareLabel(a)),c},_getShareUrl:function(a){var b=g(a.shareUrl,a);return this._formatShareUrl(b,a)},_createShareLogo:function(a){var c=a.logo,d=h.test(c)?b("<img>").attr("src",a.logo):b("<i>").addClass(c);return d.addClass(this.shareLogoClass),d},_createShareLabel:function(a){return b("<span>").addClass(this.shareLabelClass).text(a.label)},_renderShareCount:function(a,c){var d=b("<span>").addClass(this.shareCountClass);c.addClass(this.shareZeroCountClass).append(d),this._loadCount(a).done(b.proxy(function(a){a&&(c.removeClass(this.shareZeroCountClass),d.text(a))},this))},_loadCount:function(a){var c=b.Deferred(),d=this._getCountUrl(a);if(!d)return c.resolve(0).promise();var e=b.proxy(function(b){c.resolve(this._getCountValue(b,a))},this);return b.getJSON(d).done(e).fail(function(){b.get(d).done(e).fail(function(){c.resolve(0)})}),c.promise()},_getCountUrl:function(a){var b=g(a.countUrl,a);return this._formatShareUrl(b,a)},_getCountValue:function(a,c){var d=(b.isFunction(c.getCount)?c.getCount(a):a)||0;return"string"==typeof d?d:this._formatNumber(d)},_formatNumber:function(a){return b.each(j,function(b,c){return a>=c?(a=parseFloat((a/c).toFixed(2))+b,!1):void 0}),a},_formatShareUrl:function(b,c){return b.replace(i,function(b,d,e){var f=c[e]||"";return f?d+a.encodeURIComponent(f):""})},_clear:function(){a.clearTimeout(this._resizeTimer),this._$element.empty()},refresh:function(){this._render()},destroy:function(){this._clear(),this._detachWindowResizeCallback(),this._$element.removeClass(this.elementClass).removeData(f)},option:function(a,b){return 1===arguments.length?this[a]:(this[a]=b,void this.refresh())}},b.fn.jsSocials=function(a){var e=b.makeArray(arguments),g=e.slice(1),h=this;return this.each(function(){var e,i=b(this),j=i.data(f);if(j)if("string"==typeof a){if(e=j[a].apply(j,g),e!==c&&e!==j)return h=e,!1}else j._detachWindowResizeCallback(),j._init(a),j._render();else new d(i,a)}),h};var l=function(a){var c;b.isPlainObject(a)?c=d.prototype:(c=k[a],a=arguments[1]||{}),b.extend(c,a)};a.jsSocials={Socials:d,shares:k,setDefaults:l}}(window,jQuery),function(a,b,c){b.extend(c.shares,{email:{label:"E-mail",logo:"fa fa-at",shareUrl:"mailto:?subject={text}&body={url}",countUrl:""},twitter:{label:"Tweet",logo:"fa fa-twitter",shareUrl:"https://twitter.com/share?url={url}&text={text}&via={via}&hashtags={hashtags}",countUrl:"https://cdn.api.twitter.com/1/urls/count.json?url={url}&callback=?",getCount:function(a){return a.count}},facebook:{label:"Like",logo:"fa fa-facebook",shareUrl:"https://facebook.com/sharer/sharer.php?u={url}",countUrl:function(){return"https://graph.facebook.com/fql?q=SELECT total_count FROM link_stat WHERE url='"+a.encodeURIComponent(this.url)+"'"},getCount:function(a){return a.data.length&&a.data[0].total_count||0}},googleplus:{label:"+1",logo:"fa fa-google-plus",shareUrl:"https://plus.google.com/share?url={url}",countUrl:function(){return"https://cors-anywhere.herokuapp.com/https://plusone.google.com/_/+1/fastbutton?url="+a.encodeURIComponent(this.url)},getCount:function(a){return parseFloat((a.match(/\{c: ([.0-9E]+)/)||[])[1])}},linkedin:{label:"Share",logo:"fa fa-linkedin",shareUrl:"https://www.linkedin.com/shareArticle?url={url}",countUrl:"https://www.linkedin.com/countserv/count/share?format=jsonp&url={url}&callback=?",getCount:function(a){return a.count}},pinterest:{label:"Pin it",logo:"fa fa-pinterest",shareUrl:"https://pinterest.com/pin/create/bookmarklet/?media={media}&url={url}&description={text}",countUrl:"https://api.pinterest.com/v1/urls/count.json?&url={url}&callback=?",getCount:function(a){return a.count}}})}(window,jQuery,window.jsSocials);
@@ -0,0 +1,84 @@
1
+ .jssocials-share-twitter .jssocials-share-link {
2
+ background: #00aced;
3
+ border: 1px solid #0099d3; }
4
+ .jssocials-share-twitter .jssocials-share-link:hover {
5
+ background: #0087ba; }
6
+
7
+ .jssocials-share-facebook .jssocials-share-link {
8
+ background: #3b5998;
9
+ border: 1px solid #344e86; }
10
+ .jssocials-share-facebook .jssocials-share-link:hover {
11
+ background: #2d4373; }
12
+
13
+ .jssocials-share-googleplus .jssocials-share-link {
14
+ background: #dd4b39;
15
+ border: 1px solid #d73925; }
16
+ .jssocials-share-googleplus .jssocials-share-link:hover {
17
+ background: #c23321; }
18
+
19
+ .jssocials-share-linkedin .jssocials-share-link {
20
+ background: #007bb6;
21
+ border: 1px solid #006a9d; }
22
+ .jssocials-share-linkedin .jssocials-share-link:hover {
23
+ background: #005983; }
24
+
25
+ .jssocials-share-pinterest .jssocials-share-link {
26
+ background: #cb2027;
27
+ border: 1px solid #b51d23; }
28
+ .jssocials-share-pinterest .jssocials-share-link:hover {
29
+ background: #9f191f; }
30
+
31
+ .jssocials-share-email .jssocials-share-link {
32
+ background: #3490F3;
33
+ border: 1px solid #1c83f2; }
34
+ .jssocials-share-email .jssocials-share-link:hover {
35
+ background: #0e76e6; }
36
+
37
+ .jssocials-share-link {
38
+ padding: .5em .6em;
39
+ border-radius: 0.3em;
40
+ box-shadow: inset 0 1px 3px rgba(255, 255, 255, 0.3), 0 1px 3px rgba(0, 0, 0, 0.15), 0 1px 3px rgba(0, 0, 0, 0.15);
41
+ color: #fff;
42
+ -webkit-transition: background 200ms ease-in-out;
43
+ transition: background 200ms ease-in-out; }
44
+ .jssocials-share-link:hover, .jssocials-share-link:focus, .jssocials-share-link:active {
45
+ color: #fff; }
46
+
47
+ .jssocials-share-count-box {
48
+ position: relative;
49
+ height: 2.5em;
50
+ padding: 0 .3em;
51
+ margin-left: 6px;
52
+ border-radius: 0.3em;
53
+ border: 1px solid #dcdcdc;
54
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); }
55
+ .jssocials-share-count-box:before {
56
+ content: "";
57
+ position: absolute;
58
+ top: 1em;
59
+ left: -9px;
60
+ display: block;
61
+ width: 0;
62
+ border-style: solid;
63
+ border-width: 6px 6px 0;
64
+ border-color: #dcdcdc transparent;
65
+ -webkit-transform: rotate(90deg);
66
+ -ms-transform: rotate(90deg);
67
+ transform: rotate(90deg); }
68
+ .jssocials-share-count-box:after {
69
+ content: "";
70
+ position: absolute;
71
+ top: 1em;
72
+ left: -7px;
73
+ display: block;
74
+ width: 0;
75
+ border-style: solid;
76
+ border-width: 5px 5px 0;
77
+ border-color: #fff transparent;
78
+ -webkit-transform: rotate(90deg);
79
+ -ms-transform: rotate(90deg);
80
+ transform: rotate(90deg); }
81
+ .jssocials-share-count-box .jssocials-share-count {
82
+ line-height: 2.5em;
83
+ color: #444;
84
+ font-size: .9em; }
@@ -0,0 +1,69 @@
1
+ .jssocials-share-twitter .jssocials-share-link {
2
+ background: #00aced; }
3
+ .jssocials-share-twitter .jssocials-share-link:hover {
4
+ background: #0087ba; }
5
+
6
+ .jssocials-share-facebook .jssocials-share-link {
7
+ background: #3b5998; }
8
+ .jssocials-share-facebook .jssocials-share-link:hover {
9
+ background: #2d4373; }
10
+
11
+ .jssocials-share-googleplus .jssocials-share-link {
12
+ background: #dd4b39; }
13
+ .jssocials-share-googleplus .jssocials-share-link:hover {
14
+ background: #c23321; }
15
+
16
+ .jssocials-share-linkedin .jssocials-share-link {
17
+ background: #007bb6; }
18
+ .jssocials-share-linkedin .jssocials-share-link:hover {
19
+ background: #005983; }
20
+
21
+ .jssocials-share-pinterest .jssocials-share-link {
22
+ background: #cb2027; }
23
+ .jssocials-share-pinterest .jssocials-share-link:hover {
24
+ background: #9f191f; }
25
+
26
+ .jssocials-share-email .jssocials-share-link {
27
+ background: #3490F3; }
28
+ .jssocials-share-email .jssocials-share-link:hover {
29
+ background: #0e76e6; }
30
+
31
+ .jssocials-share-link {
32
+ padding: .5em .6em;
33
+ color: #fff;
34
+ -webkit-transition: background 200ms ease-in-out, border-color 200ms ease-in-out;
35
+ transition: background 200ms ease-in-out, border-color 200ms ease-in-out; }
36
+ .jssocials-share-link:hover, .jssocials-share-link:focus, .jssocials-share-link:active {
37
+ color: #fff; }
38
+
39
+ .jssocials-share-count-box {
40
+ position: relative;
41
+ height: 2.5em;
42
+ padding: 0 .3em;
43
+ margin-left: 0.3em;
44
+ background: #f5f5f5;
45
+ -webkit-transition: background 200ms ease-in-out, border-color 200ms ease-in-out;
46
+ transition: background 200ms ease-in-out, border-color 200ms ease-in-out; }
47
+ .jssocials-share-count-box:hover {
48
+ background: gainsboro; }
49
+ .jssocials-share-count-box:hover:after {
50
+ border-color: transparent gainsboro transparent transparent; }
51
+ .jssocials-share-count-box:after {
52
+ content: "";
53
+ display: block;
54
+ position: absolute;
55
+ top: 0.85em;
56
+ left: -0.3em;
57
+ width: 0;
58
+ height: 0;
59
+ border-width: 0.4em 0.4em 0.4em 0;
60
+ border-style: solid;
61
+ border-color: transparent #f5f5f5 transparent transparent;
62
+ -webkit-transform: rotate(360deg);
63
+ -ms-transform: rotate(360deg);
64
+ transform: rotate(360deg);
65
+ -webkit-transition: background 200ms ease-in-out, border-color 200ms ease-in-out;
66
+ transition: background 200ms ease-in-out, border-color 200ms ease-in-out; }
67
+ .jssocials-share-count-box .jssocials-share-count {
68
+ line-height: 2.5em;
69
+ color: #444; }
@@ -0,0 +1,73 @@
1
+ .jssocials-share-twitter .jssocials-share-link {
2
+ color: #00aced; }
3
+ .jssocials-share-twitter .jssocials-share-link .jssocials-share-label {
4
+ color: #00aced; }
5
+ .jssocials-share-twitter .jssocials-share-link:hover, .jssocials-share-twitter .jssocials-share-link:focus, .jssocials-share-twitter .jssocials-share-link:active {
6
+ color: #0087ba; }
7
+ .jssocials-share-twitter .jssocials-share-link:hover .jssocials-share-label, .jssocials-share-twitter .jssocials-share-link:focus .jssocials-share-label, .jssocials-share-twitter .jssocials-share-link:active .jssocials-share-label {
8
+ color: #0087ba; }
9
+
10
+ .jssocials-share-facebook .jssocials-share-link {
11
+ color: #3b5998; }
12
+ .jssocials-share-facebook .jssocials-share-link .jssocials-share-label {
13
+ color: #3b5998; }
14
+ .jssocials-share-facebook .jssocials-share-link:hover, .jssocials-share-facebook .jssocials-share-link:focus, .jssocials-share-facebook .jssocials-share-link:active {
15
+ color: #2d4373; }
16
+ .jssocials-share-facebook .jssocials-share-link:hover .jssocials-share-label, .jssocials-share-facebook .jssocials-share-link:focus .jssocials-share-label, .jssocials-share-facebook .jssocials-share-link:active .jssocials-share-label {
17
+ color: #2d4373; }
18
+
19
+ .jssocials-share-googleplus .jssocials-share-link {
20
+ color: #dd4b39; }
21
+ .jssocials-share-googleplus .jssocials-share-link .jssocials-share-label {
22
+ color: #dd4b39; }
23
+ .jssocials-share-googleplus .jssocials-share-link:hover, .jssocials-share-googleplus .jssocials-share-link:focus, .jssocials-share-googleplus .jssocials-share-link:active {
24
+ color: #c23321; }
25
+ .jssocials-share-googleplus .jssocials-share-link:hover .jssocials-share-label, .jssocials-share-googleplus .jssocials-share-link:focus .jssocials-share-label, .jssocials-share-googleplus .jssocials-share-link:active .jssocials-share-label {
26
+ color: #c23321; }
27
+
28
+ .jssocials-share-linkedin .jssocials-share-link {
29
+ color: #007bb6; }
30
+ .jssocials-share-linkedin .jssocials-share-link .jssocials-share-label {
31
+ color: #007bb6; }
32
+ .jssocials-share-linkedin .jssocials-share-link:hover, .jssocials-share-linkedin .jssocials-share-link:focus, .jssocials-share-linkedin .jssocials-share-link:active {
33
+ color: #005983; }
34
+ .jssocials-share-linkedin .jssocials-share-link:hover .jssocials-share-label, .jssocials-share-linkedin .jssocials-share-link:focus .jssocials-share-label, .jssocials-share-linkedin .jssocials-share-link:active .jssocials-share-label {
35
+ color: #005983; }
36
+
37
+ .jssocials-share-pinterest .jssocials-share-link {
38
+ color: #cb2027; }
39
+ .jssocials-share-pinterest .jssocials-share-link .jssocials-share-label {
40
+ color: #cb2027; }
41
+ .jssocials-share-pinterest .jssocials-share-link:hover, .jssocials-share-pinterest .jssocials-share-link:focus, .jssocials-share-pinterest .jssocials-share-link:active {
42
+ color: #9f191f; }
43
+ .jssocials-share-pinterest .jssocials-share-link:hover .jssocials-share-label, .jssocials-share-pinterest .jssocials-share-link:focus .jssocials-share-label, .jssocials-share-pinterest .jssocials-share-link:active .jssocials-share-label {
44
+ color: #9f191f; }
45
+
46
+ .jssocials-share-email .jssocials-share-link {
47
+ color: #3490F3; }
48
+ .jssocials-share-email .jssocials-share-link .jssocials-share-label {
49
+ color: #3490F3; }
50
+ .jssocials-share-email .jssocials-share-link:hover, .jssocials-share-email .jssocials-share-link:focus, .jssocials-share-email .jssocials-share-link:active {
51
+ color: #0e76e6; }
52
+ .jssocials-share-email .jssocials-share-link:hover .jssocials-share-label, .jssocials-share-email .jssocials-share-link:focus .jssocials-share-label, .jssocials-share-email .jssocials-share-link:active .jssocials-share-label {
53
+ color: #0e76e6; }
54
+
55
+ .jssocials-share-link {
56
+ -webkit-transition: color 200ms ease-in-out;
57
+ transition: color 200ms ease-in-out; }
58
+ .jssocials-share-link.jssocials-share-link-count .jssocials-share-count {
59
+ font-size: .5em; }
60
+
61
+ .jssocials-share-label {
62
+ font-size: 0.8em;
63
+ color: #444;
64
+ -webkit-transition: color 200ms ease-in-out;
65
+ transition: color 200ms ease-in-out; }
66
+
67
+ .jssocials-share-count-box {
68
+ margin-left: 0.3em;
69
+ border: 1px solid #efefef;
70
+ border-radius: 0.3em; }
71
+ .jssocials-share-count-box .jssocials-share-count {
72
+ font-size: 0.8em;
73
+ color: #444; }
@@ -0,0 +1,44 @@
1
+ .jssocials-share-link {
2
+ padding: .5em .6em;
3
+ border-radius: 0.3em;
4
+ border: 2px solid #acacac;
5
+ color: #acacac;
6
+ -webkit-transition: background 200ms ease-in-out, color 200ms ease-in-out, border-color 200ms ease-in-out;
7
+ transition: background 200ms ease-in-out, color 200ms ease-in-out, border-color 200ms ease-in-out; }
8
+ .jssocials-share-link:hover, .jssocials-share-link:focus, .jssocials-share-link:active {
9
+ border: 2px solid #939393;
10
+ color: #939393; }
11
+
12
+ .jssocials-share-count-box {
13
+ position: relative;
14
+ height: 1.5em;
15
+ padding: 0 .3em;
16
+ margin-left: 0.3em;
17
+ background: #f5f5f5;
18
+ border-radius: 0.3em;
19
+ -webkit-transition: background 200ms ease-in-out, color 200ms ease-in-out, border-color 200ms ease-in-out;
20
+ transition: background 200ms ease-in-out, color 200ms ease-in-out, border-color 200ms ease-in-out; }
21
+ .jssocials-share-count-box:hover {
22
+ background: #e8e8e8; }
23
+ .jssocials-share-count-box:hover:after {
24
+ border-color: transparent #e8e8e8 transparent transparent; }
25
+ .jssocials-share-count-box:after {
26
+ content: "";
27
+ display: block;
28
+ position: absolute;
29
+ top: 0.35em;
30
+ left: -0.3em;
31
+ width: 0;
32
+ height: 0;
33
+ border-width: 0.4em 0.4em 0.4em 0;
34
+ border-style: solid;
35
+ border-color: transparent #f5f5f5 transparent transparent;
36
+ -webkit-transform: rotate(360deg);
37
+ -ms-transform: rotate(360deg);
38
+ transform: rotate(360deg);
39
+ -webkit-transition: background 200ms ease-in-out, color 200ms ease-in-out, border-color 200ms ease-in-out;
40
+ transition: background 200ms ease-in-out, color 200ms ease-in-out, border-color 200ms ease-in-out; }
41
+ .jssocials-share-count-box .jssocials-share-count {
42
+ line-height: 1.7em;
43
+ color: #acacac;
44
+ font-size: .9em; }
@@ -0,0 +1,58 @@
1
+ .jssocials-shares {
2
+ margin: 0.2em 0; }
3
+
4
+ .jssocials-shares * {
5
+ box-sizing: border-box; }
6
+
7
+ .jssocials-share {
8
+ display: inline-block;
9
+ vertical-align: top;
10
+ margin: 0.3em; }
11
+
12
+ .jssocials-share:first-child {
13
+ margin-left: 0; }
14
+
15
+ .jssocials-share:last-child {
16
+ margin-right: 0; }
17
+
18
+ .jssocials-share-logo {
19
+ width: 1em;
20
+ vertical-align: middle;
21
+ font-size: 1.5em; }
22
+
23
+ img.jssocials-share-logo {
24
+ width: auto;
25
+ height: 1em; }
26
+
27
+ .jssocials-share-link {
28
+ display: inline-block;
29
+ text-align: center;
30
+ text-decoration: none;
31
+ line-height: 1; }
32
+ .jssocials-share-link.jssocials-share-link-count {
33
+ padding-top: .2em; }
34
+ .jssocials-share-link.jssocials-share-link-count .jssocials-share-count {
35
+ display: block;
36
+ font-size: .6em;
37
+ margin: 0 -.5em -.8em -.5em; }
38
+ .jssocials-share-link.jssocials-share-no-count {
39
+ padding-top: .5em; }
40
+ .jssocials-share-link.jssocials-share-no-count .jssocials-share-count {
41
+ height: 1em; }
42
+
43
+ .jssocials-share-label {
44
+ padding-left: 0.3em;
45
+ vertical-align: middle; }
46
+
47
+ .jssocials-share-count-box {
48
+ display: inline-block;
49
+ height: 1.5em;
50
+ padding: 0 0.3em;
51
+ vertical-align: middle;
52
+ cursor: default; }
53
+ .jssocials-share-count-box.jssocials-share-no-count {
54
+ display: none; }
55
+
56
+ .jssocials-share-count {
57
+ line-height: 1.5em;
58
+ vertical-align: middle; }
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jssocials-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Hyo Seong Choi
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-06-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: jsSocials is a simple social network sharing jQuery plugin. It's flexible
42
+ and easily extensible. Configure visual appearance. Choose one of several themes
43
+ provided. Add any yet unsupported social network if needed.
44
+ email:
45
+ - lucius.choi@gmail.com
46
+ executables: []
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - ".gitignore"
51
+ - ".travis.yml"
52
+ - Gemfile
53
+ - LICENSE
54
+ - README.md
55
+ - Rakefile
56
+ - bin/console
57
+ - bin/setup
58
+ - jssocials-rails.gemspec
59
+ - lib/jssocials/rails.rb
60
+ - lib/jssocials/rails/version.rb
61
+ - vendor/assets/javascripts/jssocials.js
62
+ - vendor/assets/javascripts/jssocials.min.js
63
+ - vendor/assets/stylesheets/jssocials-theme-classic.css
64
+ - vendor/assets/stylesheets/jssocials-theme-flat.css
65
+ - vendor/assets/stylesheets/jssocials-theme-minima.css
66
+ - vendor/assets/stylesheets/jssocials-theme-plain.css
67
+ - vendor/assets/stylesheets/jssocials.css
68
+ homepage: https://github.com/luciuschoi/jssocials-rails
69
+ licenses:
70
+ - MIT
71
+ metadata:
72
+ allowed_push_host: https://rubygems.org
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements: []
88
+ rubyforge_project:
89
+ rubygems_version: 2.4.5
90
+ signing_key:
91
+ specification_version: 4
92
+ summary: Wrapping Social Network Sharing jQuery Plugin with ruby gem for the easy
93
+ use in Rails projects
94
+ test_files: []