PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.1
Presto Player v4.3.1
4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 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.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / inc / Services / PreloadService.php
presto-player / inc / Services Last commit date
API 1 month ago Blocks 10 months ago License 1 month ago AdminNotice.php 3 weeks ago AdminNotices.php 3 weeks ago AjaxActions.php 3 weeks ago Blocks.php 1 year ago Compatibility.php 10 months ago Learn.php 1 month ago Menu.php 1 month ago Migrations.php 1 year ago NpsSurvey.php 5 months ago Onboarding.php 3 weeks ago Player.php 3 days ago PluginInstaller.php 1 month ago PreloadService.php 1 year ago ProCompatibility.php 1 month ago ReusableVideos.php 2 weeks ago RewriteRulesManager.php 1 year ago Scripts.php 2 weeks ago Settings.php 1 month ago Shortcodes.php 1 month ago Streamer.php 3 weeks ago Translation.php 3 weeks ago Usage.php 3 weeks ago VideoPostType.php 2 weeks ago
PreloadService.php
141 lines
1 <?php
2 /**
3 * PreloadService class file.
4 *
5 * This file contains the PreloadService class which handles preloading of components.
6 *
7 * @package PrestoPlayer
8 * @subpackage Services
9 */
10
11 namespace PrestoPlayer\Services;
12
13 use PrestoPlayer\Support\Utility;
14
15 /**
16 * Class PreloadService
17 *
18 * Handles the preloading of components for Presto Player.
19 */
20 class PreloadService {
21
22 /**
23 * The stats file path.
24 *
25 * @var string
26 */
27 protected $stats_file = PRESTO_PLAYER_PLUGIN_DIR . 'dist/components/stats.json';
28
29 /**
30 * Components to preload.
31 *
32 * @var array
33 */
34 protected $components = array();
35
36 /**
37 * Bootstrap the preload.
38 *
39 * @return void
40 */
41 public function bootstrap() {
42 // Preload components.
43 add_action( 'wp_head', array( $this, 'renderComponents' ) );
44 add_action( 'wp_footer', array( $this, 'renderComponents' ) );
45 }
46
47 /**
48 * Render the components
49 *
50 * @return void
51 */
52 public function renderComponents() {
53 if ( ! empty( $this->components ) ) {
54 $this->renderTag( $this->components );
55 $this->components = array();
56 }
57 }
58
59 /**
60 * Render the preload tags.
61 *
62 * @param array $components An array of components.
63 * @param string $format The format.
64 * @param string $path The path to the component javascript file.
65 *
66 * @return void
67 */
68 public function renderTag( $components, $format = 'esmBrowser', $path = 'dist/components/web-components/' ) {
69 if ( empty( $components ) ) {
70 return;
71 }
72
73 $names = $this->getFileNames( $components, $format );
74
75 if ( empty( $names ) ) {
76 return;
77 }
78
79 foreach ( $names as $name ) {
80 echo "<link rel='modulepreload' href='" . esc_url( trailingslashit( PRESTO_PLAYER_PLUGIN_URL ) . trailingslashit( $path ) . $name ) . "' as='script' crossorigin />\n";
81 }
82 }
83
84 /**
85 * Get the bundle stats file.
86 *
87 * @return object|false;
88 */
89 protected function getStatsFile() {
90 if ( ! file_exists( $this->stats_file ) ) {
91 return false;
92 }
93 return wp_json_file_decode( $this->stats_file, array( 'associative' => true ) );
94 }
95
96 /**
97 * Get the filenames from the stats.
98 *
99 * @param array $components An array of component names.
100 * @param string $format The format we are using.
101 *
102 * @return array
103 */
104 public function getFileNames( $components, $format = 'esmBrowser' ) {
105 $json = $this->getStatsFile();
106 $entries = $json['formats'][ $format ] ?? array();
107
108 $set = array_map(
109 function ( $element ) use ( $entries ) {
110 $files = array();
111 $collection_bundles = array_filter(
112 $entries,
113 function ( $entry ) use ( $element ) {
114 return in_array( $element, $entry['components'], true );
115 }
116 );
117
118 foreach ( $collection_bundles as $bundle ) {
119 $files = array_merge( array( $bundle['fileName'] ), $bundle['imports'] );
120 }
121
122 return $files;
123 },
124 $components
125 );
126
127 return array_unique( Utility::flatten( $set ) );
128 }
129
130 /**
131 * Add preload components.
132 *
133 * @param array $components Component names.
134 *
135 * @return void
136 */
137 public function add( $components ) {
138 $this->components = array_filter( array_unique( array_merge( $this->components, $components ) ) );
139 }
140 }
141