markdiff 0.5.4 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +41 -11
- data/lib/markdiff/differ.rb +14 -10
- data/lib/markdiff/operations/add_child_operation.rb +2 -2
- data/lib/markdiff/operations/add_previous_sibling_operation.rb +2 -2
- data/lib/markdiff/operations/remove_operation.rb +3 -3
- data/lib/markdiff/operations/text_diff_operation.rb +2 -2
- data/lib/markdiff/version.rb +1 -1
- metadata +3 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 720d3daa84f7b4c40f555ef52f2e9912e1d8170a120be554069679beab0d1954
|
4
|
+
data.tar.gz: 5b9a4631de297e8fa20e615d423c827075f0664b706f763334b65459bd8618a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d26e5b8cb610502f323eb8f7084c17c43a5879112b978a6faaae193d96d5534ff2254a6cac6af26988f44cc2be163130fc242667c0d591e8073fc5b6b3fb5cb
|
7
|
+
data.tar.gz: 945860da782918d04fbb6d38c61e4ae447aa1c3e448e2ec422617c3c52a5bc2ce904e14d3c8aaec43c1ab325a3fcf8c4880329d63303e679eeda66acfbbd4e47
|
data/CHANGELOG.md
CHANGED
@@ -1,30 +1,60 @@
|
|
1
|
+
## 0.6.3
|
2
|
+
|
3
|
+
- Support diff-lcs v1.4+.
|
4
|
+
|
5
|
+
## 0.6.2
|
6
|
+
|
7
|
+
- Support tr.added and tr.deleted.
|
8
|
+
|
9
|
+
## 0.6.1
|
10
|
+
|
11
|
+
- Fix patch order bug by making sort stable.
|
12
|
+
|
13
|
+
## 0.6.0
|
14
|
+
|
15
|
+
- Add .del class to all del elements.
|
16
|
+
|
17
|
+
## 0.5.5
|
18
|
+
|
19
|
+
- Preserve classes on adding new class (e.g. .added).
|
20
|
+
|
1
21
|
## 0.5.4
|
2
|
-
|
22
|
+
|
23
|
+
- Fix bug on patch operations order.
|
3
24
|
|
4
25
|
## 0.5.3
|
5
|
-
|
26
|
+
|
27
|
+
- Fix bug on comparing nodes.
|
6
28
|
|
7
29
|
## 0.5.2
|
8
|
-
|
30
|
+
|
31
|
+
- Fix bug on comparing attributes and text nodes.
|
9
32
|
|
10
33
|
## 0.5.1
|
11
|
-
|
34
|
+
|
35
|
+
- Fix bug on text-diff operation.
|
12
36
|
|
13
37
|
## 0.5.0
|
14
|
-
|
38
|
+
|
39
|
+
- Wrap changed nodes by div.changed.
|
15
40
|
|
16
41
|
## 0.4.0
|
17
|
-
|
18
|
-
-
|
42
|
+
|
43
|
+
- Chanage .changed specs.
|
44
|
+
- Fix bugs on text diff.
|
19
45
|
|
20
46
|
## 0.3.0
|
21
|
-
|
47
|
+
|
48
|
+
- Support partial text diff.
|
22
49
|
|
23
50
|
## 0.2.1
|
24
|
-
|
51
|
+
|
52
|
+
- Support li.added and li.removed.
|
25
53
|
|
26
54
|
## 0.2.0
|
27
|
-
|
55
|
+
|
56
|
+
- Support div.changed and li.changed.
|
28
57
|
|
29
58
|
## 0.1.0
|
30
|
-
|
59
|
+
|
60
|
+
- 1st Release.
|
data/lib/markdiff/differ.rb
CHANGED
@@ -14,34 +14,35 @@ module Markdiff
|
|
14
14
|
# @param [Nokogiri::XML::Node] node
|
15
15
|
# @return [Nokogiri::XML::Node] Converted node
|
16
16
|
def apply_patch(operations, node)
|
17
|
-
|
17
|
+
i = 0
|
18
|
+
operations.sort_by {|operation| i += 1; [-operation.priority, i] }.each do |operation|
|
18
19
|
case operation
|
19
20
|
when ::Markdiff::Operations::AddChildOperation
|
20
21
|
operation.target_node.add_child(operation.inserted_node)
|
21
|
-
|
22
|
+
mark_li_or_tr_as_changed(operation.target_node)
|
22
23
|
mark_top_level_node_as_changed(operation.target_node)
|
23
24
|
when ::Markdiff::Operations::AddDataBeforeHrefOperation
|
24
25
|
operation.target_node["data-before-href"] = operation.target_node["href"]
|
25
26
|
operation.target_node["href"] = operation.after_href
|
26
|
-
|
27
|
+
mark_li_or_tr_as_changed(operation.target_node)
|
27
28
|
mark_top_level_node_as_changed(operation.target_node)
|
28
29
|
when ::Markdiff::Operations::AddDataBeforeTagNameOperation
|
29
30
|
operation.target_node["data-before-tag-name"] = operation.target_node.name
|
30
31
|
operation.target_node.name = operation.after_tag_name
|
31
|
-
|
32
|
+
mark_li_or_tr_as_changed(operation.target_node)
|
32
33
|
mark_top_level_node_as_changed(operation.target_node)
|
33
34
|
when ::Markdiff::Operations::AddPreviousSiblingOperation
|
34
35
|
operation.target_node.add_previous_sibling(operation.inserted_node)
|
35
|
-
|
36
|
+
mark_li_or_tr_as_changed(operation.target_node) if operation.target_node.name != "li" && operation.target_node.name != "tr"
|
36
37
|
mark_top_level_node_as_changed(operation.target_node.parent)
|
37
38
|
when ::Markdiff::Operations::RemoveOperation
|
38
39
|
operation.target_node.replace(operation.inserted_node) if operation.target_node != operation.inserted_node
|
39
|
-
|
40
|
+
mark_li_or_tr_as_changed(operation.target_node)
|
40
41
|
mark_top_level_node_as_changed(operation.target_node)
|
41
42
|
when ::Markdiff::Operations::TextDiffOperation
|
42
43
|
parent = operation.target_node.parent
|
43
44
|
operation.target_node.replace(operation.inserted_node)
|
44
|
-
|
45
|
+
mark_li_or_tr_as_changed(parent)
|
45
46
|
mark_top_level_node_as_changed(parent)
|
46
47
|
end
|
47
48
|
end
|
@@ -181,10 +182,13 @@ module Markdiff
|
|
181
182
|
end
|
182
183
|
|
183
184
|
# @param [Nokogiri::XML::Node] node
|
184
|
-
def
|
185
|
+
def mark_li_or_tr_as_changed(node)
|
185
186
|
until node.parent.nil? || node.parent.fragment?
|
186
|
-
if node.name == "li"
|
187
|
-
node["class"]
|
187
|
+
if node.name == "li" || node.name == "tr"
|
188
|
+
classes = node["class"].to_s.split(/\s/)
|
189
|
+
unless classes.include?("added") || classes.include?("changed") || classes.include?("removed")
|
190
|
+
node["class"] = (classes + ["changed"]).join(" ")
|
191
|
+
end
|
188
192
|
end
|
189
193
|
node = node.parent
|
190
194
|
end
|
@@ -5,8 +5,8 @@ module Markdiff
|
|
5
5
|
class AddChildOperation < Base
|
6
6
|
# @return [String]
|
7
7
|
def inserted_node
|
8
|
-
if @inserted_node.name == "li"
|
9
|
-
@inserted_node["class"] = "added"
|
8
|
+
if @inserted_node.name == "li" || @inserted_node.name == "tr"
|
9
|
+
@inserted_node["class"] = (@inserted_node["class"].to_s.split(/\s/) + ["added"]).join(" ")
|
10
10
|
@inserted_node.inner_html = "<ins>#{@inserted_node.inner_html}</ins>"
|
11
11
|
@inserted_node
|
12
12
|
else
|
@@ -5,9 +5,9 @@ module Markdiff
|
|
5
5
|
class AddPreviousSiblingOperation < Base
|
6
6
|
# @return [String]
|
7
7
|
def inserted_node
|
8
|
-
if @inserted_node.name == "li"
|
8
|
+
if @inserted_node.name == "li" || @inserted_node.name == "tr"
|
9
9
|
node = @inserted_node.clone
|
10
|
-
node["class"] = "added"
|
10
|
+
node["class"] = (node["class"].to_s.split(/\s/) + ["added"]).join(" ")
|
11
11
|
node.inner_html = "<ins>#{@inserted_node.inner_html}</ins>"
|
12
12
|
node
|
13
13
|
else
|
@@ -5,12 +5,12 @@ module Markdiff
|
|
5
5
|
class RemoveOperation < Base
|
6
6
|
# @return [String]
|
7
7
|
def inserted_node
|
8
|
-
if target_node.name == "li"
|
8
|
+
if target_node.name == "li" || target_node.name == "tr"
|
9
9
|
target_node["class"] = "removed"
|
10
|
-
target_node.inner_html =
|
10
|
+
target_node.inner_html = %(<del class="del">#{target_node.inner_html}</del>)
|
11
11
|
target_node
|
12
12
|
else
|
13
|
-
|
13
|
+
%(<del class="del">#{target_node}</del>)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -15,10 +15,10 @@ module Markdiff
|
|
15
15
|
def inserted_node
|
16
16
|
before_elements = target_node.to_s.split(" ")
|
17
17
|
after_elements = @after_node.to_s.split(" ")
|
18
|
-
::Diff::LCS.diff(before_elements, after_elements).flatten.each do |operation|
|
18
|
+
::Diff::LCS.diff(before_elements, after_elements).flatten(1).each do |operation|
|
19
19
|
type, position, element = *operation
|
20
20
|
if type == "-"
|
21
|
-
before_elements[position] =
|
21
|
+
before_elements[position] = %(<del class="del">#{element}</del>)
|
22
22
|
else
|
23
23
|
before_elements[position] = "#{before_elements[position]}<ins>#{element}</ins>"
|
24
24
|
end
|
data/lib/markdiff/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markdiff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -155,10 +155,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
155
|
- !ruby/object:Gem::Version
|
156
156
|
version: '0'
|
157
157
|
requirements: []
|
158
|
-
|
159
|
-
rubygems_version: 2.4.5
|
158
|
+
rubygems_version: 3.1.4
|
160
159
|
signing_key:
|
161
160
|
specification_version: 4
|
162
161
|
summary: Rendered Markdown differ.
|
163
162
|
test_files: []
|
164
|
-
has_rdoc:
|