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