hacker-news-reader
Version:
Hacker News Reader CLI
115 lines (94 loc) • 3.16 kB
JavaScript
;
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();