qiita-markdown 0.27.0 → 0.32.0
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.
Potentially problematic release.
This version of qiita-markdown might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -0
- data/lib/qiita/markdown.rb +6 -0
- data/lib/qiita/markdown/embed/code_pen.rb +1 -0
- data/lib/qiita/markdown/embed/gist.rb +9 -0
- data/lib/qiita/markdown/embed/google_slide.rb +9 -0
- data/lib/qiita/markdown/embed/slide_share.rb +9 -0
- data/lib/qiita/markdown/embed/speeker_deck.rb +16 -0
- data/lib/qiita/markdown/embed/youtube.rb +12 -0
- data/lib/qiita/markdown/filters/final_sanitizer.rb +7 -3
- data/lib/qiita/markdown/filters/user_input_sanitizer.rb +14 -2
- data/lib/qiita/markdown/transformers/filter_iframe.rb +54 -0
- data/lib/qiita/markdown/transformers/filter_script.rb +6 -1
- data/lib/qiita/markdown/version.rb +1 -1
- data/qiita-markdown.gemspec +1 -1
- data/spec/qiita/markdown/processor_spec.rb +205 -1
- metadata +15 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e3469d19ed195eb7a7ccdeeedaa1503154a262893c882768834c8636fad0ae7
|
4
|
+
data.tar.gz: 3b9fec449730dcf1f19ec3d84247a7b1d89e1f785e9b52eace389cedfb9045c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cab8938cb167a8c41d6b68478f562f87e5c06a6f412c4f4e0b12c9450cb7506c380eb9ab7ef3ae73eca991d50bbb1da8d5d3e5da4a0e7fdece14ebea15053e1f
|
7
|
+
data.tar.gz: 5e74b4610be3b012d1cd381ecc5e3efc41f581da095ae3a6d5836dc3b62297c7d7deac6d0e93d1c32d84385baea699bfff6f804e1f5924539b3468703d01cd94
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,31 @@
|
|
1
1
|
## Unreleased
|
2
2
|
|
3
|
+
## 0.32.0
|
4
|
+
|
5
|
+
- Fixed XSS possibility bug
|
6
|
+
- Fix iframe width to be fixed at 100%
|
7
|
+
|
8
|
+
## 0.31.0
|
9
|
+
|
10
|
+
- Use greenmat 3.5.1.1
|
11
|
+
|
12
|
+
## 0.30.0
|
13
|
+
|
14
|
+
- Use greenmat 3.5.1.0
|
15
|
+
|
16
|
+
## 0.29.0
|
17
|
+
|
18
|
+
- Accept new embeded script and iframes
|
19
|
+
- Gist
|
20
|
+
- Youtube
|
21
|
+
- SlideShare
|
22
|
+
- SpeekerDeck
|
23
|
+
- GoogleSlide
|
24
|
+
|
25
|
+
## 0.28.0
|
26
|
+
|
27
|
+
- Accept new codepen script url (cpwebassets.codepen.io)
|
28
|
+
|
3
29
|
## 0.27.0
|
4
30
|
|
5
31
|
- Support embed Asciinema
|
data/lib/qiita/markdown.rb
CHANGED
@@ -10,8 +10,14 @@ require "sanitize"
|
|
10
10
|
require "qiita/markdown/embed/code_pen"
|
11
11
|
require "qiita/markdown/embed/tweet"
|
12
12
|
require "qiita/markdown/embed/asciinema"
|
13
|
+
require "qiita/markdown/embed/gist"
|
14
|
+
require "qiita/markdown/embed/youtube"
|
15
|
+
require "qiita/markdown/embed/slide_share"
|
16
|
+
require "qiita/markdown/embed/google_slide"
|
17
|
+
require "qiita/markdown/embed/speeker_deck"
|
13
18
|
require "qiita/markdown/transformers/filter_attributes"
|
14
19
|
require "qiita/markdown/transformers/filter_script"
|
20
|
+
require "qiita/markdown/transformers/filter_iframe"
|
15
21
|
require "qiita/markdown/transformers/strip_invalid_node"
|
16
22
|
require "qiita/markdown/filters/checkbox"
|
17
23
|
require "qiita/markdown/filters/code_block"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Qiita
|
2
|
+
module Markdown
|
3
|
+
module Embed
|
4
|
+
module SpeekerDeck
|
5
|
+
SCRIPT_URLS = [
|
6
|
+
"//speakerdeck.com/assets/embed.js",
|
7
|
+
].freeze
|
8
|
+
CLASS_NAME = %w[speakerdeck-embed].freeze
|
9
|
+
DATA_ATTRIBUTES = %w[
|
10
|
+
data-id data-ratio
|
11
|
+
].freeze
|
12
|
+
ATTRIBUTES = %w[class] + DATA_ATTRIBUTES
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -47,7 +47,9 @@ module Qiita
|
|
47
47
|
"async",
|
48
48
|
"src",
|
49
49
|
"type",
|
50
|
-
]
|
50
|
+
].concat(
|
51
|
+
Embed::SpeekerDeck::ATTRIBUTES,
|
52
|
+
),
|
51
53
|
"span" => [
|
52
54
|
"style",
|
53
55
|
],
|
@@ -137,6 +139,7 @@ module Qiita
|
|
137
139
|
"s",
|
138
140
|
"samp",
|
139
141
|
"script",
|
142
|
+
"iframe",
|
140
143
|
"span",
|
141
144
|
"strike",
|
142
145
|
"strong",
|
@@ -186,14 +189,15 @@ module Qiita
|
|
186
189
|
transformers: [
|
187
190
|
Transformers::StripInvalidNode,
|
188
191
|
Transformers::FilterScript,
|
192
|
+
Transformers::FilterIframe,
|
189
193
|
],
|
190
194
|
}.freeze
|
191
195
|
|
192
196
|
SCRIPTABLE_RULE = RULE.dup.tap do |rule|
|
193
197
|
rule[:attributes] = RULE[:attributes].dup
|
194
198
|
rule[:attributes][:all] = rule[:attributes][:all] + [:data]
|
195
|
-
rule[:elements] = RULE[:elements] + ["
|
196
|
-
rule[:transformers] = rule[:transformers] - [Transformers::FilterScript]
|
199
|
+
rule[:elements] = RULE[:elements] + ["video"]
|
200
|
+
rule[:transformers] = rule[:transformers] - [Transformers::FilterScript, Transformers::FilterIframe]
|
197
201
|
end
|
198
202
|
|
199
203
|
def call
|
@@ -6,7 +6,7 @@ module Qiita
|
|
6
6
|
RULE = {
|
7
7
|
elements: %w[
|
8
8
|
a b blockquote br code dd del details div dl dt em font h1 h2 h3 h4 h5 h6
|
9
|
-
hr i img ins kbd li ol p pre q rp rt ruby s samp script strike strong sub
|
9
|
+
hr i img ins kbd li ol p pre q rp rt ruby s samp script iframe strike strong sub
|
10
10
|
summary sup table tbody td tfoot th thead tr ul var
|
11
11
|
],
|
12
12
|
attributes: {
|
@@ -26,7 +26,18 @@ module Qiita
|
|
26
26
|
"li" => %w[id],
|
27
27
|
"p" => Embed::CodePen::ATTRIBUTES,
|
28
28
|
"q" => %w[cite],
|
29
|
-
"script" => %w[async src id],
|
29
|
+
"script" => %w[async src id].concat(Embed::SpeekerDeck::ATTRIBUTES),
|
30
|
+
"iframe" => %w[
|
31
|
+
allowfullscreen
|
32
|
+
frameborder
|
33
|
+
height
|
34
|
+
marginheight
|
35
|
+
marginwidth
|
36
|
+
scrolling
|
37
|
+
src
|
38
|
+
style
|
39
|
+
width
|
40
|
+
],
|
30
41
|
"sup" => %w[id],
|
31
42
|
"td" => %w[colspan rowspan style],
|
32
43
|
"th" => %w[colspan rowspan style],
|
@@ -42,6 +53,7 @@ module Qiita
|
|
42
53
|
transformers: [
|
43
54
|
Transformers::FilterAttributes,
|
44
55
|
Transformers::FilterScript,
|
56
|
+
Transformers::FilterIframe,
|
45
57
|
],
|
46
58
|
}.freeze
|
47
59
|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Qiita
|
2
|
+
module Markdown
|
3
|
+
module Transformers
|
4
|
+
class FilterIframe
|
5
|
+
URL_WHITE_LIST = [
|
6
|
+
].flatten.freeze
|
7
|
+
|
8
|
+
HOST_WHITE_LIST = [
|
9
|
+
Embed::Youtube::SCRIPT_HOSTS,
|
10
|
+
Embed::SlideShare::SCRIPT_HOST,
|
11
|
+
Embed::GoogleSlide::SCRIPT_HOST,
|
12
|
+
].flatten.freeze
|
13
|
+
|
14
|
+
def self.call(*args)
|
15
|
+
new(*args).transform
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(env)
|
19
|
+
@env = env
|
20
|
+
end
|
21
|
+
|
22
|
+
def transform
|
23
|
+
if name == "iframe"
|
24
|
+
if URL_WHITE_LIST.include?(node["src"]) || HOST_WHITE_LIST.include?(host_of(node["src"]))
|
25
|
+
node["width"] = "100%"
|
26
|
+
node.children.unlink
|
27
|
+
else
|
28
|
+
node.unlink
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def name
|
36
|
+
@env[:node_name]
|
37
|
+
end
|
38
|
+
|
39
|
+
def node
|
40
|
+
@env[:node]
|
41
|
+
end
|
42
|
+
|
43
|
+
def host_of(url)
|
44
|
+
if url
|
45
|
+
port = URI.parse(url).port
|
46
|
+
Addressable::URI.parse(url).host if [443, 80].include? port
|
47
|
+
end
|
48
|
+
rescue Addressable::URI::InvalidURIError
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -5,10 +5,12 @@ module Qiita
|
|
5
5
|
URL_WHITE_LIST = [
|
6
6
|
Embed::CodePen::SCRIPT_URLS,
|
7
7
|
Embed::Tweet::SCRIPT_URL,
|
8
|
+
Embed::SpeekerDeck::SCRIPT_URLS,
|
8
9
|
].flatten.freeze
|
9
10
|
|
10
11
|
HOST_WHITE_LIST = [
|
11
12
|
Embed::Asciinema::SCRIPT_HOST,
|
13
|
+
Embed::Gist::SCRIPT_HOST,
|
12
14
|
].flatten.freeze
|
13
15
|
|
14
16
|
def self.call(*args)
|
@@ -41,7 +43,10 @@ module Qiita
|
|
41
43
|
end
|
42
44
|
|
43
45
|
def host_of(url)
|
44
|
-
|
46
|
+
if url
|
47
|
+
port = URI.parse(url).port
|
48
|
+
Addressable::URI.parse(url).host if [443, 80].include? port
|
49
|
+
end
|
45
50
|
rescue Addressable::URI::InvalidURIError
|
46
51
|
nil
|
47
52
|
end
|
data/qiita-markdown.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency "html-pipeline", "~> 2.0"
|
24
24
|
spec.add_dependency "mem"
|
25
25
|
spec.add_dependency "pygments.rb", "~> 1.0"
|
26
|
-
spec.add_dependency "greenmat", "3.
|
26
|
+
spec.add_dependency "greenmat", "3.5.1.1"
|
27
27
|
spec.add_dependency "sanitize"
|
28
28
|
spec.add_dependency "addressable"
|
29
29
|
spec.add_development_dependency "activesupport", "4.2.6"
|
@@ -740,7 +740,7 @@ describe Qiita::Markdown::Processor do
|
|
740
740
|
|
741
741
|
it "generates footnotes elements" do
|
742
742
|
should eq <<-HTML.strip_heredoc
|
743
|
-
<p><sup id="fnref1"><a href="#fn1"
|
743
|
+
<p><sup id="fnref1"><a href="#fn1" title="test">1</a></sup></p>
|
744
744
|
|
745
745
|
<div class="footnotes">
|
746
746
|
<hr>
|
@@ -756,6 +756,25 @@ describe Qiita::Markdown::Processor do
|
|
756
756
|
end
|
757
757
|
end
|
758
758
|
|
759
|
+
context "with footenotes syntax with code block" do
|
760
|
+
let(:markdown) do
|
761
|
+
<<-MARKDOWN.strip_heredoc
|
762
|
+
```
|
763
|
+
[^1]
|
764
|
+
[^1]: test
|
765
|
+
```
|
766
|
+
MARKDOWN
|
767
|
+
end
|
768
|
+
|
769
|
+
it "generates only code blocks without footnotes" do
|
770
|
+
should eq <<-HTML.strip_heredoc
|
771
|
+
<div class="code-frame" data-lang="text"><div class="highlight"><pre><span></span>[^1]
|
772
|
+
[^1]: test
|
773
|
+
</pre></div></div>
|
774
|
+
HTML
|
775
|
+
end
|
776
|
+
end
|
777
|
+
|
759
778
|
context "with manually written link inside of <sup> tag" do
|
760
779
|
let(:markdown) do
|
761
780
|
<<-MARKDOWN.strip_heredoc
|
@@ -1031,6 +1050,31 @@ describe Qiita::Markdown::Processor do
|
|
1031
1050
|
end
|
1032
1051
|
end
|
1033
1052
|
end
|
1053
|
+
|
1054
|
+
context "with details tag" do
|
1055
|
+
let(:markdown) do
|
1056
|
+
<<-MARKDOWN.strip_heredoc
|
1057
|
+
<details><summary>Folding sample</summary><div>
|
1058
|
+
|
1059
|
+
```rb
|
1060
|
+
puts "Hello, World"
|
1061
|
+
```
|
1062
|
+
</div></details>
|
1063
|
+
MARKDOWN
|
1064
|
+
end
|
1065
|
+
|
1066
|
+
it "returns HTML output parsed as markdown" do
|
1067
|
+
expect(subject).to eq <<-HTML.strip_heredoc
|
1068
|
+
<p><details><summary>Folding sample</summary><div>
|
1069
|
+
|
1070
|
+
<div class="code-frame" data-lang="rb"><div class="highlight"><pre><span></span><span class="nb">puts</span> <span class="s2">"Hello, World"</span>
|
1071
|
+
</pre></div></div>
|
1072
|
+
|
1073
|
+
<p></p>
|
1074
|
+
</div></details></p>
|
1075
|
+
HTML
|
1076
|
+
end
|
1077
|
+
end
|
1034
1078
|
end
|
1035
1079
|
|
1036
1080
|
shared_examples_for "script element" do |allowed:|
|
@@ -1407,6 +1451,138 @@ describe Qiita::Markdown::Processor do
|
|
1407
1451
|
end
|
1408
1452
|
end
|
1409
1453
|
|
1454
|
+
context "with HTML embed code for Gist" do
|
1455
|
+
let(:markdown) do
|
1456
|
+
<<-MARKDOWN.strip_heredoc
|
1457
|
+
<script id="example" src="https://gist.github.com/a/example.js"></script>
|
1458
|
+
MARKDOWN
|
1459
|
+
end
|
1460
|
+
|
1461
|
+
if allowed
|
1462
|
+
it "does not sanitize embed code" do
|
1463
|
+
should eq <<-HTML.strip_heredoc
|
1464
|
+
<script id="example" src="https://gist.github.com/a/example.js"></script>
|
1465
|
+
HTML
|
1466
|
+
end
|
1467
|
+
else
|
1468
|
+
it "forces async attribute on script" do
|
1469
|
+
should eq <<-HTML.strip_heredoc
|
1470
|
+
<script id="example" src="https://gist.github.com/a/example.js" async="async"></script>
|
1471
|
+
HTML
|
1472
|
+
end
|
1473
|
+
end
|
1474
|
+
end
|
1475
|
+
|
1476
|
+
context "with HTML embed code for Youtube" do
|
1477
|
+
let(:markdown) do
|
1478
|
+
<<-MARKDOWN.strip_heredoc
|
1479
|
+
<iframe width="100" height="100" src="https://www.youtube.com/embed/example"></iframe>
|
1480
|
+
MARKDOWN
|
1481
|
+
end
|
1482
|
+
|
1483
|
+
if allowed
|
1484
|
+
it "does not sanitize embed code" do
|
1485
|
+
should eq <<-HTML.strip_heredoc
|
1486
|
+
<iframe width="100" height="100" src="https://www.youtube.com/embed/example"></iframe>
|
1487
|
+
HTML
|
1488
|
+
end
|
1489
|
+
else
|
1490
|
+
it "forces width attribute on iframe" do
|
1491
|
+
should eq <<-HTML.strip_heredoc
|
1492
|
+
<iframe width="100%" height="100" src="https://www.youtube.com/embed/example"></iframe>
|
1493
|
+
HTML
|
1494
|
+
end
|
1495
|
+
end
|
1496
|
+
|
1497
|
+
context "when url is privacy enhanced mode" do
|
1498
|
+
let(:markdown) do
|
1499
|
+
<<-MARKDOWN.strip_heredoc
|
1500
|
+
<iframe width="100" height="100" src="https://www.youtube-nocookie.com/embed/example"></iframe>
|
1501
|
+
MARKDOWN
|
1502
|
+
end
|
1503
|
+
|
1504
|
+
if allowed
|
1505
|
+
it "does not sanitize embed code" do
|
1506
|
+
should eq <<-HTML.strip_heredoc
|
1507
|
+
<iframe width="100" height="100" src="https://www.youtube-nocookie.com/embed/example"></iframe>
|
1508
|
+
HTML
|
1509
|
+
end
|
1510
|
+
else
|
1511
|
+
it "forces width attribute on iframe" do
|
1512
|
+
should eq <<-HTML.strip_heredoc
|
1513
|
+
<iframe width="100%" height="100" src="https://www.youtube-nocookie.com/embed/example"></iframe>
|
1514
|
+
HTML
|
1515
|
+
end
|
1516
|
+
end
|
1517
|
+
end
|
1518
|
+
end
|
1519
|
+
|
1520
|
+
context "with HTML embed code for SlideShare" do
|
1521
|
+
let(:markdown) do
|
1522
|
+
<<-MARKDOWN.strip_heredoc
|
1523
|
+
<iframe width="100" height="100" src="https://www.slideshare.net/embed/example"></iframe>
|
1524
|
+
MARKDOWN
|
1525
|
+
end
|
1526
|
+
|
1527
|
+
if allowed
|
1528
|
+
it "does not sanitize embed code" do
|
1529
|
+
should eq <<-HTML.strip_heredoc
|
1530
|
+
<iframe width="100" height="100" src="https://www.slideshare.net/embed/example"></iframe>
|
1531
|
+
HTML
|
1532
|
+
end
|
1533
|
+
else
|
1534
|
+
it "forces width attribute on iframe" do
|
1535
|
+
should eq <<-HTML.strip_heredoc
|
1536
|
+
<iframe width="100%" height="100" src="https://www.slideshare.net/embed/example"></iframe>
|
1537
|
+
HTML
|
1538
|
+
end
|
1539
|
+
end
|
1540
|
+
end
|
1541
|
+
|
1542
|
+
context "with HTML embed code for GoogleSlide" do
|
1543
|
+
let(:markdown) do
|
1544
|
+
<<-MARKDOWN.strip_heredoc
|
1545
|
+
<iframe src="https://docs.google.com/presentation/d/example/embed" frameborder="0" width="482" height="300" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>
|
1546
|
+
MARKDOWN
|
1547
|
+
end
|
1548
|
+
|
1549
|
+
if allowed
|
1550
|
+
it "does not sanitize embed code" do
|
1551
|
+
should eq <<-HTML.strip_heredoc
|
1552
|
+
<iframe src="https://docs.google.com/presentation/d/example/embed" frameborder="0" width="482" height="300" allowfullscreen="true"></iframe>
|
1553
|
+
HTML
|
1554
|
+
end
|
1555
|
+
else
|
1556
|
+
it "forces width attribute on iframe" do
|
1557
|
+
should eq <<-HTML.strip_heredoc
|
1558
|
+
<iframe src="https://docs.google.com/presentation/d/example/embed" frameborder="0" width="100%" height="300" allowfullscreen="true"></iframe>
|
1559
|
+
HTML
|
1560
|
+
end
|
1561
|
+
end
|
1562
|
+
end
|
1563
|
+
|
1564
|
+
context "with HTML embed code for SpeekerDeck" do
|
1565
|
+
let(:markdown) do
|
1566
|
+
<<-MARKDOWN.strip_heredoc
|
1567
|
+
<script async class="speakerdeck-embed" data-id="example" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
|
1568
|
+
MARKDOWN
|
1569
|
+
end
|
1570
|
+
|
1571
|
+
if allowed
|
1572
|
+
it "does not sanitize embed code" do
|
1573
|
+
should eq <<-HTML.strip_heredoc
|
1574
|
+
<script async class="speakerdeck-embed" data-id="example" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
|
1575
|
+
HTML
|
1576
|
+
end
|
1577
|
+
else
|
1578
|
+
it "forces async attribute on script" do
|
1579
|
+
should eq <<-HTML.strip_heredoc
|
1580
|
+
<script async class="speakerdeck-embed" data-id="example" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
|
1581
|
+
HTML
|
1582
|
+
end
|
1583
|
+
end
|
1584
|
+
end
|
1585
|
+
|
1410
1586
|
context "with embed code for Tweet" do
|
1411
1587
|
let(:markdown) do
|
1412
1588
|
<<-MARKDOWN.strip_heredoc
|
@@ -1422,6 +1598,34 @@ describe Qiita::Markdown::Processor do
|
|
1422
1598
|
HTML
|
1423
1599
|
end
|
1424
1600
|
end
|
1601
|
+
|
1602
|
+
context "with embed script code with xss" do
|
1603
|
+
let(:markdown) do
|
1604
|
+
<<-MARKDOWN.strip_heredoc
|
1605
|
+
<script async class="speakerdeck-embed" data-id="example" data-ratio="1.33333333333333" src="javascript://speakerdeck.com/assets/embed.js"></script>
|
1606
|
+
MARKDOWN
|
1607
|
+
|
1608
|
+
it "forces width attribute on iframe" do
|
1609
|
+
should eq <<-HTML.strip_heredoc
|
1610
|
+
\n
|
1611
|
+
HTML
|
1612
|
+
end
|
1613
|
+
end
|
1614
|
+
end
|
1615
|
+
|
1616
|
+
context "with embed iframe code with xss" do
|
1617
|
+
let(:markdown) do
|
1618
|
+
<<-MARKDOWN.strip_heredoc
|
1619
|
+
<iframe src="javascript://docs.google.com/presentation/d/example/embed" frameborder="0" width="482" height="300" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>
|
1620
|
+
MARKDOWN
|
1621
|
+
|
1622
|
+
it "forces width attribute on iframe" do
|
1623
|
+
should eq <<-HTML.strip_heredoc
|
1624
|
+
\n
|
1625
|
+
HTML
|
1626
|
+
end
|
1627
|
+
end
|
1628
|
+
end
|
1425
1629
|
end
|
1426
1630
|
|
1427
1631
|
context "without script and strict context" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qiita-markdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.32.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gemoji
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 3.
|
89
|
+
version: 3.5.1.1
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 3.
|
96
|
+
version: 3.5.1.1
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: sanitize
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -234,7 +234,7 @@ dependencies:
|
|
234
234
|
- - '='
|
235
235
|
- !ruby/object:Gem::Version
|
236
236
|
version: 0.49.1
|
237
|
-
description:
|
237
|
+
description:
|
238
238
|
email:
|
239
239
|
- r7kamura@gmail.com
|
240
240
|
executables: []
|
@@ -258,7 +258,12 @@ files:
|
|
258
258
|
- lib/qiita/markdown/base_processor.rb
|
259
259
|
- lib/qiita/markdown/embed/asciinema.rb
|
260
260
|
- lib/qiita/markdown/embed/code_pen.rb
|
261
|
+
- lib/qiita/markdown/embed/gist.rb
|
262
|
+
- lib/qiita/markdown/embed/google_slide.rb
|
263
|
+
- lib/qiita/markdown/embed/slide_share.rb
|
264
|
+
- lib/qiita/markdown/embed/speeker_deck.rb
|
261
265
|
- lib/qiita/markdown/embed/tweet.rb
|
266
|
+
- lib/qiita/markdown/embed/youtube.rb
|
262
267
|
- lib/qiita/markdown/filters/checkbox.rb
|
263
268
|
- lib/qiita/markdown/filters/code_block.rb
|
264
269
|
- lib/qiita/markdown/filters/emoji.rb
|
@@ -281,6 +286,7 @@ files:
|
|
281
286
|
- lib/qiita/markdown/processor.rb
|
282
287
|
- lib/qiita/markdown/summary_processor.rb
|
283
288
|
- lib/qiita/markdown/transformers/filter_attributes.rb
|
289
|
+
- lib/qiita/markdown/transformers/filter_iframe.rb
|
284
290
|
- lib/qiita/markdown/transformers/filter_script.rb
|
285
291
|
- lib/qiita/markdown/transformers/strip_invalid_node.rb
|
286
292
|
- lib/qiita/markdown/version.rb
|
@@ -295,7 +301,7 @@ homepage: https://github.com/increments/qiita-markdown
|
|
295
301
|
licenses:
|
296
302
|
- MIT
|
297
303
|
metadata: {}
|
298
|
-
post_install_message:
|
304
|
+
post_install_message:
|
299
305
|
rdoc_options: []
|
300
306
|
require_paths:
|
301
307
|
- lib
|
@@ -310,9 +316,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
310
316
|
- !ruby/object:Gem::Version
|
311
317
|
version: '0'
|
312
318
|
requirements: []
|
313
|
-
|
314
|
-
|
315
|
-
signing_key:
|
319
|
+
rubygems_version: 3.0.3
|
320
|
+
signing_key:
|
316
321
|
specification_version: 4
|
317
322
|
summary: Qiita-specified markdown processor.
|
318
323
|
test_files:
|