the reminder not showing content on the card at dashboard view and the quizes are hardcoded must move to the db make api's for it
113 lines
2.6 KiB
JavaScript
Executable File
113 lines
2.6 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
const touch = require("../index.js")
|
|
|
|
const usage = code => {
|
|
console[code ? 'error' : 'log'](
|
|
'usage:\n' +
|
|
'touch [-acfm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...'
|
|
)
|
|
process.exit(code)
|
|
}
|
|
|
|
const singleFlags = {
|
|
a: 'atime',
|
|
m: 'mtime',
|
|
c: 'nocreate',
|
|
f: 'force'
|
|
}
|
|
|
|
const singleOpts = {
|
|
r: 'ref',
|
|
t: 'time'
|
|
}
|
|
|
|
const files = []
|
|
const args = process.argv.slice(2)
|
|
const options = {}
|
|
for (let i = 0; i < args.length; i++) {
|
|
const arg = args[i]
|
|
if (!arg.match(/^-/)) {
|
|
files.push(arg)
|
|
continue
|
|
}
|
|
|
|
// expand shorthands
|
|
if (arg.charAt(1) !== '-') {
|
|
const expand = []
|
|
for (let f = 1; f < arg.length; f++) {
|
|
const fc = arg.charAt(f)
|
|
const sf = singleFlags[fc]
|
|
const so = singleOpts[fc]
|
|
if (sf)
|
|
expand.push('--' + sf)
|
|
else if (so) {
|
|
const soslice = arg.slice(f + 1)
|
|
const soval = soslice.charAt(0) === '=' ? soslice : '=' + soslice
|
|
expand.push('--' + so + soval)
|
|
f = arg.length
|
|
} else if (arg !== '-' + fc)
|
|
expand.push('-' + fc)
|
|
}
|
|
if (expand.length) {
|
|
args.splice.apply(args, [i, 1].concat(expand))
|
|
i--
|
|
continue
|
|
}
|
|
}
|
|
|
|
const argsplit = arg.split('=')
|
|
const key = argsplit.shift().replace(/^\-\-/, '')
|
|
const val = argsplit.length ? argsplit.join('=') : null
|
|
|
|
switch (key) {
|
|
case 'time':
|
|
const timestr = val || args[++i]
|
|
// [-t [[CC]YY]MMDDhhmm[.SS]]
|
|
const parsedtime = timestr.match(
|
|
/^(([0-9]{2})?([0-9]{2}))?([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})(\.([0-9]{2}))?$/
|
|
)
|
|
if (!parsedtime) {
|
|
console.error('touch: out of range or illegal ' +
|
|
'time specification: ' +
|
|
'[[CC]YY]MMDDhhmm[.SS]')
|
|
process.exit(1)
|
|
} else {
|
|
const y = +parsedtime[1]
|
|
const year = parsedtime[2] ? y
|
|
: y <= 68 ? 2000 + y
|
|
: 1900 + y
|
|
|
|
const MM = +parsedtime[4] - 1
|
|
const dd = +parsedtime[5]
|
|
const hh = +parsedtime[6]
|
|
const mm = +parsedtime[7]
|
|
const ss = +parsedtime[8]
|
|
|
|
options.time = new Date(Date.UTC(year, MM, dd, hh, mm, ss))
|
|
}
|
|
continue
|
|
|
|
case 'ref':
|
|
options.ref = val || args[++i]
|
|
continue
|
|
|
|
case 'mtime':
|
|
case 'nocreate':
|
|
case 'atime':
|
|
case 'force':
|
|
options[key] = true
|
|
continue
|
|
|
|
default:
|
|
console.error('touch: illegal option -- ' + arg)
|
|
usage(1)
|
|
}
|
|
}
|
|
|
|
if (!files.length)
|
|
usage()
|
|
|
|
process.exitCode = 0
|
|
Promise.all(files.map(f => touch(f, options)))
|
|
.catch(er => process.exitCode = 1)
|