230
|
1 {# display a single ticket |
|
2 |
|
3 @variable item(xmlui_item): ticket to display |
|
4 @variable comments(data_object.BlogItems): comments of the ticket |
|
5 @variable comments_service(unicode): service for adding comments |
|
6 @variable comments_node(unicode): node for adding comments |
|
7 #} |
|
8 |
|
9 {% set category_menu = [('merge-requests', url_tickets_list), |
|
10 ('merge-request_new', url_tickets_new)] %} |
|
11 {% if not embedded %}{% extends 'base/base.html' %}{% endif %} |
|
12 {% import 'input/xmlui.html' as xmlui with context %} |
|
13 {% import 'components/avatar.html' as avatar with context %} |
|
14 {% import 'blog/macros.html' as blog with context %} |
|
15 {% import 'input/textbox.html' as textbox with context %} |
|
16 |
|
17 {% block title %}{{item|adv_format('#{value.widget_value.id} {value.widget_value.title}') }}{% endblock %} |
|
18 |
|
19 {% block confirm_message %} |
|
20 {% trans %}Your comment has been sent{% endtrans %} |
|
21 {% endblock confirm_message %} |
|
22 |
|
23 {% block body %} |
|
24 {{ icon_defs('pencil') }} |
|
25 <section class="section"> |
|
26 <div class="tab__container"> |
|
27 <div class="tabs"> |
|
28 <ul> |
|
29 <li class="tab__btn is-active" onclick='tab_select(this, "tab_description", btn_clicked_cls="is-active")'> |
|
30 <a> |
|
31 {% trans %}Description{% endtrans %} |
|
32 </a> |
|
33 </li> |
|
34 <li class="tab__btn" onclick='tab_select(this, "tab_patches", btn_clicked_cls="is-active")'> |
|
35 <a> |
|
36 {% trans %}Patches{% endtrans %} |
|
37 </a> |
|
38 </li> |
|
39 </ul> |
|
40 </div> |
|
41 |
|
42 <div class="tab__page state_clicked" id="tab_description"> |
|
43 <div class="columns"> |
|
44 <div class="column has-background-white"> |
|
45 <div id="{{ item.widget_value['id'] }}" class="media has-padding-1"> |
|
46 {% if identities is defined %} |
|
47 {% if avatar is defined %} |
|
48 <figure class="media-left"> |
|
49 {{ avatar.avatar(item.widget_value['publisher'].bare) }} |
|
50 </figure> |
|
51 {% endif %} |
|
52 {% endif %} |
|
53 <div class="media-content"> |
|
54 <div class="content"> |
|
55 <h4 class="title is-4">{{item.widget_value['title']}}</h1> |
|
56 {{ item.widget_value['body'] }} |
|
57 |
|
58 </div> |
|
59 {% if comments is defined %} |
|
60 {{ blog.show_items(comments|reverse, expanded=true) }} |
|
61 {% endif %} |
|
62 {% if comments_node is defined %} |
|
63 <div class="comment_post"> |
|
64 {{- textbox.comment_or_login(service=comments_service, node=comments_node) -}} |
|
65 </div> |
|
66 {% endif %} |
|
67 </div> |
|
68 {% if url_ticket_edit is defined %} |
|
69 <div class="media-right"> |
|
70 <a href="{{url_ticket_edit}}"> |
|
71 {{ icon('pencil', cls='icon is-64x64') }} |
|
72 </a> |
|
73 </div> |
|
74 {% endif %} |
|
75 </div> |
|
76 </div> |
|
77 <div class="column is-one-quarter has-background-light"> |
|
78 {{ |
|
79 xmlui.generate( |
|
80 item, |
|
81 form=false, |
|
82 filters={ |
|
83 'created': { |
|
84 'filters': ['date_fmt'], |
|
85 'filters_args':[{'fmt': 'short'}] |
|
86 }, |
|
87 'updated': { |
|
88 'filters': ['date_fmt'], |
|
89 'filters_args':[{'fmt': 'short'}] |
|
90 }, |
|
91 'body': { |
|
92 'filters': ['urlize'], |
|
93 'filters_args':[{ |
|
94 'nofollow': True, |
|
95 'rel': 'noopener noreferrer' |
|
96 }] |
|
97 } |
|
98 }, |
|
99 ignore=['publisher', 'title', 'body', 'comments_uri'], |
|
100 ) |
|
101 }} |
|
102 </div> |
|
103 </div> |
|
104 </div> |
|
105 |
|
106 <div class="tab__page" id="tab_patches"> |
|
107 {% for patch in patches %} |
|
108 <div class="card"> |
|
109 <div class="card-content has-background-primary"> |
|
110 <p class="commit_msg">{{patch.commit_msg}}</p> |
|
111 </div> |
|
112 <div class="card-footer has-vpadding-6"> |
|
113 <div class="level"> |
|
114 <div class="level-left"> |
|
115 <div class="level-item"> |
|
116 <span class="author has-text-weight-bold">{{patch.author}}</span> |
|
117 </div> |
|
118 </div> |
|
119 </div> |
|
120 </div> |
|
121 </div> |
|
122 <div class="box has-margin-top-1"> |
|
123 <div class="diff"> |
|
124 {{- patch.diff|highlight('diff') -}} |
|
125 </div> |
|
126 </div> |
|
127 {% endfor %} |
|
128 </div> |
|
129 </div> |
|
130 </section> |
|
131 {% endblock body %} |