From 009f9874c04501a7c0a24f1e44e0f414c06ed6a4 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 6 Sep 2026 12:59:12 +0800 Subject: [PATCH] feat(widgets): render icon fields with the universal icon picker The widget FormRenderer icon case and the nav-menu item icon field now emit the shared picker (preview + choose/clear + editable text input, delegated events so lazy forms and repeater rows work). Icon values are sanitized through aksrt_sanitize_icon_value on both save paths so inline customsvg- markup survives; the widget admin screen enqueues the picker. --- assets/widgets/admin.css | 1 - src/Admin/NavMenuOptions.php | 36 +++++++++++++----------- src/Admin/SchemaProvider.php | 6 +++- src/WidgetSystem/AdminFormController.php | 1 + src/WidgetSystem/FieldSchema.php | 4 ++- src/WidgetSystem/FormRenderer.php | 2 +- 6 files changed, 30 insertions(+), 20 deletions(-) diff --git a/assets/widgets/admin.css b/assets/widgets/admin.css index a486c5af..f95c8c17 100644 --- a/assets/widgets/admin.css +++ b/assets/widgets/admin.css @@ -86,7 +86,6 @@ } .aksrt-widget-number, -.aksrt-widget-icon, .aksrt-widget-link, .aksrt-widget-background { display: grid; diff --git a/src/Admin/NavMenuOptions.php b/src/Admin/NavMenuOptions.php index d5930068..01080607 100644 --- a/src/Admin/NavMenuOptions.php +++ b/src/Admin/NavMenuOptions.php @@ -21,18 +21,18 @@ class NavMenuOptions { if ($hook !== 'nav-menus.php') { return; } - $path = get_template_directory() . '/assets/js/admin-nav-menu-senior.js'; - if (!file_exists($path)) { - return; - } wp_enqueue_media(); - wp_enqueue_script( - 'aksrt-admin-nav-menu-senior', - get_template_directory_uri() . '/assets/js/admin-nav-menu-senior.js', - ['jquery'], - (string) filemtime($path), - true - ); + aksrt_icon_picker_assets(); + $path = get_template_directory() . '/assets/js/admin-nav-menu-senior.js'; + if (file_exists($path)) { + wp_enqueue_script( + 'aksrt-admin-nav-menu-senior', + get_template_directory_uri() . '/assets/js/admin-nav-menu-senior.js', + ['jquery'], + (string) filemtime($path), + true + ); + } } /** @@ -57,11 +57,15 @@ class NavMenuOptions { ?>

+

'; + echo aksrt_icon_picker_field($field_name, $field_id, (string) $value); break; case 'link': self::link($widget, $key, is_array($value) ? $value : []);