jssocials-rails 0.2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +88 -0
- data/Rakefile +1 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/jssocials-rails.gemspec +31 -0
- data/lib/jssocials/rails.rb +8 -0
- data/lib/jssocials/rails/version.rb +5 -0
- data/vendor/assets/javascripts/jssocials.js +415 -0
- data/vendor/assets/javascripts/jssocials.min.js +4 -0
- data/vendor/assets/stylesheets/jssocials-theme-classic.css +84 -0
- data/vendor/assets/stylesheets/jssocials-theme-flat.css +69 -0
- data/vendor/assets/stylesheets/jssocials-theme-minima.css +73 -0
- data/vendor/assets/stylesheets/jssocials-theme-plain.css +44 -0
- data/vendor/assets/stylesheets/jssocials.css +58 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
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
|
+
|
data/README.md
ADDED
@@ -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
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/console
ADDED
@@ -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
|
data/bin/setup
ADDED
@@ -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,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: []
|