share_selected_text-rails 1.0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +81 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/share_selected_text-rails.rb +2 -0
- data/lib/share_selected_text/rails/engine.rb +6 -0
- data/lib/share_selected_text/rails/version.rb +6 -0
- data/share_selected_text-rails.gemspec +26 -0
- data/vendor/assets/fonts/sst_icons.eot +0 -0
- data/vendor/assets/fonts/sst_icons.svg +56 -0
- data/vendor/assets/fonts/sst_icons.ttf +0 -0
- data/vendor/assets/fonts/sst_icons.woff +0 -0
- data/vendor/assets/javascripts/shareSelectedText.js +276 -0
- data/vendor/assets/stylesheets/shareSelectedText.scss.erb +51 -0
- metadata +125 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1d6c26ee355d6b142febc634b8e4f26d1eba05d8
|
4
|
+
data.tar.gz: 0b00658445975138785c812838f08249b286bead
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 545894f0dc337f120003e5c4f6870a773d797b427e45d0c8201f32fc7cd525ec5f3597135a28f9cc98c5732929905b383284b90ac4fb013aefca50e022f98d28
|
7
|
+
data.tar.gz: 654d2924de8cdbedb50b3aa30f6ed60d641fe649935038f4f97828ed8048d8f3d01aef958d560b4768b2bbf558294cf79717d7c65d740b28c26289a056e3f9a6
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 WendyBeth
|
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
|
13
|
+
all 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
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
# ShareSelectedText::Rails
|
2
|
+
|
3
|
+
Rails Engine for [share-selected-text](https://github.com/VincentLoy/share-selected-text).
|
4
|
+
|
5
|
+
> *share selected text on twitter, buffer, and some others. Inspired by [medium.com](http://medium.com)*
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'share_selected_text-rails'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install share_selected_text-rails
|
22
|
+
|
23
|
+
In app/assets/stylesheets/application.css, add:
|
24
|
+
|
25
|
+
```css
|
26
|
+
#= require shareSelectedText
|
27
|
+
```
|
28
|
+
|
29
|
+
In app/assets/javascripts/application.js, add:
|
30
|
+
|
31
|
+
```javascript
|
32
|
+
//= require shareSelectedText
|
33
|
+
```
|
34
|
+
|
35
|
+
## Usage
|
36
|
+
|
37
|
+
Initialize the plugin:
|
38
|
+
|
39
|
+
```javascript
|
40
|
+
shareSelectedText('.my-super-selector', {
|
41
|
+
tooltipClass: '',
|
42
|
+
sanitize: true,
|
43
|
+
buttons: [
|
44
|
+
'twitter',
|
45
|
+
'buffer'
|
46
|
+
],
|
47
|
+
anchorsClass: '',
|
48
|
+
twitterUsername: '',
|
49
|
+
tooltipTimeout: 250
|
50
|
+
});
|
51
|
+
```
|
52
|
+
|
53
|
+
See [share-selected-text documentation](https://github.com/VincentLoy/share-selected-text/blob/master/README.md) for more information.
|
54
|
+
|
55
|
+
## Development
|
56
|
+
|
57
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
58
|
+
|
59
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
60
|
+
|
61
|
+
To draw in latest version of `share-selected-text`:
|
62
|
+
|
63
|
+
From root path of cloned project:
|
64
|
+
|
65
|
+
```bash
|
66
|
+
$ git clone https://github.com/VincentLoy/share-selected-text/blob/master/README.md
|
67
|
+
```
|
68
|
+
|
69
|
+
## Contributing
|
70
|
+
|
71
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/share_selected_text-rails.
|
72
|
+
|
73
|
+
## TODO
|
74
|
+
|
75
|
+
+ Build rake task to pull from share-selected-text, replace vendor/ files
|
76
|
+
with updated library, and bump version
|
77
|
+
|
78
|
+
## License
|
79
|
+
|
80
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
81
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "share_selected_text/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,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'share_selected_text/rails/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "share_selected_text-rails"
|
8
|
+
spec.version = ShareSelectedText::Rails::VERSION
|
9
|
+
spec.authors = ["WendyBeth"]
|
10
|
+
spec.email = ["wendybeth010@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Share Selected Text for Rails}
|
13
|
+
spec.description = %q{Assets for share-selected-text for the Rails asset pipeline}
|
14
|
+
spec.homepage = "http://github.com/wendybeth/share_selected_text-rails"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.12"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
24
|
+
|
25
|
+
spec.add_dependency "railties", '>= 4.0', '< 5.1'
|
26
|
+
end
|
Binary file
|
@@ -0,0 +1,56 @@
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
3
|
+
<!--
|
4
|
+
2016-6-19: Created.
|
5
|
+
-->
|
6
|
+
<svg xmlns="http://www.w3.org/2000/svg">
|
7
|
+
<metadata>
|
8
|
+
Created by FontForge 20120731 at Sun Jun 19 18:05:28 2016
|
9
|
+
By Vincent Loy,,,
|
10
|
+
Created by Vincent Loy,,, with FontForge 2.0 (http://fontforge.sf.net)
|
11
|
+
</metadata>
|
12
|
+
<defs>
|
13
|
+
<font id="sst_icons" horiz-adv-x="512" >
|
14
|
+
<font-face
|
15
|
+
font-family="sst_icons"
|
16
|
+
font-weight="500"
|
17
|
+
font-stretch="normal"
|
18
|
+
units-per-em="512"
|
19
|
+
panose-1="2 0 6 3 0 0 0 0 0 0"
|
20
|
+
ascent="448"
|
21
|
+
descent="-64"
|
22
|
+
bbox="-0.25 -64.25 512 448"
|
23
|
+
underline-thickness="25.6"
|
24
|
+
underline-position="-51.2"
|
25
|
+
unicode-range="U+0020-F10E"
|
26
|
+
/>
|
27
|
+
<missing-glyph />
|
28
|
+
<glyph glyph-name="space" unicode=" " horiz-adv-x="200"
|
29
|
+
/>
|
30
|
+
<glyph glyph-name="uniF10E" unicode=""
|
31
|
+
d="M512 351c-14 -21 -32 -40 -53 -55l1 -13c0 -139 -106 -299 -299 -299c-59 0 -115 17 -161 47c8 -1 17 -1 25 -1c49 0 94 17 130 45c-46 1 -85 31 -98 73c6 -1 13 -2 20 -2c10 0 19 1 28 3c-48 10 -84 52 -84 103v2c14 -8 30 -12 47 -13c-28 19 -47 51 -47 87
|
32
|
+
c0 19 6 38 15 53c52 -64 129 -106 216 -110c-2 8 -3 16 -3 24c0 58 47 105 105 105c30 0 58 -13 77 -33c24 5 47 13 67 25c-8 -24 -24 -45 -46 -58c21 3 41 9 60 17z" />
|
33
|
+
<glyph glyph-name="uniF10C" unicode=""
|
34
|
+
d="M283 242v30c0 15 -12 27 -27 27s-27 -12 -27 -27v-160c0 -63 -51 -115 -114 -115s-115 52 -115 115v67h88v-67c0 -15 12 -27 27 -27s26 12 26 27v160c0 63 52 115 115 115s115 -52 115 -115v-30l-53 -17zM424 179h88v-67c0 -63 -52 -115 -115 -115s-114 52 -114 115v68
|
35
|
+
l35 -17l53 17v-68c0 -15 11 -27 26 -27s27 12 27 27v67z" />
|
36
|
+
<glyph glyph-name="uniF10D" unicode="" horiz-adv-x="312"
|
37
|
+
d="M312 -36c-22 -10 -41 -18 -59 -22s-37 -6 -57 -6c-23 0 -43 3 -61 9s-33 14 -46 25s-21 23 -26 35s-7 31 -7 54v179h-56v73c20 7 37 16 51 28s25 27 34 44s15 39 18 65h72v-129h120v-81h-120v-131c0 -30 2 -49 5 -57s9 -15 17 -20c11 -7 24 -11 38 -11c26 0 52 9 77 26
|
38
|
+
v-81v0z" />
|
39
|
+
<glyph glyph-name="uniF10B" unicode=""
|
40
|
+
d="M512 192c0 -11 -2 -21 -8 -30s-13 -16 -23 -21c2 -9 3 -17 3 -27c0 -30 -10 -57 -30 -82s-48 -45 -83 -60s-73 -22 -114 -22s-80 7 -115 22s-62 35 -82 60s-31 52 -31 82c0 9 1 18 3 27c-10 5 -17 12 -23 21s-9 19 -9 30c0 16 6 29 17 40s24 17 40 17s30 -6 41 -18
|
41
|
+
c42 29 90 44 147 46l34 149c1 2 2 4 4 6s4 2 7 1l106 -23c3 7 8 13 15 17s15 7 23 7c12 0 22 -5 30 -13s13 -18 13 -30s-5 -22 -13 -30s-18 -13 -30 -13s-22 5 -30 13s-13 18 -13 30l-95 21l-30 -135c57 -2 106 -17 148 -46c11 12 25 18 41 18s29 -6 40 -17s17 -24 17 -40z
|
42
|
+
M119 135c0 -12 5 -22 13 -30s18 -13 30 -13s22 5 30 13s13 18 13 30s-5 22 -13 30s-18 13 -30 13s-22 -5 -30 -13s-13 -18 -13 -30zM351 34c2 2 3 4 3 7s-1 6 -3 8s-4 2 -7 2s-6 0 -8 -2c-8 -8 -19 -14 -34 -18s-31 -6 -46 -6s-31 2 -46 6s-26 10 -34 18c-2 2 -5 2 -8 2
|
43
|
+
s-5 0 -7 -2s-3 -5 -3 -8s1 -5 3 -7c8 -8 20 -15 34 -20s26 -7 35 -8s18 -1 26 -1s17 0 26 1s21 3 35 8s26 12 34 20zM350 92c12 0 22 5 30 13s13 18 13 30s-5 22 -13 30s-18 13 -30 13s-22 -5 -30 -13s-13 -18 -13 -30s5 -22 13 -30s18 -13 30 -13z" />
|
44
|
+
<glyph glyph-name="uniF10A" unicode=""
|
45
|
+
d="M512 137v-190h-110v177c0 44 -15 75 -55 75c-30 0 -49 -21 -57 -41c-3 -7 -3 -16 -3 -26v-185h-110s1 299 0 330h110v-46l-1 -1h1v1c15 22 41 54 99 54c72 0 126 -47 126 -148zM62 437c38 0 60 -25 61 -57c0 -32 -24 -57 -62 -57v0c-37 0 -61 25 -61 57s24 57 62 57z
|
46
|
+
M7 -53v330h109v-330h-109z" />
|
47
|
+
<glyph glyph-name="uniF109" unicode=""
|
48
|
+
d="M196 346c5 0 9 -4 9 -9v-34c0 -5 -4 -9 -9 -9h-34c-5 0 -8 4 -8 9v34c0 5 3 9 8 9h34zM196 274c5 0 9 -4 9 -9v-157c0 -5 -4 -8 -9 -8h-34c-5 0 -8 3 -8 8v157c0 5 3 9 8 9h34zM503 274c5 0 9 -4 9 -9v-218c0 -5 -4 -9 -9 -9h-116c-5 0 -8 4 -8 9v24c0 5 3 8 8 8h65
|
49
|
+
c5 0 9 4 9 9v3c0 5 -4 9 -9 9h-65c-5 0 -8 3 -8 8v157c0 5 3 9 8 9h116zM461 149v75c0 5 -4 9 -9 9h-13c-5 0 -9 -4 -9 -9v-75c0 -5 4 -8 9 -8h13c5 0 9 3 9 8zM125 346c5 0 8 -4 8 -9v-229c0 -5 -3 -8 -8 -8h-116c-5 0 -9 3 -9 8v157c0 5 4 9 9 9h64c5 0 9 3 9 8v55
|
50
|
+
c0 5 3 9 8 9h35zM82 149v75c0 5 -4 9 -9 9h-13c-5 0 -9 -4 -9 -9v-75c0 -5 4 -8 9 -8h13c5 0 9 3 9 8zM350 274c5 0 8 -4 8 -9v-218c0 -5 -3 -9 -8 -9h-116c-5 0 -9 4 -9 9v24c0 5 4 8 9 8h65c5 0 8 4 8 9v3c0 5 -3 9 -8 9h-65c-5 0 -9 3 -9 8v157c0 5 4 9 9 9h116zM307 149
|
51
|
+
v75c0 5 -3 9 -8 9h-14c-5 0 -9 -4 -9 -9v-75c0 -5 4 -8 9 -8h14c5 0 8 3 8 8z" />
|
52
|
+
<glyph glyph-name="uniF108" unicode="" horiz-adv-x="511"
|
53
|
+
d="M254 448c5 0 10 0 14 -2l233 -97c14 -6 14 -24 0 -29l-233 -101c-8 -3 -19 -3 -28 0l-229 101c-15 8 -15 22 0 29l229 97c3 2 9 2 14 2zM62 230l178 -78c9 -3 18 -4 28 0l182 78l51 -21c14 -8 14 -20 0 -28l-233 -101c-10 -3 -19 -3 -28 0l-229 101c-15 7 -15 21 0 28z
|
54
|
+
M62 89l178 -79c9 -3 18 -4 28 0l182 79l51 -21c14 -8 14 -21 0 -29l-233 -101c-10 -3 -19 -3 -28 0l-229 101c-15 7 -15 23 0 29z" />
|
55
|
+
</font>
|
56
|
+
</defs></svg>
|
Binary file
|
Binary file
|
@@ -0,0 +1,276 @@
|
|
1
|
+
/**
|
2
|
+
* Created by vincent on 6/15/16.
|
3
|
+
*/
|
4
|
+
'use strict';
|
5
|
+
|
6
|
+
(function (exports) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
var getPageUrl = function getPageUrl() {
|
10
|
+
if (document.querySelector('meta[property="og:url"]') && document.querySelector('meta[property="og:url"]').getAttribute('content')) {
|
11
|
+
return document.querySelector('meta[property="og:url"]').getAttribute('content');
|
12
|
+
}
|
13
|
+
|
14
|
+
return window.location.href;
|
15
|
+
};
|
16
|
+
|
17
|
+
// constants
|
18
|
+
var TOOLTIP_HEIGHT = 50;
|
19
|
+
var FACTOR = 1.33;
|
20
|
+
var TWITTER_LIMIT_LENGTH = 140;
|
21
|
+
var TWITTER_URL_LENGTH_COUNT = 24;
|
22
|
+
var TWITTER_QUOTES = 2;
|
23
|
+
var TWITTER_DOTS = 3;
|
24
|
+
var TOOLTIP_TIMEOUT = 250;
|
25
|
+
|
26
|
+
var REAL_TWITTER_LIMIT = TWITTER_LIMIT_LENGTH - TWITTER_URL_LENGTH_COUNT - TWITTER_QUOTES - TWITTER_DOTS;
|
27
|
+
|
28
|
+
var SOCIAL = {
|
29
|
+
twitter: 'twitter',
|
30
|
+
buffer: 'buffer',
|
31
|
+
digg: 'digg',
|
32
|
+
linkedin: 'linkedin',
|
33
|
+
stumbleupon: 'stumbleupon',
|
34
|
+
reddit: 'reddit',
|
35
|
+
tumblr: 'tumblr'
|
36
|
+
};
|
37
|
+
|
38
|
+
var NO_START_WITH = /[ .,!?/\\\+\-=*£$€:~§%^µ)(|@"{}&#><_]/g;
|
39
|
+
var NO_ENDS_WITH = /[ ,/\\\+\-=*£$€:~§%^µ)(|@"{}&#><_]/g;
|
40
|
+
var PAGE_URL = getPageUrl();
|
41
|
+
|
42
|
+
// globals
|
43
|
+
var tooltip = undefined;
|
44
|
+
var parameters = undefined;
|
45
|
+
var selected = {};
|
46
|
+
|
47
|
+
var extend = function extend(out) {
|
48
|
+
out = out || {};
|
49
|
+
|
50
|
+
for (var i = 1; i < arguments.length; i += 1) {
|
51
|
+
if (arguments[i]) {
|
52
|
+
for (var key in arguments[i]) {
|
53
|
+
if (arguments[i].hasOwnProperty(key)) {
|
54
|
+
out[key] = arguments[i][key];
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
59
|
+
return out;
|
60
|
+
};
|
61
|
+
|
62
|
+
var hideTooltip = function hideTooltip() {
|
63
|
+
tooltip.classList.remove('active');
|
64
|
+
};
|
65
|
+
|
66
|
+
var showTooltip = function showTooltip() {
|
67
|
+
tooltip.classList.add('active');
|
68
|
+
};
|
69
|
+
|
70
|
+
var smartSanitize = function smartSanitize(text) {
|
71
|
+
while (text.length && text[0].match(NO_START_WITH)) {
|
72
|
+
text = text.substring(1, text.length);
|
73
|
+
}
|
74
|
+
|
75
|
+
while (text.length && text[text.length - 1].match(NO_ENDS_WITH)) {
|
76
|
+
text = text.substring(0, text.length - 1);
|
77
|
+
}
|
78
|
+
|
79
|
+
return text;
|
80
|
+
};
|
81
|
+
|
82
|
+
var sanitizeText = function sanitizeText(text) {
|
83
|
+
var sociaType = arguments.length <= 1 || arguments[1] === undefined ? '' : arguments[1];
|
84
|
+
|
85
|
+
var author = '';
|
86
|
+
var tweetLimit = REAL_TWITTER_LIMIT;
|
87
|
+
|
88
|
+
if (!text) {
|
89
|
+
return '';
|
90
|
+
}
|
91
|
+
|
92
|
+
if (parameters.twitterUsername && sociaType === SOCIAL.twitter) {
|
93
|
+
author = ' via @' + parameters.twitterUsername;
|
94
|
+
tweetLimit = REAL_TWITTER_LIMIT - author.length;
|
95
|
+
}
|
96
|
+
|
97
|
+
if (text.length > REAL_TWITTER_LIMIT) {
|
98
|
+
text = text.substring(0, tweetLimit);
|
99
|
+
text = text.substring(0, text.lastIndexOf(' ')) + '...';
|
100
|
+
} else {
|
101
|
+
text = text.substring(0, tweetLimit + TWITTER_DOTS);
|
102
|
+
}
|
103
|
+
|
104
|
+
return smartSanitize(text);
|
105
|
+
};
|
106
|
+
|
107
|
+
var generateSocialUrl = function generateSocialUrl(socialType, text) {
|
108
|
+
if (parameters.sanitize) {
|
109
|
+
text = sanitizeText(text, socialType);
|
110
|
+
} else {
|
111
|
+
text = smartSanitize(text);
|
112
|
+
}
|
113
|
+
|
114
|
+
var twitterUrl = 'https://twitter.com/intent/tweet?url=' + PAGE_URL + '&text="' + text + '"';
|
115
|
+
|
116
|
+
if (parameters.twitterUsername && parameters.twitterUsername.length) {
|
117
|
+
twitterUrl += '&via=' + parameters.twitterUsername;
|
118
|
+
}
|
119
|
+
|
120
|
+
var urls = {
|
121
|
+
twitter: twitterUrl,
|
122
|
+
buffer: 'https://buffer.com/add?text="' + text + '"&url=' + PAGE_URL,
|
123
|
+
digg: 'http://digg.com/submit?url=' + PAGE_URL + '&title=' + text,
|
124
|
+
linkedin: 'https://www.linkedin.com/shareArticle?url=' + PAGE_URL + '&title=' + text,
|
125
|
+
stumbleupon: 'http://www.stumbleupon.com/submit?url=' + PAGE_URL + '&title=' + text,
|
126
|
+
reddit: 'https://reddit.com/submit?url=' + PAGE_URL + '&title=' + text,
|
127
|
+
tumblr: 'https://www.tumblr.com/widgets/share/tool?canonicalUrl=' + PAGE_URL + '&caption=' + text
|
128
|
+
};
|
129
|
+
|
130
|
+
if (urls.hasOwnProperty(socialType)) {
|
131
|
+
return urls[socialType];
|
132
|
+
}
|
133
|
+
|
134
|
+
return '';
|
135
|
+
};
|
136
|
+
|
137
|
+
var updateTooltip = function updateTooltip(rect) {
|
138
|
+
var actualPosition = document.documentElement.scrollTop || document.body.scrollTop;
|
139
|
+
var body = document.querySelector('body');
|
140
|
+
|
141
|
+
tooltip.style.top = actualPosition + rect.top - TOOLTIP_HEIGHT * FACTOR + 'px';
|
142
|
+
tooltip.style.left = rect.left + rect.width / 2 - body.getBoundingClientRect().width / 2 + 'px';
|
143
|
+
|
144
|
+
Array.prototype.forEach.call(parameters.buttons, function (btn) {
|
145
|
+
tooltip.querySelector('.share-selected-text-btn-' + btn).href = generateSocialUrl(btn, selected.text);
|
146
|
+
});
|
147
|
+
|
148
|
+
window.setTimeout(function () {
|
149
|
+
showTooltip();
|
150
|
+
}, parameters.tooltipTimeout);
|
151
|
+
};
|
152
|
+
|
153
|
+
var generateAnchorTag = function generateAnchorTag(anchorType) {
|
154
|
+
var customIconClass = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
|
155
|
+
|
156
|
+
var anchorTag = document.createElement('A');
|
157
|
+
var anchorIcon = document.createElement('i');
|
158
|
+
|
159
|
+
if (parameters.anchorsClass) {
|
160
|
+
anchorTag.classList.add('share-selected-text-btn', 'share-selected-text-btn-' + anchorType, '' + parameters.anchorsClass);
|
161
|
+
} else {
|
162
|
+
anchorTag.classList.add('share-selected-text-btn', 'share-selected-text-btn-' + anchorType);
|
163
|
+
}
|
164
|
+
|
165
|
+
if (customIconClass) {
|
166
|
+
anchorIcon.classList.add('' + customIconClass);
|
167
|
+
} else {
|
168
|
+
anchorIcon.classList.add('icon-sst-' + anchorType, 'fa', 'fa-' + anchorType);
|
169
|
+
}
|
170
|
+
|
171
|
+
anchorIcon.style.pointerEvents = 'none';
|
172
|
+
anchorTag.addEventListener('click', function (e) {
|
173
|
+
e.preventDefault();
|
174
|
+
var windowFeatures = 'status=no,menubar=no,location=no,scrollbars=no,width=720,height=540';
|
175
|
+
var url = e.target.href;
|
176
|
+
window.open(url, 'Share this post', windowFeatures);
|
177
|
+
});
|
178
|
+
|
179
|
+
anchorTag.href = generateSocialUrl(anchorType, selected.text ? selected.text : '');
|
180
|
+
anchorTag.appendChild(anchorIcon);
|
181
|
+
return anchorTag;
|
182
|
+
};
|
183
|
+
|
184
|
+
var generateTooltip = function generateTooltip() {
|
185
|
+
var body = document.querySelector('body');
|
186
|
+
var mainDiv = document.createElement('DIV');
|
187
|
+
var btnContainer = document.createElement('DIV');
|
188
|
+
|
189
|
+
mainDiv.classList.add('share-selected-text-main-container');
|
190
|
+
btnContainer.classList.add('share-selected-text-inner');
|
191
|
+
|
192
|
+
if (parameters.tooltipClass) {
|
193
|
+
btnContainer.classList.add(parameters.tooltipClass);
|
194
|
+
}
|
195
|
+
|
196
|
+
mainDiv.style.height = TOOLTIP_HEIGHT + 'px';
|
197
|
+
mainDiv.style.top = 0;
|
198
|
+
mainDiv.style.left = 0;
|
199
|
+
|
200
|
+
Array.prototype.forEach.call(parameters.buttons, function (btn) {
|
201
|
+
var aTag = generateAnchorTag(btn);
|
202
|
+
btnContainer.appendChild(aTag);
|
203
|
+
});
|
204
|
+
|
205
|
+
mainDiv.appendChild(btnContainer);
|
206
|
+
body.appendChild(mainDiv);
|
207
|
+
|
208
|
+
return mainDiv;
|
209
|
+
};
|
210
|
+
|
211
|
+
var getSelectedText = function getSelectedText() {
|
212
|
+
var text = '';
|
213
|
+
var selection = undefined;
|
214
|
+
|
215
|
+
if (window.getSelection) {
|
216
|
+
selection = window.getSelection();
|
217
|
+
text = selection.toString();
|
218
|
+
} else if (document.selection && document.selection.type !== 'Control') {
|
219
|
+
selection = document.selection.createRange();
|
220
|
+
text = selection.text;
|
221
|
+
}
|
222
|
+
|
223
|
+
return {
|
224
|
+
selection: selection,
|
225
|
+
text: text
|
226
|
+
};
|
227
|
+
};
|
228
|
+
|
229
|
+
var shareTooltip = function shareTooltip() {
|
230
|
+
selected = getSelectedText();
|
231
|
+
|
232
|
+
if (selected.text.length) {
|
233
|
+
var oRange = selected.selection.getRangeAt(0);
|
234
|
+
var oRect = oRange.getBoundingClientRect();
|
235
|
+
updateTooltip(oRect);
|
236
|
+
} else {
|
237
|
+
hideTooltip();
|
238
|
+
}
|
239
|
+
};
|
240
|
+
|
241
|
+
exports.shareSelectedText = function (element, args) {
|
242
|
+
var elt = document.querySelectorAll(element);
|
243
|
+
|
244
|
+
parameters = extend({
|
245
|
+
tooltipClass: '',
|
246
|
+
sanitize: true,
|
247
|
+
buttons: [SOCIAL.twitter, SOCIAL.buffer],
|
248
|
+
anchorsClass: '',
|
249
|
+
twitterUsername: '',
|
250
|
+
tooltipTimeout: TOOLTIP_TIMEOUT
|
251
|
+
}, args);
|
252
|
+
|
253
|
+
tooltip = generateTooltip();
|
254
|
+
|
255
|
+
Array.prototype.forEach.call(elt, function (el) {
|
256
|
+
el.addEventListener('mouseup', function () {
|
257
|
+
shareTooltip();
|
258
|
+
});
|
259
|
+
});
|
260
|
+
};
|
261
|
+
})(window);
|
262
|
+
|
263
|
+
/*global jQuery, shareSelectedText*/
|
264
|
+
if (window.jQuery) {
|
265
|
+
(function ($, shareSelected) {
|
266
|
+
'use strict';
|
267
|
+
|
268
|
+
var shareSelectedify = function shareSelectedify(el, options) {
|
269
|
+
shareSelected(el, options);
|
270
|
+
};
|
271
|
+
|
272
|
+
$.fn.shareSelectedText = function (options) {
|
273
|
+
return shareSelectedify(this.selector, options);
|
274
|
+
};
|
275
|
+
})(jQuery, shareSelectedText);
|
276
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
@font-face {
|
2
|
+
font-family: 'sst_icons';
|
3
|
+
src: url('<%= font_path 'sst_icons.eot' %>');
|
4
|
+
src: url('<%= font_path 'sst_icons.eot?' %>#iefix') format("embedded-opentype"),
|
5
|
+
url('<%= font_path 'sst_icons.woff' %>') format("woff"),
|
6
|
+
url('<%= font_path 'sst_icons.ttf' %>') format("truetype"),
|
7
|
+
url('<%= font_path 'sst_icons.svg' %>#sst_icons') format("svg");
|
8
|
+
font-weight: 400;
|
9
|
+
font-style: normal;
|
10
|
+
}
|
11
|
+
|
12
|
+
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
13
|
+
@font-face {
|
14
|
+
font-family: 'sst_icons';
|
15
|
+
src: url('<%= font_path 'sst_icons.svg' %>#sst_icons') format("svg");
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
[data-icon]:before { content: attr(data-icon) }
|
20
|
+
|
21
|
+
.icon-sst-buffer:before,
|
22
|
+
.icon-sst-digg:before,
|
23
|
+
.icon-sst-linkedin:before,
|
24
|
+
.icon-sst-reddit:before,
|
25
|
+
.icon-sst-stumbleupon:before,
|
26
|
+
.icon-sst-tumblr:before,
|
27
|
+
.icon-sst-twitter:before,
|
28
|
+
[data-icon]:before {
|
29
|
+
display: inline-block;
|
30
|
+
font-family: 'sst_icons';
|
31
|
+
font-style: normal;
|
32
|
+
font-weight: 400;
|
33
|
+
font-variant: normal;
|
34
|
+
line-height: 1;
|
35
|
+
text-decoration: inherit;
|
36
|
+
text-rendering: optimizeLegibility;
|
37
|
+
text-transform: none;
|
38
|
+
-moz-osx-font-smoothing: grayscale;
|
39
|
+
-webkit-font-smoothing: antialiased;
|
40
|
+
font-smoothing: antialiased
|
41
|
+
}
|
42
|
+
|
43
|
+
.icon-sst-buffer:before { content: "\f108" }
|
44
|
+
.icon-sst-digg:before { content: "\f109" }
|
45
|
+
.icon-sst-linkedin:before { content: "\f10a" }
|
46
|
+
.icon-sst-reddit:before { content: "\f10b"}
|
47
|
+
.icon-sst-stumbleupon:before { content: "\f10c" }
|
48
|
+
.icon-sst-tumblr:before { content: "\f10d" }
|
49
|
+
.icon-sst-twitter:before { content: "\f10e" }
|
50
|
+
|
51
|
+
.share-selected-text-main-container {position: absolute;width: 100%;opacity: 0;-webkit-transform: translateY(5px);-ms-transform:translateY(5px);transform:translateY(5px);transition:.3s ease all;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;z-index:99;pointer-events:none}.share-selected-text-main-container.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);z-index:999}.share-selected-text-main-container .share-selected-text-inner{-webkit-flex:1;-ms-flex:1;flex:1;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#404658;height:100%;pointer-events:auto;position:relative}.share-selected-text-main-container .share-selected-text-inner:after{content:'';position:absolute;bottom:-7px;left:0;right:0;margin:auto;width:0;height:0;border-style:solid;border-width:7px 7.5px 0;border-color:#404658 transparent transparent}.share-selected-text-main-container .share-selected-text-btn{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-transform:uppercase;font-weight:700;color:#fff;height:100%;margin:0;padding:0 20px;transition:.2s ease all}.share-selected-text-main-container .share-selected-text-btn:focus,.share-selected-text-main-container .share-selected-text-btn:hover{background:#4f566d}
|
metadata
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: share_selected_text-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- WendyBeth
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-26 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.12'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.12'
|
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
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: railties
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.0'
|
62
|
+
- - "<"
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '5.1'
|
65
|
+
type: :runtime
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '4.0'
|
72
|
+
- - "<"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '5.1'
|
75
|
+
description: Assets for share-selected-text for the Rails asset pipeline
|
76
|
+
email:
|
77
|
+
- wendybeth010@gmail.com
|
78
|
+
executables: []
|
79
|
+
extensions: []
|
80
|
+
extra_rdoc_files: []
|
81
|
+
files:
|
82
|
+
- ".gitignore"
|
83
|
+
- ".travis.yml"
|
84
|
+
- Gemfile
|
85
|
+
- LICENSE.txt
|
86
|
+
- README.md
|
87
|
+
- Rakefile
|
88
|
+
- bin/console
|
89
|
+
- bin/setup
|
90
|
+
- lib/share_selected_text-rails.rb
|
91
|
+
- lib/share_selected_text/rails/engine.rb
|
92
|
+
- lib/share_selected_text/rails/version.rb
|
93
|
+
- share_selected_text-rails.gemspec
|
94
|
+
- vendor/assets/fonts/sst_icons.eot
|
95
|
+
- vendor/assets/fonts/sst_icons.svg
|
96
|
+
- vendor/assets/fonts/sst_icons.ttf
|
97
|
+
- vendor/assets/fonts/sst_icons.woff
|
98
|
+
- vendor/assets/javascripts/shareSelectedText.js
|
99
|
+
- vendor/assets/stylesheets/shareSelectedText.scss.erb
|
100
|
+
homepage: http://github.com/wendybeth/share_selected_text-rails
|
101
|
+
licenses:
|
102
|
+
- MIT
|
103
|
+
metadata: {}
|
104
|
+
post_install_message:
|
105
|
+
rdoc_options: []
|
106
|
+
require_paths:
|
107
|
+
- lib
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
requirements: []
|
119
|
+
rubyforge_project:
|
120
|
+
rubygems_version: 2.4.5
|
121
|
+
signing_key:
|
122
|
+
specification_version: 4
|
123
|
+
summary: Share Selected Text for Rails
|
124
|
+
test_files: []
|
125
|
+
has_rdoc:
|