'A11y Dark', 'prism-ghcolors' => 'GitHub (Light)', 'prism-nord' => 'Nord', 'prism-onedark' => 'One Dark' ); require dirname( __FILE__ ) . '/prism-languages.php'; require dirname( __FILE__ ) . '/settings.php'; /** * Enqueue assets for editor portion of Gutenberg */ add_action( 'enqueue_block_editor_assets', function() { $asset_file = include( plugin_dir_path( __FILE__ ) . 'build/index.asset.php' ); $editor_style_path = 'assets/blocks.editor.css'; // Prism Languages - write out as JavaScript array that makes // it available to show in the editor $languages = mkaz_code_syntax_block_get_supported_languages(); // Block. wp_enqueue_script( 'mkaz-code-syntax', plugins_url( 'build/index.js', __FILE__ ), $asset_file['dependencies'], $asset_file['version'] ); // Enqueue view style. wp_enqueue_style( 'mkaz-code-syntax-editor-css', plugins_url( $editor_style_path, __FILE__ ), [], filemtime( plugin_dir_path( __FILE__ ) . $editor_style_path ) ); $default_lang = get_option( 'mkaz-code-syntax-default-lang', '' ); wp_add_inline_script( 'mkaz-code-syntax', implode( "\n", array( 'const mkaz_code_syntax_languages = ' . json_encode( $languages ) . ';', 'const mkaz_code_syntax_default_lang = ' . json_encode( $default_lang ) . ';', ) ), 'before' ); } ); /** * Enqueue assets for frontend, not editor. */ add_action( 'wp_enqueue_scripts', function() { global $posts; /** * Filter forces loading assets even if no block detected. * * @since 1.2.4 * */ $force_load = apply_filters( 'mkaz_code_syntax_force_loading', false ); // if not forcing the loading of assets check if the block // is found and if no block skip loading assets if ( ! $force_load ) { if ( empty( $posts ) ) { return; } $found_block = array_reduce( $posts, function($found, $post) { return $found || has_block( 'code', $post ); }, false ); if ( ! $found_block ) { return; } } // Files. $prism_js_path = 'assets/prism/prism.js'; $prism_settings_path = 'assets/prism/prism-settings.js'; // Enqueue prism style. wp_enqueue_style( 'mkaz-code-syntax-prism-css', mkaz_prism_theme_css(), [], mkaz_prism_theme_css_ver() ); // Enqueue prism script. wp_enqueue_script( 'mkaz-code-syntax-prism-js', plugins_url( $prism_js_path, __FILE__ ), [], // No dependencies. filemtime( plugin_dir_path( __FILE__ ) . $prism_js_path ), true // In footer. ); // save the plugin path wp_localize_script('mkaz-code-syntax-prism-js', 'prism_settings', array( 'pluginUrl' => plugin_dir_url(__FILE__), )); } ); /** * Locate a given resource URL in the active theme or with the default. * * @param boolean $rtnPath True returns path, default false returns URL */ function mkaz_prism_theme_css( $rtnPath = false ) { $default_path = '/assets/prism-a11y-dark.css'; /** * Site option overrides theme, because the site option can be set by the user. * However, we will want the theme to be able to override the default. * @since 2.0.0 */ $option = get_option( 'mkaz-code-syntax-color-scheme', 'prism-a11y-dark' ); // confirm file exists if ( $option ) { $option_rel_path = '/assets/' . $option . '.css'; $option_file_path = plugin_dir_path( __FILE__ ) . $option_rel_path; if ( file_exists( $option_file_path ) ) { $default_path = $option_rel_path; } } /** * Filter the theme directory path used for overriding css path * * @fix 2.0.3 - Hardcode value to assets/prism/prism.css instead of default * In 2.0.0 the default path was changed to a11y and support site option, * but previous themes and docs instruct to look for this path. * * @since 0.8.2 * * @param string $path Path to the file to override, relative to the theme */ $css_rel_path = apply_filters( 'mkaz_prism_css_path', "/assets/prism/prism.css" ); $theme_file_path = get_stylesheet_directory() . $css_rel_path; if ( file_exists( $theme_file_path ) ) { $prism_css_path = $theme_file_path; $prism_css_url = get_stylesheet_directory_uri() . $css_rel_path; } else { $prism_css_path = plugin_dir_path( __FILE__ ) . $default_path; $prism_css_url = plugins_url( $default_path, __FILE__ ); } if ( $rtnPath ) { return $prism_css_path; } /** * Filter the URL of the Syntax Highlighting colors. * Use this filter to define your own color set. * * @since 0.8.1 * * @param string $prism_css_url Absolute URL of the default CSS file you want to enqueue. */ return apply_filters( 'mkaz_prism_css_url', $prism_css_url ); } /** * Return version or timestamp for theme_css to be used in enqueue version, * otherwise plugin version used for cache busting CSS enqueue. * * @return string * */ function mkaz_prism_theme_css_ver() { // Check if full url is being used, if so return version. $prism_css_url = apply_filters( 'mkaz_prism_css_url', false ); if ( $prism_css_url ) { return MKAZ_CODE_SYNTAX_BLOCK_VERSION; } $css_path = mkaz_prism_theme_css( true ); if ( file_exists( $css_path ) ) { return filemtime( $css_path ); } return MKAZ_CODE_SYNTAX_BLOCK_VERSION; } // extend code tag to allow lang attribute add_filter( 'wp_kses_allowed_html', function( $tags ) { if ( isset( $tags['code'] ) && is_array( $tags['code'] ) ) { $tags['code']['lang'] = array(); } else { $tags['code'] = array( 'lang' => array(), ); } return $tags; }, 10, 2);