estimated-reading-time
Version:
Calculate the estimated reading time of a given text (plain text or HTML)
32 lines (31 loc) • 1.44 kB
JavaScript
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;
}