You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

244 lines
6.8 KiB

module.exports = () => {
var o = {
__: {
id: (aid, zone) => {
const ids = find.search(aid, 'id', zone);
if(zone.length > 1){
return find.byIDs(ids, data.td());
}
return find.byIDs(ids, zone[0]);
},
name: (aname, zone) => {
const names = find.search(aname, 'name', zone);
return find.byIDs(names);
},
getLogs: id => data.td().filter(item => item.id == id)[0].logs.filter(item2 => !item2.isDel),
getAllLogs: id => data.td().filter(item => item.id == id)[0].logs,
resetLog: id => {
if(id == data.log()) {
data.log('null');
}
},
addLog: (id, content) => {
let logs = o.__.getAllLogs(id);
logs.push({
'id': o.__.generateID(16),
'content': content,
createTime: (new Date()).valueOf(),
lastOperateTime: (new Date()).valueOf(),
isDel: false
});
find.updateTd(id, 'logs', logs);
},
rmLog: (id, lid) => {
let logs = o.__.getAllLogs(id);
for(let i of logs){
if(i.id == lid){
i.isDel = true;
break;
}
}
find.updateTd(id, 'logs', logs);
},
getAllClass: (zone) => {
let arr = [];
for(const cla of zone){
for(const i of cla){
if(arr.indexOf(i.class) != -1){
arr.push(i.class);
}
}
}
return arr;
},
parseTime: t => {
if(!t){
return 'null';
}
const st = new Date(t);
return `${st.getFullYear()}-${st.getMonth()+1}-${st.getDate()} ${st.getHours()}:${st.getMinutes()}:${st.getSeconds()}`;
},
generateID: (l) => md5((new Date()).valueOf()).substring(0, l),
show: arr => {
let configInfo = new table({
head: ['id', 'class', 'name', 'createTime', 'todoTime', 'endTime']
});
for(const i of arr){
configInfo.push([i.id, i.class, i.name, o.__.parseTime(i.createTime), o.__.parseTime(i.todoTime), o.__.parseTime(i.endTime)]);
}
console.log(configInfo.toString());
},
showLogs: arr => {
let configInfo = new table({
head: ['id', 'content', 'createTime']
});
for(const i of arr){
configInfo.push([i.id, i.content, o.__.parseTime(i.createTime)]);
}
console.log(configInfo.toString());
}
},
getAll: () => data.td(),
getAllClass: () => o.__.getAllClass([data.td()]),
getByaID: id => o.__.id(id, [data.td()]),
getByaName: name => o.__.name(name, [data.td()]),
new: (name, cla) => {
let d = data.td();
if(!cla){
cla = 'default';
}
if(!name){
return 'Name should not be empty!!';
}
if(name.length > 25){
return 'Name too Long!!';
}
d.push({
id: o.__.generateID(8),
'name': name,
'class': cla,
createTime: (new Date()).valueOf(),
todoTime: null,
endTime: null,
lastOperateTime: (new Date()).valueOf(),
idDel: false,
logs: [{
id: o.__.generateID(16),
content: 'Todo Item Created!!',
createTime: (new Date()).valueOf(),
lastOperateTime: (new Date()).valueOf()
}]
});
data.td(d);
return;
},
rm: aid => {
let items = o.__.id(aid, [o.todo.getAll(), o.task.getAll(), o.history.getAll()]);
if(items.length > 1){
return 'Which id do you want to remove?';
}
if(items.length <= 0){
return 'Not found!!';
}
find.updateTd(items[0].id, 'isDel', true);
console.log(items[0].id);
o.__.resetLog(items[0].id);
},
add: aid => {
let items = o.__.id(aid, [o.todo.getAll()]);
if(items.length > 1){
return 'Which id do you want to add to task?';
}
if(items.length <= 0){
return 'Not found!!';
}
find.updateTd(items[0].id, 'todoTime', (new Date()).valueOf());
},
return: aid => {
let items = o.__.id(aid, [o.task.getAll()]);
if(items.length > 1){
return 'Which id do you want to return?';
}
if(items.length <= 0){
return 'Not found!!';
}
find.updateTd(items[0].id, 'todoTime', null);
o.__.resetLog(items[0].id);
},
done: aid => {
let items = o.__.id(aid, [o.task.getAll()]);
if(items.length > 1){
return 'Which id do you want to finish?';
}
if(items.length <= 0){
return 'Not found!!';
}
find.updateTd(items[0].id, 'endTime', (new Date()).valueOf());
o.__.resetLog(items[0].id);
},
recover: aid => {
let items = o.__.id(aid, [o.history.getAll()]);
if(items.length > 1){
return 'Which id do you want to recover?';
}
if(items.length <= 0){
return 'Not found!!';
}
find.updateTd(items[0].id, 'endTime', null);
},
/* log */
ll: () => {
if(data.log() == 'null'){
return 'No Task Pointed!! Please select a task to begin!!';
}
let logs = o.__.getLogs(data.log());
console.log('At task ' + data.log() + ' ' + o.__.id(data.log(), [data.td()])[0].name);
o.__.showLogs(logs);
},
select: aid => {
let items = o.__.id(aid, [o.task.getAll()]);
if(items.length > 1){
return 'Which id do you want to add to task?';
}
if(items.length <= 0){
return 'Not found!!';
}
data.log(items[0].id);
console.log(items[0].id);
},
log: content => {
if(data.log() == "null"){
return 'No Task Pointed!! Please select a task to begin!!';
}
o.__.addLog(data.log(), content);
},
rml: aid => {
if(data.log() == "null"){
return 'No Task Pointed!! Please select a task to begin!!';
}
let items = o.__.id(aid, [o.__.id(data.log(), [data.td()])[0].logs]);
if(items.length > 1){
return 'Which id do you want to add to task?';
}
if(items.length <= 0){
return 'Not found!!';
}
o.__.rmLog(data.log(), items[0].id);
console.log(items[0].id);
},
/* sub */
todo: {
getAll: () => data.td().filter(item => !item.isDel && item.todoTime == null),
getByaID: id => o.__.id(id, [o.todo.getAll()]),
getByaName: name => o.__.name(name, [o.todo.getAll()]),
getAllClass: () => o.__.getAllClass([o.todo.getAll()]),
},
task: {
getAll: () => data.td().filter(item => !item.isDel && item.todoTime != null && item.endTime == null),
getByaID: id => o.__.id(id, [o.task.getAll()]),
getByaName: name => o.__.name(name, [o.task.getAll()]),
getAllClass: () => o.__.getAllClass([o.task.getAll()]),
},
history: {
getAll: () => data.td().filter(item => !item.isDel && item.todoTime != null && item.endTime != null),
getByaID: id => o.__.id(id, [o.history.getAll()]),
getByaName: name => o.__.name(name, [o.history.getAll()]),
getAllClass: () => o.__.getAllClass([o.history.getAll()]),
},
ash: {
getAll: () => data.td().filter(item => item.isDel),
getByaID: id => o.__.id(id, [o.ash.getAll()]),
getByaName: name => o.__.name(name, [o.ash.getAll()]),
getAllClass: () => o.__.getAllClass([o.ash.getAll()]),
}
}
var data = require(__dirname + '/../utilities/data.js')();
const find = require(__dirname + '/../utilities/find.js')();
const colors = require('colors');
const boxen = require('boxen');
const table = require('cli-table');
const md5 = require('md5');
return o;
}