settings_boards.html 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <h3 class="font-weight-bold mb-3">
  2. Project's Boards
  3. </h3>
  4. <p>
  5. In this page you can create and configure the boards your project wish to
  6. use.
  7. </p>
  8. <form action="{{ url_for(
  9. 'api_ns.api_board_create',
  10. repo=repo.name,
  11. username=username,
  12. namespace=repo.namespace) }}"
  13. method="post" class="icon">
  14. <div class="row">
  15. <div class="col-sm-12">
  16. <strong>Boards</strong>
  17. </div>
  18. </div>
  19. <input type="hidden" name="all" value="1">
  20. <div class="form-group">
  21. <div class="row">
  22. <div class="col-sm-6" >
  23. Board name
  24. </div>
  25. <div class="col-sm-3" >
  26. <p>Tag</p>
  27. </div>
  28. <div class="col-sm-1" >
  29. <p>Active</p>
  30. </div>
  31. <div class="col-sm-1">
  32. <p>Configure</p>
  33. </div>
  34. <div class="col-sm-1">
  35. <p>Delete</p>
  36. </div>
  37. </div>
  38. </div>
  39. <div class="form-group settings-field-rows" id="boards-list">
  40. <div class="row hidden blank-field">
  41. <div class="col-sm-6" >
  42. <input type="text" name="name" value="" class="form-control"/>
  43. </div>
  44. <div class="col-sm-3" >
  45. <select name="tag" class="form-control custom-keys">
  46. {% for tag in repo.tags_colored %}
  47. <option value="{{ tag.tag }}">{{ tag.tag }}</option>
  48. {% endfor %}
  49. </select>
  50. </div>
  51. <div class="col-sm-1" >
  52. <input type="checkbox" name="active" value="1" class="form-control" checked/>
  53. </div>
  54. <div class="col-sm-1">
  55. <a class="btn btn-outline-info configure-board pointer disabled" title="Configure the board"><i class="fa fa-wrench"></i></a>
  56. </div>
  57. <div class="col-sm-1">
  58. <a class="btn btn-outline-danger remove-settings-field-row pointer"
  59. title="Delete this board"><i class="fa fa-trash"></i></a>
  60. </div>
  61. </div>
  62. {% for board in repo.boards %}
  63. <div class="row">
  64. <div class="col-sm-6" >
  65. <input type="text" name="name" value="{{ board.name }}" class="form-control"/>
  66. </div>
  67. <div class="col-sm-3" >
  68. <select name="tag" class="form-control custom-keys">
  69. {% for tag in repo.tags_colored %}
  70. <option value="{{ tag.tag }}" {% if tag.tag == board.tag.tag %}selected{% endif %}>{{ tag.tag }}</option>
  71. {% endfor %}
  72. </select>
  73. </div>
  74. <div class="col-sm-1" >
  75. <input type="checkbox" name="active" value="1" class="form-control"{% if board.active %} checked{% endif %}/>
  76. </div>
  77. <div class="col-sm-1">
  78. <a class="btn btn-outline-info configure-board pointer" title="Configure the board"
  79. href="{{ url_for('ui_ns.view_board_settings', repo=repo.name, username=username, namespace=repo.namespace, board_name=board.name)}}"><i class="fa fa-wrench"></i></a>
  80. </div>
  81. <div class="col-sm-1">
  82. <a class="btn btn-outline-danger remove-settings-field-row pointer"
  83. title="Delete this board"><i class="fa fa-trash"></i></a>
  84. </div>
  85. </div>
  86. {% endfor %}
  87. </div>
  88. <a class="btn btn-secondary pt-2 btn-sm btn-block add-settings-field-row pointer" data-target="#boards-list">
  89. <i class="fa fa-plus"></i> Add new board
  90. </a>
  91. <div class="row p-t-1">
  92. </div>
  93. <div class="row p-t-1">
  94. <div class="col-sm-12">
  95. <button class="btn btn-primary float-right mt-3" id="boards_update_btn" type="submit"
  96. title="Update the boards">
  97. Update
  98. </button>
  99. </div>
  100. </div>
  101. </form>
  102. <div>
  103. <h4>How do boards work?</h4>
  104. <p>
  105. Boards are a very simplified representation of kanban boards. They allow you
  106. to see tickets in columns where each column has a different status (state).
  107. </p>
  108. <p>
  109. In pagure, each board is associated with a tag. Tagging a ticket will
  110. automatically make it show on the board in the default column (status) defined
  111. in the boards' settings. Similarly, un-tagging the ticket, will remove it
  112. from the board.
  113. </p>
  114. <p>
  115. If a Status is set to "Close", then tickets reaching it will be closed and
  116. if a "Close status" is defined, tickets will be closed with that status.
  117. </p>
  118. <p>
  119. Status set to "Close" tickets will only show 5 tickets by default, the small
  120. "eye" icon at the top will allow to toggle that setting and show all the
  121. tickets in that status if needed.
  122. </p>
  123. <p>
  124. You can create as many boards as you want/need and you can de-activate boards
  125. that you no longer use. Boards that are de-activated will no longer show in
  126. the "Boards" drop-down in the menu. It is also not possible to add or remove
  127. tickets in a board that has been deactivated.
  128. </p>
  129. </div>
  130. <script type="text/javascript" nonce="{{ g.nonce }}">
  131. $('#boards_update_btn').click(function(e) {
  132. _form = $(this).closest('form');
  133. data = {};
  134. $("#boards-list .row").each(function(idx, el){
  135. if (!$(el).hasClass("hidden")) {
  136. var _name = $(el).find('input[name=name]').val();
  137. var _active = $(el).find('input[name=active]')[0].checked;
  138. var _tag = $(el).find('select[name=tag]').find(":selected").val();
  139. if (_name) {
  140. data[_name] = {
  141. "active": _active,
  142. "tag": _tag,
  143. };
  144. }
  145. }
  146. });
  147. $.ajax({
  148. url: _form.prop('action') ,
  149. type: 'POST',
  150. contentType: 'application/json; charset=utf-8',
  151. data: JSON.stringify(data),
  152. dataType: 'json',
  153. success: function(res) {
  154. var _url = "{{ url_for('ui_ns.view_board_settings', repo=repo.name, username=username, namespace=repo.namespace, board_name='----') }}";
  155. $(".configure-board").each(function(idx, el){
  156. if (!$(el).attr("href")){
  157. var _gparent = $(el).parent().parent();
  158. if (!_gparent.hasClass("hidden")) {
  159. var _name = $(el).parent().parent().find('input[name=name]').val();
  160. if (_name) {
  161. var _t_url = _url.replace('----', _name);
  162. $(el).attr("href", _t_url)
  163. $(el).removeClass("disabled");
  164. }
  165. }
  166. }
  167. });
  168. var _html = '<div class="container pt-2">'
  169. + ' <div class="alert alert-info border border-secondary bg-white alert-dismissible" role="alert">'
  170. + ' <button type="button" class="close" data-dismiss="alert" aria-label="Close">'
  171. + ' <span aria-hidden="true">×</span>'
  172. + ' <span class="sr-only">Close</span>'
  173. + ' </button>'
  174. + ' <div class="text-info font-weight-bold">'
  175. + ' <i class="fa fa-fw fa-info-circle"></i>Boards created/updated'
  176. + ' </div>'
  177. + ' </div>'
  178. + '</div>';
  179. $('.bodycontent').prepend(_html)
  180. },
  181. error: function(res) {
  182. console.log(res);
  183. alert('Request failed');
  184. }
  185. });
  186. return false;
  187. });
  188. </script>