onebox 1.8.4 → 1.8.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98fc21836d5ddcb857c0bb72f823c23d5e269496
4
- data.tar.gz: 0686f0001610272d1faafc07c36128d24aa7a4b3
3
+ metadata.gz: 2e6396e2c853cabff86cb24b13b78d1bc5593b63
4
+ data.tar.gz: 13b5abf77b2af2c082c89136c9244759193fbd7a
5
5
  SHA512:
6
- metadata.gz: 31092ef0ffdfd513fc8b1f1f8e6ce4422eb451e48c749635b824bacb0305364e49ade2c27adba386d740b4a5e140891f509ad16c7760dcce8edfe04db49097f5
7
- data.tar.gz: a73d3abdb2f91231f273e4f7e7fea101f5592b2f8e32984c425d4da209fabd33c310540b0acb1026a574f4b72581241428dda64a0ffc1437f81179b627b8643c
6
+ metadata.gz: fd3d129640983ed1d96e8b769c24e0575d66810ef01713e5c22f84ffbd70d0370162e789652a876f769c12c73e9fdfcd9c035ee9467bc4083125f38ce4b72cb0
7
+ data.tar.gz: af3d5855ef0b77552f5c9b964dead3610872a509a9c72f3441b87d442268bcbf567dd226a61b837aaf5204ea68464fd12129010dcf79b6b3884f9df8d2d330a3
data/README.md CHANGED
@@ -76,7 +76,7 @@ Development Preview Interface
76
76
  =============================
77
77
 
78
78
  The onebox gem comes with a development server for previewing the results
79
- of your changes. You can run it by running `rake server` after checking
79
+ of your changes. You can run it by running `bundle exec rake server` after checking
80
80
  out the project. You can then try out URLs.
81
81
 
82
82
  The server doesn't reload code changes automatically (PRs accepted!) so
@@ -92,88 +92,88 @@ Adding Support for a new URL
92
92
 
93
93
  2. Create new onebox engine
94
94
 
95
- ``` ruby
96
- # in lib/onebox/engine/name_onebox.rb
97
-
98
- module Onebox
99
- module Engine
100
- class NameOnebox
101
- include LayoutSupport
102
- include HTML
103
-
104
- private
105
-
106
- def data
107
- {
108
- url: @url,
109
- name: raw.css("h1").inner_text,
110
- image: raw.css("#main-image").first["src"],
111
- description: raw.css("#postBodyPS").inner_text
112
- }
113
- end
114
- end
115
- end
116
- end
117
- ```
95
+ ``` ruby
96
+ # in lib/onebox/engine/name_onebox.rb
97
+
98
+ module Onebox
99
+ module Engine
100
+ class NameOnebox
101
+ include LayoutSupport
102
+ include HTML
103
+
104
+ private
105
+
106
+ def data
107
+ {
108
+ url: @url,
109
+ name: raw.css("h1").inner_text,
110
+ image: raw.css("#main-image").first["src"],
111
+ description: raw.css("#postBodyPS").inner_text
112
+ }
113
+ end
114
+ end
115
+ end
116
+ end
117
+ ```
118
118
 
