Files
VITEC-website/packages/fe_comment
orasche d496877a53 fe_comment: widget v2, overview link setting and inline mail images
- Rebuild the widget server-backed: it renders only when GET state
  allows (logged-in FE user of the configured group), so the script
  tag is safe on public pages; form with mini rich text (bold/italic/
  list), file attachment chips and Ctrl+V image paste - a paste lazily
  creates the draft feedback, uploads and inserts the image inline
- Note pad badge mirrors the server item count; the pad button links
  to the overview page via new extension setting overviewPid, exposed
  as overviewUrl in GET state (slug lookup)
- Embed /fileadmin images of notes into the feedback mail as CID
  parts: relative srcs are dead in mail clients and dev sits behind
  basic auth; attachment links stay absolute URLs
- public/widget-test.html: dev test page, doubles as the reference
  implementation of the React login flow (fetch felogin JSON form
  incl. __RequestToken, urlencoded POST to /_json + form.action)
- Docs section 5x (fe_comment v2 incl. CSRF login lesson,
  templateRootPaths.10 collision, cache:flush before extension:setup)
2026-10-02 16:57:52 +02:00
..

EXT:fe_comment — page feedback widget

A floating button at the right edge of every page lets reviewers (e.g. the customer) comment on the page they are looking at. Notes collect on a local note pad (localStorage, survives navigation and SPA route changes); the pad lists every note with its URL and editable text and submits them all in one mail.

Framework-agnostic: the whole UI is one vanilla-JS file served by the extension itself — it works on a React/SPA front end and on classic TYPO3-rendered pages alike.

Endpoints (middleware, active on every site with the extension installed)

URL Purpose
/api/fe-comment/widget.js the widget (injects its own CSS)
/api/fe-comment/widget.css widget styles
/api/fe-comment/submit POST {"entries":[{"url","comment"}]} → sends the mail

Configuration (Settings → Extension Configuration → fe_comment)

  • mailTo (required) / mailCc / mailBcc — comma-separated lists. Without a valid mailTo, submissions are rejected (HTTP 503), nothing is lost silently.
  • subject — subject line, host and entry count are appended.
  • jsonOutput — 1 (default): headless mode, TYPO3 injects nothing; the front end embeds the widget itself: <script src="/api/fe-comment/widget.js" defer></script> 0: classic TYPO3 site, the extension injects the script into every rendered frontend page automatically (AssetCollector, no TypoScript).

The sender address is TYPO3's system default ($GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress']).

Notes for SPA setups

  • The page URL is read at SAVE time (location.pathname + search), so client-side route changes are captured correctly.
  • If page URLs are rewritten to an SPA fallback (like the vitec .htaccess phase B block), /api/ paths must stay excluded from the fallback so the endpoints keep reaching TYPO3.

Labels

UI labels are German and live in the T object at the top of Resources/Public/JavaScript/fe-comment.js.