Skip to content

Table of Contents Tool

Overview

The Table of Contents tool automatically generates an interactive, draggable navigation panel based on page headings. It intelligently scans for heading elements (H1-H6) within the main content area, excludes navigational headers, and creates a clickable list that allows users to quickly jump to different sections of the page.

Features

  • Smart Heading Detection: Automatically finds headings in main content, excluding navigation areas
  • Hierarchical Display: Shows all heading levels with clear visual structure
  • Smooth Scrolling: Animated navigation to selected sections with header offset compensation
  • Draggable Interface: Moveable panel that can be positioned on left or right side
  • Responsive Design: Adapts to mobile devices with touch-friendly interactions
  • Auto-positioning: Remembers user's preferred side placement
  • Empty State Handling: Graceful messaging when no headings are found
  • Dynamic Content Support: Works with single-page applications and dynamic content

Settings

LevelDescription
DisabledTable of contents panel is hidden
EnabledInteractive TOC panel is displayed and functional

Usage

  1. Click the Table of Contents button in the accessibility toolbar
  2. A draggable panel appears showing all page headings from main content
  3. Click any heading in the TOC to smoothly scroll to that section
  4. On desktop: Drag the panel header to reposition it to left or right side
  5. On mobile: Panel is fixed and optimized for touch interaction
  6. Click the close button (×) or toggle the tool button to hide the panel

Accessibility Benefits

  • Page Navigation: Quick access to all content sections
  • Document Structure: Visual overview of content organization
  • Skip Navigation: Bypass repetitive content to reach desired sections
  • Keyboard Accessible: Full keyboard navigation support with proper focus management
  • Screen Reader Friendly: Properly labeled navigation region with ARIA attributes
  • Cognitive Support: Helps users understand and navigate complex document structures
  • Header Awareness: Automatically compensates for fixed headers when scrolling

Panel Features

Interactive Elements

  • Heading Links: Click to scroll to section with smooth animation
  • Flat Structure: Simple list format for easy scanning
  • Drag Handle: Desktop users can drag header to reposition panel
  • Close Button: Quick access to hide panel
  • Auto-positioning: Snaps to left or right side based on drag position

Smart Detection

  • Content Area Focus: Scans main content, excludes nav/header/footer/aside elements
  • Heading Recognition: Automatically finds H1-H6 elements up to configured level
  • Text Extraction: Cleans heading text, removes decorative elements
  • ID Generation: Creates unique anchors for headings without existing IDs
  • Visibility Check: Only includes visible headings in the navigation

Technical Features

  • Header Offset Calculation: Detects fixed/sticky headers and adjusts scroll position
  • Common Container Detection: Finds the main content area to scope heading search
  • Responsive Behavior: Disables dragging on mobile, optimizes for touch
  • Locale Support: Updates content when language changes

Technical Implementation

The tool uses JavaScript to intelligently scan the DOM for heading elements within the main content area, generates a flat navigation structure, implements smooth scrolling with automatic header offset compensation, and provides drag-and-drop positioning on desktop devices.

API Usage Example

The Table of Contents tool can be programmatically controlled using the widget API. Here's how to enable and customize the tool:

javascript
// Basic activation
window.BrowseAidWidget.api.enableTool('table-of-contents');

// Enable with custom settings
window.BrowseAidWidget.api.enableTool('table-of-contents', {
  maxLevel: 4,              // Maximum heading level to include (1-6, default: 6)
  position: 'right'         // Panel position: 'left' or 'right' (default: 'left')
});

// Update tool settings
window.BrowseAidWidget.api.updateTool('table-of-contents', {
  enabled: true,
  maxLevel: 3,
  position: 'left'
});

// Toggle the tool on/off
const isEnabled = window.BrowseAidWidget.api.toggleTool('table-of-contents');
console.log('Table of Contents is now:', isEnabled ? 'enabled' : 'disabled');

// Get current settings
const settings = window.BrowseAidWidget.api.getToolState('table-of-contents');
console.log('Current TOC settings:', settings);

// Disable the tool
window.BrowseAidWidget.api.disableTool('table-of-contents');

// Listen for tool changes
const unsubscribe = window.BrowseAidWidget.api.onToolChange((toolName, settings) => {
  if (toolName === 'table-of-contents') {
    console.log('Table of Contents settings changed:', settings);
  }
});

Configuration Options

OptionTypeValuesDefaultDescription
enabledbooleantrue/falsefalseEnables or disables the tool
maxLevelnumber1-66Maximum heading level to include in TOC
positionstring'left', 'right''left'Panel position on screen

Heading Level Examples

  • maxLevel: 2 - Only show H1 and H2 headings
  • maxLevel: 4 - Show H1, H2, H3, and H4 headings
  • maxLevel: 6 - Show all heading levels (default)

Usage Patterns

javascript
// Article navigation - focus on main sections
window.BrowseAidWidget.api.enableTool('table-of-contents', {
  maxLevel: 3,
  position: 'right'
});

// Documentation mode - show detailed structure
window.BrowseAidWidget.api.enableTool('table-of-contents', {
  maxLevel: 4,
  position: 'left'
});

// Overview mode - major sections only
window.BrowseAidWidget.api.enableTool('table-of-contents', {
  maxLevel: 2,
  position: 'right'
});

// Check if headings are available before enabling
function enableTOCIfHeadingsExist() {
  const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6');
  const mainContentHeadings = Array.from(headings).filter(h =>
    !h.closest('nav, header, footer, aside')
  );

  if (mainContentHeadings.length > 0) {
    window.BrowseAidWidget.api.enableTool('table-of-contents', {
      maxLevel: 4,
      position: 'right'
    });
    return true;
  }
  return false;
}

Integration Notes

  • Tool automatically excludes headings from navigation areas (nav, header, footer, aside)
  • Generates unique IDs for headings that don't have them
  • Compensates for fixed/sticky headers when scrolling
  • Responsive design adapts for mobile devices
  • Supports dynamic content updates and locale changes
  • Uses semantic HTML and ARIA attributes for accessibility

BrowseAid Documentation