Make use of filters to make code more readable
This commit is contained in:
parent
92f3d2a9a1
commit
dc0de33664
|
@ -1,4 +1,3 @@
|
|||
from jinja2.utils import Markup
|
||||
from srht.config import cfg
|
||||
from srht.database import DbSession
|
||||
from srht.flask import SrhtFlask
|
||||
|
@ -28,8 +27,11 @@ class TodoApp(SrhtFlask):
|
|||
|
||||
self.add_template_filter(filters.label_badge)
|
||||
self.add_template_filter(urls.label_search_url)
|
||||
self.add_template_filter(urls.ticket_edit_url)
|
||||
self.add_template_filter(urls.ticket_url)
|
||||
self.add_template_filter(urls.tracker_labels_url)
|
||||
self.add_template_filter(urls.tracker_url)
|
||||
self.add_template_filter(urls.user_url)
|
||||
|
||||
meta_client_id = cfg("todo.sr.ht", "oauth-client-id")
|
||||
meta_client_secret = cfg("todo.sr.ht", "oauth-client-secret")
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import re
|
||||
from flask import Blueprint, render_template, request, url_for, abort, redirect
|
||||
from flask import Blueprint, render_template, request, abort, redirect
|
||||
from flask_login import current_user
|
||||
from srht.database import db
|
||||
from srht.flask import loginrequired
|
||||
|
@ -69,16 +69,14 @@ def enable_notifications(owner, name, ticket_id):
|
|||
).one_or_none()
|
||||
|
||||
if sub:
|
||||
return redirect(url_for(".ticket_GET",
|
||||
owner=owner, name=name, ticket_id=ticket.scoped_id))
|
||||
return redirect(ticket_url(ticket))
|
||||
|
||||
sub = TicketSubscription()
|
||||
sub.ticket_id = ticket.id
|
||||
sub.user_id = current_user.id
|
||||
db.session.add(sub)
|
||||
db.session.commit()
|
||||
return redirect(url_for(".ticket_GET",
|
||||
owner=owner, name=name, ticket_id=ticket.scoped_id))
|
||||
return redirect(ticket_url(ticket))
|
||||
|
||||
@ticket.route("/<owner>/<name>/<int:ticket_id>/disable_notifications", methods=["POST"])
|
||||
@loginrequired
|
||||
|
@ -97,13 +95,11 @@ def disable_notifications(owner, name, ticket_id):
|
|||
).one_or_none()
|
||||
|
||||
if not sub:
|
||||
return redirect(url_for(".ticket_GET",
|
||||
owner=owner, name=name, ticket_id=ticket.scoped_id))
|
||||
return redirect(ticket_url(ticket))
|
||||
|
||||
db.session.delete(sub)
|
||||
db.session.commit()
|
||||
return redirect(url_for(".ticket_GET",
|
||||
owner=owner, name=name, ticket_id=ticket.scoped_id))
|
||||
return redirect(ticket_url(ticket))
|
||||
|
||||
@ticket.route("/<owner>/<name>/<int:ticket_id>/comment", methods=["POST"])
|
||||
@loginrequired
|
||||
|
@ -195,10 +191,7 @@ def ticket_edit_POST(owner, name, ticket_id):
|
|||
ticket.description = desc
|
||||
db.session.commit()
|
||||
|
||||
return redirect(url_for("ticket.ticket_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=name,
|
||||
ticket_id=ticket.scoped_id))
|
||||
return redirect(ticket_url(ticket))
|
||||
|
||||
@ticket.route("/<owner>/<name>/<int:ticket_id>/add_label", methods=["POST"])
|
||||
@loginrequired
|
||||
|
@ -249,10 +242,7 @@ def ticket_add_label(owner, name, ticket_id):
|
|||
db.session.add(event)
|
||||
db.session.commit()
|
||||
|
||||
return redirect(url_for("ticket.ticket_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=name,
|
||||
ticket_id=ticket_id))
|
||||
return redirect(ticket_url(ticket))
|
||||
|
||||
@ticket.route("/<owner>/<name>/<int:ticket_id>/remove_label/<int:label_id>",
|
||||
methods=["POST"])
|
||||
|
@ -285,7 +275,4 @@ def ticket_remove_label(owner, name, ticket_id, label_id):
|
|||
db.session.delete(ticket_label)
|
||||
db.session.commit()
|
||||
|
||||
return redirect(url_for("ticket.ticket_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=name,
|
||||
ticket_id=ticket_id))
|
||||
return redirect(ticket_url(ticket))
|
||||
|
|
|
@ -11,6 +11,7 @@ from todosrht.types import TicketSubscription
|
|||
from todosrht.types import Event, EventType, EventNotification
|
||||
from todosrht.types import Tracker, Ticket, TicketStatus, TicketAccess
|
||||
from todosrht.types import Label, TicketLabel
|
||||
from todosrht.urls import tracker_url
|
||||
from srht.config import cfg
|
||||
from srht.database import db
|
||||
from srht.flask import paginate_query, loginrequired
|
||||
|
@ -81,9 +82,7 @@ def create_POST():
|
|||
owner=current_user.username,
|
||||
name=name))
|
||||
|
||||
return redirect(url_for(".tracker_GET",
|
||||
owner=current_user.canonical_name(),
|
||||
name=name))
|
||||
return redirect(tracker_url(tracker))
|
||||
|
||||
def return_tracker(tracker, access, **kwargs):
|
||||
another = session.get("another") or False
|
||||
|
@ -137,14 +136,14 @@ def enable_notifications(owner, name):
|
|||
).one_or_none()
|
||||
|
||||
if sub:
|
||||
return redirect(url_for(".tracker_GET", owner=owner, name=name))
|
||||
return redirect(tracker_url(tracker))
|
||||
|
||||
sub = TicketSubscription()
|
||||
sub.tracker_id = tracker.id
|
||||
sub.user_id = current_user.id
|
||||
db.session.add(sub)
|
||||
db.session.commit()
|
||||
return redirect(url_for(".tracker_GET", owner=owner, name=name))
|
||||
return redirect(tracker_url(tracker))
|
||||
|
||||
@tracker.route("/<owner>/<name>/disable_notifications", methods=["POST"])
|
||||
@loginrequired
|
||||
|
@ -160,11 +159,11 @@ def disable_notifications(owner, name):
|
|||
).one_or_none()
|
||||
|
||||
if not sub:
|
||||
return redirect(url_for(".tracker_GET", owner=owner, name=name))
|
||||
return redirect(tracker_url(tracker))
|
||||
|
||||
db.session.delete(sub)
|
||||
db.session.commit()
|
||||
return redirect(url_for(".tracker_GET", owner=owner, name=name))
|
||||
return redirect(tracker_url(tracker))
|
||||
|
||||
def parse_html_perms(short, valid):
|
||||
result = 0
|
||||
|
@ -219,7 +218,7 @@ def configure_POST(owner, name):
|
|||
tracker.description = desc
|
||||
db.session.commit()
|
||||
|
||||
return redirect(url_for(".tracker_GET", owner=owner, name=name))
|
||||
return redirect(tracker_url(tracker))
|
||||
|
||||
|
||||
@tracker.route("/<owner>/<name>/configure")
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from jinja2.utils import Markup, escape
|
||||
from srht.flask import icon, csrf_token
|
||||
from todosrht.urls import label_search_url, label_remove_url
|
||||
from todosrht import urls
|
||||
|
||||
|
||||
def label_badge(label, cls="", remove_from_ticket=None):
|
||||
|
@ -17,10 +17,10 @@ def label_badge(label, cls="", remove_from_ticket=None):
|
|||
html_class = escape(f"label {cls}".strip())
|
||||
|
||||
style = f"color: {color}; background-color: {bg_color}"
|
||||
search_url = label_search_url(label)
|
||||
search_url = urls.label_search_url(label)
|
||||
|
||||
if remove_from_ticket:
|
||||
remove_url = label_remove_url(label, remove_from_ticket)
|
||||
remove_url = urls.label_remove_url(label, remove_from_ticket)
|
||||
remove_form = f"""
|
||||
<form method="POST" action="{remove_url}">
|
||||
{csrf_token()}
|
||||
|
|
|
@ -50,13 +50,9 @@
|
|||
<div class="tracker-list">
|
||||
{% for tracker in trackers %}
|
||||
<h4>
|
||||
<a href="{{ url_for("html.user_GET",
|
||||
username=tracker.owner.username) }}"
|
||||
>{{tracker.owner.canonical_name()}}</a>/<a
|
||||
href="{{ url_for("tracker.tracker_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name) }}"
|
||||
>{{tracker.name}}</a>
|
||||
<a href="{{ tracker.owner|user_url }}"
|
||||
>{{ tracker.owner }}</a>/<a href="{{ tracker|tracker_url }}"
|
||||
>{{ tracker.name }}</a>
|
||||
</h4>
|
||||
<span class="text-muted">Last active {{ tracker.updated | date }}</span>
|
||||
{% endfor %}
|
||||
|
|
|
@ -13,15 +13,10 @@
|
|||
<div class="col-md-12 header-tabbed vertical">
|
||||
<h2>
|
||||
<span class="d-block d-md-inline">
|
||||
<a href="{{ url_for("html.user_GET",
|
||||
username=tracker.owner.username) }}"
|
||||
>{{tracker.owner.canonical_name()}}</a>/<a
|
||||
href="{{ url_for("tracker.tracker_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name) }}"
|
||||
>{{tracker.name}}</a>/#{{ticket.scoped_id}}<span
|
||||
class="d-none d-md-inline"
|
||||
>:</span>
|
||||
<a href="{{ tracker.owner|user_url }}"
|
||||
>{{ tracker.owner }}</a>/<a href="{{ tracker|tracker_url }}"
|
||||
>{{ tracker.name }}</a>/#{{ ticket.scoped_id }}<span
|
||||
class="d-none d-md-inline">:</span>
|
||||
</span>
|
||||
<span class="d-block d-md-inline">
|
||||
{{ticket.title}}
|
||||
|
@ -29,17 +24,10 @@
|
|||
</h2>
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item">
|
||||
<a href="{{ url_for(".ticket_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name,
|
||||
ticket_id=ticket.scoped_id) }}"
|
||||
class="nav-link">view</a>
|
||||
<a href="{{ ticket|ticket_url }}" class="nav-link">view</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ url_for(".ticket_edit_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name,
|
||||
ticket_id=ticket.scoped_id) }}"
|
||||
<a href="{{ ticket|ticket_edit_url }}"
|
||||
class="nav-link active">edit</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -74,11 +62,9 @@
|
|||
{{valid.summary("description")}}
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
<a href="{{ url_for(".ticket_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name,
|
||||
ticket_id=ticket.scoped_id) }}" class="btn btn-default"
|
||||
>Cancel</a>
|
||||
<a href="{{ ticket|ticket_url }}" class="btn btn-default">
|
||||
Cancel
|
||||
</a>
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
|
|
|
@ -2,43 +2,32 @@
|
|||
{% for event in events %}
|
||||
<div class="event">
|
||||
<h4>
|
||||
<a href="{{ url_for("ticket.ticket_GET",
|
||||
owner=event.ticket.tracker.owner.canonical_name(),
|
||||
name=event.ticket.tracker.name,
|
||||
ticket_id=event.ticket.scoped_id) }}">
|
||||
<a href="{{ event.ticket|ticket_url }}">
|
||||
#{{event.ticket.scoped_id}}
|
||||
</a> {{ event.ticket.title }}
|
||||
<small class="pull-right">{{ event.created | date }}</small>
|
||||
</h4>
|
||||
<p>
|
||||
{% if EventType.created in event.event_type %}
|
||||
Ticket created by
|
||||
<a href="/~{{ event.ticket.submitter.username }}">
|
||||
~{{ event.ticket.submitter.username }}
|
||||
Ticket created by <a href="{{ event.ticket.submitter|user_url }}">
|
||||
{{ event.ticket.submitter }}
|
||||
</a>
|
||||
{% elif EventType.comment in event.event_type %}
|
||||
Comment by
|
||||
<a href="/~{{ event.comment.submitter.username }}">
|
||||
~{{ event.comment.submitter.username }}
|
||||
Comment by <a href="{{ event.comment.submitter|user_url }}">
|
||||
{{ event.comment.submitter }}
|
||||
</a>
|
||||
{% elif EventType.label_added in event.event_type %}
|
||||
{{ event.label|label_badge(cls="small") }} added by
|
||||
<a href="/~{{ event.user.username }}">
|
||||
~{{ event.user.username }}
|
||||
</a>
|
||||
<a href="{{ event.user|user_url }}">{{ event.user }}</a>
|
||||
{% elif EventType.label_removed in event.event_type %}
|
||||
{{ event.label|label_badge(cls="small") }} removed by
|
||||
<a href="/~{{ event.user.username }}">
|
||||
~{{ event.user.username }}
|
||||
</a>
|
||||
<a href="{{ event.user|user_url }}">{{ event.user }}</a>
|
||||
{% endif %}
|
||||
on <a href="{{ url_for("html.user_GET",
|
||||
username=event.ticket.tracker.owner.username) }}"
|
||||
>{{event.ticket.tracker.owner.canonical_name()}}</a>/<a
|
||||
href="{{ url_for("tracker.tracker_GET",
|
||||
owner=event.ticket.tracker.owner.canonical_name(),
|
||||
name=event.ticket.tracker.name) }}"
|
||||
>{{event.ticket.tracker.name}}</a>
|
||||
{% with tracker=event.ticket.tracker %}
|
||||
on <a href="{{ tracker.owner|user_url }}"
|
||||
>{{ tracker.owner }}</a>/<a href="{{ tracker|tracker_url }}"
|
||||
>{{ tracker.name }}</a>
|
||||
{% endwith %}
|
||||
</p>
|
||||
<blockquote>
|
||||
{% if event.comment %}
|
||||
|
|
|
@ -13,15 +13,10 @@
|
|||
<div class="col-md-12">
|
||||
<h2 style="margin: 0;">
|
||||
<span class="d-block d-md-inline">
|
||||
<a href="{{ url_for("html.user_GET",
|
||||
username=tracker.owner.username) }}"
|
||||
>{{tracker.owner.canonical_name()}}</a>/<a
|
||||
href="{{ url_for("tracker.tracker_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name) }}"
|
||||
>{{tracker.name}}</a>/#{{ticket.scoped_id}}<span
|
||||
class="d-none d-md-inline"
|
||||
>:</span>
|
||||
<a href="{{ tracker.owner|user_url }}"
|
||||
>{{ tracker.owner }}</a>/<a href="{{ tracker|tracker_url }}"
|
||||
>{{ tracker.name }}</a>/#{{ ticket.scoped_id }}<span
|
||||
class="d-none d-md-inline">:</span>
|
||||
</span>
|
||||
<span class="d-block d-md-inline">
|
||||
{{ticket.title}}
|
||||
|
@ -36,18 +31,12 @@
|
|||
<div class="col-md-12 header-tabbed" style="border: none; margin: 0;">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item">
|
||||
<a href="{{ url_for(".ticket_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name,
|
||||
ticket_id=ticket.scoped_id) }}"
|
||||
<a href="{{ ticket|ticket_url }}"
|
||||
class="nav-link active">view</a>
|
||||
</li>
|
||||
{% if TicketAccess.edit in access %}
|
||||
<li class="nav-item">
|
||||
<a href="{{ url_for(".ticket_edit_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name,
|
||||
ticket_id=ticket.scoped_id) }}"
|
||||
<a href="{{ ticket|ticket_edit_url }}"
|
||||
class="nav-link">edit</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
@ -111,10 +100,9 @@
|
|||
</dd>
|
||||
<dt class="col-md-3">Submitter</dt>
|
||||
<dd class="col-md-9">
|
||||
<a
|
||||
href="{{url_for("html.user_GET",
|
||||
username=ticket.submitter.username)}}"
|
||||
>~{{ ticket.submitter.username }}</a>
|
||||
<a href="{{ ticket.submitter|user_url }}">
|
||||
{{ ticket.submitter }}
|
||||
</a>
|
||||
</dd>
|
||||
<dt class="col-md-3">Submitted</dt>
|
||||
<dd class="col-md-9">{{ ticket.created | date }}</dd>
|
||||
|
@ -178,9 +166,8 @@
|
|||
{% for event in ticket.events %}
|
||||
{% if event.event_type != EventType.created %}
|
||||
<h4>
|
||||
<a href="{{url_for("html.user_GET",
|
||||
username=event.user.username)}}">
|
||||
~{{ event.user.username }}
|
||||
<a href="{{ event.user|user_url }}">
|
||||
{{ event.user }}
|
||||
</a>
|
||||
<span class="pull-right">
|
||||
<small>{{ event.created | date }}</small>
|
||||
|
|
|
@ -33,18 +33,14 @@
|
|||
<div class="row">
|
||||
<div class="col-md-12 header-tabbed">
|
||||
<h2>
|
||||
<a href="{{ url_for("html.user_GET",
|
||||
username=tracker.owner.username) }}"
|
||||
>{{tracker.owner.canonical_name()}}</a>/{{tracker.name}}
|
||||
<a href="{{ tracker.owner|user_url }}">{{ tracker.owner }}</a
|
||||
>/{{ tracker.name }}
|
||||
</h2>
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item">
|
||||
<a
|
||||
class="nav-link"
|
||||
href="{{ url_for("tracker.tracker_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name) }}"
|
||||
>{{icon('caret-left')}} back</a>
|
||||
<a class="nav-link" href="{{ tracker|tracker_url }}">
|
||||
{{icon('caret-left')}} back
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item d-none d-sm-block">
|
||||
<a class="nav-link active" href="{{url_for(".configure_GET",
|
||||
|
@ -144,13 +140,9 @@
|
|||
</div>
|
||||
{{ valid.summary() }}
|
||||
<span class="pull-right">
|
||||
<a
|
||||
href="{{ url_for(
|
||||
".tracker_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name) }}"
|
||||
class="btn btn-default"
|
||||
>Cancel</a>
|
||||
<a href="{{ tracker|tracker_url }}" class="btn btn-default">
|
||||
Cancel
|
||||
</a>
|
||||
<button type="submit" class="btn btn-primary">
|
||||
Save {{icon("caret-right")}}
|
||||
</button>
|
||||
|
|
|
@ -13,25 +13,18 @@
|
|||
<div class="row">
|
||||
<div class="col-md-12 header-tabbed">
|
||||
<h2>
|
||||
<a href="{{ url_for("html.user_GET",
|
||||
username=tracker.owner.username) }}"
|
||||
>{{tracker.owner.canonical_name()}}</a>/{{tracker.name}}
|
||||
<a href="{{ tracker.owner|user_url }}">{{ tracker.owner }}</a
|
||||
>/{{ tracker.name }}
|
||||
</h2>
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item">
|
||||
<a
|
||||
class="nav-link"
|
||||
href="{{ url_for("tracker.tracker_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name) }}"
|
||||
>{{icon('caret-left')}} back</a>
|
||||
<a class="nav-link" href="{{ tracker|tracker_url }}">
|
||||
{{icon('caret-left')}} back
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active"
|
||||
href="{{url_for(".tracker_labels_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name
|
||||
)}}">labels</a>
|
||||
href="{{ tracker|tracker_labels_url }}">labels</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
@ -11,17 +11,13 @@
|
|||
<div class="row">
|
||||
<div class="col-md-12 header-tabbed">
|
||||
<h2>
|
||||
<a href="{{ url_for("html.user_GET",
|
||||
username=tracker.owner.username) }}"
|
||||
>{{tracker.owner.canonical_name()}}</a>/{{tracker.name}}
|
||||
<a href="{{ tracker.owner|user_url }}">{{ tracker.owner }}</a
|
||||
>/{{ tracker.name }}
|
||||
</h2>
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ "active" if not search else "" }}"
|
||||
href="{{url_for(".tracker_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name
|
||||
)}}">open tickets</a>
|
||||
href="{{ tracker|tracker_url }}">open tickets</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{
|
||||
|
@ -38,10 +34,7 @@
|
|||
{% endif %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link"
|
||||
href="{{url_for(".tracker_labels_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name
|
||||
)}}">labels</a>
|
||||
href="{{ tracker|tracker_labels_url }}">labels</a>
|
||||
</li>
|
||||
{% if current_user and current_user.id == tracker.owner_id %}
|
||||
<li class="nav-item d-none d-sm-block">
|
||||
|
@ -145,10 +138,8 @@
|
|||
<div class="ticket-list">
|
||||
{% for ticket in tickets %}
|
||||
<div class="id">
|
||||
<a href="{{url_for("ticket.ticket_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name,
|
||||
ticket_id=ticket.scoped_id)}}">#{{ticket.scoped_id}}</a></div>
|
||||
<a href="{{ ticket|ticket_url }}">#{{ticket.scoped_id}}</a>
|
||||
</div>
|
||||
<div class="title">
|
||||
{{ ticket.title }}
|
||||
<span class="pull-right">
|
||||
|
@ -159,9 +150,9 @@
|
|||
</div>
|
||||
<div class="updated">{{ ticket.updated | date }}</div>
|
||||
<div class="submitter">
|
||||
<a href="{{url_for("html.user_GET",
|
||||
username=ticket.submitter.username)}}"
|
||||
>~{{ ticket.submitter.username }}</a>
|
||||
<a href="{{ ticket.submitter|user_url }}">
|
||||
{{ ticket.submitter }}
|
||||
</a>
|
||||
</div>
|
||||
{% if ticket.new_updates(current_user) %}
|
||||
<div class="comments">
|
||||
|
|
|
@ -4,11 +4,8 @@
|
|||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<h2>
|
||||
<a href="{{url_for("html.user_GET", username=user.username)}}">
|
||||
~{{ user.username }}
|
||||
</a>
|
||||
<a href="{{ user|user_url }}">{{ user }}</a>
|
||||
</h2>
|
||||
|
||||
{% if profile.get("location") %}
|
||||
<p>{{profile["location"]}}</p>
|
||||
{% endif %}
|
||||
|
@ -37,13 +34,9 @@
|
|||
{% for tracker in trackers %}
|
||||
<div class="event">
|
||||
<h4>
|
||||
<a href="{{ url_for("html.user_GET",
|
||||
username=tracker.owner.username) }}"
|
||||
>{{tracker.owner.canonical_name()}}</a>/<a
|
||||
href="{{ url_for("tracker.tracker_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name) }}"
|
||||
>{{tracker.name}}</a>
|
||||
<a href="{{ user|user_url }}"
|
||||
>{{ user }}</a>/<a href="{{ tracker|tracker_url }}"
|
||||
>{{ tracker.name }}</a>
|
||||
</h4>
|
||||
<span class="text-muted">
|
||||
Last active {{ tracker.updated | date }}
|
||||
|
|
|
@ -28,3 +28,5 @@ class User(Base):
|
|||
def get_id(self):
|
||||
return self.username
|
||||
|
||||
def __str__(self):
|
||||
return self.canonical_name()
|
||||
|
|
|
@ -6,6 +6,11 @@ def tracker_url(tracker):
|
|||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name)
|
||||
|
||||
def tracker_labels_url(tracker):
|
||||
return url_for("tracker.tracker_labels_GET",
|
||||
owner=tracker.owner.canonical_name(),
|
||||
name=tracker.name)
|
||||
|
||||
def ticket_url(ticket, comment=None):
|
||||
ticket_url = url_for("ticket.ticket_GET",
|
||||
owner=ticket.tracker.owner.canonical_name(),
|
||||
|
@ -17,6 +22,12 @@ def ticket_url(ticket, comment=None):
|
|||
|
||||
return ticket_url
|
||||
|
||||
def ticket_edit_url(ticket):
|
||||
return url_for("ticket.ticket_edit_GET",
|
||||
owner=ticket.tracker.owner.canonical_name(),
|
||||
name=ticket.tracker.name,
|
||||
ticket_id=ticket.scoped_id)
|
||||
|
||||
def label_search_url(label):
|
||||
"""Return the URL to the tracker page listing all tickets which have the
|
||||
label applied."""
|
||||
|
@ -24,10 +35,20 @@ def label_search_url(label):
|
|||
tracker_url(label.tracker),
|
||||
unicode_urlencode(label.name))
|
||||
|
||||
def label_add_url(label, ticket):
|
||||
"""Return the URL to remove a label from a ticket."""
|
||||
return url_for("ticket.ticket_add_label",
|
||||
owner=ticket.tracker.owner.canonical_name(),
|
||||
name=ticket.tracker.name,
|
||||
ticket_id=ticket.scoped_id)
|
||||
|
||||
def label_remove_url(label, ticket):
|
||||
"""Return the URL to remove a label from an ticket."""
|
||||
"""Return the URL to add a label to a ticket."""
|
||||
return url_for("ticket.ticket_remove_label",
|
||||
owner=ticket.tracker.owner.canonical_name(),
|
||||
name=ticket.tracker.name,
|
||||
ticket_id=ticket.scoped_id,
|
||||
label_id=label.id,)
|
||||
label_id=label.id)
|
||||
|
||||
def user_url(user):
|
||||
return url_for("html.user_GET", username=user.username)
|
||||
|
|
Loading…
Reference in New Issue