npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

hexo-generator-readtime

v1.4.2

Published

HEXO package that provides analytics on the read time to review a post. Generates word, character, image, video, and codeblock counts in the front-matter of the markdown file. Plus provides read-time estimates for given language profile. Supports 48 langu

Downloads

72

Readme

NPM version Required Node version

GitHub Stars GitHub Forks npm stats

hexo-generator-readtime

HEXO package that provides analytics on the read time to review the post. Supports 48 languages! Can add or override langProfile defaults.

Install

$ npm install hexo-generator-readtime

📝 When defaultTime is set to "auto," it will calculate the fuzzy time based on the least "count" time for fuzzyTime.time_unit. Example: 578sec becomes "about 10 minutes". If you define defaultTime as "seconds", "minutes", etc., the time returned is more precise whereas "auto" will provide a very rough estimation.

How to use

After you have installed this plugin, it will run anytime you run hexo server or hexo generate.

readTime will read the lang value in your front-matter to select the correct language profile. If this value is missing, it will attempt to read the _config.yml setting. If both of these are missing, then it will default to en (English).

It updates the front-matter of your posts to include the analytics data. The following parameters are added:

| parameter | description | | --- | --- | | readTime | String that represents the estimated time to read the article. Printed in the detected language's native text. | | imgCount | Count of images found in the file. | | vidCount | Count of videos detected in the file. | | wordCount | Count of words in the file. This works very well for non-Asian languages. Some languages don't employ the space character as a word boundary. For Asian languages such as Chinese, Korean, Japanese, and Vietnamese, another method is required to create word tokens. | | wsCount | Count of white-space characters detected in the file. This is only useful for non-Asian languages. | | charCount | Letters detected for the given language in the file. | | cbCount | Count of code blocks in the file. |

👉🏻 Note: it only reads the posts from the /source/_posts/ folder. You can reference these values in your EJS template files from the object post. For example: <%= post.readTime %>. This plugin updates both in-memory post object and the markdown file.

Parameter definitions

Below are the definitions for each parameter and expected values.

readtime: ## plugin config. Only define this if you need to override the built-in settings.
  defaultTime: auto ## Time unit used for calculating read time. Options: auto | seconds | minutes | days | months | years
  imgReadTime: 12 ## Time user may spend watching an image in *seconds*.
  vidReadTime: 60 ## Time user may spend watching a video in *seconds*.
  langProfile: ## profile of the language
    "{your lang}": ## ISO-639-1 string is expected here. However, you can specify your custom language code here.
      name: "My Lang" ## name of your custom language as written in English
      nativeName: "myLanguage" ## name of your custom language as written in the language's native text
      family: "Earth-Moon" ## origins of the language.
      region: ["Earth", "Moon"] ## regions where this language is used
      unicodeRange: ["\u0021-\u007E"] ## array of unicode values that represent the language's native text. See https://www.unicode.org/charts/
      charPerMin: 999 ## Number of characters user could read in one *minute*
      wordsPerMin: 333 ## Number of **words** user could read in one *minute*
      fuzzyTime: ## string object for representations of how time units are written 
        pattern: %(time_unit)s %(count)d%(approx)s ## sprintf() string pattern for how to write the text
        approx: apx ## text to represent approximate time as a word. If no such word exist, use `""` a closed string as the value
        time_unit: ## string object to define how each time unit is written in the language's native text
          second: sec
          seconds: secs
          minute: min
          minutes: mins
          hour: h
          hours: h
          day: d
          days: d
          month: m
          months: m
          year: y
          years: y
### some languages are recommended to encapsulate the values within double-quote (") marks.

Options

Note: this is completely optional as the plugin already has several languages predefined. You can configure plugin overrides in your root _config.yml. For example:

