From 1ff1990f1e3bced862ca20dc22ce351f19dff855 Mon Sep 17 00:00:00 2001 From: Ryan Lerch Date: Jun 18 2018 08:00:20 +0000 Subject: [PATCH 1/3] reworked the issues list page --- diff --git a/pagure/templates/_render_issues.html b/pagure/templates/_render_issues.html index 9fb5383..e9a9af6 100644 --- a/pagure/templates/_render_issues.html +++ b/pagure/templates/_render_issues.html @@ -1,11 +1,11 @@ -{% macro render_issue_row(issue, repo) %} +{% macro render_issue_row(issue, repo, username) %} {% if issue.status == 'Open' %} {% set status_color = "success" %} {% else %} {% set status_color = "danger" %} {% endif %} -
+
@@ -53,7 +53,7 @@ {% endif %} {% if issue.assignee %} - + {{ issue.assignee.username | avatar(size=20) | safe}} @@ -67,5 +67,5 @@ {% endif %}
-
+
{% endmacro%} diff --git a/pagure/templates/issues.html b/pagure/templates/issues.html index ec24dfb..4b36306 100644 --- a/pagure/templates/issues.html +++ b/pagure/templates/issues.html @@ -1,466 +1,658 @@ {% extends "repo_master.html" %} {% from "_render_repo.html" import pagination_link %} +{% from "_render_issues.html" import render_issue_row %} {% block title %}Issues - {{ repo.namespace + '/' if repo.namespace }}{{ repo.name }}{% endblock %} {% set tag = "home"%} +{% block header %} + + +{% endblock %} -{% block repo %} +{% block repo %} + {% if status|lower in ['open', 'true'] %} + {% set status_filter = 'open' %} + {% set filtered_open_issues_count = issues_cnt %} + {% set filtered_closed_issues_count = oth_issues_cnt %} + {% set filtered_all_issues_count = issues_cnt+oth_issues_cnt %} + {% elif not status %} + {% set status_filter = 'all' %} + {% set filtered_open_issues_count = oth_issues_cnt %} + {% set filtered_closed_issues_count = issues_cnt-oth_issues_cnt %} + {% set filtered_all_issues_count = issues_cnt %} + {% else %} + {% set status_filter = 'closed' %} + {% set filtered_open_issues_count = oth_issues_cnt %} + {% set filtered_closed_issues_count = issues_cnt %} + {% set filtered_all_issues_count = issues_cnt+oth_issues_cnt %} + {% endif %} -

- {% if status|lower in ['open', 'true'] %} - {{ issues|count }} Open Issues (of {{ issues_cnt }}) - {% elif status|lower not in ['open', 'true', 'all', 'none'] %} - {{ issues|count }} Closed Issues (of {{ issues_cnt }}) - {% else %} - {{ issues|count }} Issues (of {{ issues_cnt }}) - {% endif %} +

+ + Issues
- {% if g.repo_admin %} - - Add milestone - - {% endif %} - {% if g.repo.reports %} - + {{total_open}} Open + + + {{total_closed}} Closed - - {% endif %} -
-

