licham
Version:
Vietnamese Calendar
182 lines (155 loc) • 5.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = print;
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _lunar = require('./lib/lunar');
var _lunar2 = _interopRequireDefault(_lunar);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function print(opt = {}) {
opt = Object.assign({
mode: 'm',
date: new Date()
}, opt);
var date = opt.date;
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
if (opt.mode === 'm') {
printMonth(year, month, day);
} else {
printYear(year, month, day);
}
}
function printMonth(year, month, day) {
var lunarDate = (0, _lunar2.default)(day, month, year);
var lunarMonth = (0, _lunar.getLunarMonth)(month, year);
printCalendar(year, month, lunarMonth, day, lunarDate);
}
function printYear(year, month, day) {
for (let i = 1; i < 13; i++) {
var lunarMonth = (0, _lunar.getLunarMonth)(i, year);
printCalendar(year, i, lunarMonth);
}
}
function printCalendar(year, month, lunarMonth, day, lunarDate) {
var MAX_COL = 6;
var CELL_WIDTH = 10;
var TOTAL_WIDTH = (MAX_COL + 1) * (CELL_WIDTH + 1) + 2;
var HALF_WIDTH = Math.floor(TOTAL_WIDTH / 2);
var EMPTY_CELL = paddingLeft('', CELL_WIDTH) + '|';
var UNDER_LINE = '__________|';
console.log(_chalk2.default.bgMagenta.bold(padding(`Tháng ${ month } năm ${ year }`, TOTAL_WIDTH)));
if (day) {
let jd = lunarDate.jd;
let canchi = (0, _lunar.getCanChi)(lunarDate);
let gioHoangDao = (0, _lunar.getGioHoangDao)(jd);
console.log('');
console.log(_chalk2.default.bold(padding(`${ (0, _lunar.getDayOfWeek)(jd) }, ngày ${ day }`, TOTAL_WIDTH)));
console.log(padding(`Tháng ${ lunarDate.month }`, HALF_WIDTH) + padding(`Tháng ${ canchi[1] }`, HALF_WIDTH));
console.log(_chalk2.default.red.bold(padding(`Mùng ${ lunarDate.day }`, HALF_WIDTH) + padding(`Ngày ${ canchi[0] }`, HALF_WIDTH)));
console.log(padding('', HALF_WIDTH) + padding(`Giờ ${ (0, _lunar.getCanHour0)(jd) } Tý`, HALF_WIDTH));
console.log(padding(`Năm ${ canchi[2] }`, HALF_WIDTH) + padding(`Tiết ${ (0, _lunar.getTietKhi)(jd) }`, HALF_WIDTH));
console.log('');
let curHoangDao = '';
for (let i = 0, j = gioHoangDao.length - 1; i <= j; i++) {
curHoangDao += gioHoangDao[i];
if (i === 0) {
curHoangDao = `Giờ hoàng đạo: ${ curHoangDao }`;
}
if (i < j) {
curHoangDao += ', ';
if (i > 0 && i % 4 === 0) {
console.log(_chalk2.default.bgRed(paddingRight(curHoangDao, TOTAL_WIDTH)));
curHoangDao = paddingLeft('', 15);
}
} else {
console.log(_chalk2.default.bgRed(paddingRight(curHoangDao, TOTAL_WIDTH)));
}
}
}
console.log(' ______________________________________________________________________________ ');
console.log('| __________ __________ __________ __________ __________ __________ __________ |');
console.log('|| CN | T2 | T3 | T4 | T5 | T6 | T7 ||');
console.log('||==========|==========|==========|==========|==========|==========|==========||');
var col = 0;
var solarWeek = '';
var lunarWeek = '';
var underLine = '';
for (let i = 0, len = lunarMonth.length - 1; i <= len; i++) {
let date = lunarMonth[i];
let index = (0, _lunar.getDayOfWeekIndex)(date.jd);
if (solarWeek === '' && col < index) {
for (; col < index; col++) {
solarWeek += EMPTY_CELL;
lunarWeek += EMPTY_CELL;
underLine += UNDER_LINE;
}
}
let solarDay = i + 1;
let lunarDay = date.day;
if (solarDay === 1 || lunarDay === 1) {
lunarDay += `/${ date.month }`;
}
let curSolarDay = paddingRight(solarDay, CELL_WIDTH);
let curLunarDay = paddingLeft(lunarDay, CELL_WIDTH);
let curLine = UNDER_LINE;
if (col === 0) {
curSolarDay = _chalk2.default.magenta(curSolarDay);
} else if (col === MAX_COL) {
curSolarDay = _chalk2.default.white(curSolarDay);
}
if (day && lunarDate.day === date.day && lunarDate.month === date.month) {
curSolarDay = _chalk2.default.bgRed.bold(curSolarDay);
curLunarDay = _chalk2.default.bgRed.bold.white(curLunarDay);
curLine = `${ _chalk2.default.bgRed.bold(curLine.substr(0, CELL_WIDTH)) }|`;
} else {
curLunarDay = _chalk2.default.red(curLunarDay);
}
solarWeek += `${ curSolarDay }|`;
lunarWeek += `${ curLunarDay }|`;
underLine += curLine;
col++;
if (i === len && col < MAX_COL) {
for (; col <= MAX_COL; col++) {
solarWeek += EMPTY_CELL;
lunarWeek += EMPTY_CELL;
underLine += UNDER_LINE;
}
}
if (col > MAX_COL) {
col = 0;
console.log(`||${ solarWeek }|`);
console.log(`||${ lunarWeek }|`);
console.log(`||${ underLine }|`);
solarWeek = '';
lunarWeek = '';
underLine = '';
}
}
console.log('|______________________________________________________________________________|\n');
}
function padding(str, len, by = ' ') {
var ret = '' + str;
var retLen = ret.length;
var left = Math.floor((len - retLen) / 2);
var right = len - left - retLen;
ret = paddingLeft('', left, by) + ret + paddingRight('', right, by);
return ret;
}
function paddingLeft(str, len, by = ' ') {
var ret = '' + str;
for (let i = 0, j = len - ret.length; i < j; i++) {
ret = by + ret;
}
return ret;
}
function paddingRight(str, len, by = ' ') {
var ret = '' + str;
for (let i = 0, j = len - ret.length; i < j; i++) {
ret += by;
}
return ret;
}