mirror of
https://github.com/ether/etherpad-lite.git
synced 2026-07-17 16:47:05 +00:00
feat(settings): default settings.enablePluginPadOptions to true (#7841)
This flag gates the ep_* passthrough on padoptions that shipped in 3.0.0 (PR #7698). It was introduced as opt-in, but the intent in shipping it was to let plugins like ep_plugin_helpers' padToggle / padSelect ride the existing broadcast/persist rail out of the box — flipping the default closes the gap. Why now - ep_comments_page#422 (and sibling per-plugin reports discussed on Discord): stock 3.x deployments console.warn on every pad load because the helper detects clientVars.enablePluginPadOptions === false and tells the admin to flip it. With the flag default-true, the warning stops firing on fresh installs while still surfacing for operators who have explicitly opted out. - Plugins that already depend on ep_plugin_helpers >= 0.6 expect the pad-wide path to work; the default-false gate silently no-op'd pad.changePadOption('ep_*', …) and made the helper UI inert. Scope - Settings.ts default flipped to true; comment rewritten to describe the new "operator opt-out" model rather than the old AGENTS.MD §52 opt-in framing (that policy still applies to *new* features; this one has shipped and proven safe). - settings.json.template env-var substitution default flipped to true so docker / supervisor configs without an explicit value get the new behavior. - doc/plugins.md updated to match (default true, opt-out via settings.json) and the PluginCapabilities source comment. - Backend test describe-blocks relabeled — "true" is now "(default)", "false" is now "(operator opt-out)". Both branches still cover the same matrix so the size-cap / namespace-validation paths stay exercised. Compat - Existing deployments with an explicit `"enablePluginPadOptions": false` in settings.json keep that value — no migration needed. - Older clients only read clientVars.enablePluginPadOptions; the protocol shape is unchanged. Closes ep_comments_page#422 (helper warning suppression for stock deployments). Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
29ee19bd8a
commit
79e3d46127
5 changed files with 17 additions and 16 deletions
|
|
@ -267,15 +267,16 @@ below.
|
|||
### Runtime flag
|
||||
|
||||
The passthrough is gated by `settings.enablePluginPadOptions`, default
|
||||
`false`. Operators must opt in via `settings.json`:
|
||||
`true`. Operators who want to lock plugins out of pad-wide state can flip
|
||||
it in `settings.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"enablePluginPadOptions": true
|
||||
"enablePluginPadOptions": false
|
||||
}
|
||||
```
|
||||
|
||||
When enabled, the server reflects the value to every client via
|
||||
When enabled (the default), the server reflects the value to every client via
|
||||
`clientVars.enablePluginPadOptions` so plugins can detect both *capable*
|
||||
(static) and *active* (per-pad request) at the same point.
|
||||
|
||||
|
|
|
|||
|
|
@ -853,11 +853,11 @@
|
|||
* accepting pad-wide values under plugin-namespaced keys matching
|
||||
* /^ep_[a-z0-9_]+$/ (e.g. ep_table_of_contents). Values are validated
|
||||
* (JSON-safe, 64 KB per key, 256 KB total) and broadcast to every
|
||||
* connected client just like native pad-wide toggles. Disabled by
|
||||
* default; flip to true once your plugins (e.g. ep_plugin_helpers'
|
||||
* padToggle) require it. See doc/plugins.md.
|
||||
* connected client just like native pad-wide toggles. Enabled by
|
||||
* default; set to false to lock plugins out of pad-wide state. See
|
||||
* doc/plugins.md.
|
||||
**/
|
||||
"enablePluginPadOptions": "${ENABLE_PLUGIN_PAD_OPTIONS:false}",
|
||||
"enablePluginPadOptions": "${ENABLE_PLUGIN_PAD_OPTIONS:true}",
|
||||
|
||||
/*
|
||||
* Optional privacy banner shown once the pad loads. Disabled by default.
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
// True when applyPadSettings (client + server) preserves keys matching
|
||||
// /^ep_[a-z0-9_]+$/ on pad.padOptions. The runtime gate is
|
||||
// settings.enablePluginPadOptions (default false), mirrored to clients via
|
||||
// settings.enablePluginPadOptions (default true), mirrored to clients via
|
||||
// clientVars.enablePluginPadOptions. See doc/plugins.md for the full
|
||||
// contract (key namespace, validation, size caps).
|
||||
export const padOptionsPluginPassthrough = true;
|
||||
|
|
|
|||
|
|
@ -434,11 +434,11 @@ const settings: SettingsType = {
|
|||
updateServer: "https://static.etherpad.org",
|
||||
enableDarkMode: true,
|
||||
enablePadWideSettings: true,
|
||||
// New plugin-padOption passthrough is opt-in per AGENTS.MD §52 ("New
|
||||
// features should be placed behind feature flags and disabled by
|
||||
// default"). Flip to true to let plugins (e.g. ep_plugin_helpers'
|
||||
// padToggle) ride the existing padoptions broadcast/persist rail.
|
||||
enablePluginPadOptions: false,
|
||||
// Lets plugins (e.g. ep_plugin_helpers' padToggle / padSelect) ride the
|
||||
// existing padoptions broadcast/persist rail to store pad-wide options
|
||||
// under ep_* keys. Operators who want to lock plugin-driven pad-wide
|
||||
// state out can set this to false in settings.json.
|
||||
enablePluginPadOptions: true,
|
||||
allowPadDeletionByAllUsers: false,
|
||||
privacyBanner: {
|
||||
enabled: false,
|
||||
|
|
|
|||
|
|
@ -214,7 +214,7 @@ describe(__filename, function () {
|
|||
});
|
||||
afterEach(function () { console.warn = warnSpy; });
|
||||
|
||||
describe('with enablePluginPadOptions = true', function () {
|
||||
describe('with enablePluginPadOptions = true (default)', function () {
|
||||
before(function () { settings.enablePluginPadOptions = true; });
|
||||
|
||||
it('preserves ep_* keys verbatim so plugins can ride padoptions', function () {
|
||||
|
|
@ -285,10 +285,10 @@ describe(__filename, function () {
|
|||
});
|
||||
});
|
||||
|
||||
describe('with enablePluginPadOptions = false (default)', function () {
|
||||
describe('with enablePluginPadOptions = false (operator opt-out)', function () {
|
||||
before(function () { settings.enablePluginPadOptions = false; });
|
||||
|
||||
it('drops every ep_* key — feature flag is opt-in', function () {
|
||||
it('drops every ep_* key — operator has opted out of plugin pad-wide state', function () {
|
||||
const ps: any = Pad.Pad.normalizePadSettings({
|
||||
ep_table_of_contents: {enabled: true},
|
||||
ep_font_color: 'red',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue