modified file plugins

This commit is contained in:
2023-10-22 22:21:44 +00:00
committed by Gitium
parent c72a65abc1
commit 96c0ee892f
4817 changed files with 752216 additions and 0 deletions

View File

@ -0,0 +1,104 @@
<?php
if ( ! function_exists( 'wp_get_attachment_image_url' ) ) {
/**
* Get the URL of an image attachment.
*
* @since WordPress 4.4.0
*
* @param int $attachment_id Image attachment ID.
* @param string|array $size Optional. Image size to retrieve. Accepts any valid image size, or an array
* of width and height values in pixels (in that order). Default 'thumbnail'.
* @param bool $icon Optional. Whether the image should be treated as an icon. Default false.
* @return string|false Attachment URL or false if no image is available.
*/
function wp_get_attachment_image_url( $attachment_id, $size = 'thumbnail', $icon = false ) {
$image = wp_get_attachment_image_src( $attachment_id, $size, $icon );
return isset( $image['0'] ) ? $image['0'] : false;
}
}
/**
* Get Icon URL
*
* @since 0.2.0
*
* @param string $type Icon type.
* @param mixed $id Icon ID.
* @param string $size Optional. Icon size, defaults to 'thumbnail'.
*
* @return string
*/
function icon_picker_get_icon_url( $type, $id, $size = 'thumbnail' ) {
$url = '';
if ( ! in_array( $type, array( 'image', 'svg' ), true ) ) {
return $url;
}
if ( empty( $id ) ) {
return $url;
}
return wp_get_attachment_image_url( $id, $size, false );
}
/**
* The Icon Picker Field
*
* @since 0.2.0
*
* @param mixed $args {
* }
* @param bool $echo Whether to return the field or print it. Defaults to TRUE.
*
* @return mixed
*/
function icon_picker_field( $args, $echo = true ) {
$defaults = array(
'id' => '',
'name' => '',
'value' => array(
'type' => '',
'icon' => '',
),
'select' => sprintf( '<a class="ipf-select">%s</a>', esc_html__( 'Select Icon', 'icon-picker-field' ) ),
'remove' => sprintf( '<a class="ipf-remove button hidden">%s</a>', esc_html__( 'Remove', 'icon-picker-field' ) ),
);
$args = wp_parse_args( $args, $defaults );
$args['value'] = wp_parse_args( $args['value'], $defaults['value'] );
$field = sprintf( '<div id="%s" class="ipf">', $args['id'] );
$field .= $args['select'];
$field .= $args['remove'];
foreach ( $args['value'] as $key => $value ) {
$field .= sprintf(
'<input type="hidden" id="%s" name="%s" class="%s" value="%s" />',
esc_attr( "{$args['id']}-{$key}" ),
esc_attr( "{$args['name']}[{$key}]" ),
esc_attr( "ipf-{$key}" ),
esc_attr( $value )
);
}
// This won't be saved. It's here for the preview.
$field .= sprintf(
'<input type="hidden" class="url" value="%s" />',
esc_attr( icon_picker_get_icon_url( $args['value']['type'], $args['value']['icon'] ) )
);
$field .= '</div>';
if ( $echo ) {
echo $field; // xss ok
} else {
return $field;
}
}
// Add-ons for other plugins.

View File

@ -0,0 +1,48 @@
<?php
/**
* 'icon' field type for Custom Meta Boxes
*
* @link https://github.com/humanmade/Custom-Meta-Boxes/wiki/Adding-your-own-field-types CMB Wiki
* @version 0.1.1
* @since Icon_Picker 0.2.0
*/
class Icon_Picker_Field_Cmb extends CMB_Field {
/**
* Constructor
*
* @since 0.1.0
* @see {CMB_Field::__construct()}
*/
public function __construct( $name, $title, array $values, $args = array() ) {
parent::__construct( $name, $title, $values, $args );
Icon_Picker::instance()->load();
}
/**
* Parse save values
*
* When used as a sub-field of a `group` field, wrap the values with array.
*
* @since 0.1.1
*/
public function parse_save_values() {
if ( ! empty( $this->parent ) ) {
$this->values = array( $this->values );
}
}
/**
* Display the field
*
* @since 0.1.0
* @see {CMB_Field::html()}
*/
public function html() {
icon_picker_field( array(
'id' => $this->id,
'name' => $this->get_the_name_attr(),
'value' => $this->get_value(),
) );
}
}

View File

