markdiff 0.3.0 → 0.4.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/CHANGELOG.md +4 -0
- data/README.md +6 -1
- data/example/app.rb +14 -0
- data/example/views/index.erb +99 -0
- data/images/demo.png +0 -0
- data/lib/markdiff/differ.rb +18 -7
- data/lib/markdiff/operations/text_diff_operation.rb +1 -1
- data/lib/markdiff/version.rb +1 -1
- data/markdiff.gemspec +1 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57c81d2928ea333fb0183a412d0577140b5f5215
|
4
|
+
data.tar.gz: 80e6b8f960bf5b360d65b053f1628b56fa6dbe56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07028cae95a84c32e239c5788acb9a121c4049cb6f87a8ce95302080f8993bd5fe79f57c36e79f8f2d7d62eff3330de9d6ce098a96994a77cf90c5cc6ce57ae5
|
7
|
+
data.tar.gz: 31e0e2023ee38182991c981ceb888837b702ce85f16bff101824b9def7d4fa3c46bed9fb678c9f9719f241b052e3b0cdfc3fffe472942eccbe77a75dd398a691
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -7,7 +7,12 @@ require "markdiff"
|
|
7
7
|
|
8
8
|
differ = Markdiff::Differ.new
|
9
9
|
node = differ.render("<p>a</p>", "<p>b</p>")
|
10
|
-
node.to_html #=> '<
|
10
|
+
node.to_html #=> '<p class="changed"><del>a</del><ins>b</ins></p>'
|
11
11
|
```
|
12
12
|
|
13
13
|
See [spec/markdiff/differ_spec.rb](spec/markdiff/differ_spec.rb) for more examples.
|
14
|
+
|
15
|
+
### Demo
|
16
|
+
Execute `ruby example/app.rb` to run [demo app](example/app.rb).
|
17
|
+
|
18
|
+

|
data/example/app.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "markdiff"
|
2
|
+
require "redcarpet"
|
3
|
+
require "sinatra"
|
4
|
+
|
5
|
+
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, tables: true)
|
6
|
+
|
7
|
+
get "/" do
|
8
|
+
if params[:before] && params[:after]
|
9
|
+
html_before = markdown.render(params[:before])
|
10
|
+
html_after = markdown.render(params[:after])
|
11
|
+
@diff = Markdiff::Differ.new.render(html_before, html_after)
|
12
|
+
end
|
13
|
+
erb :index
|
14
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>Markdiff</title>
|
6
|
+
<style>
|
7
|
+
a {
|
8
|
+
color: #4B81C6;
|
9
|
+
text-decoration: none;
|
10
|
+
}
|
11
|
+
|
12
|
+
a ins {
|
13
|
+
color: #4B81C6;
|
14
|
+
}
|
15
|
+
|
16
|
+
a[data-before-href] {
|
17
|
+
border-bottom: dotted 1px #999;
|
18
|
+
text-decoration: none;
|
19
|
+
}
|
20
|
+
|
21
|
+
body {
|
22
|
+
line-height: 1.7;
|
23
|
+
margin: 48px auto;
|
24
|
+
padding-left: 16px;
|
25
|
+
padding-right: 16px;
|
26
|
+
width: 860px;
|
27
|
+
}
|
28
|
+
|
29
|
+
del {
|
30
|
+
background-color: #FFEAEA;
|
31
|
+
color: #CB4000;
|
32
|
+
}
|
33
|
+
|
34
|
+
ins {
|
35
|
+
background-color: #E9FFE9;
|
36
|
+
color: green;
|
37
|
+
text-decoration: none;
|
38
|
+
}
|
39
|
+
|
40
|
+
li.added {
|
41
|
+
color: #7DCD55;
|
42
|
+
}
|
43
|
+
|
44
|
+
li.removed {
|
45
|
+
color: #CB4000;
|
46
|
+
}
|
47
|
+
|
48
|
+
section + section {
|
49
|
+
margin-top: 48px;
|
50
|
+
}
|
51
|
+
|
52
|
+
textarea {
|
53
|
+
width: 100%;
|
54
|
+
}
|
55
|
+
|
56
|
+
.diff > * {
|
57
|
+
padding-left: 32px;
|
58
|
+
}
|
59
|
+
|
60
|
+
.diff > del {
|
61
|
+
background-color: inherit;
|
62
|
+
border-left: solid 4px #CB4000;
|
63
|
+
color: inherit;
|
64
|
+
display: block;
|
65
|
+
text-decoration: none;
|
66
|
+
}
|
67
|
+
|
68
|
+
.diff > ins {
|
69
|
+
background-color: inherit;
|
70
|
+
border-left: solid 4px #7DCD55;
|
71
|
+
color: inherit;
|
72
|
+
display: block;
|
73
|
+
}
|
74
|
+
|
75
|
+
.diff > .changed {
|
76
|
+
border-left: solid 4px #FFC134;
|
77
|
+
}
|
78
|
+
</style>
|
79
|
+
</head>
|
80
|
+
<body>
|
81
|
+
<form action="/" method="get">
|
82
|
+
<section>
|
83
|
+
<h3>before</h3>
|
84
|
+
<textarea name="before" rows="8"><%= params[:before] %></textarea>
|
85
|
+
</section>
|
86
|
+
<section>
|
87
|
+
<h3>after</h3>
|
88
|
+
<textarea name="after" rows="8"><%= params[:after] %></textarea>
|
89
|
+
<input type="submit" value="OK">
|
90
|
+
</section>
|
91
|
+
<section>
|
92
|
+
<h3>diff</h3>
|
93
|
+
<div class="diff">
|
94
|
+
<%= @diff %>
|
95
|
+
</div>
|
96
|
+
</section>
|
97
|
+
</form>
|
98
|
+
</body>
|
99
|
+
</html>
|
data/images/demo.png
ADDED
Binary file
|
data/lib/markdiff/differ.rb
CHANGED
@@ -87,13 +87,24 @@ module Markdiff
|
|
87
87
|
identity_map = {}
|
88
88
|
inverted_identity_map = {}
|
89
89
|
|
90
|
+
# Exactly matching with index
|
91
|
+
before_node.children.each_with_index do |before_child, before_index|
|
92
|
+
after_child = after_node.children[before_index]
|
93
|
+
if !after_child.nil? && before_child.to_html.gsub("\n", "") == after_child.to_html.gsub("\n", "")
|
94
|
+
identity_map[before_child] = after_child
|
95
|
+
inverted_identity_map[after_child] = before_child
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
90
99
|
# Exactly matching
|
91
100
|
before_node.children.each do |before_child|
|
101
|
+
next if identity_map[before_child]
|
92
102
|
after_node.children.each do |after_child|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
103
|
+
case
|
104
|
+
when identity_map[before_child]
|
105
|
+
break
|
106
|
+
when inverted_identity_map[after_child]
|
107
|
+
when before_child.to_html.gsub("\n", "") == after_child.to_html.gsub("\n", "")
|
97
108
|
identity_map[before_child] = after_child
|
98
109
|
inverted_identity_map[after_child] = before_child
|
99
110
|
end
|
@@ -107,6 +118,8 @@ module Markdiff
|
|
107
118
|
end
|
108
119
|
after_node.children.each do |after_child|
|
109
120
|
case
|
121
|
+
when identity_map[before_child]
|
122
|
+
break
|
110
123
|
when inverted_identity_map[after_child]
|
111
124
|
when before_child.text?
|
112
125
|
if after_child.text?
|
@@ -189,9 +202,7 @@ module Markdiff
|
|
189
202
|
# @param [Nokogiri::XML::Node] node
|
190
203
|
def mark_top_level_node_as_changed(node)
|
191
204
|
node = node.parent until node.parent.nil? || node.parent.fragment?
|
192
|
-
|
193
|
-
node.replace(%(<div class="changed">#{node}</div>))
|
194
|
-
end
|
205
|
+
node["class"] = "changed"
|
195
206
|
end
|
196
207
|
end
|
197
208
|
end
|
@@ -20,7 +20,7 @@ module Markdiff
|
|
20
20
|
if type == "-"
|
21
21
|
before_elements[position] = "<del>#{element}</del>"
|
22
22
|
else
|
23
|
-
before_elements[position]
|
23
|
+
before_elements[position] = "#{before_elements[position]}<ins>#{element}</ins>"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
::Nokogiri::HTML.fragment(before_elements.join(" "))
|
data/lib/markdiff/version.rb
CHANGED
data/markdiff.gemspec
CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.add_development_dependency "bundler", "~> 1.10"
|
17
17
|
spec.add_development_dependency "pry", "0.10.3"
|
18
18
|
spec.add_development_dependency "rake", "~> 10.0"
|
19
|
+
spec.add_development_dependency "redcarpet", "3.3.3"
|
19
20
|
spec.add_development_dependency "rspec", "3.4.0"
|
20
21
|
spec.add_runtime_dependency "diff-lcs"
|
21
22
|
spec.add_runtime_dependency "nokogiri"
|
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.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: redcarpet
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.3.3
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.3.3
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +122,9 @@ files:
|
|
108
122
|
- LICENSE.txt
|
109
123
|
- README.md
|
110
124
|
- Rakefile
|
125
|
+
- example/app.rb
|
126
|
+
- example/views/index.erb
|
127
|
+
- images/demo.png
|
111
128
|
- lib/markdiff.rb
|
112
129
|
- lib/markdiff/differ.rb
|
113
130
|
- lib/markdiff/operations/add_child_operation.rb
|