Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/elementor/includes/preview.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
namespace Elementor;
3
+
4
+
use Elementor\Core\Base\App;
5
+
use Elementor\Core\Settings\Manager as SettingsManager;
6
+
7
+
if ( ! defined( 'ABSPATH' ) ) {
8
+
exit; // Exit if accessed directly.
9
+
}
10
+
11
+
/**
12
+
* Elementor preview.
13
+
*
14
+
* Elementor preview handler class is responsible for initializing Elementor in
15
+
* preview mode.
16
+
*
17
+
* @since 1.0.0
18
+
*/
19
+
class Preview extends App {
20
+
21
+
/**
22
+
* The priority of the preview enqueued styles.
23
+
*/
24
+
const ENQUEUED_STYLES_PRIORITY = 20;
25
+
26
+
/**
27
+
* Is Preview.
28
+
*
29
+
* Holds a flag if current request is a preview.
30
+
* The flag is not related to a specific post or edit permissions.
31
+
*
32
+
* @since 2.9.5
33
+
* @access private
34
+
*
35
+
* @var bool Is Preview.
36
+
*/
37
+
38
+
private $is_preview;
39
+
40
+
/**
41
+
* Post ID.
42
+
*
43
+
* Holds the ID of the current post being previewed.
44
+
*
45
+
* @since 1.0.0
46
+
* @access private
47
+
*
48
+
* @var int Post ID.
49
+
*/
50
+
private $post_id;
51
+
52
+
/**
53
+
* Get module name.
54
+
*
55
+
* Retrieve the module name.
56
+
*
57
+
* @since 3.0.0
58
+
* @access public
59
+
* @abstract
60
+
*
61
+
* @return string Module name.
62
+
*/
63
+
public function get_name() {
64
+
return 'preview';
65
+
}
66
+
67
+
/**
68
+
* Init.
69
+
*
70
+
* Initialize Elementor preview mode.
71
+
*
72
+
* Fired by `template_redirect` action.
73
+
*
74
+
* @since 1.0.0
75
+
* @access public
76
+
*/
77
+
public function init() {
78
+
if ( is_admin() || ! $this->is_preview_mode() ) {
79
+
return;
80
+
}
81
+
82
+
if ( isset( $_GET['preview-debug'] ) ) {
83
+
register_shutdown_function( function () {
84
+
$e = error_get_last();
85
+
if ( $e ) {
86
+
echo '<div id="elementor-preview-debug-error"><pre>';
87
+
Utils::print_unescaped_internal_string( $e['message'] );
88
+
echo '</pre></div>';
89
+
}
90
+
} );
91
+
}
92
+
93
+
$this->post_id = get_the_ID();
94
+
$this->is_preview = true;
95
+
96
+
// Don't redirect to permalink.
97
+
remove_action( 'template_redirect', 'redirect_canonical' );
98
+
99
+
// Compatibility with Yoast SEO plugin when 'Removes unneeded query variables from the URL' enabled.
100
+
// TODO: Move this code to `includes/compatibility.php`.
101
+
if ( class_exists( 'WPSEO_Frontend' ) ) {
102
+
remove_action( 'template_redirect', [ \WPSEO_Frontend::get_instance(), 'clean_permalink' ], 1 );
103
+
}
104
+
105
+
// Disable the WP admin bar in preview mode.
106
+
add_filter( 'show_admin_bar', '__return_false' );
107
+
108
+
add_action( 'wp_enqueue_scripts', function() {
109
+
$this->enqueue_styles();
110
+
$this->enqueue_scripts();
111
+
}, self::ENQUEUED_STYLES_PRIORITY );
112
+
113
+
add_filter( 'the_content', [ $this, 'builder_wrapper' ], 999999 );
114
+
115
+
add_action( 'wp_footer', [ $this, 'wp_footer' ] );
116
+
117
+
// Avoid Cloudflare's Rocket Loader lazy load the editor iframe
118
+
add_filter( 'script_loader_tag', [ $this, 'rocket_loader_filter' ], 10, 3 );
119
+
120
+
// Tell to WP Cache plugins do not cache this request.
121
+
Utils::do_not_cache();
122
+
123
+
/**
124
+
* Preview init.
125
+
*
126
+
* Fires on Elementor preview init, after Elementor preview has finished
127
+
* loading but before any headers are sent.
128
+
*
129
+
* @since 1.0.0
130
+
*
131
+
* @param Preview $this The current preview.
132
+
*/
133
+
do_action( 'elementor/preview/init', $this );
134
+
}
135
+
136
+
/**
137
+
* Retrieve post ID.
138
+
*
139
+
* Get the ID of the current post.
140
+
*
141
+
* @since 1.8.0
142
+
* @access public
143
+
*
144
+
* @return int Post ID.
145
+
*/
146
+
public function get_post_id() {
147
+
return $this->post_id;
148
+
}
149
+
150
+
/**
151
+
* Is Preview.
152
+
*
153
+
* Whether current request is the elementor preview iframe.
154
+
* The flag is not related to a specific post or edit permissions.
155
+
*
156
+
* @since 2.9.5
157
+
* @access public
158
+
*
159
+
* @return bool
160
+
*/
161
+
public function is_preview() {
162
+
return $this->is_preview;
163
+
}
164
+
165
+
/**
166
+
* Whether preview mode is active.
167
+
*
168
+
* Used to determine whether we are in the preview mode (iframe).
169
+
*
170
+
* @since 1.0.0
171
+
* @access public
172
+
*
173
+
* @param int $post_id Optional. Post ID. Default is `0`.
174
+
*
175
+
* @return bool Whether preview mode is active.
176
+
*/
177
+
public function is_preview_mode( $post_id = 0 ) {
178
+
if ( ! isset( $_GET['elementor-preview'] ) ) {
179
+
return false;
180
+
}
181
+
182
+
if ( empty( $post_id ) ) {
183
+
$post_id = get_the_ID();
184
+
}
185
+
186
+
if ( ! User::is_current_user_can_edit( $post_id ) ) {
187
+
return false;
188
+
}
189
+
190
+
if ( $post_id !== (int) $_GET['elementor-preview'] ) {
191
+
return false;
192
+
}
193
+
194
+
return true;
195
+
}
196
+
197
+
/**
198
+
* Builder wrapper.
199
+
*
200
+
* Used to add an empty HTML wrapper for the builder, the javascript will add
201
+
* the content later.
202
+
*
203
+
* @since 1.0.0
204
+
* @access public
205
+
*
206
+
* @param string $content The content of the builder.
207
+
*
208
+
* @return string HTML wrapper for the builder.
209
+
*/
210
+
public function builder_wrapper( $content ) {
211
+
if ( get_the_ID() === $this->post_id ) {
212
+
$document = Plugin::$instance->documents->get( $this->post_id );
213
+
214
+
$attributes = $document->get_container_attributes();
215
+
216
+
$content = '<div ' . Utils::render_html_attributes( $attributes ) . '></div>';
217
+
}
218
+
219
+
return $content;
220
+
}
221
+
222
+
/**
223
+
* Enqueue preview styles.
224
+
*
225
+
* Registers all the preview styles and enqueues them.
226
+
*
227
+
* Fired by `wp_enqueue_scripts` action.
228
+
*
229
+
* @since 1.0.0
230
+
* @access private
231
+
*/
232
+
private function enqueue_styles() {
233
+
// Hold-on all jQuery plugins after all HTML markup render.
234
+
wp_add_inline_script( 'jquery-migrate', 'jQuery.holdReady( true );' );
235
+
236
+
Plugin::$instance->frontend->enqueue_styles();
237
+
238
+
Plugin::$instance->elements_manager->enqueue_elements_styles();
239
+
240
+
Plugin::$instance->widgets_manager->enqueue_widgets_styles();
241
+
242
+
$suffix = Utils::is_script_debug() ? '' : '.min';
243
+
244
+
$direction_suffix = is_rtl() ? '-rtl' : '';
245
+
246
+
wp_register_style(
247
+
'elementor-select2',
248
+
ELEMENTOR_ASSETS_URL . 'lib/e-select2/css/e-select2' . $suffix . '.css',
249
+
[],
250
+
'4.0.6-rc.1'
251
+
);
252
+
253
+
wp_register_style(
254
+
'editor-preview',
255
+
ELEMENTOR_ASSETS_URL . 'css/editor-preview' . $direction_suffix . $suffix . '.css',
256
+
[
257
+
'elementor-select2',
258
+
],
259
+
ELEMENTOR_VERSION
260
+
);
261
+
262
+
wp_enqueue_style(
263
+
'e-theme-ui-light',
264
+
$this->get_css_assets_url( 'theme-light' ),
265
+
[],
266
+
ELEMENTOR_VERSION
267
+
);
268
+
269
+
wp_enqueue_style( 'editor-preview' );
270
+
271
+
// Handle the 'wp audio' in editor preview.
272
+
wp_enqueue_style( 'wp-mediaelement' );
273
+
274
+
/**
275
+
* Preview enqueue styles.
276
+
*
277
+
* Fires after Elementor preview styles are enqueued.
278
+
*
279
+
* @since 1.0.0
280
+
*/
281
+
do_action( 'elementor/preview/enqueue_styles' );
282
+
}
283
+
284
+
/**
285
+
* Enqueue preview scripts.
286
+
*
287
+
* Registers all the preview scripts and enqueues them.
288
+
*
289
+
* Fired by `wp_enqueue_scripts` action.
290
+
*
291
+
* @since 1.5.4
292
+
* @access private
293
+
*/
294
+
private function enqueue_scripts() {
295
+
Plugin::$instance->frontend->register_scripts();
296
+
297
+
Plugin::$instance->widgets_manager->enqueue_widgets_scripts();
298
+
Plugin::$instance->elements_manager->enqueue_elements_scripts();
299
+
300
+
$suffix = Utils::is_script_debug() ? '' : '.min';
301
+
302
+
wp_enqueue_script(
303
+
'elementor-inline-editor',
304
+
ELEMENTOR_ASSETS_URL . 'lib/inline-editor/js/inline-editor' . $suffix . '.js',
305
+
[],
306
+
ELEMENTOR_VERSION,
307
+
true
308
+
);
309
+
310
+
// Handle the 'wp audio' in editor preview.
311
+
wp_enqueue_script( 'wp-mediaelement' );
312
+
313
+
/**
314
+
* Preview enqueue scripts.
315
+
*
316
+
* Fires after Elementor preview scripts are enqueued.
317
+
*
318
+
* @since 1.5.4
319
+
*/
320
+
do_action( 'elementor/preview/enqueue_scripts' );
321
+
}
322
+
323
+
public function rocket_loader_filter( $tag, $handle, $src ) {
324
+
return str_replace( '<script', '<script data-cfasync="false"', $tag );
325
+
}
326
+
327
+
/**
328
+
* Elementor Preview footer scripts and styles.
329
+
*
330
+
* Handle styles and scripts from frontend.
331
+
*
332
+
* Fired by `wp_footer` action.
333
+
*
334
+
* @since 2.0.9
335
+
* @access public
336
+
*/
337
+
public function wp_footer() {
338
+
$frontend = Plugin::$instance->frontend;
339
+
if ( $frontend->has_elementor_in_page() ) {
340
+
// Has header/footer/widget-template - enqueue all style/scripts/fonts.
341
+
$frontend->wp_footer();
342
+
} else {
343
+
// Enqueue only scripts.
344
+
$frontend->enqueue_scripts();
345
+
}
346
+
}
347
+
348
+
/**
349
+
* Preview constructor.
350
+
*
351
+
* Initializing Elementor preview.
352
+
*
353
+
* @since 1.0.0
354
+
* @access public
355
+
*/
356
+
public function __construct() {
357
+
add_action( 'template_redirect', [ $this, 'init' ], 0 );
358
+
}
359
+
}
360
+