Edgewall Software

Ticket #2028: trac-0.9b1.tar.gz-anydiff.patch

File trac-0.9b1.tar.gz-anydiff.patch, 83.6 KB (added by cboos, 3 years ago)

Adds TracDiff (r2210) functionality to Trac 0.9b1 (applies cleanly to the trac-0.9b1.tar.gz archive)

  • htdocs/css/browser.css

    diff -urN -x .svn trac-0.9b1/htdocs/css/browser.css anydiff-branch/htdocs/css/browser.css
    old new  
    4545#dirlist td.name a, #dirlist td.rev a { border-bottom: none; display: block } 
    4646#dirlist td.change * { font-size: 9px } 
    4747 
     48/* Log */ 
     49tr.diff input {  
     50 padding: 0 1em 0 1em; 
     51 margin: 0;  
     52} 
     53 
     54div.buttons { 
     55 clear: left; 
     56} 
     57 
     58#anydiff { 
     59 margin: 0 0 1em; 
     60 float: left; 
     61} 
     62#anydiff form, #anydiff div, #anydiff h2 { 
     63 display: inline; 
     64} 
     65#anydiff input {  
     66 vertical-align: baseline; 
     67 margin: 0 -0.5em 0 1em; 
     68} 
     69 
     70 
    4871/* Styles for the revision log table 
    4972   (extends the styles for "table.listing") */ 
    5073#chglist { margin-top: 0 } 
  • htdocs/css/changeset.css

    diff -urN -x .svn trac-0.9b1/htdocs/css/changeset.css anydiff-branch/htdocs/css/changeset.css
    old new  
    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 -urN -x .svn trac-0.9b1/templates/anydiff.cs anydiff-branch/templates/anydiff.cs
    old new  
     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 -urN -x .svn trac-0.9b1/templates/browser.cs anydiff-branch/templates/browser.cs
    old new  
    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.restricted_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 -urN -x .svn trac-0.9b1/templates/changeset.cs anydiff-branch/templates/changeset.cs
    old new  
    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      <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> 
    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="2" 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 var:changeset.message ?></dd> 
    110  <dt class="files">Files:</dt> 
    111  <dd class="files"> 
    112   <ul><?cs each:item = changeset.changes ?> 
    113    <li><?cs 
    114     if:item.change == 'add' ?><?cs 
    115      call:node_change(item, 'add', 'added') ?><?cs 
    116     elif:item.change == 'delete' ?><?cs 
    117      call:node_change(item, 'rem', 'deleted') ?><?cs 
    118     elif:item.change == 'copy' ?><?cs 
    119      call:node_change(item, 'cp', 'copied') ?><?cs 
    120     elif:item.change == 'move' ?><?cs 
    121      call:node_change(item, 'mv', 'moved') ?><?cs 
    122     elif:item.change == 'edit' ?><?cs 
    123      call:node_change(item, 'mod', 'modified') ?><?cs 
    124     /if ?> 
    125    </li> 
    126   <?cs /each ?></ul> 
    127  </dd> 
    128 </dl> 
    129  
    130 <div class="diff"> 
    131  <div id="legend"> 
    132   <h3>Legend:</h3> 
    133   <dl> 
    134    <dt class="unmod"></dt><dd>Unmodified</dd> 
    135    <dt class="add"></dt><dd>Added</dd> 
    136    <dt class="rem"></dt><dd>Removed</dd> 
    137    <dt class="mod"></dt><dd>Modified</dd> 
    138    <dt class="cp"></dt><dd>Copied</dd> 
    139    <dt class="mv"></dt><dd>Moved</dd> 
    140   </dl> 
    141  </div> 
    142  <ul class="entries"><?cs 
    143  each:item = changeset.changes ?><?cs 
    144   if:len(item.diff) || len(item.props) ?><li class="entry" id="file<?cs 
    145    var:name(item) ?>"><h2><a href="<?cs 
    146    var:item.browser_href.new ?>" title="Show new revision <?cs 
    147    var:item.rev.new ?> of this file in browser"><?cs 
    148    var:item.path.new ?></a></h2><?cs 
    149    if:len(item.props) ?><ul class="props"><?cs 
    150     each:prop = item.props ?><li>Property <strong><?cs 
    151      var:name(prop) ?></strong> <?cs 
    152      if:prop.old && prop.new ?>changed from <?cs 
    153      elif:!prop.old ?>set<?cs 
    154      else ?>deleted<?cs 
    155      /if ?><?cs 
    156      if:prop.old && prop.new ?><em><tt><?cs var:prop.old ?></tt></em><?cs /if ?><?cs 
    157      if:prop.new ?> to <em><tt><?cs var:prop.new ?></tt></em><?cs /if ?></li><?cs 
    158     /each ?></ul><?cs 
    159    /if ?><?cs 
    160    if:len(item.diff) ?><table class="<?cs 
    161     var:diff.style ?>" summary="Differences" cellspacing="0"><?cs 
    162     if:diff.style == 'sidebyside' ?> 
    163      <colgroup class="l"><col class="lineno" /><col class="content" /></colgroup> 
    164      <colgroup class="r"><col class="lineno" /><col class="content" /></colgroup> 
    165      <thead><tr> 
    166       <th colspan="2"><a href="<?cs 
    167        var:item.browser_href.old ?>" title="Show old rev. <?cs 
    168        var:item.rev.old ?> of <?cs var:item.path.old ?>">Revision <?cs 
    169        var:item.rev.old ?></a></th> 
    170       <th colspan="2"><a href="<?cs 
    171        var:item.browser_href.new ?>" title="Show new rev. <?cs 
    172        var:item.rev.old ?> of <?cs var:item.path.new ?>">Revision <?cs 
    173        var:item.rev.new ?></a></th> 
    174       </tr> 
    175      </thead><?cs 
    176      each:change = item.diff ?><tbody><?cs 
    177       call:diff_display(change, diff.style) ?></tbody><?cs 
    178       if:name(change) < len(item.diff) - 1 ?><tbody class="skipped"><tr> 
    179        <th>&hellip;</th><td>&nbsp;</td><th>&hellip;</th><td>&nbsp;</td> 
    180       </tr></tbody><?cs /if ?><?cs 
    181      /each ?><?cs 
    182     else ?> 
    183      <colgroup><col class="lineno" /><col class="lineno" /><col class="content" /></colgroup> 
    184      <thead><tr> 
    185       <th title="Revision <?cs var:item.rev.old ?>"><a href="<?cs 
    186        var:item.browser_href.old ?>" title="Show old version of <?cs 
    187        var:item.path.old ?>">r<?cs var:item.rev.old ?></a></th> 
    188       <th title="Revision <?cs var:item.rev.new ?>"><a href="<?cs 
    189        var:item.browser_href.new ?>" title="Show new version of <?cs 
    190        var:item.path.new ?>">r<?cs var:item.rev.new ?></a></th> 
    191       <th>&nbsp;</th></tr> 
    192      </thead><?cs 
    193      each:change = item.diff ?><?cs 
    194       call:diff_display(change, diff.style) ?><?cs 
    195       if:name(change) < len(item.diff) - 1 ?><tbody class="skipped"><tr> 
    196        <th>&hellip;</th><th>&hellip;</th><td>&nbsp;</td> 
    197       </tr></tbody><?cs /if ?><?cs 
    198      /each ?><?cs 
    199     /if ?></table><?cs 
    200    /if ?></li><?cs 
    201   /if ?><?cs 
    202  /each ?></ul> 
    203 </div> 
    204  
    205 </div> 
    206 <?cs include "footer.cs"?> 
  • templates/diff.cs

    diff -urN -x .svn trac-0.9b1/templates/diff.cs anydiff-branch/templates/diff.cs
    old new  
     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      <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> 
     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="2" 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 var:changeset.message ?></dd><?cs 
     155 /if ?> 
     156 <dt class="files"><?cs  
     157  if:len(diff.changes) > #0 ?> 
     158   Files:<?cs 
     159  else ?> 
     160   (None)<?cs 
     161  /if ?> 
     162 </dt> 
     163 <dd class="files"> 
     164  <ul><?cs each:item = diff.changes ?> 
     165   <li><?cs 
     166    if:item.change == 'add' ?><?cs 
     167     call:node_change(item, 'add', 'added') ?><?cs 
     168    elif:item.change == 'delete' ?><?cs 
     169     call:node_change(item, 'rem', 'deleted') ?><?cs 
     170    elif:item.change == 'copy' ?><?cs 
     171     call:node_change(item, 'cp', 'copied') ?><?cs 
     172    elif:item.change == 'move' ?><?cs 
     173     call:node_change(item, 'mv', 'moved') ?><?cs 
     174    elif:item.change == 'edit' ?><?cs 
     175     call:node_change(item, 'mod', 'modified') ?><?cs 
     176    /if ?> 
     177   </li> 
     178  <?cs /each ?></ul> 
     179 </dd> 
     180</dl> 
     181 
     182<div class="diff"> 
     183 <div id="legend"> 
     184  <h3>Legend:</h3> 
     185  <dl> 
     186   <dt class="unmod"></dt><dd>Unmodified</dd> 
     187   <dt class="add"></dt><dd>Added</dd> 
     188   <dt class="rem"></dt><dd>Removed</dd> 
     189   <dt class="mod"></dt><dd>Modified</dd> 
     190   <dt class="cp"></dt><dd>Copied</dd> 
     191   <dt class="mv"></dt><dd>Moved</dd> 
     192  </dl> 
     193 </div> 
     194 <ul class="entries"><?cs 
     195 each:item = diff.changes ?><?cs 
     196  if:len(item.diff) || len(item.props) ?><li class="entry" id="file<?cs 
     197   var:name(item) ?>"><h2><a href="<?cs 
     198   var:item.browser_href.new ?>" title="Show new revision <?cs 
     199   var:item.rev.new ?> of this file in browser"><?cs 
     200   var:item.path.new ?></a></h2><?cs 
     201   if:len(item.props) ?><ul class="props"><?cs 
     202    each:prop = item.props ?><li>Property <strong><?cs 
     203     var:name(prop) ?></strong> <?cs 
     204     if:prop.old && prop.new ?>changed from <?cs 
     205     elif:!prop.old ?>set<?cs 
     206     else ?>deleted<?cs 
     207     /if ?><?cs 
     208     if:prop.old && prop.new ?><em><tt><?cs var:prop.old ?></tt></em><?cs /if ?><?cs 
     209     if:prop.new ?> to <em><tt><?cs var:prop.new ?></tt></em><?cs /if ?></li><?cs 
     210    /each ?></ul><?cs 
     211   /if ?><?cs 
     212   if:len(item.diff) ?><table class="<?cs 
     213    var:diff.style ?>" summary="Differences" cellspacing="0"><?cs 
     214    if:diff.style == 'sidebyside' ?> 
     215     <colgroup class="l"><col class="lineno" /><col class="content" /></colgroup> 
     216     <colgroup class="r"><col class="lineno" /><col class="content" /></colgroup> 
     217     <thead><tr> 
     218      <th colspan="2"><a href="<?cs 
     219       var:item.browser_href.old ?>" title="Show old rev. <?cs 
     220       var:item.rev.old ?> of <?cs var:item.path.old ?>">Revision <?cs 
     221       var:item.rev.old ?></a></th> 
     222      <th colspan="2"><a href="<?cs 
     223       var:item.browser_href.new ?>" title="Show new rev. <?cs 
     224       var:item.rev.old ?> of <?cs var:item.path.new ?>">Revision <?cs 
     225       var:item.rev.new ?></a></th> 
     226      </tr> 
     227     </thead><?cs 
     228     each:change = item.diff ?><tbody><?cs 
     229      call:diff_display(change, diff.style) ?></tbody><?cs 
     230      if:name(change) < len(item.diff) - 1 ?><tbody class="skipped"><tr> 
     231       <th>&hellip;</th><td>&nbsp;</td><th>&hellip;</th><td>&nbsp;</td> 
     232      </tr></tbody><?cs /if ?><?cs 
     233     /each ?><?cs 
     234    else ?> 
     235     <colgroup><col class="lineno" /><col class="lineno" /><col class="content" /></colgroup> 
     236     <thead><tr> 
     237      <th title="Revision <?cs var:item.rev.old ?>"><a href="<?cs 
     238       var:item.browser_href.old ?>" title="Show old version of <?cs 
     239       var:item.path.old ?>">r<?cs var:item.rev.old ?></a></th> 
     240      <th title="Revision <?cs var:item.rev.new ?>"><a href="<?cs 
     241       var:item.browser_href.new ?>" title="Show new version of <?cs 
     242       var:item.path.new ?>">r<?cs var:item.rev.new ?></a></th> 
     243      <th>&nbsp;</th></tr> 
     244     </thead><?cs 
     245     each:change = item.diff ?><?cs 
     246      call:diff_display(change, diff.style) ?><?cs 
     247      if:name(change) < len(item.diff) - 1 ?><tbody class="skipped"><tr> 
     248       <th>&hellip;</th><th>&hellip;</th><td>&nbsp;</td> 
     249      </tr></tbody><?cs /if ?><?cs 
     250     /each ?><?cs 
     251    /if ?></table><?cs 
     252   /if ?></li><?cs 
     253  /if ?><?cs 
     254 /each ?></ul> 
     255</div> 
     256 
     257</div> 
     258<?cs include "footer.cs"?> 
  • templates/log.cs

    diff -urN -x .svn trac-0.9b1/templates/log.cs anydiff-branch/templates/log.cs
    old new  
    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> 
     
    115131     <td class="author"><?cs var:log.changes[item.rev].author ?></td> 
    116132     <td class="summary"><?cs var:log.changes[item.rev].message ?></td> 
    117133    </tr><?cs 
     134    set:idx = idx + 1 ?><?cs 
    118135   /each ?> 
    119136  </tbody> 
    120  </table><?cs 
     137 </table> 
     138 <div class="buttons"><input type="submit" value="View changes"  
     139      title="Diff from Old Revision to New Revision (select them above)" /> 
     140 </div> 
     141 </form><?cs 
    121142 if:len(links.prev) || len(links.next) ?><div id="paging" class="nav"><ul><?cs 
    122143  if:len(links.prev) ?><li class="first<?cs 
    123144   if:!len(links.next) ?> last<?cs /if ?>">&larr; <a href="<?cs 
  • templates/wiki.cs

    diff -urN -x .svn trac-0.9b1/templates/wiki.cs anydiff-branch/templates/wiki.cs
    old new  
    151151    var:wiki.page_name ?></a></h1> 
    152152  <?cs if:len(wiki.history) ?><form method="get" action=""> 
    153153   <input type="hidden" name="action" value="diff" /> 
     154   <div class="buttons"> 
     155    <input type="submit" value="View changes" /> 
     156   </div> 
    154157   <table id="wikihist" class="listing" summary="Change history"> 
    155158    <thead><tr> 
    156159     <th class="diff"></th> 
  • trac/__init__.py

    diff -urN -x .svn trac-0.9b1/trac/__init__.py anydiff-branch/trac/__init__.py
    <
    old new  
    1010""" 
    11