This code was preventing WordPress from rendering the public.js script as deferred. The defer attribute can be applied only to scripts that are loaded via src. WP detected that there was an associated inline script and removed the defer attribute from the public.js script. In this commit, I moved the initialization of the error message to public.js and I pass the value via static object. [MAILPOET-5623]
115 lines
3.2 KiB
PHP
115 lines
3.2 KiB
PHP
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
|
|
|
|
namespace MailPoet\Form;
|
|
|
|
use MailPoet\Config\Env;
|
|
use MailPoet\Config\Renderer as BasicRenderer;
|
|
use MailPoet\Settings\SettingsController;
|
|
use MailPoet\Subscription\Captcha\CaptchaConstants;
|
|
use MailPoet\WP\Functions as WPFunctions;
|
|
|
|
class AssetsController {
|
|
/** @var WPFunctions */
|
|
private $wp;
|
|
|
|
/** @var BasicRenderer */
|
|
private $renderer;
|
|
|
|
/** @var SettingsController */
|
|
private $settings;
|
|
|
|
const RECAPTCHA_API_URL = 'https://www.google.com/recaptcha/api.js?render=explicit';
|
|
|
|
public function __construct(
|
|
WPFunctions $wp,
|
|
BasicRenderer $renderer,
|
|
SettingsController $settings
|
|
) {
|
|
$this->wp = $wp;
|
|
$this->renderer = $renderer;
|
|
$this->settings = $settings;
|
|
}
|
|
|
|
/**
|
|
* Returns assets scripts tags as string
|
|
* @return string
|
|
*/
|
|
public function printScripts() {
|
|
ob_start();
|
|
$captcha = $this->settings->get('captcha');
|
|
if (!empty($captcha['type']) && CaptchaConstants::isReCaptcha($captcha['type'])) {
|
|
echo '<script src="' . esc_attr(self::RECAPTCHA_API_URL) . '" async defer></script>';
|
|
}
|
|
|
|
$this->wp->wpPrintScripts('jquery');
|
|
$this->wp->wpPrintScripts('mailpoet_vendor');
|
|
$this->wp->wpPrintScripts('mailpoet_public');
|
|
|
|
$scripts = ob_get_contents();
|
|
ob_end_clean();
|
|
if ($scripts === false) {
|
|
return '';
|
|
}
|
|
return $scripts;
|
|
}
|
|
|
|
public function setupFormPreviewDependencies() {
|
|
$this->setupFrontEndDependencies();
|
|
$this->wp->wpEnqueueScript(
|
|
'mailpoet_form_preview',
|
|
Env::$assetsUrl . '/dist/js/' . $this->renderer->getJsAsset('form_preview.js'),
|
|
['jquery'],
|
|
Env::$version,
|
|
true
|
|
);
|
|
}
|
|
|
|
public function setupFrontEndDependencies() {
|
|
$captcha = $this->settings->get('captcha');
|
|
if (!empty($captcha['type']) && CaptchaConstants::isRecaptcha($captcha['type'])) {
|
|
$this->wp->wpEnqueueScript(
|
|
'mailpoet_recaptcha',
|
|
self::RECAPTCHA_API_URL
|
|
);
|
|
}
|
|
|
|
$this->wp->wpEnqueueStyle(
|
|
'mailpoet_public',
|
|
Env::$assetsUrl . '/dist/css/' . $this->renderer->getCssAsset('mailpoet-public.css')
|
|
);
|
|
|
|
$this->wp->wpEnqueueScript(
|
|
'mailpoet_public',
|
|
Env::$assetsUrl . '/dist/js/' . $this->renderer->getJsAsset('public.js'),
|
|
['jquery'],
|
|
Env::$version,
|
|
true
|
|
);
|
|
|
|
$ajaxFailedErrorMessage = __('An error has happened while performing a request, please try again later.', 'mailpoet');
|
|
$this->wp->wpLocalizeScript('mailpoet_public', 'MailPoetForm', [
|
|
'ajax_url' => $this->wp->adminUrl('admin-ajax.php'),
|
|
'is_rtl' => (function_exists('is_rtl') ? (bool)is_rtl() : false),
|
|
'ajax_common_error_message' => esc_js($ajaxFailedErrorMessage),
|
|
]);
|
|
}
|
|
|
|
public function setupAdminWidgetPageDependencies() {
|
|
$this->wp->wpEnqueueScript(
|
|
'mailpoet_vendor',
|
|
Env::$assetsUrl . '/dist/js/' . $this->renderer->getJsAsset('vendor.js'),
|
|
[],
|
|
Env::$version,
|
|
true
|
|
);
|
|
|
|
$this->wp->wpEnqueueScript(
|
|
'mailpoet_admin',
|
|
Env::$assetsUrl . '/dist/js/' . $this->renderer->getJsAsset('mailpoet.js'),
|
|
[],
|
|
Env::$version,
|
|
true
|
|
);
|
|
}
|
|
}
|