PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.0.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.0.0
4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 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 / ScriptsService.php
surecart / app / src / WordPress / Assets Last commit date
AssetsService.php 3 years ago AssetsServiceProvider.php 3 years ago BlockAssetsLoadService.php 4 years ago PreloadService.php 3 years ago ScriptsService.php 3 years ago StylesService.php 3 years ago
ScriptsService.php
383 lines
1 <?php
2
3 namespace SureCart\WordPress\Assets;
4
5 use SureCart\Models\ManualPaymentMethod;
6 use SureCart\Models\Processor;
7
8 /**
9 * Handles the component theme.
10 */
11 class ScriptsService {
12 /**
13 * Holds the service container
14 *
15 * @var \Pimple\Container
16 */
17 protected $container;
18
19 /**
20 * Make sure we change the script loader tag for esm loading.
21 *
22 * @param \Pimple\Container $container Service Container.
23 */
24 public function __construct( $container ) {
25 $this->container = $container;
26
27 // add module to components tag.
28 add_filter( 'script_loader_tag', [ $this, 'componentsTag' ], 10, 3 );
29 }
30
31 /**
32 * Add module to the components tag
33 *
34 * @param string $tag Tag output.
35 * @param string $handle Script handle.
36 * @param string $source Script source.
37 *
38 * @return string
39 */
40 public function componentsTag( $tag, $handle, $source ) {
41 if ( 'surecart-components' !== $handle || ! $source ) {
42 return $tag;
43 }
44 // don't use javascript module if we are not using esm loader.
45 if ( ! \SureCart::assets()->usesEsmLoader() ) {
46 return $tag;
47 }
48
49 // make sure our translations do not get stripped.
50 $translations = wp_scripts()->print_translations( $handle, false );
51 if ( $translations ) {
52 $translations = sprintf( "<script%s id='%s-js-translations'>\n%s\n</script>\n", " type='text/javascript'", esc_attr( $handle ), $translations );
53 }
54
55 // phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedScript
56 return '<script src="' . esc_url_raw( $source ) . '" type="module"></script>' . $translations;
57 }
58
59 /**
60 * Register the component scripts and translations.
61 *
62 * @return void
63 */
64 public function register() {
65
66 // should we use the esm loader directly?
67 if ( ! is_admin() && \SureCart::assets()->usesEsmLoader() ) {
68 wp_register_script(
69 'surecart-components',
70 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/components/surecart/surecart.esm.js',
71 [ 'wp-i18n' ],
72 filemtime( trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/components/surecart/surecart.esm.js' ) . '-' . \SureCart::plugin()->version(),
73 false
74 );
75 } else {
76 // instead, use a static loader that injects the script at runtime.
77 $static_assets = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/components/static-loader.asset.php';
78 wp_register_script(
79 'surecart-components',
80 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/components/static-loader.js',
81 array_merge( [ 'wp-i18n' ], $static_assets['dependencies'] ),
82 $static_assets['version'] . '-' . \SureCart::plugin()->version(),
83 true
84 );
85 wp_localize_script(
86 'surecart-components',
87 'surecartComponents',
88 [
89 'url' => trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/components/surecart/surecart.esm.js?ver=' . filemtime( trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/components/surecart/surecart.esm.js' ),
90 ]
91 );
92 }
93
94 // wp_register_script(
95 // 'surecart-components',
96 // 'https://unpkg.com/@surecart/components@1.0.1-beta.1/dist/surecart/surecart.esm.js',
97 // [ 'wp-i18n' ],
98 // null,
99 // false
100 // );
101
102 wp_set_script_translations( 'surecart-components', 'surecart' );
103
104 wp_localize_script(
105 'surecart-components',
106 'scData',
107 apply_filters(
108 'surecart-components/scData',
109 [
110 'cdn_root' => SURECART_CDN_IMAGE_BASE,
111 'root_url' => esc_url_raw( get_rest_url() ),
112 'plugin_url' => \SureCart::core()->assets()->getUrl(),
113 'api_url' => \SureCart::requests()->getBaseUrl(),
114 'currency' => \SureCart::account()->currency,
115 'do_not_persist_cart' => is_admin(),
116 'theme' => get_option( 'surecart_theme', 'light' ),
117 'pages' => [
118 'dashboard' => \SureCart::pages()->url( 'dashboard' ),
119 'checkout' => \SureCart::pages()->url( 'checkout' ),
120 ],
121 'page_id' => get_the_ID(),
122 'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
123 'nonce_endpoint' => admin_url( 'admin-ajax.php?action=sc-rest-nonce' ),
124 'recaptcha_site_key' => \SureCart::settings()->recaptcha()->getSiteKey(),
125 ]
126 )
127 );
128
129 wp_localize_script( 'surecart-components', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
130
131 // core-data.
132 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/store/data.asset.php';
133 wp_register_script(
134 'sc-core-data',
135 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/store/data.js',
136 array_merge( [ 'surecart-components' ], $asset_file['dependencies'] ),
137 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
138 true
139 );
140
141 // ui.
142 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/store/ui.asset.php';
143 wp_register_script(
144 'sc-ui-data',
145 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/store/ui.js',
146 array_merge( [ 'surecart-components' ], $asset_file['dependencies'] ),
147 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
148 true
149 );
150
151 $this->registerBlocks();
152
153 wp_localize_script( 'surecart-cart-blocks', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
154 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/cart.asset.php';
155 $deps = $asset_file['dependencies'];
156 // fix bug in deps array.
157 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
158 wp_register_script(
159 'surecart-cart-blocks',
160 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/cart.js',
161 array_merge( [ 'surecart-components' ], $deps ),
162 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
163 true
164 );
165 wp_localize_script(
166 'surecart-cart-blocks',
167 'scBlockData',
168 [
169 'currency' => \SureCart::account()->currency,
170 'theme' => get_option( 'surecart_theme', 'light' ),
171 ]
172 );
173
174 wp_localize_script( 'surecart-cart-blocks', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
175
176 // cart.
177 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/cart.asset.php';
178 $deps = $asset_file['dependencies'];
179 // fix bug in deps array.
180 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
181 wp_register_script(
182 'surecart-cart-blocks',
183 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/cart.js',
184 array_merge( [ 'surecart-components' ], $deps ),
185 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
186 true
187 );
188
189 wp_localize_script( 'surecart-cart-blocks', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
190
191 // regsiter recaptcha.
192 wp_register_script( 'surecart-google-recaptcha', 'https://www.google.com/recaptcha/api.js?render=' . \SureCart::settings()->recaptcha()->getSiteKey(), [], \SureCart::plugin()->version(), true );
193
194 // register stripe if enabled.
195 if ( get_option( 'surecart_load_stripe_js', false ) ) {
196 wp_enqueue_script( 'surecart-stripe-script', 'https://js.stripe.com/v3', [], \SureCart::plugin()->version(), false );
197 }
198
199 // templates.
200 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/templates/admin.asset.php';
201 wp_register_script(
202 'surecart-templates-admin',
203 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/templates/admin.js',
204 $asset_file['dependencies'],
205 $asset_file['version'],
206 true
207 );
208 }
209
210 /**
211 * Enqueue block front scripts.
212 *
213 * @return void
214 */
215 public function enqueueFront() {
216 // make sure it is registered.
217 $this->register();
218 // enqueue it.
219 wp_enqueue_script( 'surecart-components' );
220
221 // fix shitty jetpack issues key hijacking issues.
222 add_filter(
223 'wp_head',
224 function() {
225 wp_dequeue_script( 'wpcom-notes-common' );
226 wp_dequeue_script( 'wpcom-notes-admin-bar' );
227 wp_dequeue_style( 'wpcom-notes-admin-bar' );
228 wp_dequeue_style( 'noticons' );
229 },
230 200
231 );
232 }
233
234 /**
235 * Enqueue editor scripts.
236 *
237 * @return void
238 */
239 public function enqueueEditor() {
240 $this->enqueueBlocks();
241 $this->enqueuePageTemplateEditor();
242 $this->enqueueCartBlocks();
243 $this->enqueueProductBlocks();
244 }
245
246 /**
247 * Enqueue page templates.
248 *
249 * @return void
250 */
251 public function enqueuePageTemplateEditor() {
252 wp_enqueue_script( 'surecart-templates-admin' );
253 }
254
255 /**
256 * We only want these available in FSE.
257 *
258 * @return void
259 */
260 public function enqueueProductBlocks() {
261 global $pagenow;
262 if ( 'site-editor.php' !== $pagenow ) {
263 return;
264 }
265
266 wp_enqueue_script( 'surecart-product-blocks' );
267 }
268
269 /**
270 * Enqueue Cart Blocks.
271 *
272 * @return void
273 */
274 public function enqueueCartBlocks() {
275 // not our post type.
276 if ( 'sc_cart' !== get_post_type() ) {
277 return;
278 }
279 wp_enqueue_script( 'surecart-cart-blocks' );
280 }
281
282 /**
283 * Register block scripts.
284 *
285 * @return void
286 */
287 public function registerBlocks() {
288 $enabled_payment_processors = array_values(
289 array_filter(
290 (array) Processor::get() ?? [],
291 function( $payment_method ) {
292 return $payment_method->enabled ?? false;
293 }
294 )
295 );
296 // blocks.
297 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/library.asset.php';
298 $deps = $asset_file['dependencies'];
299 // fix bug in deps array.
300 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
301 wp_register_script(
302 'surecart-blocks',
303 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/library.js',
304 $deps,
305 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
306 true
307 );
308
309 // only register
310 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/product.asset.php';
311 $deps = $asset_file['dependencies'];
312 // fix bug in deps array.
313 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
314 wp_register_script(
315 'surecart-product-blocks',
316 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/product.js',
317 $deps,
318 $asset_file['version'],
319 true
320 );
321
322 // localize.
323 wp_localize_script(
324 'surecart-blocks',
325 'scData',
326 apply_filters(
327 'surecart-components/scData',
328 [
329 'root_url' => esc_url_raw( get_rest_url() ),
330 'plugin_url' => \SureCart::core()->assets()->getUrl(),
331 'api_url' => \SureCart::requests()->getBaseUrl(),
332 'currency' => \SureCart::account()->currency,
333 'do_not_persist_cart' => is_admin(),
334 'theme' => get_option( 'surecart_theme', 'light' ),
335 'pages' => [
336 'dashboard' => \SureCart::pages()->url( 'dashboard' ),
337 'checkout' => \SureCart::pages()->url( 'checkout' ),
338 ],
339 'page_id' => get_the_ID(),
340 'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
341 'nonce_endpoint' => admin_url( 'admin-ajax.php?action=sc-rest-nonce' ),
342 'recaptcha_site_key' => \SureCart::settings()->recaptcha()->getSiteKey(),
343 ]
344 )
345 );
346
347 wp_localize_script(
348 'surecart-blocks',
349 'scBlockData',
350 [
351 'root_url' => esc_url_raw( get_rest_url() ),
352 'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
353 'nonce_endpoint' => admin_url( 'admin-ajax.php?action=sc-rest-nonce' ),
354 'processors' => $enabled_payment_processors,
355 'manualPaymentMethods' => (array) ManualPaymentMethod::get() ?? [],
356 'plugin_url' => \SureCart::core()->assets()->getUrl(),
357 'currency' => \SureCart::account()->currency,
358 'theme' => get_option( 'surecart_theme', 'light' ),
359 'entitlements' => \SureCart::account()->entitlements,
360 'upgrade_url' => \SureCart::config()->links->purchase,
361 'beta' => [
362 'stripe_payment_element' => (bool) get_option( 'sc_stripe_payment_element', false ),
363 ],
364 'pages' => [
365 'dashboard' => \SureCart::pages()->url( 'dashboard' ),
366 'checkout' => \SureCart::pages()->url( 'checkout' ),
367 ],
368 ]
369 );
370
371 wp_localize_script( 'surecart-blocks', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
372 }
373
374 /**
375 * Enqueue blocks scripts.
376 *
377 * @return void
378 */
379 public function enqueueBlocks() {
380 wp_enqueue_script( 'surecart-blocks' );
381 }
382 }
383