slacken 0.1.0 → 0.1.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 +4 -4
- data/.travis.yml +3 -0
- data/README.md +5 -3
- data/{sample → examples}/out.txt +0 -0
- data/{sample → examples}/source.html +0 -0
- data/lib/slacken/document_component.rb +23 -36
- data/lib/slacken/dom_container.rb +1 -1
- data/lib/slacken/filter.rb +27 -0
- data/lib/slacken/filters.rb +19 -0
- data/lib/slacken/filters/elim_blanks.rb +41 -0
- data/lib/slacken/filters/elim_invalid_links.rb +33 -0
- data/lib/slacken/filters/elim_line_breaks.rb +36 -0
- data/lib/slacken/filters/extract_img_alt.rb +18 -0
- data/lib/slacken/filters/group_indent.rb +28 -0
- data/lib/slacken/filters/group_inlines.rb +31 -0
- data/lib/slacken/filters/sanitize_headline.rb +46 -0
- data/lib/slacken/filters/sanitize_link.rb +48 -0
- data/lib/slacken/filters/sanitize_list.rb +57 -0
- data/lib/slacken/filters/sanitize_table.rb +44 -0
- data/lib/slacken/filters/stringfy_checkbox.rb +26 -0
- data/lib/slacken/filters/stringfy_emoji.rb +26 -0
- data/lib/slacken/node_type.rb +2 -1
- data/lib/slacken/render_element.rb +2 -0
- data/lib/slacken/rendering.rb +0 -1
- data/lib/slacken/version.rb +1 -1
- data/scripts/update_markup_fixture.rb +3 -3
- data/spec/slacken/document_component_spec.rb +6 -8
- data/spec/slacken/filters/elim_blanks_spec.rb +32 -0
- data/spec/slacken/filters/elim_invalid_links_spec.rb +47 -0
- data/spec/slacken/filters/elim_line_breaks_spec.rb +39 -0
- data/spec/slacken/filters/group_indent_spec.rb +35 -0
- data/spec/slacken/filters/group_inlines_spec.rb +31 -0
- data/spec/slacken/filters/sanitize_headline_spec.rb +29 -0
- data/spec/slacken/filters/sanitize_link_spec.rb +23 -0
- data/spec/slacken/filters/sanitize_list_spec.rb +36 -0
- data/spec/slacken/filters/sanitize_table_spec.rb +39 -0
- data/spec/slacken_spec.rb +3 -0
- data/spec/spec_helper.rb +1 -2
- metadata +37 -26
- data/lib/slacken/document_component/elim_blanks.rb +0 -36
- data/lib/slacken/document_component/elim_invalid_links.rb +0 -26
- data/lib/slacken/document_component/elim_line_breaks.rb +0 -27
- data/lib/slacken/document_component/extract_img_alt.rb +0 -12
- data/lib/slacken/document_component/group_indent.rb +0 -27
- data/lib/slacken/document_component/group_inlines.rb +0 -26
- data/lib/slacken/document_component/sanitize_link_containers.rb +0 -40
- data/lib/slacken/document_component/sanitize_special_tag_containers.rb +0 -102
- data/lib/slacken/document_component/stringfy_checkbox.rb +0 -20
- data/lib/slacken/document_component/stringfy_emoji.rb +0 -20
- data/spec/slacken/document_component/elim_blanks_spec.rb +0 -34
- data/spec/slacken/document_component/elim_invalid_links_spec.rb +0 -49
- data/spec/slacken/document_component/elim_line_breaks_spec.rb +0 -41
- data/spec/slacken/document_component/group_indent_spec.rb +0 -37
- data/spec/slacken/document_component/group_inlines_spec.rb +0 -33
- data/spec/slacken/document_component/sanitize_special_tag_containers_spec.rb +0 -64
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Slacken::Filters::SanitizeLink, dsl: true do
|
4
|
+
describe '#valid?' do
|
5
|
+
subject { described_class.new.valid?(component) }
|
6
|
+
|
7
|
+
context 'when a image occurs in a link' do
|
8
|
+
let(:component) do
|
9
|
+
c(:a, c(:img))
|
10
|
+
end
|
11
|
+
|
12
|
+
it { is_expected.to be_falsey }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when a strong occurs in a link' do
|
16
|
+
let(:component) do
|
17
|
+
c(:a, c(:strong, text('content')))
|
18
|
+
end
|
19
|
+
|
20
|
+
it { is_expected.to be_truthy }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Slacken::Filters::SanitizeList, dsl: true do
|
5
|
+
describe '#valid?' do
|
6
|
+
subject { described_class.new.valid?(component) }
|
7
|
+
|
8
|
+
context 'when a header occurs in a list' do
|
9
|
+
let(:component) do
|
10
|
+
c(:ul,
|
11
|
+
c(:li,
|
12
|
+
text('header'),
|
13
|
+
c(:indent,
|
14
|
+
c(:h1, text('hoge')))))
|
15
|
+
end
|
16
|
+
|
17
|
+
it { is_expected.to be_falsey }
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when a list occurs in another list' do
|
21
|
+
let(:component) do
|
22
|
+
c(:ul,
|
23
|
+
c(:li,
|
24
|
+
text('header'),
|
25
|
+
c(:indent,
|
26
|
+
c(:dl,
|
27
|
+
c(:li,
|
28
|
+
text('header2'),
|
29
|
+
c(:indent,
|
30
|
+
text('fuga')))))))
|
31
|
+
end
|
32
|
+
|
33
|
+
it { is_expected.to be_truthy }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Slacken::Filters::SanitizeTable, dsl: true do
|
4
|
+
describe '#valid?' do
|
5
|
+
subject { described_class.new.valid?(component) }
|
6
|
+
|
7
|
+
context 'when a pre tag occurs in a table' do
|
8
|
+
let(:component) do
|
9
|
+
c(:table,
|
10
|
+
c(:thead,
|
11
|
+
c(:tr,
|
12
|
+
c(:th, text('Header1')),
|
13
|
+
c(:th, text('Header2')))),
|
14
|
+
c(:tbody,
|
15
|
+
c(:tr,
|
16
|
+
c(:td, text('Content1')),
|
17
|
+
c(:td, c(:pre, (text('Content2')))))))
|
18
|
+
end
|
19
|
+
|
20
|
+
it { is_expected.to be_falsey }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when only allowed tags occur in a table' do
|
24
|
+
let(:component) do
|
25
|
+
c(:table,
|
26
|
+
c(:thead,
|
27
|
+
c(:tr,
|
28
|
+
c(:th, text('Header1')),
|
29
|
+
c(:th, c(:span, c(:i, text('Header2')))))),
|
30
|
+
c(:tbody,
|
31
|
+
c(:tr,
|
32
|
+
c(:td, c(:code, text('Content1'))),
|
33
|
+
c(:td, c(:strong, text('Content2'))))))
|
34
|
+
end
|
35
|
+
|
36
|
+
it { is_expected.to be_truthy }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/spec/slacken_spec.rb
CHANGED
@@ -5,6 +5,9 @@ describe Slacken do
|
|
5
5
|
subject { described_class.translate(source) }
|
6
6
|
let(:source) { fixture('example.html') }
|
7
7
|
|
8
|
+
# This test checks whether the behavior of this translation engine is unexpectedly broken.
|
9
|
+
# If you change the behavior, you should run `scripts/update_markup_fixture.rb`
|
10
|
+
# to update fixture file.
|
8
11
|
it 'translates as expected' do
|
9
12
|
expect(subject).to eq(fixture('markup_text.txt'))
|
10
13
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,8 +4,7 @@ require 'slacken'
|
|
4
4
|
require 'helpers/document_component_dsl'
|
5
5
|
|
6
6
|
def fixture(name)
|
7
|
-
|
8
|
-
@fixture_cache[name] ||= File.read(File.expand_path(name, File.expand_path('fixtures', __dir__)))
|
7
|
+
File.read(File.join(__dir__, 'fixtures', name))
|
9
8
|
end
|
10
9
|
|
11
10
|
RSpec.configure do |c|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slacken
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomoya Chiba
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -116,43 +116,51 @@ extra_rdoc_files: []
|
|
116
116
|
files:
|
117
117
|
- ".gitignore"
|
118
118
|
- ".rspec"
|
119
|
+
- ".travis.yml"
|
119
120
|
- Gemfile
|
120
121
|
- LICENSE.txt
|
121
122
|
- README.md
|
122
123
|
- Rakefile
|
124
|
+
- examples/out.txt
|
125
|
+
- examples/source.html
|
123
126
|
- lib/slacken.rb
|
124
127
|
- lib/slacken/document_component.rb
|
125
|
-
- lib/slacken/document_component/elim_blanks.rb
|
126
|
-
- lib/slacken/document_component/elim_invalid_links.rb
|
127
|
-
- lib/slacken/document_component/elim_line_breaks.rb
|
128
|
-
- lib/slacken/document_component/extract_img_alt.rb
|
129
|
-
- lib/slacken/document_component/group_indent.rb
|
130
|
-
- lib/slacken/document_component/group_inlines.rb
|
131
|
-
- lib/slacken/document_component/sanitize_link_containers.rb
|
132
|
-
- lib/slacken/document_component/sanitize_special_tag_containers.rb
|
133
|
-
- lib/slacken/document_component/stringfy_checkbox.rb
|
134
|
-
- lib/slacken/document_component/stringfy_emoji.rb
|
135
128
|
- lib/slacken/dom_container.rb
|
129
|
+
- lib/slacken/filter.rb
|
130
|
+
- lib/slacken/filters.rb
|
131
|
+
- lib/slacken/filters/elim_blanks.rb
|
132
|
+
- lib/slacken/filters/elim_invalid_links.rb
|
133
|
+
- lib/slacken/filters/elim_line_breaks.rb
|
134
|
+
- lib/slacken/filters/extract_img_alt.rb
|
135
|
+
- lib/slacken/filters/group_indent.rb
|
136
|
+
- lib/slacken/filters/group_inlines.rb
|
137
|
+
- lib/slacken/filters/sanitize_headline.rb
|
138
|
+
- lib/slacken/filters/sanitize_link.rb
|
139
|
+
- lib/slacken/filters/sanitize_list.rb
|
140
|
+
- lib/slacken/filters/sanitize_table.rb
|
141
|
+
- lib/slacken/filters/stringfy_checkbox.rb
|
142
|
+
- lib/slacken/filters/stringfy_emoji.rb
|
136
143
|
- lib/slacken/node_type.rb
|
137
144
|
- lib/slacken/render_element.rb
|
138
145
|
- lib/slacken/rendering.rb
|
139
146
|
- lib/slacken/slack_url.rb
|
140
147
|
- lib/slacken/table_element.rb
|
141
148
|
- lib/slacken/version.rb
|
142
|
-
- sample/out.txt
|
143
|
-
- sample/source.html
|
144
149
|
- scripts/update_markup_fixture.rb
|
145
150
|
- slacken.gemspec
|
146
151
|
- spec/fixtures/example.html
|
147
152
|
- spec/fixtures/markup_text.txt
|
148
153
|
- spec/helpers/document_component_dsl.rb
|
149
|
-
- spec/slacken/document_component/elim_blanks_spec.rb
|
150
|
-
- spec/slacken/document_component/elim_invalid_links_spec.rb
|
151
|
-
- spec/slacken/document_component/elim_line_breaks_spec.rb
|
152
|
-
- spec/slacken/document_component/group_indent_spec.rb
|
153
|
-
- spec/slacken/document_component/group_inlines_spec.rb
|
154
|
-
- spec/slacken/document_component/sanitize_special_tag_containers_spec.rb
|
155
154
|
- spec/slacken/document_component_spec.rb
|
155
|
+
- spec/slacken/filters/elim_blanks_spec.rb
|
156
|
+
- spec/slacken/filters/elim_invalid_links_spec.rb
|
157
|
+
- spec/slacken/filters/elim_line_breaks_spec.rb
|
158
|
+
- spec/slacken/filters/group_indent_spec.rb
|
159
|
+
- spec/slacken/filters/group_inlines_spec.rb
|
160
|
+
- spec/slacken/filters/sanitize_headline_spec.rb
|
161
|
+
- spec/slacken/filters/sanitize_link_spec.rb
|
162
|
+
- spec/slacken/filters/sanitize_list_spec.rb
|
163
|
+
- spec/slacken/filters/sanitize_table_spec.rb
|
156
164
|
- spec/slacken_spec.rb
|
157
165
|
- spec/spec_helper.rb
|
158
166
|
homepage: https://rubygems.org/gems/slacken
|
@@ -183,12 +191,15 @@ test_files:
|
|
183
191
|
- spec/fixtures/example.html
|
184
192
|
- spec/fixtures/markup_text.txt
|
185
193
|
- spec/helpers/document_component_dsl.rb
|
186
|
-
- spec/slacken/document_component/elim_blanks_spec.rb
|
187
|
-
- spec/slacken/document_component/elim_invalid_links_spec.rb
|
188
|
-
- spec/slacken/document_component/elim_line_breaks_spec.rb
|
189
|
-
- spec/slacken/document_component/group_indent_spec.rb
|
190
|
-
- spec/slacken/document_component/group_inlines_spec.rb
|
191
|
-
- spec/slacken/document_component/sanitize_special_tag_containers_spec.rb
|
192
194
|
- spec/slacken/document_component_spec.rb
|
195
|
+
- spec/slacken/filters/elim_blanks_spec.rb
|
196
|
+
- spec/slacken/filters/elim_invalid_links_spec.rb
|
197
|
+
- spec/slacken/filters/elim_line_breaks_spec.rb
|
198
|
+
- spec/slacken/filters/group_indent_spec.rb
|
199
|
+
- spec/slacken/filters/group_inlines_spec.rb
|
200
|
+
- spec/slacken/filters/sanitize_headline_spec.rb
|
201
|
+
- spec/slacken/filters/sanitize_link_spec.rb
|
202
|
+
- spec/slacken/filters/sanitize_list_spec.rb
|
203
|
+
- spec/slacken/filters/sanitize_table_spec.rb
|
193
204
|
- spec/slacken_spec.rb
|
194
205
|
- spec/spec_helper.rb
|
@@ -1,36 +0,0 @@
|
|
1
|
-
class Slacken::DocumentComponent
|
2
|
-
module ElimBlanks
|
3
|
-
# Private: Reject blank elements
|
4
|
-
def elim_blanks
|
5
|
-
case type.name
|
6
|
-
when :pre
|
7
|
-
self
|
8
|
-
else
|
9
|
-
derive(children.reject(&:blank?).map(&:elim_blanks))
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def blank?
|
14
|
-
return @is_blank if !@is_blank.nil?
|
15
|
-
@is_blank =
|
16
|
-
case type.name
|
17
|
-
when :pre, :ul, :li, :br, :hr, :img, :checkbox
|
18
|
-
false
|
19
|
-
when :text, :emoji
|
20
|
-
content = attrs[:content]
|
21
|
-
content.nil? || !content.match(/\A\s*\Z/).nil?
|
22
|
-
else
|
23
|
-
children.empty? || children.all?(&:blank?)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def has_no_blanks?
|
28
|
-
case type.name
|
29
|
-
when :pre
|
30
|
-
true
|
31
|
-
else
|
32
|
-
!blank? && children.all?(&:has_no_blanks?)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
class Slacken::DocumentComponent
|
2
|
-
module ElimInvalidLinks
|
3
|
-
# Private: Eliminate internal links and blank links
|
4
|
-
def elim_invalid_links
|
5
|
-
if invalid_link?
|
6
|
-
derive(children.map(&:elim_invalid_links), type: :span)
|
7
|
-
else
|
8
|
-
derive(children.map(&:elim_invalid_links))
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def invalid_link?
|
13
|
-
if type.member_of?(:a)
|
14
|
-
link = attrs[:href]
|
15
|
-
link.nil? ||
|
16
|
-
!link.match(%r{\Ahttps?://})
|
17
|
-
else
|
18
|
-
false
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def has_no_invalid_links?
|
23
|
-
!invalid_link? && children.all?(&:has_no_invalid_links?)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
class Slacken::DocumentComponent
|
2
|
-
module ElimLineBreaks
|
3
|
-
# Private: Reject blank elements
|
4
|
-
def elim_line_breaks
|
5
|
-
case type.name
|
6
|
-
when :text
|
7
|
-
new_content = attrs[:content].gsub(/[\r\n]/, '')
|
8
|
-
derive(children, attrs: attrs.merge(content: new_content))
|
9
|
-
when :pre
|
10
|
-
self
|
11
|
-
else
|
12
|
-
derive(children.map(&:elim_line_breaks))
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def has_no_line_breaks?
|
17
|
-
case type.name
|
18
|
-
when :text
|
19
|
-
!attrs[:content].match(/[\r\n]/)
|
20
|
-
when :pre
|
21
|
-
true
|
22
|
-
else
|
23
|
-
children.all?(&:has_no_line_breaks?)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
class Slacken::DocumentComponent
|
2
|
-
module ExtractImgAlt
|
3
|
-
def extract_img_alt
|
4
|
-
if type.member_of?(:img)
|
5
|
-
child = self.class.new(:text, [], content: attrs[:alt] || attrs[:src])
|
6
|
-
derive([child])
|
7
|
-
else
|
8
|
-
derive(children.map(&:extract_img_alt))
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
class Slacken::DocumentComponent
|
2
|
-
module GroupIndent
|
3
|
-
# Private: Wrap contents to indent.
|
4
|
-
# Childrens of li or dd tags are wrapped.
|
5
|
-
def group_indent
|
6
|
-
if type.member_of?(:li, :dd)
|
7
|
-
head, *tails = children.map(&:group_indent)
|
8
|
-
derive([head, self.class.new(:indent, tails)])
|
9
|
-
else
|
10
|
-
derive(children.map(&:group_indent))
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def indent_grouped?
|
15
|
-
if type.member_of?(:li, :dd)
|
16
|
-
head, tail = children
|
17
|
-
if tail
|
18
|
-
tail.type.member_of?(:indent) && tail.indent_grouped?
|
19
|
-
else
|
20
|
-
true
|
21
|
-
end
|
22
|
-
else
|
23
|
-
children.all?(&:indent_grouped?)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
class Slacken::DocumentComponent
|
2
|
-
module GroupInlines
|
3
|
-
# Private: Group inline elements and wrap them in a wrapper node.
|
4
|
-
# Wrapper nodes are introduced to group inline nodes in a paragraph.
|
5
|
-
def group_inlines
|
6
|
-
if block?
|
7
|
-
new_children = children.map(&:group_inlines).chunk(&:inline?).map do |is_inline, group|
|
8
|
-
is_inline ? self.class.new(:wrapper, group) : group
|
9
|
-
end.flatten
|
10
|
-
derive(new_children)
|
11
|
-
else
|
12
|
-
derive(children.map(&:group_inlines))
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def inlines_grouped?
|
17
|
-
if type.member_of?(:wrapper)
|
18
|
-
true
|
19
|
-
elsif inline?
|
20
|
-
false
|
21
|
-
else
|
22
|
-
children.all?(&:inlines_grouped?)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
class Slacken::DocumentComponent
|
2
|
-
module SanitizeLinkContainers
|
3
|
-
# Private: Sanitize not allowed tags in links.
|
4
|
-
def sanitize_link_containers
|
5
|
-
case type.name
|
6
|
-
when :img, :a, :iframe
|
7
|
-
derive(children.map(&:sanitize_in_link))
|
8
|
-
else
|
9
|
-
derive(children.map(&:sanitize_link_containers))
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def sanitize_in_link
|
14
|
-
if type.allowed_in_link?
|
15
|
-
derive(children.map(&:sanitize_in_link))
|
16
|
-
else
|
17
|
-
# No block tags are allowed.
|
18
|
-
derive(children.map(&:sanitize_in_link), type: :span)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def link_sanitized?
|
23
|
-
case type.name
|
24
|
-
when :img, :a, :iframe
|
25
|
-
children.all?(&:list_containers_sanitized?)
|
26
|
-
else
|
27
|
-
children.all?(&:link_sanitized?)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def link_container_sanitized?
|
32
|
-
if type.allowed_in_link?
|
33
|
-
children.all?(&:link_containers_sanitized?)
|
34
|
-
else
|
35
|
-
false
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|
@@ -1,102 +0,0 @@
|
|
1
|
-
class Slacken::DocumentComponent
|
2
|
-
module SanitizeSpecialTagContainers
|
3
|
-
# Private: Sanitize not allowed tags in list, headline, and table.
|
4
|
-
def sanitize_special_tag_containers
|
5
|
-
# NOTE: each special tag (list, headline, and table) is not allowed to occur
|
6
|
-
# in another type special tags.
|
7
|
-
case type.name
|
8
|
-
when /h\d/
|
9
|
-
derive(children.map(&:sanitize_headline))
|
10
|
-
when :ul, :ol, :dl
|
11
|
-
derive(children.map(&:sanitize_list))
|
12
|
-
when :table
|
13
|
-
derive(children.map(&:sanitize_table))
|
14
|
-
else
|
15
|
-
derive(children.map(&:sanitize_special_tag_containers))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def sanitize_headline
|
20
|
-
if type.allowed_in_headline?
|
21
|
-
derive(children.map(&:sanitize_headline))
|
22
|
-
else
|
23
|
-
# No block tags are allowed.
|
24
|
-
derive(children.map(&:sanitize_headline), type: :span)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def sanitize_list
|
29
|
-
if type.member_of?(:li, :dd)
|
30
|
-
head, *tails = children
|
31
|
-
derive([head.sanitize_list_item, *tails.map(&:sanitize_list)])
|
32
|
-
elsif type.allowed_in_list?
|
33
|
-
derive(children.map(&:sanitize_list))
|
34
|
-
else
|
35
|
-
derive(children.map(&:sanitize_list), type: block? ? :div : :span)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def sanitize_list_item
|
40
|
-
if type.allowed_as_list_item?
|
41
|
-
derive(children.map(&:sanitize_list_item))
|
42
|
-
else
|
43
|
-
# No block tags are allowed.
|
44
|
-
derive(children.map(&:sanitize_list_item), type: :span)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def sanitize_table
|
49
|
-
if type.allowed_in_table?
|
50
|
-
derive(children.map(&:sanitize_table))
|
51
|
-
else
|
52
|
-
# No block tags are allowed.
|
53
|
-
derive(children.map(&:sanitize_table), type: :span)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def sanitized?
|
58
|
-
case type.name
|
59
|
-
when /h\d/
|
60
|
-
children.all?(&:headline_sanitized?)
|
61
|
-
when :ul, :ol, :dl
|
62
|
-
children.all?(&:list_sanitized?)
|
63
|
-
when :table
|
64
|
-
children.all?(&:table_sanitized?)
|
65
|
-
else
|
66
|
-
children.all?(&:sanitized?)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def headline_sanitized?
|
71
|
-
if type.allowed_in_headline?
|
72
|
-
children.all?(&:headline_sanitized?)
|
73
|
-
else
|
74
|
-
false
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def list_sanitized?
|
79
|
-
if type.allowed_in_list?
|
80
|
-
children.all?(&:list_sanitized?)
|
81
|
-
else
|
82
|
-
false
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def list_item_sanitized?
|
87
|
-
if type.allowed_as_list_item?
|
88
|
-
children.all?(&:list_item_sanitized?)
|
89
|
-
else
|
90
|
-
false
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
def table_sanitized?
|
95
|
-
if type.allowed_in_table?
|
96
|
-
children.all?(&:table_sanitized?)
|
97
|
-
else
|
98
|
-
false
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|