40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
|
import countImages from './count-images';
|
||
|
import countWords from './count-words';
|
||
|
|
||
|
export function estimatedReadingTimeInMinutes({wordCount, imageCount}) {
|
||
|
const wordsPerMinute = 275;
|
||
|
const wordsPerSecond = wordsPerMinute / 60;
|
||
|
let readingTimeSeconds = wordCount / wordsPerSecond;
|
||
|
|
||
|
// add 12 seconds for the first image, 11 for the second, etc. limiting at 3
|
||
|
for (var i = 12; i > 12 - imageCount; i -= 1) {
|
||
|
readingTimeSeconds += Math.max(i, 3);
|
||
|
}
|
||
|
|
||
|
let readingTimeMinutes = Math.round(readingTimeSeconds / 60);
|
||
|
|
||
|
return readingTimeMinutes;
|
||
|
}
|
||
|
/**
|
||
|
* Reading minutes method
|
||
|
*
|
||
|
* @param {string} html - HTML that we want to calculate reading time for
|
||
|
* @param {string} additionalImages - additional images that need to be taken into account outside HTML
|
||
|
* @returns {number} estimated reading in minutes
|
||
|
*/
|
||
|
|
||
|
export default function readingMinutes(html, additionalImages) {
|
||
|
if (!html) {
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
let imageCount = countImages(html);
|
||
|
let wordCount = countWords(html);
|
||
|
|
||
|
if (additionalImages) {
|
||
|
imageCount += additionalImages;
|
||
|
}
|
||
|
|
||
|
return estimatedReadingTimeInMinutes({wordCount, imageCount});
|
||
|
}
|