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 — particularly node revision operations — 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