leetcode-fetcher-cli
Version:
A CLi Application for local fetching of leetcode problems
116 lines (115 loc) • 4.8 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const chalk_1 = __importDefault(require("chalk"));
const formatter = __importStar(require("../utils/formatter"));
const ascii = {
hb: "─", vb: "│",
dt: "┬", ut: "┴", lt: "┤", rt: "├",
adr: "┌", adl: "┐", aur: "└", aul: "┘",
cr: "┼", dhl: "═", dvl: "║", ddr: "╔",
dur: "╚", dul: "╝", ddl: "╗", dut: "╩",
ddt: "╦"
};
class RectangleBox {
hsize = 0;
wsize;
content = [];
contentpad;
title = '';
titlepos = 0;
just;
style;
constructor(wsize, just, style) {
this.wsize = wsize;
this.just = just ?? 0;
this.contentpad = { lpad: 1, rpad: 1, upad: 1, dpad: 1 };
this.style = style ?? ((x) => x);
}
setTitle(title, position) {
this.title = title;
this.titlepos = position || 1;
}
setPadding(padding) {
this.contentpad.dpad = padding?.dpad ?? 1;
this.contentpad.lpad = padding?.lpad ?? 1;
this.contentpad.rpad = padding?.rpad ?? 1;
this.contentpad.upad = padding?.upad ?? 1;
}
setContent(content, padding) {
this.setPadding(padding); // Set the padding content
const s_padding = this.contentpad.rpad + this.contentpad.lpad;
const nrows = Math.ceil(content.length / (this.wsize - s_padding));
this.hsize = this.contentpad.upad + this.contentpad.dpad + nrows;
this.content = [content];
if (nrows > 1) {
const n_content = [];
const curr_size = (this.wsize - s_padding);
const lpadding = ' '.repeat(this.contentpad.lpad);
const rpadding = ' '.repeat(this.contentpad.rpad);
for (let idx = 0; idx < nrows; idx++) {
const start = idx * curr_size;
const stop = (idx + 1) * curr_size;
const just_row = formatter.JustifyString(content.slice(start, stop), curr_size, this.just);
n_content.push(this.style(lpadding + just_row + rpadding));
}
this.content = n_content;
}
}
toString() {
const formatBasicLine = (start, end, sep1) => {
const middle_content = Array(this.wsize).fill(sep1).join("");
return `${start}${middle_content}${end}`;
};
// Creates the upper and lower lines
let r_upper = formatBasicLine(ascii.adr, ascii.adl, ascii.hb);
const r_lower = formatBasicLine(ascii.aur, ascii.aul, ascii.hb);
// At the upper one we also need to add the box title
const r_upper_s = r_upper.substring(0, this.titlepos);
const r_upper_e = r_upper.substring(this.titlepos + this.title.length);
r_upper = r_upper_s + chalk_1.default.bold(chalk_1.default.gray(this.title)) + r_upper_e;
// Upper and down padding
const padding_str = formatBasicLine(ascii.vb, ascii.vb, " ");
const upper_pad = Array(this.contentpad.upad).fill(padding_str);
const lower_pad = Array(this.contentpad.dpad).fill(padding_str);
const content = this.content.map((x) => `${ascii.vb}${x}${ascii.vb}`);
return `${r_upper}\n${upper_pad}\n${content.join('\n')}\n${lower_pad}\n${r_lower}`;
}
}
;
exports.default = RectangleBox;