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