MercurialRoundupTheme

Changeset

0:5d31df11531b
2010-06-06 Paul Boddie raw files shortlog changelog graph Import of the Roundup classic templates with copyright and licensing information.
COPYING.txt (file) themes/mercurialroundup/html/_generic.404.html (file) themes/mercurialroundup/html/_generic.calendar.html (file) themes/mercurialroundup/html/_generic.collision.html (file) themes/mercurialroundup/html/_generic.help-empty.html (file) themes/mercurialroundup/html/_generic.help-list.html (file) themes/mercurialroundup/html/_generic.help-search.html (file) themes/mercurialroundup/html/_generic.help-submit.html (file) themes/mercurialroundup/html/_generic.help.html (file) themes/mercurialroundup/html/_generic.index.html (file) themes/mercurialroundup/html/_generic.item.html (file) themes/mercurialroundup/html/file.index.html (file) themes/mercurialroundup/html/file.item.html (file) themes/mercurialroundup/html/help.html (file) themes/mercurialroundup/html/help_controls.js (file) themes/mercurialroundup/html/home.classlist.html (file) themes/mercurialroundup/html/home.html (file) themes/mercurialroundup/html/issue.index.html (file) themes/mercurialroundup/html/issue.item.html (file) themes/mercurialroundup/html/issue.search.html (file) themes/mercurialroundup/html/keyword.item.html (file) themes/mercurialroundup/html/msg.index.html (file) themes/mercurialroundup/html/msg.item.html (file) themes/mercurialroundup/html/page.html (file) themes/mercurialroundup/html/query.edit.html (file) themes/mercurialroundup/html/query.item.html (file) themes/mercurialroundup/html/style.css (file) themes/mercurialroundup/html/user.forgotten.html (file) themes/mercurialroundup/html/user.help-search.html (file) themes/mercurialroundup/html/user.help.html (file) themes/mercurialroundup/html/user.index.html (file) themes/mercurialroundup/html/user.item.html (file) themes/mercurialroundup/html/user.register.html (file) themes/mercurialroundup/html/user.rego_progress.html (file) themes/mercurialroundup/html/user_utils.js (file)
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/COPYING.txt	Sun Jun 06 16:19:05 2010 +0200
     1.3 @@ -0,0 +1,24 @@
     1.4 +Roundup Licensing
     1.5 +-----------------
     1.6 +
     1.7 +Copyright (c) 2003-2009 Richard Jones (richard@mechanicalcat.net)
     1.8 +Copyright (c) 2002 eKit.com Inc (http://www.ekit.com/)
     1.9 +Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
    1.10 +
    1.11 +Permission is hereby granted, free of charge, to any person obtaining a copy
    1.12 +of this software and associated documentation files (the "Software"), to deal
    1.13 +in the Software without restriction, including without limitation the rights
    1.14 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    1.15 +copies of the Software, and to permit persons to whom the Software is
    1.16 +furnished to do so, subject to the following conditions:
    1.17 +
    1.18 +  The above copyright notice and this permission notice shall be included in
    1.19 +  all copies or substantial portions of the Software.
    1.20 +
    1.21 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    1.22 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    1.23 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    1.24 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    1.25 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    1.26 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    1.27 +SOFTWARE.
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/themes/mercurialroundup/html/_generic.404.html	Sun Jun 06 16:19:05 2010 +0200
     2.3 @@ -0,0 +1,9 @@
     2.4 +<html>
     2.5 +<head>
     2.6 +<title>Item Not Found</title>
     2.7 +</head>
     2.8 +
     2.9 +<body>
    2.10 +There is no <span tal:content="context/_classname" /> with id <span tal:content="context/id"/>
    2.11 +</body>
    2.12 +</html>
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/themes/mercurialroundup/html/_generic.calendar.html	Sun Jun 06 16:19:05 2010 +0200
     3.3 @@ -0,0 +1,18 @@
     3.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     3.5 +<html>
     3.6 + <head>
     3.7 +  <link rel="stylesheet" type="text/css" href="@@file/style.css" />
     3.8 +  <meta http-equiv="Content-Type" content="text/html; charset=utf-8;" />
     3.9 +  <title tal:content="string:Roundup Calendar"></title>
    3.10 +  <script language="Javascript"
    3.11 +          type="text/javascript"
    3.12 +          tal:content="structure string:
    3.13 +          // this is the name of the field in the original form that we're working on
    3.14 +          form  = window.opener.document.${request/form/form/value};
    3.15 +          field = '${request/form/property/value}';" >
    3.16 +  </script>
    3.17 + </head>
    3.18 + <body class="body"
    3.19 +       tal:content="structure python:utils.html_calendar(request)">
    3.20 + </body>
    3.21 +</html>
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/themes/mercurialroundup/html/_generic.collision.html	Sun Jun 06 16:19:05 2010 +0200
     4.3 @@ -0,0 +1,16 @@
     4.4 +<tal:block metal:use-macro="templates/page/macros/icing">
     4.5 +<title metal:fill-slot="head_title" i18n:translate=""
     4.6 + ><span tal:replace="python:context._classname.capitalize()"
     4.7 + i18n:name="class" /> Edit Collision - <span i18n:name="tracker"
     4.8 + tal:replace="config/TRACKER_NAME" /></title>
     4.9 +<tal:block metal:fill-slot="body_title" i18n:translate=""
    4.10 + ><span tal:replace="python:context._classname.capitalize()"
    4.11 + i18n:name="class" /> Edit Collision</tal:block>
    4.12 +
    4.13 +<td class="content" metal:fill-slot="content" i18n:translate="
    4.14 +  There has been a collision. Another user updated this node
    4.15 +  while you were editing. Please <a href='${context}'>reload</a>
    4.16 +  the node and review your edits.
    4.17 +"><span tal:replace="context/designator" i18n:name="context" />
    4.18 +</td>
    4.19 +</tal:block>
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/themes/mercurialroundup/html/_generic.help-empty.html	Sun Jun 06 16:19:05 2010 +0200
     5.3 @@ -0,0 +1,8 @@
     5.4 +<html>
     5.5 +  <head>
     5.6 +    <title>Empty page (no search performed yet)</title>
     5.7 +  </head>
     5.8 +  <body>
     5.9 +    <p i18n:translate="">Please specify your search parameters!</p>
    5.10 +  </body>
    5.11 +</html>
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/themes/mercurialroundup/html/_generic.help-list.html	Sun Jun 06 16:19:05 2010 +0200
     6.3 @@ -0,0 +1,83 @@
     6.4 +<!-- $Id: _generic.help-list.html,v 1.2 2008-03-01 08:18:07 richard Exp $ vim: sw=2 ts=8 et
     6.5 +--><html tal:define="vok context/is_view_ok">
     6.6 +  <head>
     6.7 +    <title>Search result for user helper</title>
     6.8 +    <link rel="stylesheet" type="text/css" href="@@file/style.css" />
     6.9 +    <script language="Javascript" type="text/javascript"
    6.10 +        tal:content="structure string:<!--
    6.11 +        // this is the name of the field in the original form that we're working on
    6.12 +        form  = parent.opener.document.${request/form/form/value};
    6.13 +        field  = '${request/form/property/value}';
    6.14 +    //-->"></script>
    6.15 +    <script src="@@file/help_controls.js" type="text/javascript"></script>
    6.16 +<script type="text/javascript"><!--
    6.17 +var text_field = parent.submit.document.frm_help.text_preview;
    6.18 +//--></script>
    6.19 +  </head>
    6.20 +  <body>
    6.21 +    <pre tal:content="request/env/QUERY_STRING" tal:condition=false />
    6.22 +
    6.23 +  <p tal:condition="not:vok" i18n:translate="">You are not
    6.24 +  allowed to view this page.</p>
    6.25 +
    6.26 +  <tal:if condition="context/is_view_ok">
    6.27 +  <tal:def define="batch request/batch;">
    6.28 +  <form name=dummyform>
    6.29 +    <table width="100%"
    6.30 +      tal:define="template string:help-list"
    6.31 +      metal:use-macro="templates/help/macros/batch_navi"
    6.32 +      >
    6.33 +      <tr class="navigation">
    6.34 +       <th>
    6.35 +        <a href="#">&lt;&lt; previous</a>
    6.36 +       </th>
    6.37 +       <th i18n:translate="">1..25 out of 50
    6.38 +       </th>
    6.39 +       <th>
    6.40 +        <a href="#">next &gt;&gt;</a>
    6.41 +       </th>
    6.42 +      </tr>
    6.43 +     </table>
    6.44 +
    6.45 +  <form name=dummyform>
    6.46 +  <table class="classhelp"
    6.47 +    tal:define="
    6.48 +       props python:request.form['properties'].value.split(',');
    6.49 +       legend templates/help/macros/legend;
    6.50 +    "><thead>
    6.51 +      <tr metal:use-macro="legend">
    6.52 +         <th>&nbsp;<b>x</b></th>
    6.53 +         <th tal:repeat="prop props" tal:content="prop" i18n:translate=""></th>
    6.54 +       </tr>
    6.55 +     </thead>
    6.56 +     <tfoot tal:condition=true>
    6.57 +       <tr metal:use-macro="legend" />
    6.58 +     </tfoot>
    6.59 +     <tbody>
    6.60 +       <tr tal:repeat="item batch">
    6.61 +         <tal:block tal:define="attr python:item[props[0]]" >
    6.62 +           <td>
    6.63 +             <input name="check"
    6.64 +             onclick="switch_val(text_field, this);" type="checkbox"
    6.65 +             tal:attributes="value attr; id string:id_$attr" />
    6.66 +             </td>
    6.67 +             <td tal:repeat="prop props">
    6.68 +                 <label class="classhelp-label"
    6.69 +                        tal:attributes="for string:id_$attr"
    6.70 +                        tal:content="python:item[prop]"></label>
    6.71 +             </td>
    6.72 +           </tal:block>
    6.73 +         </tr>
    6.74 +       </tbody>
    6.75 +     </table>
    6.76 +   </form>
    6.77 +     </tal:def>
    6.78 +     </tal:if>
    6.79 +     
    6.80 +     <pre tal:content=request tal:condition=false />
    6.81 +     <script type="text/javascript"><!--
    6.82 +       parent.submit.document.frm_help.cb_listpresent.checked=true;
    6.83 +       reviseList_framed(document.dummyform, text_field)
    6.84 +     //--></script>
    6.85 +  </body>
    6.86 +</html>
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/themes/mercurialroundup/html/_generic.help-search.html	Sun Jun 06 16:19:05 2010 +0200
     7.3 @@ -0,0 +1,13 @@
     7.4 +<html>
     7.5 +  <head>
     7.6 +    <title>Frame for search input fields</title>
     7.7 +  </head>
     7.8 +  <body>
     7.9 +    <p i18n:translate="">Generic template
    7.10 +    <span tal:replace="request/template" i18n:name="template">help-search</span>
    7.11 +    or version for class
    7.12 +    <span tal:replace="request/classname" i18n:name="classname">user</span>
    7.13 +    is not yet implemented</p>
    7.14 +  </body>
    7.15 +</html>
    7.16 +
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/themes/mercurialroundup/html/_generic.help-submit.html	Sun Jun 06 16:19:05 2010 +0200
     8.3 @@ -0,0 +1,73 @@
     8.4 +<html>
     8.5 +  <head>
     8.6 +      <link rel="stylesheet" type="text/css" href="@@file/style.css" />
     8.7 +      <meta http-equiv="Content-Type"
     8.8 +       tal:attributes="content string:text/html;; charset=${request/client/charset}" />
     8.9 +      <tal:block tal:condition="python:request.form.has_key('property')">
    8.10 +      <title>Generic submit page for framed helper windows</title>
    8.11 +      <script language="Javascript" type="text/javascript"
    8.12 +          tal:content="structure string:<!--
    8.13 +// this is the name of the field in the original form that we're working on
    8.14 +form  = parent.opener.document.${request/form/form/value};
    8.15 +callingform=form
    8.16 +field  = '${request/form/property/value}';
    8.17 +var listform = null
    8.18 +function listPresent() {
    8.19 +  return document.frm_help.cb_listpresent.checked
    8.20 +}
    8.21 +function getListForm() {
    8.22 +  if (listPresent()) {
    8.23 +    return parent.list.document.forms.dummyform
    8.24 +  } else {
    8.25 +    return null
    8.26 +  }
    8.27 +}
    8.28 +
    8.29 +
    8.30 +function checkListForm() {
    8.31 +  // global listform
    8.32 +  if (listform != null)
    8.33 +    if (parent.list.document.dummyform) {
    8.34 +      listform = parent.list.document.dummyform
    8.35 +      alert(listform)
    8.36 +    }
    8.37 +
    8.38 +  var bol= listform != null
    8.39 +  alert('checkListForm: bol='+bol)
    8.40 +  return bol
    8.41 +}
    8.42 +//-->">
    8.43 +      </script>
    8.44 +      <script src="@@file/help_controls.js" type="text/javascript"></script>
    8.45 +      </tal:block>
    8.46 +  </head>
    8.47 + <body class="body" onload="parent.focus();" id="submit">
    8.48 + <pre tal:content="request/env/QUERY_STRING" tal:condition=false />
    8.49 + <form name="frm_help"
    8.50 +       tal:define="batch request/batch;
    8.51 +       props python:request.form['properties'].value.split(',')"
    8.52 +       class="help-submit"
    8.53 +       id="classhelp-controls">
    8.54 +     <div style="width:100%;text-align:left;margin-bottom:0.2em">
    8.55 +       <input type="text" name="text_preview" size="24" class="preview"
    8.56 +       onchange="f=getListForm();if(f){ reviseList_framed(f, this)};"
    8.57 +       />
    8.58 +     </div>
    8.59 +     <input type=checkbox name="cb_listpresent" readonly="readonly" style="display:none">
    8.60 +     <input type="button" id="btn_cancel"
    8.61 +            value=" Cancel " onclick="parent.close();return false;"
    8.62 +            i18n:attributes="value" />
    8.63 +     <input type="reset" id="btn_reset"
    8.64 +     onclick="text_field.value=original_field;f=getListForm();if (f) {reviseList_framed(f, this)};return false"
    8.65 +            />
    8.66 +     <input type="submit" id="btn_apply" class="apply"
    8.67 +            value=" Apply " onclick="callingform[field].value=text_field.value; parent.close();"
    8.68 +            i18n:attributes="value" />
    8.69 + </form>
    8.70 + <script type="text/javascript"><!--
    8.71 +var text_field = document.frm_help.text_preview;
    8.72 +original_field=form[field].value;
    8.73 +text_field.value=original_field;
    8.74 +//--></script>
    8.75 + </body>
    8.76 +</html>
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/themes/mercurialroundup/html/_generic.help.html	Sun Jun 06 16:19:05 2010 +0200
     9.3 @@ -0,0 +1,98 @@
     9.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     9.5 +<html tal:define="property request/form/property/value" >
     9.6 +  <head>
     9.7 +      <link rel="stylesheet" type="text/css" href="@@file/style.css" />
     9.8 +      <meta http-equiv="Content-Type"
     9.9 +       tal:attributes="content string:text/html;; charset=${request/client/charset}" />
    9.10 +      <tal:block tal:condition="python:request.form.has_key('property')">
    9.11 +      <title i18n:translate=""><tal:x i18n:name="property"
    9.12 +       tal:content="property" i18n:translate="" /> help - <span i18n:name="tracker"
    9.13 +       tal:replace="config/TRACKER_NAME" /></title>
    9.14 +      <script language="Javascript" type="text/javascript"
    9.15 +          tal:content="structure string:
    9.16 +          // this is the name of the field in the original form that we're working on
    9.17 +          form  = window.opener.document.${request/form/form/value};
    9.18 +          field  = '${request/form/property/value}';">
    9.19 +      </script>
    9.20 +      <script src="@@file/help_controls.js" type="text/javascript"><!--
    9.21 +      //--></script>
    9.22 +      </tal:block>
    9.23 +  </head>
    9.24 + <body class="body" onload="resetList();">
    9.25 + <form name="frm_help" tal:attributes="action request/base"
    9.26 +       tal:define="batch request/batch;
    9.27 +                   props python:request.form['properties'].value.split(',')">
    9.28 +
    9.29 +     <div id="classhelp-controls">
    9.30 +       <!--input type="button" name="btn_clear"
    9.31 +              value="Clear" onClick="clearList()"/ -->
    9.32 +       <input type="text" name="text_preview" size="24" class="preview"
    9.33 +              onchange="reviseList(this.value);"/>
    9.34 +       <input type="button" name="btn_reset"
    9.35 +              value=" Cancel " onclick="resetList(); window.close();"
    9.36 +              i18n:attributes="value" />
    9.37 +       <input type="button" name="btn_apply" class="apply"
    9.38 +              value=" Apply " onclick="updateList(); window.close();"
    9.39 +              i18n:attributes="value" />
    9.40 +     </div>
    9.41 +     <table width="100%">
    9.42 +      <tr class="navigation">
    9.43 +       <th>
    9.44 +        <a tal:define="prev batch/previous" tal:condition="prev"
    9.45 +           tal:attributes="href python:request.indexargs_url(request.classname,
    9.46 +           {'@template':'help', 'property': request.form['property'].value,
    9.47 +            'properties': request.form['properties'].value,
    9.48 +            'form': request.form['form'].value,
    9.49 +            'type': request.form['type'].value,
    9.50 +            '@startwith':prev.first, '@pagesize':prev.size})"
    9.51 +           i18n:translate="" >&lt;&lt; previous</a>
    9.52 +        &nbsp;
    9.53 +       </th>
    9.54 +       <th i18n:translate=""><span tal:replace="batch/start" i18n:name="start"
    9.55 +        />..<span tal:replace="python: batch.start + batch.length -1" i18n:name="end"
    9.56 +        /> out of <span tal:replace="batch/sequence_length" i18n:name="total"
    9.57 +        />
    9.58 +       </th>
    9.59 +       <th>
    9.60 +        <a tal:define="next batch/next" tal:condition="next"
    9.61 +           tal:attributes="href python:request.indexargs_url(request.classname,
    9.62 +           {'@template':'help', 'property': request.form['property'].value,
    9.63 +            'properties': request.form['properties'].value,
    9.64 +            'form': request.form['form'].value,
    9.65 +            'type': request.form['type'].value,
    9.66 +            '@startwith':next.first, '@pagesize':next.size})"
    9.67 +           i18n:translate="" >next &gt;&gt;</a>
    9.68 +        &nbsp;
    9.69 +       </th>
    9.70 +      </tr>
    9.71 +     </table>
    9.72 +
    9.73 +     <table class="classhelp">
    9.74 +       <tr>
    9.75 +           <th>&nbsp;<b>x</b></th>
    9.76 +           <th tal:repeat="prop props" tal:content="prop" i18n:translate=""></th>
    9.77 +       </tr>
    9.78 +       <tr tal:repeat="item batch">
    9.79 +         <tal:block tal:define="attr python:item[props[0]]" >
    9.80 +           <td>
    9.81 +             <input name="check"
    9.82 +                 onclick="updatePreview();"
    9.83 +                 tal:attributes="type python:request.form['type'].value;
    9.84 +                                 value attr; id string:id_$attr" />
    9.85 +             </td>
    9.86 +             <td tal:repeat="prop props">
    9.87 +                 <label class="classhelp-label"
    9.88 +                        tal:attributes="for string:id_$attr"
    9.89 +                        tal:content="python:item[prop]"></label>
    9.90 +             </td>
    9.91 +           </tal:block>
    9.92 +       </tr>
    9.93 +       <tr>
    9.94 +           <th>&nbsp;<b>x</b></th>
    9.95 +           <th tal:repeat="prop props" tal:content="prop" i18n:translate=""></th>
    9.96 +       </tr>
    9.97 +     </table>
    9.98 +
    9.99 + </form>
   9.100 + </body>
   9.101 +</html>
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/themes/mercurialroundup/html/_generic.index.html	Sun Jun 06 16:19:05 2010 +0200
    10.3 @@ -0,0 +1,71 @@
    10.4 +<!-- dollarId: issue.index,v 1.2 2001/07/29 04:07:37 richard Exp dollar-->
    10.5 +
    10.6 +<tal:block metal:use-macro="templates/page/macros/icing">
    10.7 +<title metal:fill-slot="head_title" i18n:translate=""
    10.8 + ><span tal:replace="python:context._classname.capitalize()"
    10.9 + i18n:name="class" /> editing - <span i18n:name="tracker"
   10.10 + tal:replace="config/TRACKER_NAME" /></title>
   10.11 +<tal:block metal:fill-slot="body_title" i18n:translate=""
   10.12 + ><span tal:replace="python:context._classname.capitalize()"
   10.13 + i18n:name="class" /> editing</tal:block>
   10.14 +
   10.15 +<td class="content" metal:fill-slot="content">
   10.16 +
   10.17 +<span tal:condition="python:not (context.is_view_ok() or context.is_edit_ok()
   10.18 + or request.user.hasRole('Anonymous'))"
   10.19 + tal:omit-tag="python:1" i18n:translate=""
   10.20 +>You are not allowed to view this page.</span>
   10.21 +
   10.22 +<span tal:condition="python:not (context.is_view_ok() or context.is_edit_ok())
   10.23 + and request.user.hasRole('Anonymous')"
   10.24 + tal:omit-tag="python:1" i18n:translate=""
   10.25 +>Please login with your username and password.</span>
   10.26 +
   10.27 +<tal:block tal:condition="context/is_edit_ok">
   10.28 +<tal:block i18n:translate="">
   10.29 +<p class="form-help">
   10.30 + You may edit the contents of the
   10.31 + <span tal:replace="request/classname" i18n:name="classname"/>
   10.32 + class using this form. Commas, newlines and double quotes (") must be
   10.33 + handled delicately. You may include commas and newlines by enclosing the
   10.34 + values in double-quotes ("). Double quotes themselves must be quoted by
   10.35 + doubling ("").
   10.36 +</p>
   10.37 +
   10.38 +<p class="form-help">
   10.39 + Multilink properties have their multiple values colon (":") separated
   10.40 + (... ,"one:two:three", ...)
   10.41 +</p>
   10.42 +
   10.43 +<p class="form-help">
   10.44 + Remove entries by deleting their line. Add new entries by appending
   10.45 + them to the table - put an X in the id column. If you wish to restore a
   10.46 + removed item and you know its id then just put that id in the id column.
   10.47 +</p>
   10.48 +</tal:block>
   10.49 +<form onSubmit="return submit_once()" method="POST"
   10.50 +      tal:attributes="action context/designator">
   10.51 +<textarea rows="15" style="width:90%" name="rows" tal:content="context/csv"></textarea>
   10.52 +<br>
   10.53 +<input type="hidden" name="@action" value="editCSV">
   10.54 +<input type="submit" value="Edit Items" i18n:attributes="value">
   10.55 +</form>
   10.56 +</tal:block>
   10.57 +
   10.58 +<table tal:condition="context/is_only_view_ok" width="100%" class="list">
   10.59 + <tr>
   10.60 +  <th tal:repeat="property context/propnames" tal:content="property">&nbsp;</th>
   10.61 + </tr>
   10.62 + <tal:block repeat="item context/list">
   10.63 + <tr tal:condition="item/is_view_ok"
   10.64 +     tal:attributes="class python:['normal', 'alt'][repeat['item'].index%6/3]">
   10.65 +  <td tal:repeat="property context/propnames"
   10.66 +   tal:content="python: item[property] or default"
   10.67 +  >&nbsp;</td>
   10.68 + </tr>
   10.69 + </tal:block>
   10.70 +</table>
   10.71 +
   10.72 +</td>
   10.73 +
   10.74 +</tal:block>
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/themes/mercurialroundup/html/_generic.item.html	Sun Jun 06 16:19:05 2010 +0200
    11.3 @@ -0,0 +1,58 @@
    11.4 +<tal:block metal:use-macro="templates/page/macros/icing">
    11.5 +<title metal:fill-slot="head_title" i18n:translate=""
    11.6 + ><span tal:replace="python:context._classname.capitalize()"
    11.7 + i18n:name="class" /> editing - <span i18n:name="tracker"
    11.8 + tal:replace="config/TRACKER_NAME" /></title>
    11.9 +<tal:block metal:fill-slot="body_title" i18n:translate=""
   11.10 + ><span tal:replace="python:context._classname.capitalize()"
   11.11 + i18n:name="class" /> editing</tal:block>
   11.12 +
   11.13 +<td class="content" metal:fill-slot="content">
   11.14 +
   11.15 +<p tal:condition="python:not (context.is_view_ok()
   11.16 + or request.user.hasRole('Anonymous'))" i18n:translate="">
   11.17 + You are not allowed to view this page.</p>
   11.18 +
   11.19 +<p tal:condition="python:not context.is_view_ok()
   11.20 + and request.user.hasRole('Anonymous')" i18n:translate="">
   11.21 + Please login with your username and password.</p>
   11.22 +
   11.23 +<div tal:condition="context/is_view_ok">
   11.24 +
   11.25 +<form method="POST" onSubmit="return submit_once()"
   11.26 +      enctype="multipart/form-data" tal:condition="context/is_view_ok"
   11.27 +      tal:attributes="action context/designator">
   11.28 +
   11.29 +<input type="hidden" name="@template" value="item">
   11.30 +
   11.31 +<table class="form">
   11.32 +
   11.33 +<tr tal:repeat="prop python:db[context._classname].properties()">
   11.34 + <tal:block tal:condition="python:prop._name not in ('id',
   11.35 +   'creator', 'creation', 'actor', 'activity')">
   11.36 +  <th tal:content="prop/_name"></th>
   11.37 +  <td tal:content="structure python:context[prop._name].field()"></td>
   11.38 + </tal:block>
   11.39 +</tr>
   11.40 +<tr>
   11.41 + <td>&nbsp;</td>
   11.42 + <td colspan=3 tal:content="structure context/submit">
   11.43 +  submit button will go here
   11.44 + </td>
   11.45 +</tr>
   11.46 +</table>
   11.47 +
   11.48 +</form>
   11.49 +
   11.50 +<tal:block tal:condition="context/id"
   11.51 +    tal:define="limit python:[10, None][request.form.has_key('show_all_history')]"
   11.52 +    tal:replace="structure python:context.history(limit=limit)" />
   11.53 +<p tal:condition="not:exists:request/form/show_all_history" i18n:translate="">Showing 10 items.
   11.54 +<a tal:attributes="href string:${context/_classname}${context/id}?show_all_history=yes">Show all history</a>
   11.55 +(warning: this could be VERY long)</p>
   11.56 +
   11.57 +</div>
   11.58 +
   11.59 +</td>
   11.60 +
   11.61 +</tal:block>
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/themes/mercurialroundup/html/file.index.html	Sun Jun 06 16:19:05 2010 +0200
    12.3 @@ -0,0 +1,31 @@
    12.4 +<!-- dollarId: file.index,v 1.4 2002/01/23 05:10:27 richard Exp dollar-->
    12.5 +<tal:block metal:use-macro="templates/page/macros/icing">
    12.6 +<title metal:fill-slot="head_title" i18n:translate=""
    12.7 + >List of files - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker" /></title>
    12.8 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
    12.9 +  i18n:translate="">List of files</span>
   12.10 +<td class="content" metal:fill-slot="content">
   12.11 +
   12.12 +<table class="otherinfo" tal:define="batch request/batch">
   12.13 + <tr><th style="padding-right: 10" i18n:translate="">Download</th>
   12.14 +     <th style="padding-right: 10" i18n:translate="">Content Type</th>
   12.15 +     <th style="padding-right: 10" i18n:translate="">Uploaded By</th>
   12.16 +     <th style="padding-right: 10" i18n:translate="">Date</th>
   12.17 + </tr>
   12.18 + <tr tal:repeat="file batch" tal:attributes="class python:['normal', 'alt'][repeat['file'].index%6/3]">
   12.19 +  <td>
   12.20 +   <a tal:attributes="href string:file${file/id}/${file/name}"
   12.21 +      tal:content="file/name">dld link</a>
   12.22 +  </td>
   12.23 +  <td tal:content="file/type">content type</td>
   12.24 +  <td tal:content="file/creator">creator's name</td>
   12.25 +  <td tal:content="file/creation">creation date</td>
   12.26 + </tr>
   12.27 +
   12.28 + <metal:block use-macro="templates/issue.index/macros/batch-footer" />
   12.29 +
   12.30 +</table>
   12.31 +
   12.32 +</td>
   12.33 +
   12.34 +</tal:block>
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/themes/mercurialroundup/html/file.item.html	Sun Jun 06 16:19:05 2010 +0200
    13.3 @@ -0,0 +1,53 @@
    13.4 +<tal:block metal:use-macro="templates/page/macros/icing">
    13.5 +<title metal:fill-slot="head_title" i18n:translate="">File display - <span
    13.6 + i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title>
    13.7 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
    13.8 + i18n:translate="">File display</span>
    13.9 +
   13.10 +<td class="content" metal:fill-slot="content">
   13.11 +
   13.12 +<p tal:condition="python:not (context.is_view_ok()
   13.13 + or request.user.hasRole('Anonymous'))" i18n:translate="">
   13.14 + You are not allowed to view this page.</p>
   13.15 +
   13.16 +<p tal:condition="python:not context.is_view_ok()
   13.17 + and request.user.hasRole('Anonymous')" i18n:translate="">
   13.18 + Please login with your username and password.</p>
   13.19 +
   13.20 +<form method="POST" onSubmit="return submit_once()"
   13.21 +      enctype="multipart/form-data" tal:condition="context/is_view_ok"
   13.22 +      tal:attributes="action context/designator">
   13.23 +
   13.24 +<table class="form">
   13.25 + <tr>
   13.26 +  <th i18n:translate="">Name</th>
   13.27 +  <td tal:content="structure context/name/field"></td>
   13.28 + </tr>
   13.29 + <tr>
   13.30 +  <th i18n:translate="">Content Type</th>
   13.31 +  <td tal:content="structure context/type/field"></td>
   13.32 + </tr>
   13.33 +
   13.34 + <tr>
   13.35 +  <td>
   13.36 +   &nbsp;
   13.37 +   <input type="hidden" name="@template" value="item">
   13.38 +   <input type="hidden" name="@required" value="name,type">
   13.39 +   <input type="hidden" name="@multilink"
   13.40 +          tal:condition="python:request.form.has_key('@multilink')"
   13.41 +          tal:attributes="value request/form/@multilink/value">
   13.42 +  </td>
   13.43 +  <td tal:content="structure context/submit">submit button here</td>
   13.44 + </tr>
   13.45 +</table>
   13.46 +</form>
   13.47 +
   13.48 +<a tal:condition="python:context.id and context.is_view_ok()"
   13.49 + tal:attributes="href string:file${context/id}/${context/name}"
   13.50 + i18n:translate="">download</a>
   13.51 +
   13.52 +<tal:block tal:condition="context/id" tal:replace="structure context/history" />
   13.53 +
   13.54 +</td>
   13.55 +
   13.56 +</tal:block>
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/themes/mercurialroundup/html/help.html	Sun Jun 06 16:19:05 2010 +0200
    14.3 @@ -0,0 +1,38 @@
    14.4 +<!--
    14.5 +Macros for framed help windows
    14.6 +-->
    14.7 +
    14.8 +<!-- legend for helper search results -->
    14.9 +<thead>
   14.10 +<tr metal:define-macro="legend">
   14.11 +  <th><b>x</b></th>
   14.12 +  <th tal:repeat="prop props" tal:content="prop" i18n:translate=""></th>
   14.13 +</tr>
   14.14 +</thead>
   14.15 +
   14.16 +<table width="100%"
   14.17 +  metal:define-macro="batch_navi"
   14.18 +  tal:define="prev batch/previous;
   14.19 +  next batch/next;
   14.20 +  "
   14.21 +  tal:condition="python:prev or next">
   14.22 +  <tr class="navigation">
   14.23 +   <th width="30%">
   14.24 +    <a tal:condition="prev"
   14.25 +       tal:attributes="href python:request.indexargs_url(request.classname, {'@template':'help-list', 'property': request.form['property'].value, 'properties': request.form['properties'].value, 'form': request.form['form'].value, '@startwith':prev.first, '@pagesize':prev.size})"
   14.26 +       i18n:translate="" >&lt;&lt; previous</a>
   14.27 +    &nbsp;
   14.28 +   </th>
   14.29 +   <th i18n:translate="" width="40%"><span tal:replace="batch/start" i18n:name="start"
   14.30 +    />..<span tal:replace="python: batch.start + batch.length -1" i18n:name="end"
   14.31 +    /> out of <span tal:replace="batch/sequence_length" i18n:name="total"
   14.32 +    />
   14.33 +   </th>
   14.34 +   <th width="30%">
   14.35 +    <a tal:condition="next"
   14.36 +       tal:attributes="href python:request.indexargs_url(request.classname, {'@template':'help-list', 'property': request.form['property'].value, 'properties': request.form['properties'].value, 'form': request.form['form'].value, '@startwith':next.first, '@pagesize':next.size})"
   14.37 +       i18n:translate="" >next &gt;&gt;</a>
   14.38 +    &nbsp;
   14.39 +   </th>
   14.40 +  </tr>
   14.41 + </table>
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/themes/mercurialroundup/html/help_controls.js	Sun Jun 06 16:19:05 2010 +0200
    15.3 @@ -0,0 +1,324 @@
    15.4 +// initial values for either Nosy, Superseder, Keyword and Waiting On,
    15.5 +// depending on which has called
    15.6 +original_field = form[field].value;
    15.7 +
    15.8 +// Some browsers (ok, IE) don't define the "undefined" variable.
    15.9 +undefined = document.geez_IE_is_really_friggin_annoying;
   15.10 +
   15.11 +function trim(value) {
   15.12 +  var temp = value;
   15.13 +  var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
   15.14 +  if (obj.test(temp)) { temp = temp.replace(obj, '$2'); }
   15.15 +  var obj = /  /g;
   15.16 +  while (temp.match(obj)) { temp = temp.replace(obj, " "); }
   15.17 +  return temp;
   15.18 +}
   15.19 +
   15.20 +function determineList() {
   15.21 +     // generate a comma-separated list of the checked items
   15.22 +     var list = new String('');
   15.23 +
   15.24 +     // either a checkbox object or an array of checkboxes
   15.25 +     var check = document.frm_help.check;
   15.26 +
   15.27 +     if ((check.length == undefined) && (check.checked != undefined)) {
   15.28 +         // only one checkbox on page
   15.29 +         if (check.checked) {
   15.30 +             list = check.value;
   15.31 +         }
   15.32 +     } else {
   15.33 +         // array of checkboxes
   15.34 +         for (box=0; box < check.length; box++) {
   15.35 +             if (check[box].checked) {
   15.36 +                 if (list.length == 0) {
   15.37 +                     separator = '';
   15.38 +                 }
   15.39 +                 else {
   15.40 +                     separator = ',';
   15.41 +                 }
   15.42 +                 // we used to use an Array and push / join, but IE5.0 sux
   15.43 +                 list = list + separator + check[box].value;
   15.44 +             }
   15.45 +         }
   15.46 +     }
   15.47 +     return list;
   15.48 +}
   15.49 +
   15.50 +/**
   15.51 + * update the field in the opening window;
   15.52 + * the text_field variable must be set in the calling page
   15.53 + */
   15.54 +function updateOpener() {
   15.55 +  // write back to opener window
   15.56 +  if (document.frm_help.check==undefined) { return; }
   15.57 +  form[field].value = text_field.value;
   15.58 +}
   15.59 +
   15.60 +function updateList() {
   15.61 +  // write back to opener window
   15.62 +  if (document.frm_help.check==undefined) { return; }
   15.63 +  form[field].value = determineList();
   15.64 +}
   15.65 +
   15.66 +function updatePreview() {
   15.67 +  // update the preview box
   15.68 +  if (document.frm_help.check==undefined) { return; }
   15.69 +  writePreview(determineList());
   15.70 +}
   15.71 +
   15.72 +function clearList() {
   15.73 +  // uncheck all checkboxes
   15.74 +  if (document.frm_help.check==undefined) { return; }
   15.75 +  for (box=0; box < document.frm_help.check.length; box++) {
   15.76 +      document.frm_help.check[box].checked = false;
   15.77 +  }
   15.78 +}
   15.79 +
   15.80 +function reviseList_framed(form, textfield) {
   15.81 +  // update the checkboxes based on the preview field
   15.82 +  // alert('reviseList_framed')
   15.83 +  // alert(form)
   15.84 +  if (form.check==undefined)
   15.85 +      return;
   15.86 +  // alert(textfield)
   15.87 +  var to_check;
   15.88 +  var list = textfield.value.split(",");
   15.89 +  if (form.check.length==undefined) {
   15.90 +      check = form.check;
   15.91 +      to_check = false;
   15.92 +      for (val in list) {
   15.93 +          if (check.value==trim(list[val])) {
   15.94 +              to_check = true;
   15.95 +              break;
   15.96 +          }
   15.97 +      }
   15.98 +      check.checked = to_check;
   15.99 +  } else {
  15.100 +    for (box=0; box < form.check.length; box++) {
  15.101 +      check = form.check[box];
  15.102 +      to_check = false;
  15.103 +      for (val in list) {
  15.104 +          if (check.value==trim(list[val])) {
  15.105 +              to_check = true;
  15.106 +              break;
  15.107 +          }
  15.108 +      }
  15.109 +      check.checked = to_check;
  15.110 +    }
  15.111 +  }
  15.112 +}
  15.113 +
  15.114 +function reviseList(vals) {
  15.115 +  // update the checkboxes based on the preview field
  15.116 +  if (document.frm_help.check==undefined) { return; }
  15.117 +  var to_check;
  15.118 +  var list = vals.split(",");
  15.119 +  if (document.frm_help.check.length==undefined) {
  15.120 +      check = document.frm_help.check;
  15.121 +      to_check = false;
  15.122 +      for (val in list) {
  15.123 +          if (check.value==trim(list[val])) {
  15.124 +              to_check = true;
  15.125 +              break;
  15.126 +          }
  15.127 +      }
  15.128 +      check.checked = to_check;
  15.129 +  } else {
  15.130 +    for (box=0; box < document.frm_help.check.length; box++) {
  15.131 +      check = document.frm_help.check[box];
  15.132 +      to_check = false;
  15.133 +      for (val in list) {
  15.134 +          if (check.value==trim(list[val])) {
  15.135 +              to_check = true;
  15.136 +              break;
  15.137 +          }
  15.138 +      }
  15.139 +      check.checked = to_check;
  15.140 +    }
  15.141 +  }
  15.142 +}
  15.143 +
  15.144 +function resetList() {
  15.145 +  // reset preview and check boxes to initial values
  15.146 +  if (document.frm_help.check==undefined) { return; }
  15.147 +  writePreview(original_field);
  15.148 +  reviseList(original_field);
  15.149 +}
  15.150 +
  15.151 +function writePreview(val) {
  15.152 +   // writes a value to the text_preview
  15.153 +   document.frm_help.text_preview.value = val;
  15.154 +}
  15.155 +
  15.156 +function focusField(name) {
  15.157 +    for(i=0; i < document.forms.length; ++i) {
  15.158 +      var obj = document.forms[i].elements[name];
  15.159 +      if (obj && obj.focus) {obj.focus();}
  15.160 +    }
  15.161 +}
  15.162 +
  15.163 +function selectField(name) {
  15.164 +    for(i=0; i < document.forms.length; ++i) {
  15.165 +      var obj = document.forms[i].elements[name];
  15.166 +      if (obj && obj.focus){obj.focus();}
  15.167 +      if (obj && obj.select){obj.select();}
  15.168 +    }
  15.169 +}
  15.170 +
  15.171 +function checkRequiredFields(fields)
  15.172 +{
  15.173 +    var bonk='';
  15.174 +    var res='';
  15.175 +    var argv = checkRequiredFields.arguments;
  15.176 +    var argc = argv.length;
  15.177 +    var input = '';
  15.178 +    var val='';
  15.179 +
  15.180 +    for (var i=0; i < argc; i++) {
  15.181 +        fi = argv[i];
  15.182 +        input = document.getElementById(fi);
  15.183 +        if (input) {
  15.184 +            val = input.value
  15.185 +            if (val == '' || val == '-1' || val == -1) {
  15.186 +                if (res == '') {
  15.187 +                    res = fi;
  15.188 +                    bonk = input;
  15.189 +                } else {
  15.190 +                    res += ', '+fi;
  15.191 +                }
  15.192 +            }
  15.193 +        } else {
  15.194 +            alert('Field with id='+fi+' not found!')
  15.195 +        }
  15.196 +    }
  15.197 +    if (res == '') {
  15.198 +        return submit_once();
  15.199 +    } else {
  15.200 +        alert('Missing value here ('+res+')!');
  15.201 +        if (window.event && window.event.returnvalue) {
  15.202 +            event.returnValue = 0;    // work-around for IE
  15.203 +        }
  15.204 +        bonk.focus();
  15.205 +        return false;
  15.206 +    }
  15.207 +}
  15.208 +
  15.209 +/**
  15.210 + * seeks the given value (2nd argument)
  15.211 + * in the value of the given input element (1st argument),
  15.212 + * which is considered a list of values, separated by commas
  15.213 + */
  15.214 +function has_value(input, val)
  15.215 +{
  15.216 +    var actval = input.value
  15.217 +    var arr = feld.value.split(',');
  15.218 +    var max = arr.length;
  15.219 +    for (i=0;i<max;i++) {
  15.220 +        if (trim(arr[i]) == val) {
  15.221 +            return true
  15.222 +        }
  15.223 +    }
  15.224 +    return false
  15.225 +}
  15.226 +
  15.227 +/**
  15.228 + * Switch Value:
  15.229 + * change the value of the given input field (might be of type text or hidden),
  15.230 + * adding or removing the value of the given checkbox field (might be a radio
  15.231 + * button as well)
  15.232 + *
  15.233 + * This function doesn't care whether or not the checkboxes of all values of
  15.234 + * interest are present; but of course it doesn't have total control of the
  15.235 + * text field.
  15.236 + */
  15.237 +function switch_val(text, check)
  15.238 +{
  15.239 +    var switched_val = check.value
  15.240 +    var arr = text.value.split(',')
  15.241 +    var max = arr.length
  15.242 +    if (check.checked) {
  15.243 +        for (i=0; i<max; i++) {
  15.244 +            if (trim(arr[i]) == switched_val) {
  15.245 +                return
  15.246 +            }
  15.247 +        }
  15.248 +	if (text.value)
  15.249 +            text.value = text.value+','+switched_val
  15.250 +	else
  15.251 +            text.value = switched_val
  15.252 +    } else {
  15.253 +        var neu = ''
  15.254 +	var changed = false
  15.255 +        for (i=0; i<max; i++) {
  15.256 +            if (trim(arr[i]) == switched_val) {
  15.257 +                changed=true
  15.258 +            } else {
  15.259 +                neu = neu+','+trim(arr[i])
  15.260 +            }
  15.261 +        }
  15.262 +        if (changed) {
  15.263 +            text.value = neu.substr(1)
  15.264 +        }
  15.265 +    }
  15.266 +}
  15.267 +
  15.268 +/**
  15.269 + * append the given value (2nd argument) to an input field
  15.270 + * (1st argument) which contains comma-separated values;
  15.271 + * see --> remove_val()
  15.272 + *
  15.273 + * This will work nicely even for batched lists
  15.274 + */
  15.275 +function append_val(name, val)
  15.276 +{
  15.277 +    var feld = document.itemSynopsis[name];
  15.278 +    var actval = feld.value;
  15.279 +    if (actval == '') {
  15.280 +        feld.value = val
  15.281 +    } else {
  15.282 +        var arr = feld.value.split(',');
  15.283 +        var max = arr.length;
  15.284 +        for (i=0;i<max;i++) {
  15.285 +            if (trim(arr[i]) == val) {
  15.286 +                return
  15.287 +            }
  15.288 +        }
  15.289 +        feld.value = actval+','+val
  15.290 +    }
  15.291 +}
  15.292 +
  15.293 +/**
  15.294 + * remove the given value (2nd argument) from the comma-separated values
  15.295 + * of the given input element (1st argument); see --> append_val()
  15.296 + */
  15.297 +function remove_val(name, val)
  15.298 +{
  15.299 +    var feld = document.itemSynopsis[name];
  15.300 +    var actval = feld.value;
  15.301 +    var changed=false;
  15.302 +    if (actval == '') {
  15.303 +	return
  15.304 +    } else {
  15.305 +        var arr = feld.value.split(',');
  15.306 +        var max = arr.length;
  15.307 +        var neu = ''
  15.308 +        for (i=0;i<max;i++) {
  15.309 +            if (trim(arr[i]) == val) {
  15.310 +                changed=true
  15.311 +            } else {
  15.312 +                neu = neu+','+trim(arr[i])
  15.313 +            }
  15.314 +        }
  15.315 +        if (changed) {
  15.316 +            feld.value = neu.substr(1)
  15.317 +        }
  15.318 +    }
  15.319 +}
  15.320 +
  15.321 +/**
  15.322 + * give the focus to the element given by id
  15.323 + */
  15.324 +function focus2id(name)
  15.325 +{
  15.326 +    document.getElementById(name).focus();
  15.327 +}
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/themes/mercurialroundup/html/home.classlist.html	Sun Jun 06 16:19:05 2010 +0200
    16.3 @@ -0,0 +1,25 @@
    16.4 +<tal:block metal:use-macro="templates/page/macros/icing">
    16.5 +<title metal:fill-slot="head_title" i18n:translate="">List of classes - <span
    16.6 + i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title>
    16.7 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
    16.8 + i18n:translate="">List of classes</span>
    16.9 +<td class="content" metal:fill-slot="content">
   16.10 +<table class="classlist">
   16.11 +
   16.12 +<tal:block tal:repeat="cl db/classes">
   16.13 + <tr>
   16.14 +  <th class="header" colspan="2" align="left">
   16.15 +   <a tal:attributes="href string:${cl/classname}"
   16.16 +      tal:content="python:cl.classname.capitalize()">classname</a>
   16.17 +  </th>
   16.18 + </tr>
   16.19 + <tr tal:repeat="prop cl/properties">
   16.20 +  <th tal:content="prop/_name">name</th>
   16.21 +  <td tal:content="prop/_prop">type</td>
   16.22 + </tr>
   16.23 +</tal:block>
   16.24 +
   16.25 +</table>
   16.26 +</td>
   16.27 +
   16.28 +</tal:block>
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/themes/mercurialroundup/html/home.html	Sun Jun 06 16:19:05 2010 +0200
    17.3 @@ -0,0 +1,10 @@
    17.4 +<!--
    17.5 + This is the default body that is displayed when people visit the
    17.6 + tracker. The tag below lists the currently open issues. You may
    17.7 + replace it with a greeting message, or a different list of issues or
    17.8 + whatever. It's a good idea to have the issues on the front page though
    17.9 +-->
   17.10 +<span tal:replace="structure python:db.issue.renderWith('index',
   17.11 +    sort=[('-', 'activity')], group=[('+', 'priority')], filter=['status'],
   17.12 +    columns=['id','activity','title','creator','assignedto', 'status'],
   17.13 +    filterspec={'status':['-1','1','2','3','4','5','6','7']})" />
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/themes/mercurialroundup/html/issue.index.html	Sun Jun 06 16:19:05 2010 +0200
    18.3 @@ -0,0 +1,166 @@
    18.4 +<!-- $Id: issue.index.html,v 1.29 2007-09-18 17:44:26 jpend Exp $ -->
    18.5 +<tal:block metal:use-macro="templates/page/macros/icing">
    18.6 +<title metal:fill-slot="head_title" >
    18.7 +  <span tal:omit-tag="true" i18n:translate="" >List of issues</span>
    18.8 +  <span tal:condition="request/dispname"
    18.9 +   tal:replace="python:' - %s '%request.dispname"
   18.10 +  /> - <span tal:replace="config/TRACKER_NAME" />
   18.11 +</title>
   18.12 +<span metal:fill-slot="body_title" tal:omit-tag="true">
   18.13 +  <span tal:omit-tag="true" i18n:translate="" >List of issues</span>
   18.14 +  <span tal:condition="request/dispname"
   18.15 +   tal:replace="python:' - %s' % request.dispname" />
   18.16 +</span>
   18.17 +<td class="content" metal:fill-slot="content">
   18.18 +
   18.19 +<p tal:condition="python:not (context.is_view_ok()
   18.20 + or request.user.hasRole('Anonymous'))" i18n:translate="">
   18.21 + You are not allowed to view this page.</p>
   18.22 +
   18.23 +<p tal:condition="python:not context.is_view_ok()
   18.24 + and request.user.hasRole('Anonymous')" i18n:translate="">
   18.25 + Please login with your username and password.</p>
   18.26 +
   18.27 +<tal:block tal:define="batch request/batch" tal:condition="context/is_view_ok">
   18.28 + <table class="list">
   18.29 +  <tr>
   18.30 +   <th tal:condition="request/show/priority" i18n:translate="">Priority</th>
   18.31 +   <th tal:condition="request/show/id" i18n:translate="">ID</th>
   18.32 +   <th tal:condition="request/show/creation" i18n:translate="">Creation</th>
   18.33 +   <th tal:condition="request/show/activity" i18n:translate="">Activity</th>
   18.34 +   <th tal:condition="request/show/actor" i18n:translate="">Actor</th>
   18.35 +   <th tal:condition="request/show/keyword" i18n:translate="">Keyword</th>
   18.36 +   <th tal:condition="request/show/title" i18n:translate="">Title</th>
   18.37 +   <th tal:condition="request/show/status" i18n:translate="">Status</th>
   18.38 +   <th tal:condition="request/show/creator" i18n:translate="">Creator</th>
   18.39 +   <th tal:condition="request/show/assignedto" i18n:translate="">Assigned&nbsp;To</th>
   18.40 +  </tr>
   18.41 + <tal:block tal:repeat="i batch" condition=true>
   18.42 +  <tr tal:define="group python:[r[1] for r in request.group]"
   18.43 +      tal:condition="python:group and batch.propchanged(*group)">
   18.44 +   <th tal:attributes="colspan python:len(request.columns)" class="group">
   18.45 +    <tal:block tal:repeat="g group">
   18.46 +     <tal:block i18n:translate="" tal:content="python:str(i[g]) or '(no %s set)'%g"/>
   18.47 +    </tal:block>
   18.48 +   </th>
   18.49 +  </tr>
   18.50 +
   18.51 +  <tr>
   18.52 +   <td tal:condition="request/show/priority"
   18.53 +       tal:content="python:i.priority.plain() or default">&nbsp;</td>
   18.54 +   <td tal:condition="request/show/id" tal:content="i/id">&nbsp;</td>
   18.55 +   <td class="date" tal:condition="request/show/creation"
   18.56 +       tal:content="i/creation/reldate">&nbsp;</td>
   18.57 +   <td class="date" tal:condition="request/show/activity"
   18.58 +       tal:content="i/activity/reldate">&nbsp;</td>
   18.59 +   <td class="date" tal:condition="request/show/actor"
   18.60 +       tal:content="python:i.actor.plain() or default">&nbsp;</td>
   18.61 +   <td tal:condition="request/show/keyword"
   18.62 +       tal:content="python:i.keyword.plain() or default">&nbsp;</td>
   18.63 +   <td tal:condition="request/show/title">
   18.64 +    <a tal:attributes="href string:issue${i/id}"
   18.65 +		tal:content="python:str(i.title.plain(hyperlink=0)) or '[no title]'">title</a>
   18.66 +   </td>
   18.67 +   <td tal:condition="request/show/status"
   18.68 +       i18n:translate=""
   18.69 +       tal:content="python:i.status.plain() or default">&nbsp;</td>
   18.70 +   <td tal:condition="request/show/creator"
   18.71 +       tal:content="python:i.creator.plain() or default">&nbsp;</td>
   18.72 +   <td tal:condition="request/show/assignedto"
   18.73 +       tal:content="python:i.assignedto.plain() or default">&nbsp;</td>
   18.74 +  </tr>
   18.75 +
   18.76 + </tal:block>
   18.77 +
   18.78 + <metal:index define-macro="batch-footer">
   18.79 + <tr tal:condition="batch">
   18.80 +  <th tal:attributes="colspan python:len(request.columns)">
   18.81 +   <table width="100%">
   18.82 +    <tr class="navigation">
   18.83 +     <th>
   18.84 +      <a tal:define="prev batch/previous" tal:condition="prev"
   18.85 +         tal:attributes="href python:request.indexargs_url(request.classname,
   18.86 +         {'@startwith':prev.first, '@pagesize':prev.size})"
   18.87 +         i18n:translate="">&lt;&lt; previous</a>
   18.88 +      &nbsp;
   18.89 +     </th>
   18.90 +     <th i18n:translate=""><span tal:replace="batch/start" i18n:name="start"
   18.91 +     />..<span tal:replace="python: batch.start + batch.length -1" i18n:name="end"
   18.92 +     /> out of <span tal:replace="batch/sequence_length" i18n:name="total"
   18.93 +     /></th>
   18.94 +     <th>
   18.95 +      <a tal:define="next batch/next" tal:condition="next"
   18.96 +         tal:attributes="href python:request.indexargs_url(request.classname,
   18.97 +         {'@startwith':next.first, '@pagesize':next.size})"
   18.98 +         i18n:translate="">next &gt;&gt;</a>
   18.99 +      &nbsp;
  18.100 +     </th>
  18.101 +    </tr>
  18.102 +   </table>
  18.103 +  </th>
  18.104 + </tr>
  18.105 + </metal:index>
  18.106 +</table>
  18.107 +
  18.108 +<a tal:attributes="href python:request.indexargs_url('issue',
  18.109 +            {'@action':'export_csv'})" i18n:translate="">Download as CSV</a>
  18.110 +
  18.111 +<form method="GET" class="index-controls"
  18.112 +    tal:attributes="action request/classname">
  18.113 +
  18.114 + <table class="form" tal:define="n_sort python:2">
  18.115 +  <tal:block tal:repeat="n python:range(n_sort)" tal:condition="batch">
  18.116 +  <tr tal:define="key python:len(request.sort)>n and request.sort[n]">
  18.117 +   <th>
  18.118 +    <tal:block tal:condition="not:n" i18n:translate="">Sort on:</tal:block>
  18.119 +   </th>
  18.120 +   <td>
  18.121 +    <select tal:attributes="name python:'@sort%d'%n">
  18.122 +     <option value="" i18n:translate="">- nothing -</option>
  18.123 +     <option tal:repeat="col context/properties"
  18.124 +             tal:attributes="value col/_name;
  18.125 +                             selected python:key and col._name == key[1]"
  18.126 +             tal:content="col/_name"
  18.127 +             i18n:translate="">column</option>
  18.128 +    </select>
  18.129 +   </td>
  18.130 +   <th i18n:translate="">Descending:</th>
  18.131 +   <td><input type="checkbox" tal:attributes="name python:'@sortdir%d'%n;
  18.132 +              checked python:key and key[0] == '-'">
  18.133 +   </td>
  18.134 +  </tr>
  18.135 +  </tal:block>
  18.136 +  <tal:block tal:repeat="n python:range(n_sort)" tal:condition="batch">
  18.137 +  <tr tal:define="key python:len(request.group)>n and request.group[n]">
  18.138 +   <th>
  18.139 +    <tal:block tal:condition="not:n" i18n:translate="">Group on:</tal:block>
  18.140 +   </th>
  18.141 +   <td>
  18.142 +    <select tal:attributes="name python:'@group%d'%n">
  18.143 +     <option value="" i18n:translate="">- nothing -</option>
  18.144 +     <option tal:repeat="col context/properties"
  18.145 +             tal:attributes="value col/_name;
  18.146 +                             selected python:key and col._name == key[1]"
  18.147 +             tal:content="col/_name"
  18.148 +             i18n:translate="">column</option>
  18.149 +    </select>
  18.150 +   </td>
  18.151 +   <th i18n:translate="">Descending:</th>
  18.152 +   <td><input type="checkbox" tal:attributes="name python:'@groupdir%d'%n;
  18.153 +              checked python:key and key[0] == '-'">
  18.154 +   </td>
  18.155 +  </tr>
  18.156 +  </tal:block>
  18.157 +  <tr><td colspan="4">
  18.158 +              <input type="submit" value="Redisplay" i18n:attributes="value">
  18.159 +              <tal:block tal:replace="structure
  18.160 +                python:request.indexargs_form(sort=0, group=0)" />
  18.161 +  </td></tr>
  18.162 + </table>
  18.163 +</form>
  18.164 +
  18.165 +</tal:block>
  18.166 +
  18.167 +</td>
  18.168 +</tal:block><tal:comment condition=false> vim: sw=1 ts=8 et si
  18.169 +</tal:comment>
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/themes/mercurialroundup/html/issue.item.html	Sun Jun 06 16:19:05 2010 +0200
    19.3 @@ -0,0 +1,197 @@
    19.4 +<!-- dollarId: issue.item,v 1.4 2001/08/03 01:19:43 richard Exp dollar-->
    19.5 +<tal:block metal:use-macro="templates/page/macros/icing">
    19.6 +<title metal:fill-slot="head_title">
    19.7 +<tal:block condition="context/id" i18n:translate=""
    19.8 + >Issue <tal:x tal:content="context/id" i18n:name="id"
    19.9 + />: <tal:x content="context/title" i18n:name="title"
   19.10 + /> - <tal:x content="config/TRACKER_NAME" i18n:name="tracker"
   19.11 +/></tal:block>
   19.12 +<tal:block condition="not:context/id" i18n:translate=""
   19.13 + >New Issue - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker"
   19.14 +/></tal:block>
   19.15 +</title>
   19.16 +<tal:block metal:fill-slot="body_title">
   19.17 + <span tal:condition="python: not (context.id or context.is_edit_ok())"
   19.18 +  tal:omit-tag="python:1" i18n:translate="">New Issue</span>
   19.19 + <span tal:condition="python: not context.id and context.is_edit_ok()"
   19.20 +  tal:omit-tag="python:1" i18n:translate="">New Issue Editing</span>
   19.21 + <span tal:condition="python: context.id and not context.is_edit_ok()"
   19.22 +  tal:omit-tag="python:1" i18n:translate="">Issue<tal:x
   19.23 +  replace="context/id" i18n:name="id" /></span>
   19.24 + <span tal:condition="python: context.id and context.is_edit_ok()"
   19.25 +  tal:omit-tag="python:1" i18n:translate="">Issue<tal:x
   19.26 +  replace="context/id" i18n:name="id" /> Editing</span>
   19.27 +</tal:block>
   19.28 +
   19.29 +<td class="content" metal:fill-slot="content">
   19.30 +
   19.31 +<p tal:condition="python:not (context.is_view_ok()
   19.32 + or request.user.hasRole('Anonymous'))" i18n:translate="">
   19.33 + You are not allowed to view this page.</p>
   19.34 +
   19.35 +<p tal:condition="python:not context.is_view_ok()
   19.36 + and request.user.hasRole('Anonymous')" i18n:translate="">
   19.37 + Please login with your username and password.</p>
   19.38 +
   19.39 +<div tal:condition="context/is_view_ok">
   19.40 +
   19.41 +<form method="POST" name="itemSynopsis"
   19.42 +      onSubmit="return submit_once()" enctype="multipart/form-data"
   19.43 +      tal:attributes="action context/designator">
   19.44 +
   19.45 +<table class="form">
   19.46 +<tr>
   19.47 + <th class="required" i18n:translate="">Title</th>
   19.48 + <td colspan=3 tal:content="structure python:context.title.field(size=60)">title</td>
   19.49 +</tr>
   19.50 +
   19.51 +<tr>
   19.52 + <th class="required" i18n:translate="">Priority</th>
   19.53 + <td tal:content="structure context/priority/menu">priority</td>
   19.54 + <th i18n:translate="">Status</th>
   19.55 + <td tal:content="structure context/status/menu">status</td>
   19.56 +</tr>
   19.57 +
   19.58 +<tr>
   19.59 + <th i18n:translate="">Superseder</th>
   19.60 + <td>
   19.61 +  <span tal:replace="structure python:context.superseder.field(showid=1, size=20)" />
   19.62 +  <span tal:condition="context/is_edit_ok" tal:replace="structure python:db.issue.classhelp('id,title', property='superseder')" />
   19.63 +  <span tal:condition="context/superseder">
   19.64 +   <br><span i18n:translate="">View:</span>
   19.65 +     <a tal:repeat="sup context/superseder"
   19.66 +        tal:content="python:sup['id'] + ', '*(not repeat['sup'].end)"
   19.67 +        tal:attributes="href string:issue${sup/id}"></a>
   19.68 +  </span>
   19.69 + </td>
   19.70 + <th i18n:translate="">Nosy List</th>
   19.71 + <td>
   19.72 +  <span tal:replace="structure context/nosy/field" />
   19.73 +  <span tal:condition="context/is_edit_ok" tal:replace="structure
   19.74 +python:db.user.classhelp('username,realname,address', property='nosy', width='600')" /><br>
   19.75 + </td>
   19.76 +</tr>
   19.77 +
   19.78 +<tr>
   19.79 + <th i18n:translate="">Assigned To</th>
   19.80 + <td tal:content="structure context/assignedto/menu">assignedto menu</td>
   19.81 + <th i18n:translate="">Keywords</th>
   19.82 + <td>
   19.83 +  <span tal:replace="structure context/keyword/field" />
   19.84 +  <span tal:condition="context/is_edit_ok" tal:replace="structure python:db.keyword.classhelp(property='keyword')" />
   19.85 + </td>
   19.86 +</tr>
   19.87 +
   19.88 +<tr tal:condition="context/is_edit_ok">
   19.89 + <th i18n:translate="">Change Note</th>
   19.90 + <td colspan=3>
   19.91 +  <textarea tal:content="request/form/@note/value | default"
   19.92 +            name="@note" wrap="hard" rows="5" cols="80"></textarea>
   19.93 + </td>
   19.94 +</tr>
   19.95 +
   19.96 +<tr tal:condition="context/is_edit_ok">
   19.97 + <th i18n:translate="">File</th>
   19.98 + <td colspan=3><input type="file" name="@file" size="40"></td>
   19.99 +</tr>
  19.100 +
  19.101 +<tr tal:condition="context/is_edit_ok">
  19.102 + <td>
  19.103 +  &nbsp;
  19.104 +  <input type="hidden" name="@template" value="item">
  19.105 +  <input type="hidden" name="@required" value="title,priority">
  19.106 + </td>
  19.107 + <td colspan=3>
  19.108 +  <span tal:replace="structure context/submit">submit button</span>
  19.109 +  <a tal:condition="context/id" tal:attributes="href context/copy_url"
  19.110 +   i18n:translate="">Make a copy</a>
  19.111 + </td>
  19.112 +</tr>
  19.113 +
  19.114 +</table>
  19.115 +</form>
  19.116 +
  19.117 +<tal:block tal:condition="not:context/id" i18n:translate="">
  19.118 +<table class="form">
  19.119 +<tr>
  19.120 + <td>Note:&nbsp;</td>
  19.121 + <th class="required">highlighted</th>
  19.122 + <td>&nbsp;fields are required.</td>
  19.123 +</tr>
  19.124 +</table>
  19.125 +</tal:block>
  19.126 +
  19.127 +<p tal:condition="context/id" i18n:translate="">
  19.128 + Created on <b tal:content="context/creation" i18n:name="creation" />
  19.129 + by <b tal:content="context/creator" i18n:name="creator" />,
  19.130 + last changed <b content="context/activity" i18n:name="activity" />
  19.131 + by <b tal:content="context/actor" i18n:name="actor" />.
  19.132 +</p>
  19.133 +
  19.134 +<table class="files" tal:condition="context/files">
  19.135 + <tr><th colspan="5" class="header" i18n:translate="">Files</th></tr>
  19.136 + <tr>
  19.137 +  <th i18n:translate="">File name</th>
  19.138 +  <th i18n:translate="">Uploaded</th>
  19.139 +  <th i18n:translate="">Type</th>
  19.140 +  <th i18n:translate="">Edit</th>
  19.141 +  <th i18n:translate="">Remove</th>
  19.142 + </tr>
  19.143 + <tr tal:repeat="file context/files">
  19.144 +  <td>
  19.145 +   <a tal:attributes="href file/download_url"
  19.146 +      tal:content="file/name">dld link</a>
  19.147 +  </td>
  19.148 +  <td>
  19.149 +   <span tal:content="file/creator">creator's name</span>,
  19.150 +   <span tal:content="file/creation">creation date</span>
  19.151 +  </td>
  19.152 +  <td tal:content="file/type" />
  19.153 +  <td><a tal:condition="file/is_edit_ok"
  19.154 +          tal:attributes="href string:file${file/id}">edit</a>
  19.155 +  </td>
  19.156 +  <td>
  19.157 +   <form style="padding:0" method="POST" tal:condition="context/is_edit_ok"
  19.158 +         tal:attributes="action string:issue${context/id}">
  19.159 +    <input type="hidden" name="@remove@files" tal:attributes="value file/id">
  19.160 +    <input type="hidden" name="@action" value="edit">
  19.161 +    <input type="submit" value="remove" i18n:attributes="value">
  19.162 +   </form>
  19.163 +  </td>
  19.164 + </tr>
  19.165 +</table>
  19.166 +
  19.167 +<table class="messages" tal:condition="context/messages">
  19.168 + <tr><th colspan="4" class="header" i18n:translate="">Messages</th></tr>
  19.169 + <tal:block tal:repeat="msg context/messages/reverse">
  19.170 +  <tr>
  19.171 +   <th><a tal:attributes="href string:msg${msg/id}"
  19.172 +    i18n:translate="">msg<tal:x replace="msg/id" i18n:name="id" /> (view)</a></th>
  19.173 +   <th i18n:translate="">Author: <tal:x replace="msg/author"
  19.174 +       i18n:name="author" /></th>
  19.175 +   <th i18n:translate="">Date: <tal:x replace="msg/date"
  19.176 +       i18n:name="date" /></th>
  19.177 +   <th>
  19.178 +    <form style="padding:0" method="POST" tal:condition="context/is_edit_ok"
  19.179 +          tal:attributes="action string:issue${context/id}">
  19.180 +     <input type="hidden" name="@remove@messages" tal:attributes="value msg/id">
  19.181 +     <input type="hidden" name="@action" value="edit">
  19.182 +     <input type="submit" value="remove" i18n:attributes="value">
  19.183 +    </form>
  19.184 +   </th>
  19.185 +  </tr>
  19.186 +  <tr>
  19.187 +   <td colspan="4" class="content">
  19.188 +    <pre tal:content="structure msg/content/hyperlinked">content</pre>
  19.189 +   </td>
  19.190 +  </tr>
  19.191 + </tal:block>
  19.192 +</table>
  19.193 +
  19.194 +<tal:block tal:condition="context/id" tal:replace="structure context/history" />
  19.195 +
  19.196 +</div>
  19.197 +
  19.198 +</td>
  19.199 +
  19.200 +</tal:block>
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/themes/mercurialroundup/html/issue.search.html	Sun Jun 06 16:19:05 2010 +0200
    20.3 @@ -0,0 +1,234 @@
    20.4 +<tal:block metal:use-macro="templates/page/macros/icing">
    20.5 +<title metal:fill-slot="head_title" i18n:translate="">Issue searching - <span
    20.6 + i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title>
    20.7 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
    20.8 + i18n:translate="">Issue searching</span>
    20.9 +<td class="content" metal:fill-slot="content">
   20.10 +
   20.11 +<form method="GET" name="itemSynopsis"
   20.12 +      tal:attributes="action request/classname">
   20.13 +      
   20.14 +<table class="form" tal:define="
   20.15 +   cols python:request.columns or 'id activity title status assignedto'.split();
   20.16 +   sort_on python:request.sort and request.sort[0] or nothing;
   20.17 +   sort_desc python:sort_on and sort_on[0] == '-';
   20.18 +   sort_on python:(sort_on and sort_on[1]) or 'activity';
   20.19 +   group_on python:request.group and request.group[0] or nothing;
   20.20 +   group_desc python:group_on and group_on[0] == '-';
   20.21 +   group_on python:(group_on and group_on[1]) or 'priority';
   20.22 +
   20.23 +   search_input templates/page/macros/search_input;
   20.24 +   search_date templates/page/macros/search_date;
   20.25 +   column_input templates/page/macros/column_input;
   20.26 +   sort_input templates/page/macros/sort_input;
   20.27 +   group_input templates/page/macros/group_input;
   20.28 +   search_select templates/page/macros/search_select;
   20.29 +   search_select_translated templates/page/macros/search_select_translated;
   20.30 +   search_multiselect templates/page/macros/search_multiselect;">
   20.31 +
   20.32 +<tr>
   20.33 + <th class="header">&nbsp;</th>
   20.34 + <th class="header" i18n:translate="">Filter on</th>
   20.35 + <th class="header" i18n:translate="">Display</th>
   20.36 + <th class="header" i18n:translate="">Sort on</th>
   20.37 + <th class="header" i18n:translate="">Group on</th>
   20.38 +</tr>
   20.39 +
   20.40 +<tr tal:define="name string:@search_text">
   20.41 +  <th i18n:translate="">All text*:</th>
   20.42 +  <td metal:use-macro="search_input"></td>
   20.43 +  <td>&nbsp;</td>
   20.44 +  <td>&nbsp;</td>
   20.45 +  <td>&nbsp;</td>
   20.46 +</tr>
   20.47 +
   20.48 +<tr tal:define="name string:title">
   20.49 +  <th i18n:translate="">Title:</th>
   20.50 +  <td metal:use-macro="search_input"></td>
   20.51 +  <td metal:use-macro="column_input"></td>
   20.52 +  <td metal:use-macro="sort_input"></td>
   20.53 +  <td>&nbsp;</td>
   20.54 +</tr>
   20.55 +
   20.56 +<tr tal:define="name string:keyword;
   20.57 +                db_klass string:keyword;
   20.58 +                db_content string:name;">
   20.59 +  <th i18n:translate="">Keyword:</th>
   20.60 +  <td metal:use-macro="search_select">
   20.61 +    <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
   20.62 +            tal:attributes="selected python:value == '-1'">not selected</option>
   20.63 +  </td>
   20.64 +  <td metal:use-macro="column_input"></td>
   20.65 +  <td metal:use-macro="sort_input"></td>
   20.66 +  <td metal:use-macro="group_input"></td>
   20.67 +</tr>
   20.68 +
   20.69 +<tr tal:define="name string:id">
   20.70 +  <th i18n:translate="">ID:</th>
   20.71 +  <td metal:use-macro="search_input"></td>
   20.72 +  <td metal:use-macro="column_input"></td>
   20.73 +  <td metal:use-macro="sort_input"></td>
   20.74 +  <td>&nbsp;</td>
   20.75 +</tr>
   20.76 +
   20.77 +<tr tal:define="name string:creation">
   20.78 +  <th i18n:translate="">Creation Date:</th>
   20.79 +  <td metal:use-macro="search_date"></td>
   20.80 +  <td metal:use-macro="column_input"></td>
   20.81 +  <td metal:use-macro="sort_input"></td>
   20.82 +  <td metal:use-macro="group_input"></td>
   20.83 +</tr>
   20.84 +
   20.85 +<tr tal:define="name string:creator;
   20.86 +                db_klass string:user;
   20.87 +                db_content string:username;"
   20.88 +    tal:condition="db/user/is_view_ok">
   20.89 +  <th i18n:translate="">Creator:</th>
   20.90 +  <td metal:use-macro="search_select">
   20.91 +    <option metal:fill-slot="extra_options" i18n:translate=""
   20.92 +            tal:attributes="value request/user/id">created by me</option>
   20.93 +  </td>
   20.94 +  <td metal:use-macro="column_input"></td>
   20.95 +  <td metal:use-macro="sort_input"></td>
   20.96 +  <td metal:use-macro="group_input"></td>
   20.97 +</tr>
   20.98 +
   20.99 +<tr tal:define="name string:activity">
  20.100 +  <th i18n:translate="">Activity:</th>
  20.101 +  <td metal:use-macro="search_date"></td>
  20.102 +  <td metal:use-macro="column_input"></td>
  20.103 +  <td metal:use-macro="sort_input"></td>
  20.104 +  <td>&nbsp;</td>
  20.105 +</tr>
  20.106 +
  20.107 +<tr tal:define="name string:actor;
  20.108 +                db_klass string:user;
  20.109 +                db_content string:username;"
  20.110 +    tal:condition="db/user/is_view_ok">
  20.111 +  <th i18n:translate="">Actor:</th>
  20.112 +  <td metal:use-macro="search_select">
  20.113 +    <option metal:fill-slot="extra_options" i18n:translate=""
  20.114 +            tal:attributes="value request/user/id">done by me</option>
  20.115 +  </td>
  20.116 +  <td metal:use-macro="column_input"></td>
  20.117 +  <td metal:use-macro="sort_input"></td>
  20.118 +  <td>&nbsp;</td>
  20.119 +</tr>
  20.120 +
  20.121 +<tr tal:define="name string:priority;
  20.122 +                db_klass string:priority;
  20.123 +                db_content string:name;">
  20.124 +  <th i18n:translate="">Priority:</th>
  20.125 +  <td metal:use-macro="search_select_translated">
  20.126 +    <option metal:fill-slot="extra_options" value="-1" i18n:translate=""
  20.127 +            tal:attributes="selected python:value == '-1'">not selected</option>
  20.128 +  </td>
  20.129 +  <td metal:use-macro="column_input"></td>
  20.130 +  <td metal:use-macro="sort_input"></td>
  20.131 +  <td metal:use-macro="group_input"></td>
  20.132 +</tr>
  20.133 +
  20.134 +<tr tal:define="name string:status;
  20.135 +                db_klass string:status;
  20.136 +                db_content string:name;">
  20.137 +  <th i18n:translate="">Status:</th>
  20.138 +  <td metal:use-macro="search_select_translated">
  20.139 +    <tal:block metal:fill-slot="extra_options">
  20.140 +      <option value="-1,1,2,3,4,5,6,7" i18n:translate=""
  20.141 +              tal:attributes="selected python:value == '-1,1,2,3,4,5,6,7'">not resolved</option>
  20.142 +      <option value="-1" i18n:translate=""
  20.143 +              tal:attributes="selected python:value == '-1'">not selected</option>
  20.144 +    </tal:block>
  20.145 +  </td>
  20.146 +  <td metal:use-macro="column_input"></td>
  20.147 +  <td metal:use-macro="sort_input"></td>
  20.148 +  <td metal:use-macro="group_input"></td>
  20.149 +</tr>
  20.150 +
  20.151 +<tr tal:define="name string:assignedto;
  20.152 +                db_klass string:user;
  20.153 +                db_content string:username;"
  20.154 +    tal:condition="db/user/is_view_ok">
  20.155 +  <th i18n:translate="">Assigned to:</th>
  20.156 +  <td metal:use-macro="search_select">
  20.157 +    <tal:block metal:fill-slot="extra_options">
  20.158 +      <option tal:attributes="value request/user/id"
  20.159 +       i18n:translate="">assigned to me</option>
  20.160 +      <option value="-1" tal:attributes="selected python:value == '-1'"
  20.161 +       i18n:translate="">unassigned</option>
  20.162 +    </tal:block>
  20.163 +  </td>
  20.164 +  <td metal:use-macro="column_input"></td>
  20.165 +  <td metal:use-macro="sort_input"></td>
  20.166 +  <td metal:use-macro="group_input"></td>
  20.167 +</tr>
  20.168 +
  20.169 +<tr>
  20.170 + <th i18n:translate="">No Sort or group:</th>
  20.171 + <td>&nbsp;</td>
  20.172 + <td>&nbsp;</td>
  20.173 + <td><input type="radio" name="@sort" value=""></td>
  20.174 + <td><input type="radio" name="@group" value=""></td>
  20.175 +</tr>
  20.176 +
  20.177 +<tr>
  20.178 +<th i18n:translate="">Pagesize:</th>
  20.179 +<td><input name="@pagesize" size="3" value="50"
  20.180 +           tal:attributes="value request/form/@pagesize/value | default"></td>
  20.181 +</tr>
  20.182 +
  20.183 +<tr>
  20.184 +<th i18n:translate="">Start With:</th>
  20.185 +<td><input name="@startwith" size="3" value="0"
  20.186 +           tal:attributes="value request/form/@startwith/value | default"></td>
  20.187 +</tr>
  20.188 +
  20.189 +<tr>
  20.190 +<th i18n:translate="">Sort Descending:</th>
  20.191 +<td><input type="checkbox" name="@sortdir"
  20.192 +           tal:attributes="checked sort_desc">
  20.193 +</td>
  20.194 +</tr>
  20.195 +
  20.196 +<tr>
  20.197 +<th i18n:translate="">Group Descending:</th>
  20.198 +<td><input type="checkbox" name="@groupdir"
  20.199 +           tal:attributes="checked group_desc">
  20.200 +</td>
  20.201 +</tr>
  20.202 +
  20.203 +<tr tal:condition="python:request.user.hasPermission('Edit', 'query')">
  20.204 + <th i18n:translate="">Query name**:</th>
  20.205 + <td tal:define="value request/form/@queryname/value | nothing">
  20.206 +  <input name="@queryname" tal:attributes="value value">
  20.207 +  <input type="hidden" name="@old-queryname" tal:attributes="value value">
  20.208 + </td>
  20.209 +</tr>
  20.210 +
  20.211 +<tr>
  20.212 +  <td>
  20.213 +   &nbsp;
  20.214 +   <input type="hidden" name="@action" value="search">
  20.215 +  </td>
  20.216 +  <td><input type="submit" value="Search" i18n:attributes="value"></td>
  20.217 +</tr>
  20.218 +
  20.219 +<tr><td>&nbsp;</td>
  20.220 + <td colspan="4" class="help">
  20.221 +  <span i18n:translate="" tal:omit-tag="true">
  20.222 +   *: The "all text" field will look in message bodies and issue titles
  20.223 +  </span><br>
  20.224 +  <span tal:condition="python:request.user.hasPermission('Edit', 'query')"
  20.225 +   i18n:translate="" tal:omit-tag="true"
  20.226 +  >
  20.227 +   **: If you supply a name, the query will be saved off and available as a
  20.228 +       link in the sidebar
  20.229 +  </span>
  20.230 + </td>
  20.231 +</tr>
  20.232 +</table>
  20.233 +
  20.234 +</form>
  20.235 +</td>
  20.236 +
  20.237 +</tal:block>
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/themes/mercurialroundup/html/keyword.item.html	Sun Jun 06 16:19:05 2010 +0200
    21.3 @@ -0,0 +1,55 @@
    21.4 +<!-- dollarId: keyword.item,v 1.3 2002/05/22 00:32:34 richard Exp dollar-->
    21.5 +<tal:block metal:use-macro="templates/page/macros/icing">
    21.6 +<title metal:fill-slot="head_title" i18n:translate="">Keyword editing - <span
    21.7 + i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title>
    21.8 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
    21.9 + i18n:translate="">Keyword editing</span>
   21.10 +<td class="content" metal:fill-slot="content">
   21.11 +
   21.12 +<table class="otherinfo" tal:define="keywords db/keyword/list"
   21.13 +       tal:condition="keywords">
   21.14 + <tr><th colspan="4" class="header" i18n:translate="">Existing Keywords</th></tr>
   21.15 + <tr tal:repeat="start python:range(0, len(keywords), 4)">
   21.16 +  <td width="25%" tal:define="batch python:utils.Batch(keywords, 4, start)"
   21.17 +      tal:repeat="keyword batch">
   21.18 +    <a tal:attributes="href string:keyword${keyword/id}"
   21.19 +       tal:content="keyword/name">keyword here</a>
   21.20 +  </td>
   21.21 + </tr>
   21.22 + <tr>
   21.23 +  <td colspan="4" style="border-top: 1px solid gray" i18n:translate="">
   21.24 +   To edit an existing keyword (for spelling or typing errors),
   21.25 +   click on its entry above.
   21.26 +  </td>
   21.27 + </tr>
   21.28 +</table>
   21.29 +
   21.30 +<p class="help" tal:condition="not:context/id" i18n:translate="">
   21.31 + To create a new keyword, enter it below and click "Submit New Entry".
   21.32 +</p>
   21.33 +
   21.34 +<form method="POST" onSubmit="return submit_once()"
   21.35 +      enctype="multipart/form-data"
   21.36 +      tal:attributes="action context/designator">
   21.37 +
   21.38 + <table class="form">
   21.39 +  <tr>
   21.40 +   <th i18n:translate="">Keyword</th>
   21.41 +   <td tal:content="structure context/name/field">name</td>
   21.42 +  </tr>
   21.43 +
   21.44 +  <tr>
   21.45 +   <td>
   21.46 +    &nbsp;
   21.47 +    <input type="hidden" name="@required" value="name">
   21.48 +    <input type="hidden" name="@template" value="item">
   21.49 +   </td>
   21.50 +   <td colspan=3 tal:content="structure context/submit">
   21.51 +    submit button will go here
   21.52 +   </td>
   21.53 +  </tr>
   21.54 + </table>
   21.55 +</form>
   21.56 +</td>
   21.57 +
   21.58 +</tal:block>
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/themes/mercurialroundup/html/msg.index.html	Sun Jun 06 16:19:05 2010 +0200
    22.3 @@ -0,0 +1,25 @@
    22.4 +<tal:block metal:use-macro="templates/page/macros/icing">
    22.5 +<title metal:fill-slot="head_title" i18n:translate=""
    22.6 + >List of messages - <span tal:replace="config/TRACKER_NAME"
    22.7 + i18n:name="tracker"/></title>
    22.8 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
    22.9 + i18n:translate="">Message listing</span>
   22.10 +<td class="content" metal:fill-slot="content">
   22.11 +<table tal:define="batch request/batch" class="messages">
   22.12 + <tr><th colspan=2 class="header" i18n:translate="">Messages</th></tr>
   22.13 + <tal:block tal:repeat="msg batch">
   22.14 +  <tr>
   22.15 +   <th tal:content="string:Author: ${msg/author}">author</th>
   22.16 +   <th tal:content="string:Date: ${msg/date}">date</th>
   22.17 +  </tr>
   22.18 +  <tr>
   22.19 +   <td colspan="2"><pre tal:content="msg/content">content</pre></td>
   22.20 +  </tr>
   22.21 + </tal:block>
   22.22 +
   22.23 + <metal:block use-macro="templates/issue.index/macros/batch-footer" />
   22.24 +
   22.25 +</table>
   22.26 +</td>
   22.27 +
   22.28 +</tal:block>
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/themes/mercurialroundup/html/msg.item.html	Sun Jun 06 16:19:05 2010 +0200
    23.3 @@ -0,0 +1,83 @@
    23.4 +<!-- dollarId: msg.item,v 1.3 2002/05/22 00:32:34 richard Exp dollar-->
    23.5 +<tal:block metal:use-macro="templates/page/macros/icing">
    23.6 +<title metal:fill-slot="head_title">
    23.7 +<tal:block condition="context/id" i18n:translate=""
    23.8 + >Message <span tal:replace="context/id" i18n:name="id"
    23.9 + /> - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker"
   23.10 +/></tal:block>
   23.11 +<tal:block condition="not:context/id" i18n:translate=""
   23.12 + >New Message - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker"
   23.13 +/></tal:block>
   23.14 +</title>
   23.15 +<tal:block metal:fill-slot="body_title">
   23.16 + <span tal:condition="python: not (context.id or context.is_edit_ok())"
   23.17 +  tal:omit-tag="python:1" i18n:translate="">New Message</span>
   23.18 + <span tal:condition="python: not context.id and context.is_edit_ok()"
   23.19 +  tal:omit-tag="python:1" i18n:translate="">New Message Editing</span>
   23.20 + <span tal:condition="python: context.id and not context.is_edit_ok()"
   23.21 +  tal:omit-tag="python:1" i18n:translate="">Message<tal:x
   23.22 +  replace="context/id" i18n:name="id" /></span>
   23.23 + <span tal:condition="python: context.id and context.is_edit_ok()"
   23.24 +  tal:omit-tag="python:1" i18n:translate="">Message<tal:x
   23.25 +  replace="context/id" i18n:name="id" /> Editing</span>
   23.26 +</tal:block>
   23.27 +<td class="content" metal:fill-slot="content">
   23.28 +
   23.29 +<p tal:condition="python:not (context.is_view_ok()
   23.30 + or request.user.hasRole('Anonymous'))" i18n:translate="">
   23.31 + You are not allowed to view this page.</p>
   23.32 +
   23.33 +<p tal:condition="python:not context.is_view_ok()
   23.34 + and request.user.hasRole('Anonymous')" i18n:translate="">
   23.35 + Please login with your username and password.</p>
   23.36 +
   23.37 +<div tal:condition="context/is_view_ok">
   23.38 +<table class="form">
   23.39 +
   23.40 +<tr>
   23.41 + <th i18n:translate="">Author</th>
   23.42 + <td tal:content="context/author"></td>
   23.43 +</tr>
   23.44 +
   23.45 +<tr>
   23.46 + <th i18n:translate="">Recipients</th>
   23.47 + <td tal:content="context/recipients"></td>
   23.48 +</tr>
   23.49 +
   23.50 +<tr>
   23.51 + <th i18n:translate="">Date</th>
   23.52 + <td tal:content="context/date"></td>
   23.53 +</tr>
   23.54 +</table>
   23.55 +
   23.56 +<table class="messages">
   23.57 + <tr><th colspan=2 class="header" i18n:translate="">Content</th></tr>
   23.58 + <tr>
   23.59 +  <td class="content" colspan=2><pre tal:content="structure context/content/hyperlinked"></pre></td>
   23.60 + </tr>
   23.61 +</table>
   23.62 +
   23.63 +<table class="files" tal:condition="context/files">
   23.64 + <tr><th colspan="2" class="header" i18n:translate="">Files</th></tr>
   23.65 + <tr>
   23.66 +  <th i18n:translate="">File name</th>
   23.67 +  <th i18n:translate="">Uploaded</th>
   23.68 + </tr>
   23.69 + <tr tal:repeat="file context/files">
   23.70 +  <td>
   23.71 +   <a tal:attributes="href string:file${file/id}/${file/name}"
   23.72 +      tal:content="file/name">dld link</a>
   23.73 +  </td>
   23.74 +  <td>
   23.75 +   <span tal:content="file/creator">creator's name</span>,
   23.76 +   <span tal:content="file/creation">creation date</span>
   23.77 +  </td>
   23.78 + </tr>
   23.79 +</table>
   23.80 +
   23.81 +<tal:block tal:replace="structure context/history" />
   23.82 +
   23.83 +</div>
   23.84 +</td>
   23.85 +
   23.86 +</tal:block>
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/themes/mercurialroundup/html/page.html	Sun Jun 06 16:19:05 2010 +0200
    24.3 @@ -0,0 +1,347 @@
    24.4 +<!-- vim:sw=2 sts=2
    24.5 +--><tal:block metal:define-macro="icing"
    24.6 +><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    24.7 +<html>
    24.8 +<head>
    24.9 +<title metal:define-slot="head_title">title goes here</title>
   24.10 +<link rel="stylesheet" type="text/css" href="@@file/style.css">
   24.11 +<meta http-equiv="Content-Type"
   24.12 + tal:attributes="content string:text/html;; charset=${request/client/charset}" />
   24.13 +<script tal:replace="structure request/base_javascript">
   24.14 +</script>
   24.15 +<metal:x define-slot="more-javascript" />
   24.16 +
   24.17 +</head>
   24.18 +<body class="body">
   24.19 +
   24.20 +<table class="body"
   24.21 + tal:define="
   24.22 +kw_edit python:request.user.hasPermission('Edit', 'keyword');
   24.23 +kw_create python:request.user.hasPermission('Create', 'keyword');
   24.24 +kw_edit_link python:kw_edit and db.keyword.list();
   24.25 +columns string:id,activity,title,creator,status;
   24.26 +columns_showall string:id,activity,title,creator,assignedto,status;
   24.27 +status_notresolved string:-1,1,2,3,4,5,6,7;
   24.28 +"
   24.29 +>
   24.30 +
   24.31 +<tr>
   24.32 + <td class="page-header-left">&nbsp;</td>
   24.33 + <td class="page-header-top">
   24.34 +   <div id="searchbox">
   24.35 +     <form method="GET" action="issue">
   24.36 +       <input type="hidden" name="@columns"
   24.37 +	      tal:attributes="value columns_showall"
   24.38 +	      value="id,activity,title,creator,assignedto,status"/>
   24.39 +       <input type="hidden" name="@sort" value="activity"/>
   24.40 +       <input type="hidden" name="@group" value="priority"/>
   24.41 +       <input id="search-text" name="@search_text" size="10"
   24.42 +              tal:attributes="value request/search_text | default" />
   24.43 +       <input type="submit" id="submit" name="submit" value="Search"
   24.44 +              i18n:attributes="value" />
   24.45 +     </form>
   24.46 +   </div>
   24.47 +   <div id="body-title">
   24.48 +     <h2><span metal:define-slot="body_title">body title</span></h2>
   24.49 +   </div>
   24.50 + </td>
   24.51 +</tr>
   24.52 +
   24.53 +<tr>
   24.54 + <td rowspan="2" valign="top" class="sidebar">
   24.55 +  <p class="classblock"
   24.56 +     tal:condition="python:request.user.hasPermission('View', 'query')">
   24.57 +   <span i18n:translate=""
   24.58 +    ><b>Your Queries</b> (<a href="query?@template=edit">edit</a>)</span><br>
   24.59 +   <tal:block tal:repeat="qs request/user/queries">
   24.60 +    <a href="#" tal:attributes="href string:${qs/klass}?${qs/url}&@dispname=${qs/name}"
   24.61 +       tal:content="qs/name">link</a><br>
   24.62 +   </tal:block>
   24.63 +  </p>
   24.64 +
   24.65 +  <form method="POST" tal:attributes="action request/base">
   24.66 +   <p class="classblock"
   24.67 +       tal:condition="python:request.user.hasPermission('View', 'issue')">
   24.68 +    <b i18n:translate="">Issues</b><br>
   24.69 +    <span tal:condition="python:request.user.hasPermission('Create', 'issue')">
   24.70 +      <a href="issue?@template=item" i18n:translate="">Create New</a><br>
   24.71 +    </span>
   24.72 +    <a href="#"
   24.73 +       tal:attributes="href python:request.indexargs_url('issue', {
   24.74 +      '@sort': '-activity',
   24.75 +      '@group': 'priority',
   24.76 +      '@filter': 'status,assignedto',
   24.77 +      '@columns': columns,
   24.78 +      '@search_text': '',
   24.79 +      'status': status_notresolved,
   24.80 +      'assignedto': '-1',
   24.81 +      '@dispname': i18n.gettext('Show Unassigned'),
   24.82 +     })"
   24.83 +       i18n:translate="">Show Unassigned</a><br>
   24.84 +    <a href="#"
   24.85 +       tal:attributes="href python:request.indexargs_url('issue', {
   24.86 +      '@sort': '-activity',
   24.87 +      '@group': 'priority',
   24.88 +      '@filter': 'status',
   24.89 +      '@columns': columns_showall,
   24.90 +      '@search_text': '',
   24.91 +      'status': status_notresolved,
   24.92 +      '@dispname': i18n.gettext('Show All'),
   24.93 +     })"
   24.94 +       i18n:translate="">Show All</a><br>
   24.95 +    <a href="issue?@template=search" i18n:translate="">Search</a><br>
   24.96 +    <input type="submit" class="form-small" value="Show issue:"
   24.97 +     i18n:attributes="value"><input class="form-small" size="4"
   24.98 +     type="text" name="@number">
   24.99 +    <input type="hidden" name="@type" value="issue">
  24.100 +    <input type="hidden" name="@action" value="show">
  24.101 +   </p>
  24.102 +  </form>
  24.103 +
  24.104 +  <p class="classblock"
  24.105 +     tal:condition="python:kw_edit or kw_create">
  24.106 +   <b i18n:translate="">Keywords</b><br>
  24.107 +   <span tal:condition="python:request.user.hasPermission('Create', 'keyword')">
  24.108 +    <a href="keyword?@template=item" i18n:translate="">Create New</a><br>
  24.109 +   </span>
  24.110 +   <span tal:condition="kw_edit_link">
  24.111 +    <a href="keyword?@template=item" i18n:translate="">Edit Existing</a><br>
  24.112 +   </span>
  24.113 +  </p>
  24.114 +
  24.115 +  <p class="classblock"
  24.116 +       tal:condition="python:request.user.hasPermission('View', 'user')">
  24.117 +   <b i18n:translate="">Administration</b><br>
  24.118 +   <span tal:condition="python:request.user.hasPermission('Edit', None)">
  24.119 +    <a href="home?@template=classlist" i18n:translate="">Class List</a><br>
  24.120 +   </span>
  24.121 +   <span tal:condition="python:request.user.hasPermission('View', 'user')
  24.122 +                            or request.user.hasPermission('Edit', 'user')">
  24.123 +    <a href="user"  i18n:translate="">User List</a><br>
  24.124 +   </span>
  24.125 +   <a tal:condition="python:request.user.hasPermission('Create', 'user')"
  24.126 +      href="user?@template=item" i18n:translate="">Add User</a>
  24.127 +  </p>
  24.128 +
  24.129 +  <form method="POST" tal:condition="python:request.user.username=='anonymous'"
  24.130 +        tal:attributes="action request/base">
  24.131 +   <p class="userblock">
  24.132 +    <b i18n:translate="">Login</b><br>
  24.133 +    <input size="10" name="__login_name"><br>
  24.134 +    <input size="10" type="password" name="__login_password"><br>
  24.135 +    <input type="hidden" name="@action" value="Login">
  24.136 +    <input type="checkbox" name="remember" id="remember">
  24.137 +    <label for="remember" i18n:translate="">Remember me?</label><br>
  24.138 +    <input type="submit" value="Login" i18n:attributes="value"><br>
  24.139 +    <input type="hidden" name="__came_from" tal:attributes="value string:${request/base}${request/env/PATH_INFO}">
  24.140 +    <span tal:replace="structure request/indexargs_form" />
  24.141 +    <a href="user?@template=register"
  24.142 +       tal:condition="python:request.user.hasPermission('Register', 'user')"
  24.143 +     i18n:translate="">Register</a><br>
  24.144 +    <a href="user?@template=forgotten" i18n:translate="">Lost&nbsp;your&nbsp;login?</a><br>
  24.145 +   </p>
  24.146 +  </form>
  24.147 +
  24.148 +  <p class="userblock" tal:condition="python:request.user.username != 'anonymous'">
  24.149 +   <b i18n:translate="">Hello, <span i18n:name="user"
  24.150 +    tal:replace="python:request.user.username.plain(escape=1)">username</span></b><br>
  24.151 +    <a href="#"
  24.152 +       tal:attributes="href python:request.indexargs_url('issue', {
  24.153 +      '@sort': '-activity',
  24.154 +      '@group': 'priority',
  24.155 +      '@filter': 'status,assignedto',
  24.156 +      '@columns': 'id,activity,title,creator,status',
  24.157 +      '@search_text': '',
  24.158 +      'status': status_notresolved,
  24.159 +      'assignedto': request.user.id,
  24.160 +      '@dispname': i18n.gettext('Your Issues'),
  24.161 +     })"
  24.162 +    i18n:translate="">Your Issues</a><br>
  24.163 +   <a href="#" tal:attributes="href string:user${request/user/id}"
  24.164 +    i18n:translate="">Your Details</a><br>
  24.165 +   <a href="#" tal:attributes="href python:request.indexargs_url('',
  24.166 +       {'@action':'logout'})" i18n:translate="">Logout</a>
  24.167 +  </p>
  24.168 +  <p class="userblock">
  24.169 +   <b i18n:translate="">Help</b><br>
  24.170 +   <a href="http://www.roundup-tracker.org"
  24.171 +    i18n:translate="">Roundup docs</a>
  24.172 +  </p>
  24.173 + </td>
  24.174 + <td>
  24.175 +  <p tal:condition="options/error_message | nothing" class="error-message"
  24.176 +     tal:repeat="m options/error_message" tal:content="structure m" />
  24.177 +  <p tal:condition="options/ok_message | nothing" class="ok-message">
  24.178 +    <span tal:repeat="m options/ok_message"
  24.179 +       tal:content="structure string:$m <br/ > " />
  24.180 +     <a class="form-small" tal:attributes="href request/current_url"
  24.181 +        i18n:translate="">clear this message</a>
  24.182 +  </p>
  24.183 + </td>
  24.184 +</tr>
  24.185 +<tr>
  24.186 + <td class="content" metal:define-slot="content">Page content goes here</td>
  24.187 +</tr>
  24.188 +
  24.189 +</table>
  24.190 +
  24.191 +<pre tal:condition="request/form/debug | nothing" tal:content="request">
  24.192 +</pre>
  24.193 +
  24.194 +</body>
  24.195 +</html>
  24.196 +</tal:block>
  24.197 +
  24.198 +<!--
  24.199 +The following macros are intended to be used in search pages.
  24.200 +
  24.201 +The invoking context must define a "name" variable which names the
  24.202 +property being searched.
  24.203 +
  24.204 +See issue.search.html in the classic template for examples.
  24.205 +-->
  24.206 +
  24.207 +<!-- creates a th and a label: -->
  24.208 +<th metal:define-macro="th_label"
  24.209 +    tal:define="required required | python:[]"
  24.210 +    tal:attributes="class python:(name in required) and 'required' or nothing">
  24.211 +  <label tal:attributes="for name" tal:content="label" i18n:translate="">text</label>
  24.212 +	<metal:x define-slot="behind_the_label" />
  24.213 +</th>
  24.214 +
  24.215 +<td metal:define-macro="search_input">
  24.216 +  <input tal:attributes="value python:request.form.getvalue(name) or nothing;
  24.217 +                         name name;
  24.218 +                         id name">
  24.219 +</td>
  24.220 +
  24.221 +<td metal:define-macro="search_date">
  24.222 +  <input tal:attributes="value python:request.form.getvalue(name) or nothing;
  24.223 +                         name name;
  24.224 +                         id name">
  24.225 +  <a class="classhelp"
  24.226 +	 tal:attributes="href python:'''javascript:help_window('issue?@template=calendar&property=%s&form=itemSynopsis', 300, 200)'''%name">(cal)</a>
  24.227 +</td>
  24.228 +
  24.229 +<td metal:define-macro="search_popup">
  24.230 +  <!--
  24.231 +    context needs to specify the popup "columns" as a comma-separated
  24.232 +    string (eg. "id,title" or "id,name,description") as well as name
  24.233 +  -->
  24.234 +  <input tal:attributes="value python:request.form.getvalue(name) or nothing;
  24.235 +                         name name;
  24.236 +                         id name">
  24.237 +  <span tal:replace="structure python:db.issue.classhelp(columns,
  24.238 +                                      property=name)" />
  24.239 +</td>
  24.240 +
  24.241 +<td metal:define-macro="search_select">
  24.242 +  <select tal:attributes="name name; id name"
  24.243 +          tal:define="value python:request.form.getvalue(name)">
  24.244 +    <option value="" i18n:translate="">don't care</option>
  24.245 +    <metal:slot define-slot="extra_options" />
  24.246 +    <option value="" i18n:translate="" disabled="disabled">------------</option>
  24.247 +    <option tal:repeat="s python:db[db_klass].list()"
  24.248 +            tal:attributes="value s/id; selected python:value == s.id"
  24.249 +            tal:content="python:s[db_content]"></option>
  24.250 +  </select>
  24.251 +</td>
  24.252 +
  24.253 +<!-- like search_select, but translates the further values.
  24.254 +Could extend it (METAL 1.1 attribute "extend-macro")
  24.255 +-->
  24.256 +<td metal:define-macro="search_select_translated">
  24.257 +  <select tal:attributes="name name; id name"
  24.258 +          tal:define="value python:request.form.getvalue(name)">
  24.259 +    <option value="" i18n:translate="">don't care</option>
  24.260 +    <metal:slot define-slot="extra_options" />
  24.261 +    <option value="" i18n:translate="" disabled="disabled">------------</option>
  24.262 +    <option tal:repeat="s python:db[db_klass].list()"
  24.263 +            tal:attributes="value s/id; selected python:value == s.id"
  24.264 +						tal:content="python:s[db_content]"
  24.265 +						i18n:translate=""></option>
  24.266 +  </select>
  24.267 +</td>
  24.268 +
  24.269 +<!-- currently, there is no convenient API to get a list of all roles -->
  24.270 +<td metal:define-macro="search_select_roles"
  24.271 +	  tal:define="onchange onchange | nothing">
  24.272 +  <select name=roles id=roles tal:attributes="onchange onchange">
  24.273 +    <option value="" i18n:translate="">don't care</option>
  24.274 +    <option value="" i18n:translate="" disabled="disabled">------------</option>
  24.275 +    <option value="User">User</option>
  24.276 +    <option value="Admin">Admin</option>
  24.277 +    <option value="Anonymous">Anonymous</option>
  24.278 +  </select>
  24.279 +</td>
  24.280 +
  24.281 +<td metal:define-macro="search_multiselect">
  24.282 +  <input tal:attributes="value python:request.form.getvalue(name) or nothing;
  24.283 +                         name name;
  24.284 +                         id name">
  24.285 +  <span tal:replace="structure python:db[db_klass].classhelp(db_content,
  24.286 +                                        property=name, width='600')" />
  24.287 +</td>
  24.288 +
  24.289 +<td metal:define-macro="search_checkboxes">
  24.290 + <ul class="search-checkboxes"
  24.291 +     tal:define="value python:request.form.getvalue(name);
  24.292 +                 values python:value and value.split(',') or []">
  24.293 + <li tal:repeat="s python:db[db_klass].list()">
  24.294 +  <input type="checkbox" tal:attributes="name name; id string:$name-${s/id};
  24.295 +    value s/id; checked python:s.id in values" />
  24.296 +  <label tal:attributes="for string:$name-${s/id}"
  24.297 +         tal:content="python:s[db_content]" />
  24.298 + </li>
  24.299 + <li metal:define-slot="no_value_item">
  24.300 +  <input type="checkbox" value="-1" tal:attributes="name name;
  24.301 +     id string:$name--1; checked python:value == '-1'" />
  24.302 +  <label tal:attributes="for string:$name--1" i18n:translate="">no value</label>
  24.303 + </li>
  24.304 + </ul>
  24.305 +</td>
  24.306 +
  24.307 +<td metal:define-macro="column_input">
  24.308 +  <input type="checkbox" name="@columns"
  24.309 +         tal:attributes="value name;
  24.310 +                         checked python:name in cols">
  24.311 +</td>
  24.312 +
  24.313 +<td metal:define-macro="sort_input">
  24.314 +  <input type="radio" name="@sort"
  24.315 +         tal:attributes="value name;
  24.316 +                         checked python:name == sort_on">
  24.317 +</td>
  24.318 +
  24.319 +<td metal:define-macro="group_input">
  24.320 +  <input type="radio" name="@group"
  24.321 +         tal:attributes="value name;
  24.322 +                         checked python:name == group_on">
  24.323 +</td>
  24.324 +
  24.325 +<!--
  24.326 +The following macros are intended for user editing.
  24.327 +
  24.328 +The invoking context must define a "name" variable which names the
  24.329 +property being searched; the "edit_ok" variable tells whether the
  24.330 +current user is allowed to edit.
  24.331 +
  24.332 +See user.item.html in the classic template for examples.
  24.333 +-->
  24.334 +<script metal:define-macro="user_utils" type="text/javascript" src="@@file/user_utils.js"></script>
  24.335 +
  24.336 +<!-- src: value will be re-used for other input fields -->
  24.337 +<input metal:define-macro="user_src_input"
  24.338 +    type="text" tal:attributes="onblur python:edit_ok and 'split_name(this)';
  24.339 +    id name; name name; value value; readonly not:edit_ok"
  24.340 +    value="heinz.kunz">
  24.341 +<!-- normal: no re-using -->
  24.342 +<input metal:define-macro="user_normal_input" type="text"
  24.343 +    tal:attributes="id name; name name; value value; readonly not:edit_ok"
  24.344 +    value="heinz">
  24.345 +<!-- password: type; no initial value -->
  24.346 +    <input metal:define-macro="user_pw_input" type="password"
  24.347 +    tal:attributes="id name; name name; readonly not:edit_ok" value="">
  24.348 +    <input metal:define-macro="user_confirm_input" type="password"
  24.349 +    tal:attributes="id name; name string:@confirm@$name; readonly not:edit_ok" value="">
  24.350 +
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/themes/mercurialroundup/html/query.edit.html	Sun Jun 06 16:19:05 2010 +0200
    25.3 @@ -0,0 +1,111 @@
    25.4 +<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar-->
    25.5 +<tal:block metal:use-macro="templates/page/macros/icing">
    25.6 +<title metal:fill-slot="head_title" i18n:translate=""
    25.7 + >"Your Queries" Editing - <span tal:replace="config/TRACKER_NAME"
    25.8 + i18n:name="tracker" /></title>
    25.9 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
   25.10 + i18n:translate="">"Your Queries" Editing</span>
   25.11 +
   25.12 +<td class="content" metal:fill-slot="content">
   25.13 +
   25.14 +<span tal:condition="not:context/is_edit_ok"
   25.15 + i18n:translate="">You are not allowed to edit queries.</span>
   25.16 +
   25.17 +<script language="javascript">
   25.18 +// This exists solely because I can't figure how to get the & into an
   25.19 +// attributes TALES expression, and so it keeps getting quoted.
   25.20 +function retire(qid) {
   25.21 +    window.location = 'query'+qid+'?@action=retire&@template=edit';
   25.22 +}
   25.23 +</script>
   25.24 +
   25.25 +<form method="POST" onSubmit="return submit_once()" action="query"
   25.26 +      enctype="multipart/form-data" tal:condition="context/is_edit_ok">
   25.27 +
   25.28 +<table class="list" width="100%"
   25.29 +       tal:define="uid request/user/id; mine request/user/queries">
   25.30 +
   25.31 +<tr><th i18n:translate="">Query</th>
   25.32 +    <th i18n:translate="">Include in "Your Queries"</th>
   25.33 +    <th i18n:translate="">Edit</th>
   25.34 +    <th i18n:translate="">Private to you?</th>
   25.35 +    <th>&nbsp;</th>
   25.36 +</tr>
   25.37 +
   25.38 +<tr tal:repeat="query mine">
   25.39 + <tal:block condition="query/is_retired">
   25.40 +
   25.41 + <td><a tal:attributes="href string:${query/klass}?${query/url}"
   25.42 +        tal:content="query/name">query</a></td>
   25.43 +
   25.44 + <td metal:define-macro="include">
   25.45 +  <select tal:condition="python:query.id not in mine"
   25.46 +          tal:attributes="name string:user${uid}@add@queries">
   25.47 +    <option value="" i18n:translate="">leave out</option>
   25.48 +    <option tal:attributes="value query/id" i18n:translate="">include</option>
   25.49 +  </select>
   25.50 +  <select tal:condition="python:query.id in mine"
   25.51 +          tal:attributes="name string:user${uid}@remove@queries">
   25.52 +    <option value="" i18n:translate="">leave in</option>
   25.53 +    <option tal:attributes="value query/id" i18n:translate="">remove</option>
   25.54 +  </select>
   25.55 + </td>
   25.56 +
   25.57 + <td colspan="3" i18n:translate="">[query is retired]</td>
   25.58 +
   25.59 + <!-- <td> maybe offer "restore" some day </td> -->
   25.60 + </tal:block>
   25.61 +</tr>
   25.62 +
   25.63 +<tr tal:repeat="query mine">
   25.64 + <tal:block condition="not:query/is_retired">
   25.65 + <td><a tal:attributes="href string:${query/klass}?${query/url}"
   25.66 +        tal:content="query/name">query</a></td>
   25.67 +
   25.68 + <td metal:use-macro="template/macros/include" />
   25.69 +
   25.70 + <td><a tal:attributes="href string:query${query/id}" i18n:translate="">edit</a></td>
   25.71 +
   25.72 + <td>
   25.73 +  <select tal:attributes="name string:query${query/id}@private_for">
   25.74 +   <option tal:attributes="selected python:query.private_for == uid;
   25.75 +           value uid" i18n:translate="">yes</option>
   25.76 +   <option tal:attributes="selected python:query.private_for == None"
   25.77 +           value="-1" i18n:translate="">no</option>
   25.78 +  </select>
   25.79 + </td>
   25.80 +
   25.81 + <td>
   25.82 +  <input type="button" value="Delete" i18n:attributes="value"
   25.83 +  tal:attributes="onClick python:'''retire('%s')'''%query.id">
   25.84 +  </td>
   25.85 +  </tal:block>
   25.86 +</tr>
   25.87 +
   25.88 +<tr tal:define="queries python:db.query.filter(filterspec={'private_for':None})"
   25.89 +     tal:repeat="query queries">
   25.90 + <tal:block condition="python: query.creator != uid">
   25.91 + <td><a tal:attributes="href string:${query/klass}?${query/url}"
   25.92 +        tal:content="query/name">query</a></td>
   25.93 +
   25.94 + <td metal:use-macro="template/macros/include" />
   25.95 +
   25.96 + <td colspan="3" tal:condition="query/is_edit_ok">
   25.97 +  <a tal:attributes="href string:query${query/id}" i18n:translate="">edit</a>
   25.98 + </td>
   25.99 + <td tal:condition="not:query/is_edit_ok" colspan="3"
  25.100 +    i18n:translate="">[not yours to edit]</td>
  25.101 + </tal:block>
  25.102 +</tr>
  25.103 +
  25.104 +<tr><td colspan="5">
  25.105 +   <input type="hidden" name="@action" value="edit">
  25.106 +   <input type="hidden" name="@template" value="edit">
  25.107 +   <input type="submit" value="Save Selection" i18n:attributes="value">
  25.108 +</td></tr>
  25.109 +
  25.110 +</table>
  25.111 +
  25.112 +</form>
  25.113 +</td>
  25.114 +</tal:block>
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/themes/mercurialroundup/html/query.item.html	Sun Jun 06 16:19:05 2010 +0200
    26.3 @@ -0,0 +1,3 @@
    26.4 +<!-- query.item -->
    26.5 +<span tal:replace="structure context/renderQueryForm" />
    26.6 +
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/themes/mercurialroundup/html/style.css	Sun Jun 06 16:19:05 2010 +0200
    27.3 @@ -0,0 +1,438 @@
    27.4 +/* main page styles */
    27.5 +body.body {
    27.6 +  font-family: sans-serif, Arial, Helvetica;
    27.7 +  background-color: white;
    27.8 +  color: #333;
    27.9 +  margin: 0;
   27.10 +}
   27.11 +a[href]:hover {
   27.12 +  color:blue;
   27.13 +  text-decoration: underline;
   27.14 +}
   27.15 +a[href], a[href]:link {
   27.16 +  color:blue;
   27.17 +  text-decoration: none;
   27.18 +}
   27.19 +
   27.20 +table.body {
   27.21 +  border: 0;
   27.22 +  padding: 0;
   27.23 +  border-spacing: 0;
   27.24 +  border-collapse: separate;
   27.25 +}
   27.26 +
   27.27 +td.page-header-left {
   27.28 +  padding: 5px;
   27.29 +  border-bottom: 1px solid #444;
   27.30 +}
   27.31 +td.sidebar {
   27.32 +  padding: 1px 0 0 1px;
   27.33 +  white-space: nowrap;
   27.34 +}
   27.35 +
   27.36 +/* don't display the sidebar when printing */
   27.37 +@media print {
   27.38 +    td.page-header-left {
   27.39 +        display: none;
   27.40 +    }
   27.41 +    td.sidebar {
   27.42 +        display: none;
   27.43 +    }
   27.44 +    .index-controls {
   27.45 +        display: none;
   27.46 +    }
   27.47 +    #searchbox {
   27.48 +        display: none;
   27.49 +    }
   27.50 +}
   27.51 +
   27.52 +td.page-header-top {
   27.53 +  padding: 5px;
   27.54 +  border-bottom: 1px solid #444;
   27.55 +}
   27.56 +
   27.57 +div#searchbox {
   27.58 +  float: right;
   27.59 +  padding-top: 1em;
   27.60 +}
   27.61 +
   27.62 +div#searchbox input#search-text {
   27.63 +  width: 10em;
   27.64 +}
   27.65 +
   27.66 +form {
   27.67 +  margin: 0;
   27.68 +}
   27.69 +
   27.70 +textarea {
   27.71 +    font-family: monospace;
   27.72 +}
   27.73 +
   27.74 +td.sidebar p.classblock {
   27.75 +  padding: 2px 5px 2px 5px;
   27.76 +  margin: 1px;
   27.77 +  border: 1px solid #444;
   27.78 +  background-color: #eee;
   27.79 +}
   27.80 +
   27.81 +td.sidebar p.userblock {
   27.82 +  padding: 2px 5px 2px 5px;
   27.83 +  margin: 1px 1px 1px 1px;
   27.84 +  border: 1px solid #444;
   27.85 +  background-color: #eef;
   27.86 +}
   27.87 +
   27.88 +.form-small {
   27.89 +  padding: 0;
   27.90 +  font-size: 75%;
   27.91 +}
   27.92 +
   27.93 +
   27.94 +td.content {
   27.95 +  padding: 1px 5px 1px 5px;
   27.96 +  vertical-align: top;
   27.97 +  width: 100%;
   27.98 +}
   27.99 +
  27.100 +td.date, th.date { 
  27.101 +  white-space: nowrap;
  27.102 +}
  27.103 +
  27.104 +p.ok-message {
  27.105 +  background-color: #22bb22;
  27.106 +  padding: 5px;
  27.107 +  color: white;
  27.108 +  font-weight: bold;
  27.109 +}
  27.110 +p.error-message {
  27.111 +  background-color: #bb2222;
  27.112 +  padding: 5px;
  27.113 +  color: white;
  27.114 +  font-weight: bold;
  27.115 +}
  27.116 +p.error-message a[href] {
  27.117 +  color: white;
  27.118 +  text-decoration: underline;
  27.119 +}
  27.120 +
  27.121 +
  27.122 +/* style for search forms */
  27.123 +ul.search-checkboxes {
  27.124 +    display: inline;
  27.125 +    padding: 0;
  27.126 +    list-style: none;
  27.127 +}
  27.128 +ul.search-checkboxes > li {
  27.129 +    display: inline;
  27.130 +    padding-right: .5em;
  27.131 +}
  27.132 +
  27.133 +
  27.134 +/* style for forms */
  27.135 +table.form {
  27.136 +  padding: 2px;
  27.137 +  border-spacing: 0;
  27.138 +  border-collapse: separate;
  27.139 +}
  27.140 +
  27.141 +table.form th {
  27.142 +  color: #338;
  27.143 +  text-align: right;
  27.144 +  vertical-align: top;
  27.145 +  font-weight: normal;
  27.146 +  white-space: nowrap;
  27.147 +}
  27.148 +
  27.149 +table.form th.header {
  27.150 +  font-weight: bold;
  27.151 +  background-color: #eef;
  27.152 +  text-align: left;
  27.153 +}
  27.154 +
  27.155 +table.form th.required {
  27.156 +  font-weight: bold;
  27.157 +}
  27.158 +
  27.159 +table.form td {
  27.160 +  color: #333;
  27.161 +  empty-cells: show;
  27.162 +  vertical-align: top;
  27.163 +}
  27.164 +
  27.165 +table.form td.optional {
  27.166 +  font-weight: bold;
  27.167 +  font-style: italic;
  27.168 +}
  27.169 +
  27.170 +table.form td.html {
  27.171 +  color: #777;
  27.172 +}
  27.173 +
  27.174 +/* style for lists */
  27.175 +table.list {
  27.176 +  border-spacing: 0;
  27.177 +  border-collapse: separate;
  27.178 +  width: 100%;
  27.179 +}
  27.180 +
  27.181 +table.list th {
  27.182 +  padding: 0 4px 0 4px;
  27.183 +  color: #404070;
  27.184 +  background-color: #eef;
  27.185 +  border: 1px solid white;
  27.186 +  vertical-align: top;
  27.187 +  empty-cells: show;
  27.188 +}
  27.189 +table.list th a[href]:hover { color: #404070 }
  27.190 +table.list th a[href]:link { color: #404070 }
  27.191 +table.list th a[href] { color: #404070 }
  27.192 +table.list th.group {
  27.193 +  background-color: #f4f4ff;
  27.194 +  text-align: center;
  27.195 +}
  27.196 +
  27.197 +table.list td {
  27.198 +  padding: 0 4px 0 4px;
  27.199 +  border: 1px solid white;
  27.200 +  color: #404070;
  27.201 +  background-color: #efefef;
  27.202 +  vertical-align: top;
  27.203 +  empty-cells: show;
  27.204 +}
  27.205 +
  27.206 +table.list tr.navigation th {
  27.207 +  width: 33%;
  27.208 +  border-style: hidden;
  27.209 +  text-align: center;
  27.210 +}
  27.211 +table.list tr.navigation td {
  27.212 +    border: none
  27.213 +}
  27.214 +table.list tr.navigation th:first-child {
  27.215 +  text-align: left;
  27.216 +}
  27.217 +table.list tr.navigation th:last-child {
  27.218 +  text-align: right;
  27.219 +}
  27.220 +
  27.221 +
  27.222 +/* style for message displays */
  27.223 +table.messages {
  27.224 +  border-spacing: 0;
  27.225 +  border-collapse: separate;
  27.226 +  width: 100%;
  27.227 +}
  27.228 +
  27.229 +table.messages th.header{
  27.230 +  padding-top: 10px;
  27.231 +  border-bottom: 1px solid gray;
  27.232 +  font-weight: bold;
  27.233 +  background-color: white;
  27.234 +  color: #707040;
  27.235 +}
  27.236 +
  27.237 +table.messages th {
  27.238 +  font-weight: bold;
  27.239 +  color: black;
  27.240 +  text-align: left;
  27.241 +  border-bottom: 1px solid #afafaf;
  27.242 +}
  27.243 +
  27.244 +table.messages td {
  27.245 +  font-family: monospace;
  27.246 +  background-color: #efefef;
  27.247 +  border-bottom: 1px solid #afafaf;
  27.248 +  color: black;
  27.249 +  empty-cells: show;
  27.250 +  border-right: 1px solid #afafaf;
  27.251 +  vertical-align: top;
  27.252 +  padding: 2px 5px 2px 5px;
  27.253 +}
  27.254 +
  27.255 +table.messages td:first-child {
  27.256 +  border-left: 1px solid #afafaf;
  27.257 +  border-right: 1px solid #afafaf;
  27.258 +}
  27.259 +
  27.260 +/* style for file displays */
  27.261 +table.files {
  27.262 +  border-spacing: 0;
  27.263 +  border-collapse: separate;
  27.264 +  width: 100%;
  27.265 +}
  27.266 +
  27.267 +table.files th.header{
  27.268 +  padding-top: 10px;
  27.269 +  border-bottom: 1px solid gray;
  27.270 +  font-weight: bold;
  27.271 +  background-color: white;
  27.272 +  color: #707040;
  27.273 +}
  27.274 +
  27.275 +table.files th {
  27.276 +  border-bottom: 1px solid #afafaf;
  27.277 +  font-weight: bold;
  27.278 +  text-align: left;
  27.279 +}
  27.280 +
  27.281 +table.files td {
  27.282 +  font-family: monospace;
  27.283 +  empty-cells: show;
  27.284 +}
  27.285 +
  27.286 +/* style for history displays */
  27.287 +table.history {
  27.288 +  border-spacing: 0;
  27.289 +  border-collapse: separate;
  27.290 +  width: 100%;
  27.291 +}
  27.292 +
  27.293 +table.history th.header{
  27.294 +  padding-top: 10px;
  27.295 +  border-bottom: 1px solid gray;
  27.296 +  font-weight: bold;
  27.297 +  background-color: white;
  27.298 +  color: #707040;
  27.299 +  font-size: 100%;
  27.300 +}
  27.301 +
  27.302 +table.history th {
  27.303 +  border-bottom: 1px solid #afafaf;
  27.304 +  font-weight: bold;
  27.305 +  text-align: left;
  27.306 +  font-size: 90%;
  27.307 +}
  27.308 +
  27.309 +table.history td {
  27.310 +  font-size: 90%;
  27.311 +  vertical-align: top;
  27.312 +  empty-cells: show;
  27.313 +}
  27.314 +
  27.315 +
  27.316 +/* style for class list */
  27.317 +table.classlist {
  27.318 +  border-spacing: 0;
  27.319 +  border-collapse: separate;
  27.320 +  width: 100%;
  27.321 +}
  27.322 +
  27.323 +table.classlist th.header{
  27.324 +  padding-top: 10px;
  27.325 +  border-bottom: 1px solid gray;
  27.326 +  font-weight: bold;
  27.327 +  background-color: white;
  27.328 +  color: #707040;
  27.329 +}
  27.330 +
  27.331 +table.classlist th {
  27.332 +  font-weight: bold;
  27.333 +  text-align: left;
  27.334 +}
  27.335 +
  27.336 +
  27.337 +/* style for class help display */
  27.338 +table.classhelp {      /* the table-layout: fixed;        */ 
  27.339 +  table-layout: fixed; /* compromises quality for speed   */
  27.340 +  overflow: hidden;
  27.341 +  font-size: .9em;
  27.342 +  padding-bottom: 3em;
  27.343 +}
  27.344 +
  27.345 +table.classhelp th {
  27.346 +  font-weight: normal;
  27.347 +  text-align: left;
  27.348 +  color: #444;
  27.349 +  background-color: #efefef;
  27.350 +  border-bottom: 1px solid #afafaf;
  27.351 +  border-top: 1px solid #afafaf;
  27.352 +  text-transform: uppercase;
  27.353 +  vertical-align: middle;
  27.354 +  line-height:1.5em;
  27.355 +}
  27.356 +
  27.357 +table.classhelp td {
  27.358 +  vertical-align: middle;
  27.359 +  padding-right: .2em;
  27.360 +  border-bottom: 1px solid #efefef;
  27.361 +  text-align: left;
  27.362 +  empty-cells: show;
  27.363 +  white-space: nowrap;
  27.364 +  vertical-align: middle;
  27.365 +}
  27.366 +
  27.367 +table.classhelp tr:hover {
  27.368 +  background-color: #eee;
  27.369 +}
  27.370 +
  27.371 +label.classhelp-label {
  27.372 +  cursor: pointer;
  27.373 +}
  27.374 +
  27.375 +#classhelp-controls {
  27.376 +  position: fixed;
  27.377 +  display: block;
  27.378 +  top: auto;
  27.379 +  right: 0;
  27.380 +  bottom: 0;
  27.381 +  left: 0;
  27.382 +  padding: .5em;
  27.383 +  border-top: 2px solid #444;
  27.384 +  background-color: #eee;
  27.385 +}
  27.386 +
  27.387 +#classhelp-controls input.apply {
  27.388 +  width: 7em;
  27.389 +  font-weight: bold;
  27.390 +  margin-right: 2em;
  27.391 +  margin-left: 2em;
  27.392 +}
  27.393 +
  27.394 +#classhelp-controls input.preview {
  27.395 +   margin-right: 3em;
  27.396 +   margin-left: 1em;
  27.397 +}
  27.398 +
  27.399 +/* style for "other" displays */
  27.400 +table.otherinfo {
  27.401 +  border-spacing: 0;
  27.402 +  border-collapse: separate;
  27.403 +  width: 100%;
  27.404 +}
  27.405 +
  27.406 +table.otherinfo th.header{
  27.407 +  padding-top: 10px;
  27.408 +  border-bottom: 1px solid gray;
  27.409 +  font-weight: bold;
  27.410 +  background-color: white;
  27.411 +  color: #707040;
  27.412 +}
  27.413 +
  27.414 +table.otherinfo th {
  27.415 +  border-bottom: 1px solid #afafaf;
  27.416 +  font-weight: bold;
  27.417 +  text-align: left;
  27.418 +}
  27.419 +
  27.420 +input[type="text"]:focus,
  27.421 +input[type="checkbox"]:focus,
  27.422 +input[type="radio"]:focus,
  27.423 +input[type="password"]:focus,
  27.424 +textarea:focus, select:focus {
  27.425 +  background-color: #ffffc0;
  27.426 +}
  27.427 +
  27.428 +.calendar_display {
  27.429 +  text-align: center;
  27.430 +}
  27.431 +
  27.432 +.calendar_display td {
  27.433 +  padding: 1px 4px 1px 4px;
  27.434 +}
  27.435 +
  27.436 +.calendar_display .today {
  27.437 +  background-color: #afafaf;
  27.438 +}
  27.439 +
  27.440 +/* vim: sts=2 sw=2 et
  27.441 +*/
    28.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2 +++ b/themes/mercurialroundup/html/user.forgotten.html	Sun Jun 06 16:19:05 2010 +0200
    28.3 @@ -0,0 +1,43 @@
    28.4 +<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar-->
    28.5 +<tal:block metal:use-macro="templates/page/macros/icing">
    28.6 +<title metal:fill-slot="head_title" i18n:translate="">Password reset request - <span
    28.7 + i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title>
    28.8 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
    28.9 + i18n:translate="">Password reset request</span>
   28.10 +<td class="content" metal:fill-slot="content">
   28.11 +
   28.12 +<p i18n:translate="">You have two options if you have forgotten your password.
   28.13 +If you know the email address you registered with, enter it below.</p>
   28.14 +
   28.15 +<form method="POST" onSubmit="return submit_once()"
   28.16 +      tal:attributes="action context/designator">
   28.17 +    <table class="form">
   28.18 +      <tr>
   28.19 +        <th i18n:translate="">Email Address:</th>
   28.20 +        <td><input name="address"></td>
   28.21 +      </tr>
   28.22 +      <tr>
   28.23 +        <td>&nbsp;</td>
   28.24 +        <td>
   28.25 +          <input type="hidden" name="@action" value="passrst">
   28.26 +          <input type="hidden" name="@template" value="forgotten">
   28.27 +          <input type="submit" value="Request password reset"
   28.28 +           i18n:attributes="value">
   28.29 +        </td>
   28.30 +      </tr>
   28.31 +</table>
   28.32 +
   28.33 +<p i18n:translate="">Or, if you know your username, then enter it below.</p>
   28.34 +
   28.35 +<table class="form">
   28.36 + <tr><th i18n:translate="">Username:</th> <td><input name="username"></td> </tr>
   28.37 + <tr><td></td><td><input type="submit" value="Request password reset"
   28.38 +   i18n:attributes="value"></td></tr>
   28.39 +</table>
   28.40 +</form>
   28.41 +
   28.42 +<p i18n:translate="">A confirmation email will be sent to you -
   28.43 +please follow the instructions within it to complete the reset process.</p>
   28.44 +</td>
   28.45 +
   28.46 +</tal:block>
    29.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2 +++ b/themes/mercurialroundup/html/user.help-search.html	Sun Jun 06 16:19:05 2010 +0200
    29.3 @@ -0,0 +1,85 @@
    29.4 +<html
    29.5 +  tal:define="form request/form/form/value;
    29.6 +  field request/form/property/value"
    29.7 +  >
    29.8 +  <head>
    29.9 +    <title>Search input for user helper</title>
   29.10 +    <script language="Javascript" type="text/javascript"
   29.11 +        tal:content="structure string:<!--
   29.12 +        // this is the name of the field in the original form that we're working on
   29.13 +        form  = parent.opener.document.${form};
   29.14 +        field  = '${field}';
   29.15 +        //-->">
   29.16 +    </script>
   29.17 +    <script type="text/javascript" src="@@file/help_controls.js"></script>
   29.18 +    <link rel="stylesheet" type="text/css" href="@@file/style.css" />
   29.19 +  </head>
   29.20 +  <body onload="parent.submit.url='...'"
   29.21 +    tal:define="
   29.22 +qs request/env/QUERY_STRING;
   29.23 +qs python:'&'.join([a for a in qs.split('&') if not a.startswith('@template=')])"
   29.24 +>
   29.25 +    <pre tal:content="request/env/QUERY_STRING" tal:condition=false />
   29.26 +    <form method="GET" name="itemSynopsis"
   29.27 +      target="list"
   29.28 +      tal:attributes="action request/classname"
   29.29 +      tal:define="
   29.30 +      property request/form/property/value;
   29.31 +   cols python:request.columns or 'id username address realname roles'.split();
   29.32 +   sort_on request/sort | nothing;
   29.33 +   sort_desc python:sort_on and request.sort[0][0] == '-';
   29.34 +   sort_on python:sort_on and request.sort[0][1] or 'lastname';
   29.35 +
   29.36 +   search_input templates/page/macros/search_input;
   29.37 +   search_select templates/page/macros/search_select;
   29.38 +   search_select_roles templates/page/macros/search_select_roles;
   29.39 +   required python:[];
   29.40 +   th_label templates/page/macros/th_label;
   29.41 +   ">
   29.42 +   <input type="hidden" name="@template" value="help-list">
   29.43 +   <input type="hidden" name="property" value="" tal:attributes="value property">
   29.44 +   <input type="hidden" name="form" value="" tal:attributes="value request/form/form/value">
   29.45 +   <table>
   29.46 +<tr tal:define="name string:username; label string:Username:">
   29.47 +  <th metal:use-macro="th_label">Name</th>
   29.48 +  <td metal:use-macro="search_input"><input type=text></td>
   29.49 +</tr>
   29.50 +
   29.51 +<tr tal:define="name string:phone; label string:Phone number">
   29.52 +  <th metal:use-macro="th_label">Phone</th>
   29.53 +  <td metal:use-macro="search_input"><input type=text></td>
   29.54 +</tr>
   29.55 +
   29.56 +<tr tal:define="name string:roles;
   29.57 +                onchange string:this.form.submit();
   29.58 +                label string:Roles:"
   29.59 +                >
   29.60 +  <th metal:use-macro="th_label">role</th>
   29.61 +  <td metal:use-macro="search_select_roles">
   29.62 +    <select>
   29.63 +      <option value="">jokester</option>
   29.64 +    </select>
   29.65 +  </td>
   29.66 +</tr>
   29.67 +
   29.68 +<tr>
   29.69 +  <td>&nbsp;</td>
   29.70 +  <td>
   29.71 +    <input type="hidden" name="@action" value="search">
   29.72 +    <input type="submit" value="Search" i18n:attributes="value">
   29.73 +    <input type="reset">
   29.74 +    <input type="hidden" value="username,realname,phone,organisation,roles" name="properties">
   29.75 +    <input type="text" name="@pagesize" id="sp-pagesize" value="25" size="2">
   29.76 +    <label for="sp-pagesize" i18n:translate="">Pagesize</label>
   29.77 +  </td>
   29.78 +</tr>
   29.79 +
   29.80 +   </table>
   29.81 +
   29.82 +</form>
   29.83 +<pre tal:content="request" tal:condition=false />
   29.84 +<script type="text/javascript"><!--
   29.85 +  focus2id('username');
   29.86 +//--></script>
   29.87 +  </body>
   29.88 +</html>
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/themes/mercurialroundup/html/user.help.html	Sun Jun 06 16:19:05 2010 +0200
    30.3 @@ -0,0 +1,49 @@
    30.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    30.5 +<html tal:define="property request/form/property/value;
    30.6 +qs request/env/QUERY_STRING;
    30.7 +qs python:'&'.join([a for a in qs.split('&') if not a.startswith('@template=')]);
    30.8 +form request/form/form/value;
    30.9 +field request/form/property/value">
   30.10 +  <head>
   30.11 +      <link rel="stylesheet" type="text/css" href="@@file/style.css" />
   30.12 +      <meta http-equiv="Content-Type"
   30.13 +       tal:attributes="content string:text/html;; charset=${request/client/charset}" />
   30.14 +      <tal:block tal:condition="python:request.form.has_key('property')">
   30.15 +      <title><tal:x i18n:translate=""><tal:x i18n:name="property"
   30.16 +       tal:content="property" i18n:translate="" /> help - <span i18n:name="tracker"
   30.17 +	       tal:replace="config/TRACKER_NAME" /></tal:x></title>
   30.18 +      <script language="Javascript" type="text/javascript"
   30.19 +	      tal:condition=false
   30.20 +          tal:content="structure string:<!--
   30.21 +          // this is the name of the field in the original form that we're working on
   30.22 +          form  = window.opener.document.${form};
   30.23 +          field  = '${field}';
   30.24 +          //-->">
   30.25 +      </script>
   30.26 +      <script src="@@file/help_controls.js"
   30.27 +     tal:condition=false type="text/javascript"><!--
   30.28 +      //--></script>
   30.29 +      </tal:block>
   30.30 +  </head>
   30.31 +<frameset rows="123,*,62">
   30.32 +  <frame src="#" tal:attributes="src string:?@template=help-search&${qs}" name="search">
   30.33 +  <!-- for search results: help-list -->
   30.34 +  <frame
   30.35 +  tal:attributes="src string:?@template=help-empty&${qs}"
   30.36 +  name="list">
   30.37 +  <frame
   30.38 +  tal:attributes="src string:?@template=help-submit&${qs}"
   30.39 +  name="submit">
   30.40 +  <!-- -->
   30.41 +</frameset>
   30.42 +<noframes>
   30.43 +  <body>
   30.44 +<p i18n:translate="">
   30.45 +Your browser is not capable of using frames; you should be redirected immediately,
   30.46 +or visit <a href="#" tal:attributes="href string:?${qs}&template=help-noframes"
   30.47 +i18n:name="link">this link</a>.
   30.48 +</p>
   30.49 +</body>
   30.50 +</noframes>
   30.51 +
   30.52 +</html>
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/themes/mercurialroundup/html/user.index.html	Sun Jun 06 16:19:05 2010 +0200
    31.3 @@ -0,0 +1,49 @@
    31.4 +<!-- dollarId: user.index,v 1.3 2002/07/09 05:29:51 richard Exp dollar-->
    31.5 +<tal:block metal:use-macro="templates/page/macros/icing">
    31.6 +<title metal:fill-slot="head_title" i18n:translate="">User listing - <span
    31.7 + i18n:name="tracker" tal:replace="config/TRACKER_NAME" /></title>
    31.8 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
    31.9 + i18n:translate="">User listing</span>
   31.10 +<td class="content" metal:fill-slot="content">
   31.11 +
   31.12 +<span tal:condition="python:not (context.is_view_ok()
   31.13 + or request.user.hasRole('Anonymous'))"
   31.14 + i18n:translate="">You are not allowed to view this page.</span>
   31.15 +
   31.16 +<span tal:condition="python:not context.is_view_ok()
   31.17 + and request.user.hasRole('Anonymous')"
   31.18 + i18n:translate="">Please login with your username and password.</span>
   31.19 +
   31.20 +<table width="100%" tal:condition="context/is_view_ok" class="list">
   31.21 +<tr>
   31.22 + <th i18n:translate="">Username</th>
   31.23 + <th i18n:translate="">Real name</th>
   31.24 + <th i18n:translate="">Organisation</th>
   31.25 + <th i18n:translate="">Email address</th>
   31.26 + <th i18n:translate="">Phone number</th>
   31.27 + <th tal:condition="context/is_edit_ok" i18n:translate="">Retire</th>
   31.28 +</tr>
   31.29 +<tal:block repeat="user context/list">
   31.30 +<tr tal:attributes="class python:['normal', 'alt'][repeat['user'].index%6/3]">
   31.31 + <td>
   31.32 +  <a tal:attributes="href string:user${user/id}"
   31.33 +     tal:content="user/username">username</a>
   31.34 + </td>
   31.35 + <td tal:content="python:user.realname.plain() or default">&nbsp;</td>
   31.36 + <td tal:content="python:user.organisation.plain() or default">&nbsp;</td>
   31.37 + <td tal:content="python:user.address.email() or default">&nbsp;</td>
   31.38 + <td tal:content="python:user.phone.plain() or default">&nbsp;</td>
   31.39 + <td tal:condition="context/is_retire_ok">
   31.40 +    <form style="padding:0" method="POST"
   31.41 +          tal:attributes="action string:user${user/id}">
   31.42 +     <input type="hidden" name="@template" value="index">
   31.43 +     <input type="hidden" name="@action" value="retire">
   31.44 +     <input type="submit" value="retire" i18n:attributes="value">
   31.45 +    </form>
   31.46 + </td>
   31.47 +</tr>
   31.48 +</tal:block>
   31.49 +</table>
   31.50 +</td>
   31.51 +
   31.52 +</tal:block>
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/themes/mercurialroundup/html/user.item.html	Sun Jun 06 16:19:05 2010 +0200
    32.3 @@ -0,0 +1,169 @@
    32.4 +<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar-->
    32.5 +<tal:doc metal:use-macro="templates/page/macros/icing"
    32.6 +define="edit_ok context/is_edit_ok"
    32.7 +>
    32.8 +<title metal:fill-slot="head_title">
    32.9 +<tal:if condition="context/id" i18n:translate=""
   32.10 + >User <tal:x content="context/id" i18n:name="id"
   32.11 + />: <tal:x content="context/username" i18n:name="title"
   32.12 + /> - <tal:x content="config/TRACKER_NAME" i18n:name="tracker"
   32.13 +/></tal:if>
   32.14 +<tal:if condition="not:context/id" i18n:translate=""
   32.15 + >New User - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker"
   32.16 +/></tal:if>
   32.17 +</title>
   32.18 +<metal:slot fill-slot="more-javascript">
   32.19 +<script metal:use-macro="templates/page/macros/user_utils"></script>
   32.20 +<script type="text/javascript" src="@@file/help_controls.js"></script>
   32.21 +</metal:slot>
   32.22 +<tal:block metal:fill-slot="body_title"
   32.23 +  define="edit_ok context/is_edit_ok">
   32.24 + <span tal:condition="python: not (context.id or edit_ok)"
   32.25 +  tal:omit-tag="python:1" i18n:translate="">New User</span>
   32.26 + <span tal:condition="python: not context.id and edit_ok"
   32.27 +  tal:omit-tag="python:1" i18n:translate="">New User Editing</span>
   32.28 + <span tal:condition="python: context.id and not edit_ok"
   32.29 +  tal:omit-tag="python:1" i18n:translate="">User<tal:x
   32.30 +  replace="context/id" i18n:name="id" /></span>
   32.31 + <span tal:condition="python: context.id and edit_ok"
   32.32 +  tal:omit-tag="python:1" i18n:translate="">User<tal:x
   32.33 +  replace="context/id" i18n:name="id" /> Editing</span>
   32.34 +</tal:block>
   32.35 +
   32.36 +<td class="content" metal:fill-slot="content">
   32.37 +
   32.38 +<p tal:condition="python:not (context.is_view_ok()
   32.39 + or request.user.hasRole('Anonymous'))" i18n:translate="">
   32.40 + You are not allowed to view this page.</p>
   32.41 +
   32.42 +<p tal:condition="python:not context.is_view_ok()
   32.43 + and request.user.hasRole('Anonymous')" i18n:translate="">
   32.44 + Please login with your username and password.</p>
   32.45 +
   32.46 +<div tal:condition="context/is_view_ok">
   32.47 +
   32.48 +<form method="POST"
   32.49 +      name="itemSynopsis"
   32.50 +      tal:define="required python:'username address'.split()"
   32.51 +      enctype="multipart/form-data"
   32.52 +      tal:attributes="action context/designator;
   32.53 +      onSubmit python:'return checkRequiredFields(\'%s\')'%'\', \''.join(required);
   32.54 +      ">
   32.55 +<table class="form" tal:define="
   32.56 +  th_label templates/page/macros/th_label;
   32.57 +  src_input templates/page/macros/user_src_input;
   32.58 +  normal_input templates/page/macros/user_normal_input;
   32.59 +  pw_input templates/page/macros/user_pw_input;
   32.60 +  confirm_input templates/page/macros/user_confirm_input;
   32.61 +  edit_ok context/is_edit_ok;
   32.62 +  ">
   32.63 + <tr tal:define="name string:realname; label string:Name; value context/realname; edit_ok edit_ok">
   32.64 +  <th metal:use-macro="th_label">Name</th>
   32.65 +  <td><input name="realname" metal:use-macro="src_input"></td>
   32.66 + </tr>
   32.67 + <tr tal:define="name string:username; label string:Login Name; value context/username">
   32.68 +   <th metal:use-macro="th_label">Login Name</th>
   32.69 +   <td><input metal:use-macro="src_input"></td>
   32.70 + </tr>
   32.71 + <tal:if condition="edit_ok">
   32.72 + <tr tal:define="name string:password; label string:Login Password">
   32.73 +  <th metal:use-macro="th_label">Login Password</th>
   32.74 +  <td><input metal:use-macro="pw_input" type="password"></td>
   32.75 + </tr>
   32.76 + <tr tal:define="name string:password; label string:Confirm Password">
   32.77 +  <th metal:use-macro="th_label">Confirm Password</th>
   32.78 +  <td><input metal:use-macro="confirm_input" type="password"></td>
   32.79 + </tr>
   32.80 + </tal:if>
   32.81 + <tal:if condition="python:request.user.hasPermission('Web Roles')">
   32.82 + <tr tal:define="name string:roles; label string:Roles;">
   32.83 +  <th><label for="roles" i18n:translate="">Roles</label></th>
   32.84 +  <td tal:define="gips context/id">
   32.85 +    <tal:subif condition=gips define="value context/roles">
   32.86 +      <input metal:use-macro="normal_input">
   32.87 +    </tal:subif>
   32.88 +    <tal:subif condition="not:gips" define="value db/config/NEW_WEB_USER_ROLES">
   32.89 +      <input metal:use-macro="normal_input">
   32.90 +    </tal:subif>
   32.91 +   <tal:block i18n:translate="">(to give the user more than one role,
   32.92 +    enter a comma,separated,list)</tal:block>
   32.93 +  </td>
   32.94 + </tr>
   32.95 + </tal:if>
   32.96 +
   32.97 + <tr tal:define="name string:phone; label string:Phone; value context/phone">
   32.98 +  <th metal:use-macro="th_label">Phone</th>
   32.99 +  <td><input name="phone" metal:use-macro="normal_input"></td>
  32.100 + </tr>
  32.101 +
  32.102 + <tr tal:define="name string:organisation; label string:Organisation; value context/organisation">
  32.103 +  <th metal:use-macro="th_label">Organisation</th>
  32.104 +  <td><input name="organisation" metal:use-macro="normal_input"></td>
  32.105 + </tr>
  32.106 +
  32.107 + <tr tal:condition="python:edit_ok or context.timezone"
  32.108 +     tal:define="name string:timezone; label string:Timezone; value context/timezone">
  32.109 +  <th metal:use-macro="th_label">Timezone</th>
  32.110 +  <td><input name="timezone" metal:use-macro="normal_input">
  32.111 +   <tal:block tal:condition="edit_ok" i18n:translate="">(this is a numeric hour offset, the default is
  32.112 +    <span tal:replace="db/config/DEFAULT_TIMEZONE" i18n:name="zone"
  32.113 +    />)</tal:block>
  32.114 +  </td>
  32.115 + </tr>
  32.116 +
  32.117 + <tr tal:define="name string:address; label string:E-mail address; value context/address">
  32.118 +  <th metal:use-macro="th_label">E-mail address</th>
  32.119 +  <td tal:define="mailto python:context.address.field(id='address');
  32.120 +	  mklink python:mailto and not edit_ok">
  32.121 +      <a href="mailto:calvin@the-z.org"
  32.122 +		  tal:attributes="href string:mailto:$value"
  32.123 +		  tal:content="value"
  32.124 +          tal:condition="python:mklink">calvin@the-z.org</a>
  32.125 +      <tal:if condition=edit_ok>
  32.126 +      <input metal:use-macro="src_input" value="calvin@the-z.org">
  32.127 +      </tal:if>
  32.128 +      &nbsp;
  32.129 +  </td>
  32.130 + </tr>
  32.131 +
  32.132 + <tr>
  32.133 +  <th><label for="alternate_addresses" i18n:translate="">Alternate E-mail addresses<br>One address per line</label></th>
  32.134 +  <td>
  32.135 +    <textarea rows=5 cols=40 tal:replace="structure context/alternate_addresses/multiline">nobody@nowhere.org
  32.136 +anybody@everywhere.net
  32.137 +(alternate_addresses)
  32.138 +    </textarea>
  32.139 +  </td>
  32.140 + </tr>
  32.141 +
  32.142 + <tr tal:condition="edit_ok">
  32.143 +  <td>
  32.144 +   &nbsp;
  32.145 +   <input type="hidden" name="@template" value="item">
  32.146 +   <input type="hidden" name="@required" value="username,address"
  32.147 +          tal:attributes="value python:','.join(required)">
  32.148 +  </td>
  32.149 +  <td><input type="submit" value="save" tal:replace="structure context/submit"><!--submit button here-->
  32.150 +    <input type=reset>
  32.151 +  </td>
  32.152 + </tr>
  32.153 +</table>
  32.154 +</form>
  32.155 +
  32.156 +<tal:block tal:condition="not:context/id" i18n:translate="">
  32.157 +<table class="form">
  32.158 +<tr>
  32.159 + <td>Note:&nbsp;</td>
  32.160 + <th class="required">highlighted</th>
  32.161 + <td>&nbsp;fields are required.</td>
  32.162 +</tr>
  32.163 +</table>
  32.164 +</tal:block>
  32.165 +
  32.166 +<tal:block tal:condition="context/id" tal:replace="structure context/history" />
  32.167 +
  32.168 +</div>
  32.169 +
  32.170 +</td>
  32.171 +
  32.172 +</tal:doc>
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/themes/mercurialroundup/html/user.register.html	Sun Jun 06 16:19:05 2010 +0200
    33.3 @@ -0,0 +1,81 @@
    33.4 +<!-- dollarId: user.item,v 1.7 2002/08/16 04:29:04 richard Exp dollar-->
    33.5 +<tal:block metal:use-macro="templates/page/macros/icing">
    33.6 +<title metal:fill-slot="head_title"
    33.7 + i18n:translate="">Registering with <span i18n:name="tracker"
    33.8 + tal:replace="db/config/TRACKER_NAME" /></title>
    33.9 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
   33.10 + i18n:translate="">Registering with <span i18n:name="tracker"
   33.11 + tal:replace="db/config/TRACKER_NAME" /></span>
   33.12 +<td class="content" metal:fill-slot="content">
   33.13 +
   33.14 +<form method="POST" onSubmit="return submit_once()"
   33.15 +      enctype="multipart/form-data"
   33.16 +      tal:attributes="action context/designator">
   33.17 +
   33.18 +<table class="form">
   33.19 + <tr>
   33.20 +  <th i18n:translate="">Name</th>
   33.21 +  <td tal:content="structure context/realname/field">realname</td>
   33.22 + </tr>
   33.23 + <tr>
   33.24 +  <th class="required" i18n:translate="">Login Name</th>
   33.25 +  <td tal:content="structure context/username/field">username</td>
   33.26 + </tr>
   33.27 + <tr>
   33.28 +  <th class="required" i18n:translate="">Login Password</th>
   33.29 +  <td tal:content="structure context/password/field">password</td>
   33.30 + </tr>
   33.31 + <tr>
   33.32 +  <th class="required" i18n:translate="">Confirm Password</th>
   33.33 +  <td tal:content="structure context/password/confirm">password</td>
   33.34 + </tr>
   33.35 + <tr tal:condition="python:request.user.hasPermission('Web Roles')">
   33.36 +  <th i18n:translate="">Roles</th>
   33.37 +  <td tal:condition="exists:item"
   33.38 +      tal:content="structure context/roles/field">roles</td>
   33.39 +  <td tal:condition="not:exists:item">
   33.40 +   <input name="roles" tal:attributes="value db/config/NEW_WEB_USER_ROLES">
   33.41 +  </td>
   33.42 + </tr>
   33.43 + <tr>
   33.44 +  <th i18n:translate="">Phone</th>
   33.45 +  <td tal:content="structure context/phone/field">phone</td>
   33.46 + </tr>
   33.47 + <tr>
   33.48 +  <th i18n:translate="">Organisation</th>
   33.49 +  <td tal:content="structure context/organisation/field">organisation</td>
   33.50 + </tr>
   33.51 + <tr>
   33.52 +  <th class="required" i18n:translate="">E-mail address</th>
   33.53 +  <td tal:content="structure context/address/field">address</td>
   33.54 + </tr>
   33.55 + <tr>
   33.56 +  <th i18n:translate="">Alternate E-mail addresses<br>One address per line</th>
   33.57 +  <td tal:content="structure context/alternate_addresses/multiline">alternate_addresses</td>
   33.58 + </tr>
   33.59 +
   33.60 + <tr>
   33.61 +  <td>&nbsp;</td>
   33.62 +  <td>
   33.63 +   <input type="hidden" name="@template" value="register">
   33.64 +   <input type="hidden" name="@required" value="username,password,address">
   33.65 +   <input type="hidden" name="@action" value="register">
   33.66 +   <input type="submit" name="submit" value="Register" i18n:attributes="value">
   33.67 +  </td>
   33.68 + </tr>
   33.69 +</table>
   33.70 +</form>
   33.71 +
   33.72 +<tal:block tal:condition="not:context/id" i18n:translate="">
   33.73 +<table class="form">
   33.74 +<tr>
   33.75 + <td>Note:&nbsp;</td>
   33.76 + <th class="required">highlighted</th>
   33.77 + <td>&nbsp;fields are required.</td>
   33.78 +</tr>
   33.79 +</table>
   33.80 +</tal:block>
   33.81 +
   33.82 +</td>
   33.83 +
   33.84 +</tal:block>
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/themes/mercurialroundup/html/user.rego_progress.html	Sun Jun 06 16:19:05 2010 +0200
    34.3 @@ -0,0 +1,16 @@
    34.4 +<!-- dollarId: issue.index,v 1.2 2001/07/29 04:07:37 richard Exp dollar-->
    34.5 +<tal:block metal:use-macro="templates/page/macros/icing">
    34.6 +<title metal:fill-slot="head_title"
    34.7 + i18n:translate="">Registration in progress - <span i18n:name="tracker"
    34.8 + tal:replace="config/TRACKER_NAME" /></title>
    34.9 +<span metal:fill-slot="body_title" tal:omit-tag="python:1"
   34.10 + i18n:translate="">Registration in progress...</span>
   34.11 +<td class="content" metal:fill-slot="content">
   34.12 +
   34.13 +<p i18n:translate="">You will shortly receive an email
   34.14 +to confirm your registration. To complete the registration process,
   34.15 +visit the link indicated in the email.
   34.16 +</p>
   34.17 +
   34.18 +</td>
   34.19 +</tal:block>
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/themes/mercurialroundup/html/user_utils.js	Sun Jun 06 16:19:05 2010 +0200
    35.3 @@ -0,0 +1,114 @@
    35.4 +// User Editing Utilities
    35.5 +
    35.6 +/**
    35.7 + * for new users:
    35.8 + * Depending on the input field which calls it, takes the value
    35.9 + * and dispatches it to certain other input fields:
   35.10 + *
   35.11 + * address
   35.12 + *  +-> username
   35.13 + *  |    `-> realname
   35.14 + *  `-> organisation
   35.15 + */
   35.16 +function split_name(that) {
   35.17 +    var raw = that.value
   35.18 +    var val = trim(raw)
   35.19 +    if (val == '') {
   35.20 +        return
   35.21 +    }
   35.22 +    var username=''
   35.23 +    var realname=''
   35.24 +    var address=''
   35.25 +    switch (that.name) {
   35.26 +        case 'address':
   35.27 +            address=val
   35.28 +            break
   35.29 +        case 'username':
   35.30 +            username=val
   35.31 +            break
   35.32 +        case 'realname':
   35.33 +            realname=val
   35.34 +            break
   35.35 +        case 'firstname':
   35.36 +        case 'lastname':
   35.37 +           return
   35.38 +        default:
   35.39 +            alert('Ooops - unknown name field '+that.name+'!')
   35.40 +            return
   35.41 +    }
   35.42 +    var the_form = that.form;
   35.43 +
   35.44 +    function field_empty(name) {
   35.45 +        return the_form[name].value == ''
   35.46 +    }
   35.47 +
   35.48 +    // no break statements - on purpose!
   35.49 +    switch (that.name) {
   35.50 +        case 'address':
   35.51 +            var split1 = address.split('@')
   35.52 +            if (field_empty('username')) {
   35.53 +                username = split1[0]
   35.54 +                the_form.username.value = username
   35.55 +            }
   35.56 +            if (field_empty('organisation')) {
   35.57 +                the_form.organisation.value = default_organisation(split1[1])
   35.58 +            }
   35.59 +        case 'username':
   35.60 +            if (field_empty('realname')) {
   35.61 +                realname = Cap(username.split('.').join(' '))
   35.62 +                the_form.realname.value = realname
   35.63 +            }
   35.64 +        case 'realname':
   35.65 +            if (field_empty('username')) {
   35.66 +                username = Cap(realname.replace(' ', '.'))
   35.67 +                the_form.username.value = username
   35.68 +            }
   35.69 +            if (the_form.firstname && the_form.lastname) {
   35.70 +                var split2 = realname.split(' ')
   35.71 +                var firstname='', lastname=''
   35.72 +                firstname = split2[0]
   35.73 +                lastname = split2.slice(1).join(' ')
   35.74 +                if (field_empty('firstname')) {
   35.75 +                    the_form.firstname.value = firstname
   35.76 +                }
   35.77 +                if (field_empty('lastname')) {
   35.78 +                    the_form.lastname.value = lastname
   35.79 +                }
   35.80 +            }
   35.81 +    }
   35.82 +}
   35.83 +
   35.84 +function SubCap(str) {
   35.85 +    switch (str) {
   35.86 +        case 'de': case 'do': case 'da':
   35.87 +        case 'du': case 'von':
   35.88 +            return str;
   35.89 +    }
   35.90 +    if (str.toLowerCase().slice(0,2) == 'mc') {
   35.91 +        return 'Mc'+str.slice(2,3).toUpperCase()+str.slice(3).toLowerCase()
   35.92 +    }
   35.93 +    return str.slice(0,1).toUpperCase()+str.slice(1).toLowerCase()
   35.94 +}
   35.95 +
   35.96 +function Cap(str) {
   35.97 +    var liz = str.split(' ')
   35.98 +    for (var i=0; i<liz.length; i++) {
   35.99 +        liz[i] = SubCap(liz[i])
  35.100 +    }
  35.101 +    return liz.join(' ')
  35.102 +}
  35.103 +
  35.104 +/**
  35.105 + * Takes a domain name (behind the @ part of an email address)
  35.106 + * Customise this to handle the mail domains you're interested in 
  35.107 + */
  35.108 +function default_organisation(orga) {
  35.109 +    switch (orga.toLowerCase()) {
  35.110 +        case 'gmx':
  35.111 +        case 'yahoo':
  35.112 +            return ''
  35.113 +        default:
  35.114 +            return orga
  35.115 +    }
  35.116 +}
  35.117 +