be_pages_generic_todo.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. /*
  2. * Document : be_pages_generic_todo.js
  3. * Author : pixelcave
  4. * Description: Custom JS code used in Todo Page in Backend
  5. */
  6. var BeTasks = function() {
  7. // Helper variables - set in initTasks()
  8. var taskIdNext, tasks, taskForm, taskInput, taskInputVal,
  9. taskList, taskListStarred, taskListCompleted,
  10. taskBadge, taskBadgeStarred, taskBadgeCompleted;
  11. // Set variables and default functionality
  12. var initTasks = function(){
  13. tasks = jQuery('.js-tasks');
  14. taskForm = jQuery('#js-task-form');
  15. taskInput = jQuery('#js-task-input');
  16. taskList = jQuery('.js-task-list');
  17. taskListStarred = jQuery('.js-task-list-starred');
  18. taskListCompleted = jQuery('.js-task-list-completed');
  19. taskBadge = jQuery('.js-task-badge');
  20. taskBadgeStarred = jQuery('.js-task-badge-starred');
  21. taskBadgeCompleted = jQuery('.js-task-badge-completed');
  22. // Set your own next new task id based on your database setup
  23. taskIdNext = 10;
  24. // Update badges
  25. badgesUpdate();
  26. // New task form submission
  27. taskForm.on('submit', function(e){
  28. e.preventDefault();
  29. // Get input value
  30. taskInputVal = taskInput.prop('value');
  31. // Check if the user entered something
  32. if ( taskInputVal ) {
  33. // Add Task
  34. taskAdd(taskInputVal);
  35. // Clear and focus input field
  36. taskInput.prop('value', '').focus();
  37. }
  38. });
  39. // Task status update on checkbox click
  40. var stask, staskId;
  41. tasks.on('click', '.js-task-status', function(e){
  42. e.preventDefault();
  43. stask = jQuery(this).closest('.js-task');
  44. staskId = stask.attr('data-task-id');
  45. // Check task status and toggle it
  46. if ( stask.attr('data-task-completed') === 'true' ) {
  47. taskSetActive( staskId );
  48. } else {
  49. taskSetCompleted( staskId );
  50. }
  51. });
  52. // Task starred status update on star click
  53. var ftask, ftaskId;
  54. tasks.on('click', '.js-task-star', function(){
  55. ftask = jQuery(this).closest('.js-task');
  56. ftaskId = ftask.attr('data-task-id');
  57. // Check task starred status and toggle it
  58. if ( ftask.attr('data-task-starred') === 'true' ) {
  59. taskStarRemove( ftaskId );
  60. } else {
  61. taskStarAdd( ftaskId );
  62. }
  63. });
  64. // Remove task on remove button click
  65. tasks.on('click', '.js-task-remove', function(){
  66. ftask = jQuery(this).closest('.js-task');
  67. ftaskId = ftask.attr('data-task-id');
  68. // Remove task
  69. taskRemove( ftaskId );
  70. });
  71. };
  72. // Update badges
  73. var badgesUpdate = function() {
  74. taskBadge.text( taskList.children().length || '' );
  75. taskBadgeStarred.text( taskListStarred.children().length || '' );
  76. taskBadgeCompleted.text( taskListCompleted.children().length || '' );
  77. };
  78. // Add a task
  79. var taskAdd = function( taskContent ){
  80. // Add it to the task list
  81. taskList
  82. .prepend(
  83. '<div class="js-task block block-rounded mb-5 animated fadeIn" data-task-id="' +
  84. taskIdNext +
  85. '" data-task-completed="false" data-task-starred="false">' +
  86. '<table class="table table-borderless table-vcenter mb-0">' +
  87. '<tr>' +
  88. '<td class="text-center" style="width: 50px;">' +
  89. '<label class="js-task-status css-control css-control-primary css-checkbox py-0">' +
  90. '<input type="checkbox" class="css-control-input">' +
  91. '<span class="css-control-indicator"></span>' +
  92. '</label>' +
  93. '</td>' +
  94. '<td class="js-task-content font-w600">' +
  95. jQuery('<span />').text(taskContent).html() +
  96. '</td>' +
  97. '<td class="text-right" style="width: 100px;">' +
  98. '<button class="js-task-star btn btn-sm btn-alt-warning" type="button">' +
  99. '<i class="fa fa-star-o"></i>' +
  100. '</button> ' +
  101. '<button class="js-task-remove btn btn-sm btn-alt-danger" type="button">' +
  102. '<i class="fa fa-times"></i>' +
  103. '</button>' +
  104. '</td>' +
  105. '</tr>' +
  106. '</table>' +
  107. '</div>'
  108. );
  109. // Update badges
  110. badgesUpdate();
  111. // Save the task based on your database setup
  112. // ..
  113. // Update task next id
  114. taskIdNext++;
  115. };
  116. // Remove a task
  117. var taskRemove = function( taskId ){
  118. jQuery('.js-task[data-task-id="' + taskId + '"]').remove();
  119. // Update badges
  120. badgesUpdate();
  121. // Remove the task based on your database setup
  122. // ..
  123. };
  124. // Star a task
  125. var taskStarAdd = function( taskId ){
  126. var task = jQuery('.js-task[data-task-id="' + taskId + '"]');
  127. // Check if exists and update accordignly the markup
  128. if ( task.length > 0 ) {
  129. task.attr('data-task-starred', true);
  130. task.find('.js-task-star > i').toggleClass('fa-star fa-star-o');
  131. if ( task.attr('data-task-completed') === 'false') {
  132. task.prependTo(taskListStarred);
  133. }
  134. // Update badges
  135. badgesUpdate();
  136. // Star the task based on your database setup
  137. // ..
  138. }
  139. };
  140. // Unstar a task
  141. var taskStarRemove = function( taskId ){
  142. var task = jQuery('.js-task[data-task-id="' + taskId + '"]');
  143. // Check if exists and update accordignly the markup
  144. if ( task.length > 0 ) {
  145. task.attr('data-task-starred', false);
  146. task.find('.js-task-star > i').toggleClass('fa-star fa-star-o');
  147. if ( task.attr('data-task-completed') === 'false') {
  148. task.prependTo(taskList);
  149. }
  150. // Update badges
  151. badgesUpdate();
  152. // Unstar the task based on your database setup
  153. // ..
  154. }
  155. };
  156. // Set a task to active
  157. var taskSetActive = function( taskId ){
  158. var task = jQuery('.js-task[data-task-id="' + taskId + '"]');
  159. // Check if exists and update accordignly
  160. if ( task.length > 0 ) {
  161. task.attr('data-task-completed', false);
  162. task.find('.table').toggleClass('bg-body-light');
  163. task.find('.js-task-status > input').prop('checked', false);
  164. task.find('.js-task-content > del').contents().unwrap();
  165. if ( task.attr('data-task-starred') === 'true') {
  166. task.prependTo(taskListStarred);
  167. } else {
  168. task.prependTo(taskList);
  169. }
  170. // Update badges
  171. badgesUpdate();
  172. // Update task status based on your database setup
  173. // ..
  174. }
  175. };
  176. // Set a task to completed
  177. var taskSetCompleted = function( taskId ){
  178. var task = jQuery('.js-task[data-task-id="' + taskId + '"]');
  179. // Check if exists and update accordignly
  180. if ( task.length > 0 ) {
  181. task.attr('data-task-completed', true);
  182. task.find('.table').toggleClass('bg-body-light');
  183. task.find('.js-task-status > input').prop('checked', true);
  184. task.find('.js-task-content').wrapInner('<del></del>');
  185. task.prependTo(taskListCompleted);
  186. // Update badges
  187. badgesUpdate();
  188. // Update task status based on your database setup
  189. // ..
  190. }
  191. };
  192. return {
  193. init: function () {
  194. // Init Tasks
  195. initTasks();
  196. }
  197. };
  198. }();
  199. // Initialize when page loads
  200. jQuery(function(){ BeTasks.init(); });