[%# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # # This Source Code Form is "Incompatible With Secondary Licenses", as # defined by the Mozilla Public License, v. 2.0. #%] [%# This line is really long for a reason: to get rid of any possible textnodes # between the elements. This is necessary because DOM parent-child-sibling # relations can change and screw up the javascript for restoring, collapsing # and expanding. Do not change without testing all three of those. # Also, the first empty row is required because 'table-layout: fixed' only # considers the first row to determine column widths. If a colspan is found, # it then share the width equally among all columns, which we don't want. #%] <table class="file_table"><thead><tr><td class="num"></td><td></td><td class="num"></td><td></td></tr><tr><td class="file_head" colspan="4"><a href="#" onclick="return twisty_click(this)">[% collapsed ? '(+)' : '(-)' %]</a><input type="checkbox" name="[% file.filename FILTER html %]"[% collapsed ? '' : ' checked' %] class="bz_default_hidden"> [% file.filename FILTER html %] [% IF file.plus_lines %] [% IF file.minus_lines %] (-[% file.minus_lines %] / +[% file.plus_lines %] lines) [% ELSE %] (+[% file.plus_lines %] lines) [% END %] [% ELSE %] [% IF file.minus_lines %] (-[% file.minus_lines %] lines) [% END %] [% END %] </td></tr></thead><tbody class="[% collapsed ? 'file_collapse' : 'file' %]"> <script type="text/javascript"> incremental_restore() </script> [% section_num = 0 %] [% FOREACH section = sections %] [% section_num = section_num + 1 %] <tr> <th colspan="4" class="section_head"> <span id="[% file.filename FILTER html %]_sec[% section_num %]" class="lines_count"> [% IF file.is_add %] Added [% ELSIF file.is_remove %] Removed [% ELSE %] [% IF section.old_lines > 1 %] Lines [% section.old_start %]-[% section.old_start + section.old_lines - 1 %] [% ELSE %] Line [% section.old_start %] [% END %] [%+ section.func_info FILTER html IF section.func_info %] [% END %] </span> <span class="link_here"> <a href="#[% file.filename FILTER html %]_sec[% section_num %]">Link Here</a> </span> </th> </tr> [% current_line_old = section.old_start %] [% current_line_new = section.new_start %] [% FOREACH group = section.groups %] [% IF group.context %] [% FOREACH line = group.context %] <tr> <td class="num">[% current_line_old %]</td> <td><pre>[% line FILTER html %]</pre></td> <td class="num">[% current_line_new %]</td> <td><pre>[% line FILTER html %]</pre></td> </tr> [% current_line_old = current_line_old + 1 %] [% current_line_new = current_line_new + 1 %] [% END %] [% END %] [% IF group.plus.size %] [% IF group.minus.size %] [% i = 0 %] [% WHILE (i < group.plus.size || i < group.minus.size) %] [%# WHILE cannot loop more than 1000 times by default, so we break it every 500 times. %] [% currentloop = 0 %] [% WHILE currentloop < 500 && (i < group.plus.size || i < group.minus.size) %] <tr> [% IF i < group.minus.size %] <td class="num">[% current_line_old + i %]</td> <td class="changed"><pre>[% group.minus.$i FILTER html %]</pre></td> [% ELSIF i == group.minus.size %] [% rowspan = group.plus.size - group.minus.size %] <td class="num"[% IF rowspan > 1 %] rowspan="[% rowspan FILTER none %]"[% END %]></td> <td class="changed"[% IF rowspan > 1 %] rowspan="[% rowspan FILTER none %]"[% END %]></td> [% END %] [% IF i < group.plus.size %] <td class="num">[% current_line_new + i %]</td> <td class="changed"><pre>[% group.plus.$i FILTER html %]</pre></td> [% ELSIF i == group.plus.size %] [% rowspan = group.minus.size - group.plus.size %] <td class="num"[% IF rowspan > 1 %] rowspan="[% rowspan FILTER none %]"[% END %]></td> <td class="changed"[% IF rowspan > 1 %] rowspan="[% rowspan FILTER none %]"[% END %]></td> [% END %] </tr> [% currentloop = currentloop + 1 %] [% i = i + 1 %] [% END %] [% END %] [% current_line_old = current_line_old + group.minus.size %] [% current_line_new = current_line_new + group.plus.size %] [% ELSE %] [% FOREACH line = group.plus %] [% IF file.is_add %] <tr> <td class="num">[% current_line_new %]</td> <td class="added" colspan="3"><pre>[% line FILTER html %]</pre></td> </tr> [% ELSE %] <tr> [% IF loop.first %] <td class="num"[% IF group.plus.size > 1 %] rowspan="[% group.plus.size %]"[% END %]></td> <td[% IF group.plus.size > 1 %] rowspan="[% group.plus.size %]"[% END %]></td> [% END %] <td class="num">[% current_line_new %]</td> <td class="added"><pre>[% line FILTER html %]</pre></td> </tr> [% END %] [% current_line_new = current_line_new + 1 %] [% END %] [% END %] [% ELSE %] [% IF group.minus.size %] [% FOREACH line = group.minus %] [% IF file.is_remove %] <tr> <td class="num">[% current_line_old %]</td> <td class="removed" colspan="3"><pre>[% line FILTER html %]</pre></td> </tr> [% ELSE %] <tr> <td class="num">[% current_line_old %]</td> <td class="removed"><pre>[% line FILTER html %]</pre></td> [% IF loop.first %] <td class="num"[% IF group.minus.size > 1 %] rowspan="[% group.minus.size %]"[% END %]></td> <td[% IF group.minus.size > 1 %] rowspan="[% group.minus.size %]"[% END %]></td> [% END %] </tr> [% END %] [% current_line_old = current_line_old + 1 %] [% END %] [% END %] [% END %] [% END %] [% END %] </table>