@ -0,0 +1,285 @@
<?php
/**
* Fontpack
*
* @package Icon_Picker
* @version 0.1.0
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
final class Icon_Picker_Fontpack {
/**
* Icon_Picker_Fontpack singleton
*
* @static
* @since 0.1.0
* @access protected
* @var Icon_Picker_Fontpack
*/
protected static $instance;
/**
* Fontpack directory path
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $dir;
/**
* Fontpack directory url path
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $url;
/**
* Error messages
*
* @since 0.1.0
* @access protected
* @var array
*/
protected $messages = array();
/**
* Icon packs
*
* @since 0.1.0
* @access protected
* @var array
*/
protected $packs = array();
/**
* Get instance
*
* @static
* @since 0.1.0
* @return Icon_Picker_Fontpack
*/
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* 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;
}
/**
* Setter magic
*
* @since 0.1.0
* @return bool
*/
public function __isset( $name ) {
return isset( $this->$name );
}
/**
* Constructor
*
* @since 0.1.0
* @access protected
* @return Icon_Picker_Fontpack
*/
protected function __construct() {
/**
* Allow different system path for fontpacks
*
* @since 0.1.0
* @param string $dir Directory path, defaults to /wp-content/fontpacks.
*/
$this->dir = apply_filters( 'icon_picker_fontpacks_dir_path', WP_CONTENT_DIR . '/fontpacks' );
if ( ! is_readable( $this->dir ) ) {
return;
}
/**
* Allow different URL path for fontpacks
*
* @since 0.4.0
* @param string $url URL path, defaults to /wp-content/fontpacks
*/
$this->url = apply_filters( 'icon_picker_fontpacks_dir_url', WP_CONTENT_URL . '/fontpacks' );
$this->messages = array(
'no_config' => __( 'Icon Picker: %1$s was not found in %2$s.', 'icon-picker' ),
'config_error' => __( 'Icon Picker: %s contains an error or more.', 'icon-picker' ),
'invalid' => __( 'Icon Picker: %1$s is not set or invalid in %2$s.', 'icon-picker' ),
'duplicate' => __( 'Icon Picker: %1$s is already registered. Please check your font pack config file: %2$s.', 'icon-picker' ),
);
$this->collect_packs();
$this->register_packs();
}
/**
* Collect icon packs
*
* @since 0.1.0
* @access protected
* @return void
*/
protected function collect_packs() {
$iterator = new DirectoryIterator( $this->dir );
foreach ( $iterator as $pack_dir ) {
if ( $pack_dir->isDot() || ! $pack_dir->isDir() || ! $pack_dir->isReadable() ) {
continue;
}
$pack_dirname = $pack_dir->getFilename();
$pack_data = $this->get_pack_data( $pack_dir );
if ( ! empty( $pack_data ) ) {
$this->packs[ $pack_dirname ] = $pack_data;
}
}
}
/**
* Register icon packs
*
* @since 0.1.0
* @access protected
* @return void
*/
protected function register_packs() {
if ( empty( $this->packs ) ) {
return;
}
$icon_picker = Icon_Picker::instance();
require_once "{$icon_picker->dir}/includes/types/fontello.php";
foreach ( $this->packs as $pack_data ) {
$icon_picker->registry->add( new Icon_Picker_Type_Fontello( $pack_data ) );
}
}
/**
* Get icon pack data
*
* @since 0.1.0
* @access protected
* @param DirectoryIterator $pack_dir Icon pack directory object.
* @return array Icon pack data array or FALSE.
*/
protected function get_pack_data( DirectoryIterator $pack_dir ) {
$pack_dirname = $pack_dir->getFilename();
$pack_path = $pack_dir->getPathname();
$cache_id = "icon_picker_fontpack_{$pack_dirname}";
$cache_data = get_transient( $cache_id );
$config_file = "{$pack_path}/config.json";
if ( false !== $cache_data && $cache_data['version'] === $pack_dir->getMTime() ) {
return $cache_data;
}
// Make sure the config file exists and is readable.
if ( ! is_readable( $config_file ) ) {
trigger_error(
sprintf(
esc_html( $this->messages['no_config'] ),
'<code>config.json</code>',
sprintf( '<code>%s</code>', esc_html( $pack_path ) )
)
);
return false;
}
$config = json_decode( file_get_contents( $config_file ), true );
$errors = json_last_error();
if ( ! empty( $errors ) ) {
trigger_error(
sprintf(
esc_html( $this->messages['config_error'] ),
sprintf( '<code>%s/config.json</code>', esc_html( $pack_path ) )
)
);
return false;
}
$keys = array( 'name', 'glyphs', 'css_prefix_text' );
$items = array();
// Check each required config.
foreach ( $keys as $key ) {
if ( empty( $config[ $key ] ) ) {
trigger_error(
sprintf(
esc_html( $this->messages['invalid'] ),
sprintf( '<code><em>%s</em></code>', esc_html( $key ) ),
esc_html( $config_file )
)
);
return false;
}
}
// Bail if no glyphs found.
if ( ! is_array( $config['glyphs'] ) || empty( $config['glyphs'] ) ) {
return false;
}
foreach ( $config['glyphs'] as $glyph ) {
if ( ! empty( $glyph['css'] ) ) {
$items[] = array(
'id' => $config['css_prefix_text'] . $glyph['css'],
'name' => $glyph['css'],
);
}
}
if ( empty( $items ) ) {
return false;
}
$pack_data = array(
'id' => "pack-{$config['name']}",
'name' => sprintf( __( 'Pack: %s', 'icon-picker' ), $config['name'] ),
'version' => $pack_dir->getMTime(),
'items' => $items,
'stylesheet_uri' => "{$this->url}/{$pack_dirname}/css/{$config['name']}.css",
'dir' => "{$this->dir}/{$pack_dirname}",
'url' => "{$this->url}/{$pack_dirname}",
);
set_transient( $cache_id, $pack_data, DAY_IN_SECONDS );
return $pack_data;
}
}

