laipower/wp-content/plugins/menu-icons/vendor/codeinwp/icon-picker/includes/loader.php
2020-04-07 13:03:04 +00:00

336 lines
6.3 KiB
PHP

<?php
/**
* Icon Picker Loader
*
* @package Icon_Picker
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
final class Icon_Picker_Loader {
/**
* Icon_Picker_Loader singleton
*
* @static
* @since 0.1.0
* @access protected
* @var Icon_Picker_Loader
*/
protected static $instance;
/**
* Script IDs
*
* @since 0.1.0
* @access protected
* @var array
*/
protected $script_ids = array();
/**
* Stylesheet IDs
*
* @since 0.1.0
* @access protected
* @var array
*/
protected $style_ids = array();
/**
* Printed media templates
*
* @since 0.1.0
* @access protected
* @var array
*/
protected $printed_templates = array();
/**
* Setter magic
*
* @since 0.1.0
* @param string $name Property name.
* @return bool
*/
public function __isset( $name ) {
return isset( $this->$name );
}
/**
* Getter magic
*
* @since 0.1.0
* @param string $name Property name.
* @return mixed NULL if attribute doesn't exist.
*/
public function __get( $name ) {
if ( isset( $this->$name ) ) {
return $this->$name;
}
return null;
}
/**
* Get instance
*
* @since 0.1.0
* @return Icon_Picker_Loader
*/
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*
* @since 0.1.0
* @access protected
*/
protected function __construct() {
$this->register_assets();
add_filter( 'media_view_strings', array( $this, '_media_view_strings' ) );
/**
* Fires when Icon Picker loader is ready
*
* @since 0.1.0
* @param Icon_Picker_Loader $this Icon_Picker_Loader instance.
*/
do_action( 'icon_picker_loader_init', $this );
}
/**
* Add script
*
* @since 0.1.0
* @param string $script_id Script ID.
* @return bool
*/
public function add_script( $script_id ) {
if ( wp_script_is( $script_id, 'registered' ) ) {
$this->script_ids[] = $script_id;
return true;
}
return false;
}
/**
* Add stylesheet
*
* @since 0.1.0
* @param string $stylesheet_id Stylesheet ID.
* @return bool
*/
public function add_style( $stylesheet_id ) {
if ( wp_style_is( $stylesheet_id, 'registered' ) ) {
$this->style_ids[] = $stylesheet_id;
return true;
}
return false;
}
/**
* Register scripts & styles
*
* @since 0.1.0
* @since 0.5.0 Use webpack dev server's URL as the asset URL.
* @access protected
* @return void
*/
protected function register_assets() {
$icon_picker = Icon_Picker::instance();
if ( defined( 'ICON_PICKER_SCRIPT_DEBUG' ) && ICON_PICKER_SCRIPT_DEBUG ) {
$assets_url = '//localhost:8080';
$suffix = '';
} else {
$assets_url = $icon_picker->url;
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
}
wp_register_script(
'icon-picker',
"{$assets_url}/js/icon-picker{$suffix}.js",
array( 'media-views' ),
Icon_Picker::VERSION,
true
);
$this->add_script( 'icon-picker' );
wp_register_style(
'icon-picker',
"{$icon_picker->url}/css/icon-picker{$suffix}.css",
false,
Icon_Picker::VERSION
);
$this->add_style( 'icon-picker' );
}
/**
* Load admin functionalities
*
* @since 0.1.0
* @return void
*/
public function load() {
if ( ! is_admin() ) {
_doing_it_wrong(
__METHOD__,
'It should only be called on admin pages.',
esc_html( Icon_Picker::VERSION )
);
return;
}
if ( ! did_action( 'icon_picker_loader_init' ) ) {
_doing_it_wrong(
__METHOD__,
sprintf(
'It should not be called until the %s hook.',
'<code>icon_picker_loader_init</code>'
),
esc_html( Icon_Picker::VERSION )
);
return;
}
add_action( 'admin_enqueue_scripts', array( $this, '_enqueue_assets' ) );
add_action( 'print_media_templates', array( $this, '_media_templates' ) );
}
/**
* Filter media view strings
*
* @since 0.1.0
* @wp_hook filter media_view_strings
*
* @param array $strings Media view strings.
*
* @return array
*/
public function _media_view_strings( $strings ) {
$strings['iconPicker'] = array(
'frameTitle' => __( 'Icon Picker', 'icon-picker' ),
'allFilter' => __( 'All', 'icon-picker' ),
'selectIcon' => __( 'Select Icon', 'icon-picker' ),
);
return $strings;
}
/**
* Enqueue scripts & styles
*
* @since 0.1.0
* @wp_hook action admin_enqueue_scripts
* @return void
*/
public function _enqueue_assets() {
$icon_picker = Icon_Picker::instance();
wp_localize_script(
'icon-picker',
'iconPicker',
array(
'types' => $icon_picker->registry->get_types_for_js(),
)
);
// Some pages don't call this by default, so let's make sure.
wp_enqueue_media();
foreach ( $this->script_ids as $script_id ) {
wp_enqueue_script( $script_id );
}
foreach ( $this->style_ids as $style_id ) {
wp_enqueue_style( $style_id );
}
/**
* Fires when admin functionality is loaded
*
* @since 0.1.0
* @param Icon_Picker $icon_picker Icon_Picker instance.
*/
do_action( 'icon_picker_admin_loaded', $icon_picker );
}
/**
* Media templates
*
* @since 0.1.0
* @wp_hook action print_media_templates
* @return void
*/
public function _media_templates() {
$icon_picker = Icon_Picker::instance();
foreach ( $icon_picker->registry->types as $type ) {
if ( empty( $type->templates ) ) {
continue;
}
$template_id_prefix = "tmpl-iconpicker-{$type->template_id}";
if ( in_array( $template_id_prefix, $this->printed_templates, true ) ) {
continue;
}
foreach ( $type->templates as $template_id_suffix => $template ) {
$this->_print_template( "{$template_id_prefix}-{$template_id_suffix}", $template );
}
$this->printed_templates[] = $template_id_prefix;
}
/**
* Fires after all media templates have been printed
*
* @since 0.1.0
* @param Icon_Picker $icon_picker Icon Picker instance.
*/
do_action( 'icon_picker_print_media_templates', $icon_picker );
}
/**
* Print media template
*
* @since 0.1.0
* @param string $id Template ID.
* @param string $template Media template HTML.
* @return void
*/
protected function _print_template( $id, $template ) {
?>
<script type="text/html" id="<?php echo esc_attr( $id ) ?>">
<?php echo $template; // xss ok ?>
</script>
<?php
}
}