Skip to content

Commit 54c64fd

Browse files
Merge pull request increments#67 from increments/add-asciinema
Allow Asciinema script
2 parents 5560b5c + 2fcc46a commit 54c64fd

File tree

5 files changed

+45
-3
lines changed

5 files changed

+45
-3
lines changed

lib/qiita/markdown.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
require "qiita/markdown/embed/code_pen"
1111
require "qiita/markdown/embed/tweet"
12+
require "qiita/markdown/embed/asciinema"
1213
require "qiita/markdown/transformers/filter_attributes"
1314
require "qiita/markdown/transformers/filter_script"
1415
require "qiita/markdown/transformers/strip_invalid_node"

lib/qiita/markdown/embed/asciinema.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module Qiita
2+
module Markdown
3+
module Embed
4+
module Asciinema
5+
SCRIPT_HOST = "asciinema.org".freeze
6+
end
7+
end
8+
end
9+
end

lib/qiita/markdown/filters/user_input_sanitizer.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class UserInputSanitizer < HTML::Pipeline::Filter
2626
"li" => %w[id],
2727
"p" => Embed::CodePen::ATTRIBUTES,
2828
"q" => %w[cite],
29-
"script" => %w[async src],
29+
"script" => %w[async src id],
3030
"sup" => %w[id],
3131
"td" => %w[colspan rowspan style],
3232
"th" => %w[colspan rowspan style],

lib/qiita/markdown/transformers/filter_script.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ module Qiita
22
module Markdown
33
module Transformers
44
class FilterScript
5-
WHITE_LIST = [
5+
URL_WHITE_LIST = [
66
Embed::CodePen::SCRIPT_URLS,
77
Embed::Tweet::SCRIPT_URL,
88
].flatten.freeze
99

10+
HOST_WHITE_LIST = [
11+
Embed::Asciinema::SCRIPT_HOST,
12+
].flatten.freeze
13+
1014
def self.call(*args)
1115
new(*args).transform
1216
end
@@ -17,7 +21,7 @@ def initialize(env)
1721

1822
def transform
1923
if name == "script"
20-
if WHITE_LIST.include?(node["src"])
24+
if URL_WHITE_LIST.include?(node["src"]) || HOST_WHITE_LIST.include?(host_of(node["src"]))
2125
node["async"] = "async" unless node.attributes.key?("async")
2226
node.children.unlink
2327
else
@@ -35,6 +39,12 @@ def name
3539
def node
3640
@env[:node]
3741
end
42+
43+
def host_of(url)
44+
Addressable::URI.parse(url).host if url
45+
rescue Addressable::URI::InvalidURIError
46+
nil
47+
end
3848
end
3949
end
4050
end

spec/qiita/markdown/processor_spec.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,6 +1385,28 @@
13851385
end
13861386
end
13871387

1388+
context "with HTML embed code for Asciinema" do
1389+
let(:markdown) do
1390+
<<-MARKDOWN.strip_heredoc
1391+
<script id="example" src="https://asciinema.org/a/example.js"></script>
1392+
MARKDOWN
1393+
end
1394+
1395+
if allowed
1396+
it "does not sanitize embed code" do
1397+
should eq <<-HTML.strip_heredoc
1398+
<script id="example" src="https://asciinema.org/a/example.js"></script>
1399+
HTML
1400+
end
1401+
else
1402+
it "forces async attribute on script" do
1403+
should eq <<-HTML.strip_heredoc
1404+
<script id="example" src="https://asciinema.org/a/example.js" async="async"></script>
1405+
HTML
1406+
end
1407+
end
1408+
end
1409+
13881410
context "with embed code for Tweet" do
13891411
let(:markdown) do
13901412
<<-MARKDOWN.strip_heredoc

0 commit comments

Comments
 (0)