- {% if oth_issues_cnt %} -
- {% if (issues | length + oth_issues_cnt) %} - - {{ (100.0 * (issues_cnt / total_issues_cnt))|round|int }}% - - {% endif %}
- {% endif %} - -
-
- - Open - Closed - All - Stats - - -
- - {% for tag in tags %} - - {% endfor %} -
- - - - + +
+
+
+ {% if issues_cnt+oth_issues_cnt > 0 %} + {% if not status %} + {% if oth_issues_cnt > 0 %} + {% set percentage = (100.0 * (oth_issues_cnt / issues_cnt)) %} + {% else %} + {% set percentage = 0 %} + {% endif %} + {% set progress_popover_string = oth_issues_cnt|string+" Open Issues | "+ (issues_cnt-oth_issues_cnt)|string + " Closed Issues"%} + {% elif status|lower in ['open', 'true'] %} + {% if issues_cnt > 0 %} + {% set percentage = (100.0 * (issues_cnt / (oth_issues_cnt+issues_cnt))) %} + {% else %} + {% set percentage = 0 %} + {% endif %} + {% set progress_popover_string = issues_cnt|string+" Open Issues | "+ (oth_issues_cnt)|string + " Closed Issues"%} + {% else %} + {% if oth_issues_cnt > 0 %} + {% set percentage = (100.0 * (oth_issues_cnt / (oth_issues_cnt+issues_cnt))) %} + {% else %} + {% set percentage = 0 %} + {% endif %} + {% set progress_popover_string = oth_issues_cnt|string+" Open Issues | "+ issues_cnt|string + " Closed Issues"%} + {% endif %} +
+
+
+
+
+
+
- - -
+ {% endif %} +
- -
- - - - - - {% if status and status|lower != 'open' %} - + + {{filtered_all_issues_count}} Open & Closed Issues + + + +
+ + +
+ + +
+ {% if g.repo.reports or g.repo_admin %} +
+ + + + +
+ {% endif %} +
+ {% set filters_list = [ + {"key": "date_created", "display_string": "Open Date", "sort_icon_prefix": "fa-sort-numeric-", "icon":"fa-calendar"}, + {"key": "last_updated", "display_string": "Last Modified Date", "sort_icon_prefix": "fa-sort-numeric-", "icon":"fa-calendar"}, + {"key": "closed_at", "display_string": "Closed Date", "sort_icon_prefix": "fa-sort-numeric-", "icon":"fa-calendar"}, + {"key": "title", "display_string": "Issue Title", "sort_icon_prefix": "fa-sort-alpha-", "icon":"fa-exclamation-circle"}, + {"key": "priority", "display_string": "Priority", "sort_icon_prefix": "fa-sort-numeric-", "icon":"fa-bolt"}, + {"key": "user", "display_string": "Reporter", "sort_icon_prefix": "fa-sort-alpha-", "icon":"fa-user"}, + {"key": "assignee", "display_string": "Assignee", "sort_icon_prefix": "fa-sort-alpha-", "icon":"fa-user-plus"}, + ] %} + + +
+
+ {% if g.repo_admin %} + + {% endif %} + + + + + {% if issues %} + {% for issue in issues %} + {{render_issue_row(issue, repo, username)}} + {% endfor %} {% else %} - - {% endif %} - - - {% if not status or status|lower == 'open' %} - +
+
+
+

+ {% if status_filter == 'open'%} + no open issues found + {% if oth_issues_cnt %} +
+ + + {{oth_issues_cnt}} closed issues + + match this filter + +
+ {% else %} +
no closed issues match this filter either
+ {% endif %} + {% elif status_filter == 'closed'%} + no closed issues found + {% if oth_issues_cnt %} +
+ + + {{oth_issues_cnt}} open issues + + match this filter + +
+ {% else %} +
no open issues match this filter either
+ {% endif %} + {% else %} + no open or closed issues found + {% endif %} +

