PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.8.9
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.8.9
4.9.2 4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 All 200 releases
← All changes | includes/Editors/BlockEditor/StyleHandler.php +198 -229 3.4.23.8.9 View file →
@@ -1,267 +1,236 @@
1 1 <?php
2 2 namespace WPDeveloper\BetterDocs\Editors\BlockEditor;
3 3
4 4 if ( ! defined( 'ABSPATH' ) ) {
5 - exit; // Exit if accessed directly.
5 + exit; // Exit if accessed directly.
6 6 }
7 7
8 8 use WPDeveloper\BetterDocs\Utils\Base;
9 9
10 10 final class StyleHandler extends Base {
11 - private $media_desktop = [
12 - 'name' => 'desktop',
13 - 'screen_size' => ''
14 - ];
11 + private $media_desktop = [
12 + 'name' => 'desktop',
13 + 'screen_size' => ''
14 + ];
15 15
16 - private $media_hover_desktop = [
17 - 'name' => 'desktopHover',
18 - 'screen_size' => ''
19 - ];
16 + private $media_hover_desktop = [
17 + 'name' => 'desktopHover',
18 + 'screen_size' => ''
19 + ];
20 20
21 - private $media_tab = [
22 - 'name' => 'tab',
23 - 'screen_size' => 1024
24 - ];
21 + private $media_tab = [
22 + 'name' => 'tab',
23 + 'screen_size' => 1024
24 + ];
25 25
26 - private $media_hover_tab = [
27 - 'name' => 'tabHover',
28 - 'screen_size' => 1024
29 - ];
26 + private $media_hover_tab = [
27 + 'name' => 'tabHover',
28 + 'screen_size' => 1024
29 + ];
30 30
31 - private $media_mobile = [
32 - 'name' => 'mobile',
33 - 'screen_size' => 767
34 - ];
31 + private $media_mobile = [
32 + 'name' => 'mobile',
33 + 'screen_size' => 767
34 + ];
35 35
36 - private $media_hover_mobile = [
37 - 'name' => 'mobileHover',
38 - 'screen_size' => 767
39 - ];
36 + private $media_hover_mobile = [
37 + 'name' => 'mobileHover',
38 + 'screen_size' => 767
39 + ];
40 40
41 - private $extra_styles = [
42 - 'name' => 'extraStyles',
43 - 'screen_size' => ''
44 - ];
41 + private $extra_styles = [
42 + 'name' => 'extraStyles',
43 + 'screen_size' => ''
44 + ];
45 45
46 - public function __construct() {
47 - add_action( 'admin_enqueue_scripts', [$this, 'betterdocs_blocks_edit_post'] );
48 - add_action( 'wp_ajax_betterdocs_write_block_css', [$this, 'write_block_css'] );
49 - add_action( 'wp_enqueue_scripts', [$this, 'enqueue_frontend_css'] );
50 - }
46 + public function __construct() {
47 + add_action( 'admin_enqueue_scripts', [ $this, 'betterdocs_blocks_edit_post' ] );
48 + // add_action( 'wp_ajax_betterdocs_write_block_css', [$this, 'write_block_css'] );
49 + }
51 50
52 - /**
53 - * Enqueue a script in the WordPress admin on edit.php.
54 - * @param int $hook Hook suffix for the current admin page.
55 - */
56 - public function betterdocs_blocks_edit_post( $hook ) {
57 - if ( 'widgets.php' === $hook ) {
58 - return;
59 - }
51 + /**
52 + * Enqueue a script in the WordPress admin on edit.php.
53 + * @param int $hook Hook suffix for the current admin page.
54 + */
55 + public function betterdocs_blocks_edit_post( $hook ) {
56 + if ( 'widgets.php' === $hook ) {
57 + return;
58 + }
60 59
61 - if ( $hook != 'post.php' && $hook != 'post-new.php' && $hook != 'site-editor.php' ) {
62 - return;
63 - }
60 + if ( $hook != 'post.php' && $hook != 'post-new.php' && $hook != 'site-editor.php' ) {
61 + return;
62 + }
64 63
65 - $_style_handler_deps = [
66 - 'lodash',
67 - 'wp-i18n',
68 - 'wp-element',
69 - 'wp-hooks',
70 - 'wp-util',
71 - 'wp-components',
72 - 'wp-blocks',
73 - 'wp-editor',
74 - 'wp-block-editor'
75 - ];
64 + $_style_handler_deps = [
65 + 'lodash',
66 + 'wp-i18n',
67 + 'wp-element',
68 + 'wp-hooks',
69 + 'wp-util',
70 + 'wp-components',
71 + 'wp-blocks',
72 + 'wp-editor',
73 + 'wp-block-editor'
74 + ];
76 75
77 - $_style_handler_object = [
78 - 'sth_nonce' => wp_create_nonce( 'betterdocs_style_handler_nonce' ),
79 - 'editor_type' => 'edit-site'
80 - ];
76 + $_style_handler_object = [
77 + 'sth_nonce' => wp_create_nonce( 'betterdocs_style_handler_nonce' ),
78 + 'editor_type' => 'edit-site'
79 + ];
81 80
82 - if ( $hook == 'post-new.php' || $hook == 'post.php' ) {
83 - $_style_handler_deps[] = 'wp-edit-post';
84 - $_style_handler_object['editor_type'] = 'edit-post';
85 - } elseif ( $hook == 'site-editor.php' ) {
86 - $_style_handler_deps[] = 'wp-edit-site';
87 - $_style_handler_object['editor_type'] = 'edit-site';
88 - }
81 + if ( $hook == 'post-new.php' || $hook == 'post.php' ) {
82 + $_style_handler_deps[] = 'wp-edit-post';
83 + $_style_handler_object['editor_type'] = 'edit-post';
84 + } elseif ( $hook == 'site-editor.php' ) {
85 + $_style_handler_deps[] = 'wp-edit-site';
86 + $_style_handler_object['editor_type'] = 'edit-site';
87 + }
89 88
90 - betterdocs()->assets->enqueue( 'betterdocs-blocks-style-handler', 'vendor/js/style-handler.js', $_style_handler_deps );
91 - betterdocs()->assets->localize( 'betterdocs-blocks-style-handler', 'betterdocs_style_handler', $_style_handler_object );
92 - }
89 + betterdocs()->assets->enqueue( 'betterdocs-blocks-style-handler', 'vendor/js/style-handler.js', $_style_handler_deps );
90 + betterdocs()->assets->localize( 'betterdocs-blocks-style-handler', 'betterdocs_style_handler', $_style_handler_object );
91 + }
93 92
94 - /**
95 - * Ajax callback to write css in upload directory
96 - * @retun void
97 - * @since 1.0.2
98 - */
99 - public function write_block_css() {
100 - if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'betterdocs_style_handler_nonce' ) || ! current_user_can( 'manage_options' ) ) {
101 - echo 'Invalid request';
102 - wp_die();
103 - }
93 + /**
94 + * Ajax callback to write css in upload directory
95 + * @retun void
96 + * @since 1.0.2
97 + */
98 + public function write_block_css() {
99 + if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'betterdocs_style_handler_nonce' ) || ! current_user_can( 'manage_options' ) ) {
100 + echo 'Invalid request';
101 + wp_die();
102 + }
104 103
105 - $block_styles = (array) json_decode( stripslashes( $_POST['data'] ) );
104 + $block_styles = (array) json_decode( stripslashes( $_POST['data'] ) );
106 105
107 - if ( isset( $_POST['editorType'] ) && $_POST['editorType'] === "edit-site" ) {
108 - $upload_dir = wp_upload_dir()['basedir'] . '/betterdocs-style/';
109 - $editSiteCssPath = $upload_dir . 'betterdocs-style-' . $_POST['editorType'] . '.min.css';
110 - if ( file_exists( $editSiteCssPath ) ) {
111 - $existingCss = file_get_contents( $editSiteCssPath );
112 - $pattern = "~\/\*(.*?)\*\/~";
113 - preg_match_all( $pattern, $existingCss, $result, PREG_PATTERN_ORDER );
114 - $allComments = $result[0];
115 - $seperatedIds = [];
116 - foreach ( $allComments as $comment ) {
117 - $id = preg_replace( '/[^A-Za-z0-9\-]|Ends|Starts/', '', $comment );
106 + if ( isset( $_POST['editorType'] ) && $_POST['editorType'] === 'edit-site' ) {
107 + $upload_dir = wp_upload_dir()['basedir'] . '/betterdocs-style/';
108 + $editSiteCssPath = $upload_dir . 'betterdocs-style-' . $_POST['editorType'] . '.min.css';
109 + if ( file_exists( $editSiteCssPath ) ) {
110 + $existingCss = file_get_contents( $editSiteCssPath );
111 + $pattern = '~\/\*(.*?)\*\/~';
112 + preg_match_all( $pattern, $existingCss, $result, PREG_PATTERN_ORDER );
113 + $allComments = $result[0];
114 + $seperatedIds = [];
115 + foreach ( $allComments as $comment ) {
116 + $id = preg_replace( '/[^A-Za-z0-9\-]|Ends|Starts/', '', $comment );
118 117
119 - if ( strpos( $comment, "Starts" ) ) {
120 - $seperatedIds[$id]['start'] = $comment;
121 - } else if ( strpos( $comment, "Ends" ) ) {
122 - $seperatedIds[$id]['end'] = $comment;
123 - }
124 - }
118 + if ( strpos( $comment, 'Starts' ) ) {
119 + $seperatedIds[ $id ]['start'] = $comment;
120 + } elseif ( strpos( $comment, 'Ends' ) ) {
121 + $seperatedIds[ $id ]['end'] = $comment;
122 + }
123 + }
125 124
126 - $seperateStyles = [];
127 - foreach ( $seperatedIds as $key => $ids ) {
128 - $data = $this->get_between_data( $existingCss, $ids['start'], $ids['end'] );
129 - $seperateStyles[$key] = $data;
130 - }
125 + $seperateStyles = [];
126 + foreach ( $seperatedIds as $key => $ids ) {
127 + $data = $this->get_between_data( $existingCss, $ids['start'], $ids['end'] );
128 + $seperateStyles[ $key ] = $data;
129 + }
131 130
132 - $finalCSSArray = array_merge( $seperateStyles, $block_styles );
131 + $finalCSSArray = array_merge( $seperateStyles, $block_styles );
133 132
134 - if ( ! empty( $css = $this->build_css( $finalCSSArray ) ) ) {
135 - $upload_dir = wp_upload_dir()['basedir'] . '/betterdocs-style/';
136 - if ( ! file_exists( $upload_dir ) ) {
137 - mkdir( $upload_dir );
138 - }
133 + if ( ! empty( $css = $this->build_css( $finalCSSArray ) ) ) {
134 + $upload_dir = wp_upload_dir()['basedir'] . '/betterdocs-style/';
135 + if ( ! file_exists( $upload_dir ) ) {
136 + mkdir( $upload_dir );
137 + }
139 138
140 - file_put_contents( $editSiteCssPath, $css );
141 - }
142 - } else {
143 - if ( ! empty( $css = $this->build_css( $block_styles ) ) ) {
144 - $upload_dir = wp_upload_dir()['basedir'] . '/betterdocs-style/';
145 - if ( ! file_exists( $upload_dir ) ) {
146 - mkdir( $upload_dir );
147 - }
139 + file_put_contents( $editSiteCssPath, $css );
140 + }
141 + } elseif ( ! empty( $css = $this->build_css( $block_styles ) ) ) {
142 + $upload_dir = wp_upload_dir()['basedir'] . '/betterdocs-style/';
143 + if ( ! file_exists( $upload_dir ) ) {
144 + mkdir( $upload_dir );
145 + }
148 146
149 - file_put_contents( $editSiteCssPath, $css );
150 - }
151 - }
152 - } else {
153 - if ( ! empty( $css = $this->build_css( $block_styles ) ) ) {
154 - $upload_dir = wp_upload_dir()['basedir'] . '/betterdocs-style/';
155 - if ( ! file_exists( $upload_dir ) ) {
156 - mkdir( $upload_dir );
157 - }
158 - file_put_contents( $upload_dir . 'betterdocs-style-' . abs( $_POST['id'] ) . '.min.css', $css );
159 - }
160 - }
147 + file_put_contents( $editSiteCssPath, $css );
148 + }
149 + } elseif ( ! empty( $css = $this->build_css( $block_styles ) ) ) {
150 + $upload_dir = wp_upload_dir()['basedir'] . '/betterdocs-style/';
151 + if ( ! file_exists( $upload_dir ) ) {
152 + mkdir( $upload_dir );
153 + }
154 + file_put_contents( $upload_dir . 'betterdocs-style-' . abs( $_POST['id'] ) . '.min.css', $css );
155 + }
161 156
162 - wp_send_json_success( 'done' );
163 - }
157 + wp_send_json_success( 'done' );
158 + }
164 159
165 - /**
166 - * Enqueue frontend css for post if have one
167 - * @return void
168 - * @since 1.0.2
169 - */
170 - public function enqueue_frontend_css() {
171 - global $post;
160 + /**
161 + * Enqueue frontend css for post if have one
162 + * @param array
163 + * @return string
164 + * @since 1.0.2
165 + */
166 + private function build_css( $style_object ) {
167 + // $block_styles = (array)json_decode(stripslashes($style_object));
168 + $block_styles = $style_object;
172 169
173 - if ( ! empty( $post ) && ! empty( $post->ID ) ) {
174 - $upload_dir = wp_upload_dir();
170 + $css = '';
171 + foreach ( $block_styles as $block_style_key => $block_style ) {
172 + if ( ! empty( $block_css = (array) $block_style ) ) {
173 + $css .= sprintf(
174 + '/* %1$s Starts */',
175 + $block_style_key
176 + );
177 + foreach ( $block_css as $media => $style ) {
178 + switch ( $media ) {
179 + case $this->media_desktop['name']:
180 + $css .= preg_replace( '/\s+/', ' ', $style );
181 + break;
182 + case $this->media_hover_desktop['name']:
183 + $css .= preg_replace( '/\s+/', ' ', $style );
184 + break;
185 + case $this->media_tab['name']:
186 + $css .= ' @media(max-width: 1024px){';
187 + $css .= preg_replace( '/\s+/', ' ', $style );
188 + $css .= '}';
189 + break;
190 + case $this->media_hover_tab['name']:
191 + $css .= ' @media(max-width: 1024px){';
192 + $css .= preg_replace( '/\s+/', ' ', $style );
193 + $css .= '}';
194 + break;
195 + case $this->media_mobile['name']:
196 + $css .= ' @media(max-width: 767px){';
197 + $css .= preg_replace( '/\s+/', ' ', $style );
198 + $css .= '}';
199 + break;
200 + case $this->media_hover_mobile['name']:
201 + $css .= ' @media(max-width: 767px){';
202 + $css .= preg_replace( '/\s+/', ' ', $style );
203 + $css .= '}';
204 + break;
205 + case $this->extra_styles['name']:
206 + $css .= preg_replace( '/\s+/', ' ', $style );
207 + break;
208 + }
209 + }
210 + $css .= sprintf(
211 + '/* =%1$s= Ends */',
212 + $block_style_key
213 + );
214 + }
215 + }
216 + return trim( $css );
217 + }
175 218
176 - $style_css_path = $upload_dir['basedir'] . '/betterdocs-style/betterdocs-style-' . $post->ID . '.min.css';
177 - $style_css_url = $upload_dir['baseurl'] . '/betterdocs-style/betterdocs-style-' . $post->ID . '.min.css';
219 + /**
220 + * Helper function to get string between 2 string
221 + * @since 3.3.0
222 + */
223 + private function get_between_data( $string, $start, $end ) {
224 + $pos_string = stripos( $string, $start );
225 + $substr_data = substr( $string, $pos_string );
226 + $string_two = substr( $substr_data, strlen( $start ) );
227 + $second_pos = stripos( $string_two, $end );
228 + $string_three = substr( $string_two, 0, $second_pos );
178 229
179 - if ( file_exists( $style_css_path ) ) {
180 - wp_enqueue_style(
181 - 'betterdocs-block-style-' . $post->ID,
182 - $style_css_url, [], betterdocs()->version, 'all'
183 - );
184 - }
185 - if ( function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() && file_exists( $upload_dir['basedir'] . '/betterdocs-style/betterdocs-style-edit-site.min.css' ) ) {
186 - wp_enqueue_style( 'betterdocs-fullsite-style', $upload_dir['baseurl'] . '/betterdocs-style/betterdocs-style-edit-site.min.css', [], substr( md5( microtime( true ) ), 0, 10 ) );
187 - }
188 - }
189 - }
230 + // remove whitespaces from result
231 + $result_unit = trim( $string_three );
190 232
191 - /**
192 - * Enqueue frontend css for post if have one
193 - * @param array
194 - * @return string
195 - * @since 1.0.2
196 - */
197 - private function build_css( $style_object ) {
198 - // $block_styles = (array)json_decode(stripslashes($style_object));
199 - $block_styles = $style_object;
200 -
201 - $css = '';
202 - foreach ( $block_styles as $block_style_key => $block_style ) {
203 - if ( ! empty( $block_css = (array) $block_style ) ) {
204 - $css .= sprintf(
205 - '/* %1$s Starts */',
206 - $block_style_key
207 - );
208 - foreach ( $block_css as $media => $style ) {
209 - switch ( $media ) {
210 - case $this->media_desktop['name']:
211 - $css .= preg_replace( '/\s+/', ' ', $style );
212 - break;
213 - case $this->media_hover_desktop['name']:
214 - $css .= preg_replace( '/\s+/', ' ', $style );
215 - break;
216 - case $this->media_tab['name']:
217 - $css .= ' @media(max-width: 1024px){';
218 - $css .= preg_replace( '/\s+/', ' ', $style );
219 - $css .= '}';
220 - break;
221 - case $this->media_hover_tab['name']:
222 - $css .= ' @media(max-width: 1024px){';
223 - $css .= preg_replace( '/\s+/', ' ', $style );
224 - $css .= '}';
225 - break;
226 - case $this->media_mobile['name']:
227 - $css .= ' @media(max-width: 767px){';
228 - $css .= preg_replace( '/\s+/', ' ', $style );
229 - $css .= '}';
230 - break;
231 - case $this->media_hover_mobile['name']:
232 - $css .= ' @media(max-width: 767px){';
233 - $css .= preg_replace( '/\s+/', ' ', $style );
234 - $css .= '}';
235 - break;
236 - case $this->extra_styles['name']:
237 - $css .= preg_replace( '/\s+/', ' ', $style );
238 - break;
239 - }
240 - }
241 - $css .= sprintf(
242 - '/* =%1$s= Ends */',
243 - $block_style_key
244 - );
245 - }
246 - }
247 - return trim( $css );
248 - }
249 -
250 - /**
251 - * Helper function to get string between 2 string
252 - * @since 3.3.0
253 - */
254 - private function get_between_data( $string, $start, $end ) {
255 - $pos_string = stripos( $string, $start );
256 - $substr_data = substr( $string, $pos_string );
257 - $string_two = substr( $substr_data, strlen( $start ) );
258 - $second_pos = stripos( $string_two, $end );
259 - $string_three = substr( $string_two, 0, $second_pos );
260 -
261 - // remove whitespaces from result
262 - $result_unit = trim( $string_three );
263 -
264 - // return result_unit
265 - return $result_unit;
266 - }
233 + // return result_unit
234 + return $result_unit;
235 + }
267 236 }