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