Class for managing assets.
Description
Source
File: src/assets.php
class Assets extends Assets_Base { use Hook_Service_Trait; /** * Constructor. * * @since 1.0.0 * * @param string $prefix The prefix for all AJAX actions. * @param array $args { * Array of arguments. * * @type callable $path_callback Callback to create a full plugin path from a relative path. * @type callable $url_callback Callback to create a full plugin URL from a relative path. * } */ public function __construct( $prefix, $args ) { parent::__construct( $prefix, $args ); $this->setup_hooks(); } /** * Transforms a relative asset path into a full URL. * * The method also automatically handles loading a minified vs non-minified file. * * @since 1.0.0 * * @param string $src Relative asset path. * @return string|bool Full asset URL, or false if the path * is requested for a full $src URL. */ public function get_full_url( $src ) { return $this->get_full_path( $src, true ); } /** * Transforms a relative asset path into a full path. * * The method also automatically handles loading a minified vs non-minified file. * * @since 1.0.0 * * @param string $src Relative asset path. * @param bool $url Whether to return the URL instead of the path. Default false. * @return string|bool Full asset path or URL, depending on the $url parameter, or false * if the path is requested for a full $src URL. */ public function get_full_path( $src, $url = false ) { if ( preg_match( '/^(http|https):\/\//', $src ) || 0 === strpos( $src, '//' ) ) { if ( $url ) { return $src; } return false; } if ( '.js' !== substr( $src, -3 ) && '.css' !== substr( $src, -4 ) ) { if ( $url ) { return call_user_func( $this->url_callback, $src ); } return call_user_func( $this->path_callback, $src ); } return parent::get_full_path( $src, $url ); } /** * Renders an SVG icon. * * @since 1.0.0 * * @param string $icon_id ID of the SVG icon to use. * @param string $title Optional. Alternative text for the SVG. If not, the element will be * ignored by screen readers. Default empty string. * @param string $class Optional. Additional CSS class to use on the SVG element. Default * empty string. */ public function render_icon( $icon_id, $title = '', $class = '' ) { $aria_hidden = ' aria-hidden="true"'; $aria_labelledby = ''; if ( ! empty( $title ) ) { $unique_id = uniqid(); $aria_hidden = ''; $aria_labelledby = ' aria-labelledby="title-' . esc_attr( $unique_id ) . '"'; } ?> <svg class="torro-icon <?php echo esc_attr( $class ); ?>"<?php echo $aria_hidden . $aria_labelledby; ?> role="img"> <?php if ( ! empty( $title ) ) : ?> <title id="title-<?php echo esc_attr( $unique_id ); ?>"><?php echo esc_html( $title ); ?></title> <?php endif; ?> <use href="#<?php echo esc_attr( $icon_id ); ?>" xlink:href="#<?php echo esc_attr( $icon_id ); ?>"></use> </svg> <?php } /** * Registers all default plugin assets. * * @since 1.0.0 */ protected function register_assets() { $this->register_style( 'frontend', 'assets/dist/css/frontend.css', array( 'deps' => array(), 'ver' => $this->plugin_version, ) ); $this->register_script( 'util', 'assets/dist/js/util.js', array( 'deps' => array( 'jquery', 'underscore', 'wp-util', 'wp-api' ), 'ver' => $this->plugin_version, 'in_footer' => true, ) ); $this->register_style( 'admin-icons', 'assets/dist/css/admin-icons.css', array( 'deps' => array(), 'ver' => $this->plugin_version, ) ); $this->register_script( 'admin-fixed-sidebar', 'assets/dist/js/admin-fixed-sidebar.js', array( 'deps' => array( 'jquery' ), 'ver' => $this->plugin_version, 'in_footer' => true, ) ); $this->register_script( 'admin-tooltip-descriptions', 'assets/dist/js/admin-tooltip-descriptions.js', array( 'deps' => array( 'jquery' ), 'ver' => $this->plugin_version, 'in_footer' => true, ) ); $this->register_style( 'admin-tooltip-descriptions', 'assets/dist/css/admin-tooltip-descriptions.css', array( 'deps' => array( 'dashicons' ), 'ver' => $this->plugin_version, ) ); $this->register_script( 'admin-unload', 'assets/dist/js/admin-unload.js', array( 'deps' => array( 'jquery', 'post' ), 'ver' => $this->plugin_version, 'in_footer' => true, ) ); $this->register_script( 'admin-form-builder', 'assets/dist/js/admin-form-builder.js', array( 'deps' => array( $this->prefix_handle( 'util' ), 'jquery', 'underscore', 'backbone', 'wp-backbone', 'plugin-lib-fields', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-dialog' ), 'ver' => $this->plugin_version, 'in_footer' => true, 'localize_name' => 'torroBuilderI18n', 'localize_data' => array( 'couldNotInitCanvas' => __( 'Could not initialize form canvas as the selector points to an element that does not exist.', 'torro-forms' ), 'couldNotLoadData' => __( 'Could not load form builder data. Please verify that the REST API is correctly enabled on your site.', 'torro-forms' ), /* translators: %s: container index number */ 'defaultContainerLabel' => __( 'Page %s', 'torro-forms' ), /* translators: %s: element choice index number */ 'elementChoiceLabel' => __( 'Choice %s', 'torro-forms' ), 'showContent' => __( 'Show Content', 'torro-forms' ), 'hideContent' => __( 'Hide Content', 'torro-forms' ), 'yes' => __( 'Yes', 'torro-forms' ), 'no' => __( 'No', 'torro-forms' ), 'confirmDeleteContainer' => __( 'Do you really want to delete this page?', 'torro-forms' ), 'confirmDeleteElement' => __( 'Do you really want to delete this element?', 'torro-forms' ), 'confirmDeleteElementChoice' => __( 'Do you really want to delete this choice?', 'torro-forms' ), ), ) ); $this->register_style( 'admin-form-builder', 'assets/dist/css/admin-form-builder.css', array( 'deps' => array(), 'ver' => $this->plugin_version, ) ); $this->register_script( 'admin-settings', 'assets/dist/js/admin-settings.js', array( 'deps' => array( 'jquery' ), 'ver' => $this->plugin_version, 'in_footer' => true, ) ); $this->register_style( 'admin-settings', 'assets/dist/css/admin-settings.css', array( 'deps' => array(), 'ver' => $this->plugin_version, ) ); $this->register_script( 'clipboard', 'assets/dist/js/clipboard.js', array( 'deps' => array(), 'ver' => $this->plugin_version, 'in_footer' => true, ) ); $this->register_style( 'clipboard', 'assets/dist/css/clipboard.css', array( 'deps' => array(), 'ver' => $this->plugin_version, ) ); $this->register_script( 'template-tag-fields', 'assets/dist/js/template-tag-fields.js', array( 'deps' => array( 'plugin-lib-fields', 'jquery' ), 'ver' => $this->plugin_version, 'in_footer' => true, ) ); $this->register_style( 'template-tag-fields', 'assets/dist/css/template-tag-fields.css', array( 'deps' => array( 'plugin-lib-fields' ), 'ver' => $this->plugin_version, ) ); $this->register_script( 'd3', 'node_modules/d3/d3.js', array( 'deps' => array(), 'ver' => '3.5.17', 'in_footer' => true, ) ); $this->register_script( 'c3', 'node_modules/c3/c3.js', array( 'deps' => array( 'd3' ), 'ver' => '0.4.11', 'in_footer' => true, ) ); $c3_script = <<<JAVASCRIPT ( function( c3 ) { var c3Definitions = document.getElementsByClassName( 'c3-chart-data' ); var c3Definition, i; function parseFormatFunction( format ) { var search = [ '%value%', '%percentage%', '%id%' ]; var replace, replaced, percentage, i; function formatter( value, id ) { value = Math.round( value * 100 ) / 100; if ( ! format.template ) { return '' + value; } percentage = ( ( format.aggregate && format.aggregate > 0 ) ? value / format.aggregate : 0.0 ) * 100.0; replace = [ value, Math.round( percentage * 100 ) / 100, id ]; replaced = format.template; for ( i = 0; i < replace.length; i++ ) { replaced = replaced.replace( search[ i ], replace[ i ] ); } return replaced; }; return formatter; } for ( i = 0; i < c3Definitions.length; i++ ) { c3Definition = JSON.parse( c3Definitions[ i ].innerHTML ); if ( 'object' === typeof c3Definition.data && 'object' === typeof c3Definition.data.labels && 'object' === typeof c3Definition.data.labels.format ) { c3Definition.data.labels.format = parseFormatFunction( c3Definition.data.labels.format ); } c3.generate( c3Definition ); } }( window.c3 ) ); JAVASCRIPT; wp_add_inline_script( 'c3', $c3_script ); $this->register_style( 'c3', 'node_modules/c3/c3.css', array( 'deps' => array(), 'ver' => '0.4.11', ) ); /** * Fires after all default plugin assets have been registered. * * Do not use this action to actually enqueue any assets, as it is only * intended for registering them. * * @since 1.0.0 * * @param Assets $assets The assets manager instance. */ do_action( "{$this->get_prefix()}register_assets", $this ); } /** * Enqueues the icons stylesheet. * * @since 1.0.0 */ protected function enqueue_icons() { $this->enqueue_style( 'admin-icons' ); } /** * Adds utility CSS classes to the admin body tag. * * @since 1.0.0 * * @param string $classes Optional. Admin body classes. Default empty string. * @return string Modified admin body classes. */ protected function add_admin_utility_body_classes( $classes = '' ) { if ( ! empty( $classes ) ) { $classes .= ' '; } $classes .= 'no-clipboard'; return $classes; } /** * Prints the SVG icons to the page so that they are available to use. * * @since 1.0.0 */ protected function load_icons() { $svg_icons = $this->get_full_path( 'assets/dist/img/icons.svg' ); if ( file_exists( $svg_icons ) ) { require_once $svg_icons; } } /** * Sets up all action and filter hooks for the service. * * This method must be implemented and then be called from the constructor. * * @since 1.0.0 */ protected function setup_hooks() { $this->actions = array( array( 'name' => 'wp_enqueue_scripts', 'callback' => array( $this, 'register_assets' ), 'priority' => 1, 'num_args' => 0, ), array( 'name' => 'admin_enqueue_scripts', 'callback' => array( $this, 'register_assets' ), 'priority' => 1, 'num_args' => 0, ), array( 'name' => 'admin_enqueue_scripts', 'callback' => array( $this, 'enqueue_icons' ), 'priority' => 10, 'num_args' => 0, ), array( 'name' => 'admin_footer', 'callback' => array( $this, 'load_icons' ), 'priority' => 10, 'num_args' => 0, ), ); $this->filters = array( array( 'name' => 'admin_body_class', 'callback' => array( $this, 'add_admin_utility_body_classes' ), 'priority' => 1, 'num_args' => 1, ), ); } /** * Parses the plugin version number. * * @since 1.0.0 * @static * * @param mixed $value The input value. * @return string The parsed value. */ protected static function parse_arg_plugin_version( $value ) { if ( ! $value ) { return false; } return $value; } }
Changelog
Version | Description |
---|---|
1.0.0 | Introduced. |
Methods
- __construct — Constructor.
- add_admin_utility_body_classes — Adds utility CSS classes to the admin body tag.
- enqueue_icons — Enqueues the icons stylesheet.
- get_full_path — Transforms a relative asset path into a full path.
- get_full_url — Transforms a relative asset path into a full URL.
- load_icons — Prints the SVG icons to the page so that they are available to use.
- parse_arg_plugin_version — Parses the plugin version number.
- register_assets — Registers all default plugin assets.
- render_icon — Renders an SVG icon.
- setup_hooks — Sets up all action and filter hooks for the service.