draftjs_html 0.34.0 → 0.36.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.
- checksums.yaml +4 -4
- data/README.md +12 -0
- data/lib/draftjs_html/from_html/depth_stack.rb +24 -2
- data/lib/draftjs_html/from_html/elements.rb +1 -0
- data/lib/draftjs_html/from_html.rb +2 -1
- data/lib/draftjs_html/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e387f747a717be70bd28676124ef2fe207666ad5c351bf49af1169b922d4b93
|
4
|
+
data.tar.gz: 13f2be9739e90a5dba546b36672f19620bd3ec97a6d4a3456a5d0bf4f4640ad8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f90c1e856259dae2d18b1585d4789d94327711c1dfc0d69e16b98d908a2fc5595b3b2eb8ddf31d9ff070e486b0bfd494661748f5d40633bcd0ebc2e5db7de624
|
7
|
+
data.tar.gz: 000bfb152cec564de907970839eabb90505fd3d62047171e7b61818e4e92f92b583bb03705d2ac26bee4704cb632ae9df637e1a3a4a2eefec1266ed46e66bfae
|
data/README.md
CHANGED
@@ -204,6 +204,18 @@ There are some known limitations with this approach, but, if you're just trying
|
|
204
204
|
to get started, it may be good enough for you. Contributions and issue reports
|
205
205
|
are welcome and encouraged.
|
206
206
|
|
207
|
+
### FromHtml Options
|
208
|
+
|
209
|
+
#### `:encoding`
|
210
|
+
|
211
|
+
Specify the HTML parsing encoding.
|
212
|
+
Defaults to `UTF-8`.
|
213
|
+
|
214
|
+
#### `:squeeze_whitespace_blocks`
|
215
|
+
|
216
|
+
Removes whitespace only blocks from the generated DraftJS.
|
217
|
+
Defaults to `false`.
|
218
|
+
|
207
219
|
#### `:node_to_entity:`
|
208
220
|
|
209
221
|
This `FromHtml` option allows the user to specify how a particular node is
|
@@ -34,12 +34,13 @@ module DraftjsHtml
|
|
34
34
|
|
35
35
|
def pop(draftjs)
|
36
36
|
return if @stack.empty?
|
37
|
+
return merge_current_into_parent! if current_is_block_content_inside_list_item?
|
37
38
|
return if inside_parent?
|
38
39
|
|
39
40
|
if @nodes.last == current.tagname && current.flushable?
|
40
41
|
flush_to(draftjs)
|
41
|
-
elsif
|
42
|
-
|
42
|
+
elsif parent
|
43
|
+
parent.consume(current)
|
43
44
|
end
|
44
45
|
|
45
46
|
@stack.pop
|
@@ -98,13 +99,34 @@ module DraftjsHtml
|
|
98
99
|
@nodes << name
|
99
100
|
end
|
100
101
|
|
102
|
+
def merge_current_into_parent!
|
103
|
+
parent.consume(current)
|
104
|
+
@stack.pop
|
105
|
+
end
|
106
|
+
|
107
|
+
def current_is_block_content_inside_list_item?
|
108
|
+
block_content? && inside_parent? && inside_list_item?
|
109
|
+
end
|
110
|
+
|
101
111
|
def inside_parent?
|
102
112
|
(FromHtml::LIST_PARENT_ELEMENTS & @nodes).any?
|
103
113
|
end
|
104
114
|
|
115
|
+
def inside_list_item?
|
116
|
+
(FromHtml::LIST_ITEM_ELEMENTS & @nodes).any?
|
117
|
+
end
|
118
|
+
|
119
|
+
def block_content?
|
120
|
+
BLOCK_CONTENT_ELEMENTS.include?(current.tagname)
|
121
|
+
end
|
122
|
+
|
105
123
|
def current
|
106
124
|
@stack.last
|
107
125
|
end
|
126
|
+
|
127
|
+
def parent
|
128
|
+
@stack[-2]
|
129
|
+
end
|
108
130
|
end
|
109
131
|
end
|
110
132
|
end
|
@@ -2,6 +2,7 @@ module DraftjsHtml
|
|
2
2
|
class FromHtml < Nokogiri::XML::SAX::Document
|
3
3
|
INLINE_STYLE_ELEMENTS = HtmlDefaults::HTML_STYLE_TAGS_TO_STYLE.keys.freeze
|
4
4
|
LIST_PARENT_ELEMENTS = %w[ol ul].freeze
|
5
|
+
LIST_ITEM_ELEMENTS = %w[li].freeze
|
5
6
|
INLINE_NON_STYLE_ELEMENTS = %w[a abbr cite font img output q samp span table thead tbody td time var].freeze
|
6
7
|
BLOCK_CONTENT_ELEMENTS = %w[p dl h1 h2 h3 h4 h5 h6].freeze
|
7
8
|
FLUSH_BOUNDARIES = %w[OPENING div ol ul li tr].freeze
|
@@ -10,7 +10,8 @@ module DraftjsHtml
|
|
10
10
|
|
11
11
|
def initialize(options = {})
|
12
12
|
@draftjs = Draftjs::RawBuilder.new
|
13
|
-
|
13
|
+
encoding = options.key?(:encoding) ? options.delete(:encoding) : 'UTF-8'
|
14
|
+
@parser = Nokogiri::HTML4::SAX::Parser.new(self, encoding)
|
14
15
|
@options = ensure_options!(options.dup)
|
15
16
|
@depth_stack = DepthStack.new(@options)
|
16
17
|
end
|
data/lib/draftjs_html/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: draftjs_html
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.36.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TJ Taylor
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: '0'
|
107
107
|
requirements: []
|
108
|
-
rubygems_version: 3.
|
108
|
+
rubygems_version: 3.5.21
|
109
109
|
signing_key:
|
110
110
|
specification_version: 4
|
111
111
|
summary: A tool for converting DraftJS JSON to HTML (and back again)
|