View File

@ -0,0 +1,335 @@
<?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
}
}

View File

@ -0,0 +1,178 @@
<?php
/**
* Icon types registry
*
* @package Icon_Picker
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
final class Icon_Picker_Types_Registry {
/**
* Icon_Picker_Types_Registry singleton
*
* @static
* @since 0.1.0
* @access protected
* @var Icon_Picker_Types_Registry
*/
protected static $instance;
/**
* Base icon type class name
*
* @access protected
* @since 0.1.0
* @var string
*/
protected $base_class = 'Icon_Picker_Type';
/**
* All types
*
* @access protected
* @since 0.1.0
* @var array
*/
protected $types = array();
/**
* Get instance
*
* @static
* @since 0.1.0
* @param array $args Arguments.
*
* @return Icon_Picker_Types_Registry
*/
public static function instance( $args = array() ) {
if ( is_null( self::$instance ) ) {
self::$instance = new self( $args );
}
return self::$instance;
}
/**
* 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;
}
/**
* Setter magic
*
* @since 0.1.0
* @return bool
*/
public function __isset( $name ) {
return isset( $this->$name );
}
/**
* Constructor
*
* @since 0.1.0
* @access protected
* @return Icon_Picker_Types_Registry
*/
protected function __construct() {
/**
* Fires when Icon Picker types registry is ready
*
* @since 0.1.0
* @param Icon_Picker_Types_Registry $this Icon_Picker_Types_Registry instance.
*/
do_action( 'icon_picker_types_registry_init', $this );
}
/**
* Register icon type
*
* @since 0.1.0
* @param Icon_Picker_Type $type Icon type.
* @return void
*/
public function add( Icon_Picker_Type $type ) {
if ( $this->is_valid_type( $type ) ) {
$this->types[ $type->id ] = $type;
}
}
/**
* Get icon type
*
* @since 0.1.0
* @param string $id Icon type ID.
* @return mixed Icon type or NULL if it's not registered.
*/
public function get( $id ) {
if ( isset( $this->types[ $id ] ) ) {
return $this->types[ $id ];
}
return null;
}
/**
* Check if icon type is valid
*
* @since 0.1.0
* @param Icon_Picker_Type $type Icon type.
* @return bool
*/
protected function is_valid_type( Icon_Picker_Type $type ) {
foreach ( array( 'id', 'controller' ) as $var ) {
$value = $type->$var;
if ( empty( $value ) ) {
trigger_error( esc_html( sprintf( 'Icon Picker: "%s" cannot be empty.', $var ) ) );
return false;
}
}
if ( isset( $this->types[ $type->id ] ) ) {
trigger_error( esc_html( sprintf( 'Icon Picker: Icon type %s is already registered. Please use a different ID.', $type->id ) ) );
return false;
}
return true;
}
/**
* Get all icon types for JS
*
* @since 0.1.0
* @return array
*/
public function get_types_for_js() {
$types = array();
$names = array();
foreach ( $this->types as $type ) {
$types[ $type->id ] = $type->get_props();
$names[ $type->id ] = $type->name;
}
array_multisort( $names, SORT_ASC, $types );
return $types;
}
}

View File

