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="#"><< 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 >></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> <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="" ><< previous</a> 9.52 + 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 >></a> 9.68 + 9.69 + </th> 9.70 + </tr> 9.71 + </table> 9.72 + 9.73 + <table class="classhelp"> 9.74 + <tr> 9.75 + <th> <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> <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"> </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 + > </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> </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 + 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="" ><< previous</a> 14.27 + 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 >></a> 14.38 + 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 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"> </td> 18.54 + <td tal:condition="request/show/id" tal:content="i/id"> </td> 18.55 + <td class="date" tal:condition="request/show/creation" 18.56 + tal:content="i/creation/reldate"> </td> 18.57 + <td class="date" tal:condition="request/show/activity" 18.58 + tal:content="i/activity/reldate"> </td> 18.59 + <td class="date" tal:condition="request/show/actor" 18.60 + tal:content="python:i.actor.plain() or default"> </td> 18.61 + <td tal:condition="request/show/keyword" 18.62 + tal:content="python:i.keyword.plain() or default"> </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"> </td> 18.70 + <td tal:condition="request/show/creator" 18.71 + tal:content="python:i.creator.plain() or default"> </td> 18.72 + <td tal:condition="request/show/assignedto" 18.73 + tal:content="python:i.assignedto.plain() or default"> </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=""><< previous</a> 18.88 + 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 >></a> 18.99 + 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 + 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: </td> 19.121 + <th class="required">highlighted</th> 19.122 + <td> 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"> </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> </td> 20.44 + <td> </td> 20.45 + <td> </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> </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> </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> </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> </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> </td> 20.172 + <td> </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 + 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> </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 + 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"> </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 your 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> </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> </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> </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"> </td> 31.36 + <td tal:content="python:user.organisation.plain() or default"> </td> 31.37 + <td tal:content="python:user.address.email() or default"> </td> 31.38 + <td tal:content="python:user.phone.plain() or default"> </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 + 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 + 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: </td> 32.160 + <th class="required">highlighted</th> 32.161 + <td> 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> </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: </td> 33.76 + <th class="required">highlighted</th> 33.77 + <td> 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 +