common.ui.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. $(function()
  2. {
  3. $('#resultsContainer').off('click', '.result-item').on('click', '.result-item', toggleShowResults);
  4. $('#resultsContainer').off('click', '.check-all .checkbox-primary').on('click', '.check-all .checkbox-primary', toggleCheckAll);
  5. $('#resultsContainer').off('click', '.check-item').on('click', '.check-item', toggleCheckChildItem);
  6. $('#resultsContainer').off('click', '.to-bug-button').on('click', '.to-bug-button', createBug);
  7. });
  8. /**
  9. * Load execution related
  10. *
  11. * @access public
  12. * @return void
  13. */
  14. function loadExecutionRelated()
  15. {
  16. loadExecutionBuilds();
  17. }
  18. window.refreshExecutionBuild = function()
  19. {
  20. loadExecutionBuilds();
  21. }
  22. /**
  23. * Load execution builds.
  24. *
  25. * @param int $executionID
  26. * @access public
  27. * @return void
  28. */
  29. window.loadExecutionBuilds = function()
  30. {
  31. const productID = $('[name=product]').val() || 0;
  32. const executionID = $('[name=execution]').val() || 0;
  33. const projectID = $('[name=project]').val() || 0;
  34. const buildLink = $.createLink('build','create', 'executionID=' + executionID + '&productID=' + productID + '&projectID=' + projectID);
  35. if($('#buildCreateLink').length > 0) $('#buildCreateLink').attr('href', buildLink);
  36. var selectedBuild = $('[name=build]').val() || 0;
  37. var link = $.createLink('build', 'ajaxGetExecutionBuilds', 'executionID=' + executionID + '&productID=' + productID + '&varName=testTaskBuild&build=' + selectedBuild);
  38. if(executionID == 0) link = $.createLink('build', 'ajaxGetProjectBuilds', 'projectID=' + projectID + '&productID=' + productID + '&varName=build&build=' + selectedBuild + '&branch=&needCreate=&type=noempty,notrunk,withexecution');
  39. if(executionID == 0 && projectID == 0) link = $.createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=build&build=&branch=all&type=notrunk,withexecution');
  40. $.getJSON(link, function(data)
  41. {
  42. let $buildPicker = $('[name="build"]').zui('picker');
  43. let oldBuild = $('[name="build"]').val();
  44. $buildPicker.render({items: data});
  45. executionID == 0 ? $buildPicker.$.setValue('') : $buildPicker.$.setValue(oldBuild);
  46. let createBuild = $('[name="build"]').closest('.input-group').find('.input-group-addon');
  47. if(data.length == 0 && executionID != 0)
  48. {
  49. var url = createBuild.find('#buildCreateLink').attr('href');
  50. createBuild.find('#buildCreateLink').attr('href', url.replace('{executionID}', executionID));
  51. createBuild.removeClass('hidden');
  52. }
  53. else
  54. {
  55. createBuild.addClass('hidden');
  56. }
  57. });
  58. }
  59. /**
  60. * Load test report.
  61. *
  62. * @param int productID
  63. * @access public
  64. * @return void
  65. */
  66. function loadTestReports(productID)
  67. {
  68. $.getJSON($.createLink('testtask', 'ajaxGetTestReports', 'productID=' + productID), function(result)
  69. {
  70. let $testreportPicker = $('[name="testreport"]').zui('picker');
  71. if(result.reports)
  72. {
  73. $testreportPicker.render({items: result.reports});
  74. $testreportPicker.$.setValue('');
  75. }
  76. });
  77. }
  78. /**
  79. * when begin date input change and end date input is null
  80. * change end date input to begin's after day
  81. *
  82. * @access public
  83. * @return void
  84. */
  85. function suitEndDate()
  86. {
  87. beginDate = $('#beginDate').zui('datePicker').$.state.value;
  88. if(!beginDate) return;
  89. endDate = $('#endDate').zui('datePicker').$.state.value;
  90. if(endDate) return;
  91. endDate = getNextDay(beginDate);
  92. $('#endDate').zui('datePicker').$.changeState({value: endDate});
  93. }
  94. function getNextDay(dateString)
  95. {
  96. var currentDate = new Date(dateString);
  97. currentDate.setDate(currentDate.getDate() + 1);
  98. var nextYear = currentDate.getFullYear();
  99. var nextMonth = ('0' + (currentDate.getMonth() + 1)).slice(-2);
  100. var nextDay = ('0' + currentDate.getDate()).slice(-2);
  101. var nextDate = nextYear + '-' + nextMonth + '-' + nextDay;
  102. return nextDate;
  103. }
  104. /**
  105. * Create bug from fail case.
  106. *
  107. * @param event $event
  108. * @access public
  109. * @return void
  110. */
  111. function createBug(event)
  112. {
  113. var $form = $(event.target).closest('form');
  114. var stepIdList = '';
  115. $form.find('.step .step-id input[type="checkbox"]:checked').each(function()
  116. {
  117. if($(this).prop('checked')) stepIdList += $(this).val() + '_';
  118. });
  119. const formData = new FormData();
  120. formData.append('stepIdList', stepIdList);
  121. var link = $.createLink('bug', 'create', $form.data('params'));
  122. postAndLoadPage(link, formData, '', {app: tab == 'my' ? 'qa' : tab});
  123. $('#runCaseModal').closest('.modal').off('hide.zui.modal');
  124. $('#casesResults').closest('.modal').off('hide.zui.modal');
  125. }
  126. /**
  127. * Toggle results show or hide.
  128. *
  129. * @param event $event
  130. * @access public
  131. * @return void
  132. */
  133. function toggleShowResults(event)
  134. {
  135. var $target = $(event.target).closest('tr');
  136. if($target.data('status') == 'running') return;
  137. $target.toggleClass('is-collapsed');
  138. $target.toggleClass('is-expanded');
  139. $target.toggleClass('show-detail');
  140. var show = $target.hasClass('show-detail');
  141. $target.next('.result-detail').toggleClass('hidden', !show);
  142. $target.find('.collapse-handle').toggleClass('icon-angle-down', !show).toggleClass('icon-angle-top', show);;
  143. }
  144. /**
  145. * Toggle check all.
  146. *
  147. * @param event $event
  148. * @access public
  149. * @return void
  150. */
  151. function toggleCheckAll(event)
  152. {
  153. var $checkAll = $(event.target).closest('.check-all').find("input[type='checkbox']");
  154. var isChecked = $checkAll.prop('checked');
  155. $checkAll.closest('.resultSteps').find('.step').find('input[type=checkbox]').prop('checked', isChecked);
  156. }
  157. /**
  158. * Toggle child item check status.
  159. *
  160. * @param event $event
  161. * @access public
  162. * @return void
  163. */
  164. function toggleCheckChildItem(event)
  165. {
  166. var $target = $(event.target).closest('.step-id').find("input[type='checkbox']");
  167. var $step = $target.closest('.step');
  168. var isChecked = $target.prop('checked');
  169. var grade = $step.data('grade');
  170. var $next = $target.closest('.step').next();
  171. while(grade < $next.data('grade'))
  172. {
  173. $next.find("input[type='checkbox']").prop('checked', isChecked);
  174. $next = $next.next();
  175. }
  176. var parentStepID = $step.data('parent');
  177. if($step.data('id') != 0 && parentStepID != 0)
  178. {
  179. var allSiblings = $target.closest('.steps-body').find('[data-parent="' + parentStepID + '"]').length
  180. var checkedSiblings = $target.closest('.steps-body').find('[data-parent="' + parentStepID + '"]' + ' input[type=checkbox]:checked').length
  181. var $parentStep = $target.closest('.step').prevAll('[data-id="' + parentStepID + '"]').find('input[type=checkbox]');
  182. var siblingsChecked = !!(allSiblings == checkedSiblings);
  183. if(!$parentStep.prop('checked') && siblingsChecked)
  184. {
  185. $parentStep.trigger('click');
  186. }
  187. else
  188. {
  189. $parentStep.prop('checked', false);
  190. if($parentStep.closest('.step').data('parent') != 0) $target.closest('.step').prevAll('[data-id="' + $parentStep.closest('.step').data('parent') + '"]').find('input[type=checkbox]').prop('checked', false);
  191. }
  192. }
  193. var $resultSteps = $target.closest('.resultSteps');
  194. $resultSteps.find('.check-all input[type=checkbox]').prop('checked', $resultSteps.find('.check-item input[type=checkbox]').length == $resultSteps.find('.check-item input[type=checkbox]:checked').length);
  195. }
  196. function setExecutionByBuild()
  197. {
  198. const buildID = $('[name=build]').val();
  199. link = $.createLink('testtask', 'ajaxGetExecutionByBuild', 'buildID=' + buildID);
  200. $.get(link, function(data)
  201. {
  202. if(data != '0') $('[name="execution"]').zui('picker').$.setValue(data);
  203. });
  204. }