diff --git a/src/Core/ResourceMetaBox.php b/src/Core/ResourceMetaBox.php index 50a03f62..eb582308 100644 --- a/src/Core/ResourceMetaBox.php +++ b/src/Core/ResourceMetaBox.php @@ -43,15 +43,17 @@ class ResourceMetaBox { wp_enqueue_media(); if (function_exists('aksrt_icon_picker_assets')) { + // Declares aksrt-icon-picker -> aksrt-pay-meta-box; the reverse edge + // must not be added here or WP's resolver recurses until OOM. aksrt_icon_picker_assets(['aksrt-pay-meta-box']); } $css = AKSRT_DIR . '/assets/css/admin/pay-meta-box.css'; $js = AKSRT_DIR . '/assets/js/admin-pay-meta-box.js'; if (is_file($css)) { - wp_enqueue_style('aksrt-pay-meta-box', AKSRT_URI . '/assets/css/admin/pay-meta-box.css', ['aksrt-icon-picker'], (string) filemtime($css)); + wp_enqueue_style('aksrt-pay-meta-box', AKSRT_URI . '/assets/css/admin/pay-meta-box.css', ['aksrt-font-awesome'], (string) filemtime($css)); } if (is_file($js)) { - wp_enqueue_script('aksrt-pay-meta-box', AKSRT_URI . '/assets/js/admin-pay-meta-box.js', ['aksrt-icon-picker'], (string) filemtime($js), true); + wp_enqueue_script('aksrt-pay-meta-box', AKSRT_URI . '/assets/js/admin-pay-meta-box.js', [], (string) filemtime($js), true); } wp_localize_script('aksrt-pay-meta-box', 'aksrtPayMetaBox', [ 'buttonClasses' => DomainModel::DOWNLOAD_BUTTON_CLASSES, diff --git a/tests/widget-system/post-editor-reference-contract.test.cjs b/tests/widget-system/post-editor-reference-contract.test.cjs index e9a88295..fb70dbd8 100644 --- a/tests/widget-system/post-editor-reference-contract.test.cjs +++ b/tests/widget-system/post-editor-reference-contract.test.cjs @@ -148,6 +148,15 @@ test('the post editor resource row mirrors the reference seven fields with icon assert.equal(reindex('downloads', 'aksrt_pay[video_episode][1][title]', 9), 'aksrt_pay[video_episode][1][title]'); assert.match(setup, /'icon' => \['type' => 'string'\]/); + + // The icon picker registers itself as depending on the caller's handle, so the + // pay-meta script must NOT declare the icon-picker handle back: that cycle makes + // WP_Dependencies recurse until memory is exhausted on every post editor load. + const picker = read('inc/helpers/aksrt-icon-picker.php'); + assert.match(picker, /array_merge\(\['jquery', 'aksrt-svg-sprite'\], \$deps\)/); + assert.match(meta, /aksrt_icon_picker_assets\(\['aksrt-pay-meta-box'\]\)/); + const payScript = meta.match(/wp_enqueue_script\('aksrt-pay-meta-box',[^\n]*\)/)[0]; + assert.doesNotMatch(payScript, /aksrt-icon-picker/); }); test('front submit paid-content prices and switch use the reference alignment rules', () => {