Skip to content

Latest commit

 

History

History
71 lines (51 loc) · 2.4 KB

File metadata and controls

71 lines (51 loc) · 2.4 KB

Agent Guide — ep_author_hover

Adds author names to span titles (shows on hover), works as authors change their name. Hover includes author color and fast switching between author spans. Hat tip to Martyn York for the initial work on this.

Tech stack

  • Etherpad plugin framework (hooks declared in ep.json)
  • EJS templates rendered server-side via eejsBlock_* hooks
  • html10n for i18n (locales/<lang>.json, data-l10n-id in templates)

Project structure

ep_author_hover/
├── AGENTS.md
├── CONTRIBUTING.md
├── ep.json
├── index.js
├── locales/
│   ├── ar.json
│   ├── be-tarask.json
│   ├── be.json
│   ├── blk.json
│   ├── bn.json
│   ├── ca.json
│   └── ...
├── package.json
├── static/
│   ├── js/
│   ├── tests/
├── templates/
│   ├── settings.ejs

Helpers used

None — ep_plugin_helpers is not a dependency. Adoption is part of the helpers-adoption sweep (Phase 4).

Helpers NOT used

To be audited in the helpers-adoption sweep (Phase 4).

Running tests locally

ep_author_hover runs inside Etherpad's test harness. From an etherpad checkout that has installed this plugin via pnpm run plugins i --path ../ep_author_hover:

# Backend (Mocha) — harness boots its own server
pnpm --filter ep_etherpad-lite run test

# Playwright — needs `pnpm run dev` in a second terminal
pnpm --filter ep_etherpad-lite run test-ui

Standing rules for agent edits

  • PRs target main. Linear commits, no merge commits.
  • Every bug fix includes a regression test in the same commit.
  • All user-facing strings in locales/. No hardcoded English in templates.
  • No hardcoded aria-label on icon-only controls — etherpad's html10n auto-populates aria-label from the localized string when (a) the element has a data-l10n-id and (b) no author-supplied aria-label is present. Adding a hardcoded English aria-label blocks that and leaves it untranslated. (See etherpad-lite/src/static/js/vendors/html10n.ts:665-678.)
  • No nested interactive elements (no <button> inside <a>).
  • LLM/Agent contributions are explicitly welcomed by maintainers.

Quick reference: hooks declared in ep.json

  • Server: eejsBlock_mySettings
  • Client: postAceInit

When adding a hook, register it in both ep.json and the matching exports.<hook> = ... in the JS file.