bash-calendar/index.js

96 lines
2.3 KiB
JavaScript
Raw Normal View History

2021-11-26 17:24:37 +08:00
#!/usr/bin/env node
/**
* {终端版万年历}
* @author yutent<yutent.io@gmail.com>
* @date 2021/11/26 17:20:02
*/
2021-11-29 16:05:25 +08:00
import chalk from 'chalk'
import figlet from 'figlet'
import { getThisYearMonth, getCalendarTable } from './calendar.js'
const CAL_HEAD = ['日', '一', '二', '三', '四', '五', '六'].map((s, i) => {
if (i === 0 || i === 6) {
s = chalk.red.bold(s)
} else {
s = chalk.bold(s)
2021-11-26 17:24:37 +08:00
}
2021-11-29 16:05:25 +08:00
return ' '.repeat(4) + s + ' '.repeat(4) + chalk.grey('|')
})
const VLINE = chalk.grey('|')
const DASHED_LINE = chalk.grey('|' + (' '.repeat(10) + '|').repeat(7))
var [year, month] = getThisYearMonth()
var table = getCalendarTable(year, month)
var line = 0
var dateStr = figlet.textSync(`${year} . ${month + 1}`)
function drawDashedLine(start = '', pipe = ' ') {
return chalk.grey(start + (pipe.repeat(10) + '|').repeat(7))
2021-11-26 17:24:37 +08:00
}
2021-11-29 16:05:25 +08:00
dateStr = dateStr
.split('\n')
.map(s => chalk.grey('| ') + chalk.cyan(s) + ' '.repeat(77 - s.length - 2) + chalk.grey('|'))
.slice(0, -1)
.join('\n')
console.log(chalk.grey(' ' + '_'.repeat(76)))
console.log(dateStr)
console.log(chalk.grey('|' + '_'.repeat(76) + '|'))
console.log(drawDashedLine('|'))
console.log(chalk.grey('|') + CAL_HEAD.join(''))
console.log(drawDashedLine('|', '_'))
// 渲染日历表格
for (let i = 0; i < 3 * 5 + 1; i++) {
let tr = ''
for (let j = 0; j < 7; j++) {
let tmp = table[line + j]
if (!tmp) {
break
}
if (j === 0) {
tr += VLINE
}
switch (i % 3) {
case 0:
if (i === 0) {
tr += chalk.grey(' '.repeat(10) + '|')
} else {
tr += chalk.grey('-'.repeat(j === 6 ? 10 : 11) + (j === 6 ? '|' : ''))
if (j === 6) {
line += 7
}
}
break
case 1:
if (tmp.picked) {
tr += chalk.bgRed.whiteBright.bold(' '.repeat(4) + tmp.day + ' '.repeat(4)) + VLINE
} else {
if (tmp.weekend) {
tmp.day = chalk.redBright(tmp.day)
} else {
tmp.day = chalk.whiteBright(tmp.day)
}
tr += ' '.repeat(4) + tmp.day + ' '.repeat(4) + VLINE
}
break
case 2:
if (tmp.picked) {
tr += chalk.bgRed(' '.repeat(10)) + VLINE
} else {
tr += ' '.repeat(10) + VLINE
}
break
}
}
console.log(tr)
}