PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.19.4
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.19.4
4.7.2 4.7.1 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 / AssetsService.php
surecart / app / src / WordPress / Assets Last commit date
AssetsService.php 2 years ago AssetsServiceProvider.php 3 years ago BlockAssetsLoadService.php 4 years ago PreloadService.php 3 years ago ScriptsService.php 2 years ago StylesService.php 3 years ago
AssetsService.php
263 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', [ $this->scripts, 'register' ] );
65 add_action( 'init', [ $this->styles, 'register' ] );
66 // globals.
67 add_action( 'wp_enqueue_scripts', [ $this, 'enqueueGlobals' ] );
68
69 add_filter( 'enqueue_block_assets', [ $this, 'preloadBlockAssets' ] );
70 add_filter( 'render_block_data', [ $this, 'preloadComponents' ] );
71
72 // block editor.
73 add_action( 'enqueue_block_editor_assets', [ $this, 'editorAssets' ] );
74
75 // Shortcode usages scripts load.
76 add_action( 'wp_head', [ $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 }
85
86 public function preloadBlockAssets() {
87 if ( is_admin() ) {
88 return;
89 }
90 global $post;
91 foreach ( $this->config['preload'] as $block_name => $deps ) {
92 if ( has_block( $block_name, $post ) ) {
93 \SureCart::preload()->add( $this->config['preload'][ $block_name ] );
94 }
95 }
96 }
97
98 /**
99 * Enqueue global styles.
100 *
101 * @return void
102 */
103 public function enqueueGlobals() {
104 if ( is_page_template( 'pages/template-surecart-dashboard.php' ) ) {
105 // enqueue it.
106 wp_enqueue_style( 'surecart-themes-default' );
107
108 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/templates/customer-dashboard.asset.php';
109 wp_enqueue_style(
110 'surecart-templates-customer-dashboard',
111 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/templates/customer-dashboard.css',
112 [ 'surecart-themes-default' ],
113 $asset_file['version'],
114 );
115 }
116
117 $account = \SureCart::account();
118 if ( ! $account->isConnected() ) {
119 return;
120 }
121
122 $tracking_enabled = $account->affiliation_protocol->wordpress_plugin_tracking_enabled ?? false;
123 $affiliate_script_defined = defined( 'SURECART_ENABLE_AFFILIATE_SCRIPT' ) && ! empty( SURECART_ENABLE_AFFILIATE_SCRIPT );
124
125 if ( ( $tracking_enabled || $affiliate_script_defined ) && $account->entitlements->affiliates ) {
126 wp_enqueue_script( 'surecart-affiliate-tracking' );
127 }
128 }
129
130 /**
131 * Preload any components needed for block display.
132 *
133 * @param array $parsed_block Parsed block data.
134 *
135 * @return array
136 */
137 public function preloadComponents( $parsed_block ) {
138 if ( ! empty( $this->config['preload'][ $parsed_block['blockName'] ] ) ) {
139 \SureCart::preload()->add( $this->config['preload'][ $parsed_block['blockName'] ] );
140 }
141 return $parsed_block;
142 }
143
144 /**
145 * Enqueue form scripts.
146 *
147 * @return void
148 */
149 public function enqueueForm() {
150 // add recaptcha if enabled.
151 if ( \SureCart::settings()->recaptcha()->isEnabled() ) {
152 wp_enqueue_script( 'surecart-google-recaptcha' );
153 }
154 $this->enqueueComponents();
155 }
156
157 /**
158 * Enqueue editor styles and scripts.
159 */
160 public function editorAssets() {
161 $this->scripts->enqueueEditor();
162 $this->styles->enqueueEditor();
163 }
164
165 /**
166 * EnqueueComponents.
167 *
168 * @return void
169 */
170 public function enqueueComponents() {
171 $this->scripts->enqueueFront();
172 $this->styles->enqueueFront();
173 }
174
175 /**
176 * Output brand colors.
177 *
178 * @return void
179 */
180 public function printBrandColors() {
181 $this->styles->addInlineBrandColors( 'surecart-themes-default' );
182 }
183
184 /**
185 * Shortcodes scripts add.
186 *
187 * @return void
188 */
189 public function maybeEnqueueScriptsForNonBlocks() {
190 global $post;
191
192 // match all of our shortcodes and already rendered components.
193 if ( false === strpos( $post->post_content ?? '', '[sc_' ) && false === strpos( $post->post_content ?? '', '<sc-' ) ) {
194 return;
195 }
196
197 $this->enqueueComponents();
198 }
199
200 /**
201 * This adds component data to the component when it's defined at runtime.
202 *
203 * @param string $tag Tag of the web component.
204 * @param string $selector Specific selector (class or id).
205 * @param array $data Data to add.
206 * @return void
207 */
208 public function addComponentData( $tag, $selector, $data = [] ) {
209 if ( $this->loader->isUsingPageBuilder() || wp_doing_ajax() ) {
210 return $this->outputComponentScript( $tag, $selector, $data );
211 }
212 add_action(
213 'wp_footer',
214 function () use ( $tag, $selector, $data ) {
215 return $this->outputComponentScript( $tag, $selector, $data );
216 }
217 );
218 add_action(
219 'admin_footer',
220 function () use ( $tag, $selector, $data ) {
221 return $this->outputComponentScript( $tag, $selector, $data );
222 }
223 );
224 }
225
226 /**
227 * Should we use the esm loader directly?
228 * If false, we inject the loader script at runtime.
229 *
230 * @return boolean
231 */
232 public function usesEsmLoader() {
233 return (bool) get_option( 'surecart_use_esm_loader', false );
234 }
235
236 /**
237 * Output the component initialization script.
238 *
239 * @param string $tag Tag of the web component.
240 * @param string $selector Specific selector (class or id).
241 * @param array $data Data to add.
242 */
243 public function outputComponentScript( $tag, $selector, $data = [] ) {
244 ?>
245 <script>
246 (async () => {
247 await customElements.whenDefined('<?php echo esc_js( $tag ); ?>');
248 var component = document.querySelector('<?php echo esc_js( $tag . $selector ); ?>');
249 if (!component) return;
250 <?php
251 foreach ( $data as $key => $value ) {
252 echo "\n";
253 echo esc_js( "component.$key = " );
254 echo wp_json_encode( $value );
255 echo ';';
256 }
257 ?>
258 })();
259 </script>
260 <?php
261 }
262 }
263