diff options
Diffstat (limited to 'templates')
-rw-r--r-- | templates/patchwork/base.html | 77 | ||||
-rw-r--r-- | templates/patchwork/bundle-public.html | 12 | ||||
-rw-r--r-- | templates/patchwork/bundle.html | 39 | ||||
-rw-r--r-- | templates/patchwork/filters.html | 173 | ||||
-rw-r--r-- | templates/patchwork/list.html | 24 | ||||
-rw-r--r-- | templates/patchwork/login.html | 26 | ||||
-rw-r--r-- | templates/patchwork/logout.html | 8 | ||||
-rw-r--r-- | templates/patchwork/pagination.html | 45 | ||||
-rw-r--r-- | templates/patchwork/patch-form.html | 87 | ||||
-rw-r--r-- | templates/patchwork/patch-list.html | 185 | ||||
-rw-r--r-- | templates/patchwork/patch.html | 214 | ||||
-rw-r--r-- | templates/patchwork/patchlist.html | 36 | ||||
-rw-r--r-- | templates/patchwork/profile.html | 114 | ||||
-rw-r--r-- | templates/patchwork/project.html | 32 | ||||
-rw-r--r-- | templates/patchwork/projects.html | 21 | ||||
-rw-r--r-- | templates/patchwork/register-confirm.html | 13 | ||||
-rw-r--r-- | templates/patchwork/register.html | 122 | ||||
-rw-r--r-- | templates/patchwork/todo-list.html | 17 | ||||
-rw-r--r-- | templates/patchwork/todo-lists.html | 29 | ||||
-rw-r--r-- | templates/patchwork/user-link-confirm.html | 19 | ||||
-rw-r--r-- | templates/patchwork/user-link.html | 30 |
21 files changed, 1323 insertions, 0 deletions
diff --git a/templates/patchwork/base.html b/templates/patchwork/base.html new file mode 100644 index 0000000..c3a2206 --- /dev/null +++ b/templates/patchwork/base.html @@ -0,0 +1,77 @@ +{% load pwurl %} +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> + <title>{% block title %}Patchwork{% endblock %} - Patchwork</title> + <link rel="stylesheet" type="text/css" href="/css/style.css"/> +{% block headers %}{% endblock %} + </head> + <body> + <div id="title"> + <h1 style="float: left;"> + <a + href="{% url patchwork.views.projects %}">Patchwork</a><span + class="beta">α</span> + {% block heading %}{% endblock %}</h1> + <div id="auth"> +{% if user.is_authenticated %} + Logged in as + <a href="{% url patchwork.views.user.profile %}" + ><strong>{{ user.username }}</strong></a> + <br/> + <a href="{% url patchwork.views.user.profile %}">profile</a> :: + <a href="{% url patchwork.views.user.todo_lists %}">todo + ({{ user.get_profile.n_todo_patches }})</a><br/> + <a href="{% url patchwork.views.user.logout %}">logout</a> :: + <a href="/help/">help</a> +{% else %} + <a href="{% url patchwork.views.user.login %}">login</a> + <br/> + <a href="{% url patchwork.views.user.register %}">register</a> + <br/> + <a href="/help/">help</a> +{% endif %} + </div> + <div style="clear: both;"></div> + </div> + <div id="nav"> + {% if project %} + <strong>Project</strong>: {{ project.linkname }} + : + <a href="{% url patchwork.views.patch.list project_id=project.linkname %}" + >patches</a> + : + <a href="{% url patchwork.views.project project_id=project.linkname %}" + >project info</a> + {% if other_projects %} + : + <a href="{% url patchwork.views.projects %}" + >other projects</a> + {% endif %} + {% else %} + <a href="{% url patchwork.views.projects %}" + >project list</a> + {% endif %} + </div> +{% if messages %} + <div id="messages"> + {% for message in messages %} + <div class="message">{{ message }}</div> + {% endfor %} + </div> +{% endif %} + <div id="content"> +{% block body %} +{% endblock %} + </div> + <div id="footer"> + <a href="http://ozlabs.org/~jk/projects/patchwork">patchwork</a> + patch tracking system + </div> + </body> +</html> + + + diff --git a/templates/patchwork/bundle-public.html b/templates/patchwork/bundle-public.html new file mode 100644 index 0000000..0ee57da --- /dev/null +++ b/templates/patchwork/bundle-public.html @@ -0,0 +1,12 @@ +{% extends "patchwork/base.html" %} + +{% load person %} + +{% block title %}{{project.name}}{% endblock %} +{% block heading %}Bundle: {{bundle.name}}{% endblock %} + +{% block body %} + +{% include "patchwork/patch-list.html" %} + +{% endblock %} diff --git a/templates/patchwork/bundle.html b/templates/patchwork/bundle.html new file mode 100644 index 0000000..8fa694a --- /dev/null +++ b/templates/patchwork/bundle.html @@ -0,0 +1,39 @@ +{% extends "patchwork/base.html" %} + +{% load person %} + +{% block title %}{{project.name}}{% endblock %} +{% block heading %}bundle: {{bundle.name}}{% endblock %} + +{% block body %} + +<p>This bundle contains patches for the {{ bundle.project.linkname }} +project.</p> + +<p><a href="{% url patchwork.views.bundle.mbox bundle_id=bundle.id %}" +>Download bundle as mbox</a></p> + + +<form method="post"> + <input type="hidden" name="form" value="bundle"/> +<table class="form"> + + <tr> + <th colspan="2" class="headerrow">Bundle settings</th> + </tr> + +{{ bundleform }} + <tr> + <td colspan="2" class="submitrow"> + <input type="submit" name="action" value="Update"/> + <input type="submit" name="action" value="Delete"/> + </td> + </tr> +</table> +</form> + +<div style="clear: both; padding: 1em;"></div> + +{% include "patchwork/patch-list.html" %} + +{% endblock %} diff --git a/templates/patchwork/filters.html b/templates/patchwork/filters.html new file mode 100644 index 0000000..482bc98 --- /dev/null +++ b/templates/patchwork/filters.html @@ -0,0 +1,173 @@ + +<script type="text/javascript" language="JavaScript"> +var filterform_displayed = false; +function filter_click() +{ + form = document.getElementById('filterform'); + if (!form) { + return; + } + + if (filterform_displayed) { + form.style['display'] = 'none'; + filterform_displayed = false; + } else { + form.style['display'] = 'block'; + filterform_displayed = true; + } + + +} +function enable_selected_submitter(select, input) +{ + select.name = 'submitter'; + input.name = ''; +} +function filter_form_submit(form) +{ + var i; + + submitter_select = document.getElementById("submitter_select"); + submitter_input = document.getElementById("submitter_input"); + if (!submitter_select || !submitter_input) { + req = null; + return; + } + + /* submitter handling. if possible, use the select box, otherwise leave + * as-is (and so the text box is used). */ + + if (submitter_select.options.length == 0) { + /* if there's no match, just use the input */ + + } else if (submitter_select.options.length == 1) { + /* if there's only one match, request by id */ + submitter_select.selectedIndex = 0; + enable_selected_submitter(submitter_select, submitter_input); + + } else if (submitter_select.selectedIndex != -1) { + /* if the user has explicitly selected, request by id */ + enable_selected_submitter(submitter_select, submitter_input); + + } + + for (i = 0; i < form.elements.length; i++) { + var e = form.elements[i]; + if (e.type == 'submit') { + continue; + } + + /* handle submitter data */ + if (e.type == 'select-one') { + if (e.name == '') { + e.disabled = true; + } + if (e.selectedIndex != -1 + && e.options[e.selectedIndex].value == '') { + e.disabled = true; + } + + continue; + } + + if (e.value == '') { + e.disabled = true; + } + } +} + +var req = null; + +function submitter_complete_response() +{ + if (req.readyState != 4) { + return + } + + var completions; + eval("completions = " + req.responseText); + + if (completions.length == 0) { + req = null; + return; + } + + submitter_select = document.getElementById("submitter_select"); + submitter_input = document.getElementById("submitter_input"); + if (!submitter_select || !submitter_input) { + req = null; + return; + } + + submitter_select.options = []; + + for (i = 0; i < completions.length; i++) { + name = completions[i]['fields']['name']; + if (name) { + name = completions[i]['fields']['name'] + + ' <' + completions[i]['fields']['email'] + '>'; + } else { + name = completions[i]['fields']['email']; + } + o = new Option(name, completions[i]['pk']); + submitter_select.options[i] = o; + } + submitter_select.disabled = false; + req = null; +} + +function submitter_field_change(field) +{ + var value = field.value; + if (value.length < 4) { + return; + } + + if (req) { + return; + } + + var url = '{% url patchwork.views.submitter_complete %}?q=' + value; + req = new XMLHttpRequest(); + req.onreadystatechange = submitter_complete_response; + req.open("GET", url, true); + req.send(''); +} +</script> + +<div class="filters"> + <div id="filtersummary"> + <strong><a href="javascript:filter_click()">Filters</a>:</strong> + {% if filters.applied_filters %} + {% for filter in filters.applied_filters %} + {{ filter.name }} = {{ filter.condition }} + {% if not filter.forced %} + <a href="{{ filter.url_without_me }}"><img + src="/images/filter-remove.png"></a> + {% endif %} + {% if not forloop.last %} | {% endif %} + {% endfor %} + {% else %} + none + <a href="javascript:filter_click()"><img src="/images/filter-add.png"></a> + {% endif %} + </div> + <div id="filterform" style="padding-top: 1em; display: none"> + <form action="" method="get" onSubmit="return filter_form_submit(this)"> + <table> + {% for filter in filters.available_filters %} + <tr> + <td>{{ filter.name }}</td> + <td>{{ filter.form }}</td> + </tr> + {% endfor %} + <tr> + <td/> + <td><input type="submit" value="Apply"/></td> + </tr> + </table> + </form> + </div> +</div> + + diff --git a/templates/patchwork/list.html b/templates/patchwork/list.html new file mode 100644 index 0000000..755c047 --- /dev/null +++ b/templates/patchwork/list.html @@ -0,0 +1,24 @@ +{% extends "patchwork/base.html" %} + +{% load person %} + +{% block title %}{{project.name}}{% endblock %} +{% block heading %}{{project.name}}{% endblock %} + +{% block body %} + +<h2>Incoming patches</h2> + +{% if errors %} +<p>The following error{{ errors|length|pluralize:" was,s were" }} encountered +while updating patches:</p> +<ul class="errorlist"> +{% for error in errors %} + <li>{{ error }}</li> +{% endfor %} +</ul> +{% endif %} + +{% include "patchwork/patch-list.html" %} + +{% endblock %} diff --git a/templates/patchwork/login.html b/templates/patchwork/login.html new file mode 100644 index 0000000..4706dda --- /dev/null +++ b/templates/patchwork/login.html @@ -0,0 +1,26 @@ +{% extends "patchwork/base.html" %} + +{% block title %}Patchwork Login{% endblock %} +{% block heading %}Patchwork Login{% endblock %} + + +{% block body %} +<form method="post"> +<table class="form loginform"> + <tr> + <th colspan="2" class="headerrow">login</th> + </tr> + {% if error %} + <tr> + <td colspan="2">{{ error }}</td> + </tr> + {% endif %} + {{ form }} + <tr> + <td colspan="2" class="submitrow"> + <input type="submit" value="Login"/> + </td> + </tr> +</table> +</form> +{% endblock %} diff --git a/templates/patchwork/logout.html b/templates/patchwork/logout.html new file mode 100644 index 0000000..737f1ce --- /dev/null +++ b/templates/patchwork/logout.html @@ -0,0 +1,8 @@ +{% extends "patchwork/base.html" %} + +{% block title %}Patchwork{% endblock %} +{% block heading %}Patchwork{% endblock %} + +{% block body %} +<p>Logged out</p> +{% endblock %} diff --git a/templates/patchwork/pagination.html b/templates/patchwork/pagination.html new file mode 100644 index 0000000..3e95126 --- /dev/null +++ b/templates/patchwork/pagination.html @@ -0,0 +1,45 @@ +{% load listurl %} + +{% ifnotequal page.paginator.num_pages 1 %} +<div class="paginator"> +{% if page.has_previous %} + <span class="prev"> + <a href="{% listurl page=page.previous_page_number %}" + title="Previous Page">« Previous</a></span> +{% else %} + <span class="prev-na">« Previous</span> +{% endif %} + +{% if page.paginator.trailing_set %} + {% for p in page.paginator.trailing_set %} + <span class="page"><a href="{% listurl page=p %}" >{{ p }}</a></span> + {% endfor %} + ... +{% endif %} + +{% for p in page.paginator.adjacent_set %} + {% ifequal p page.number %} + <span class="curr" title="Current Page">{{ p }}</span> + {% else %} + <span class="page"><a href="{% listurl page=p %}" + title="Page {{ p }}">{{ p }}</a></span> + {% endifequal %} +{% endfor %} + +{% if page.paginator.leading_set %} + ... + {% for p in page.paginator.leading_set %} + <span class="page"><a href="{% listurl page=p %}">{{ p }}</a></span> + {% endfor %} +{% endif %} + +{% if page.has_next %} + <span class="next"> + <a href="{% listurl page=page.next_page_number %}" + title="Next Page">Next »</a> + </span> +{% else %} + <span class="next-na">Next »</span> +{% endif %} +</div> +{% endifnotequal %} diff --git a/templates/patchwork/patch-form.html b/templates/patchwork/patch-form.html new file mode 100644 index 0000000..9d2c954 --- /dev/null +++ b/templates/patchwork/patch-form.html @@ -0,0 +1,87 @@ + +<div class="patchform" + style="border: thin solid black; padding-left: 0.8em; margin-top: 2em;"> + + <div class="patchform-properties" + style="float: left; margin-right: 4em;"> + <h3>Properties</h3> + <table class="form"> + <tr> + <th>Change state:</th> + <td>{{ patchform.state }}</td> + </tr> + <tr> + <th>Delegate to:</td> + <td>{{ patchform.delegate }}</td> + </tr> + <tr> + <td></td> + <td> + <input type="submit" value="Update"> + </td> + </tr> + </table> + </form> + </div> + + <div class="patchform-actions" style="padding-left: 4em;"> + <h3>Actions</h3> + <table class="form"> + <tr> + <td>Ack:</td> + <td> + <form action="{% url patchwork.views.patch patch=patch.id %}" + method="post"> + <input type="hidden" name="action" value="act"/> + <input type="submit" value="Ack"/> + </form> + </td> + </tr> + <tr> + <td>Create bundle:</td> + <td> + {% if createbundleform.name.errors %} + <span class="errors">{{createbundleform.errors}}</span> + {% endif %} + <form method="post"> + <input type="hidden" name="action" value="createbundle"/> + {{ createbundleform.name }} + <input value="Create" type="submit"/> + </form> + </td> + </tr> +{% if bundles %} + <tr> + <td>Add to bundle:</td> + <td> + <form action="{% url patchwork.views.bundle.setbundle %}" method="post"> + <input type="hidden" name="action" value="add"/> + <input type="hidden" name="patch_id" value="{{ patch.id }}"/> + <select name="name"/> + {% for bundle in bundles %} + <option value="{{bundle.id}}">{{bundle.name}}</option> + {% endfor %} + </select> + <input value="Add" type="submit"/> + </form> + </td> + </tr> +{% endif %} + <tr> + <td>Archive:</td> + <td> + <form method="post"> + <input type="hidden" name="action" value="archive"/> + <input type="submit" value="Archive"/> + </form> + </td> + </tr> + </table> + </form> + + </div> + + <div style="clear: both;"> + </div> +</div> + diff --git a/templates/patchwork/patch-list.html b/templates/patchwork/patch-list.html new file mode 100644 index 0000000..0a15e9c --- /dev/null +++ b/templates/patchwork/patch-list.html @@ -0,0 +1,185 @@ +{% load person %} +{% load listurl %} + +{% include "patchwork/pagination.html" %} + + +<table class="patchlist"> + <tr> + <td class="patchlistfilters"> + {% include "patchwork/filters.html" %} + </td> + </tr> +</table> + +{% if page.paginator.long_page and user.is_authenticated %} +<div class="floaty"> + <a title="jump to form" href="#patchforms"><span + style="font-size: 120%">▾</span></a> +</div> +{% endif %} + +<form method="post"> +<input type="hidden" name="form" value="patchlistform"/> +<input type="hidden" name="project" value="{{project.id}}"/> +<table class="patchlist"> + <tr> + {% if patchform or bundle %} + <th/> + {% endif %} + + <th> + {% ifequal order.name "name" %} + <a class="colactive" + href="{% listurl order=order.reversed_name %}">Patch</a> + {% else %} + <a class="colinactive" href="{% listurl order="name" %}">Patch</a> + {% endifequal %} + </th> + + <th> + {% ifequal order.name "date" %} + <a class="colactive" + href="{% listurl order=order.reversed_name %}">Date</a> + {% else %} + <a class="colinactive" href="{% listurl order="date" %}">Date</a> + {% endifequal %} + </th> + + <th> + {% ifequal order.name "submitter" %} + <a class="colactive" + href="{% listurl order=order.reversed_name %}">Submiter</a> + {% else %} + <a class="colinactive" href="{% listurl order="submitter" %}">Submitter</a> + {% endifequal %} + </th> + + <th> + {% ifequal order.name "state" %} + <a class="colactive" + href="{% listurl order=order.reversed_name %}">State</a> + {% else %} + <a class="colinactive" href="{% listurl order="state" %}">State</a> + {% endifequal %} + </th> + + </tr> + +{% if page %} + {% for patch in page.object_list %} + <tr> + {% if patchform or bundle %} + <td> + <input type="checkbox" name="patch_id:{{patch.id}}"/> + </td> + {% endif %} + <td><a href="{% url patchwork.views.patch.patch patch_id=patch.id %}" + >{{ patch.name }}</a></td> + <td>{{ patch.date|date:"Y-m-d" }}</td> + <td>{{ patch.submitter|personify }}</td> + <td>{{ patch.state }}</td> + </tr> + {% endfor %} +</table> + +{% include "patchwork/pagination.html" %} + +<div class="patchforms" id="patchforms" name="patchforms"> + +{% if patchform %} + <div class="patchform patchform-properties"> + <h3>Properties</h3> + <table class="form"> + <tr> + <th>Change state:</th> + <td> + {{ patchform.state }} + {{ patchform.state.errors }} + </td> + </tr> + <tr> + <th>Delegate to:</td> + <td> + {{ patchform.delegate }} + {{ patchform.delegate.errors }} + </td> + </tr> + <tr> + <th>Archive:</td> + <td> + {{ patchform.archived }} + {{ patchform.archived.errors }} + </td> + </tr> + <tr> + <td></td> + <td> + <input type="submit" name="action" value="Update"/> + </td> + </tr> + </table> + </div> + +{% endif %} + +{% if user.is_authenticated %} + <div class="patchform patchform-bundle"> + <h3>Bundling</h3> + <table class="form"> + <!-- + <tr> + <td>Ack:</td> + <td> + <input type="submit" name="action" value="Ack"/> + </form> + </td> + </tr> + --> + <tr> + <td>Create bundle:</td> + <td> + <input type="text" name="bundle_name"/> + <input name="action" value="Create" type="submit"/> + </td> + </tr> + {% if bundles %} + <tr> + <td>Add to bundle:</td> + <td> + <select name="bundle_id"/> + {% for bundle in bundles %} + <option value="{{bundle.id}}">{{bundle.name}}</option> + {% endfor %} + </select> + <input name="action" value="Add" type="submit"/> + </td> + </tr> + {% endif %} + {% if bundle %} + <tr> + <td>Remove from bundle:</td> + <td> + <input type="hidden" name="removed_bundle_id" value="{{bundle.id}}"/> + <input name="action" value="Remove" type="submit"/> + </td> + </tr> + {% endif %} + </table> + </div> +{% endif %} + + + <div style="clear: both;"> + </div> +</div> + +{% else %} + <tr> + <td colspan="5">No patches to display</td> + </tr> +{% endif %} + + </table> +</form> + diff --git a/templates/patchwork/patch.html b/templates/patchwork/patch.html new file mode 100644 index 0000000..6ca6761 --- /dev/null +++ b/templates/patchwork/patch.html @@ -0,0 +1,214 @@ +{% extends "patchwork/base.html" %} + +{% load syntax %} +{% load person %} +{% load patch %} + +{% block title %}{{patch.name}} - Patchwork{% endblock %} +{% block heading %}{{patch.name}}{%endblock%} + +{% block body %} +<script language="JavaScript" type="text/javascript"> +function toggle_headers(link_id, headers_id) +{ + var link = document.getElementById(link_id) + var headers = document.getElementById(headers_id) + + var hidden = headers.style['display'] == 'none'; + + if (hidden) { + link.innerHTML = 'hide'; + headers.style['display'] = 'block'; + } else { + link.innerHTML = 'show'; + headers.style['display'] = 'none'; + } + +} +</script> + +<table class="patchmeta"> + <tr> + <th>Submitter</th> + <td>{{ patch.submitter|personify }}</td></tr> + </tr> + <tr> + <th>Date</th> + <td>{{ patch.date }}</td> + </tr> + <tr> + <th>Message ID</th> + <td>{{ patch.msgid }}</td> + </tr> + <tr> + <th>Download</th> + <td> + <a href="{% url patchwork.views.patch.mbox patch_id=patch.id %}" + >mbox</a> | + <a href="{% url patchwork.views.patch.content patch_id=patch.id %}" + >patch</a> + </td> + </tr> + <tr> + <th>Permalink</th> + <td><a href="{{ patch.get_absolute_url }}">{{ patch.get_absolute_url }}</a> + </tr> + <tr> + <th>State</td> + <td>{{ patch.state.name }}{% if patch.archived %}, archived{% endif %}</td> + </tr> +{% if patch.delegate %} + <tr> + <th>Delegated to:</td> + <td>{{ patch.delegate.get_profile.name }}</td> + </tr> +{% endif %} + <tr> + <th>Headers</th> + <td><a id="togglepatchheaders" + href="javascript:toggle_headers('togglepatchheaders', 'patchheaders')" + >show</a> + <div id="patchheaders" class="patchheaders" style="display:none;"> + <pre>{{patch.headers}}</pre> + </div> + </td> + </tr> +</table> + +<div class="patchforms"> + +{% if patchform %} + <div class="patchform patchform-properties"> + <h3>Patch Properties</h3> + <form method="post"> + <table class="form"> + <tr> + <th>Change state:</th> + <td> + {{ patchform.state }} + {{ patchform.state.errors }} + </td> + </tr> + <tr> + <th>Delegate to:</td> + <td> + {{ patchform.delegate }} + {{ patchform.delegate.errors }} + </td> + </tr> + <tr> + <th>Archived:</td> + <td> + {{ patchform.archived }} + {{ patchform.archived.errors }} + </td> + </tr> + <tr> + <td></td> + <td> + <input type="submit" value="Update"> + </td> + </tr> + </table> + </form> + </div> +{% endif %} + +{% if createbundleform %} + <div class="patchform patchform-bundle"> + <h3>Bundling</h3> + <table class="form"> + <!-- + <tr> + <td>Ack:</td> + <td> + <form action="{% url patchwork.views.patch patch=patch.id %}" + method="post"> + <input type="hidden" name="action" value="act"/> + <input type="submit" value="Ack"/> + </form> + </td> + </tr> + --> + <tr> + <td>Create bundle:</td> + <td> + {% if createbundleform.non_field_errors %} + <dd class="errors">{{createbundleform.non_field_errors}}</dd> + {% endif %} + <form method="post"> + <input type="hidden" name="action" value="createbundle"/> + {% if createbundleform.name.errors %} + <dd class="errors">{{createbundleform.name.errors}}</dd> + {% endif %} + {{ createbundleform.name }} + <input value="Create" type="submit"/> + </form> + </td> + </tr> +{% if bundles %} + <tr> + <td>Add to bundle:</td> + <td> + <form method="post"> + <input type="hidden" name="action" value="addtobundle"/> + <select name="bundle_id"/> + {% for bundle in bundles %} + <option value="{{bundle.id}}">{{bundle.name}}</option> + {% endfor %} + </select> + <input value="Add" type="submit"/> + </form> + </td> + </tr> +{% endif %} + </table> + </form> + + </div> +{% endif %} + +{% if actionsform %} + <div class="patchform patchform-actions"> + <h3>Actions</h3> + <table class="form"> + <tr> + <td>Ack:</td> + <td> + <form action="{% url patchwork.views.patch patch=patch.id %}" + method="post"> + <input type="hidden" name="action" value="act"/> + <input type="submit" value="Ack"/> + </form> + </td> + </tr> + </table> + </form> + </div> + +{% endif %} + <div style="clear: both;"> + </div> +</div> + + + + +<h2>Comments</h2> +{% for comment in patch.comments %} +<div class="comment"> +<div class="meta">{{ comment.submitter|personify }} - {{comment.date}}</div> +<pre class="content"> +{{ comment|commentsyntax }} +</pre> +</div> +{% endfor %} + +<h2>Patch</h2> +<div class="patch"> +<pre class="content"> +{{ patch|patchsyntax }} +</pre> +</div> + +{% endblock %} diff --git a/templates/patchwork/patchlist.html b/templates/patchwork/patchlist.html new file mode 100644 index 0000000..1bcd2c1 --- /dev/null +++ b/templates/patchwork/patchlist.html @@ -0,0 +1,36 @@ + +{% load person %} + +{% if patches %} +<form method="post"> +<table class="patchlist"> + <tr> + {% if patchform %} + <th/> + {% endif %} + <th><a class="colinactive" href="list?person=846&order=patch">Patch</a></th> + <th><a class="colinactive" href="list?person=846&order=date">Date</a></th> + <th><a class="colinactive" href="list?person=846&order=submitter">Submitter</a></th> + <th><a class="colinactive" href="list?person=846&order=state">State</a></th> + </tr> + {% for patch in patches %} + <tr> + {% if patchform %} + <td> + <input type="hidden" name="patch_ids" value="{{ patch.id }}"/> + <input type="checkbox" name="patch-{{patch.id}}"> + </td> + {% endif %} + <td><a href="{% url patchwork.views.patch.patch patch_id=patch.id %}">{{ patch.name }}</a></td> + <td>{{ patch.date|date:"Y-m-d" }}</td> + <td>{{ patch.submitter|personify }}</td> + <td>{{ patch.state }}</td> + </tr> + {% endfor %} +</table> + +{% include "patchwork/patch-form.html" %} + +{% else %} + <p>No patches to display</p> +{% endif %} diff --git a/templates/patchwork/profile.html b/templates/patchwork/profile.html new file mode 100644 index 0000000..35f3d4f --- /dev/null +++ b/templates/patchwork/profile.html @@ -0,0 +1,114 @@ +{% extends "patchwork/base.html" %} + +{% block title %}User Profile: {{ user.username }}{% endblock %} +{% block heading %}User Profile: {{ user.username }}{% endblock %} + + +{% block body %} + +<p> +{% if user.get_profile.maintainer_projects.count %} +Maintainer of +{% for project in user.get_profile.maintainer_projects.all %} +<a href="{% url patchwork.views.patch.list project_id=project.linkname %}" +>{{ project.linkname }}</a>{% if not forloop.last %},{% endif %}{% endfor %}. +{% endif %} + +{% if user.get_profile.contributor_projects.count %} +Contributor to +{% for project in user.get_profile.contributor_projects.all %} +<a href="{% url patchwork.views.patch.list project_id=project.linkname %}" +>{{ project.linkname }}</a>{% if not forloop.last %},{% endif %}{% endfor %}. +{% endif %} +</p> + +<h2>Todo</h2> +{% if user.get_profile.n_todo_patches %} +<p>Your <a href="{% url patchwork.views.user.todo_lists %}">todo +list</a> contains {{ user.get_profile.n_todo_patches }} +patch{{ user.get_profile.n_todo_patches|pluralize:"es" }}.</p> +{% else %} +<p>Your todo list contains patches that have been delegated to you. You +have no items in your todo list at present.</p> +{% endif %} +<h2>Bundles</h2> + +{% if bundles %} +<table class="bundlelist"> + <tr> + <th>Bundle name</th> + <th>Patches</td> + <th>Public Link</th> + </tr> +{% for bundle in bundles %} + <tr> + <td><a href="{% url patchwork.views.bundle.bundle bundle_id=bundle.id %}" + >{{ bundle.name }}</a></td> + <td style="text-align: right">{{ bundle.n_patches }}</td> + <td> + {% if bundle.public %} + <a href="{{ bundle.public_url }}">{{ bundle.public_url }}</a> + {% endif %} + </td> + </tr> +{% endfor %} +</table> +{% else %} +<p>no bundles</p> +{% endif %} + + +<h2>Linked email addresses</h2> +<p>The following email addresses are associated with this patchwork account. +Adding alternative addresses allows patchwork to group contributions that +you have made under different addressses.</p> +<p>Adding a new email address will send a confirmation email to that +address.</p> +<table class="vertical" style="width: 20em;"> + <tr> + <th>email</th> + <th/> + </tr> + <tr> + <td>{{ user.email }}</td> + <td></td> + </tr> +{% for email in linked_emails %} + {% ifnotequal email.email user.email %} + <tr> + <td>{{ email.email }}</td> + <td> + {% ifnotequal user.email email.email %} + <form action="{% url patchwork.views.user.unlink person_id=email.id %}" + method="post"> + <input type="submit" value="Unlink"/> + </form> + {% endifnotequal %} + </tr> + {% endifnotequal %} +{% endfor %} + <tr> + <td colspan="2"> + <form action="{% url patchwork.views.user.link %}" method="post"> + {{ linkform.email }} + <input type="submit" value="Add"/> + </form> + </td> + </tr> +</table> + +<h2>Settings</h2> + +<form method="post"> + <table class="form"> +{{ profileform }} + <tr> + <td/> + <td> + <input type="submit" value="Apply"/> + </td> + </tr> + </table> +</form> + +{% endblock %} diff --git a/templates/patchwork/project.html b/templates/patchwork/project.html new file mode 100644 index 0000000..4ea1009 --- /dev/null +++ b/templates/patchwork/project.html @@ -0,0 +1,32 @@ +{% extends "patchwork/base.html" %} + +{% block title %}{{ project.name }}{% endblock %} +{% block heading %}{{ project.name }}{% endblock %} + +{% block body %} + +<table class="horizontal"> + <tr> + <th>Name</th> + <td>{{project.name}} + </tr> + <tr> + <th>List address</th> + <td>{{project.listemail}}</td> + </tr> + <tr> + <th>Maintainer{{maintainers|length|pluralize}}</th> + <td> + {% for maintainer in maintainers %} + {{ maintainer.get_profile.name }} + <<a href="mailto:{{maintainer.email}}">{{maintainer.email}}</a>> + <br /> + {% endfor %} + </tr> + <tr> + <th>Patch count</th> + <td>{{n_patches}} (+ {{n_archived_patches}} archived)</td> + </tr> +</table> + +{% endblock %} diff --git a/templates/patchwork/projects.html b/templates/patchwork/projects.html new file mode 100644 index 0000000..349f314 --- /dev/null +++ b/templates/patchwork/projects.html @@ -0,0 +1,21 @@ +{% extends "patchwork/base.html" %} + +{% block title %}Project List{% endblock %} +{% block heading %}Project List{% endblock %} + +{% block body %} + +{% if projects %} + <dl> + {% for p in projects %} + <dt> + <a href="{% url patchwork.views.patch.list project_id=p.linkname %}" + >{{p.linkname}}</a></dt> + <dd>{{p.name}}</dd> + {% endfor %} + </dl> +{% else %} + <p>Patchwork doesn't have any projects to display!</p> +{% endif %} + +{% endblock %} diff --git a/templates/patchwork/register-confirm.html b/templates/patchwork/register-confirm.html new file mode 100644 index 0000000..2af5744 --- /dev/null +++ b/templates/patchwork/register-confirm.html @@ -0,0 +1,13 @@ +{% extends "patchwork/base.html" %} + +{% block title %}Registration{% endblock %} +{% block heading %}Registration{% endblock %} + +{% block body %} +<p>Registraton confirmed!</p> + +<p>Your patchwork registration is complete. Head over to your <a + href="{% url patchwork.views.user.profile %}">profile</a> to start using +patchwork's extra features.</p> + +{% endblock %} diff --git a/templates/patchwork/register.html b/templates/patchwork/register.html new file mode 100644 index 0000000..8bd422e --- /dev/null +++ b/templates/patchwork/register.html @@ -0,0 +1,122 @@ +{% extends "patchwork/base.html" %} + +{% block title %}Patchwork Registration{% endblock %} +{% block heading %}Patchwork Registration{% endblock %} + + +{% block body %} + +{% if request %} + <p>Registration successful!</p> + <p>email sent to {{ request.email }}</p> + <p>Beta note: While we're testing, the confirmation email has been replaced + by a single link: + <a href="{% url patchwork.views.user.register_confirm key=request.key %}" + >{% url patchwork.views.user.register_confirm key=request.key %}</a> +</p> +{% else %} +<p>By creating a patchwork account, you can:<p> +<ul> + <li>create "bundles" of patches</li> + <li>update the state of your own patches</li> +</ul> +<form method="post"> +<table class="form registerform"> + <tr> + <th colspan="2" class="headerrow">register</th> + </tr> + {% if error %} + <tr> + <td colspan="2">{{ error }}</td> + </tr> + {% endif %} + + <tr> + <td>{{ form.first_name.label_tag }}</td> + <td> +{% if form.first_name.errors %} + {{ form.first_name.errors }} +{% endif %} + {{ form.first_name }} +{% if form.first_name.help_text %} + <div class="help_text"/>{{ form.first_name.help_text }}</div> +{% endif %} + </td> + </tr> + + <tr> + <td>{{ form.last_name.label_tag }}</td> + <td> +{% if form.last_name.errors %} + {{ form.last_name.errors }} +{% endif %} + {{ form.last_name }} +{% if form.last_name.help_text %} + <div class="help_text"/>{{ form.last_name.help_text }}</div> +{% endif %} + </td> + </tr> + + <tr> + <td></td> + <td class="form-help"> + Your name is used to identify you on the site + </td> + </tr> + + <tr> + <td>{{ form.email.label_tag }}</td> + <td> +{% if form.email.errors %} + {{ form.email.errors }} +{% endif %} + {{ form.email }} +{% if form.email.help_text %} + <div class="help_text"/>{{ form.email.help_text }}</div> +{% endif %} + </td> + </tr> + + <tr> + <td></td> + <td class="form-help"> + Patchwork will send a confirmation email to this address + </td> + </tr> + + <tr> + <td>{{ form.username.label_tag }}</td> + <td> +{% if form.username.errors %} + {{ form.username.errors }} +{% endif %} + {{ form.username }} +{% if form.username.help_text %} + <div class="help_text"/>{{ form.username.help_text }}</div> +{% endif %} + </td> + </tr> + + <tr> + <td>{{ form.password.label_tag }}</td> + <td> +{% if form.password.errors %} + {{ form.password.errors }} +{% endif %} + {{ form.password }} +{% if form.password.help_text %} + <div class="help_text"/>{{ form.password.help_text }}</div> +{% endif %} + </td> + </tr> + + <tr> + <td colspan="2" class="submitrow"> + <input type="submit" value="Register"/> + </td> + </tr> +</table> +</form> +{% endif %} + +{% endblock %} diff --git a/templates/patchwork/todo-list.html b/templates/patchwork/todo-list.html new file mode 100644 index 0000000..8a5ab7a --- /dev/null +++ b/templates/patchwork/todo-list.html @@ -0,0 +1,17 @@ +{% extends "patchwork/base.html" %} + +{% load person %} + +{% block title %}{{ user }}'s todo list{% endblock %} +{% block heading %}{{user}}'s todo list for {{ project.linkname }}{% endblock %} + +{% block body %} + +<p>A Patchwork Todo-list contains patches that are assigned to you, and +are in an "action required" state +({% for state in action_required_states %}{% if forloop.last and not forloop.first %} or {% endif %}{{ state }}{% if not forloop.last and not forloop.first %}, {%endif %}{% endfor %}), and are not archived. +</p> + +{% include "patchwork/patch-list.html" %} + +{% endblock %} diff --git a/templates/patchwork/todo-lists.html b/templates/patchwork/todo-lists.html new file mode 100644 index 0000000..8eb10cc --- /dev/null +++ b/templates/patchwork/todo-lists.html @@ -0,0 +1,29 @@ +{% extends "patchwork/base.html" %} + +{% block title %}{{ user }}'s todo lists{% endblock %} +{% block heading %}{{ user }}'s todo lists{% endblock %} + +{% block body %} + +{% if todo_lists %} +<p>You have multiple todo lists. Each todo list contains patches for a single + project.</p> +<table class="vertical"> + <tr> + <th>project</th> + <th>patches</th> + </tr> +{% for todo_list in todo_lists %} + <tr> + <td><a + href="{% url patchwork.views.user.todo_list project_id=todo_list.project.linkname %}" + >{{ todo_list.project.name }}</a></td> + <td class="numberformat">{{ todo_list.n_patches }}</td> + </tr> +{% endfor %} +</table> + +{% else %} + No todo lists +{% endif %} +{% endblock %} diff --git a/templates/patchwork/user-link-confirm.html b/templates/patchwork/user-link-confirm.html new file mode 100644 index 0000000..61979cf --- /dev/null +++ b/templates/patchwork/user-link-confirm.html @@ -0,0 +1,19 @@ +{% extends "patchwork/base.html" %} + +{% block title %}{{ user.username }}{% endblock %} +{% block heading %}link accounts for {{ user.username }}{% endblock %} + + +{% block body %} + +{% if errors %} +<p>{{ errors }}</p> +{% else %} + <p>You have sucessfully linked the email address {{ person.email }} to + your patchwork account</p> + +{% endif %} +<p>Back to <a href="{% url patchwork.views.user.profile %}">your + profile</a>.</p> + +{% endblock %} diff --git a/templates/patchwork/user-link.html b/templates/patchwork/user-link.html new file mode 100644 index 0000000..3eeb527 --- /dev/null +++ b/templates/patchwork/user-link.html @@ -0,0 +1,30 @@ +{% extends "patchwork/base.html" %} + +{% block title %}{{ user.username }}{% endblock %} +{% block heading %}link accounts for {{ user.username }}{% endblock %} + + +{% block body %} + +{% if confirmation %} +<p>A confirmation email has been sent to {{ confirmation.email }}.</p> + +<p>beta link: <a + href="{% url patchwork.views.user.link_confirm key=confirmation.key %}" + >{% url patchwork.views.user.link_confirm key=confirmation.key %}</a></p> + +{% else %} + + {% if form.errors %} + <p>There was an error submitting your link request.</p> + {{ form.non_field_errors }} + {% endif %} + + <form action="{% url patchwork.views.user.link %}" method="post"> + {{linkform.email.errors}} + Link an email address: {{ linkform.email }} + </form> + +{% endif %} + +{% endblock %} |