be_pages_generic_scrumboard.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*
  2. * Document : be_pages_generic_scrumboard.js
  3. * Author : pixelcave
  4. * Description: Custom JS code used in Scrum Board Page in Backend
  5. */
  6. var BeScrumBoard = function() {
  7. var scrumBoard, itemList, itemInput, itemInputVal, cardInput, cardInputVal;
  8. // Init Scrum Board
  9. var initScrumBoard = function(){
  10. scrumBoard = jQuery('.js-scrumboard');
  11. // Make the main container a flex container
  12. jQuery('#main-container').addClass('d-flex align-items-stretch');
  13. // Fade in the main scrumboard content
  14. scrumBoard.fadeTo(1000, 1);
  15. };
  16. // Add Card
  17. var cardAdd = function(){
  18. scrumBoard.on('submit.cb.sb.card.add', 'form[data-toggle="sb-card-add"]', function(e){
  19. e.preventDefault();
  20. // Get input value
  21. cardInput = jQuery(this).find('input');
  22. cardInputVal = cardInput.prop('value');
  23. // Check if the user entered something
  24. if ( cardInputVal ) {
  25. // Add Card
  26. cardInput.parents('.scrumboard-col').before(
  27. '<div class="scrumboard-col block block-themed">' +
  28. '<div class="block-header bg-primary">' +
  29. '<h3 class="block-title font-w600">' +
  30. jQuery('<span />').text(cardInputVal).html() +
  31. '</h3>' +
  32. '<div class="block-options">' +
  33. '<div class="dropdown">' +
  34. '<button type="button" class="btn-block-option" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' +
  35. '<i class="fa fa-fw fa-ellipsis-v"></i>' +
  36. '</button>' +
  37. '<div class="dropdown-menu dropdown-menu-right">' +
  38. '<a class="dropdown-item" href="javascript:void(0)">' +
  39. '<i class="fa fa-fw fa-pencil mr-5"></i>Edit' +
  40. '</a>' +
  41. '<div class="dropdown-divider"></div>' +
  42. '<a class="dropdown-item" href="javascript:void(0)" data-toggle="block-option" data-action="close">' +
  43. '<i class="fa fa-fw fa-times text-danger mr-5"></i>Delete' +
  44. '</a>' +
  45. '</div>' +
  46. '</div>' +
  47. '</div>' +
  48. '</div>' +
  49. '<div class="block-content block-content-full bg-body-light">' +
  50. '<form class="w-100" method="post" data-toggle="sb-item-add">' +
  51. '<div class="input-group">' +
  52. '<div class="input-group-prepend">' +
  53. '<span class="input-group-text">' +
  54. '<i class="fa fa-lightbulb-o"></i>' +
  55. '</span>' +
  56. '</div>' +
  57. '<input type="text" class="form-control" placeholder="New Idea..">' +
  58. '</div>' +
  59. '</form>' +
  60. '</div>' +
  61. '<div class="scrumboard-items block-content"></div>' +
  62. '</div>'
  63. );
  64. // Clear and focus input field
  65. cardInput.prop('value', '');
  66. // Refresh sortable
  67. initDraggableItems('refresh');
  68. }
  69. });
  70. };
  71. // Add Item
  72. var itemAdd = function(){
  73. scrumBoard.on('submit.cb.sb.item.add', 'form[data-toggle="sb-item-add"]', function(e){
  74. e.preventDefault();
  75. // Get input value
  76. itemList = jQuery(this).parents('.scrumboard-col').find('.scrumboard-items');
  77. itemInput = jQuery(this).find('input');
  78. itemInputVal = itemInput.prop('value');
  79. // Check if the user entered something
  80. if ( itemInputVal ) {
  81. // Add Item
  82. itemList.prepend(
  83. '<div class="scrumboard-item">' +
  84. '<div class="scrumboard-item-options">' +
  85. '<a class="scrumboard-item-handler btn btn-sm btn-alt-warning" href="javascript:void(0)">' +
  86. '<i class="fa fa-hand-grab-o"></i>' +
  87. '</a> ' +
  88. '<button class="btn btn-sm btn-alt-warning" data-toggle="sb-item-remove">' +
  89. '<i class="fa fa-close"></i>' +
  90. '</button>' +
  91. '</div>' +
  92. '<div class="scrumboard-item-content">' +
  93. jQuery('<span />').text(itemInputVal).html() +
  94. '</div>' +
  95. '</div>'
  96. );
  97. // Clear and focus input field
  98. itemInput.prop('value', '').focus();
  99. // Refresh sortable
  100. initDraggableItems('refresh');
  101. }
  102. });
  103. };
  104. // Remove Item
  105. var itemRemove = function(){
  106. scrumBoard.on('click.cb.sb.item.remove', 'button[data-toggle="sb-item-remove"]', function(e){
  107. jQuery(this).parents('.scrumboard-item').remove();
  108. });
  109. };
  110. // Init Draggable Items
  111. var initDraggableItems = function( mode ){
  112. if ( mode === 'refresh') {
  113. jQuery('.scrumboard-items.js-draggable-enabled').sortable('destroy');
  114. initDraggableItems();
  115. } else {
  116. jQuery('.scrumboard-items').addClass('js-draggable-enabled').sortable({
  117. connectWith: '.scrumboard-items',
  118. items: '.scrumboard-item',
  119. dropOnEmpty: true,
  120. opacity: .75,
  121. handle: '.scrumboard-item-handler',
  122. placeholder: 'scrumboard-item-placeholder',
  123. tolerance: 'pointer',
  124. start: function(e, ui){
  125. ui.placeholder.css({
  126. 'height': ui.item.outerHeight(),
  127. 'margin-bottom': ui.item.css('margin-bottom')
  128. });
  129. }
  130. });
  131. }
  132. };
  133. return {
  134. init: function () {
  135. // Init Scrum Board
  136. initScrumBoard();
  137. // Init Card Add
  138. cardAdd();
  139. // Init Item Add
  140. itemAdd();
  141. // Init Item Remove
  142. itemRemove();
  143. // Init Draggable Items
  144. initDraggableItems();
  145. }
  146. };
  147. }();
  148. // Initialize when page loads
  149. jQuery(function(){ BeScrumBoard.init(); });