@ -0,0 +1,152 @@
<?php
/**
* Icon type handler
*
* @package Icon_Picker
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
/**
* Base icon type class
*/
class Icon_Picker_Type {
/**
* Icon type ID
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $id = '';
/**
* Icon type name
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $name = '';
/**
* Icon type version
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $version = '';
/**
* JS Controller
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $controller = '';
/**
* Constructor
*
* Supplied $args override class property defaults.
*
* @since 0.1.0
* @param array $args Optional. Arguments to override class property defaults.
*/
public function __construct( $args = array() ) {
$keys = array_keys( get_object_vars( $this ) );
foreach ( $keys as $key ) {
if ( isset( $args[ $key ] ) ) {
$this->$key = $args[ $key ];
}
}
}
/**
* Getter magic
*
* @since 0.1.0
* @param string $name Property name
* @return mixed NULL if attribute doesn't exist.
*/
public function __get( $name ) {
$vars = get_object_vars( $this );
if ( isset( $vars[ $name ] ) ) {
return $vars[ $name ];
}
$method = "get_{$name}";
if ( method_exists( $this, $method ) ) {
return call_user_func( array( $this, $method ) );
}
return null;
}
/**
* Setter magic
*
* @since 0.1.0
* @return bool
*/
public function __isset( $name ) {
return ( isset( $this->$name ) || method_exists( $this, "get_{$name}" ) );
}
/**
* Get extra properties data
*
* @since 0.1.0
* @access protected
* @return array
*/
protected function get_props_data() {
return array();
}
/**
* Get properties
*
* @since 0.1.0
* @return array
*/
public function get_props() {
$props = array(
'id' => $this->id,
'name' => $this->name,
'controller' => $this->controller,
'templateId' => $this->template_id,
'data' => $this->get_props_data(),
);
/**
* Filter icon type properties
*
* @since 0.1.0
* @param array $props Icon type properties.
* @param string $id Icon type ID.
* @param Icon_Picker_Type $type Icon_Picker_Type object.
*/
$props = apply_filters( 'icon_picker_type_props', $props, $this->id, $this );
/**
* Filter icon type properties
*
* @since 0.1.0
* @param array $props Icon type properties.
* @param Icon_Picker_Type $type Icon_Picker_Type object.
*/
$props = apply_filters( "icon_picker_type_props_{$this->id}", $props, $this );
return $props;
}
}

View File

