Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Checked in updated templates from live site.

git-svn-id: http://code.djangoproject.com/svn/djangoproject.com@4783 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 8107cea35daeba6e60deeff3aa71b402bb6d2502 1 parent c190f51
authored March 23, 2007

Showing 21 changed files with 1,135 additions and 6 deletions. Show diff stats Hide diff stats

  1. 2  django_website/templates/aggregator/feeditem_list.html
  2. 2  django_website/templates/base.html
  3. 7  django_website/templates/base_blogroll.html
  4. 8  django_website/templates/docs/document_detail.html
  5. 99  django_website/templates/trac_templates/about.cs
  6. 35  django_website/templates/trac_templates/admin.cs
  7. 43  django_website/templates/trac_templates/admin_akismet.cs
  8. 27  django_website/templates/trac_templates/admin_basics.cs
  9. 71  django_website/templates/trac_templates/admin_bayes.cs
  10. 87  django_website/templates/trac_templates/admin_component.cs
  11. 66  django_website/templates/trac_templates/admin_enum.cs
  12. 47  django_website/templates/trac_templates/admin_log.cs
  13. 111  django_website/templates/trac_templates/admin_milestone.cs
  14. 52  django_website/templates/trac_templates/admin_perm.cs
  15. 80  django_website/templates/trac_templates/admin_plugin.cs
  16. 76  django_website/templates/trac_templates/admin_spamconfig.cs
  17. 65  django_website/templates/trac_templates/admin_spamentry.cs
  18. 109  django_website/templates/trac_templates/admin_spammonitor.cs
  19. 87  django_website/templates/trac_templates/admin_version.cs
  20. 25  django_website/templates/trac_templates/log_changelog.cs
  21. 42  django_website/templates/trac_templates/ticket_rss.cs
2  django_website/templates/aggregator/feeditem_list.html
@@ -7,7 +7,7 @@
7 7
 {% block content %}
8 8
 
9 9
 <h1>Community</h1>
10  
-<h2 class="deck">This page, updated every 15 minutes, aggregates blog entries by people who are
  10
+<h2 class="deck">This page, updated every hour, aggregates blog entries by people who are
11 11
 writing about Django.</h2>
12 12
 
13 13
 {% for item in object_list %}
2  django_website/templates/base.html
@@ -46,7 +46,7 @@ <h1 id="logo"><a href="/"><img src="http://media.djangoproject.com/img/site/hdr_
46 46
 		</div>
47 47
 		<!-- END #content -->
48 48
 		<div id="footer">
49  
-			<p>&copy; 2005 <a href="http://www.ljworld.com/">Lawrence Journal-World</a> unless otherwise noted. Django is a registered trademark of Lawrence Journal-World.</p>
  49
+			<p>&copy; 2005-{% now "Y" %} <a href="http://www.ljworld.com/">Lawrence Journal-World</a> unless otherwise noted. Django is a registered trademark of Lawrence Journal-World.</p>
50 50
 		</div>
51 51
 	</div>
52 52
 	<!-- END #container -->
7  django_website/templates/base_blogroll.html
... ...
@@ -0,0 +1,7 @@
  1
+{% extends "base_2col" %}
  2
+
  3
+{% block sectionid %}blogroll{% endblock %}
  4
+
  5
+{% block title %}Blogroll{% endblock %}
  6
+
  7
+{% block billboard %}<h2>Blogroll</h2>{% endblock %}
8  django_website/templates/docs/document_detail.html
@@ -21,11 +21,11 @@ <h2 id="comments">Comments</h2>
21 21
 <h2>Post a comment</h2>
22 22
 
23 23
 <p class="small quiet"><strong>Note:</strong> Please only use the comments for
24  
-questions/critcisms/suggestions on the docs; if you experience errors please <a
25  
-href="http://code.djangoproject.com/simpleticket">file a ticket</a>, ask in the IRC
26  
-channel, or post to the <a href="http://groups-beta.google.com/group/django-users">
  24
+questions/criticisms/suggestions on the docs. This is <strong>not</strong> the place
  25
+to ask technical support questions. For tech support, ask in the IRC
  26
+channel or post to the <a href="http://groups-beta.google.com/group/django-users">
27 27
 django-users list</a>. Comments will be periodically reviewed, integrated into
28  
-the documentation proper, and removed.</p>
  28
+the documentation proper and removed.</p>
29 29
 
30 30
 {% free_comment_form for docs.document object.id %}
31 31
 </div>
99  django_website/templates/trac_templates/about.cs
... ...
@@ -0,0 +1,99 @@
  1
+<?cs include "header.cs"?>
  2
+<div id="ctxtnav" class="nav">
  3
+ <h2>About Navigation</h2>
  4
+ <ul>
  5
+  <li class="first<?cs if:!about.config_href ?> last<?cs /if ?>"><a href="<?cs
  6
+    var:trac.href.about ?>">Overview</a></li><?cs
  7
+  if:about.config_href ?>
  8
+   <li><a href="<?cs var:about.config_href ?>">Configuration</a></li><?cs
  9
+  /if ?><?cs
  10
+  if:about.plugins_href ?>
  11
+   <li class="last"><a href="<?cs var:about.plugins_href ?>">Plugins</a></li><?cs
  12
+  /if ?>
  13
+ </ul>
  14
+</div>
  15
+<div id="content" class="about<?cs if:about.page ?>_<?cs var:about.page ?><?cs /if ?>">
  16
+
  17
+ <?cs if:about.page == "config"?>
  18
+  <h1>Configuration</h1>
  19
+  <table><thead><tr><th class="section">Section</th>
  20
+   <th class="name">Name</th><th class="value">Value</th></tr></thead><?cs
  21
+  each:section = about.config ?><?cs
  22
+   if:len(section.options) ?>
  23
+    <tr><th class="section" rowspan="<?cs var:len(section.options) ?>"><?cs var:section.name ?></th><?cs
  24
+    each:option = section.options ?><?cs if:name(option) != 0 ?><tr><?cs /if ?>
  25
+     <td class="name"><?cs var:option.name ?></td>
  26
+     <td class="<?cs var:option.valueclass ?>"><?cs var:option.value ?></td>
  27
+    </tr><?cs
  28
+    /each ?><?cs
  29
+   /if ?><?cs
  30
+  /each ?></table>
  31
+  <div id="help">
  32
+   See <a href="<?cs var:trac.href.wiki ?>/TracIni">TracIni</a> for information about
  33
+   the configuration.
  34
+  </div>
  35
+
  36
+ <?cs elif:about.page == "plugins" ?>
  37
+  <h1>Plugins</h1>
  38
+  <dl id="plugins"><?cs
  39
