posthtml-toc

1.0.3 • Public • Published

PostHTML TOC

NPM [![Standard Code Style][style]][style-url]

A table of contents, usually headed simply Contents and abbreviated informally as TOC, is a list, usually found on a page before the start of a written work, of its chapter or section titles or brief descriptions with their commencing page numbers. Wikipedia

The plugin works particularly well with markdown documents.

By defaults

Before:

<html>
  <body>
    <h1 id="title1">Title 1</h1>
    <p>p1</p>
    <h2 id="title2">Title 2</h2>
    <p>p2</p>
    <h3 id="title3">Title 3</h3>
    <p>p3</p>
  </body>
</html>

After:

<html>
  <body>
    <h1 id="title1">Title 1</h1>
    <div id="toc">
      <div id="toctitle">Contents</div>
      <ul>
        <li>
          <a href="#title2">Title 2</a>
          <ul>
            <li><a href="#title3">Title 3</a></li>
          </ul>
        </li>
      </ul>
    </div>
    <p>p1</p>
    <h2 id="title2">Title 2</h2>
    <p>p2</p>
    <h3 id="title3">Title 3</h3>
    <p>p3</p>
  </body>
</html>

Install

Installation in your project

npm i posthtml posthtml-toc

Usage

const fs = require('fs');
const posthtml = require('posthtml');
const toc = require('posthtml-toc');
 
posthtml()
    .use(toc({ /* options */ }))
    .process(html/*, options */)
    .then(result => fs.writeFileSync('./after.html', result.html));

Options

Defaults options

  • title = "Content" — Title TOC block
  • after = "h1" — tag after which the TOC will be inserted

after options

Set tag, class, or id after which the TOC will be inserted

  after: 'tag'
  after: '.class'
  after: '#id'

toggle options

Before:

<html>
  <body>
    <h1 id="title1">Title 1</h1>
    <p>p1</p>
    <h2 id="title2">Title 2</h2>
    <p>p2</p>
    <h3 id="title3">Title 3</h3>
    <p>p3</p>
  </body>
</html>

Add option:

const fs = require('fs');
const posthtml = require('posthtml');
const toc = require('posthtml-toc');
 
posthtml()
    .use(toc({
      toggle: ['show', 'hide', true]
    }))
    .process(html/*, options */)
    .then(result => fs.writeFileSync('./after.html', result.html));

After:

<html>
  <body>
    <h1 id="title1">Title 1</h1>
    <style>
      #toctoggle,#toctoggle:checked~ul{display:none}
      #toctoggle~label:after{content:"hide"}
      #toctoggle:checked~label:after{content:"show"}
      #toc label{cursor:pointer}
    </style> 
    <div id="toc">
      <input type="checkbox" role="button" id="toctoggle" checked>
      <h2>Content</h2>
      <label for="toctoggle"></label>
      <ul>
        <li>
          <a href="#title2">Title 2</a>
          <ul>
            <li><a href="#title3">Title 3</a></li>
          </ul>  
        </li>
      </ul>
    </div>
    <p>p1</p>
    <h2 id="title2">Title 2</h2>
    <p>p2</p>
    <h3 id="title3">Title 3</h3>
    <p>p3</p>
  </body>
</html>

Contributing

See PostHTML Guidelines and contribution guide.

License MIT

Package Sidebar

Install

npm i posthtml-toc

Weekly Downloads

0

Version

1.0.3

License

MIT

Unpacked Size

9.63 kB

Total Files

4

Last publish

Collaborators

  • voischev