Edgewall Software

Ticket #2028: trac-diff-for-0.9.4.patch

File trac-diff-for-0.9.4.patch, 85.4 KB (added by trac-project@…, 3 years ago)

Updated patch to apply against 0.9.4

  • htdocs/css/browser.css

    diff -Nru htdocs/css/browser.css htdocs/css/browser.css
     
    4646#dirlist td.rev { text-align: right } 
    4747#dirlist td.change { font-size: 85%; vertical-align: middle; white-space: nowrap } 
    4848 
     49/* Log */ 
     50tr.diff input {  
     51 padding: 0 1em 0 1em; 
     52 margin: 0;  
     53} 
     54 
     55div.buttons { 
     56 clear: left; 
     57} 
     58 
     59#anydiff { 
     60 margin: 0 0 1em; 
     61 float: left; 
     62} 
     63#anydiff form, #anydiff div, #anydiff h2 { 
     64 display: inline; 
     65} 
     66#anydiff input {  
     67 vertical-align: baseline; 
     68 margin: 0 -0.5em 0 1em; 
     69} 
     70 
     71 
    4972/* Styles for the revision log table 
    5073   (extends the styles for "table.listing") */ 
    5174#chglist { margin-top: 0 } 
  • htdocs/css/changeset.css

    diff -Nru htdocs/css/changeset.css htdocs/css/changeset.css
     
    2626 
    2727.diff ul.props { font-size: 90%; list-style: disc; margin: .5em 0 0; padding: 0 .5em 1em 2em } 
    2828.diff ul.props li { margin: 0; padding: 0 } 
     29 
     30 
     31#title dl { 
     32 display: inline; 
     33 font-size: 110% 
     34} 
     35#title dt {  
     36  font-size: 110%; 
     37  font-weight: bold; 
     38  display: inline;  
     39  margin-left: 3em; 
     40} 
     41#title dd {  
     42  display: inline; 
     43  margin-left: 0.4em; 
     44} 
  • templates/anydiff.cs

    diff -Nru templates/anydiff.cs templates/anydiff.cs
     
     1<?cs include "header.cs"?> 
     2 
     3<div id="ctxtnav" class="nav"> 
     4 <h2>Navigation</h2><?cs 
     5 with:links = chrome.links ?> 
     6  <ul> 
     7  </ul><?cs 
     8 /with ?> 
     9</div> 
     10 
     11<div id="content" class="changeset"> 
     12 <div id="title"> 
     13    <h1>Select Base and Target for Diff:</h1> 
     14 </div> 
     15 
     16 <div id="anydiff"> 
     17  <form action="<?cs var:anydiff.diff_href ?>" method="post"> 
     18   <table> 
     19    <tr> 
     20     <th><label for="old_path">From:</label></th> 
     21     <td> 
     22      <input type="text" id="old_path" name="old_path" value="<?cs 
     23         var:anydiff.old_path ?>" size="44" /> 
     24      <label for="old_rev">at Revision:</label> 
     25      <input type="text" id="old_rev" name="old" value="<?cs 
     26         var:anydiff.old_rev ?>" size="4" /> 
     27     </td> 
     28    </tr> 
     29    <tr> 
     30     <th><label for="new_path">To:</label></th> 
     31     <td> 
     32      <input type="text" id="new_path" name="path" value="<?cs 
     33         var:anydiff.new_path ?>" size="44" /> 
     34      <label for="new_rev">at Revision:</label> 
     35      <input type="text" id="new_rev" name="new" value="<?cs 
     36         var:anydiff.new_rev ?>" size="4" /> 
     37     </td> 
     38    </tr> 
     39   </table> 
     40   <div class="buttons"> 
     41      <input type="submit" value="View changes" /> 
     42   </div> 
     43  </form> 
     44 </div> 
     45</div> 
     46 
     47<?cs include "footer.cs"?> 
  • templates/browser.cs

    diff -Nru templates/browser.cs templates/browser.cs
     
    33 
    44<div id="ctxtnav" class="nav"> 
    55 <ul> 
    6   <li class="last"><a href="<?cs var:browser.log_href ?>">Revision Log</a></li> 
     6  <li class="first"><a href="<?cs var:browser.restr_changeset_href ?>"> 
     7   Last Change</a></li> 
     8  <li class="last"><a href="<?cs var:browser.log_href ?>"> 
     9   Revision Log</a></li> 
    710 </ul> 
    811</div> 
    912 
     13 
    1014<div id="content" class="browser"> 
    1115 <h1><?cs call:browser_path_links(browser.path, browser) ?></h1> 
    1216 
    1317 <div id="jumprev"> 
    14   <form action="" method="get"><div> 
    15    <label for="rev">View revision:</label> 
    16    <input type="text" id="rev" name="rev" value="<?cs 
    17      var:browser.revision ?>" size="4" /> 
    18   </div></form> 
     18  <form action="" method="get"> 
     19   <div> 
     20    <label for="rev">View revision:</label> 
     21    <input type="text" id="rev" name="rev" value="<?cs 
     22       var:browser.revision ?>" size="4" /> 
     23   </div> 
     24  </form> 
    1925 </div> 
    2026 
    2127 <?cs if:browser.is_dir ?> 
     
    114120  ?>/TracBrowser">TracBrowser</a> for help on using the browser. 
    115121 </div> 
    116122 
     123  <div id="anydiff"><?cs 
     124   if len(browser.path) > #1 ?> 
     125    <form action="<?cs var:browser.anydiff_href ?>" method="get"> 
     126     <input type="hidden" name="new_path" value="<?cs var:browser.path ?>" /> 
     127     <input type="hidden" name="old_path" value="<?cs var:browser.path ?>" /> 
     128     <input type="hidden" name="new_rev" value="<?cs var:browser.revision ?>" /> 
     129     <input type="hidden" name="old_rev" value="<?cs var:browser.revision ?>" /> 
     130     <div class="buttons"> 
     131      <input type="submit" value="View changes..." title="Prepare an Arbitrary Diff" /> 
     132     </div> 
     133    </form><?cs 
     134   /if ?> 
     135  </div> 
     136 
    117137</div> 
    118138<?cs include:"footer.cs"?> 
  • templates/changeset.cs

    diff -Nru templates/changeset.cs templates/changeset.cs
     
    1 <?cs include "header.cs"?> 
    2 <?cs include "macros.cs"?> 
    3  
    4 <div id="ctxtnav" class="nav"> 
    5  <h2>Changeset Navigation</h2><?cs 
    6  with:links = chrome.links ?> 
    7   <ul><?cs 
    8    if:len(links.prev) ?> 
    9     <li class="first<?cs if:!len(links.next) ?> last<?cs /if ?>"> 
    10      &larr; <a class="prev" href="<?cs var:links.prev.0.href ?>" title="<?cs 
    11        var:links.prev.0.title ?>">Previous Changeset</a> 
    12     </li><?cs 
    13    /if ?><?cs 
    14    if:len(links.next) ?> 
    15     <li class="<?cs if:len(links.prev) ?>first <?cs /if ?>last"> 
    16      <a class="next" href="<?cs var:links.next.0.href ?>" title="<?cs 
    17        var:links.next.0.title ?>">Next Changeset</a> &rarr; 
    18     </li><?cs 
    19    /if ?> 
    20   </ul><?cs 
    21  /with ?> 
    22 </div> 
    23  
    24 <div id="content" class="changeset"> 
    25 <h1>Changeset <?cs var:changeset.revision ?></h1> 
    26  
    27 <?cs each:change = changeset.changes ?><?cs 
    28  if:len(change.diff) ?><?cs 
    29   set:has_diffs = 1 ?><?cs 
    30  /if ?><?cs 
    31 /each ?><?cs if:has_diffs || diff.options.ignoreblanklines  
    32   || diff.options.ignorecase || diff.options.ignorewhitespace ?> 
    33 <form method="post" id="prefs" action=""> 
    34  <div> 
    35   <label for="style">View differences</label> 
    36   <select id="style" name="style"> 
    37    <option value="inline"<?cs 
    38      if:diff.style == 'inline' ?> selected="selected"<?cs 
    39      /if ?>>inline</option> 
    40    <option value="sidebyside"<?cs 
    41      if:diff.style == 'sidebyside' ?> selected="selected"<?cs 
    42      /if ?>>side by side</option> 
    43   </select> 
    44   <div class="field"> 
    45    Show <input type="text" name="contextlines" id="contextlines" size="2" 
    46      maxlength="3" value="<?cs var:diff.options.contextlines ?>" /> 
    47    <label for="contextlines">lines around each change</label> 
    48   </div> 
    49   <fieldset id="ignore"> 
    50    <legend>Ignore:</legend> 
    51    <div class="field"> 
    52     <input type="checkbox" id="blanklines" name="ignoreblanklines"<?cs 
    53       if:diff.options.ignoreblanklines ?> checked="checked"<?cs /if ?> /> 
    54     <label for="blanklines">Blank lines</label> 
    55    </div> 
    56    <div class="field"> 
    57     <input type="checkbox" id="case" name="ignorecase"<?cs 
    58       if:diff.options.ignorecase ?> checked="checked"<?cs /if ?> /> 
    59     <label for="case">Case changes</label> 
    60    </div> 
    61    <div class="field"> 
    62     <input type="checkbox" id="whitespace" name="ignorewhitespace"<?cs 
    63       if:diff.options.ignorewhitespace ?> checked="checked"<?cs /if ?> /> 
    64     <label for="whitespace">White space changes</label> 
    65    </div> 
    66   </fieldset> 
    67   <div class="buttons"> 
    68    <input type="submit" name="update" value="Update" /> 
    69   </div> 
    70  </div> 
    71 </form><?cs /if ?> 
    72  
    73 <?cs def:node_change(item,cl,kind) ?><?cs  
    74   set:ndiffs = len(item.diff) ?><?cs 
    75   set:nprops = len(item.props) ?> 
    76   <div class="<?cs var:cl ?>"></div><?cs  
    77   if:cl == "rem" ?> 
    78    <a title="Show what was removed (rev. <?cs var:item.rev.old ?>)" href="<?cs 
    79      var:item.browser_href.old ?>"><?cs var:item.path.old ?></a><?cs 
    80   else ?> 
    81    <a title="Show entry in browser" href="<?cs 
    82      var:item.browser_href.new ?>"><?cs var:item.path.new ?></a><?cs 
    83   /if ?> 
    84   <span class="comment">(<?cs var:kind ?>)</span><?cs 
    85   if:item.path.old && item.change == 'copy' || item.change == 'move' ?> 
    86    <small><em>(<?cs var:kind ?> from <a href="<?cs 
    87     var:item.browser_href.old ?>" title="Show original file (rev. <?cs 
    88     var:item.rev.old ?>)"><?cs var:item.path.old ?></a>)</em></small><?cs 
    89   /if ?><?cs 
    90   if:$ndiffs + $nprops > #0 ?> 
    91     (<a href="#file<?cs var:name(item) ?>" title="Show differences"><?cs 
    92       if:$ndiffs > #0 ?><?cs var:ndiffs ?>&nbsp;diff<?cs if:$ndiffs > #1 ?>s<?cs /if ?><?cs  
    93       /if ?><?cs 
    94       if:$ndiffs && $nprops ?>, <?cs /if ?><?cs  
    95       if:$nprops > #0 ?><?cs var:nprops ?>&nbsp;prop<?cs if:$nprops > #1 ?>s<?cs /if ?><?cs 
    96       /if ?></a>)<?cs 
    97   elif:cl == "mod" ?> 
    98     (<a href="<?cs var:item.browser_href.old ?>" 
    99         title="Show previous version in browser">previous</a>)<?cs 
    100   /if ?> 
    101 <?cs /def ?> 
    102  
    103 <dl id="overview"> 
    104  <dt class="time">Timestamp:</dt> 
    105  <dd class="time"><?cs var:changeset.time ?></dd> 
    106  <dt class="author">Author:</dt> 
    107  <dd class="author"><?cs var:changeset.author ?></dd> 
    108  <dt class="message">Message:</dt> 
    109  <dd class="message" id="searchable"><?cs 
    110   alt:changeset.message ?>&nbsp;<?cs /alt ?></dd> 
    111  <dt class="files">Files:</dt> 
    112  <dd class="files"> 
    113   <ul><?cs each:item = changeset.changes ?> 
    114    <li><?cs 
    115     if:item.change == 'add' ?><?cs 
    116      call:node_change(item, 'add', 'added') ?><?cs 
    117     elif:item.change == 'delete' ?><?cs 
    118      call:node_change(item, 'rem', 'deleted') ?><?cs 
    119     elif:item.change == 'copy' ?><?cs 
    120      call:node_change(item, 'cp', 'copied') ?><?cs 
    121     elif:item.change == 'move' ?><?cs 
    122      call:node_change(item, 'mv', 'moved') ?><?cs 
    123     elif:item.change == 'edit' ?><?cs 
    124      call:node_change(item, 'mod', 'modified') ?><?cs 
    125     /if ?> 
    126    </li> 
    127   <?cs /each ?></ul> 
    128  </dd> 
    129 </dl> 
    130  
    131 <div class="diff"> 
    132  <div id="legend"> 
    133   <h3>Legend:</h3> 
    134   <dl> 
    135    <dt class="unmod"></dt><dd>Unmodified</dd> 
    136    <dt class="add"></dt><dd>Added</dd> 
    137    <dt class="rem"></dt><dd>Removed</dd> 
    138    <dt class="mod"></dt><dd>Modified</dd> 
    139    <dt class="cp"></dt><dd>Copied</dd> 
    140    <dt class="mv"></dt><dd>Moved</dd> 
    141   </dl> 
    142  </div> 
    143  <ul class="entries"><?cs 
    144  each:item = changeset.changes ?><?cs 
    145   if:len(item.diff) || len(item.props) ?><li class="entry" id="file<?cs 
    146    var:name(item) ?>"><h2><a href="<?cs 
    147    var:item.browser_href.new ?>" title="Show new revision <?cs 
    148    var:item.rev.new ?> of this file in browser"><?cs 
    149    var:item.path.new ?></a></h2><?cs 
    150    if:len(item.props) ?><ul class="props"><?cs 
    151     each:prop = item.props ?><li>Property <strong><?cs 
    152      var:name(prop) ?></strong> <?cs 
    153      if:prop.old && prop.new ?>changed from <?cs 
    154      elif:!prop.old ?>set<?cs 
    155      else ?>deleted<?cs 
    156      /if ?><?cs 
    157      if:prop.old && prop.new ?><em><tt><?cs var:prop.old ?></tt></em><?cs /if ?><?cs 
    158      if:prop.new ?> to <em><tt><?cs var:prop.new ?></tt></em><?cs /if ?></li><?cs 
    159     /each ?></ul><?cs 
    160    /if ?><?cs 
    161    if:len(item.diff) ?><table class="<?cs 
    162     var:diff.style ?>" summary="Differences" cellspacing="0"><?cs 
    163     if:diff.style == 'sidebyside' ?> 
    164      <colgroup class="l"><col class="lineno" /><col class="content" /></colgroup> 
    165      <colgroup class="r"><col class="lineno" /><col class="content" /></colgroup> 
    166      <thead><tr> 
    167       <th colspan="2"><a href="<?cs 
    168        var:item.browser_href.old ?>" title="Show old rev. <?cs 
    169        var:item.rev.old ?> of <?cs var:item.path.old ?>">Revision <?cs 
    170        var:item.rev.old ?></a></th> 
    171       <th colspan="2"><a href="<?cs 
    172        var:item.browser_href.new ?>" title="Show new rev. <?cs 
    173        var:item.rev.new ?> of <?cs var:item.path.new ?>">Revision <?cs 
    174        var:item.rev.new ?></a></th> 
    175       </tr> 
    176      </thead><?cs 
    177      each:change = item.diff ?><tbody><?cs 
    178       call:diff_display(change, diff.style) ?></tbody><?cs 
    179       if:name(change) < len(item.diff) - 1 ?><tbody class="skipped"><tr> 
    180        <th>&hellip;</th><td>&nbsp;</td><th>&hellip;</th><td>&nbsp;</td> 
    181       </tr></tbody><?cs /if ?><?cs 
    182      /each ?><?cs 
    183     else ?> 
    184      <colgroup><col class="lineno" /><col class="lineno" /><col class="content" /></colgroup> 
    185      <thead><tr> 
    186       <th title="Revision <?cs var:item.rev.old ?>"><a href="<?cs 
    187        var:item.browser_href.old ?>" title="Show old version of <?cs 
    188        var:item.path.old ?>">r<?cs var:item.rev.old ?></a></th> 
    189       <th title="Revision <?cs var:item.rev.new ?>"><a href="<?cs 
    190        var:item.browser_href.new ?>" title="Show new version of <?cs 
    191        var:item.path.new ?>">r<?cs var:item.rev.new ?></a></th> 
    192       <th>&nbsp;</th></tr> 
    193      </thead><?cs 
    194      each:change = item.diff ?><?cs 
    195       call:diff_display(change, diff.style) ?><?cs 
    196       if:name(change) < len(item.diff) - 1 ?><tbody class="skipped"><tr> 
    197        <th>&hellip;</th><th>&hellip;</th><td>&nbsp;</td> 
    198       </tr></tbody><?cs /if ?><?cs 
    199      /each ?><?cs 
    200     /if ?></table><?cs 
    201    /if ?></li><?cs 
    202   /if ?><?cs 
    203  /each ?></ul> 
    204 </div> 
    205  
    206 </div> 
    207 <?cs include "footer.cs"?> 
  • templates/diff.cs

    diff -Nru templates/diff.cs templates/diff.cs
     
     1<?cs include "header.cs"?> 
     2<?cs include "macros.cs"?> 
     3 
     4<div id="ctxtnav" class="nav"> 
     5 <h2>Navigation</h2><?cs 
     6 with:links = chrome.links ?> 
     7  <ul><?cs 
     8   if:diff.chgset ?><?cs 
     9    if:len(links.prev) ?> 
     10     <li class="first<?cs if:!len(links.next) ?> last<?cs /if ?>"> 
     11     &larr; <a class="prev" href="<?cs var:links.prev.0.href ?>" title="<?cs 
     12        var:links.prev.0.title ?>">Previous <?cs  
     13         if:diff.restricted ?>Change<?cs else ?>Changeset<?cs /if ?></a> 
     14     </li><?cs 
     15    /if ?><?cs 
     16    if:len(links.next) ?> 
     17     <li class="<?cs if:len(links.prev) ?>first <?cs /if ?>last"> 
     18      <a class="next" href="<?cs var:links.next.0.href ?>" title="<?cs 
     19        var:links.next.0.title ?>">Next <?cs  
     20         if:diff.restricted ?>Change<?cs else ?>Changeset<?cs /if ?></a> &rarr; 
     21     </li><?cs 
     22    /if ?><?cs 
     23   else ?> 
     24    <li class="first"><a href="<?cs var:diff.reverse_href ?>">Reverse Diff</a></li><?cs 
     25   /if ?> 
     26  </ul><?cs 
     27 /with ?> 
     28</div> 
     29 
     30<div id="content" class="changeset"> 
     31 <div id="title"><?cs 
     32  if:diff.chgset ?><?cs 
     33   if:diff.restricted ?> 
     34    <h1>Changeset <a title="Show full changeset" href="<?cs var:diff.href.new_rev ?>"> 
     35      <?cs var:diff.new_rev ?></a>  
     36     for <a title="Show entry in browser" href="<?cs var:diff.href.new_path ?>"> 
     37      <?cs var:diff.new_path ?></a>  
     38    </h1><?cs 
     39   else ?> 
     40    <h1>Changeset <?cs var:diff.new_rev ?></h1><?cs 
     41   /if ?><?cs 
     42  else ?><?cs 
     43    if:diff.restricted ?> 
     44    <h1>Changes in <a title="Show entry in browser" href="<?cs var:diff.href.new_path ?>"> 
     45      <?cs var:diff.new_path ?></a> 
     46     from revision <a title="Show full changeset" href="<?cs var:diff.href.old_rev ?>"> 
     47      <?cs var:diff.old_rev ?></a> 
     48     to <a title="Show full changeset" href="<?cs var:diff.href.new_rev ?>"> 
     49      <?cs var:diff.new_rev ?></a> 
     50    </h1><?cs 
     51   else ?> 
     52    <h1>Changes from <a title="Show entry in browser" href="<?cs var:diff.href.old_path ?>"> 
     53      <?cs var:diff.old_path ?></a>  
     54     at revision <a title="Show full changeset" href="<?cs var:diff.href.old_rev ?>"> 
     55      <?cs var:diff.old_rev ?></a> 
     56     to <a title="Show entry in browser" href="<?cs var:diff.href.new_path ?>"> 
     57     <?cs var:diff.new_path ?></a>  
     58     at revision <a title="Show full changeset" href="<?cs var:diff.href.new_rev ?>"> 
     59     <?cs var:diff.new_rev ?></a> 
     60    </h1><?cs 
     61   /if ?><?cs 
     62  /if ?> 
     63 </div> 
     64 
     65<?cs each:change = diff.changes ?><?cs 
     66 if:len(change.diff) ?><?cs 
     67  set:has_diffs = 1 ?><?cs 
     68 /if ?><?cs 
     69/each ?><?cs if:has_diffs || diff.options.ignoreblanklines  
     70  || diff.options.ignorecase || diff.options.ignorewhitespace ?> 
     71<form method="post" id="prefs" action=""> 
     72 <div><?cs  
     73  if:!diff.chgset ?> 
     74   <input type="hidden" name="old_path" value="<?cs var:diff.old_path ?>" /> 
     75   <input type="hidden" name="path" value="<?cs var:diff.new_path ?>" /> 
     76   <input type="hidden" name="old" value="<?cs var:diff.old_rev ?>" /> 
     77   <input type="hidden" name="new" value="<?cs var:diff.new_rev ?>" /><?cs 
     78  /if ?> 
     79  <label for="style">View differences</label> 
     80  <select id="style" name="style"> 
     81   <option value="inline"<?cs 
     82     if:diff.style == 'inline' ?> selected="selected"<?cs 
     83     /if ?>>inline</option> 
     84   <option value="sidebyside"<?cs 
     85     if:diff.style == 'sidebyside' ?> selected="selected"<?cs 
     86     /if ?>>side by side</option> 
     87  </select> 
     88  <div class="field"> 
     89   Show <input type="text" name="contextlines" id="contextlines" size="2" 
     90     maxlength="3" value="<?cs var:diff.options.contextlines ?>" /> 
     91   <label for="contextlines">lines around each change</label> 
     92  </div> 
     93  <fieldset id="ignore"> 
     94   <legend>Ignore:</legend> 
     95   <div class="field"> 
     96    <input type="checkbox" id="blanklines" name="ignoreblanklines"<?cs 
     97      if:diff.options.ignoreblanklines ?> checked="checked"<?cs /if ?> /> 
     98    <label for="blanklines">Blank lines</label> 
     99   </div> 
     100   <div class="field"> 
     101    <input type="checkbox" id="case" name="ignorecase"<?cs 
     102      if:diff.options.ignorecase ?> checked="checked"<?cs /if ?> /> 
     103    <label for="case">Case changes</label> 
     104   </div> 
     105   <div class="field"> 
     106    <input type="checkbox" id="whitespace" name="ignorewhitespace"<?cs 
     107      if:diff.options.ignorewhitespace ?> checked="checked"<?cs /if ?> /> 
     108    <label for="whitespace">White space changes</label> 
     109   </div> 
     110  </fieldset> 
     111  <div class="buttons"> 
     112   <input type="submit" name="update" value="Update" /> 
     113  </div> 
     114 </div> 
     115</form><?cs /if ?> 
     116 
     117<?cs def:node_change(item,cl,kind) ?><?cs  
     118  set:ndiffs = len(item.diff) ?><?cs 
     119  set:nprops = len(item.props) ?> 
     120  <div class="<?cs var:cl ?>"></div><?cs  
     121  if:cl == "rem" ?> 
     122   <a title="Show what was removed (rev. <?cs var:item.rev.old ?>)" href="<?cs 
     123     var:item.browser_href.old ?>"><?cs var:item.path.old ?></a><?cs 
     124  else ?> 
     125   <a title="Show entry in browser" href="<?cs 
     126     var:item.browser_href.new ?>"><?cs var:item.path.new ?></a><?cs 
     127  /if ?> 
     128  <span class="comment">(<?cs var:kind ?>)</span><?cs 
     129  if:item.path.old && item.change == 'copy' || item.change == 'move' ?> 
     130   <small><em>(<?cs var:kind ?> from <a href="<?cs 
     131    var:item.browser_href.old ?>" title="Show original file (rev. <?cs 
     132    var:item.rev.old ?>)"><?cs var:item.path.old ?></a>)</em></small><?cs 
     133  /if ?><?cs 
     134  if:$ndiffs + $nprops > #0 ?> 
     135    (<a href="#file<?cs var:name(item) ?>" title="Show differences"><?cs 
     136      if:$ndiffs > #0 ?><?cs var:ndiffs ?>&nbsp;diff<?cs if:$ndiffs > #1 ?>s<?cs /if ?><?cs  
     137      /if ?><?cs 
     138      if:$ndiffs && $nprops ?>, <?cs /if ?><?cs  
     139      if:$nprops > #0 ?><?cs var:nprops ?>&nbsp;prop<?cs if:$nprops > #1 ?>s<?cs /if ?><?cs 
     140      /if ?></a>)<?cs 
     141  elif:cl == "mod" ?> 
     142    (<a href="<?cs var:item.browser_href.old ?>" 
     143        title="Show previous version in browser">previous</a>)<?cs 
     144  /if ?> 
     145<?cs /def ?> 
     146 
     147<dl id="overview"><?cs 
     148 if:diff.chgset ?> 
     149 <dt class="time">Timestamp:</dt> 
     150 <dd class="time"><?cs var:changeset.time ?></dd> 
     151 <dt class="author">Author:</dt> 
     152 <dd class="author"><?cs var:changeset.author ?></dd> 
     153 <dt class="message">Message:</dt> 
     154 <dd class="message" id="searchable"><?cs 
     155  alt:changeset.message ?>&nbsp;<?cs /alt ?></dd><?cs 
     156 /if ?> 
     157 <dt class="files"><?cs  
     158  if:len(diff.changes) > #0 ?> 
     159   Files:<?cs 
     160  else ?> 
     161   (None)<?cs 
     162  /if ?> 
     163 </dt> 
     164 <dd class="files"> 
     165  <ul><?cs each:item = diff.changes ?> 
     166   <li><?cs 
     167    if:item.change == 'add' ?><?cs 
     168     call:node_change(item, 'add', 'added') ?><?cs 
     169    elif:item.change == 'delete' ?><?cs 
     170     call:node_change(item, 'rem', 'deleted') ?><?cs 
     171    elif:item.change == 'copy' ?><?cs 
     172     call:node_change(item, 'cp', 'copied') ?><?cs 
     173    elif:item.change == 'move' ?><?cs 
     174     call:node_change(item, 'mv', 'moved') ?><?cs 
     175    elif:item.change == 'edit' ?><?cs 
     176     call:node_change(item, 'mod', 'modified') ?><?cs 
     177    /if ?> 
     178   </li> 
     179  <?cs /each ?></ul> 
     180 </dd> 
     181</dl> 
     182 
     183<div class="diff"> 
     184 <div id="legend"> 
     185  <h3>Legend:</h3> 
     186  <dl> 
     187   <dt class="unmod"></dt><dd>Unmodified</dd> 
     188   <dt class="add"></dt><dd>Added</dd> 
     189   <dt class="rem"></dt><dd>Removed</dd> 
     190   <dt class="mod"></dt><dd>Modified</dd> 
     191   <dt class="cp"></dt><dd>Copied</dd> 
     192   <dt class="mv"></dt><dd>Moved</dd> 
     193  </dl> 
     194 </div> 
     195 <ul class="entries"><?cs 
     196 each:item = diff.changes ?><?cs 
     197  if:len(item.diff) || len(item.props) ?><li class="entry" id="file<?cs 
     198   var:name(item) ?>"><h2><a href="<?cs 
     199   var:item.browser_href.new ?>" title="Show new revision <?cs 
     200   var:item.rev.new ?> of this file in browser"><?cs 
     201   var:item.path.new ?></a></h2><?cs 
     202   if:len(item.props) ?><ul class="props"><?cs 
     203    each:prop = item.props ?><li>Property <strong><?cs 
     204     var:name(prop) ?></strong> <?cs 
     205     if:prop.old && prop.new ?>changed from <?cs 
     206     elif:!prop.old ?>set<?cs 
     207     else ?>deleted<?cs 
     208     /if ?><?cs 
     209     if:prop.old && prop.new ?><em><tt><?cs var:prop.old ?></tt></em><?cs /if ?><?cs 
     210     if:prop.new ?> to <em><tt><?cs var:prop.new ?></tt></em><?cs /if ?></li><?cs 
     211    /each ?></ul><?cs 
     212   /if ?><?cs 
     213   if:len(item.diff) ?><table class="<?cs 
     214    var:diff.style ?>" summary="Differences" cellspacing="0"><?cs 
     215    if:diff.style == 'sidebyside' ?> 
     216     <colgroup class="l"><col class="lineno" /><col class="content" /></colgroup> 
     217     <colgroup class="r"><col class="lineno" /><col class="content" /></colgroup> 
     218     <thead><tr> 
     219      <th colspan="2"><a href="<?cs 
     220       var:item.browser_href.old ?>" title="Show old rev. <?cs 
     221       var:item.rev.old ?> of <?cs var:item.path.old ?>">Revision <?cs 
     222       var:item.rev.old ?></a></th> 
     223      <th colspan="2"><a href="<?cs 
     224       var:item.browser_href.new ?>" title="Show new rev. <?cs 
     225       var:item.rev.new ?> of <?cs var:item.path.new ?>">Revision <?cs 
     226       var:item.rev.new ?></a></th> 
     227      </tr> 
     228     </thead><?cs 
     229     each:change = item.diff ?><tbody><?cs 
     230      call:diff_display(change, diff.style) ?></tbody><?cs 
     231      if:name(change) < len(item.diff) - 1 ?><tbody class="skipped"><tr> 
     232       <th>&hellip;</th><td>&nbsp;</td><th>&hellip;</th><td>&nbsp;</td> 
     233      </tr></tbody><?cs /if ?><?cs 
     234     /each ?><?cs 
     235    else ?> 
     236     <colgroup><col class="lineno" /><col class="lineno" /><col class="content" /></colgroup> 
     237     <thead><tr> 
     238      <th title="Revision <?cs var:item.rev.old ?>"><a href="<?cs 
     239       var:item.browser_href.old ?>" title="Show old version of <?cs 
     240       var:item.path.old ?>">r<?cs var:item.rev.old ?></a></th> 
     241      <th title="Revision <?cs var:item.rev.new ?>"><a href="<?cs 
     242       var:item.browser_href.new ?>" title="Show new version of <?cs 
     243       var:item.path.new ?>">r<?cs var:item.rev.new ?></a></th> 
     244      <th>&nbsp;</th></tr> 
     245     </thead><?cs 
     246     each:change = item.diff ?><?cs 
     247      call:diff_display(change, diff.style) ?><?cs 
     248      if:name(change) < len(item.diff) - 1 ?><tbody class="skipped"><tr> 
     249       <th>&hellip;</th><th>&hellip;</th><td>&nbsp;</td> 
     250      </tr></tbody><?cs /if ?><?cs 
     251     /each ?><?cs 
     252    /if ?></table><?cs 
     253   /if ?></li><?cs 
     254  /if ?><?cs 
     255 /each ?></ul> 
     256</div> 
     257 
     258</div> 
     259<?cs include "footer.cs"?> 
  • templates/log.cs

    diff -Nru templates/log.cs templates/log.cs
     
    33 
    44<div id="ctxtnav" class="nav"> 
    55 <ul> 
    6   <li class="last"><a href="<?cs 
    7     var:log.browser_href ?>">View Latest Revision</a></li><?cs 
     6  <li class="last"> 
     7   <a href="<?cs var:log.browser_href ?>">View Latest Revision</a> 
     8  </li><?cs 
    89  if:len(chrome.links.prev) ?> 
    910   <li class="first<?cs if:!len(chrome.links.next) ?> last<?cs /if ?>"> 
    1011    &larr; <a href="<?cs var:chrome.links.prev.0.href ?>" title="<?cs 
     
    6162          title="Warning: by updating, you will clear the page history" /> 
    6263  </div> 
    6364 </form> 
     65 
    6466 <div class="diff"> 
    6567  <div id="legend"> 
    6668   <h3>Legend:</h3> 
     
    7476   </dl> 
    7577  </div> 
    7678 </div> 
     79 
     80 <form action="<?cs var:log.href ?>" method="post"> 
     81  <div class="buttons"><input type="submit" value="View changes"  
     82       title="Diff from Old Revision to New Revision (select them below)" /> 
     83 </div> 
    7784 <table id="chglist" class="listing"> 
    7885  <thead> 
    7986   <tr> 
     87    <th>Old</th> 
     88    <th>New</th> 
    8089    <th class="change"></th> 
    8190    <th class="data">Date</th> 
    8291    <th class="rev">Rev</th> 
     
    8796  </thead> 
    8897  <tbody><?cs 
    8998   set:indent = #1 ?><?cs 
     99   set:idx = #0 ?><?cs 
    90100   each:item = log.items ?><?cs 
    91101    if:item.copyfrom_path ?> 
    92102     <tr class="<?cs if:name(item) % #2 ?>even<?cs else ?>odd<?cs /if ?>"> 
    93       <td class="copyfrom_path" colspan="6" style="padding-left: <?cs var:indent ?>em"> 
     103      <td class="copyfrom_path" colspan="8" style="padding-left: <?cs var:indent ?>em"> 
    94104       copied from <a href="<?cs var:item.browser_href ?>"?><?cs var:item.copyfrom_path ?></a>: 
    95105      </td> 
    96106     </tr><?cs 
     
    99109      set:indent = #1 ?><?cs 
    100110    /if ?> 
    101111    <tr class="<?cs if:name(item) % #2 ?>even<?cs else ?>odd<?cs /if ?>"> 
     112     <td><input type="radio" name="old"  
     113                value="<?cs var:item.path ?>#<?cs var:item.rev ?>" <?cs 
     114          if:idx == #1 ?> checked="checked" <?cs /if ?> /></td> 
     115     <td><input type="radio" name="new"  
     116                value="<?cs var:item.path ?>#<?cs var:item.rev ?>" <?cs 
     117          if:idx == #0 ?> checked="checked" <?cs /if ?> /></td> 
    102118     <td class="change" style="padding-left:<?cs var:indent ?>em"> 
    103119      <a title="View log starting at this revision" href="<?cs var:item.log_href ?>"> 
    104120       <span class="<?cs var:item.change ?>"></span> 
     
    117133     <td class="author"><?cs var:log.changes[item.rev].author ?></td> 
    118134     <td class="summary"><?cs var:log.changes[item.rev].message ?></td> 
    119135    </tr><?cs 
     136    set:idx = idx + 1 ?><?cs 
    120137   /each ?> 
    121138  </tbody> 
    122  </table><?cs 
     139 </table> 
     140 <div class="buttons"><input type="submit" value="View changes"  
     141      title="Diff from Old Revision to New Revision (select them above)" /> 
     142 </div> 
     143 </form><?cs 
    123144 if:len(links.prev) || len(links.next) ?><div id="paging" class="nav"><ul><?cs 
    124145  if:len(links.prev) ?><li class="first<?cs 
    125146   if:!len(links.next) ?> last<?cs /if ?>">&larr; <a href="<?cs 
  • templates/wiki.cs

    diff -Nru templates/wiki.cs templates/wiki.cs
     
    154154    var:wiki.page_name ?></a></h1> 
    155155  <?cs if:len(wiki.history) ?><form method="get" action=""> 
    156156   <input type="hidden" name="action" value="diff" /> 
     157   <div class="buttons"> 
     158    <input type="submit" value="View changes" /> 
     159   </div> 
    157160   <table id="wikihist" class="listing" summary="Change history"> 
    158161    <thead><tr> 
    159162     <th class="diff"></th> 
  • trac/__init__.py

    diff -Nru trac/__init__.py trac/__init__.py
     
    1010""" 
    1111__docformat__ = 'epytext en' 
    1212 
    13 __version__ = '0.9.4' 
     13__version__ = '0.9.4-trac-diff' 
    1414__url__ = 'http://trac.edgewall.com/' 
    1515__copyright__ = '(C