PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 1.2.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v1.2.1
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 3 years ago StylesService.php 3 years ago
AssetsService.php
209 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 add_filter( 'render_block_data', [ $this, 'preloadComponents' ] );
67
68 // block editor.
69 add_action( 'enqueue_block_editor_assets', [ $this, 'editorAssets' ] );
70
71 // Shortcode usages scripts load.
72 add_action( 'wp_head', [ $this, 'maybeEnqueueShortcodeScripts' ] );
73
74 // front-end styles. These only load when the block is being rendered on the page.
75 $this->loader->whenRendered( 'surecart/form', [ $this, 'enqueueForm' ] );
76 $this->loader->whenRendered( 'surecart/buy-button', [ $this, 'enqueueComponents' ] );
77 $this->loader->whenRendered( 'surecart/customer-dashboard', [ $this, 'enqueueComponents' ] );
78 $this->loader->whenRendered( 'surecart/checkout-form', [ $this, 'enqueueComponents' ] );
79 $this->loader->whenRendered( 'surecart/order-confirmation', [ $this, 'enqueueComponents' ] );
80 }
81
82 /**
83 * Preload any components needed for block display.
84 *
85 * @param array $parsed_block Parsed block data.
86 *
87 * @return array
88 */
89 public function preloadComponents( $parsed_block ) {
90 if ( ! empty( $this->config['preload'][ $parsed_block['blockName'] ] ) ) {
91 \SureCart::preload()->add( $this->config['preload'][ $parsed_block['blockName'] ] );
92 }
93 return $parsed_block;
94 }
95
96 /**
97 * Enqueue form scripts.
98 *
99 * @return void
100 */
101 public function enqueueForm() {
102 // add recaptcha if enabled.
103 if ( \SureCart::settings()->recaptcha()->isEnabled() ) {
104 wp_enqueue_script( 'surecart-google-recaptcha' );
105 }
106 $this->enqueueComponents();
107 }
108
109 /**
110 * Enqueue editor styles and scripts.
111 */
112 public function editorAssets() {
113 $this->scripts->enqueueEditor();
114 $this->styles->enqueueEditor();
115 }
116
117 /**
118 * EnqueueComponents.
119 *
120 * @return void
121 */
122 public function enqueueComponents() {
123 $this->scripts->enqueueFront();
124 $this->styles->enqueueFront();
125 }
126
127 /**
128 * Output brand colors.
129 *
130 * @return void
131 */
132 public function printBrandColors() {
133 $this->styles->addInlineBrandColors( 'surecart-themes-default' );
134 }
135
136 /**
137 * Shortcodes scripts add.
138 *
139 * @return void
140 */
141 public function maybeEnqueueShortcodeScripts() {
142 global $post;
143
144 // match all of our shortcodes.
145 if ( false === strpos( $post->post_content ?? '', '[sc_' ) ) {
146 return;
147 }
148
149 $this->enqueueComponents();
150 }
151
152 /**
153 * This adds component data to the component when it's defined at runtime.
154 *
155 * @param string $tag Tag of the web component.
156 * @param string $selector Specific selector (class or id).
157 * @param array $data Data to add.
158 * @return void
159 */
160 public function addComponentData( $tag, $selector, $data = [] ) {
161 if ( $this->loader->isUsingPageBuilder() || wp_doing_ajax() ) {
162 return $this->outputComponentScript( $tag, $selector, $data );
163 }
164 add_action(
165 'wp_footer',
166 function () use ( $tag, $selector, $data ) {
167 return $this->outputComponentScript( $tag, $selector, $data );
168 }
169 );
170 }
171
172 /**
173 * Should we use the esm loader directly?
174 * If false, we inject the loader script at runtime.
175 *
176 * @return boolean
177 */
178 public function usesEsmLoader() {
179 return (bool) get_option( 'surecart_use_esm_loader', false );
180 }
181
182 /**
183 * Output the component initialization script.
184 *
185 * @param string $tag Tag of the web component.
186 * @param string $selector Specific selector (class or id).
187 * @param array $data Data to add.
188 */
189 public function outputComponentScript( $tag, $selector, $data = [] ) {
190 ?>
191 <script>
192 (async () => {
193 await customElements.whenDefined('<?php echo esc_js( $tag ); ?>');
194 var component = document.querySelector('<?php echo esc_js( $tag . $selector ); ?>');
195 if (!component) return;
196 <?php
197 foreach ( $data as $key => $value ) {
198 echo "\n";
199 echo esc_js( "component.$key = " );
200 echo wp_json_encode( $value );
201 echo ';';
202 }
203 ?>
204 })();
205 </script>
206 <?php
207 }
208 }
209