filename_suffix =( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
}
/**
* Add hooks
*/
public function hook() {
// load checkbox css if necessary
add_action( 'wp_enqueue_scripts', array( $this, 'load_stylesheets' ) );
add_action( 'mc4wp_output_form', array( $this, 'before_output_form' ) );
add_action( 'wp_footer', array( $this, 'load_scripts' ) );
$this->register_assets();
}
/**
* Register the various JS files used by the plugin
*
* @deprecated 3.1.9
*/
public function register_assets() {
$suffix = $this->filename_suffix;
/**
* Runs right after all assets (scripts & stylesheets) for forms have been registered
*
* @since 3.0
* @deprecated 3.1.9
*
* @param string $suffix The suffix to add to the filename, before the file extension. Is usually set to ".min".
* @ignore
*/
do_action( 'mc4wp_register_form_assets', $suffix );
}
/**
* @param string $stylesheet
*
* @return bool
*/
public function is_registered_stylesheet( $stylesheet ) {
$stylesheets = $this->get_registered_stylesheets();
return in_array( $stylesheet, $stylesheets );
}
/**
* @return array
*/
public function get_registered_stylesheets() {
return array(
'basic',
'themes'
);
}
/**
* @param string $stylesheet
*
* @return string
*/
public function get_stylesheet_url( $stylesheet ) {
if( ! $this->is_registered_stylesheet( $stylesheet ) ) {
return '';
}
$suffix = $this->filename_suffix;
return MC4WP_PLUGIN_URL . 'assets/css/form-' . $stylesheet . $suffix . '.css';
}
/**
* Get array of stylesheet handles which should be enqueued.
*
* @return array
*/
public function get_active_stylesheets() {
$stylesheets = (array) get_option( 'mc4wp_form_stylesheets', array() );
/**
* Filters the stylesheets to be loaded
*
* Should be an array of stylesheet handles previously registered using `wp_register_style`.
* Each value is prefixed with `mc4wp-form-` to get the handle.
*
* Return an empty array if you want to disable the loading of all stylesheets.
*
* @since 3.0
* @param array $stylesheets Array of valid stylesheet handles
*/
$stylesheets = (array) apply_filters( 'mc4wp_form_stylesheets', $stylesheets );
return $stylesheets;
}
/**
* Load the various stylesheets
*/
public function load_stylesheets( ) {
$stylesheets = $this->get_active_stylesheets();
foreach( $stylesheets as $stylesheet ) {
if( ! $this->is_registered_stylesheet( $stylesheet ) ) {
continue;
}
$handle = 'mc4wp-form-' . $stylesheet;
wp_enqueue_style( $handle, $this->get_stylesheet_url( $stylesheet ), array(), MC4WP_VERSION );
add_editor_style( $this->get_stylesheet_url( $stylesheet ) );
}
/**
* @ignore
*/
do_action( 'mc4wp_load_form_stylesheets', $stylesheets );
return true;
}
/**
* Get configuration object for client-side use.
*
* @return array
*/
public function get_javascript_config() {
$submitted_form = mc4wp_get_submitted_form();
if( ! $submitted_form ) {
return array();
}
$config = array(
'submitted_form' => array(
'id' => $submitted_form->ID,
'data' => $submitted_form->get_data(),
'action' => $submitted_form->config['action'],
'element_id' => $submitted_form->config['element_id'],
)
);
if( $submitted_form->has_errors() ) {
$config['submitted_form']['errors'] = $submitted_form->errors;
}
$auto_scroll = 'default';
/**
* Filters the `auto_scroll` setting for when a form is submitted.
*
* Accepts the following values:
*
* - false
* - "default"
* - "animated"
*
* @param boolean|string $auto_scroll
* @since 3.0
*/
$config['auto_scroll'] = apply_filters( 'mc4wp_form_auto_scroll', $auto_scroll );
return $config;
}
/**
* Load JavaScript files
*/
public function before_output_form() {
// print dummy JS
$this->print_dummy_javascript();
// set flags
$this->load_scripts = true;
}
/**
* Prints dummy JavaScript which allows people to call `mc4wp.forms.on()` before the JS is loaded.
*/
public function print_dummy_javascript() {
$file = dirname( __FILE__ ) . '/views/js/dummy-api.js';
echo '';
}
/**
* Outputs the inline JavaScript that is used to enhance forms
*/
public function load_scripts() {
$load_scripts = $this->load_scripts;
/** @ignore */
$load_scripts = apply_filters( 'mc4wp_load_form_scripts', $load_scripts );
if( ! $load_scripts ) {
return;
}
global $wp_scripts;
// make sure scripts are loaded
wp_enqueue_script( 'mc4wp-forms-api', MC4WP_PLUGIN_URL . 'assets/js/forms-api'. $this->filename_suffix .'.js', array(), MC4WP_VERSION, true );
wp_localize_script( 'mc4wp-forms-api', 'mc4wp_forms_config', $this->get_javascript_config() );
// load placeholder polyfill if browser is Internet Explorer
wp_enqueue_script( 'mc4wp-forms-placeholders', MC4WP_PLUGIN_URL . 'assets/js/third-party/placeholders.min.js', array(), MC4WP_VERSION, true );
$wp_scripts->add_data( 'mc4wp-forms-placeholders', 'conditional', 'lte IE 9' );
// print inline scripts depending on printed fields
echo '';
/** @ignore */
do_action( 'mc4wp_load_form_scripts' );
}
}