1.0.0 • Published 5 years ago

hexo-html-truncate v1.0.0

Weekly downloads
16
License
MIT
Repository
github
Last release
5 years ago

hexo-html-truncate

-- A Hexo plugin to truncate html by only counting word filtering out html tags

Install

npm install hexo-html-truncate --save

Options

/**
 * truncate html
 * @method truncate(html, [length], [options])
 * @param  {String|CheerioStatic}         html    html string to truncate, or  existing cheerio instance(aka cheerio $)
 * @param  {Object|number}  length how many letters(words if `byWords` is true) you want reserve
 * @param  {Object|null}    options
 * @param  {Boolean}        [options.stripTags] remove all tags, default false
 * @param  {String}         [options.ellipsis] ellipsis sign, default '...'
 * @param  {Boolean}        [options.decodeEntities] decode html entities(e.g. convert `&` to `&`) before
 *                                                   counting length, default false
 * @param  {String|Array}   [options.excludes] elements' selector you want ignore
 * @param  {Number}         [options.length] how many letters(words if `byWords` is true)
 *                                           you want reserve
 * @param  {Boolean}        [options.byWords] if true, length means how many words to reserve
 * @param  {Boolean|Number} [options.reserveLastWord] how to deal with when truncate in the middle of a word
 *                                1. by default, just cut at that position.
 *                                2. set it to true, with max exceed 10 letters can exceed to reserver the last word
 *                                3. set it to a positive number decide how many letters can exceed to reserve the last word
 *                                4. set it to negetive number to remove the last word if cut in the middle.
 * @param  {Boolean}        [options.trimTheOnlyWord] whether to trim the only word when `reserveLastWord` < 0
 *                                if reserveLastWord set to negetive number, and there is only one word in the html string,
 *                                 when trimTheOnlyWord set to true, the extra letters will be cutted if word's length longer
 *                                 than `length`.
 *                                see issue #23 for more details
 * @param  {Boolean}        [options.keepWhitespaces] keep whitespaces, by default continuous
 *                                spaces will be replaced with one space
 *                                set it true to reserve them, and continuous spaces will count as one
 * @return {String}
 */

Default Options

{
  byWords: false,
  stripTags: false,
  ellipsis: '...',
  decodeEntities: false,
  keepWhitespaces: false,
  excludes: '',
  reserveLastWord: false,
  keepWhitespaces: false
}

Usage

// content: post html content
// length: truncate word length
// options: check out the API part of this 
//          document for avaliable options
htmlTruncate(content, length, options);

Swig

   <div class="content">
        {{ htmlTruncate(post.content, 100, {
            ellipsis: '...',
            excludes: ['img'],
            keepWhitespaces: true,
            reserveLastWord: true
        }) }}
    </div>

Ejs

   <div class="content">
        <%- htmlTruncate(post.content, 100, {
            ellipsis: '...',
            excludes: ['img'],
            keepWhitespaces: true,
            reserveLastWord: true
        }) %>
    </div>

Jade

    span.post-count= htmlTruncate(post.content, 100, {
            ellipsis: '...',
            excludes: ['img'],
            keepWhitespaces: true,
            reserveLastWord: true
        })

License

MIT

Reference/Source

Base on the package mehwww/vue-sticky-directive, this package just compiled the package into a hexo plugin for easier use in hexo.