/* * Document : be_pages_generic_todo.js * Author : pixelcave * Description: Custom JS code used in Todo Page */ // Helper variables let taskIdNext, tasks, taskForm, taskInput, taskInputVal, taskList, taskListStarred, taskListCompleted, taskBadge, taskBadgeStarred, taskBadgeCompleted; class BeTasks { /* * Set variables and default functionality * */ static initTasks() { let self = this; tasks = jQuery('.js-tasks'); taskForm = jQuery('#js-task-form'); taskInput = jQuery('#js-task-input'); taskList = jQuery('.js-task-list'); taskListStarred = jQuery('.js-task-list-starred'); taskListCompleted = jQuery('.js-task-list-completed'); taskBadge = jQuery('.js-task-badge'); taskBadgeStarred = jQuery('.js-task-badge-starred'); taskBadgeCompleted = jQuery('.js-task-badge-completed'); // Set your own next new task id based on your database setup taskIdNext = 10; // Update badges self.badgesUpdate(); // New task form submission taskForm.on('submit', e => { e.preventDefault(); // Get input value taskInputVal = taskInput.prop('value'); // Check if the user entered something if (taskInputVal) { // Add Task self.taskAdd(taskInputVal); // Clear and focus input field taskInput.prop('value', '').focus(); } }); // Task status update on checkbox click let stask, staskId; tasks.on('click', '.js-task-status', e => { e.preventDefault(); stask = jQuery(e.currentTarget).closest('.js-task'); staskId = stask.attr('data-task-id'); // Check task status and toggle it if (stask.attr('data-task-completed') === 'true') { self.taskSetActive( staskId ); } else { self.taskSetCompleted( staskId ); } }); // Task starred status update on star click let ftask, ftaskId; tasks.on('click', '.js-task-star', e => { ftask = jQuery(e.currentTarget).closest('.js-task'); ftaskId = ftask.attr('data-task-id'); // Check task starred status and toggle it if (ftask.attr('data-task-starred') === 'true') { self.taskStarRemove( ftaskId ); } else { self.taskStarAdd( ftaskId ); } }); // Remove task on remove button click tasks.on('click', '.js-task-remove', e => { ftask = jQuery(e.currentTarget).closest('.js-task'); ftaskId = ftask.attr('data-task-id'); // Remove task self.taskRemove( ftaskId ); }); } /* * Update badges * */ static badgesUpdate() { taskBadge.text( taskList.children().length || '' ); taskBadgeStarred.text( taskListStarred.children().length || '' ); taskBadgeCompleted.text( taskListCompleted.children().length || '' ); } /* * Add a task * */ static taskAdd(taskContent) { // Add it to the task list taskList.prepend( '
| ' + '' + ' | ' + '' + jQuery('').text(taskContent).html() + ' | ' + '' + ' ' + '' + ' | ' + '