172 lines
5.6 KiB
JavaScript
172 lines
5.6 KiB
JavaScript
/*
|
|
Template Name: Minton - Responsive Bootstrap 4 Admin Dashboard
|
|
Author: CoderThemes
|
|
Website: https://coderthemes.com/
|
|
Contact: support@coderthemes.com
|
|
File: Todo init js
|
|
*/
|
|
|
|
!function($) {
|
|
"use strict";
|
|
|
|
var TodoApp = function() {
|
|
this.$body = $("body"),
|
|
this.$todoContainer = $('#todo-container'),
|
|
this.$todoMessage = $("#todo-message"),
|
|
this.$todoRemaining = $("#todo-remaining"),
|
|
this.$todoTotal = $("#todo-total"),
|
|
this.$archiveBtn = $("#btn-archive"),
|
|
this.$todoList = $("#todo-list"),
|
|
this.$todoDonechk = ".todo-done",
|
|
this.$todoForm = $("#todo-form"),
|
|
this.$todoInput = $("#todo-input-text"),
|
|
this.$todoBtn = $("#todo-btn-submit"),
|
|
|
|
this.$todoData = [
|
|
{
|
|
'id': '1',
|
|
'text': 'Design One page theme',
|
|
'done': false
|
|
},
|
|
{
|
|
'id': '2',
|
|
'text': 'Build a js based app',
|
|
'done': true
|
|
},
|
|
{
|
|
'id': '3',
|
|
'text': 'Creating component page',
|
|
'done': true
|
|
},
|
|
{
|
|
'id': '4',
|
|
'text': 'Testing??',
|
|
'done': true
|
|
},
|
|
{
|
|
'id': '5',
|
|
'text': 'Hehe!! This looks cool!',
|
|
'done': false
|
|
},
|
|
{
|
|
'id': '6',
|
|
'text': 'Create new version 3.0',
|
|
'done': false
|
|
},
|
|
{
|
|
'id': '7',
|
|
'text': 'Build an angular app',
|
|
'done': true
|
|
},{
|
|
'id': '8',
|
|
'text': 'Vue Admin & Dashboard ',
|
|
'done': false
|
|
}];
|
|
|
|
this.$todoCompletedData = [];
|
|
this.$todoUnCompletedData = [];
|
|
};
|
|
|
|
//mark/unmark - you can use ajax to save data on server side
|
|
TodoApp.prototype.markTodo = function(todoId, complete) {
|
|
for(var count=0; count<this.$todoData.length;count++) {
|
|
if(this.$todoData[count].id == todoId) {
|
|
this.$todoData[count].done = complete;
|
|
}
|
|
}
|
|
},
|
|
//adds new todo
|
|
TodoApp.prototype.addTodo = function(todoText) {
|
|
this.$todoData.push({'id': this.$todoData.length, 'text': todoText, 'done': false});
|
|
//regenerate list
|
|
this.generate();
|
|
},
|
|
//Archives the completed todos
|
|
TodoApp.prototype.archives = function() {
|
|
this.$todoUnCompletedData = [];
|
|
for(var count=0; count<this.$todoData.length;count++) {
|
|
//geretaing html
|
|
var todoItem = this.$todoData[count];
|
|
if(todoItem.done == true) {
|
|
this.$todoCompletedData.push(todoItem);
|
|
} else {
|
|
this.$todoUnCompletedData.push(todoItem);
|
|
}
|
|
}
|
|
this.$todoData = [];
|
|
this.$todoData = [].concat(this.$todoUnCompletedData);
|
|
//regenerate todo list
|
|
this.generate();
|
|
},
|
|
//Generates todos
|
|
TodoApp.prototype.generate = function() {
|
|
//clear list
|
|
this.$todoList.html("");
|
|
var remaining = 0;
|
|
for(var count=0; count<this.$todoData.length;count++) {
|
|
//geretaing html
|
|
var todoItem = this.$todoData[count];
|
|
if(todoItem.done == true)
|
|
this.$todoList.prepend('<li class="list-group-item border-0 pl-0"><div class="custom-control custom-checkbox"><input type="checkbox" class="custom-control-input todo-done" id="' + todoItem.id + '" checked><label class="custom-control-label" for="' + todoItem.id + '"><s>' + todoItem.text + '</s></label></div></li>');
|
|
else {
|
|
remaining = remaining + 1;
|
|
this.$todoList.prepend('<li class="list-group-item border-0 pl-0"><div class="custom-control custom-checkbox"><input type="checkbox" class="custom-control-input todo-done" id="' + todoItem.id + '"><label class="custom-control-label" for="' + todoItem.id + '">' + todoItem.text + '</label></div></li>');
|
|
}
|
|
}
|
|
|
|
//set total in ui
|
|
this.$todoTotal.text(this.$todoData.length);
|
|
//set remaining
|
|
this.$todoRemaining.text(remaining);
|
|
},
|
|
//init todo app
|
|
TodoApp.prototype.init = function () {
|
|
var $this = this;
|
|
//generating todo list
|
|
this.generate();
|
|
|
|
//binding archive
|
|
this.$archiveBtn.on("click", function(e) {
|
|
e.preventDefault();
|
|
$this.archives();
|
|
return false;
|
|
});
|
|
|
|
//binding todo done chk
|
|
$(document).on("change", this.$todoDonechk, function() {
|
|
if(this.checked)
|
|
$this.markTodo($(this).attr('id'), true);
|
|
else
|
|
$this.markTodo($(this).attr('id'), false);
|
|
//regenerate list
|
|
$this.generate();
|
|
});
|
|
|
|
//binding the new todo button
|
|
this.$todoForm.on("submit", function(e) {
|
|
e.preventDefault();
|
|
if ($this.$todoInput.val() == "" || typeof($this.$todoInput.val()) == 'undefined' || $this.$todoInput.val() == null) {
|
|
$this.$todoInput.focus();
|
|
return false;
|
|
} else {
|
|
$this.addTodo($this.$todoInput.val());
|
|
$this.$todoInput.val("");
|
|
|
|
$this.$todoForm.removeClass('was-validated');
|
|
setTimeout(function() {
|
|
$this.$todoForm.removeClass('was-validated');
|
|
});
|
|
return true;
|
|
}
|
|
});
|
|
},
|
|
//init TodoApp
|
|
$.TodoApp = new TodoApp, $.TodoApp.Constructor = TodoApp
|
|
|
|
}(window.jQuery),
|
|
|
|
//initializing todo app
|
|
function($) {
|
|
"use strict";
|
|
$.TodoApp.init()
|
|
}(window.jQuery); |