UNPKG

leetcode-fetcher-cli

Version:

A CLi Application for local fetching of leetcode problems

116 lines (115 loc) 4.8 kB
"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;