createbug.ui.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. $(function()
  2. {
  3. loadCurrentPage
  4. ({
  5. url: resultsLink,
  6. selector: '#casesResults',
  7. partial: true,
  8. success : function()
  9. {
  10. var $resultTrs = $('#resultsContainer').find('#casesResults tr');
  11. if($resultTrs.length != 0 && $resultTrs.first().data('status') == 'ready')
  12. {
  13. $resultTrs.first().trigger('click');
  14. }
  15. }
  16. });
  17. $('#resultsContainer').off('click', '.result-item').on('click', '.result-item', toggleShowResults);
  18. $('#resultsContainer').off('click', '.check-all .checkbox-primary').on('click', '.check-all .checkbox-primary', toggleCheckAll);
  19. $('#resultsContainer').off('click', '.check-item').on('click', '.check-item', toggleCheckChildItem);
  20. $('#resultsContainer').off('click', '.to-bug-button').on('click', '.to-bug-button', createBug);
  21. });
  22. /**
  23. * Toggle results show or hide.
  24. *
  25. * @param event $event
  26. * @access public
  27. * @return void
  28. */
  29. function toggleShowResults(event)
  30. {
  31. var $target = $(event.target).closest('tr');
  32. if($target.data('status') == 'running') return;
  33. $target.toggleClass('is-collapsed');
  34. $target.toggleClass('is-expanded');
  35. $target.toggleClass('show-detail');
  36. var show = $target.hasClass('show-detail');
  37. $target.next('.result-detail').toggleClass('hidden', !show);
  38. $target.find('.collapse-handle').toggleClass('icon-angle-down', !show).toggleClass('icon-angle-top', show);
  39. }
  40. /**
  41. * Create bug from fail case.
  42. *
  43. * @param event $event
  44. * @access public
  45. * @return void
  46. */
  47. function createBug(event)
  48. {
  49. var $form = $(event.target).closest('form');
  50. var stepIdList = '';
  51. $form.find('.step .step-id input[type="checkbox"]:checked').each(function()
  52. {
  53. if($(this).prop('checked')) stepIdList += $(this).val() + '_';
  54. });
  55. const formData = new FormData();
  56. formData.append('stepIdList', stepIdList);
  57. var link = $.createLink('bug', 'create', $form.data('params'));
  58. postAndLoadPage(link, formData, '', {app: tab == 'my' ? 'qa' : tab});
  59. }
  60. /**
  61. * Toggle check all.
  62. *
  63. * @param event $event
  64. * @access public
  65. * @return void
  66. */
  67. function toggleCheckAll(event)
  68. {
  69. var $checkAll = $(event.target).closest('.check-all').find("input[type='checkbox']");
  70. var isChecked = $checkAll.prop('checked');
  71. $checkAll.closest('.resultSteps').find('.step').find('input[type=checkbox]').prop('checked', isChecked);
  72. }
  73. /**
  74. * Toggle child item check status.
  75. *
  76. * @param event $event
  77. * @access public
  78. * @return void
  79. */
  80. function toggleCheckChildItem(event)
  81. {
  82. var $target = $(event.target).closest('.step-id').find("input[type='checkbox']");
  83. var $step = $target.closest('.step');
  84. var isChecked = $target.prop('checked');
  85. var grade = $step.data('grade');
  86. var $next = $target.closest('.step').next();
  87. while(grade < $next.data('grade'))
  88. {
  89. $next.find("input[type='checkbox']").prop('checked', isChecked);
  90. $next = $next.next();
  91. }
  92. var parentStepID = $step.data('parent');
  93. if($step.data('id') != 0 && parentStepID != 0)
  94. {
  95. var allSiblings = $target.closest('.steps-body').find('[data-parent="' + parentStepID + '"]').length
  96. var checkedSiblings = $target.closest('.steps-body').find('[data-parent="' + parentStepID + '"]' + ' input[type=checkbox]:checked').length
  97. var $parentStep = $target.closest('.step').prevAll('[data-id="' + parentStepID + '"]').find('input[type=checkbox]');
  98. var siblingsChecked = !!(allSiblings == checkedSiblings);
  99. if(!$parentStep.prop('checked') && siblingsChecked)
  100. {
  101. $parentStep.trigger('click');
  102. }
  103. else
  104. {
  105. $parentStep.prop('checked', false);
  106. 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);
  107. }
  108. }
  109. var $resultSteps = $target.closest('.resultSteps');
  110. $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);
  111. }