UNPKG

hacker-news-reader

Version:

Hacker News Reader CLI

115 lines (94 loc) 3.16 kB
#! /usr/bin/env node 'use strict'; var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora); var _url = require('url'); var _url2 = _interopRequireDefault(_url); var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk); var _vorpal = require('vorpal'); var _vorpal2 = _interopRequireDefault(_vorpal); var _open = require('open'); var _open2 = _interopRequireDefault(_open); var _api = require('./helper/api'); var _array = require('./helper/array'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var vorpal = (0, _vorpal2.default)(); var api = new _api.Api(); /** * Get Elapsed Time from posted News to now * @param {number} timestamp - Posted TimeStamp News * @return {string} Elapsed Time */ var getElapsedTime = function getElapsedTime(newsTimeStamp) { var NewsTime = new Date(newsTimeStamp * 1000).getTime(); var currentDate = new Date().getTime(); var diff = new Date(currentDate - NewsTime); /* eslint-disable max-len */ return diff.getHours() > 0 ? diff.getHours() + ' hour(s) ago' : diff.getMinutes() + ' minute(s) ago'; /* eslint-enable max-len */ }; /** * Display News in terminal * @param {object} Vorpal Object */ var displayNews = function displayNews(topNewsList, vp) { topNewsList.sort(_array.sortByOrder).forEach(function (item) { var ItemVM = { title: _chalk2.default.cyan(item.title), hostname: item.url ? _url2.default.parse(item.url).hostname : '', score: _chalk2.default.green(item.score + ' points'), by: _chalk2.default.gray('By ' + item.by), time: _chalk2.default.white(getElapsedTime(item.time)), descendants: _chalk2.default.white(item.descendants + ' comments') }; vp.log(item.order + '. ' + ItemVM.title + ' (' + ItemVM.hostname + ')'); vp.log(' ' + ItemVM.score + ' ' + ItemVM.by + ' ' + ItemVM.time + ' | ' + ItemVM.descendants); }); }; /** * Display News in terminal * @param {number} News order * @param {object} Vorpal Object */ var openNews = function openNews(order, vp) { if (typeof order === 'number') { var selectedNews = api.getTopNewsList.find(function (news) { return news.order === order; }); if (selectedNews) { (0, _open2.default)(selectedNews.url); } else { vp.log(_chalk2.default.red('This news doesn\'t exist')); } } else { vp.log(_chalk2.default.red('Please enter a correct news number')); } }; /** * Add 'news' command to Vorpal */ vorpal.command('news', 'Get top news').action(function act(args, callback) { var _this = this; var spinner = (0, _ora2.default)('Loading news'); spinner.start(); api.getTopNews().then(function (topNewsList) { spinner.stop(); displayNews(topNewsList, _this); callback(); }).catch(function () { return callback(); }); }); /** * Add 'read' command to Vorpal * Usage : read <newsNumber> */ vorpal.command('read <news>', 'Exemple : read 4').action(function act(args, callback) { openNews(args.news, this); callback(); }); /** * Sets the prompt delimiter to say "hnr$" and show it */ vorpal.delimiter('hnr$').show();