+   each:plugin = about.plugins ?>
  40
+    <h2 id="<?cs var:plugin.module ?>.<?cs var:plugin.name ?>"><?cs var:plugin.name ?></h2>
  41
+    <table>
  42
+     <tr>
  43
+      <th class="module" scope="row">Module</th>
  44
+      <td class="module"><?cs var:plugin.module ?><br />
  45
+      <span class="path"><?cs var:plugin.path ?></span></td>
  46
+     </tr><?cs
  47
+     if:plugin.description ?><tr>
  48
+      <th class="description" scope="row">Description</th>
  49
+      <td class="description"><?cs var:plugin.description ?></td>
  50
+     </tr><?cs /if ?><?cs
  51
+     if:len(plugin.extension_points) ?><tr>
  52
+      <th class="xtnpts" rowspan="<?cs var:len(plugin.extension_points) ?>">
  53
+       Extension points:</th><?cs
  54
+       each:extension_point = plugin.extension_points ?><?cs
  55
+        if:name(extension_point) != 0 ?><tr><?cs /if ?>
  56
+        <td class="xtnpts">        
  57
+         <code><?cs var:extension_point.module ?>.<?cs var:extension_point.interface ?></code><?cs
  58
+          if:len(extension_point.extensions) ?> (<?cs
  59
+           var:len(extension_point.extensions) ?> extensions)<ul><?cs
  60
+           each:extension = extension_point.extensions ?>
  61
+            <li><a href="#<?cs var:extension.module ?>.<?cs
  62
+              var:extension.name ?>"><?cs var:extension.name ?></a></li><?cs
  63
+           /each ?></ul><?cs
  64
+          /if ?>
  65
+          <div class="description"><?cs var:extension_point.description ?></div>
  66
+        </td></tr><?cs
  67
+       /each ?><?cs
  68
+     /if ?>
  69
+    </table><?cs
  70
+   /each ?>
  71
+  </dl>
  72
+
  73
+ <?cs else ?>
  74
+  <a href="http://trac.edgewall.com" style="border: none; float: right; margin-left: 2em">
  75
+   <img style="display: block" src="<?cs var:chrome.href ?>/common/trac_banner.png"
  76
+     alt="Trac: Integrated SCM &amp; Project Management"/>
  77
+  </a>
  78
+<h1>About Trac <?cs var:trac.version ?></h1>
  79
+<p>
  80
+Trac is a web-based software project management and bug/issue
  81
+tracking system emphasizing ease of use and low ceremony. 
  82
+It provides an interface to the Subversion revision control systems, integrated Wiki and convenient report facilities. 
  83
+</p>
  84
+  <p>Trac is distributed under the modified BSD License.<br />
  85
+  The complete text of the license can be found in the COPYING file
  86
+  included in the distribution.</p>
  87
+  <p>Please visit the Trac open source project: 
  88
+  <a href="http://projects.edgewall.com/trac/">http://projects.edgewall.com/trac/</a></p>
  89
+  <p>Trac is a product of <a href="http://www.edgewall.com/">Edgewall
  90
+  Software</a>, provider of professional Linux and software development
  91
+  services.</p>
  92
+  <p>Copyright &copy; 2003-2006 <a href="http://www.edgewall.com/">Edgewall
  93
+  Software</a></p>
  94
+  <a href="http://www.edgewall.com/">
  95
+   <img style="display: block; margin: 30px" src="<?cs var:chrome.href ?>/common/edgewall.png"
  96
+     alt="Edgewall Software"/></a>
  97
+ <?cs /if ?>
  98
+</div>
  99
+<?cs include "footer.cs"?>
35  django_website/templates/trac_templates/admin.cs
... ...
@@ -0,0 +1,35 @@
  1
+<?cs include "header.cs"?>
  2
+<?cs include "macros.cs"?>
  3
+
  4
+<div id="ctxtnav"></div>
  5
+
  6
+<div id="content" class="admin">
  7
+
  8
+ <h1>Administration</h1>
  9
+
  10
+ <div class="tabs"><?cs set:cur_cat_id = '' ?><ul><?cs
  11
+  each:page = admin.pages ?><?cs
  12
+   if:page.cat_id != cur_cat_id ?><?cs
  13
+    if:name(page) != 0 ?></ul></li><?cs /if ?><li<?cs
  14
+     if:page.cat_id == admin.active_cat ?> class="active"<?cs
  15
+     /if ?>><?cs var:page.cat_label ?><ul><?cs
  16
+   /if ?><?cs
  17
+   if:page.page_id == admin.active_page ?><li class="active"><?cs
  18
+    var:page.page_label ?></li><?cs
  19
+   else ?><li><a href="<?cs var:page.href ?>"><?cs
  20
+    var:page.page_label ?></a></li><?cs
  21
+   /if ?><?cs
  22
+   set:cur_cat_id = page.cat_id ?><?cs
  23
+  /each ?></ul><li/></ul></div>
  24
+
  25
+ <div class="tabcontents">
  26
+  <?cs if:admin.page_template ?><?cs
  27
+   include admin.page_template ?><?cs
  28
+  else ?><?cs
  29
+   var:admin.page_content ?><?cs
  30
+  /if ?>
  31
+  <br style="clear: right"/>
  32
+ </div>
  33
+</div>
  34
+
  35
+<?cs include "footer.cs"?>
43  django_website/templates/trac_templates/admin_akismet.cs
... ...
@@ -0,0 +1,43 @@
  1
+<h2>Spam Filtering: Akismet</h2>
  2
+
  3
+<form class="mod" id="spamconfig" method="post">
  4
+
  5
+  <fieldset>
  6
+    <legend>Akismet</legend>
  7
+    <p class="hint">
  8
+      The Akismet filter uses the free
  9
+      <a class="ext-link" href="http://akismet.com/">Akismet</a>
  10
+      service to content submissions are potential spam. You need to obtain an
  11
+      API key to use the service, which is freely available for personal use.
  12
+      You can enable or disable this filter from the &ldquo;<em>General &rarr;
  13
+      Plugins</em>&rdquo; panel of the web administration interface.
  14
+    </p>
  15
+    <div class="field">
  16
+      <label>API key:<br />
  17
+        <input type="text" id="api_key" name="api_key" size="24"
  18
+               value="<?cs var:admin.akismet.api_key ?>" />
  19
+      </label>
  20
+    </div>
  21
+    <div class="field">
  22
+      <label>URL:<br />
  23
+        <code>http://</code>
  24
+        <input type="text" id="api_url" name="api_url" size="40"
  25
+               value="<?cs var:admin.akismet.api_url ?>" />
  26
+      </label>
  27
+    </div>
  28
