Sticky form actions appear on node revision revert/delete confirm forms (incomplete exclusion pattern)
>>> [!note] Migrated issue <!-- Drupal.org comment --> <!-- Migrated from issue #3590827. --> Reported by: [alaa abbad](https://www.drupal.org/user/2228522) Related to !787 >>> <p>GinContentFormHelper::stickyActionButtons() excludes confirm-style forms from the sticky form actions feature using this check:</p> <p>strpos($form_id, '_confirm_form') !== FALSE</p> <p>However, several core confirm forms &mdash; particularly node revision operations &mdash; use form IDs that end in _confirm, not _confirm_form. As a result they slip past the exclusion and Gin lifts their single destructive action button (Revert / Delete) into the sticky top bar, which is misleading UX for a one-question confirmation page.</p> <p><strong>Affected core form IDs (non-exhaustive):</strong></p> <ul> <li>node_revision_revert_confirm</li> <li>node_revision_revert_translation_confirm</li> <li>node_revision_delete_confirm</li> </ul> <p><strong>Steps to reproduce:</strong></p> <ul> <li>Install Gin theme and enable it as admin theme.</li> <li>Make sure "Sticky form actions" is enabled (default).</li> <li>Edit a node and create a new revision so revisions exist.</li> <li>Go to /node/{id}/revisions.</li> <li>Click "Revert" next to an older revision (URL is /node/{id}/revisions/{vid}/revert).</li> </ul> <p><strong>Expected</strong>: Revert and Cancel buttons render inline at the bottom of the confirmation form (as in Claro / Stark).</p> <p><strong>Actual</strong>: The Revert button is lifted to the sticky top action bar and the form body contains no visible primary action, making the confirmation page feel broken.</p> <p><strong>Proposed resolution:</strong></p> <p>Broaden the exclusion substring in stickyActionButtons() from _confirm_form to _confirm. By Drupal naming convention (ConfirmFormBase implementations), all confirm forms end in _confirm, so this single change covers existing and future cases without false positives.</p> <p>- strpos($form_id, '_confirm_form') !== FALSE ||<br> + strpos($form_id, '_confirm') !== FALSE ||</p>
issue