1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-27 10:32:58 +02:00
joplin/CliClient/app/vorpal-utils.js

148 lines
3.2 KiB
JavaScript
Raw Normal View History

2017-07-04 21:12:30 +02:00
import { time } from 'lib/time-utils.js';
2017-07-12 22:39:47 +02:00
import stringPadding from 'string-padding';
2017-07-04 21:12:30 +02:00
const vorpalUtils = {};
let vorpal_ = null;
let redrawStarted_ = false;
2017-07-14 21:06:01 +02:00
let redrawLastUpdateTime_ = 0;
2017-07-04 21:12:30 +02:00
let redrawLastLog_ = null;
let redrawEnabled_ = true;
let errorStackTraceEnabled_ = false;
function initialize(vorpal) {
vorpal_ = vorpal;
}
2017-07-12 22:39:47 +02:00
function printArray(commandInstance, rows, headers = null) {
if (!rows.length) return '';
const ALIGN_LEFT = 0;
const ALIGN_RIGHT = 1;
let colWidths = [];
let colAligns = [];
for (let i = 0; i < rows.length; i++) {
let row = rows[i];
for (let j = 0; j < row.length; j++) {
let item = row[j];
let width = item ? item.toString().length : 0;
let align = typeof item == 'number' ? ALIGN_RIGHT : ALIGN_LEFT;
if (!colWidths[j] || colWidths[j] < width) colWidths[j] = width;
if (colAligns.length <= j) colAligns[j] = align;
}
}
let lines = [];
for (let row = 0; row < rows.length; row++) {
let line = [];
for (let col = 0; col < colWidths.length; col++) {
let item = rows[row][col];
let width = colWidths[col];
let dir = colAligns[col] == ALIGN_LEFT ? stringPadding.RIGHT : stringPadding.LEFT;
line.push(stringPadding(item, width, ' ', dir));
}
commandInstance.log(line.join(' '));
}
}
function redrawEnabled() {
2017-07-11 20:17:23 +02:00
// // Always disabled for now - doesn't play well with command.cancel()
// // function (it makes the whole app quit instead of just the
// // current command).
return false;
return redrawEnabled_;
}
2017-07-04 21:12:30 +02:00
function setRedrawEnabled(v) {
redrawEnabled_ = v;
}
function setStackTraceEnabled(v) {
errorStackTraceEnabled_ = v;
}
function redraw(s) {
if (!redrawEnabled()) {
2017-07-04 21:12:30 +02:00
const now = time.unixMs();
2017-07-11 20:17:23 +02:00
if (now - redrawLastUpdateTime_ > 4000) {
2017-07-04 21:12:30 +02:00
if (vorpal_.activeCommand) {
vorpal_.activeCommand.log(s);
} else {
vorpal_.log(s);
}
redrawLastUpdateTime_ = now;
redrawLastLog_ = null;
} else {
redrawLastLog_ = s;
}
} else {
vorpal_.ui.redraw(s);
}
redrawStarted_ = true;
}
function redrawDone() {
if (!redrawStarted_) return;
if (!redrawEnabled()) {
2017-07-04 21:12:30 +02:00
if (redrawLastLog_) {
if (vorpal_.activeCommand) {
vorpal_.activeCommand.log(redrawLastLog_);
} else {
vorpal_.log(redrawLastLog_);
}
}
} else {
vorpal_.ui.redraw.done();
}
2017-07-10 22:03:46 +02:00
redrawLastLog_ = null;
2017-07-04 21:12:30 +02:00
redrawStarted_ = false;
}
function log(commandInstance, o) {
if (errorStackTraceEnabled_) {
commandInstance.log(o);
} else {
if (o instanceof Error) {
commandInstance.log(o.message);
} else {
commandInstance.log(o);
}
}
}
2017-07-10 22:03:46 +02:00
function cmdPromptConfirm(commandInstance, message) {
return new Promise((resolve, reject) => {
let options = {
type: 'confirm',
name: 'ok',
default: false, // This needs to be false so that, when pressing Ctrl+C, the prompt returns false
message: message,
};
commandInstance.prompt(options, (result) => {
if (result.ok) {
resolve(true);
} else {
resolve(false);
}
});
});
}
2017-07-04 21:12:30 +02:00
vorpalUtils.initialize = initialize;
2017-07-12 22:39:47 +02:00
vorpalUtils.printArray = printArray;
2017-07-04 21:12:30 +02:00
vorpalUtils.redraw = redraw;
vorpalUtils.redrawDone = redrawDone;
vorpalUtils.setRedrawEnabled = setRedrawEnabled;
vorpalUtils.setStackTraceEnabled = setStackTraceEnabled;
vorpalUtils.log = log;
2017-07-10 22:03:46 +02:00
vorpalUtils.cmdPromptConfirm = cmdPromptConfirm;
2017-07-04 21:12:30 +02:00
export { vorpalUtils };