UNPKG

estimated-reading-time

Version:

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

32 lines (31 loc) 1.44 kB
import { wordCountHtml } from './word-count.js'; import { TextFormat } from './text-format.js'; import { wordCountPlainText } from './word-count.js'; const WORDS_MINUTE = 250; const WORDS_MINUTE_TECHNICAL = 150; export function estimatedReadingTime(text, textFormat, options) { switch (textFormat) { case TextFormat.HTML: return estimatedReadingTimeHtml(text, options); case TextFormat.PLAIN_TEXT: default: return estimatedReadingTimePlainText(text, options); } } function estimatedReadingTimePlainText(text, options) { const numWords = wordCountPlainText(text); return calcEstimatedReadingTimeFromWords(numWords, options); } function estimatedReadingTimeHtml(html, options) { const numWords = 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; }