motiro 0.6.6 → 0.6.7

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.
Files changed (40) hide show
  1. data/README +1 -1
  2. data/app/controllers/wiki_controller.rb +14 -1
  3. data/app/core/version.rb +1 -1
  4. data/app/core/wiki_reporter.rb +4 -17
  5. data/app/helpers/application_helper.rb +33 -0
  6. data/app/helpers/report_helper.rb +39 -0
  7. data/app/helpers/report_helper.rb.rej +46 -0
  8. data/app/helpers/wiki_helper.rb +1 -1
  9. data/app/models/change.rb +12 -41
  10. data/app/models/chunk.rb +56 -0
  11. data/app/models/page.rb +17 -0
  12. data/app/models/revision.rb +31 -0
  13. data/app/reporters/events_reporter.rb +0 -2
  14. data/app/views/report/show.rhtml +2 -2
  15. data/app/views/wiki/diff.rhtml +4 -0
  16. data/app/views/wiki/history.rhtml +32 -21
  17. data/app/views/wiki/history.rhtml.rej +63 -0
  18. data/config/motiro.yml +1 -1
  19. data/config/routes.rb +3 -0
  20. data/db/motirodb.sqlite.initial +0 -0
  21. data/db/translation/pt-BR.rb +6 -1
  22. data/db/translation/pt-BR.rb.rej +26 -0
  23. data/lib/diff_chunk_builder.rb +98 -0
  24. data/lib/tasks/packaging.rake +2 -1
  25. data/public/stylesheets/motiro.css +49 -18
  26. data/public/stylesheets/motiro.css.rej +37 -0
  27. data/public/wiki/history/OtherPage-en-us.xml +40 -0
  28. data/test/fixtures/pages.yml +1 -1
  29. data/test/fixtures/revisions.yml +15 -4
  30. data/test/functional/report_features_test.rb +7 -1
  31. data/test/functional/root_controller_test.rb +1 -1
  32. data/test/functional/wiki_controller_test.rb +44 -4
  33. data/test/unit/change_test.rb +29 -56
  34. data/test/unit/diff_chunk_builder_test.rb +269 -0
  35. data/test/unit/page_test.rb +46 -0
  36. data/test/unit/revision_test.rb +160 -0
  37. data/test/unit/wiki_reporter_test.rb +2 -1
  38. metadata +301 -283
  39. data/app/models/diff_table_builder.rb +0 -285
  40. data/test/unit/diff_table_builder_test.rb +0 -602