+
  29
+    <?cs if:admin.akismet.error ?>
  30
+    <div class="system-message">
  31
+      <strong>Key validation failed:</strong> <?cs var:admin.akismet.error ?>
  32
+    </div>
  33
+    <?cs /if ?>
  34
+
  35
+  </fieldset>
  36
+
  37
+  <div class="buttons">
  38
+    <input type="submit" value="Apply changes" />
  39
+    <?cs if:admin.akismet.error ?>
  40
+      <input type="submit" name="Cancel" value="Revert changes" />
  41
+    <?cs /if ?>
  42
+  </div>
  43
+</form>
27  django_website/templates/trac_templates/admin_basics.cs
... ...
@@ -0,0 +1,27 @@
  1
+<h2>Basic Settings</h2>
  2
+
  3
+<form class="mod" id="modbasic" method="post">
  4
+ <fieldset>
  5
+  <legend>Project</legend>
  6
+  <div class="field">
  7
+   <label>Name:<br />
  8
+    <input type="text" name="name" value="<?cs var:admin.project.name ?>" />
  9
+   </label>
  10
+  </div>
  11
+  <div class="field">
  12
+   <label>URL:<br />
  13
+    <input type="text" name="url" size="48 "value="<?cs
  14
+      var:admin.project.url ?>" />
  15
+   </label>
  16
+  </div>
  17
+  <div class="field">
  18
+   <label>Description:<br />
  19
+    <textarea name="description" rows="3" cols="80"><?cs
  20
+      var:admin.project.description ?></textarea>
  21
+   </label>
  22
+  </div>
  23
+ </fieldset>
  24
+ <div class="buttons">
  25
+  <input type="submit" value="Apply changes">
  26
+ </div>
  27
+</form>
71  django_website/templates/trac_templates/admin_bayes.cs
... ...
@@ -0,0 +1,71 @@
  1
+<h2>Spam Filtering: Bayes</h2>
  2
+
  3
+<form class="mod" id="spamconfig" method="post">
  4
+
  5
+  <fieldset>
  6
+    <legend>Configuration</legend>
  7
+    <p>The bayesian filter requires training before it can effectively
  8
+    differentiate between spam and ham. The training database currently
  9
+    contains <strong><?cs var:admin.bayes.nspam ?> spam</strong> and
  10
+    <strong><?cs var:admin.bayes.nham ?> ham</strong> submissions.</p>
  11
+    <div class="field">
  12
+      <label><input type="checkbox" id="reset" name="reset" <?cs
  13
+          if:!admin.bayes.nham && !admin.bayes.nspam ?> disabled="disabled"<?cs /if ?> />
  14
+        Clear training database
  15
+      </label>
  16
+      <p class="hint">
  17
+        Resetting the training database can help when training was incorrect
  18
+        and is producing bad results.
  19
+      </p>
  20
+    </div>
  21
+    <div class="field">
  22
+      <label>Minimum training required:
  23
+        <input type="text" id="min_training" name="min_training" size="3"
  24
+               value="<?cs var:admin.bayes.min_training ?>" />
  25
+      </label>
  26
+      <p class="hint">
  27
+        The minimum number of spam and ham in the training database before
  28
+        the filter starts affecting the karma of submissions.
  29
+      </p>
  30
+    </div>
  31
+    <div class="buttons">
  32
+      <input type="submit" value="Apply changes" />
  33
+    </div>
  34
+  </fieldset>
  35
+
  36
+  <fieldset>
  37
+    <legend>Training</legend>
  38
+    <p class="hint">
  39
+      While you can train the spam filter from the &ldquo;<em>Spam
  40
+      Filtering &rarr; Monitoring</em>&rdquo; panel in the web
  41
+      administration interface, you can also manually train the filter by
  42
+      entering samples here, or check what kind of spam probabilty
  43
+      currently gets assigned to the content.
  44
+    </p>
  45
+    <div class="field">
  46
+      <label for="content">Content:</label><br />
  47
+      <textarea id="content" name="content" rows="10" cols="60">
  48
+<?cs var:admin.bayes.content ?></textarea>
  49
+    </div>
  50
+    <?cs if:admin.bayes.content ?>
  51
+      <div class="field">
  52
+        <?cs if:admin.bayes.error ?>
  53
+          <strong>Error: <?cs var:admin.bayes.error ?></strong>
  54
+        <?cs else ?>
  55
+          <strong>Score: <?cs var:admin.bayes.score ?>%</strong>
  56
+        <?cs /if ?>
  57
+      </div>
  58
+    <?cs /if ?>
  59
+    <div class="buttons">
  60
+      <input type="submit" name="test" value="Test" <?cs
  61
+         if:!admin.bayes.nham || !admin.bayes.nspam ?> disabled="disabled"<?cs /if ?> />
  62
+      <input type="submit" name="train" value="Train as Spam" />
  63
+      <input type="submit" name="train" value="Train as Ham" />
  64
+    </div>
  65
+  </fieldset>
  66
+
  67
+  <script type="text/javascript">
  68
+    enableControl("reset", <?cs if:admin.bayes.nspam || admin.bayes.nham ?>true<?cs else ?>false<?cs /if ?>);
  69
+  </script>
  70
+
  71
+</form>
87  django_website/templates/trac_templates/admin_component.cs
... ...
@@ -0,0 +1,87 @@
  1
+<h2>Manage Components</h2><?cs
  2
+
  3
+if admin.component.name ?>
  4
+ <form class="mod" id="modcomp" method="post">
  5
+  <fieldset>
  6
+   <legend>Modify Component:</legend>
  7
+   <div class="field">
  8
+    <label>Name:<br /><input type="text" name="name" value="<?cs
  9
+      var:admin.component.name ?>"></label>
  10
+   </div>
  11
+   <div class="field">
  12
+    <label>Owner:<br /><?cs
  13
+     if:len(admin.owners) ?><?cs
  14
+      call:hdf_select(admin.owners, "owner", admin.component.owner, 0) ?><?cs
  15
+     else ?><input type="text" name="owner" value="<?cs
  16
+      var:admin.component.owner ?>" /><?cs
  17
+     /if ?></label>
  18
+   </div>
  19
+   <div class="field">
  20
+    <fieldset class="iefix">
  21