119
119
  3. Create new onebox spec using [FakeWeb](https://github.com/chrisk/fakeweb)
120
120
 
121
- ``` ruby
122
- # in spec/lib/onebox/engine/name_spec.rb
123
- require "spec_helper"
121
+ ``` ruby
122
+ # in spec/lib/onebox/engine/name_spec.rb
123
+ require "spec_helper"
124
124
 
125
- describe Onebox::Engine::NameOnebox do
126
- let(:link) { "http://example.com" }
127
- let(:html) { described_class.new(link).to_html }
125
+ describe Onebox::Engine::NameOnebox do
126
+ let(:link) { "http://example.com" }
127
+ let(:html) { described_class.new(link).to_html }
128
128
 
129
- before do
130
- fake(link, response("name.response"))
131
- end
129
+ before do
130
+ fake(link, response("name.response"))
131
+ end
132
132
 
133
- it "has the video's title" do
134
- expect(html).to include("title")
135
- end
133
+ it "has the video's title" do
134
+ expect(html).to include("title")
135
+ end
136
136
 
137
- it "has the video's still shot" do
138
- expect(html).to include("photo.jpg")
139
- end
137
+ it "has the video's still shot" do
138
+ expect(html).to include("photo.jpg")
139
+ end
140
140
 
141
- it "has the video's description" do
142
- expect(html).to include("description")
143
- end
141
+ it "has the video's description" do
142
+ expect(html).to include("description")
143
+ end
144
144
 
145
- it "has the URL to the resource" do
146
- expect(html).to include(link)
147
- end
148
- end
149
- ```
145
+ it "has the URL to the resource" do
146
+ expect(html).to include(link)
147
+ end
148
+ end
149
+ ```
150
150
 
151
151
  4. Create new mustache template
152
152
 
153
- ``` html
154
- # in templates/name.mustache
155
- <div class="onebox">
156
- <a href="{{url}}">
157
- <h1>{{name}}</h1>
158
- <h2 class="host">example.com</h2>
159
- <img src="{{image}}" />
160
- <p>{{description}}</p>
161
- </a>
162
- </div>
163
- ```
153
+ ``` html
154
+ # in templates/name.mustache
155
+ <div class="onebox">
156
+ <a href="{{url}}">
157
+ <h1>{{name}}</h1>
158
+ <h2 class="host">example.com</h2>
159
+ <img src="{{image}}" />
160
+ <p>{{description}}</p>
161
+ </a>
162
+ </div>
163
+ ```
164
164
 
165
165
  5. Create new fixture from HTML response for your FakeWeb request(s)
166
166
 
167
- ``` bash
168
- curl --output spec/fixtures/oneboxname.response -L -X -GET http://example.com
169
- ```
167
+ ``` bash
168
+ curl --output spec/fixtures/oneboxname.response -L -X -GET http://example.com
169
+ ```
170
170
 
171
171
  6. Require in Engine module
172
172
 
173
- ``` ruby
174
- # in lib/onebox/engine.rb
175
- require_relative "engine/name_onebox"
176
- ```
173
+ ``` ruby
174
+ # in lib/onebox/engine.rb
175
+ require_relative "engine/name_onebox"
176
+ ```
177
177
 
178
178
 
179
179
  Whitelisted Generic Onebox caveats
@@ -174,5 +174,6 @@ require_relative "engine/mixcloud_onebox"
174
174
  require_relative "engine/bandcamp_onebox"
175
175
  require_relative "engine/coub_onebox"
176
176
  require_relative "engine/flickr_onebox"
177
+ require_relative "engine/flickr_shortened_onebox"
177
178
  require_relative "engine/five_hundred_px_onebox"
178
179
  require_relative "engine/pdf_onebox"
@@ -1,18 +1,14 @@
1
+ require_relative './opengraph_image'
2
+
1
3
  module Onebox
2
4
  module Engine
3
5
  class FlickrOnebox
4
6
  include Engine
5
7
  include StandardEmbed
8
+ include OpengraphImage
6
9
 
7
10
  matches_regexp(/^https?:\/\/www\.flickr\.com\/photos\//)
8
11
  always_https
9
-
10
- def to_html
11
- og = get_opengraph
12
- escaped_src = ::Onebox::Helpers.normalize_url_for_output(og[:image])
13
- "<img src='#{escaped_src}' width='#{og[:image_width]}' height='#{og[:image_height]}' #{Helpers.title_attr(og)}>"
14
- end
15
-
16
12
  end
17
13
  end
18
14
  end
@@ -0,0 +1,14 @@
1
+ require_relative './opengraph_image'
2
+
3
+ module Onebox
4
+ module Engine
5
+ class FlickrShortenedOnebox
6
+ include Engine
7
+ include StandardEmbed
8
+ include OpengraphImage
9
+
10
+ matches_regexp(/^https?:\/\/flic\.kr\/p\//)
11
+ always_https
12
+ end
13
+ end
14
+ end
@@ -10,11 +10,10 @@ module Onebox
10
10
  def to_html
11
11
  oembed = get_oembed
12
12
  escaped_url = ::Onebox::Helpers.normalize_url_for_output(oembed[:url])
13
- escaped_src = ::Onebox::Helpers.normalize_url_for_output(oembed[:image])
14
13
 
15
14
  <<-HTML
16
15
  <a href="#{escaped_url}" target="_blank">
17
- <img src="#{escaped_src}" width="#{oembed[:width]}" height="#{oembed[:height]}" #{Helpers.title_attr(oembed)}>
16
+ <img src="#{escaped_url}" width="#{oembed[:width]}" height="#{oembed[:height]}" #{Helpers.title_attr(oembed)}>
18
17
  </a>
19
18
  HTML
20
19
  end
@@ -0,0 +1,13 @@
1
+ module Onebox
2
+ module Engine
3
+ module OpengraphImage
4
+
5
+ def to_html
6
+ og = get_opengraph
7
+ escaped_src = ::Onebox::Helpers.normalize_url_for_output(og[:image])
8
+ "<img src='#{escaped_src}' width='#{og[:image_width]}' height='#{og[:image_height]}' #{Helpers.title_attr(og)}>"
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -22,7 +22,7 @@ module Onebox
22
22
  end
23
23
 
24
24
  def to_html
25
- iframe_url = @url.gsub('/app/', '/widget/')
25
+ iframe_url = @url[/https?:\/\/store\.steampowered\.com\/app\/\d+/].gsub("/app/", "/widget/")
26
26
  escaped_src = ::Onebox::Helpers.normalize_url_for_output(iframe_url)
27
27
 
28
28
  <<-HTML
@@ -5,7 +5,7 @@ module Onebox
5
5
  include LayoutSupport
6
6
  include HTML
7
7
 
8
- matches_regexp /^https?:\/\/(mobile\.|www\.)?twitter\.com\/.+?\/status(es)?\/\d+$/
8
+ matches_regexp /^https?:\/\/(mobile\.|www\.)?twitter\.com\/.+?\/status(es)?\/\d+(\/(video|photo)\/\d?+)?+\/?$/
9
9
  always_https
10
10
 
11
11
  private
@@ -56,11 +56,12 @@ module Onebox
56
56
  espn.go.com
57
57
  etsy.com
58
58
  findery.com
59
- flickr.com
60
59
  folksy.com
61
60
  forbes.com
62
61
  foxnews.com
63
62
  funnyordie.com
63
+ gfycat.com
64
+ gifs.com
64
65
  groupon.com
65
66
  howtogeek.com
66
67
  huffingtonpost.ca
@@ -102,6 +103,7 @@ module Onebox
102
103
  speakerdeck.com
103
104
  spotify.com
104
105
  squidoo.com
106
+ streamable.com
105
107
  techcrunch.com
106
108
  ted.com
107
109
  thefreedictionary.com
@@ -5,7 +5,7 @@ module Onebox
5
5
  include LayoutSupport
6
6
  include JSON
7
7
 
8
- matches_regexp(/^https?:\/\/(www\.)?xkcd\.com\/\d+/)
8
+ matches_regexp(/^https?:\/\/(www\.)?(m\.)?xkcd\.com\/\d+/)
9
9
 
10
10
  def url
11
11
  "https://xkcd.com/#{match[:comic_id]}/info.0.json"
@@ -6,20 +6,42 @@ class Sanitize
6
6
  ONEBOX ||= freeze_config merge(RELAXED,
7
7
  elements: RELAXED[:elements] + %w[audio embed iframe source video],
8
8
 
9
- attributes: merge(RELAXED[:attributes],
9
+ attributes: {
10
+ 'a' => RELAXED[:attributes]['a'] + %w(target),
10
11
  'audio' => %w[controls],
11
12
  'embed' => %w[height src type width],
12
13
  'iframe' => %w[allowfullscreen frameborder height scrolling src width],
13
14
  'source' => %w[src type],
14
15
  'video' => %w[controls height loop width],
15
16
  'div' => [:data], # any data-* attributes
16
- ),
17
+ },
17
18
 
18
- protocols: merge(RELAXED[:protocols],
19
+ add_attributes: {
20
+ 'iframe' => {
21
+ 'seamless' => 'seamless',
22
+ 'sandbox' => 'allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox',
23
+ }
24
+ },
25
+
26
+ transformers: (RELAXED[:transformers] || []) + [
27
+ lambda do |env|
28
+ next unless env[:node_name] == 'a'
29
+ a_tag = env[:node]
30
+ a_tag['href'] ||= '#'
31
+ if a_tag['href'] =~ %r{^(?:[a-z]+:)?//}
32
+ a_tag['target'] = '_blank'
33
+ a_tag['rel'] = 'nofollow noopener'
34
+ else
35
+ a_tag.remove_attribute('target')
36
+ end
37
+ end
38
+ ],
39
+
40
+ protocols: {
19
41
  'embed' => { 'src' => HTTP_PROTOCOLS },
20
42
  'iframe' => { 'src' => HTTP_PROTOCOLS },
21
43
  'source' => { 'src' => HTTP_PROTOCOLS },
22
- ),
44
+ },
23
45
  )
24
46
  end
25
47
  end
@@ -1,3 +1,3 @@
1
1
  module Onebox
2
- VERSION = "1.8.4"
2
+ VERSION = "1.8.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onebox
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.4
4
+ version: 1.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joanna Zeta
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-04-12 00:00:00.000000000 Z
13
+ date: 2017-05-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: multi_json
@@ -337,6 +337,7 @@ files:
337
337
  - lib/onebox/engine/douban_onebox.rb
338
338
  - lib/onebox/engine/five_hundred_px_onebox.rb
339
339
  - lib/onebox/engine/flickr_onebox.rb
340
+ - lib/onebox/engine/flickr_shortened_onebox.rb
340
341
  - lib/onebox/engine/gfycat_onebox.rb
341
342
  - lib/onebox/engine/giphy_onebox.rb
342
343
  - lib/onebox/engine/github_blob_onebox.rb
@@ -353,6 +354,7 @@ files:
353
354
  - lib/onebox/engine/imgur_onebox.rb
354
355
  - lib/onebox/engine/json.rb
355
356
  - lib/onebox/engine/mixcloud_onebox.rb
357
+ - lib/onebox/engine/opengraph_image.rb
356
358
  - lib/onebox/engine/pastebin_onebox.rb
357
359
  - lib/onebox/engine/pdf_onebox.rb
358
360
  - lib/onebox/engine/pubmed_onebox.rb
@@ -498,7 +500,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
498
500
  version: '0'
499
501
  requirements: []
500
502
  rubyforge_project:
501
- rubygems_version: 2.5.1
503
+ rubygems_version: 2.6.7
502
504
  signing_key:
503
505
  specification_version: 4
504
506
  summary: A gem for turning URLs into previews.