2015-02-08 20:07:15 +01:00
|
|
|
/**
|
|
|
|
* Created by knut on 15-01-14.
|
|
|
|
*/
|
2015-02-20 19:06:15 +01:00
|
|
|
var moment = require('moment');
|
2015-02-08 20:07:15 +01:00
|
|
|
|
|
|
|
var dateFormat = '';
|
|
|
|
var title = '';
|
|
|
|
var sections = [];
|
|
|
|
var tasks = [];
|
|
|
|
var currentSection = '';
|
|
|
|
|
|
|
|
exports.clear = function(){
|
|
|
|
sections = [];
|
|
|
|
tasks = [];
|
|
|
|
currentSection = '';
|
|
|
|
title = '';
|
|
|
|
taskCnt = 0;
|
|
|
|
lastTask = undefined;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.setDateFormat = function(txt){
|
|
|
|
dateFormat = txt;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.getDateFormat = function(){
|
|
|
|
return dateFormat;
|
|
|
|
};
|
|
|
|
exports.setTitle = function(txt){
|
|
|
|
title = txt;
|
|
|
|
};
|
|
|
|
|
2015-02-20 19:06:15 +01:00
|
|
|
exports.getTitle = function(){
|
2015-02-08 20:07:15 +01:00
|
|
|
return title;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.addSection = function(txt){
|
|
|
|
currentSection = txt;
|
|
|
|
sections.push(txt);
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.findTaskById = function(id) {
|
|
|
|
var i;
|
|
|
|
for(i=0;i<tasks.length;i++){
|
|
|
|
if(tasks[i].id === id){
|
|
|
|
return tasks[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.getTasks=function(){
|
2015-02-20 19:06:15 +01:00
|
|
|
var i;
|
|
|
|
for(i=10000;i<tasks.length;i++){
|
2015-02-28 23:50:23 +01:00
|
|
|
tasks[i].startTime = moment(tasks[i].startTime).format(dateFormat);
|
|
|
|
tasks[i].endTime = moment(tasks[i].endTime).format(dateFormat);
|
2015-02-20 19:06:15 +01:00
|
|
|
}
|
2015-02-20 19:34:18 +01:00
|
|
|
|
2015-02-08 20:07:15 +01:00
|
|
|
return tasks;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var getStartDate = function(prevTime, dateFormat, str){
|
2015-02-20 19:06:15 +01:00
|
|
|
//console.log('Deciding start date:'+str);
|
|
|
|
//console.log('with dateformat:'+dateFormat);
|
|
|
|
|
|
|
|
str = str.trim();
|
|
|
|
|
2015-02-08 20:07:15 +01:00
|
|
|
// Test for after
|
|
|
|
var re = /^after\s+([\d\w\-]+)/;
|
|
|
|
var afterStatement = re.exec(str.trim());
|
|
|
|
if(afterStatement!==null){
|
|
|
|
var task = exports.findTaskById(afterStatement[1]);
|
|
|
|
if(typeof task === 'undefined'){
|
|
|
|
var dt = new Date();
|
|
|
|
dt.setHours(0,0,0,0);
|
|
|
|
return dt;
|
|
|
|
}
|
|
|
|
return task.endTime;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check for actual date set
|
2015-02-28 23:50:23 +01:00
|
|
|
if(moment(str,dateFormat.trim(),true).isValid()){
|
|
|
|
return moment(str,dateFormat.trim(),true).toDate();
|
2015-02-20 19:06:15 +01:00
|
|
|
}else{
|
|
|
|
console.log('Invalid date:'+str);
|
2015-02-28 23:50:23 +01:00
|
|
|
console.log('With date format:'+dateFormat.trim());
|
2015-06-21 17:25:58 +02:00
|
|
|
//console.log('----');
|
2015-02-08 20:07:15 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Default date - now
|
|
|
|
return new Date();
|
|
|
|
};
|
|
|
|
|
|
|
|
var getEndDate = function(prevTime, dateFormat, str){
|
2015-02-20 19:06:15 +01:00
|
|
|
str = str.trim();
|
|
|
|
|
2015-02-08 20:07:15 +01:00
|
|
|
// Check for actual date
|
2015-03-01 16:29:41 +01:00
|
|
|
if(moment(str,dateFormat.trim(),true).isValid()){
|
|
|
|
|
|
|
|
return moment(str,dateFormat.trim()).toDate();
|
2015-02-08 20:07:15 +01:00
|
|
|
}
|
2015-02-28 23:50:23 +01:00
|
|
|
|
2015-02-08 20:07:15 +01:00
|
|
|
var d = moment(prevTime);
|
|
|
|
// Check for length
|
|
|
|
var re = /^([\d]+)([wdh])/;
|
|
|
|
var durationStatement = re.exec(str.trim());
|
2015-02-28 23:50:23 +01:00
|
|
|
|
2015-02-08 20:07:15 +01:00
|
|
|
if(durationStatement!== null){
|
|
|
|
switch(durationStatement[2]){
|
|
|
|
case 'h':
|
|
|
|
d.add(durationStatement[1], 'hours');
|
|
|
|
break;
|
|
|
|
case 'd':
|
|
|
|
d.add(durationStatement[1], 'days');
|
|
|
|
break;
|
|
|
|
case 'w':
|
|
|
|
d.add(durationStatement[1], 'weeks');
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return d.toDate();
|
|
|
|
}
|
|
|
|
// Default date - now
|
|
|
|
return d.toDate();
|
|
|
|
};
|
|
|
|
|
|
|
|
var taskCnt = 0;
|
|
|
|
var parseId = function(idStr){
|
|
|
|
if(typeof idStr === 'undefined'){
|
|
|
|
taskCnt = taskCnt + 1;
|
|
|
|
return 'task'+taskCnt;
|
|
|
|
}
|
|
|
|
return idStr;
|
|
|
|
};
|
|
|
|
// id, startDate, endDate
|
|
|
|
// id, startDate, length
|
|
|
|
// id, after x, endDate
|
|
|
|
// id, after x, length
|
|
|
|
// startDate, endDate
|
|
|
|
// startDate, length
|
|
|
|
// after x, endDate
|
|
|
|
// after x, length
|
|
|
|
// endDate
|
|
|
|
// length
|
|
|
|
|
|
|
|
var compileData = function(prevTask, dataStr){
|
2015-02-20 19:06:15 +01:00
|
|
|
var ds;
|
|
|
|
|
|
|
|
if(dataStr.substr(0,1) === ':'){
|
|
|
|
ds = dataStr.substr(1,dataStr.length);
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
ds=dataStr;
|
|
|
|
}
|
|
|
|
|
|
|
|
var data = ds.split(',');
|
2015-02-22 20:18:44 +01:00
|
|
|
|
|
|
|
|
2015-02-08 20:07:15 +01:00
|
|
|
var task = {};
|
|
|
|
var df = exports.getDateFormat();
|
|
|
|
|
2015-02-28 23:50:23 +01:00
|
|
|
|
|
|
|
// Get tags like active, done cand crit
|
2015-02-22 20:18:44 +01:00
|
|
|
var matchFound = true;
|
|
|
|
while(matchFound){
|
|
|
|
matchFound = false;
|
|
|
|
if(data[0].match(/^\s*active\s*$/)){
|
|
|
|
task.active = true;
|
|
|
|
data.shift(1);
|
|
|
|
matchFound = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
if(data[0].match(/^\s*done\s*$/)){
|
|
|
|
task.done = true;
|
|
|
|
data.shift(1);
|
|
|
|
matchFound = true;
|
|
|
|
}
|
|
|
|
if(data[0].match(/^\s*crit\s*$/)){
|
|
|
|
task.crit = true;
|
|
|
|
data.shift(1);
|
|
|
|
matchFound = true;
|
|
|
|
}
|
|
|
|
}
|
2015-02-24 23:03:09 +01:00
|
|
|
var i;
|
2015-02-22 20:18:44 +01:00
|
|
|
for(i=0;i<data.length;i++){
|
|
|
|
data[i] = data[i].trim();
|
|
|
|
}
|
|
|
|
|
2015-02-28 23:50:23 +01:00
|
|
|
|
2015-02-08 20:07:15 +01:00
|
|
|
switch(data.length){
|
|
|
|
case 1:
|
|
|
|
task.id = parseId();
|
|
|
|
task.startTime = prevTask.endTime;
|
|
|
|
task.endTime = getEndDate(task.startTime, df, data[0]);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
task.id = parseId();
|
|
|
|
task.startTime = getStartDate(undefined, df, data[0]);
|
|
|
|
task.endTime = getEndDate(task.startTime, df, data[1]);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
task.id = parseId(data[0]);
|
|
|
|
task.startTime = getStartDate(undefined, df, data[1]);
|
|
|
|
task.endTime = getEndDate(task.startTime, df, data[2]);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
|
|
|
|
}
|
2015-02-20 19:06:15 +01:00
|
|
|
|
2015-02-08 20:07:15 +01:00
|
|
|
return task;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var lastTask;
|
|
|
|
exports.addTask = function(descr,data){
|
|
|
|
|
|
|
|
var newTask = {
|
|
|
|
section:currentSection,
|
2015-02-20 19:06:15 +01:00
|
|
|
type:currentSection,
|
|
|
|
description:descr,
|
|
|
|
task:descr
|
2015-02-08 20:07:15 +01:00
|
|
|
};
|
|
|
|
var taskInfo = compileData(lastTask, data);
|
|
|
|
newTask.startTime = taskInfo.startTime;
|
|
|
|
newTask.endTime = taskInfo.endTime;
|
|
|
|
newTask.id = taskInfo.id;
|
2015-02-22 20:18:44 +01:00
|
|
|
newTask.active = taskInfo.active;
|
|
|
|
newTask.done = taskInfo.done;
|
|
|
|
newTask.crit = taskInfo.crit;
|
2015-02-08 20:07:15 +01:00
|
|
|
lastTask = newTask;
|
|
|
|
tasks.push(newTask);
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.parseError = function(err,hash){
|
|
|
|
mermaid.parseError(err,hash);
|
|
|
|
};
|