+     <label for="description">Description (you may use <a tabindex="42" href="<?cs
  22
+       var:trac.href.wiki ?>/WikiFormatting">WikiFormatting</a> here):</label>
  23
+     <p><textarea id="description" name="description" class="wikitext" rows="6" cols="60"><?cs
  24
+       var:admin.component.description ?></textarea></p>
  25
+    </fieldset>
  26
+   </div>
  27
+   <script type="text/javascript" src="<?cs
  28
+     var:chrome.href ?>/common/js/wikitoolbar.js"></script>
  29
+   <div class="buttons">
  30
+    <input type="submit" name="cancel" value="Cancel" />
  31
+    <input type="submit" name="save" value="Save" />
  32
+   </div>
  33
+  </fieldset>
  34
+ </form><?cs
  35
+
  36
+else ?>
  37
+ <form class="addnew" id="addcomp" method="post">
  38
+  <fieldset>
  39
+   <legend>Add Component:</legend>
  40
+   <div class="field">
  41
+    <label>Name:<br /><input type="text" name="name" /></label>
  42
+   </div>
  43
+   <div class="field">
  44
+    <label>Owner:<br /><?cs
  45
+     if:len(admin.owners) ?><?cs
  46
+      call:hdf_select(admin.owners, "owner", "", 0) ?><?cs
  47
+     else ?><input type="text" name="owner" /><?cs
  48
+     /if ?></label>
  49
+   </div>
  50
+   <div class="buttons">
  51
+    <input type="submit" name="add" value="Add">
  52
+   </div>
  53
+  </fieldset>
  54
+ </form><?cs
  55
+
  56
+ if:len(admin.components) ?><form method="POST">
  57
+  <table class="listing" id="complist">
  58
+   <thead>
  59
+    <tr><th class="sel">&nbsp;</th><th>Name</th>
  60
+    <th>Owner</th><th>Default</th></tr>
  61
+   </thead><?cs
  62
+   each:comp = admin.components ?>
  63
+    <tr>
  64
+     <td class="sel"><input type="checkbox" name="sel" value="<?cs
  65
+       var:comp.name ?>" /></td>
  66
+     <td class="name"><a href="<?cs var:comp.href?>"><?cs
  67
+       var:comp.name ?></a></td>
  68
+     <td class="owner"><?cs var:comp.owner ?></td>
  69
+     <td class="default"><input type="radio" name="default" value="<?cs
  70
+       var:comp.name ?>"<?cs
  71
+       if:comp.is_default ?> checked="checked" <?cs /if ?>></td>
  72
+    </tr><?cs
  73
+   /each ?>
  74
+  </table>
  75
+  <div class="buttons">
  76
+   <input type="submit" name="remove" value="Remove selected items" />
  77
+   <input type="submit" name="apply" value="Apply changes" />
  78
+  </div>
  79
+  <p class="help">You can remove all items from this list to completely hide
  80
+  this field from the user interface.</p>
  81
+ </form><?cs
  82
+ else ?>
  83
+  <p class="help">As long as you don't add any items to the list, this field
  84
+  will remain completely hidden from the user interface.</p><?cs
  85
+ /if ?><?cs
  86
+
  87
+/if ?>
66  django_website/templates/trac_templates/admin_enum.cs
... ...
@@ -0,0 +1,66 @@
  1
+<h2>Manage <?cs var:admin.enum.label_plural ?></h2><?cs
  2
+
  3
+if:admin.enum.name ?>
  4
+ <form class="mod" id="modenum" method="post">
  5
+  <fieldset>
  6
+   <legend>Modify <?cs var:admin.enum.label_singular ?></legend>
  7
+   <div class="field">
  8
+    <label>Name: <input type="text" name="name"value="<?cs
  9
+      var:admin.enum.name ?>" /></label>
  10
+   </div>
  11
+   <div class="buttons">
  12
+    <input type="submit" name="cancel" value="Cancel">
  13
+    <input type="submit" name="save" value="Save">
  14
+   </div>
  15
+  </fieldset>
  16
+ </form><?cs
  17
+
  18
+else ?>
  19
+
  20
+ <form class="addnew" id="addenum" method="post">
  21
+  <fieldset>
  22
+   <legend>Add <?cs var:admin.enum.label_singular ?></legend>
  23
+   <div class="field">
  24
+    <label>Name:<input type="text" name="name" id="name"></label>
  25
+   </div>
  26
+   <div class="buttons">
  27
+    <input type="submit" name="add" value="Add">
  28
+   </div>
  29
+  </fieldset>
  30
+ </form><?cs
  31
+ 
  32
+ if:len(admin.enums) ?><form method="POST">
  33
+  <table class="listing" id="enumlist">
  34
+   <thead>
  35
+    <tr><th class="sel">&nbsp;</th><th>Name</th>
  36
+    <th>Default</th><th>Order</th></tr>
  37
+   </thead><tbody><?cs
  38
+   each:enum = admin.enums ?>
  39
+    <tr>
  40
+     <td><input type="checkbox" name="sel" value="<?cs var:enum.name ?>" /></td>
  41
+     <td><a href="<?cs var:enum.href ?>"><?cs var:enum.name ?></a></td>
  42
+     <td class="default"><input type="radio" name="default" value="<?cs
  43
+       var:enum.name ?>"<?cs
  44
+       if:enum.is_default ?> checked="checked" <?cs /if ?> /></td>
  45
+     <td class="default"><select name="value_<?cs var:enum.value ?>"><?cs
  46
+      each:other = admin.enums ?><option<?cs
  47
+       if:other.value == enum.value ?> selected="selected"<?cs
  48
+       /if ?>><?cs var:other.value ?></option><?cs
  49
+      /each ?>
  50
+     </select></td>
  51
+    </tr><?cs
  52
+   /each ?></tbody>
  53
+  </table>
  54
+  <div class="buttons">
  55
+   <input type="submit" name="remove" value="Remove selected items" />
  56
+   <input type="submit" name="apply" value="Apply changes" />
  57
+  </div>
  58
+  <p class="help">You can remove all items from this list to completely hide
  59
+  this field from the user interface.</p>
  60
+ </form><?cs
  61
+ else ?>
  62
+  <p class="help">As long as you don't add any items to the list, this field
  63
+  will remain completely hidden from the user interface.</p><?cs
  64
+ /if ?><?cs
  65
+
  66
+/if ?>
47  django_website/templates/trac_templates/admin_log.cs
... ...
@@ -0,0 +1,47 @@
  1
+<h2>Logging Configuration</h2>
  2
+
  3
+<form class="mod" id="modlog" method="post">
  4
+ <div class="field">
  5
+  <label>Type:<br />
  6
+   <select id="log_type" name="log_type"><?cs
  7
+    each:type = admin.log.types ?><option value="<?cs var:type.name ?>"<?cs
  8
+     if:type.selected ?> selected="selected"<?cs /if ?><?cs
  9
+     if:type.disabled ?> disabled="disabled"<?cs /if ?>><?cs
  10
+     var:type.label ?></option><?cs
  11
+    /each ?></select>
  12
+  </label>
  13
+ </div>
  14
+ <div class="field">
  15
+  <label>Log level:<br />
  16
+   <select id="log_level" name="log_level"><?cs
  17
+    each:level = admin.log.levels ?><option<?cs
  18
+     if:level == admin.log.level ?> selected="selected"<?cs /if?>><?cs
  19
+     var:level ?></option><?cs
  20
+    /each ?></select>
  21
+  </label>
  22
+ </div>
  23
+ <div class="field">
  24
+  <label>Log file:<br />
  25
+   <input type="text" id="log_file" name="log_file" size="48" value="<?cs
  26
+     var:admin.log.file ?>"/>
  27
+  </label>
  28
+  <p class="help">If you specify a relative path, the log file will be stored
  29
+  inside the <code>log</code> directory of the project environment (<code><?cs
  30
+  var:admin.log.dir ?></code>).</p>
  31
+ </div>
  32
+ <script type="text/javascript">
  33
+   var logType = document.getElementById("log_type");
  34
+   var enableLevelAndFile = function() {
  35
+     enableControl("log_level", log_type.selectedIndex > 0);
  36
+     enableControl("log_file",
  37
+       log_type.options[log_type.selectedIndex].value == "file");
  38
+   };
  39
+   addEvent(window, "load", enableLevelAndFile);
  40
+   addEvent(log_type, "change", enableLevelAndFile);
  41
+ </script>
  42
+ <div class="buttons">
  43
+  <input type="submit" value="Apply changes">
  44
+ </div>
  45
+ <p class="help">You may need to restart the server for these changes to take
  46
+ effect.</p>
  47
+</form>
111  django_website/templates/trac_templates/admin_milestone.cs
... ...
@@ -0,0 +1,111 @@
  1
+<h2>Manage Milestones</h2><?cs
  2
+
  3
+if:admin.milestone.name ?>
  4
+ <form class="mod" id="modmil" method="post">
  5
+  <fieldset>
  6
+   <legend>Modify Milestone:</legend>
  7
+   <div class="field">
  8
+    <label>Name:<br /> <input type="text" name="name"value="<?cs
  9
+      var:admin.milestone.name ?>" /></label>
  10
+   </div>
  11
+   <div class="field">
  12
+    <label>Due:<br />
  13
+     <input type="text" id="duedate" name="duedate" size="<?cs
  14
+       var:len(admin.date_hint) ?>" value="<?cs
  15
+       var:admin.milestone.duedate ?>" title="Format: <?cs var:admin.date_hint ?>" />
  16
+     <em>Format: <?cs var:admin.date_hint ?></em>
  17
+    </label>
  18
+   </div>
  19
+   <div class="field">
  20
+    <label>
  21
+     <input type="checkbox" id="completed" name="completed"<?cs
  22
+       if:admin.milestone.completed ?> checked="checked"<?cs /if ?> />
  23
+     Completed:<br />
  24
+    </label>
  25
+    <label>
  26
+     <input type="text" id="completeddate" name="completeddate" size="<?cs
  27
+       var:len(admin.date_hint) ?>" value="<?cs
  28
+       alt:admin.milestone.completed_date ?><?cs
  29
+        var:admin.datetime_now ?><?cs
  30
+       /alt ?>" title="Format: <?cs
  31
+       var:admin.datetime_hint ?>" />
  32
+     <em>Format: <?cs var:admin.datetime_hint ?></em>
  33
+    </label>
  34
+    <script type="text/javascript">
  35
+      var completed = document.getElementById("completed");
  36
+      var enableCompletedDate = function() {
  37
+        enableControl("completeddate", completed.checked);
  38
+      };
  39
+      addEvent(window, "load", enableCompletedDate);
  40
+      addEvent(completed, "click", enableCompletedDate);
  41
+    </script>
  42
+   </div>
  43
+   <div class="field">
  44
+    <fieldset class="iefix">
  45
+     <label for="description">Description (you may use <a tabindex="42" href="<?cs
  46
+       var:trac.href.wiki ?>/WikiFormatting">WikiFormatting</a> here):</label>
  47
+     <p><textarea id="description" name="description" class="wikitext" rows="6" cols="60"><?cs
  48
+       var:admin.milestone.description ?></textarea></p>
  49
+    </fieldset>
  50
+   </div>
  51
+   <script type="text/javascript" src="<?cs
  52
+     var:chrome.href ?>/common/js/wikitoolbar.js"></script>
  53
+   <div class="buttons">
  54
+    <input type="submit" name="cancel" value="Cancel">
  55
+    <input type="submit" name="save" value="Save">
  56
+   </div>
  57
+  </fieldset>
  58
+ </form><?cs
  59
+
  60
+else ?>
  61
+
  62
+ <form class="addnew" id="addmil" method="post">
  63
+  <fieldset>
  64
+   <legend>Add Milestone:</legend>
  65
+   <div class="field">
  66
+    <label>Name:<br /><input type="text" name="name" id="name" /></label>
  67
+   </div>
  68
+   <div class="field">
  69
+    <label>
  70
+     Due:<br />
  71
+     <input type="text" name="duedate"
  72
+       title="Format: <?cs var:admin.date_hint ?>" /><br />
  73
+     <em>Format: <?cs var:admin.date_hint ?></em>
  74
+    </label>
  75
+   </div>
  76
+   <div class="buttons">
  77
+    <input type="submit" name="add" value="Add" />
  78
+   </div>
  79
+  </fieldset>
  80
+ </form><?cs
  81
+
  82
+ if:len(admin.milestones) ?><form method="POST">
  83
+  <table class="listing" id="millist">
  84
+   <thead>
  85
+    <tr><th class="sel">&nbsp;</th><th>Name</th>
  86
+    <th>Time</th><th>Default</th></tr>
  87
+   </thead><tbody><?cs
  88
+   each:milestone = admin.milestones ?>
  89
+   <tr>
  90
+    <td><input type="checkbox" name="sel" value="<?cs var:milestone.name ?>" /></td>
  91
+    <td><a href="<?cs var:milestone.href ?>"><?cs var:milestone.name ?></a></td>
  92
+    <td><?cs var:milestone.duedate ?></td>
  93
+     <td class="default"><input type="radio" name="default" value="<?cs
  94
+       var:milestone.name ?>"<?cs
  95
+       if:milestone.is_default ?> checked="checked" <?cs /if ?>></td>
  96
+   </tr><?cs
  97
+   /each ?></tbody>
  98
+  </table>
  99
+  <div class="buttons">
  100
+   <input type="submit" name="remove" value="Remove selected items" />
  101
+   <input type="submit" name="apply" value="Apply changes" />
  102
+  </div>
  103
+  <p class="help">You can remove all items from this list to completely hide
  104
+  this field from the user interface.</p>
  105
+ </form><?cs
  106
+ else ?>
  107
+  <p class="help">As long as you don't add any items to the list, this field
  108
+  will remain completely hidden from the user interface.</p><?cs
  109
+ /if ?><?cs
  110
+
  111
+/if ?>
52  django_website/templates/trac_templates/admin_perm.cs
... ...
@@ -0,0 +1,52 @@
  1
+<h2>Manage Permissions</h2>
  2
+
  3
+<form id="addperm" class="addnew" method="post">
  4
+ <fieldset>
  5
+  <legend>Grant Permission:</legend>
  6
+  <div class="field">
  7
+   <label>Subject: <input type="text" name="subject" /></label>
  8
+  </div>
  9
+  <div class="field">
  10
+   <label>Action: <?cs call:hdf_select(admin.actions, "action", "", 0) ?></label>
  11
+  </div>
  12
+  <p class="help">Grant permission for an action to a subject, which can be
  13
+  either a user or a group.</p>
  14
+  <div class="buttons">
  15
+   <input type="submit" name="add" value=" Add ">
  16
+  </div>
  17
+ </fieldset>
  18
+</form>
  19
+
  20
+<form id="addsubj" class="addnew" method="post">
  21
+ <fieldset>
  22
+  <legend>Add Subject to Group:</legend>
  23
+  <div class="field">
  24
+   <label>Subject: <input type="text" name="subject" /></label>
  25
+  </div>
  26
+  <div class="field">
  27
+   <label>Group: <input type="text" name="group" /></label>
  28
+  </div>
  29
+  <p class="help">Add a user or group to an existing permission group.</p>
  30
+  <div class="buttons">
  31
+   <input type="submit" name="add" value=" Add ">
  32
+  </div>
  33
+ </fieldset>
  34
+</form>
  35
+
  36
+<form method="post">
  37
+ <table class="listing" id="permlist">
  38
+  <thead>
  39
+   <tr><th class="sel">&nbsp;</th><th>Subject</th><th>Action</th></tr>
  40
+  </thead><tbody><?cs
  41
+  each:perm = admin.perms ?>
  42
+   <tr>
  43
+    <td><input type="checkbox" name="sel" value="<?cs var:perm.key ?>" /></td>
  44
+    <td><?cs var:perm.subject ?></td>
  45
+    <td><?cs var:perm.action ?></td>
  46
+   </tr><?cs
  47
+  /each ?></tbody>
  48
+ </table>
  49
+ <div class="buttons">
  50
+  <input type="submit" name="remove" value="Remove selected items" />
  51
+ </div>
  52
+</form>
80  django_website/templates/trac_templates/admin_plugin.cs
... ...
@@ -0,0 +1,80 @@
  1
+<h2>Manage Plugins</h2>
  2
+
  3
+<form id="addplug" class="addnew" method="post" enctype="multipart/form-data">
  4
+ <fieldset>
  5
+  <legend>Install Plugin:</legend>
  6
+  <div class="field">
  7
+   <label>File: <input type="file" name="egg_file"<?cs
  8
+     if:admin.readonly ?> disabled="disabled"<?cs /if ?> /></label>
  9
+  </div>
  10
+  <p class="help"><?cs
  11
+   if:admin.readonly ?>The web server does not have sufficient permissions to
  12
+    store files in the environment plugins directory.<?cs
  13
+   else ?>
  14
+    Upload a plugin packaged as Python egg.<?cs
  15
+   /if ?></p>
  16
+  <div class="buttons">
  17
+   <input type="submit" name="install" value="Install"<?cs
  18
+     if:admin.readonly ?> disabled="disabled"<?cs /if ?> />
  19
+  </div>
  20
+ </fieldset>
  21
+</form>
  22
+
  23
+<script type="text/javascript" src="<?cs
  24
+  var:chrome.href ?>/admin/js/admin.js"></script><?cs
  25
+ each:plugin = admin.plugins ?><form method="post"><div class="plugin">
  26
+ <h3 id="no<?cs var:name(plugin) ?>"><?cs
  27
+   var:plugin.name ?> <?cs var:plugin.version ?></h3>
  28
+ <div class="uninstall buttons">
  29
+  <input type="hidden" name="plugin_filename" value="<?cs
  30
+    var:plugin.plugin_filename ?>" />
  31
+  <input type="submit" name="uninstall" value="Uninstall"<?cs
  32
+   if:plugin.readonly ?> disabled="disabled"<?cs /if ?> />
  33
+ </div>
  34
+ <p class="summary"><?cs var:plugin.info.summary ?></p><?cs
  35
+ if:plugin.info.home_page || plugin.info.author || plugin.info.author_email ?>
  36
+  <dl class="info"><?cs
  37
+   if:plugin.info.author || plugin.info.author_email ?>
  38
+    <dt>Author:</dt>
  39
+    <dd><?cs
  40
+    if:plugin.info.author_email ?><a href="mailto:<?cs
  41
+     var:plugin.info.author_email ?>"><?cs alt:plugin.info.author ?><?cs
  42
+      var:plugin.info.author_email ?><?cs /alt ?></a><?cs
  43
+    else ?><?cs var:plugin.info.author ?><?cs
  44
+    /if ?></dd><?cs
  45
+   /if ?><?cs
  46
+   if:plugin.info.home_page ?>
  47
+    <dt>Home page:</dt>
  48
+    <dd><a onclick="window.open(this.href); return false" href="<?cs
  49
+      var:plugin.info.home_page ?>"><?cs var:plugin.info.home_page ?></a></dt><?cs
  50
+   /if ?><?cs
  51
+   if:plugin.info.license ?>
  52
+    <dt>License:</dt>
  53
+    <dd><?cs var:plugin.info.license ?></dd><?cs
  54
+   /if ?>
  55
+  </dl><?cs
  56
+ /if ?><table class="listing"><thead>
  57
+   <tr><th>Component</th><th class="sel">Enabled</th></tr>
  58
+  </thead><tbody><?cs
  59
+  each:component = plugin.components ?><tr>
  60
+   <td class="name" title="<?cs var:component.description ?>"><?cs
  61
+    var:component.name ?><p class="module"><?cs var:component.module ?></p></td>
  62
+   <td class="sel"><?cs
  63
+    if:!component.required ?><input type="hidden" name="component" value="<?cs
  64
+     var:component.module ?>.<?cs var:component.name ?>" /><?cs
  65
+    /if ?><input type="checkbox" name="enable" value="<?cs
  66
+     var:component.module ?>.<?cs var:component.name ?>"<?cs 
  67
+     if:component.enabled ?> checked="checked"<?cs
  68
+     /if ?><?cs
  69
+     if:component.required ?> disabled="disabled"<?cs
  70
+     /if ?> /></td>
  71
+  </tr><?cs
  72
+  /each ?></tbody>
  73
+ </table>
  74
+ <div class="update buttons">
  75
+  <input type="hidden" name="plugin" value="<?cs var:name(plugin) ?>" />
  76
+  <input type="submit" name="update" value="Apply changes" />
  77
+ </div></div><script type="text/javascript">
  78
+   enableFolding("no<?cs var:name(plugin) ?>");
  79
+ </script></form><?cs
  80
+ /each ?>
76  django_website/templates/trac_templates/admin_spamconfig.cs
... ...
@@ -0,0 +1,76 @@
  1
+<h2>Spam Filtering: Configuration</h2>
  2
+
  3
+<form class="mod" id="spamconfig" method="post">
  4
+
  5
+  <fieldset id="karmatuning">
  6
+    <legend>Karma Tuning</legend>
  7
+    <div class="field">
  8
+      <label>
  9
+        Minimum karma required for a successful submission:
  10
+        <input type="text" id="min_karma" name="min_karma" size="3"
  11
+               value="<?cs var:admin.spamfilter.min_karma ?>" />
  12
+      </label>
  13
+    </div>
  14
+    <p class="hint">
  15
+      Content submissions are passed through a set of registered and enabled
  16
+      <em>filter strategies</em>, each of which check the submitted content
  17
+      and may assign <em>karma points</em> to it. The sum of these karma
  18
+      points needs to be greater than or equal to the minimum karma
  19
+      configured here for the submission to be accepted.
  20
+    </p>
  21
+    <table class="listing" id="karmapoints">
  22
+      <thead><tr>
  23
+        <th>Strategy</th>
  24
+        <th>Karma points</th>
  25
+        <th>Description</th>
  26
+      </tr></thead>
  27
+      <?cs each:strategy = admin.spamfilter.strategies ?><tr>
  28
+        <th><?cs var:strategy.name ?></th>
  29
+        <td>
  30
+          <input type="text" name="<?cs var:strategy.name ?>_karmapoints"
  31
+                 value="<?cs var:strategy.karma_points ?>" size="3" />
  32
+        </td>
  33
+        <td><p class="hint"><?cs var:strategy.karma_help ?></p></td>
  34
+      </tr><?cs /each ?>
  35
+    </table>
  36
+  </fieldset>
  37
+
  38
+  <fieldset id="logging">
  39
+    <legend>Logging</legend>
  40
+    <div class="field">
  41
+      <label>
  42
+        <input type="checkbox" id="logging_enabled" name="logging_enabled" <?cs
  43
+            if:admin.spamfilter.logging_enabled ?> checked="checked"<?cs /if ?> />
  44
+        Enable
  45
+      </label>
  46
+    </div>
  47
+    <p class="hint">
  48
+      The spam filter plugin can optionally log every content submission so
  49
+      that you can monitor and tune the effectiveness of the filtering. The
  50
+      log is stored in the database, and can be viewed under &ldquo;<em>Spam
  51
+      Filtering &rarr; Monitoring</em>&rdquo; from the web administration
  52
+      interface.
  53
+    </p>
  54
+    <div class="field">
  55
+      <label>
  56
+        Purge old entries after
  57
+        <input type="text" id="purge_age" name="purge_age" size="3"
  58
+               value="<?cs var:admin.spamfilter.purge_age ?>" />
  59
+        days
  60
+      </label>
  61
+    </div>
  62
+  </fieldset>
  63
+
  64
+  <div class="buttons">
  65
+    <input type="submit" value="Apply changes"/>
  66
+  </div>
  67
+</form>
  68
+
  69
+<script type="text/javascript">
  70
+  var loggingEnabled = document.getElementById("logging_enabled");
  71
+  function updateLoggingEnabled() {
  72
+    enableControl("purge_age", loggingEnabled.checked);
  73
+  }
  74
+  addEvent(window, 'load', updateLoggingEnabled);
  75
+  addEvent(loggingEnabled, 'click', updateLoggingEnabled);
  76
+</script>
65  django_website/templates/trac_templates/admin_spamentry.cs
... ...
@@ -0,0 +1,65 @@
  1
+<div class="nav"><?cs
  2
+ with:links = chrome.links ?><ul><?cs
  3
+  if:len(links.prev) ?>
  4
+   <li class="first<?cs if:!len(links.up) && !len(links.next) ?> last<?cs /if ?>">
  5
+    &larr; <a href="<?cs var:links.prev.0.href ?>">Previous Log Entry</a>
  6
+   </li><?cs
  7
+  /if ?><li class="up">
  8
+   <a href="<?cs var:links.up.0.href ?>">Back to List</a>
  9
+  </li><?cs
  10
+  if:len(links.next) ?>
  11
+   <li class="<?cs if:!len(links.prev) && !len(links.up) ?>first <?cs /if ?>last">
  12
+    <a href="<?cs var:links.next.0.href ?>">Next Log Entry</a> &rarr;
  13
+   </li><?cs
  14
+  /if ?></ul><?cs
  15
+ /with ?>
  16
+</div>
  17
+<h2>Spam Filtering: Monitoring</h2>
  18
+
  19
+<?cs with:entry = admin.spamfilter.entry ?>
  20
+<form class="mod" id="spamentry" method="post">
  21
+  <fieldset>
  22
+    <legend>Log Entry:</legend>
  23
+    <h3>Information</h3>
  24
+    <table class="meta"><tr>
  25
+      <th>Time:</th>
  26
+      <td><?cs var:entry.time ?> (<?cs var:entry.timedelta ?> ago)</td>
  27
+    </tr><tr>
  28
+      <th>Path:</th>
  29
+      <td><a href="<?cs var:entry.href ?>"><?cs var:entry.url ?></a></td>
  30
+    </tr><tr>
  31
+      <th>Author:</th>
  32
+      <td><?cs var:entry.author ?></td>
  33
+    </tr><tr>
  34
+      <th>Authenticated:</th>
  35
+      <td><?cs if:entry.authenticated ?>yes<?cs else ?>no<?cs /if ?></td>
  36
+    </tr><tr>
  37
+      <th>IP address:</th>
  38
+      <td><?cs var:entry.ipnr ?></td>
  39
+    </tr><tr>
  40
+      <th>Karma:</th>
  41
+      <td>
  42
+        <strong><?cs var:entry.karma ?></strong>
  43
+        (marked as <?cs if:entry.rejected ?>spam<?cs else ?>ham<?cs /if ?>)
  44
+        <ul><?cs each:reason = entry.reasons ?>
  45
+          <li><?cs var:reason ?></li>
  46
+        <?cs /each ?></ul>
  47
+      </td>
  48
+    </tr></table>
  49
+    <div class="content">
  50
+      <h3>Submitted content</h3>
  51
+      <pre><?cs var:entry.full_content ?></pre>
  52
+    </div>
  53
+    <div class="headers">
  54
+      <h3>HTTP headers</h3>
  55
+      <pre><?cs var:entry.headers ?></pre>
  56
+    </div>
  57
+    <div class="buttons">
  58
+      <input type="hidden" name="sel" value="<?cs var:entry.id ?>" />
  59
+      <input type="submit" name="markspam" value="Mark as Spam" />
  60
+      <input type="submit" name="markham" value="Mark as Ham" />
  61
+      <input type="submit" name="delete" value="Delete" />
  62
+    </div>
  63
+  </fieldset>
  64
+</form>
  65
+<?cs /with ?>
109  django_website/templates/trac_templates/admin_spammonitor.cs
... ...
@@ -0,0 +1,109 @@
  1
+<h2>Spam Filtering: Logs</h2>
  2
+
  3
+<form method="post">
  4
+
  5
+  <?cs if:!admin.spamfilter.enabled ?><p>
  6
+    <strong>Note:</strong> Logging by the spam filter is currently disabled.
  7
+  </p><?cs /if ?>
  8
+
  9
+  <p class="hint">
  10
+    Viewing entries <?cs var:admin.spamfilter.offset ?>–<?cs
  11
+      var:admin.spamfilter.offset + len(admin.spamfilter.entries) - 1 ?> of
  12
+    <?cs var:admin.spamfilter.total ?>.
  13
+  </p>
  14
+  <div class="nav"><?cs
  15
+   with:links = chrome.links ?><?cs
  16
+    if:len(links.prev) || len(links.next) ?><ul><?cs
  17
+     if:len(links.prev) ?>
  18
+      <li class="first<?cs if:!len(links.up) && !len(links.next) ?> last<?cs /if ?>">
  19
+       &larr; <a href="<?cs var:links.prev.0.href ?>"><?cs
  20
+         var:links.prev.0.title ?></a>
  21
+      </li><?cs
  22
+     /if ?><?cs
  23
+     if:len(links.next) ?>
  24
+      <li class="<?cs if:!len(links.prev) && !len(links.up) ?>first <?cs /if ?>last">
  25
+       <a href="<?cs var:links.next.0.href ?>"><?cs
  26
+         var:links.next.0.title ?></a> &rarr;
  27
+      </li><?cs
  28
+     /if ?></ul><?cs
  29
+    /if ?><?cs
  30
+   /with ?>
  31
+  </div>
  32
+
  33
+  <table class="listing" id="spammonitor">
  34
+    <thead>
  35
+      <tr>
  36
+        <th class="sel">&nbsp;</th>
  37
+        <th>Author</th>
  38
+        <th>Path</th>
  39
+        <th>Karma</th>
  40
+        <th>IP Address</th>
  41
+        <th>Date/time</th>
  42
+      </tr>
  43
+    </thead>
  44
+    <tbody>
  45
+      <?cs each:entry = admin.spamfilter.entries ?>
  46
+        <tr class="<?cs if:name(entry) % 2 ?>odd<?cs else ?>even<?cs /if ?><?cs
  47
+                        if:entry.rejected ?> rejected<?cs /if ?>">
  48
+          <td  rowspan="2">
  49
+            <input type="checkbox" name="sel" value="<?cs var:entry.id ?>" />
  50
+          </td>
  51
+          <td class="author"<?cs
  52
+              if:entry.author != entry.author_clipped ?> title="<?cs var:entry.author ?>"<?cs
  53
+              /if ?>>
  54
+            <a href="<?cs var:entry.admin_href ?>"><img src="<?cs var:chrome.href ?>/spamfilter/<?cs
  55
+              if:entry.authenticated ?>yes<?cs else ?>no<?cs /if ?>.gif" alt="<?cs
  56
+              if:entry.authenticated ?>yes<?cs else ?>no<?cs /if ?>" title="User was<?cs
  57
+              if:!entry.authenticated ?> not<?cs /if ?> logged in"/>&nbsp;<?cs
  58
+              alt:entry.author_clipped ?>anonymous<?cs /alt ?></a>
  59
+          </td>
  60
+          <td class="path"<?cs
  61
+              if:entry.path != entry.path_clipped ?> title="<?cs var:entry.path ?>"<?cs
  62
+              /if ?>>
  63
+            <a href="<?cs var:entry.admin_href ?>"><?cs var:entry.path_clipped ?></a>
  64
+          </td>
  65
+          <td class="karma"><?cs var:entry.karma ?></td>
  66
+          <td class="ipnr"><?cs var:entry.ipnr ?></td>
  67
+          <td class="time"><?cs var:entry.time ?></td>
  68
+        </tr>
  69
+        <tr class="<?cs if:name(entry) % 2 ?>odd<?cs else ?>even<?cs /if ?>">
  70
+          <td class="details" colspan="5">
  71
+            <?cs if:len(entry.reasons) ?>
  72
+              <ul><?cs each:reason = entry.reasons ?>
  73
+                <li><?cs var:reason ?></li>
  74
+              <?cs /each ?></ul>
  75
+            <?cs /if ?>
  76
+            <blockquote><?cs var:entry.content ?></blockquote>
  77
+          </td>
  78
+        </tr>
  79
+      <?cs /each ?>
  80
+    </tbody>
  81
+  </table>
  82
+
  83
+  <div class="nav"><?cs
  84
+   with:links = chrome.links ?><?cs
  85
+    if:len(links.prev) || len(links.next) ?><ul><?cs
  86
+     if:len(links.prev) ?>
  87
+      <li class="first<?cs if:!len(links.up) && !len(links.next) ?> last<?cs /if ?>">
  88
+       &larr; <a href="<?cs var:links.prev.0.href ?>"><?cs
  89
+         var:links.prev.0.title ?></a>
  90
+      </li><?cs
  91
+     /if ?><?cs
  92
+     if:len(links.next) ?>
  93
+      <li class="<?cs if:!len(links.prev) && !len(links.up) ?>first <?cs /if ?>last">
  94
+       <a href="<?cs var:links.next.0.href ?>"><?cs
  95
+         var:links.next.0.title ?></a> &rarr;
  96
+      </li><?cs
  97
+     /if ?></ul><?cs
  98
+    /if ?><?cs
  99
+   /with ?>
  100
+  </div>
  101
+