+
+
+
{% endif %} - - - - - - {% for issue in issues %} - - - - {% if status and status|lower != 'open' %} - - {% else %} - - {% endif %} - - - {% if not status or status|lower == 'open' %} - - {% endif %} - - {% else %} - - - - {% endfor %} - -
Issue - {{ 'title' | table_sort_arrow(order_key, order) | safe }}Opened - {{ 'date_created' | table_sort_arrow(order_key, order) | safe }}Closed - {{ 'closed_at' | table_sort_arrow(order_key, order) | safe }}Modified - {{ 'last_updated' | table_sort_arrow(order_key, order) | safe }}Priority - {{ 'priority' | table_sort_arrow(order_key, order) | safe }}Reporter - {{ 'user' | table_sort_arrow(order_key, order) | safe }}Assignee - {{ 'assignee' | table_sort_arrow(order_key, order) | safe }}
- #{{ issue.id }} - {% if status != 'Open' %} - {{issue.close_status if issue.status == 'Closed' else issue.status }} - {% endif %} - {% if issue.private %} - - {% endif %} - - {{ issue.title | noJS("img") | safe }} - -    - {% if issue.user_comments|count > 0 %} - - - {{issue.user_comments|count}} - - {% endif %} - {% if issue.parents %} - - {% endif %} - {% if issue.children %} - - {% endif %} - {% for tag in issue.tags %} - {{tag.tag}} - {% endfor%} - - {{ - issue.date_created | humanize}} - - {% if issue.closed_at != None %} - {{ - issue.closed_at | humanize}} - {% endif %} - - {{ - issue.last_updated | humanize}} - - {% if issue.priority is not none %} - {{ - repo.priorities[issue.priority | string] }} - - {% endif %} - - - {{ issue.user.default_email | avatar(16) | safe }} - {{ issue.user.user }} - - - {% if issue.assignee %} - - {{ issue.assignee.default_email | avatar(16) | safe }} - {{ issue.assignee.user }} - - {% else %} - unassigned - - {% endif %} -
No issues found
-
- -{% if g.repo_admin %} - - - - -{% endif %} +{% if total_page > 1 %} {{ pagination_link('page', g.page, total_page) }} +{% endif %} {% endblock %} {% block jscripts %} {{ super() }} - - - + + +{% endblock %} + diff --git a/pagure/ui/fork.py b/pagure/ui/fork.py index 4d3a865..38ab14e 100644 --- a/pagure/ui/fork.py +++ b/pagure/ui/fork.py @@ -78,61 +78,90 @@ def request_pulls(repo, username=None, namespace=None): if not repo.settings.get('pull_requests', True): flask.abort(404, 'No pull-requests found for this project') - if is_true(status, ['false', '0']): - status = False - elif is_true(status, ['all']): - status = None - - if is_true(status, ['true', '1', 'open']): + total_open = pagure.lib.search_pull_requests( + flask.g.session, + project_id=repo.id, + status=True, + count=True) + + total_merged = pagure.lib.search_pull_requests( + flask.g.session, + project_id=repo.id, + status='Merged', + count=True) + + if status.lower() == 'merged' or is_true(status, ['false', '0']): + status_filter = 'Merged' requests = pagure.lib.search_pull_requests( flask.g.session, project_id=repo.id, - status=True, + status='Merged', order=order, order_key=order_key, assignee=assignee, author=author, offset=flask.g.offset, limit=flask.g.limit) - requests_cnt = pagure.lib.search_pull_requests( + elif is_true(status, ['true', '1', 'open']): + status_filter = 'Open' + requests = pagure.lib.search_pull_requests( flask.g.session, project_id=repo.id, - status=True, + status='Open', + order=order, + order_key=order_key, assignee=assignee, author=author, - count=True) - oth_requests = pagure.lib.search_pull_requests( + offset=flask.g.offset, + limit=flask.g.limit) + elif status.lower() == 'closed': + status_filter = 'Closed' + requests = pagure.lib.search_pull_requests( flask.g.session, project_id=repo.id, - status=False, + status='Closed', + order=order, + order_key=order_key, assignee=assignee, author=author, - count=True) + offset=flask.g.offset, + limit=flask.g.limit) else: + status_filter = None requests = pagure.lib.search_pull_requests( flask.g.session, project_id=repo.id, + status=None, order=order, order_key=order_key, assignee=assignee, author=author, - status=status, offset=flask.g.offset, limit=flask.g.limit) - requests_cnt = pagure.lib.search_pull_requests( - flask.g.session, - project_id=repo.id, - assignee=assignee, - author=author, - status=status, - count=True) - oth_requests = pagure.lib.search_pull_requests( - flask.g.session, - project_id=repo.id, - status=True, - assignee=assignee, - author=author, - count=True) + + open_cnt = pagure.lib.search_pull_requests( + flask.g.session, + project_id=repo.id, + status='Open', + assignee=assignee, + author=author, + count=True) + + merged_cnt = pagure.lib.search_pull_requests( + flask.g.session, + project_id=repo.id, + status='Merged', + assignee=assignee, + author=author, + count=True) + + closed_cnt = pagure.lib.search_pull_requests( + flask.g.session, + project_id=repo.id, + status='Closed', + assignee=assignee, + author=author, + count=True) repo_obj = flask.g.repo_obj if not repo_obj.is_empty and not repo_obj.head_is_unborn: @@ -141,8 +170,8 @@ def request_pulls(repo, username=None, namespace=None): head = 'master' total_page = 1 - if requests_cnt: - total_page = int(ceil(requests_cnt / float(flask.g.limit))) + if len(requests): + total_page = int(ceil(len(requests) / float(flask.g.limit))) return flask.render_template( 'requests.html', @@ -150,15 +179,19 @@ def request_pulls(repo, username=None, namespace=None): repo=repo, username=username, requests=requests, - requests_cnt=requests_cnt, - oth_requests=oth_requests, + open_cnt=open_cnt, + merged_cnt=merged_cnt, + closed_cnt=closed_cnt, order=order, order_key=order_key, status=status, + status_filter=status_filter, assignee=assignee, author=author, head=head, total_page=total_page, + total_open=total_open, + total_merged=total_merged, )