also looking at this
fix(toc): keep active outline entry visible
#83
3 files
+68
-6
| @@ -0,0 +1,22 @@ | ||
| 1 | import { describe, expect, test } from 'bun:test' | |
| 2 | import { readFileSync } from 'node:fs' | |
| 3 | import { join } from 'node:path' | |
| 4 | ||
| 5 | const root = join(import.meta.dir, '..') | |
| 6 | const pageToc = readFileSync(join(root, 'packages/bunpress/src/templates/page-toc.stx'), 'utf8') | |
| 7 | const pageOutline = readFileSync(join(root, 'packages/bunpress/src/templates/page-outline.stx'), 'utf8') | |
| 8 | ||
| 9 | describe('page outline scrollspy', () => { | |
| 10 | test('tracks both responsive outline variants', () => { | |
| 11 | expect(pageToc).toContain("document.querySelectorAll('.page-toc a, .bp-local-outline-items a')") | |
| 12 | expect(pageOutline).toContain('.bp-local-outline-items a.active') | |
| 13 | }) | |
| 14 | ||
| 15 | test('keeps the active link inside the visible outline viewport', () => { | |
| 16 | expect(pageToc).toContain('function keepActiveLinkVisible(activeLink)') | |
| 17 | expect(pageToc).toContain("activeLink.closest('.BPDocAside') || activeLink.closest('.bp-local-outline-items')") | |
| 18 | expect(pageToc).toContain('outlineViewport.scrollTop += linkRect.top - viewportRect.top - inset') | |
| 19 | expect(pageToc).toContain('outlineViewport.scrollTop += linkRect.bottom - viewportRect.bottom + inset') | |
| 20 | expect(pageToc).toContain('keepActiveLinkVisible(link)') | |
| 21 | }) | |
| 22 | }) | |