readtime:
  defaultTime: seconds
  imgReadTime: 12
  langProfile:
    ar:
      name: "Arabic"
      nativeName: "العربية"
      family: "Afro-Asiatic"
      region: ["Middle East", "North Africa"]
      unicodeRange: ["\u0021-\u007E", "\u0600-\u06FF", "\u0750-\u077F", "\u0870-\u089F" "\u08A0-\u08FF", "\uFB50-\uFDFF", "\uFE70-\uFEFF"]
      charPerMin: 612
      wordsPerMin: 138
      fuzzyTime:
        pattern: %(time_unit)s %(count)d %(approx)s
        approx: حوالي
        time_unit:
          second: ثانية
          seconds: ثواني
          minute: دقيقة
          minutes: دقائق
          hour: ساعة
          hours: ساعات
          day: يوم
          days: أيام
          month: شهر
          months: شهور
          year: سنة
          years: سنوات
    en:
      name: "English"
      unicodeRange: ["a-zA-Z0-9"]
      charPerMin: 987
      wordsPerMin: 228
      fuzzyTime:
        pattern: %(approx)s %(count)d %(time_unit)s
        approx: "About"
        time_unit:
          second: "second"
          seconds: "seconds"
          minute: "minute"
          minutes: "minutes"
          hour: "hour"
          hours: "hours"
          day: "day"
          days: "days"
          month: "month"
          months: "months"
          year: "year"
          years: "years"
    jp:
      charPerMin: 357
      wordsPerMin: 193
    zh:
      charPerMin: 255
      wordsPerMin: 158

Custom Language

You can add a custom language in your root _config.yml file.

readtime:
  langProfile:
    "my-lang":
      charPerMin: 1500
      wordsPerMin: 300
      fuzzyTime:
        pattern: %(approx)s %(count)d%(time_unit)s
        approx: "appx"
        time_unit:
          second: "sec"
          minute: "min"

List of supported languages

| Language | native text | ISO-639-1 code | | --- | --- | --- | | Arabic | العربية | ar | | Bengali | বাংলা | bn | | German | Deutsch | de | | English | English | en | | Greek | Ελληνικά | el | | Spanish | Español | es | | Persian (Farsi) | فارسی | fa | | Finnish | suomi | fi | | French | Français | fr | | Gujarati | ગુજરાતી | gu | | Hebrew | עִבְרִית | he | | Hindi | हिन्दी | hi | | Armenian | հայերեն | hy | | Italian | Italiano | it | | Jin | 晋语 | jin | | Japanese | 日本語 | ja | | Javanese | Basa Jawa | jv | | Georgian | ქართული | ka | | Korean | 한국어 | ko | | Latin | Latīna | la | | Dutch | Nederlands | nl | | Punjabi | ਪੰਜਾਬੀ | pa | | Polish | polski | pl | | Pashto | پښتو | ps | | Portuguese | Português | pt | | Southern Min (Hokkien, Teochew) | 閩南語 (福建話, 潮州話) | nan | | Norwegian Norsk | Bokmål | nb | | Norwegian Nynorsk | nynorsk | nn | | Marathi | मराठी | mr | | Russian | Русский | ru | | Sinhala | සිංහල | si | | Slovenian | slovenščina | sl | | Swedish | Svenska | sv | | Tamil | தமிழ் | ta | | Telugu | తెలుగు | te | | Thai | ไทย | th | | Turkish | Türkçe | tr | | Vietnamese | Tiếng Việt | vi | | Urdu | اردو | ur | | Yue Chinese | 粤语 | yue | | Wu (including Shanghainese) | 吴语 (含上海话) | wuu | | Chinese (Mandarin) | 中文 (普通话) | zh-CN | | Chinese (Simplified) | 中文 (简体) | zh-Hans | | Chinese (Traditional) | 中文 (繁體) | zh-Hant | | Chinese (Hong Kong) | 中文 (香港) | zh-HK | | Chinese (Cantonese, Macau) | 中文 (廣東話, 澳門) | zh-MO | | Chinese (Singapore) | 中文 (普通话) | zh-SG | | Chinese (Taiwan) | 中文 (繁體中文) | zh-TW | | Chinese | 中文 (简体) | zh |

Don't see your language here?

Please submit an issue to request your language to be added. It helps if you can suggest the profile details too. Otherwise, I need to research it and that can take time.

You can also make feature requests and submit language corrections.

Sponsor

This package is sponsored by LoreZyra, you can find him at his Website, also Github

LoreZyra

Become a sponsor?