Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

ah-toc

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ah-toc

The Table of Contents Generator is a JavaScript library that generates a table of contents based on the headings (e.g., ``, ``, ``) within an HTML document. It provides options for customizing the generated table of contents.

  • 0.1.8
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
40
increased by166.67%
Maintainers
1
Weekly downloads
 
Created
Source

Table of Contents Generator (+ react hook)

The Table of Contents Generator is a JavaScript library that generates a table of contents based on the headings (e.g., <h1>, <h2>, <h3>) within an HTML document. It provides options for customizing the generated table of contents.

  • No external dependencies
  • Size: 4.04 kB (minified and gzipped)

Installation

You can install the Table of Contents Generator library using npm:

npm install ah-toc

Usage

To use the Table of Contents Generator in your project, follow these steps:

1- Pure Javascript

  1. Import the library:
import TableOfContents from 'ah-toc';
  1. Create an instance of the TableOfContents class:
const options = {
  attributes: ['h1', 'h2', 'h3'],
  appendTo: 'body',
  containerClassName: 'toc',
  ordered: false,
  contentSelector: '#content'
};

const tableOfContents = new TableOfContents(options);
  1. Call the init method to generate the table of contents:
tableOfContents.init();

2- React Hook

Example
import { useRef } from 'react';
import useTableOfContents from 'table-of-contents-library/hook';

const MyComponent = () => {
  const contentRef = useRef();
  const tocData = useTableOfContents({ contentRef });

  return (
    <div>
      {/* Your content goes here */}
      <div ref={contentRef}>...</div>

      {/* Render the table of contents */}
      {tocData && (
        <ul>
          {tocData.children.map((node) => (
            <li key={node.id}>
              <a href={`#${node.id}`}>{node.content}</a>
            </li>
          ))}
        </ul>
      )}
    </div>
  );
};
useTableOfContents Hook
Parameters
  • contentRef: A MutableRefObject containing a reference to the content element in the HTML document that contains the headers.
Returns
  • node: A NodeType object representing the table of contents hierarchy. It will be undefined initially and will be updated once the table of contents is generated.

Options

The TableOfContents class accepts an optional options object during initialization. The available options are:

OptionTypeDefault ValueOptionalDescription
attributesstring[]['h1', 'h2', 'h3']YesAn array of HTML heading tag names to include in the table of contents.
appendTostring'body'YesThe selector of the element to which the table of contents should be appended.
containerClassNamestring'toc'YesThe CSS class name to be applied to the container element of the table of contents.
orderedbooleanfalseYesA boolean value indicating whether the generated table of contents should be ordered or unordered.
contentSelectorstring'#content'YesThe selector of the element containing the content to generate the table of contents from.

Example

Suppose we have the following HTML content:

<div id="content">
  <h1>Introduction</h1>
  <h2>Section 1</h2>
  <h3>Subsection 1.1</h3>
  <h3>Subsection 1.2</h3>
  <h2>Section 2</h2>
  <h3>Subsection 2.1</h3>
  <h3>Subsection 2.2</h3>
</div>

After calling the init method with the default options, the generated table of contents will be appended to the <body> element and will have the following structure:

<div class="toc">
  <ul>
    <li>
      <a href="#introduction">Introduction</a>
      <ul>
        <li>
          <a href="#section-1">Section 1</a>
          <ul>
            <li><a href="#subsection-1-1">Subsection 1.1</a

></li>
            <li><a href="#subsection-1-2">Subsection 1.2</a></li>
          </ul>
        </li>
        <li>
          <a href="#section-2">Section 2</a>
          <ul>
            <li><a href="#subsection-2-1">Subsection 2.1</a></li>
            <li><a href="#subsection-2-2">Subsection 2.2</a></li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
</div>

Please note that no CSS styles are added by default to keep the library simple and customizable. You can apply your own CSS styles by targeting the generated classes and elements.

License

This project is licensed under the MIT License.

FAQs

Package last updated on 11 Jun 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc