2018-12-04 14:01:14 +01:00
< ? php
if ( ! defined ( 'ABSPATH' ) ) exit ; // Exit if accessed directly
if ( ! class_exists ( 'ACF_Assets' ) ) :
class ACF_Assets {
2021-08-04 17:09:29 +02:00
/**
* Storage for i18n data .
*
* @ since 5.6 . 9
* @ var array
*/
public $text = array ();
2018-12-04 14:01:14 +01:00
/**
2021-08-04 17:09:29 +02:00
* Storage for l10n data .
*
* @ since 5.6 . 9
* @ var array
*/
public $data = array ();
/**
* List of enqueue flags .
*
* @ since 5.9 . 0
* @ var bool
*/
private $enqueue = array ();
/**
* Constructor .
*
* @ date 10 / 4 / 18
* @ since 5.6 . 9
*
* @ param void
* @ return void
*/
public function __construct () {
add_action ( 'init' , array ( $this , 'register_scripts' ) );
2018-12-04 14:01:14 +01:00
}
2021-08-04 17:09:29 +02:00
2018-12-04 14:01:14 +01:00
/**
2021-08-04 17:09:29 +02:00
* Magic __call method for backwards compatibility .
*
* @ date 10 / 4 / 20
* @ since 5.9 . 0
*
* @ param string $name The method name .
* @ param array $arguments The array of arguments .
* @ return mixed
*/
public function __call ( $name , $arguments ) {
switch ( $name ) {
case 'admin_enqueue_scripts' :
case 'admin_print_scripts' :
case 'admin_head' :
case 'admin_footer' :
case 'admin_print_footer_scripts' :
_doing_it_wrong ( __FUNCTION__ , 'The ACF_Assets class should not be accessed directly.' , '5.9.0' );
}
}
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
/**
* Appends an array of i18n data .
*
* @ date 13 / 4 / 18
* @ since 5.6 . 9
*
* @ param array $text An array of text for i18n .
* @ return void
*/
public function add_text ( $text ) {
2018-12-04 14:01:14 +01:00
foreach ( ( array ) $text as $k => $v ) {
$this -> text [ $k ] = $v ;
}
}
/**
2021-08-04 17:09:29 +02:00
* Appends an array of l10n data .
*
* @ date 13 / 4 / 18
* @ since 5.6 . 9
*
* @ param array $data An array of data for l10n .
* @ return void
*/
public function add_data ( $data ) {
2018-12-04 14:01:14 +01:00
foreach ( ( array ) $data as $k => $v ) {
$this -> data [ $k ] = $v ;
}
}
/**
2021-08-04 17:09:29 +02:00
* Registers the ACF scripts and styles .
*
* @ date 10 / 4 / 18
* @ since 5.6 . 9
*
* @ param void
* @ return void
*/
public function register_scripts () {
// Extract vars.
$suffix = defined ( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min' ;
2018-12-04 14:01:14 +01:00
$version = acf_get_setting ( 'version' );
2021-08-04 17:09:29 +02:00
// Register scripts.
wp_register_script ( 'acf' , acf_get_url ( 'assets/build/js/acf' . $suffix . '.js' ), array ( 'jquery' ), $version );
wp_register_script ( 'acf-input' , acf_get_url ( 'assets/build/js/acf-input' . $suffix . '.js' ), array ( 'jquery' , 'jquery-ui-sortable' , 'jquery-ui-resizable' , 'acf' ), $version );
wp_register_script ( 'acf-field-group' , acf_get_url ( 'assets/build/js/acf-field-group' . $suffix . '.js' ), array ( 'acf-input' ), $version );
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
// Register styles.
wp_register_style ( 'acf-global' , acf_get_url ( 'assets/build/css/acf-global.css' ), array ( 'dashicons' ), $version );
wp_register_style ( 'acf-input' , acf_get_url ( 'assets/build/css/acf-input.css' ), array ( 'acf-global' ), $version );
wp_register_style ( 'acf-field-group' , acf_get_url ( 'assets/build/css/acf-field-group.css' ), array ( 'acf-input' ), $version );
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
/**
* Fires after core scripts and styles have been registered .
*
* @ since 5.6 . 9
*
* @ param string $version The ACF version .
* @ param string $suffix The potential " .min " filename suffix .
*/
do_action ( 'acf/register_scripts' , $version , $suffix );
2018-12-04 14:01:14 +01:00
}
2021-08-04 17:09:29 +02:00
2018-12-04 14:01:14 +01:00
/**
2021-08-04 17:09:29 +02:00
* Enqueues a script and sets up actions for priting supplemental scripts .
*
* @ date 27 / 4 / 20
* @ since 5.9 . 0
*
* @ param string $name The script name .
* @ return void
*/
public function enqueue_script ( $name ) {
wp_enqueue_script ( $name );
$this -> add_actions ();
}
/**
* Enqueues a style .
*
* @ date 27 / 4 / 20
* @ since 5.9 . 0
*
* @ param string $name The style name .
* @ return void
*/
public function enqueue_style ( $name ) {
wp_enqueue_style ( $name );
}
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
/**
* Adds the actions needed to print supporting inline scripts .
*
* @ date 27 / 4 / 20
* @ since 5.9 . 0
*
* @ param void
* @ return void
*/
private function add_actions () {
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
// Only run once.
if ( acf_has_done ( 'ACF_Assets::add_actions' ) ) {
2018-12-04 14:01:14 +01:00
return ;
}
2021-08-04 17:09:29 +02:00
// Add actions.
$this -> add_action ( 'admin_enqueue_scripts' , 'enqueue_scripts' , 20 );
$this -> add_action ( 'admin_print_scripts' , 'print_scripts' , 20 );
$this -> add_action ( 'admin_print_footer_scripts' , 'print_footer_scripts' , 20 );
}
/**
* Extends the add_action () function with two additional features :
* 1. Renames $action depending on the current page ( customizer , login , front - end ) .
* 2. Alters the priotiry or calls the method directly if the action has already passed .
*
* @ date 28 / 4 / 20
* @ since 5.9 . 0
*
* @ param string $action The action name .
* @ param string $method The method name .
* @ param int $priority See add_action () .
* @ param int $accepted_args See add_action () .
* @ return void
*/
public function add_action ( $action , $method , $priority = 10 , $accepted_args = 1 ) {
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
// Generate an array of action replacements.
$replacements = array (
'customizer' => array (
'admin_enqueue_scripts' => 'admin_enqueue_scripts' ,
'admin_print_scripts' => 'customize_controls_print_scripts' ,
'admin_head' => 'customize_controls_print_scripts' ,
'admin_footer' => 'customize_controls_print_footer_scripts' ,
'admin_print_footer_scripts' => 'customize_controls_print_footer_scripts'
),
'login' => array (
'admin_enqueue_scripts' => 'login_enqueue_scripts' ,
'admin_print_scripts' => 'login_head' ,
'admin_head' => 'login_head' ,
'admin_footer' => 'login_footer' ,
'admin_print_footer_scripts' => 'login_footer'
),
'wp' => array (
'admin_enqueue_scripts' => 'wp_enqueue_scripts' ,
'admin_print_scripts' => 'wp_print_scripts' ,
'admin_head' => 'wp_head' ,
'admin_footer' => 'wp_footer' ,
'admin_print_footer_scripts' => 'wp_print_footer_scripts'
)
2018-12-04 14:01:14 +01:00
);
2021-08-04 17:09:29 +02:00
// Determine the current context.
if ( did_action ( 'customize_controls_init' ) ) {
$context = 'customizer' ;
} elseif ( did_action ( 'login_form_register' ) ) {
$context = 'login' ;
} elseif ( is_admin () ) {
$context = 'admin' ;
} else {
$context = 'wp' ;
2018-12-04 14:01:14 +01:00
}
2021-08-04 17:09:29 +02:00
// Replace action if possible.
if ( isset ( $replacements [ $context ][ $action ] ) ) {
$action = $replacements [ $context ][ $action ];
2018-12-04 14:01:14 +01:00
}
2021-08-04 17:09:29 +02:00
// Check if action is currently being or has already been run.
if ( did_action ( $action ) ) {
$doing = acf_doing_action ( $action );
if ( $doing && $doing < $priority ) {
// Allow action to be added as per usual.
} else {
// Call method directly.
return call_user_func ( array ( $this , $method ) );
}
}
// Add action.
add_action ( $action , array ( $this , $method ), $priority , $accepted_args );
}
/**
* Generic controller for enqueuing scripts and styles .
*
* @ date 28 / 4 / 20
* @ since 5.9 . 0
*
* @ param array $args {
* @ type bool $uploader Whether or not to enqueue uploader scripts .
* }
* @ return void
*/
public function enqueue ( $args = array () ) {
// Apply defaults.
$args = wp_parse_args ( $args , array (
'input' => true ,
'uploader' => false
));
// Set enqueue flags and add actions.
if ( $args [ 'input' ] ) {
$this -> enqueue [] = 'input' ;
}
2018-12-04 14:01:14 +01:00
if ( $args [ 'uploader' ] ) {
2021-08-04 17:09:29 +02:00
$this -> enqueue [] = 'uploader' ;
}
$this -> add_actions ();
}
/**
* Enqueues the scripts and styles needed for the WP media uploader .
*
* @ date 27 / 10 / 2014
* @ since 5.0 . 9
*
* @ param void
* @ return void
*/
public function enqueue_uploader () {
// Only run once.
if ( acf_has_done ( 'ACF_Assets::enqueue_uploader' ) ) {
return ;
}
// Enqueue media assets.
if ( current_user_can ( 'upload_files' ) ) {
wp_enqueue_media ();
2018-12-04 14:01:14 +01:00
}
2021-08-04 17:09:29 +02:00
// Add actions.
$this -> add_action ( 'admin_footer' , 'print_uploader_scripts' , 1 );
/**
* Fires when enqueuing the uploader .
*
* @ since 5.6 . 9
*
* @ param void
*/
do_action ( 'acf/enqueue_uploader' );
}
/**
* Enqueues and localizes scripts .
*
* @ date 27 / 4 / 20
* @ since 5.9 . 0
*
* @ param void
* @ return void
*/
public function enqueue_scripts () {
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
// Enqueue input scripts.
if ( in_array ( 'input' , $this -> enqueue ) ) {
wp_enqueue_script ( 'acf-input' );
wp_enqueue_style ( 'acf-input' );
}
// Enqueue media scripts.
if ( in_array ( 'uploader' , $this -> enqueue ) ) {
$this -> enqueue_uploader ();
}
// Localize text.
2018-12-04 14:01:14 +01:00
acf_localize_text ( array (
2021-08-04 17:09:29 +02:00
// Tooltip
2018-12-04 14:01:14 +01:00
'Are you sure?' => __ ( 'Are you sure?' , 'acf' ),
'Yes' => __ ( 'Yes' , 'acf' ),
'No' => __ ( 'No' , 'acf' ),
'Remove' => __ ( 'Remove' , 'acf' ),
'Cancel' => __ ( 'Cancel' , 'acf' ),
));
2021-08-04 17:09:29 +02:00
// Localize "input" text.
if ( wp_script_is ( 'acf-input' ) ) {
acf_localize_text ( array (
// Unload
'The changes you made will be lost if you navigate away from this page' => __ ( 'The changes you made will be lost if you navigate away from this page' , 'acf' ),
// Validation
'Validation successful' => __ ( 'Validation successful' , 'acf' ),
'Validation failed' => __ ( 'Validation failed' , 'acf' ),
'1 field requires attention' => __ ( '1 field requires attention' , 'acf' ),
'%d fields require attention' => __ ( '%d fields require attention' , 'acf' ),
// Other
'Edit field group' => __ ( 'Edit field group' , 'acf' ),
));
/**
* Fires during " admin_enqueue_scripts " when ACF scripts are enqueued .
*
* @ since 5.6 . 9
*
* @ param void
*/
do_action ( 'acf/input/admin_enqueue_scripts' );
}
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
/**
* Fires during " admin_enqueue_scripts " when ACF scripts are enqueued .
*
* @ since 5.6 . 9
*
* @ param void
*/
do_action ( 'acf/admin_enqueue_scripts' );
do_action ( 'acf/enqueue_scripts' );
// Filter i18n translations that differ from English and localize script.
2018-12-04 14:01:14 +01:00
$text = array ();
foreach ( $this -> text as $k => $v ) {
if ( str_replace ( '.verb' , '' , $k ) !== $v ) {
$text [ $k ] = $v ;
}
}
if ( $text ) {
2021-08-04 17:09:29 +02:00
wp_localize_script ( 'acf' , 'acfL10n' , $text );
2018-12-04 14:01:14 +01:00
}
}
/**
2021-08-04 17:09:29 +02:00
* Prints scripts in head .
*
* @ date 27 / 4 / 20
* @ since 5.9 . 0
*
* @ param void
* @ return void
*/
public function print_scripts () {
if ( wp_script_is ( 'acf-input' ) ) {
/**
* Fires during " admin_head " when ACF scripts are enqueued .
*
* @ since 5.6 . 9
*
* @ param void
*/
do_action ( 'acf/input/admin_head' );
do_action ( 'acf/input/admin_print_scripts' );
}
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
/**
* Fires during " admin_head " when ACF scripts are enqueued .
*
* @ since 5.6 . 9
*
* @ param void
*/
do_action ( 'acf/admin_head' );
do_action ( 'acf/admin_print_scripts' );
2018-12-04 14:01:14 +01:00
}
/**
2021-08-04 17:09:29 +02:00
* Prints scripts in footer .
*
* @ date 27 / 4 / 20
* @ since 5.9 . 0
*
* @ param void
* @ return void
*/
public function print_footer_scripts () {
2018-12-04 14:01:14 +01:00
global $wp_version ;
2021-08-04 17:09:29 +02:00
// Bail early if 'acf' script was never enqueued (fixes Elementor enqueue reset conflict).
if ( ! wp_script_is ( 'acf' ) ) {
return ;
}
// Localize data.
acf_localize_data ( array (
2018-12-04 14:01:14 +01:00
'admin_url' => admin_url (),
'ajaxurl' => admin_url ( 'admin-ajax.php' ),
2021-08-04 17:09:29 +02:00
'nonce' => wp_create_nonce ( 'acf_nonce' ),
2018-12-04 14:01:14 +01:00
'acf_version' => acf_get_setting ( 'version' ),
2021-08-04 17:09:29 +02:00
'wp_version' => $wp_version ,
2018-12-04 14:01:14 +01:00
'browser' => acf_get_browser (),
'locale' => acf_get_locale (),
2021-08-04 17:09:29 +02:00
'rtl' => is_rtl (),
'screen' => acf_get_form_data ( 'screen' ),
'post_id' => acf_get_form_data ( 'post_id' ),
'validation' => acf_get_form_data ( 'validation' ),
'editor' => acf_is_block_editor () ? 'block' : 'classic'
2018-12-04 14:01:14 +01:00
));
2021-08-04 17:09:29 +02:00
// Print inline script.
printf ( " <script> \n %s \n </script> \n " , 'acf.data = ' . wp_json_encode ( $this -> data ) . ';' );
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
if ( wp_script_is ( 'acf-input' ) ) {
/**
* Filters an empty array for compat l10n data .
*
* @ since 5.0 . 0
*
* @ param array $data An array of data to append to .
*/
$compat_l10n = apply_filters ( 'acf/input/admin_l10n' , array () );
if ( $compat_l10n ) {
printf ( " <script> \n %s \n </script> \n " , 'acf.l10n = ' . wp_json_encode ( $compat_l10n ) . ';' );
}
/**
* Fires during " admin_footer " when ACF scripts are enqueued .
*
* @ since 5.6 . 9
*
* @ param void
*/
do_action ( 'acf/input/admin_footer' );
do_action ( 'acf/input/admin_print_footer_scripts' );
}
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
/**
* Fires during " admin_footer " when ACF scripts are enqueued .
*
* @ since 5.6 . 9
*
* @ param void
*/
do_action ( 'acf/admin_footer' );
do_action ( 'acf/admin_print_footer_scripts' );
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
// Once all data is localized, trigger acf.prepare() to execute functionality before DOM ready.
printf ( " <script> \n %s \n </script> \n " , " acf.doAction( 'prepare' ); " );
2018-12-04 14:01:14 +01:00
}
/**
2021-08-04 17:09:29 +02:00
* Prints uploader scripts in footer .
*
* @ date 11 / 06 / 2020
* @ since 5.9 . 0
*
* @ param void
* @ return void
*/
public function print_uploader_scripts () {
// Todo: investigate output-buffer to hide HTML.
2018-12-04 14:01:14 +01:00
?>
2021-08-04 17:09:29 +02:00
< div id = " acf-hidden-wp-editor " style = " display: none; " >
2018-12-04 14:01:14 +01:00
< ? php wp_editor ( '' , 'acf_content' ); ?>
</ div >
< ? php
2021-08-04 17:09:29 +02:00
/**
* Fires when printing uploader scripts .
*
* @ since 5.6 . 9
*
* @ param void
*/
do_action ( 'acf/admin_print_uploader_scripts' );
2018-12-04 14:01:14 +01:00
}
}
// instantiate
acf_new_instance ( 'ACF_Assets' );
endif ; // class_exists check
/**
2021-08-04 17:09:29 +02:00
* Appends an array of i18n data for localization .
*
* @ date 13 / 4 / 18
* @ since 5.6 . 9
*
* @ param array $text An array of text for i18n .
* @ return void
*/
2018-12-04 14:01:14 +01:00
function acf_localize_text ( $text ) {
return acf_get_instance ( 'ACF_Assets' ) -> add_text ( $text );
}
/**
2021-08-04 17:09:29 +02:00
* Appends an array of l10n data for localization .
*
* @ date 13 / 4 / 18
* @ since 5.6 . 9
*
* @ param array $data An array of data for l10n .
* @ return void
*/
2018-12-04 14:01:14 +01:00
function acf_localize_data ( $data ) {
return acf_get_instance ( 'ACF_Assets' ) -> add_data ( $data );
}
2021-08-04 17:09:29 +02:00
/**
* Enqueues a script with support for supplemental inline scripts .
*
* @ date 27 / 4 / 20
* @ since 5.9 . 0
*
* @ param string $name The script name .
* @ return void
*/
function acf_enqueue_script ( $name ) {
return acf_get_instance ( 'ACF_Assets' ) -> enqueue_script ( $name );
}
2018-12-04 14:01:14 +01:00
2021-08-04 17:09:29 +02:00
/**
* Enqueues the input scripts required for fields .
*
* @ date 13 / 4 / 18
* @ since 5.6 . 9
*
* @ param array $args See ACF_Assets :: enqueue_scripts () for a list of args .
* @ return void
*/
2018-12-04 14:01:14 +01:00
function acf_enqueue_scripts ( $args = array () ) {
2021-08-04 17:09:29 +02:00
return acf_get_instance ( 'ACF_Assets' ) -> enqueue ( $args );
2018-12-04 14:01:14 +01:00
}
2021-08-04 17:09:29 +02:00
/**
* Enqueues the WP media uploader scripts and styles .
*
* @ date 27 / 10 / 2014
* @ since 5.0 . 9
*
* @ param void
* @ return void
*/
2018-12-04 14:01:14 +01:00
function acf_enqueue_uploader () {
return acf_get_instance ( 'ACF_Assets' ) -> enqueue_uploader ();
}