@ -0,0 +1,205 @@
<?php
/**
* Base font icon handler
*
* @package Icon_Picker
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
require_once dirname( __FILE__ ) . '/base.php';
/**
* Generic handler for icon fonts
*
*/
abstract class Icon_Picker_Type_Font extends Icon_Picker_Type {
/**
* Stylesheet ID
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $stylesheet_id = '';
/**
* JS Controller
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $controller = 'Font';
/**
* Template ID
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $template_id = 'font';
/**
* Get icon groups
*
* @since 0.1.0
* @return array
*/
public function get_groups() {}
/**
* Get icon names
*
* @since 0.1.0
* @return array
*/
public function get_items() {}
/**
* Get stylesheet URI
*
* @since 0.1.0
* @return string
*/
public function get_stylesheet_uri() {
$stylesheet_uri = sprintf(
'%1$s/css/types/%2$s%3$s.css',
Icon_Picker::instance()->url,
$this->stylesheet_id,
( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min'
);
/**
* Filters icon type's stylesheet URI
*
* @since 0.4.0
*
* @param string $stylesheet_uri Icon type's stylesheet URI.
* @param string $icon_type_id Icon type's ID.
* @param Icon_Picker_Type_Font $icon_type Icon type's instance.
*
* @return string
*/
$stylesheet_uri = apply_filters(
'icon_picker_icon_type_stylesheet_uri',
$stylesheet_uri,
$this->id,
$this
);
return $stylesheet_uri;
}
/**
* Register assets
*
* @since 0.1.0
* @wp_hook action icon_picker_loader_init
*
* @param Icon_Picker_Loader $loader Icon_Picker_Loader instance.
*
* @return void
*/
public function register_assets( Icon_Picker_Loader $loader ) {
if ( empty( $this->stylesheet_uri ) ) {
return;
}
$register = true;
$deps = false;
$styles = wp_styles();
/**
* When the stylesheet ID of an icon type is already registered,
* we'll compare its version with ours. If our stylesheet has greater
* version number, we'll deregister the other stylesheet.
*/
if ( $styles->query( $this->stylesheet_id, 'registered' ) ) {
$object = $styles->registered[ $this->stylesheet_id ];
if ( version_compare( $object->ver, $this->version, '<' ) ) {
$deps = $object->deps;
wp_deregister_style( $this->stylesheet_id );
} else {
$register = false;
}
}
if ( $register ) {
wp_register_style( $this->stylesheet_id, $this->stylesheet_uri, $deps, $this->version );
}
$loader->add_style( $this->stylesheet_id );
}
/**
* Constructor
*
* @since 0.1.0
* @param array $args Optional arguments passed to parent class.
*/
public function __construct( array $args = array() ) {
parent::__construct( $args );
if ( empty( $this->stylesheet_id ) ) {
$this->stylesheet_id = $this->id;
}
add_action( 'icon_picker_loader_init', array( $this, 'register_assets' ) );
}
/**
* Get extra properties data
*
* @since 0.1.0
* @access protected
* @return array
*/
protected function get_props_data() {
return array(
'groups' => $this->groups,
'items' => $this->items,
);
}
/**
* Get media templates
*
* @since 0.1.0
* @return array
*/
public function get_templates() {
$templates = array(
'icon' => '<i class="_icon {{data.type}} {{ data.icon }}"></i>',
'item' => sprintf(
'<div class="attachment-preview js--select-attachment">
<div class="thumbnail">
<span class="_icon"><i class="{{data.type}} {{ data.id }}"></i></span>
<div class="filename"><div>{{ data.name }}</div></div>
</div>
</div>
<a class="check" href="#" title="%s"><div class="media-modal-icon"></div></a>',
esc_attr__( 'Deselect', 'icon-picker' )
),
);
/**
* Filter media templates
*
* @since 0.1.0
* @param array $templates Media templates.
*/
$templates = apply_filters( 'icon_picker_font_media_templates', $templates );
return $templates;
}
}

View File

@ -0,0 +1,55 @@
<?php
/**
* Fontello Pack
*
* @package Icon_Picker
* @author Dzikri Aziz <kvcrvt@gmail.com>
* @author Joshua F. Rountree <joshua@swodev.com>
*/
require_once dirname( __FILE__ ) . '/font.php';
/**
* Icon type: Fontello
*
* @version 0.1.0
*/
class Icon_Picker_Type_Fontello extends Icon_Picker_Type_Font {
/**
* Stylesheet URI
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $stylesheet_uri;
/**
* Icon pack directory path
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $dir;
/**
* Icon pack directory url
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $url;
/**
* Items
*
* @since 0.1.0
* @access protected
* @var array
*/
protected $items;
}

View File

@ -0,0 +1,856 @@
<?php
/**
* Genericons
*
* @package Icon_Picker
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
class Icon_Picker_Type_Genericons extends Icon_Picker_Type_Font {
/**
* Icon type ID
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $id = 'genericon';
/**
* Icon type name
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $name = 'Genericons';
/**
* Icon type version
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $version = '3.4';
/**
* Stylesheet ID
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $stylesheet_id = 'genericons';
/**
* Get icon groups
*
* @since 0.1.0
* @return array
*/
public function get_groups() {
$groups = array(
array(
'id' => 'actions',
'name' => __( 'Actions', 'icon-picker' ),
),
array(
'id' => 'media-player',
'name' => __( 'Media Player', 'icon-picker' ),
),
array(
'id' => 'meta',
'name' => __( 'Meta', 'icon-picker' ),
),
array(
'id' => 'misc',
'name' => __( 'Misc.', 'icon-picker' ),
),
array(
'id' => 'places',
'name' => __( 'Places', 'icon-picker' ),
),
array(
'id' => 'post-formats',
'name' => __( 'Post Formats', 'icon-picker' ),
),
array(
'id' => 'text-editor',
'name' => __( 'Text Editor', 'icon-picker' ),
),
array(
'id' => 'social',
'name' => __( 'Social', 'icon-picker' ),
),
);
/**
* Filter genericon groups
*
* @since 0.1.0
* @param array $groups Icon groups.
*/
$groups = apply_filters( 'icon_picker_genericon_groups', $groups );
return $groups;
}
/**
* Get icon names
*
* @since 0.1.0
* @return array
*/
public function get_items() {
$items = array(
array(
'group' => 'actions',
'id' => 'genericon-checkmark',
'name' => __( 'Checkmark', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-close',
'name' => __( 'Close', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-close-alt',
'name' => __( 'Close', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-dropdown',
'name' => __( 'Dropdown', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-dropdown-left',
'name' => __( 'Dropdown left', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-collapse',
'name' => __( 'Collapse', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-expand',
'name' => __( 'Expand', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-help',
'name' => __( 'Help', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-info',
'name' => __( 'Info', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-lock',
'name' => __( 'Lock', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-maximize',
'name' => __( 'Maximize', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-minimize',
'name' => __( 'Minimize', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-plus',
'name' => __( 'Plus', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-minus',
'name' => __( 'Minus', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-previous',
'name' => __( 'Previous', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-next',
'name' => __( 'Next', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-move',
'name' => __( 'Move', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-hide',
'name' => __( 'Hide', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-show',
'name' => __( 'Show', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-print',
'name' => __( 'Print', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-rating-empty',
'name' => __( 'Rating: Empty', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-rating-half',
'name' => __( 'Rating: Half', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-rating-full',
'name' => __( 'Rating: Full', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-refresh',
'name' => __( 'Refresh', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-reply',
'name' => __( 'Reply', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-reply-alt',
'name' => __( 'Reply alt', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-reply-single',
'name' => __( 'Reply single', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-search',
'name' => __( 'Search', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-send-to-phone',
'name' => __( 'Send to', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-send-to-tablet',
'name' => __( 'Send to', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-share',
'name' => __( 'Share', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-shuffle',
'name' => __( 'Shuffle', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-spam',
'name' => __( 'Spam', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-subscribe',
'name' => __( 'Subscribe', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-subscribed',
'name' => __( 'Subscribed', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-unsubscribe',
'name' => __( 'Unsubscribe', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-top',
'name' => __( 'Top', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-unapprove',
'name' => __( 'Unapprove', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-zoom',
'name' => __( 'Zoom', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-unzoom',
'name' => __( 'Unzoom', 'icon-picker' ),
),
array(
'group' => 'actions',
'id' => 'genericon-xpost',
'name' => __( 'X-Post', 'icon-picker' ),
),
array(
'group' => 'media-player',
'id' => 'genericon-skip-back',
'name' => __( 'Skip back', 'icon-picker' ),
),
array(
'group' => 'media-player',
'id' => 'genericon-rewind',
'name' => __( 'Rewind', 'icon-picker' ),
),
array(
'group' => 'media-player',
'id' => 'genericon-play',
'name' => __( 'Play', 'icon-picker' ),
),
array(
'group' => 'media-player',
'id' => 'genericon-pause',
'name' => __( 'Pause', 'icon-picker' ),
),
array(
'group' => 'media-player',
'id' => 'genericon-stop',
'name' => __( 'Stop', 'icon-picker' ),
),
array(
'group' => 'media-player',
'id' => 'genericon-fastforward',
'name' => __( 'Fast Forward', 'icon-picker' ),
),
array(
'group' => 'media-player',
'id' => 'genericon-skip-ahead',
'name' => __( 'Skip ahead', 'icon-picker' ),
),
array(
'group' => 'meta',
'id' => 'genericon-comment',
'name' => __( 'Comment', 'icon-picker' ),
),
array(
'group' => 'meta',
'id' => 'genericon-category',
'name' => __( 'Category', 'icon-picker' ),
),
array(
'group' => 'meta',
'id' => 'genericon-hierarchy',
'name' => __( 'Hierarchy', 'icon-picker' ),
),
array(
'group' => 'meta',
'id' => 'genericon-tag',
'name' => __( 'Tag', 'icon-picker' ),
),
array(
'group' => 'meta',
'id' => 'genericon-time',
'name' => __( 'Time', 'icon-picker' ),
),
array(
'group' => 'meta',
'id' => 'genericon-user',
'name' => __( 'User', 'icon-picker' ),
),
array(
'group' => 'meta',
'id' => 'genericon-day',
'name' => __( 'Day', 'icon-picker' ),
),
array(
'group' => 'meta',
'id' => 'genericon-week',
'name' => __( 'Week', 'icon-picker' ),
),
array(
'group' => 'meta',
'id' => 'genericon-month',
'name' => __( 'Month', 'icon-picker' ),
),
array(
'group' => 'meta',
'id' => 'genericon-pinned',
'name' => __( 'Pinned', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-uparrow',
'name' => __( 'Arrow Up', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-downarrow',
'name' => __( 'Arrow Down', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-leftarrow',
'name' => __( 'Arrow Left', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-rightarrow',
'name' => __( 'Arrow Right', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-activity',
'name' => __( 'Activity', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-bug',
'name' => __( 'Bug', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-book',
'name' => __( 'Book', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-cart',
'name' => __( 'Cart', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-cloud-download',
'name' => __( 'Cloud Download', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-cloud-upload',
'name' => __( 'Cloud Upload', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-cog',
'name' => __( 'Cog', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-document',
'name' => __( 'Document', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-dot',
'name' => __( 'Dot', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-download',
'name' => __( 'Download', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-draggable',
'name' => __( 'Draggable', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-ellipsis',
'name' => __( 'Ellipsis', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-external',
'name' => __( 'External', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-feed',
'name' => __( 'Feed', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-flag',
'name' => __( 'Flag', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-fullscreen',
'name' => __( 'Fullscreen', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-handset',
'name' => __( 'Handset', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-heart',
'name' => __( 'Heart', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-key',
'name' => __( 'Key', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-mail',
'name' => __( 'Mail', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-menu',
'name' => __( 'Menu', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-microphone',
'name' => __( 'Microphone', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-notice',
'name' => __( 'Notice', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-paintbrush',
'name' => __( 'Paint Brush', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-phone',
'name' => __( 'Phone', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-picture',
'name' => __( 'Picture', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-plugin',
'name' => __( 'Plugin', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-portfolio',
'name' => __( 'Portfolio', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-star',
'name' => __( 'Star', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-summary',
'name' => __( 'Summary', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-tablet',
'name' => __( 'Tablet', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-videocamera',
'name' => __( 'Video Camera', 'icon-picker' ),
),
array(
'group' => 'misc',
'id' => 'genericon-warning',
'name' => __( 'Warning', 'icon-picker' ),
),
array(
'group' => 'places',
'id' => 'genericon-404',
'name' => __( '404', 'icon-picker' ),
),
array(
'group' => 'places',
'id' => 'genericon-trash',
'name' => __( 'Trash', 'icon-picker' ),
),
array(
'group' => 'places',
'id' => 'genericon-cloud',
'name' => __( 'Cloud', 'icon-picker' ),
),
array(
'group' => 'places',
'id' => 'genericon-home',
'name' => __( 'Home', 'icon-picker' ),
),
array(
'group' => 'places',
'id' => 'genericon-location',
'name' => __( 'Location', 'icon-picker' ),
),
array(
'group' => 'places',
'id' => 'genericon-sitemap',
'name' => __( 'Sitemap', 'icon-picker' ),
),
array(
'group' => 'places',
'id' => 'genericon-website',
'name' => __( 'Website', 'icon-picker' ),
),
array(
'group' => 'post-formats',
'id' => 'genericon-standard',
'name' => __( 'Standard', 'icon-picker' ),
),
array(
'group' => 'post-formats',
'id' => 'genericon-aside',
'name' => __( 'Aside', 'icon-picker' ),
),
array(
'group' => 'post-formats',
'id' => 'genericon-image',
'name' => __( 'Image', 'icon-picker' ),
),
array(
'group' => 'post-formats',
'id' => 'genericon-gallery',
'name' => __( 'Gallery', 'icon-picker' ),
),
array(
'group' => 'post-formats',
'id' => 'genericon-video',
'name' => __( 'Video', 'icon-picker' ),
),
array(
'group' => 'post-formats',
'id' => 'genericon-status',
'name' => __( 'Status', 'icon-picker' ),
),
array(
'group' => 'post-formats',
'id' => 'genericon-quote',
'name' => __( 'Quote', 'icon-picker' ),
),
array(
'group' => 'post-formats',
'id' => 'genericon-link',
'name' => __( 'Link', 'icon-picker' ),
),
array(
'group' => 'post-formats',
'id' => 'genericon-chat',
'name' => __( 'Chat', 'icon-picker' ),
),
array(
'group' => 'post-formats',
'id' => 'genericon-audio',
'name' => __( 'Audio', 'icon-picker' ),
),
array(
'group' => 'text-editor',
'id' => 'genericon-anchor',
'name' => __( 'Anchor', 'icon-picker' ),
),
array(
'group' => 'text-editor',
'id' => 'genericon-attachment',
'name' => __( 'Attachment', 'icon-picker' ),
),
array(
'group' => 'text-editor',
'id' => 'genericon-edit',
'name' => __( 'Edit', 'icon-picker' ),
),
array(
'group' => 'text-editor',
'id' => 'genericon-code',
'name' => __( 'Code', 'icon-picker' ),
),
array(
'group' => 'text-editor',
'id' => 'genericon-bold',
'name' => __( 'Bold', 'icon-picker' ),
),
array(
'group' => 'text-editor',
'id' => 'genericon-italic',
'name' => __( 'Italic', 'icon-picker' ),
),
array(
'group' => 'social',
'id' => 'genericon-codepen',
'name' => 'CodePen',
),
array(
'group' => 'social',
'id' => 'genericon-digg',
'name' => 'Digg',
),
array(
'group' => 'social',
'id' => 'genericon-dribbble',
'name' => 'Dribbble',
),
array(
'group' => 'social',
'id' => 'genericon-dropbox',
'name' => 'DropBox',
),
array(
'group' => 'social',
'id' => 'genericon-facebook',
'name' => 'Facebook',
),
array(
'group' => 'social',
'id' => 'genericon-facebook-alt',
'name' => 'Facebook',
),
array(
'group' => 'social',
'id' => 'genericon-flickr',
'name' => 'Flickr',
),
array(
'group' => 'social',
'id' => 'genericon-foursquare',
'name' => 'Foursquare',
),
array(
'group' => 'social',
'id' => 'genericon-github',
'name' => 'GitHub',
),
array(
'group' => 'social',
'id' => 'genericon-googleplus',
'name' => 'Google+',
),
array(
'group' => 'social',
'id' => 'genericon-googleplus-alt',
'name' => 'Google+',
),
array(
'group' => 'social',
'id' => 'genericon-instagram',
'name' => 'Instagram',
),
array(
'group' => 'social',
'id' => 'genericon-linkedin',
'name' => 'LinkedIn',
),
array(
'group' => 'social',
'id' => 'genericon-linkedin-alt',
'name' => 'LinkedIn',
),
array(
'group' => 'social',
'id' => 'genericon-path',
'name' => 'Path',
),
array(
'group' => 'social',
'id' => 'genericon-pinterest',
'name' => 'Pinterest',
),
array(
'group' => 'social',
'id' => 'genericon-pinterest-alt',
'name' => 'Pinterest',
),
array(
'group' => 'social',
'id' => 'genericon-pocket',
'name' => 'Pocket',
),
array(
'group' => 'social',
'id' => 'genericon-polldaddy',
'name' => 'PollDaddy',
),
array(
'group' => 'social',
'id' => 'genericon-reddit',
'name' => 'Reddit',
),
array(
'group' => 'social',
'id' => 'genericon-skype',
'name' => 'Skype',
),
array(
'group' => 'social',
'id' => 'genericon-spotify',
'name' => 'Spotify',
),
array(
'group' => 'social',
'id' => 'genericon-stumbleupon',
'name' => 'StumbleUpon',
),
array(
'group' => 'social',
'id' => 'genericon-tumblr',
'name' => 'Tumblr',
),
array(
'group' => 'social',
'id' => 'genericon-twitch',
'name' => 'Twitch',
),
array(
'group' => 'social',
'id' => 'genericon-twitter',
'name' => 'Twitter',
),
array(
'group' => 'social',
'id' => 'genericon-vimeo',
'name' => 'Vimeo',
),
array(
'group' => 'social',
'id' => 'genericon-wordpress',
'name' => 'WordPress',
),
array(
'group' => 'social',
'id' => 'genericon-youtube',
'name' => 'Youtube',
),
);
/**
* Filter genericon items
*
* @since 0.1.0
* @param array $items Icon names.
*/
$items = apply_filters( 'icon_picker_genericon_items', $items );
return $items;
}
}

View File

@ -0,0 +1,126 @@
<?php
/**
* Image icon handler
*
* @package Icon_Picker
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
require_once dirname( __FILE__ ) . '/base.php';
/**
* Image icon
*
*/
class Icon_Picker_Type_Image extends Icon_Picker_Type {
/**
* Icon type ID
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $id = 'image';
/**
* JS Controller
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $controller = 'Img';
/**
* Template ID
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $template_id = 'image';
/**
* Constructor
*
* @since 0.1.0
* @param array $args Misc. arguments.
*/
public function __construct( $args = array() ) {
if ( empty( $this->name ) ) {
$this->name = __( 'Image', 'icon-picker' );
}
parent::__construct( $args );
}
/**
* Get extra properties data
*
* @since 0.1.0
* @access protected
* @return array
*/
protected function get_props_data() {
return array(
'mimeTypes' => $this->get_image_mime_types(),
);
return $props;
}
/**
* Get media templates
*
* @since 0.2.0
* @return array
*/
public function get_templates() {
$templates = array(
'icon' => '<img src="{{ data.url }}" class="_icon" />',
);
/**
* Filter media templates
*
* @since 0.1.0
* @param array $templates Media templates.
*/
$templates = apply_filters( 'icon_picker_image_media_templates', $templates );
return $templates;
}
/**
* Get image mime types
*
* @since 0.1.0
* @return array
*/
protected function get_image_mime_types() {
$mime_types = get_allowed_mime_types();
foreach ( $mime_types as $id => $type ) {
if ( false === strpos( $type, 'image/' ) ) {
unset( $mime_types[ $id ] );
}
}
/**
* Filter image mime types
*
* @since 0.1.0
* @param array $mime_types Image mime types.
*/
$mime_types = apply_filters( 'icon_picker_image_mime_types', $mime_types );
// We need to exclude image/svg*.
unset( $mime_types['svg'] );
return $mime_types;
}
}

View File

@ -0,0 +1,124 @@
<?php
/**
* SVG icon handler
*
* @package Icon_Picker
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
require_once dirname( __FILE__ ) . '/image.php';
/**
* Image icon
*
*/
class Icon_Picker_Type_Svg extends Icon_Picker_Type_Image {
/**
* Icon type ID
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $id = 'svg';
/**
* Template ID
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $template_id = 'svg';
/**
* Mime type
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $mime_type = 'image/svg+xml';
/**
* Constructor
*
* @since 0.1.0
* @param array $args Misc. arguments.
*/
public function __construct( $args = array() ) {
$this->name = __( 'SVG', 'icon-picker' );
parent::__construct( $args );
add_filter( 'upload_mimes', array( $this, '_add_mime_type' ) );
}
/**
* Add SVG support
*
* @since 0.1.0
* @wp_hook filter upload_mimes
* @link https://codex.wordpress.org/Plugin_API/Filter_Reference/upload_mimes
* @author Ethan Clevenger (GitHub: ethanclevenger91; email: ethan.c.clevenger@gmail.com)
*
* @return array
*/
public function _add_mime_type( array $mimes ) {
if ( ! isset( $mimes['svg'] ) ) {
$mimes['svg'] = $this->mime_type;
}
return $mimes;
}
/**
* Get extra properties data
*
* @since 0.1.0
* @access protected
* @return array
*/
protected function get_props_data() {
return array(
'mimeTypes' => array( $this->mime_type ),
);
}
/**
* Media templates
*
* @since 0.1.0
* @return array
*/
public function get_templates() {
$templates = array(
'icon' => '<img src="{{ data.url }}" class="_icon" />',
'item' => sprintf(
'<div class="attachment-preview js--select-attachment svg-icon">
<div class="thumbnail">
<div class="centered">
<img src="{{ data.url }}" alt="{{ data.alt }}" class="_icon _{{data.type}}" />
</div>
</div>
</div>
<a class="check" href="#" title="%s"><div class="media-modal-icon"></div></a>',
esc_attr__( 'Deselect', 'menu-icons' )
),
);
/**
* Filter media templates
*
* @since 0.1.0
* @param array $templates Media templates.
*/
$templates = apply_filters( 'icon_picker_svg_media_templates', $templates );
return $templates;
}
}