twitter-text-js-rails 1.6.1 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +1 -1
- data/lib/twitter-text-js-rails/version.rb +1 -1
- data/vendor/assets/javascripts/twitter-text.js +70 -26
- metadata +17 -16
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 0a1d5e77cc40c74c82b726c4b91adcb110c067cf
|
|
4
|
+
data.tar.gz: 08afb9ff103c60b1bfb3157a29bc4414e4c1ca5b
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 0fdd70d2e199f69de20c7bf222884ccc5d8a82cb57b791e637e577f117ba78949e89c223c450266b33316a0f5012cc5fb324a9508da56f0f8af4d792d3b09532
|
|
7
|
+
data.tar.gz: 99aad5f186867a6a8f362e02616f4a299939215713e268f391b6740c2541ad4bd5b8790fe42c2730c44f2eb41ad5beeca433075407a08f83f26a2cec4f0ca2ef
|
data/README.md
CHANGED
|
@@ -11,7 +11,7 @@ Add the following to your gemfile:
|
|
|
11
11
|
|
|
12
12
|
Add the following directive to your Javascript manifest file (application.js):
|
|
13
13
|
|
|
14
|
-
//= require twitter-text
|
|
14
|
+
//= require twitter-text
|
|
15
15
|
|
|
16
16
|
## Versioning
|
|
17
17
|
We will attempt to mirror the versioning of twitter-text-js to the best
|
|
@@ -211,7 +211,7 @@
|
|
|
211
211
|
twttr.txt.regexen.validHashtag = regexSupplant(/(#{hashtagBoundary})(#{hashSigns})(#{hashtagAlphaNumeric}*#{hashtagAlpha}#{hashtagAlphaNumeric}*)/gi);
|
|
212
212
|
|
|
213
213
|
// Mention related regex collection
|
|
214
|
-
twttr.txt.regexen.validMentionPrecedingChars = /(?:^|[^a-zA-Z0-9_!#$%&*@@]|RT:?)/;
|
|
214
|
+
twttr.txt.regexen.validMentionPrecedingChars = /(?:^|[^a-zA-Z0-9_!#$%&*@@]|(?:rt|RT|rT|Rt):?)/;
|
|
215
215
|
twttr.txt.regexen.atSigns = /[@@]/;
|
|
216
216
|
twttr.txt.regexen.validMentionOrList = regexSupplant(
|
|
217
217
|
'(#{validMentionPrecedingChars})' + // $1: Preceding character
|
|
@@ -229,27 +229,59 @@
|
|
|
229
229
|
twttr.txt.regexen.validDomainChars = regexSupplant(/[^#{invalidDomainChars}]/);
|
|
230
230
|
twttr.txt.regexen.validSubdomain = regexSupplant(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\.)/);
|
|
231
231
|
twttr.txt.regexen.validDomainName = regexSupplant(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\.)/);
|
|
232
|
-
twttr.txt.regexen.validGTLD = regexSupplant(
|
|
232
|
+
twttr.txt.regexen.validGTLD = regexSupplant(RegExp(
|
|
233
|
+
'(?:(?:academy|actor|aero|agency|arpa|asia|bar|bargains|berlin|best|bid|bike|biz|blue|boutique|build|builders|' +
|
|
234
|
+
'buzz|cab|camera|camp|cards|careers|cat|catering|center|ceo|cheap|christmas|cleaning|clothing|club|codes|' +
|
|
235
|
+
'coffee|com|community|company|computer|construction|contractors|cool|coop|cruises|dance|dating|democrat|' +
|
|
236
|
+
'diamonds|directory|domains|edu|education|email|enterprises|equipment|estate|events|expert|exposed|farm|fish|' +
|
|
237
|
+
'flights|florist|foundation|futbol|gallery|gift|glass|gov|graphics|guitars|guru|holdings|holiday|house|' +
|
|
238
|
+
'immobilien|industries|info|institute|int|international|jobs|kaufen|kim|kitchen|kiwi|koeln|kred|land|lighting|' +
|
|
239
|
+
'limo|link|luxury|management|mango|marketing|menu|mil|mobi|moda|monash|museum|nagoya|name|net|neustar|ninja|' +
|
|
240
|
+
'okinawa|onl|org|partners|parts|photo|photography|photos|pics|pink|plumbing|post|pro|productions|properties|' +
|
|
241
|
+
'pub|qpon|recipes|red|rentals|repair|report|reviews|rich|ruhr|sexy|shiksha|shoes|singles|social|solar|' +
|
|
242
|
+
'solutions|supplies|supply|support|systems|tattoo|technology|tel|tienda|tips|today|tokyo|tools|training|' +
|
|
243
|
+
'travel|uno|vacations|ventures|viajes|villas|vision|vote|voting|voto|voyage|wang|watch|wed|wien|wiki|works|' +
|
|
244
|
+
'xxx|xyz|zone|дети|онлайн|орг|сайт|بازار|شبكة|みんな|中信|中文网|公司|公益|在线|我爱你|政务|游戏|移动|网络|集团|삼성)' +
|
|
245
|
+
'(?=[^0-9a-zA-Z@]|$))'));
|
|
233
246
|
twttr.txt.regexen.validCCTLD = regexSupplant(RegExp(
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
247
|
+
'(?:(?:ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bl|bm|bn|bo|bq|br|bs|' +
|
|
248
|
+
'bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|' +
|
|
249
|
+
'et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|' +
|
|
250
|
+
'im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|' +
|
|
251
|
+
'me|mf|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|' +
|
|
252
|
+
'pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|' +
|
|
253
|
+
'sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|' +
|
|
254
|
+
'ye|yt|za|zm|zw|мон|рф|срб|укр|қаз|الاردن|الجزائر|السعودية|المغرب|امارات|ایران|بھارت|تونس|سودان|سورية|عمان|فلسطين|قطر|مصر|مليسيا|پاکستان|' +
|
|
255
|
+
'भारत|বাংলা|ভারত|ਭਾਰਤ|ભારત|இந்தியா|இலங்கை|சிங்கப்பூர்|భారత్|ලංකා|ไทย|გე|中国|中國|台湾|台灣|新加坡|' +
|
|
256
|
+
'香港|한국)(?=[^0-9a-zA-Z@]|$))'));
|
|
241
257
|
twttr.txt.regexen.validPunycode = regexSupplant(/(?:xn--[0-9a-z]+)/);
|
|
242
258
|
twttr.txt.regexen.validDomain = regexSupplant(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/);
|
|
243
259
|
twttr.txt.regexen.validAsciiDomain = regexSupplant(/(?:(?:[\-a-z0-9#{latinAccentChars}]+)\.)+(?:#{validGTLD}|#{validCCTLD}|#{validPunycode})/gi);
|
|
244
|
-
twttr.txt.regexen.invalidShortDomain = regexSupplant(/^#{validDomainName}#{validCCTLD}$/);
|
|
260
|
+
twttr.txt.regexen.invalidShortDomain = regexSupplant(/^#{validDomainName}#{validCCTLD}$/i);
|
|
245
261
|
|
|
246
262
|
twttr.txt.regexen.validPortNumber = regexSupplant(/[0-9]+/);
|
|
247
263
|
|
|
248
264
|
twttr.txt.regexen.validGeneralUrlPathChars = regexSupplant(/[a-z0-9!\*';:=\+,\.\$\/%#\[\]\-_~@|&#{latinAccentChars}]/i);
|
|
249
|
-
// Allow URL paths to contain balanced parens
|
|
265
|
+
// Allow URL paths to contain up to two nested levels of balanced parens
|
|
250
266
|
// 1. Used in Wikipedia URLs like /Primer_(film)
|
|
251
267
|
// 2. Used in IIS sessions like /S(dfd346)/
|
|
252
|
-
|
|
268
|
+
// 3. Used in Rdio URLs like /track/We_Up_(Album_Version_(Edited))/
|
|
269
|
+
twttr.txt.regexen.validUrlBalancedParens = regexSupplant(
|
|
270
|
+
'\\(' +
|
|
271
|
+
'(?:' +
|
|
272
|
+
'#{validGeneralUrlPathChars}+' +
|
|
273
|
+
'|' +
|
|
274
|
+
// allow one nested level of balanced parentheses
|
|
275
|
+
'(?:' +
|
|
276
|
+
'#{validGeneralUrlPathChars}*' +
|
|
277
|
+
'\\(' +
|
|
278
|
+
'#{validGeneralUrlPathChars}+' +
|
|
279
|
+
'\\)' +
|
|
280
|
+
'#{validGeneralUrlPathChars}*' +
|
|
281
|
+
')' +
|
|
282
|
+
')' +
|
|
283
|
+
'\\)'
|
|
284
|
+
, 'i');
|
|
253
285
|
// Valid end-of-path chracters (so /foo. does not gobble the period).
|
|
254
286
|
// 1. Allow =&# for empty URL parameters and other URL-join artifacts
|
|
255
287
|
twttr.txt.regexen.validUrlPathEndingChars = regexSupplant(/[\+\-a-z0-9=_#\/#{latinAccentChars}]|(?:#{validUrlBalancedParens})/i);
|
|
@@ -455,7 +487,7 @@
|
|
|
455
487
|
attrs.href = options.hashtagUrlBase + hashtag;
|
|
456
488
|
attrs.title = "#" + hashtag;
|
|
457
489
|
attrs["class"] = options.hashtagClass;
|
|
458
|
-
if (hashtag
|
|
490
|
+
if (hashtag.charAt(0).match(twttr.txt.regexen.rtl_chars)){
|
|
459
491
|
attrs["class"] += " rtl";
|
|
460
492
|
}
|
|
461
493
|
if (options.targetBlank) {
|
|
@@ -660,22 +692,34 @@
|
|
|
660
692
|
};
|
|
661
693
|
|
|
662
694
|
twttr.txt.autoLinkWithJSON = function(text, json, options) {
|
|
695
|
+
// map JSON entity to twitter-text entity
|
|
696
|
+
if (json.user_mentions) {
|
|
697
|
+
for (var i = 0; i < json.user_mentions.length; i++) {
|
|
698
|
+
// this is a @mention
|
|
699
|
+
json.user_mentions[i].screenName = json.user_mentions[i].screen_name;
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
if (json.hashtags) {
|
|
704
|
+
for (var i = 0; i < json.hashtags.length; i++) {
|
|
705
|
+
// this is a #hashtag
|
|
706
|
+
json.hashtags[i].hashtag = json.hashtags[i].text;
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
if (json.symbols) {
|
|
711
|
+
for (var i = 0; i < json.symbols.length; i++) {
|
|
712
|
+
// this is a $CASH tag
|
|
713
|
+
json.symbols[i].cashtag = json.symbols[i].text;
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
|
|
663
717
|
// concatenate all entities
|
|
664
718
|
var entities = [];
|
|
665
719
|
for (var key in json) {
|
|
666
720
|
entities = entities.concat(json[key]);
|
|
667
721
|
}
|
|
668
|
-
|
|
669
|
-
for (var i = 0; i < entities.length; i++) {
|
|
670
|
-
entity = entities[i];
|
|
671
|
-
if (entity.screen_name) {
|
|
672
|
-
// this is @mention
|
|
673
|
-
entity.screenName = entity.screen_name;
|
|
674
|
-
} else if (entity.text) {
|
|
675
|
-
// this is #hashtag
|
|
676
|
-
entity.hashtag = entity.text;
|
|
677
|
-
}
|
|
678
|
-
}
|
|
722
|
+
|
|
679
723
|
// modify indices to UTF-16
|
|
680
724
|
twttr.txt.modifyIndicesFromUnicodeToUTF16(text, entities);
|
|
681
725
|
|
|
@@ -1185,7 +1229,7 @@
|
|
|
1185
1229
|
twttr.txt.modifyIndicesFromUTF16ToUnicode(text, urlsWithIndices);
|
|
1186
1230
|
|
|
1187
1231
|
for (var i = 0; i < urlsWithIndices.length; i++) {
|
|
1188
|
-
|
|
1232
|
+
// Subtract the length of the original URL
|
|
1189
1233
|
textLength += urlsWithIndices[i].indices[0] - urlsWithIndices[i].indices[1];
|
|
1190
1234
|
|
|
1191
1235
|
// Add 23 characters for URL starting with https://
|
|
@@ -1325,4 +1369,4 @@
|
|
|
1325
1369
|
window.twttr = twttr;
|
|
1326
1370
|
}
|
|
1327
1371
|
}
|
|
1328
|
-
})();
|
|
1372
|
+
})();
|
metadata
CHANGED
|
@@ -1,50 +1,51 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: twitter-text-js-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 1.9.1
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Einar Jonsson
|
|
8
|
+
- Chris Downey
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2014-05-26 00:00:00.000000000 Z
|
|
13
13
|
dependencies: []
|
|
14
14
|
description: Injects twitter-text-js into your asset pipeline.
|
|
15
|
-
email:
|
|
15
|
+
email:
|
|
16
|
+
- einar@codelette.com
|
|
17
|
+
- cdowney@gmail.com
|
|
16
18
|
executables: []
|
|
17
19
|
extensions: []
|
|
18
20
|
extra_rdoc_files: []
|
|
19
21
|
files:
|
|
20
|
-
- lib/twitter-text-js-rails/version.rb
|
|
21
|
-
- lib/twitter-text-js-rails.rb
|
|
22
|
-
- vendor/assets/javascripts/twitter-text.js
|
|
23
22
|
- MIT-LICENSE
|
|
24
23
|
- README.md
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
- lib/twitter-text-js-rails.rb
|
|
25
|
+
- lib/twitter-text-js-rails/version.rb
|
|
26
|
+
- vendor/assets/javascripts/twitter-text.js
|
|
27
|
+
homepage: https://github.com/einarj/twitter-text-js-rails/
|
|
28
|
+
licenses:
|
|
29
|
+
- MIT
|
|
30
|
+
metadata: {}
|
|
27
31
|
post_install_message:
|
|
28
32
|
rdoc_options: []
|
|
29
33
|
require_paths:
|
|
30
34
|
- lib
|
|
31
35
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
32
|
-
none: false
|
|
33
36
|
requirements:
|
|
34
|
-
- -
|
|
37
|
+
- - ">="
|
|
35
38
|
- !ruby/object:Gem::Version
|
|
36
39
|
version: '0'
|
|
37
40
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
|
-
none: false
|
|
39
41
|
requirements:
|
|
40
|
-
- -
|
|
42
|
+
- - ">="
|
|
41
43
|
- !ruby/object:Gem::Version
|
|
42
44
|
version: '0'
|
|
43
45
|
requirements: []
|
|
44
46
|
rubyforge_project:
|
|
45
|
-
rubygems_version:
|
|
47
|
+
rubygems_version: 2.2.2
|
|
46
48
|
signing_key:
|
|
47
|
-
specification_version:
|
|
49
|
+
specification_version: 4
|
|
48
50
|
summary: twitter-text-js on Rails
|
|
49
51
|
test_files: []
|
|
50
|
-
has_rdoc:
|