estimated-reading-time
Version:
Calculate the estimated reading time of a given text (plain text or HTML)
36 lines (35 loc) • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.estimatedReadingTime = void 0;
const word_count_js_1 = require("./word-count.js");
const text_format_js_1 = require("./text-format.js");
const word_count_js_2 = require("./word-count.js");
const WORDS_MINUTE = 250;
const WORDS_MINUTE_TECHNICAL = 150;
function estimatedReadingTime(text, textFormat, options) {
switch (textFormat) {
case text_format_js_1.TextFormat.HTML:
return estimatedReadingTimeHtml(text, options);
case text_format_js_1.TextFormat.PLAIN_TEXT:
default:
return estimatedReadingTimePlainText(text, options);
}
}
exports.estimatedReadingTime = estimatedReadingTime;
function estimatedReadingTimePlainText(text, options) {
const numWords = word_count_js_2.wordCountPlainText(text);
return calcEstimatedReadingTimeFromWords(numWords, options);
}
function estimatedReadingTimeHtml(html, options) {
const numWords = word_count_js_1.wordCountHtml(html);
return calcEstimatedReadingTimeFromWords(numWords, options);
}
function calcEstimatedReadingTimeFromWords(numWords, options) {
const wordsPerMinute = options && options.isTechnical ? WORDS_MINUTE_TECHNICAL : WORDS_MINUTE;
const readingTime = numWords / (options && options.wordsPerMinute ? options.wordsPerMinute : wordsPerMinute);
const minutes = readingTime | 0; // truncate decimal part of the number
const seconds = Math.ceil(Number.parseFloat(((readingTime - minutes) * 60).toFixed(2)));
let roundedMinutes = seconds >= 30 ? minutes + 1 : minutes;
const res = { numWords, minutes, seconds, roundedMinutes };
return res;
}