` * 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 );