PluginProbe
Booking Calendar / 11.8.3
Booking Calendar v11.8.3
11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 10.11.2 All 203 releases
← All changes | core/wpbc-js.php +18 -34 11.411.8.3 View file →
@@ -64,30 +64,22 @@
64 64 }
65 65
66 66
67 67 /**
68 - * Remove `async` and `defer` ( check more here https://javascript.info/script-async-defer )
69 - * for scripts registered or enqueued, that required for correct working of plugin, like
70 - * jquery and all Booking Calendar scripts
68 + * Preserve the required execution order for Booking Calendar scripts.
71 69 *
70 + * Removes asynchronous loading attributes and excludes the scripts from
71 + * Cloudflare Rocket Loader. The filter runs at a very late priority so these
72 + * protections remain present after other script-tag optimization filters.
73 + *
72 74 * @param string $tag The script tag.
73 - * @param string $handle The script handle.
75 + * @param string $handle The registered script handle.
76 + * @param string $src The script source URL.
74 77 *
75 - * @return string Script HTML string.
76 - *
78 + * @return string Filtered script HTML string.
77 79 */
78 80 public function filter_script_loader_tag( $tag, $handle, $src ) {
79 -
80 - $script_handles_prevent_defer = array(
81 - 'jquery-core' // exact value
82 - , 'jquery-migrate'
83 - //, 'wpbc-' //starting from 'wpbc-' it's not the exact value
84 - //, 'wpdevelop-'
85 - );
86 -
87 -
88 - // Remove defer and async attribute from the src.
89 - if (
81 + $is_required_script = (
90 82 ( 'jquery-core' === $handle )
91 83 || ( 'jquery-migrate' === $handle )
92 84 || ( false !== strpos( $handle, 'wpbc_' ) ) // Booking Calendar script wpbc_all.js // FixIn: 10.1.2.3.
93 85 || ( false !== strpos( $handle, 'wpbc-' ) ) // Booking Calendar scripts
@@ -92,28 +84,20 @@
92 84 || ( false !== strpos( $handle, 'wpbc_' ) ) // Booking Calendar script wpbc_all.js // FixIn: 10.1.2.3.
93 85 || ( false !== strpos( $handle, 'wpbc-' ) ) // Booking Calendar scripts
94 86 || ( false !== strpos( $handle, 'wpdevelop-' ) )
95 87 || ( false !== strpos( $handle, 'wpbm-' ) )
96 - ) {
88 + );
97 89
90 + if ( $is_required_script ) {
98 91 foreach ( array( 'async', 'defer' ) as $attr ) {
92 + // Match only a standalone attribute, not the "async" part of data-cfasync.
93 + $pattern = '/\s+' . $attr . '(?:\s*=\s*(?:"[^"]*"|\'[^\']*\'|[^\s>]+))?/i';
94 + $tag = preg_replace( $pattern, '', $tag );
95 + }
99 96
100 - if ( preg_match( ":\s$attr(=|>|\s):", $tag ) ) {
101 - $tag = str_replace($attr, '', $tag);
102 - $tag = str_replace('=""', '', $tag);
103 - $tag = str_replace("=''", '', $tag);
104 -
105 - /*
106 - * Test here https://regex101.com/
107 - *
108 - * Expression: \s+defer(\s*=\s*["']defer["'])?\s?
109 - * Test string: <script type='text/javascript' defer = 'defer' defer="defer" src='http://beta/wp-content/plugins/booking-manager/js/wpbm_vars.js?ver=1.1' id='wpbm-global-vars-js'></script>
110 - *
111 - */
112 - $pattern = ":\s+{$attr}(\s*=\s*[\"']{$attr}[\"'])?\s?:mi";
113 - $replacement = ' ';
114 - $tag = preg_replace($pattern, $replacement, $tag);
115 - }
97 + // Rocket Loader can otherwise execute dependent scripts before wpbc_all.js defines _wpbc.
98 + if ( false === strpos( $tag, 'data-cfasync=' ) ) {
99 + $tag = preg_replace( '/<script\b/i', '<script data-cfasync="false"', $tag, 1 );
116 100 }
117 101 }
118 102
119 103 return $tag;