Skip to content

Instantly share code, notes, and snippets.

@singhayushh
Forked from v3rse/done.js
Created December 19, 2020 05:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save singhayushh/08e7f3fae2006714ba587767ae4b636e to your computer and use it in GitHub Desktop.
Save singhayushh/08e7f3fae2006714ba587767ae4b636e to your computer and use it in GitHub Desktop.
A simple command line todo list app written using Node.js. Run using `node ./done.js` or create an alias `alias done=node ./done.js`
//This is a simple command line todo list app
//Features
//-create todo item
//-list todo item
//-check todo item off list
//-delete todo item
var fs = require('fs');
//constants
var TASK_JSON_PATH = "./database.json";
function init(){
//create file if it's present.
if(!fs.existsSync(TASK_JSON_PATH)){
console.log("Initialising storage.\n Creating `database.json` file");
setData([]);
}
}
function getData(){
//read file contents
var contents = fs.readFileSync(TASK_JSON_PATH);
//parse contents
var data = JSON.parse(contents);
return data;
}
function setData(data){
//strigify JSON
var dataString = JSON.stringify(data);
//write to file
fs.writeFileSync(TASK_JSON_PATH,dataString);
}
//display usage
function usage() {
console.log("Usage: done [add|check|delete|help] [task]");
console.log("`task` is only a string when using `add` and a number\nfor all other commands.");
console.log("Using the `done` without arguments lists all tasks");
}
//add task
function add(task) {
//get data
var data = getData();
//add item
data.push({task:task,completed:false});
//set data
setData(data);
//list
list();
}
//check task
function check(task) {
//get data
var data = getData();
//modify the data (toggle)
data[task].completed = !data[task].completed;
//set data
setData(data);
//list
list();
}
//delete task
function del(task){
//get data
var data = getData();
//delete item
data.splice(task,task+1);
//set data
setData(data);
//list
list();
}
//list all tasks
function list() {
//data
var data = getData();
if(data.length > 0){
//print the list. using ANSI colors and formating
console.log("\x1b[93m\x1b[4mTask list:\x1b[24m");
data.forEach(function (task,index){
console.log(index+1+"."," ["+(task.completed ? "\x1b[92m✓\x1b[93m" : " ")+"] ",task.task);
});
}else{
console.log("\x1b[91mNo tasks added!!");
}
}
var command = process.argv[2];
var argument = process.argv[3];
init();
switch(command){
case "add":
add(argument);
break;
case "check":
check(argument-1);
break;
case "delete":
del(argument-1);
break;
case "help":
usage();
break;
case undefined:
list();
break;
default:
console.log("\x1b[91mCommand not found!!\x1b[0m");
usage();
break;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment