PluginProbe
Page Builder: Pagelayer – Drag and Drop website builder / 2.2.2
Page Builder: Pagelayer – Drag and Drop website builder v2.2.2
2.2.2 2.2.1 2.2.0 2.1.9 2.1.8 2.1.7 2.1.6 2.1.5 2.1.4 2.1.3 trunk 0.9.0 0.9.1 0.9.2 0.9.3 0.9.4 0.9.5 0.9.6 0.9.7 0.9.8 0.9.9 1.0.0 1.0.2 1.0.3 1.0.4 All 130 releases
← All changes | main/live-body.php +198 -14 1.0.2 → 2.2.2 View file →
@@ -26,28 +26,107 @@
26 26
27 27
28 28 function pagelayer_live_body(){
29 29
30 -global $post;
30 +global $post, $pagelayer;
31 31
32 -echo '
33 -<html>
34 -<head>
35 - <link rel="stylesheet" href="'.PAGELAYER_CSS.'/givecss.php?give=pagelayer-editor.css,trumbowyg.min.css,pagelayer-icons.css&ver='.PAGELAYER_VERSION.'">';
32 + // XSS BLOCK (defense at the source): If the post contains XSS injected
33 + if(pagelayer_should_show_xss_warning()){
34 + pagelayer_render_xss_warning_block();
35 + }
36 36
37 37 $icons = pagelayer_enabled_icons();
38 + $icons_list = array();
38 39
39 40 // Load all icons
40 41 foreach($icons as $icon){
41 - echo '<link rel="stylesheet" href="'.PAGELAYER_CSS.'/givecss.php?give='.$icon.'.min.css&ver='.PAGELAYER_VERSION.'">';
42 + $icons_list[] = $icon.'.min.css';
42 43 }
43 44
45 + $css_url = admin_url('admin-ajax.php?action=pagelayer_givecss&pagelayer_nonce=1&');
46 + if(pagelayer_enable_giver()){
47 + $css_url = PAGELAYER_CSS.'/givecss.php?';
48 + }
49 +
50 + $dark_mode = get_option('pagelayer_enable_dark_mode');
51 + $body_class = '';
52 + if(!empty($dark_mode)){
53 + $body_class = 'pagelayer-dark';
54 + };
55 +
56 + if(defined('SITEPAD')){
57 + $body_class .= ' sitepad-body';
58 + }
59 +
60 + $shortcut_groups = [
61 + 'general_shortcuts' => [
62 + 'undo' => 'Ctrl+Z',
63 + 'redo' => 'Ctrl+Y',
64 + 'save_post' => 'Ctrl+S',
65 + 'copy_widget' => 'Ctrl+C',
66 + 'paste_widget' => 'Ctrl+V',
67 + 'duplicate_widget' => 'Ctrl+D',
68 + 'delete_widget' => 'Delete'
69 + ]
70 + ];
71 +
72 + echo '
73 +<html>
74 +<head>
75 + <link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
76 + <link rel="stylesheet" href="'.$css_url.'give=pagelayer-editor.css,trumbowyg.min.css,pagelayer-icons.css,pagelayer-ai.css,'.implode(',' ,$icons_list).'&ver='.PAGELAYER_VERSION.'">';
77 +
44 78 do_action('pagelayer_live_body_head');
79 +
80 + // Brand Name
81 + $brand = strtoupper($pagelayer->BRAND_TEXT);
82 + $brand = str_split($brand);
83 +
84 + echo '
85 +<style>
86 +/*Set responsive variables*/
87 +.pagelayer-screen-tablet{
88 +width: '. $pagelayer->settings['tablet_breakpoint'] .'px;
89 +}
90 +.pagelayer-screen-mobile{
91 +width: '. $pagelayer->settings['mobile_breakpoint'] .'px;
92 +}
93 +.pagelayer-errorBox-support{
94 +text-decoration:none;
95 +}
96 +</style>
97 +</head>
45 98
46 -echo '
47 -</head>
99 + <body class="pagelayer-normalize pagelayer-body '.$body_class.'">
100 +<div class="pagelayer-errorBox">
101 + <div class="pagelayer-errorBox-close"><i class="fas fa-times"></i></div>
102 + <div class="pagelayer-errorBox-main">
103 + <h2><i class="fas fa-times"></i>'.__pl('error').'</h2>
104 + <div class="pagelayer-errorBox-content"></div>
105 + </div>
106 + <div class="pagelayer-errorBox-resolve">
107 + <p>'.__pl('error_submitting').'</p>
108 + <button type="button" class="pagelayer-errorBox-copy" onclick="pagelayer_copy_error(event)">'.__pl('copy').'</button>
109 + <a type="button" class="pagelayer-errorBox-support" href="'. $pagelayer->support .'" target="_bank">'.__pl('support').'</a>
110 + </div>
111 +</div>
112 +<div id="pagelayer-loader-wrapper">
113 + <div class="pagelayer-animation-section">
114 + <div class="pagelayer-loader">
115 + <div class="pagelayer-percent-parent">
116 + <div class="pagelayer-percent">10<sup>%</sup></div>
117 + </div>
118 + </div>
119 + <div class="pagelayer-txt-loading">';
120 +
121 + foreach($brand as $k => $v){
122 + echo '<span data-text-preloader="'.$v.'" class="letters-loading">'.$v.'</span>';
123 + }
124 +
125 + echo '</div>
126 + </div>
127 +</div>
48 128
49 -<body class="pagelayer-normalize pagelayer-body">
50 129 <table class="pagelayer-normalize pagelayer-body-table" cellpadding="0" cellspacing="0">
51 130 <tr>
52 131 <td valign="top" width="270" class="pagelayer-leftbar-table">
53 132 <table class="pagelayer-normalize" cellpadding="0" cellspacing="0">
@@ -60,15 +139,15 @@
60 139 </td>
61 140 </tr>
62 141 <tr height="45">
63 142 <td class="pagelayer-topbar-holder" valign="middle" align="center">
143 + <span class="pagelayer-options-icon pli pli-menu"></span>
64 144 <div class="pagelayer-elpd-header" style="display:none">
65 145 <div class="pagelayer-elpd-close"><i class="pli pli-cross" aria-hidden="true"></i></div>
66 - <div class="pagelayer-elpd-title">Edit</div>
146 + <div class="pagelayer-elpd-title pagelayer-topbar-mover">Edit</div>
67 147 </div>
68 148 <div class="pagelayer-logo">
69 - <span class="pagelayer-options-icon pli pli-menu" style="display:none"></span>
70 - <img src="'.PAGELAYER_LOGO.'" width="32" /><span class="pagelayer-logo-text">'.PAGELAYER_BRAND_TEXT.'</span>
149 + <img src="'.$pagelayer->LOGO.'" width="28" /><span class="pagelayer-logo-text pagelayer-topbar-mover">'.$pagelayer->BRAND_TEXT.(defined('PAGELAYER_PREMIUM') && strtolower($pagelayer->BRAND_TEXT) == 'pagelayer' ? '<sup style="margin: 3px; font-size: 12px; letter-spacing: 1px; font-family: "Roboto";">Pro</sup>' : '').'</span>
71 150 <span class="pagelayer-settings-icon pli pli-service" aria-hidden="true"></span>
72 151 </div>
73 152 </td>
74 153 </tr>
@@ -80,25 +159,130 @@
80 159 </tr>
81 160 </table>
82 161 <div class="pagelayer-leftbar-toggle">&lsaquo;</div>
83 162 </td>
84 - <td class="pagelayer-iframe">
163 + <td class="pagelayer-iframe" valign="top">
85 164 <div class="pagelayer-iframe-top-bar">';
86 165 do_action('pagelayer_iframe_top_bar');
87 166 echo '
88 167 </div>
89 168 <div class="pagelayer-iframe-holder">
90 - <iframe src="'.(pagelayer_shortlink(0).'&pagelayer-iframe=1&'.$_SERVER['QUERY_STRING']).'" class="pagelayer-normalize" id="pagelayer-iframe"></iframe>
169 + <iframe src="'.(pagelayer_shortlink(0).'&pagelayer-iframe=1&'.$_SERVER['QUERY_STRING']).'" class="pagelayer-normalize skip-lazy" id="pagelayer-iframe"></iframe>
91 170 </div>
92 171 </td>
93 172 </tr>
94 173 </table>
95 174
175 +<div class="pagelayer-pro-notice">';
176 + pagelayer_show_pro_div('Premium Feature<span class="pli pli-cross pagelayer-pro-x"></span>', '', 0);
177 +echo '</div>
178 +<div class="pagelayer-editor-notice"></div>
179 +<div class="pagelayer-props-modal">
180 + <div class="pagelayer-props-holder">
181 + <div class="pagelayer-props-wrap">
182 + <div class="pagelayer-props-loading-screen"></div>
183 + <i class="pagelayer-props-modal-close pli pli-cross" aria-hidden="true"></i>
184 + </div>
185 + </div>
186 +</div>
96 187 <script>
97 188 var pagelayer_iframe_cw = document.getElementById("pagelayer-iframe").contentWindow;
189 +var start_time = new Date().getTime();
190 +
191 +// Show loading progress
192 +function loader(ran) {
193 + var inner = document.getElementsByClassName("pagelayer-percent")[0];
194 + var w = 0;
195 + var t = setInterval(function() {
196 + w = w + 1;
197 + inner.innerHTML = (w+"<sup>%</sup>");
198 + if (w === ran || inner.getAttribute("loaded") == "1"){
199 + clearInterval(t);
200 + w = 0;
201 + }
202 + }, 50);
203 +}
204 +loader(90);
205 +
206 +function $p(sel){
207 + return pagelayer_iframe_cw.pagelayer.$$(sel);
208 +}
209 +
210 +// Load the window if necessary i.e. an error in the JS of the iframe
211 +function onIframeLoad(){
212 + setTimeout(function(){
213 + force_pagelayer_start();
214 + }, 5000);
215 +}
216 +
217 +function force_pagelayer_start(){
218 +try{
219 + if(pagelayer_iframe_cw.pagelayer.loaded == 1){
220 + return;
221 + }
222 + pagelayer_iframe_cw.pagelayer_start();
223 + var end_time = new Date().getTime();
224 + var diff = (end_time - start_time) / 1000;
225 + console.log("['.$pagelayer->BRAND_TEXT.'] Live Body had to load after : "+diff+" seconds");
226 +
227 +// If this fails, lets just hide the loader
228 +}catch(e){
229 + alert("Fatal error within the '.$pagelayer->BRAND_TEXT.' iFrame as pagelayer object not found ! Please contact '.$pagelayer->BRAND_TEXT.' support");
230 + document.getElementById("pagelayer-loader-wrapper").remove();
231 +}
232 +}
233 +
234 +document.getElementById("pagelayer-iframe").onload = onIframeLoad;
235 +
236 +// ErrorBox content copy function
237 +function pagelayer_copy_error(){
238 + var tempInput = document.createElement("textarea");
239 + tempInput.value = document.querySelector(".pagelayer-errorBox-content").innerText;
240 + document.body.appendChild(tempInput);
241 + tempInput.select();
242 + document.execCommand("copy");
243 + document.body.removeChild(tempInput);
244 + alert("'.__pl('copy_success').'");
245 +}
246 +
98 247 </script>
99 248
249 +<div class="pagelayer-editor-modal pagelayer-shortcuts-modal">
250 + <div class="pagelayer-editor-modal-wrap">
251 + <div class="pagelayer-editor-modal-header">
252 + <h2>'.__pl('keyboard_shortcuts').'</h2>
253 + <span class="pagelayer-editor-modal-close-icon"><i class="fas fa-times"></i></span>
254 + </div>
255 + <div class="pagelayer-editor-modal-body">';
256 + foreach($shortcut_groups as $grp_name => $group){
257 +
258 + if(empty($group)) {
259 + return;
260 + }
261 +
262 + echo '<div class="pagelayer-edt-modal-block">'. (!empty($grp_name) ? '<h3>'.__pl($grp_name).'</h3>' :'' ) .'<ul>';
263 +
264 + foreach($group as $desc => $shortcut) {
265 + echo '<li><span class="pagelayer-keyboard-shortcut-desc">'.__pl($desc).'</span>
266 + <span class="pagelayer-keyboard-shortcut-keys">';
267 +
268 + //Considering the whole shortcut as a single key
269 + $key = '<span>'.$shortcut.'</span>';
270 +
271 + //replacing "+" and "," from the string to put it inside <span>
272 + $key = preg_replace('/\+/', '</span> + <span>', $key);
273 + $key = preg_replace('/\,/', '</span><span style="display:block; margin-top:10px;">', $key);
274 +
275 + echo $key.'</span></li>';
276 + }
277 +
278 + echo '</ul></div>';
279 + }
280 +
281 + echo '</div>
282 + </div>
283 +</div>
100 284 </body>';
101 285
102 286 die();
103 287
104 288 }