UNPKG

orgdo

Version:

Command-line tool to manage the Todo lists

55 lines (54 loc) 1.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utits_1 = require("./utits"); const chalk_1 = require("chalk"); const os = require("os"); const MARK = chalk_1.default.bold; function renderClocks(start, end, clocks) { start = utits_1.clearTimeInfo(start); end = utits_1.clearTimeInfo(end); const begin = firstOfWeek(start); const weekNum = calWeeksNum(begin, end); const aggArr = aggregateClocks(begin, weekNum, clocks); const lines = ["Sun Mon Tue Wed Thu Fri Sat"]; const indexOfStart = dayOffset(begin, start); const indexOfEnd = dayOffset(begin, end); let line = ""; aggArr.forEach((v, i) => { const isSun = i % 7 === 0; const isEmpty = i < indexOfStart || i > indexOfEnd; let value = paddingRight(isEmpty ? "" : String(v), isSun ? 3 : 4); if (i === indexOfStart || i === indexOfEnd) { value = MARK(value); } line += value; if ((i + 1) % 7 === 0) { lines.push(line); line = ""; } }); return lines.join(os.EOL); } exports.renderClocks = renderClocks; function aggregateClocks(begin, weekNum, clocks) { const ret = Array.from(" ".repeat(7 * weekNum)).map(v => 0); clocks.map(clock => { const offset = dayOffset(begin, utits_1.clearTimeInfo(clock.createdAt)); ret[offset]++; }); return ret; } function firstOfWeek(date) { const ret = new Date(date.getTime()); ret.setDate(ret.getDate() - ret.getDay()); return ret; } function calWeeksNum(begin, target) { return Math.ceil((dayOffset(begin, target) + 1) / 7); } function dayOffset(begin, target) { return Math.floor((target.getTime() - begin.getTime()) / 86400000); } function paddingRight(str, size) { return (" ".repeat(size) + str).slice(-1 * size); }