UNPKG

estimated-reading-time

Version:

Calculate the estimated reading time of a given text (plain text or HTML)

36 lines (35 loc) 1.68 kB
"use strict"; 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; }