`
* and clones it into the window body BEFORE the JS render callback runs.
* The `data-desktop-mode-recycle-bin-*` hooks below are the contract the JS
* relies on — keep them intact (or rename via the filter) when
* customizing the layout.
*
* @since 0.19.0
*/
function desktop_mode_recycle_bin_render_template() {
ob_start();
?>
__( 'Recycle Bin', 'desktop-mode' ),
'icon' => 'dashicons-trash',
'template' => 'desktop_mode_recycle_bin_render_template',
'script' => 'desktop-mode-recycle-bin',
'width' => 880,
'height' => 560,
'min_width' => 520,
'min_height' => 360,
'placement' => 'taskbar',
);
/**
* Filter the args used to register the recycle bin native window.
*
* @since 0.19.0
*
* @param array $window_args Args passed to `desktop_mode_register_window()`.
*/
$window_args = (array) apply_filters( 'desktop_mode_recycle_bin_window_args', $window_args );
$registered = desktop_mode_register_window( 'desktop-mode-recycle-bin', $window_args );
if ( is_wp_error( $registered ) ) {
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
error_log( '[desktop-mode] Recycle bin window registration failed: ' . $registered->get_error_message() );
return;
}
$icon_args = array(
'title' => __( 'Recycle Bin', 'desktop-mode' ),
'icon' => 'dashicons-trash',
'window' => 'desktop-mode-recycle-bin',
'position' => 80,
);
/**
* Filter the args used to register the recycle bin desktop icon.
*
* @since 0.19.0
*
* @param array $icon_args Args passed to `desktop_mode_register_icon()`.
*/
$icon_args = (array) apply_filters( 'desktop_mode_recycle_bin_icon_args', $icon_args );
desktop_mode_register_icon( 'desktop-mode-recycle-bin', $icon_args );
}
add_action( 'init', 'desktop_mode_recycle_bin_register_window', 20 );
/**
* Localize REST endpoints for the JS bundle.
*
* Same pattern as the code editor: the bundle reads its config off
* `window.desktopModeRecycleBinConfig` and never hardcodes URLs.
*
* @since 0.19.0
*/
function desktop_mode_recycle_bin_localize_config() {
if ( ! desktop_mode_recycle_bin_user_can_use() ) {
return;
}
wp_localize_script(
'desktop-mode-recycle-bin',
'desktopModeRecycleBinConfig',
array(
'restNonce' => wp_create_nonce( 'wp_rest' ),
'listUrl' => esc_url_raw( rest_url( 'desktop-mode/v1/recycle-bin' ) ),
'restoreUrl' => esc_url_raw( rest_url( 'desktop-mode/v1/recycle-bin/restore' ) ),
'purgeUrl' => esc_url_raw( rest_url( 'desktop-mode/v1/recycle-bin/purge' ) ),
'emptyUrl' => esc_url_raw( rest_url( 'desktop-mode/v1/recycle-bin/empty' ) ),
'countUrl' => esc_url_raw( rest_url( 'desktop-mode/v1/recycle-bin/count' ) ),
)
);
wp_enqueue_style( 'desktop-mode-recycle-bin' );
}
add_action( 'admin_enqueue_scripts', 'desktop_mode_recycle_bin_localize_config', 30 );
/**
* Inject the initial trash count into the shell config so the
* dock/taskbar tile + desktop icon can paint a badge on the very
* first paint — before the bin window has ever opened.
*
* @since 0.21.0
*
* @param array $config Shell config blob.
* @return array
*/
function desktop_mode_recycle_bin_inject_shell_config( $config ) {
if ( ! is_array( $config ) ) {
return $config;
}
$config['recycleBinCount'] = desktop_mode_recycle_bin_count();
$config['recycleBinCountUrl'] = esc_url_raw( rest_url( 'desktop-mode/v1/recycle-bin/count' ) );
return $config;
}
add_filter( 'desktop_mode_shell_config', 'desktop_mode_recycle_bin_inject_shell_config', 20 );