plugin = $plugin; } /** * Hangt zichzelf op. */ public function register(): void { add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ), 20 ); } /** * Laadt de editor als er een mediamodal kan opengaan. */ public function enqueue(): void { if ( ! $this->is_needed() ) { return; } $version = $this->plugin->version(); wp_enqueue_style( 'yinga-focus-editor', $this->plugin->url( 'assets/dist/editor.css' ), array(), $version ); /** * De bron van de editor-bundel. * * De Pro-plugin vervangt hem door zijn eigen bundel, met de safe area, * de tekstzone en de voorkant-bewerkmodus erin. * * @param string $src De standaard-URL. */ $src = (string) apply_filters( 'yinga_focus/editor_src', $this->plugin->url( 'assets/dist/editor.js' ) ); wp_enqueue_script( 'yinga-focus-editor', $src, // wp-api-fetch regelt de nonce en de root-URL; die zelf bouwen gaat // een keer mis. wp-i18n voor de vertaalbare strings in JS. array( 'wp-api-fetch', 'wp-i18n' ), $version, true ); // Alleen `features` gaat via localize; de teksten vertaalt de bundel // zelf met `wp.i18n`. Zie de toelichting in assets/src/shared/i18n.js. wp_localize_script( 'yinga-focus-editor', 'yingaFocusL10n', array( /** * Welke editor-gereedschappen staan aan? * * De kern levert het focuspunt; de Pro-plugin zet hier de safe * area en de tekstzone bij aan. * * @param array $features array{safeArea: bool, textZone: bool}. */ 'features' => apply_filters( 'yinga_focus/features', array( 'safeArea' => false, 'textZone' => false, ) ), ) ); /** * Waar de scriptvertaling van de editorbundel ligt. * * WordPress zoekt het JSON-bestand in de map die hier wordt opgegeven, * en de bestandsnaam bevat de md5 van het scriptpad. Vervangt Pro de * bundel via `editor_src`, dan verandert die md5 mee en ligt het * bestand in het Pro-pakket — dus moet dit pad meeveranderen. Zonder * dit filter zoekt WordPress in de map van de kern, vindt niets, en * valt de editor stil terug op het Engels. Zonder foutmelding. * * @param string $path De standaardmap. */ $languages = (string) apply_filters( 'yinga_focus/editor_languages', $this->plugin->path( 'languages' ) ); wp_set_script_translations( 'yinga-focus-editor', Naming::TEXT_DOMAIN, $languages ); } /** * Kan er op dit scherm een mediamodal opengaan? * * @return bool */ private function is_needed(): bool { if ( ! current_user_can( 'upload_files' ) ) { return false; } // Het echte signaal: wp_enqueue_media() heeft gedraaid. if ( wp_script_is( 'media-views', 'enqueued' ) || wp_script_is( 'media-views', 'to_do' ) ) { return true; } // En het bewerkscherm van één mediabestand, waar de modal niet bestaat // maar onze knop wel gerenderd wordt. $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null; return null !== $screen && in_array( $screen->id, array( 'upload', 'attachment' ), true ); } }