All 14 Table of Contents sections

See every section

Speed, privacy and printing

Updated Table of Contents 1.8.1Tested with WordPress 7.1

One small stylesheet and one small script, both from your own server, sent minified, and only on pages that show a contents list. On a block theme that is known exactly; on a classic theme it is worked out from the post before the page is drawn, and a list that turns up anyway still gets both. The cart, the account page, a product without enough headings and every archive load neither. Nothing is fetched from anyone else, no font is loaded, and nothing at all is recorded about the reader — so there is nothing to add to your privacy notice.

The numbers, the section count, the reading time and the fold arrows are drawn quieter than the entries, and still meet WCAG AA contrast in all twenty designs. So does every line a design is built out of: a panel edge, Ladder's dots, Steps' rings, a chip's outline and the reading bar are all held to 3:1 against what they are drawn on, measured rather than eyeballed.

The entry you are reading is drawn in your accent mixed with the list's own type colour, so it darkens on a light page and lightens on a dark one instead of disappearing into either. The two places type is reversed out of the accent — Banner's band and the circle round the step you are reading — move the colour rather than the type where a mid-tone accent will not carry either white or dark: a shade darker or lighter, and still plainly your colour.

Every design mirrors on a right-to-left site — Arabic, Hebrew, Farsi. The indent, Rail's bar, Notebook's margin, Ladder's dots and Dotted's leaders all follow the direction the page reads in.

The list is a real <nav> holding real links to real anchors before any script runs. Everything interactive is added on top of that, so with JavaScript off, or before it loads, the reader still has a working contents list.

On paper the interactive chrome disappears and anything folded is opened, so a printed article carries a contents list that is complete rather than an empty box with a Show button in it.

Motion stops for a reader whose system asks for less: the scrolling, the folding animation and the ladder's marker all settle, while the states they express stay exactly as they were.

Page caches#

The list is drawn into the post's own page on your server, so a page cache keeps it with the page. Saving a change your visitors would see on any of the plugin's screens, or importing a settings file, asks your page cache to empty once the save is done, so the next visitor gets the list as you set it. Switching the plugin off asks it at once, so cached posts do not keep a list the plugin no longer draws. The first request after an update, or after you switch the plugin back on, that is not answered from the cache (a signed-in visit to your dashboard is one) asks too. The caches it asks are NimbleCache, WP Rocket, WP Super Cache, W3 Total Cache, LiteSpeed Cache, WP Fastest Cache, SiteGround Speed Optimizer, Breeze, WP-Optimize, WP Engine's cache and Cloudflare's own plugin. A cache it cannot ask, such as your host's own or a CDN in front of the site, keeps the pages it has until they expire: empty it yourself after changing a setting. Another plugin, or your host, can listen for trtc_purge_caches to empty its own at the same moment. LiteSpeed Cache is asked for its pages only: its CSS and JS files, the object cache and Cloudflare stay as they are. A change in one post's own Table of Contents box is saved with the post, and most page caches clear a post when it is saved.

Still stuck? Ask the developers who wrote it. We aim to reply within one business day.