PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / WordPress / Assets / AssetsService.php
surecart / app / src / WordPress / Assets Last commit date
AssetsService.php 2 years ago AssetsServiceProvider.php 3 years ago BlockAssetsLoadService.php 1 year ago PreloadService.php 1 year ago ScriptsService.php 1 year ago StylesService.php 1 year ago
AssetsService.php
274 lines
1 <?php
2
3 namespace SureCart\WordPress\Assets;
4
5 /**
6 * Our assets service.
7 */
8 class AssetsService {
9 /**
10 * Holds the loader.
11 *
12 * @var Object
13 */
14 protected $loader;
15
16 /**
17 * Holds the styles
18 *
19 * @var Object
20 */
21 protected $styles;
22
23 /**
24 * Holds the scripts service.
25 *
26 * @var Object
27 */
28 protected $scripts;
29
30 /**
31 * The service container.
32 *
33 * @var \Pimple\Container $container Service Container.
34 */
35 protected $container;
36
37 /**
38 * The preload Service
39 *
40 * @var array
41 */
42 protected $config;
43
44 /**
45 * Get the loader.
46 *
47 * @param Object $loader The loader.
48 */
49 public function __construct( $loader, $scripts, $styles, $container ) {
50 $this->loader = $loader;
51 $this->scripts = $scripts;
52 $this->styles = $styles;
53 $this->container = $container;
54 $this->config = \SureCart::resolve( SURECART_CONFIG_KEY );
55 }
56
57 /**
58 * Bootstrap the service.
59 *
60 * @return void
61 */
62 public function bootstrap() {
63 // register assets we will reuse.
64 add_action( 'init', array( $this->scripts, 'register' ) );
65 add_action( 'init', array( $this->styles, 'register' ) );
66 // globals.
67 add_action( 'wp_enqueue_scripts', array( $this, 'enqueueGlobals' ) );
68
69 add_filter( 'enqueue_block_assets', array( $this, 'preloadBlockAssets' ) );
70 add_filter( 'render_block_data', array( $this, 'preloadComponents' ) );
71
72 // block editor.
73 add_action( 'enqueue_block_editor_assets', array( $this, 'editorAssets' ) );
74
75 // Shortcode usages scripts load.
76 add_action( 'wp_head', array( $this, 'maybeEnqueueScriptsForNonBlocks' ) );
77
78 // front-end styles. These only load when the block is being rendered on the page.
79 $this->loader->whenRendered( 'surecart/form', [ $this, 'enqueueForm' ] );
80 $this->loader->whenRendered( 'surecart/buy-button', [ $this, 'enqueueComponents' ] );
81 $this->loader->whenRendered( 'surecart/customer-dashboard', [ $this, 'enqueueComponents' ] );
82 $this->loader->whenRendered( 'surecart/checkout-form', [ $this, 'enqueueComponents' ] );
83 $this->loader->whenRendered( 'surecart/order-confirmation', [ $this, 'enqueueComponents' ] );
84 $this->loader->whenRendered( 'surecart/product-item-list', [ $this, 'enqueueComponents' ] );
85 }
86
87 public function preloadBlockAssets() {
88 if ( is_admin() ) {
89 return;
90 }
91 global $post;
92 foreach ( $this->config['preload'] as $block_name => $deps ) {
93 if ( has_block( $block_name, $post ) ) {
94 \SureCart::preload()->add( $this->config['preload'][ $block_name ] );
95 }
96 }
97 }
98
99 /**
100 * Enqueue global styles.
101 *
102 * @return void
103 */
104 public function enqueueGlobals() {
105 if ( is_page_template( 'pages/template-surecart-dashboard.php' ) ) {
106 // enqueue it.
107 wp_enqueue_style( 'surecart-themes-default' );
108
109 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/templates/customer-dashboard.asset.php';
110 wp_enqueue_style(
111 'surecart-templates-customer-dashboard',
112 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/templates/customer-dashboard.css',
113 array( 'surecart-themes-default' ),
114 $asset_file['version'],
115 );
116 }
117
118 $account = \SureCart::account();
119 if ( ! $account->isConnected() ) {
120 return;
121 }
122
123 $tracking_enabled = $account->affiliation_protocol->wordpress_plugin_tracking_enabled ?? false;
124 $affiliate_script_defined = defined( 'SURECART_ENABLE_AFFILIATE_SCRIPT' ) && ! empty( SURECART_ENABLE_AFFILIATE_SCRIPT );
125
126 if ( ( $tracking_enabled || $affiliate_script_defined ) && $account->entitlements->affiliates ) {
127 wp_enqueue_script( 'surecart-affiliate-tracking' );
128 }
129 }
130
131 /**
132 * Preload any components needed for block display.
133 *
134 * @param array $parsed_block Parsed block data.
135 *
136 * @return array
137 */
138 public function preloadComponents( $parsed_block ) {
139 if ( ! empty( $this->config['preload'][ $parsed_block['blockName'] ] ) ) {
140 \SureCart::preload()->add( $this->config['preload'][ $parsed_block['blockName'] ] );
141 }
142 return $parsed_block;
143 }
144
145 /**
146 * Enqueue form scripts.
147 *
148 * @return void
149 */
150 public function enqueueForm() {
151 // add recaptcha if enabled.
152 if ( \SureCart::settings()->recaptcha()->isEnabled() ) {
153 wp_enqueue_script( 'surecart-google-recaptcha' );
154 }
155 $this->enqueueComponents();
156 }
157
158 /**
159 * Enqueue editor styles and scripts.
160 */
161 public function editorAssets() {
162 $this->scripts->enqueueEditor();
163 $this->styles->enqueueEditor();
164 }
165
166 /**
167 * EnqueueComponents.
168 *
169 * @return void
170 */
171 public function enqueueComponents() {
172 $this->scripts->enqueueFront();
173 $this->styles->enqueueFront();
174 }
175
176 /**
177 * Print admin colors.
178 *
179 * @return void
180 */
181 public function printAdminColors() {
182 $this->styles->addInlineAdminColors( 'surecart-themes-default' );
183 }
184
185 /**
186 * Output brand colors.
187 *
188 * @return void
189 */
190 public function printBrandColors() {
191 $this->styles->addInlineBrandColors( 'surecart-themes-default' );
192 }
193
194 /**
195 * Shortcodes scripts add.
196 *
197 * @return void
198 */
199 public function maybeEnqueueScriptsForNonBlocks() {
200 global $post;
201
202 // match all of our shortcodes and already rendered components.
203 if ( false === strpos( $post->post_content ?? '', '[sc_' ) && false === strpos( $post->post_content ?? '', '<sc-' ) ) {
204 return;
205 }
206
207 $this->enqueueComponents();
208 }
209
210 /**
211 * This adds component data to the component when it's defined at runtime.
212 *
213 * @param string $tag Tag of the web component.
214 * @param string $selector Specific selector (class or id).
215 * @param array $data Data to add.
216 * @return void
217 */
218 public function addComponentData( $tag, $selector, $data = array() ) {
219 if ( ( $this->loader->isUsingPageBuilder() || wp_doing_ajax() ) && 'thrive' !== $this->loader->getPageBuilder() ) {
220 return $this->outputComponentScript( $tag, $selector, $data );
221 }
222
223 add_action(
224 'wp_footer',
225 function () use ( $tag, $selector, $data ) {
226 return $this->outputComponentScript( $tag, $selector, $data );
227 }
228 );
229 add_action(
230 'admin_footer',
231 function () use ( $tag, $selector, $data ) {
232 return $this->outputComponentScript( $tag, $selector, $data );
233 }
234 );
235 }
236
237 /**
238 * Should we use the esm loader directly?
239 * If false, we inject the loader script at runtime.
240 *
241 * @return boolean
242 */
243 public function usesEsmLoader() {
244 return (bool) get_option( 'surecart_use_esm_loader', false );
245 }
246
247 /**
248 * Output the component initialization script.
249 *
250 * @param string $tag Tag of the web component.
251 * @param string $selector Specific selector (class or id).
252 * @param array $data Data to add.
253 */
254 public function outputComponentScript( $tag, $selector, $data = array() ) {
255 ?>
256 <script>
257 (async () => {
258 await customElements.whenDefined('<?php echo esc_js( $tag ); ?>');
259 var component = document.querySelector('<?php echo esc_js( $tag . $selector ); ?>');
260 if (!component) return;
261 <?php
262 foreach ( $data as $key => $value ) {
263 echo "\n";
264 echo esc_js( "component.$key = " );
265 echo wp_json_encode( $value );
266 echo ';';
267 }
268 ?>
269 })();
270 </script>
271 <?php
272 }
273 }
274