motiro 0.6.6 → 0.6.7

Sign up to get free protection for your applications and to get access to all the features.
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