Generate ids for form locations

This commit is contained in:
Cooper Dalrymple
2026-08-03 17:14:17 -05:00
parent 2b10a82fdd
commit e5da11e5f2
4 changed files with 36 additions and 6 deletions
+16 -2
View File
@@ -47,8 +47,17 @@ abstract class Location {
abstract public function activate():void;
protected function get_widget_id(): string {
return sprintf(
'cap-%s',
$this->name
);
}
public function render():void {
Widget::render();
Widget::render([
'id' => $this->get_widget_id(),
]);
}
public function process(WP_Error|null $errors = null):void {
@@ -78,7 +87,12 @@ abstract class Location {
public function footer():void {
if (!Settings::is_widget_floating()) return;
$html = ob_get_clean();
$html = Widget::set_button_floating($html);
$html = Widget::set_button_floating(
$html,
[
'id' => $this->get_widget_id(),
]
);
echo $html;
}
+1 -1
View File
@@ -97,7 +97,7 @@ final class Widget {
);
$attributes = [
'data-cap-floating' => "#{$args['id']}",
'data-cap-floating' => '#' . $args['id'],
'data-cap-floating-position' => $args['position'],
];
+16 -2
View File
@@ -134,11 +134,25 @@ final class Addon extends GFAddOn {
public function submit_button(string $button_input, array $form): string {
if (!Settings::is_connected() || !$this->is_enabled($form)) return $button_input;
if ((is_admin() && !defined('DOING_AJAX')) || GFCommon::is_form_editor()) return $button_input;
$id = sprintf(
'gform_cap_%d',
absint(rgar($form, 'id'))
);
ob_start();
Widget::render();
Widget::render([
'id' => $id,
]);
$button_input = ob_get_clean() . $button_input;
if (Settings::is_widget_floating()) $button_input = Widget::set_button_floating($button_input);
if (Settings::is_widget_floating()) {
$button_input = Widget::set_button_floating(
$button_input,
[
'id' => $id,
]
);
}
return $button_input;
}
+3 -1
View File
@@ -42,7 +42,9 @@ final class LoginForm extends Location {
$content .= ob_get_clean();
if (Settings::is_widget_floating()) {
Widget::add_dynamic_floating_attributes();
Widget::add_dynamic_floating_attributes([
'id' => $this->get_widget_id(),
]);
}
return $content;