@@ -1,285 +0,0 @@
1
- require 'erb'
2
-
3
- class DiffTableBuilder
4
-
5
- include ERB::Util
6
-
7
- def initialize
8
- @mod_groups = []
9
- @curr_group = 0
10
- @left_line_to_start = @right_line_to_start = 1
11
- @last_mod_type = nil
12
- end
13
-
14
- def render_diff_table
15
- result = "<table class='diff 'cellspacing='0'>\n"
16
- @mod_groups.each do |mg|
17
- result += mg.render_diff_lines
18
- end
19
- result += "</table>"
20
- end
21
-
22
- def start_line(left_line_num, right_line_num=left_line_num)
23
- @mod_groups << SpacingGroup.instance if @left_line_to_start != 1 || @right_line_to_start != 1
24
- @left_line_to_start = left_line_num
25
- @right_line_to_start = right_line_num
26
- @start_new_group = true
27
- end
28
-
29
- { 'addition' => 'add',
30
- 'deletion' => 'del',
31
- 'unchanged' => 'unch'}.each do |k,v|
32
- eval "def push_#{k}(text); " +
33
- "get_current_group(:#{v}).push_#{k}(html_escape(text)); " +
34
- "end"
35
- end
36
-
37
- private
38
-
39
- def get_current_group(mod_type)
40
- if need_a_new_group(mod_type) then
41
- @mod_groups << create_group(mod_type)
42
- end
43
- @last_mod_type = mod_type
44
-
45
- return @mod_groups.last
46
- end
47
-
48
- def create_group(mod_type)
49
- left_line, right_line = curr_lines
50
- mg = :unch == mod_type ? UnchangedGroup.new(left_line, right_line) :
51
- ModGroup.new(left_line, right_line)
52
- @left_line_to_start, @right_line_to_start = left_line, right_line
53
- @start_new_group = false
54
- return mg
55
- end
56
-
57
- def curr_lines
58
- if @start_new_group or @mod_groups.empty? then
59
- return [@left_line_to_start, @right_line_to_start]
60
- else
61
- return [ @left_line_to_start + @mod_groups.last.num_lines_left,
62
- @right_line_to_start + @mod_groups.last.num_lines_right ]
63
- end
64
- end
65
-
66
- CREATE_GROUP_DECISION_TABLE = # current / last
67
- { :add => { :add => false, :del => false, :unch => true },
68
- :del => { :add => true, :del => false, :unch => true },
69
- :unch => { :add => true, :del => true, :unch => false} }
70
-
71
- def need_a_new_group(mod_type)
72
- if @start_new_group then
73
- return true
74
- end
75
- (@mod_groups.empty?) or
76
- CREATE_GROUP_DECISION_TABLE[mod_type][@last_mod_type]
77
- end
78
-
79
- end
80
-
81
- class Group
82
-
83
- def render_diff_lines
84
- result = ''
85
- 0.upto(num_lines - 1) do |i|
86
-
87
- result += " <tr style='background: #FFF'>\n"
88
- result += render_counter(:left, i)
89
- result += render_left_cell(i)
90
- result += render_right_cell(i)
91
- result += render_counter(:right, i)
92
- result += " </tr>\n"
93
- end
94
-
95
- return result
96
- end
97
-
98
- protected
99
-
100
- attr_reader :initial_left_line, :initial_right_line
101
-
102
- def initialize(initial_left_line = 1, initial_right_line = 1)
103
- @initial_left_line = initial_left_line
104
- @initial_right_line = initial_right_line
105
- end
106
-
107
- def render_cell_contents(text)
108
- return "<pre>#{text}</pre>" unless text.nil? || 0 == text.length
109
- return '&nbsp;'
110
- end
111
-
112
- def render_counter(side, pos)
113
- num_lines, initial_line = num_lines_left, initial_left_line
114
- if :right == side then
115
- num_lines, initial_line = num_lines_right, initial_right_line
116
- end
117
-
118
- result = " <td class='line_number'>"
119
-
120
- if pos < num_lines then
121
- result += (initial_line + pos).to_s
122
- else
123
- result += '&nbsp;'
124
- end
125
-
126
- return result + "</td>\n"
127
- end
128
-
129
- def render_left_cell(pos)
130
- style = cell_border_width(pos, :left)
131
- return render_cell(left_lines[pos], style, :left)
132
- end
133
-
134
- def render_right_cell(pos)
135
- style = cell_border_width(pos, :right)
136
- return render_cell(right_lines[pos], style, :right)
137
- end
138
-
139
- def render_cell(text, style, side)
140
- clazz = class_for(text)
141
- cell_contents = render_cell_contents(text)
142
- return " <td class='#{side.to_s}#{clazz}' style='#{style}'>" +
143
- cell_contents +
144
- "</td>\n"
145
- end
146
-
147
- end
148
-
149
- class ModGroup < Group
150
-
151
- def initialize(initial_left_line = 1, initial_right_line = 1)
152
- super(initial_left_line, initial_right_line)
153
- @deletions = []
154
- @additions = []
155
- end
156
-
157
- def push_addition(text)
158
- additions << text
159
- end
160
-
161
- def push_deletion(text)
162
- deletions << text
163
- end
164
-
165
- def num_lines_left
166
- deletions.length
167
- end
168
-
169
- def num_lines_right
170
- additions.length
171
- end
172
-
173
- private
174
-
175
- def num_lines
176
- deletions.length > additions.length ? deletions.length :
177
- additions.length
178
- end
179
-
180
- def cell_border_width(pos, side)
181
- borders = 'border-width: '
182
-
183
- borders += top_border(pos)
184
- borders += right_border(pos, side)
185
- borders += bottom_border(pos, :left == side ? deletions : additions)
186
- borders += left_border(pos, side)
187
-
188
- return borders
189
- end
190
-
191
- def top_border(pos)
192
- if 0 == pos then
193
- return '1px '
194
- else
195
- return '0 '
196
- end
197
- end
198
-
199
- def right_border(pos, side)
200
- if :right == side and 0!=pos and pos >= additions.length then
201
- return '0 '
202
- else
203
- return '1px '
204
- end
205
- end
206
-
207
- def bottom_border(pos, lines)
208
- if lines.length == pos+1 or (lines.length == 0 and 0==pos) then
209
- return '1px '
210
- else
211
- return '0 '
212
- end
213
- end
214
-
215
- def left_border(pos, side)
216
- if 0!=pos and pos >= additions.length then
217
- return '1px;'
218
- elsif !( (:right == side) ^ (0!=pos and pos >= deletions.length) ) then
219
- return '1px;'
220
- else
221
- return '0;'
222
- end
223
- end
224
-
225
-
226
- def class_for(text)
227
- return ' changed' unless text.nil?
228
- return ''
229
- end
230
-
231
- attr_accessor :additions, :deletions
232
- alias left_lines deletions
233
- alias right_lines additions
234
-
235
- end
236
-
237
- class UnchangedGroup < Group
238
-
239
- include ERB::Util
240
-
241
- def initialize(initial_left_line = 1, initial_right_line = 1)
242
- super(initial_left_line, initial_right_line)
243
- @lines = []
244
- end
245
-
246
- def push_unchanged(text)
247
- @lines << text
248
- end
249
-
250
- def num_lines
251
- @lines.size
252
- end
253
-
254
- alias num_lines_left num_lines
255
- alias num_lines_right num_lines
256
-
257
- private
258
-
259
- def cell_border_width(pos, side)
260
- return 'border-width: 0 1px 0 0;' if :left == side
261
- return 'border-width: 0 0 0 0;'
262
- end
263
-
264
- def class_for(text)
265
- return ''
266
- end
267
-
268
- attr_accessor :lines
269
- alias left_lines lines
270
- alias right_lines lines
271
-
272
- end
273
-
274
- class SpacingGroup
275
-
276
- include Singleton
277
-
278
- def render_diff_lines
279
- cell = " <td style='border:solid gray; " +
280
- "border-width: 1px 0 1px 0;'>&nbsp;</td>\n"
281
-
282
- return " <tr>\n" + cell + cell + cell + cell + " </tr>\n"
283
- end
284
-
285
- end