PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.17.6
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.17.6
1.19.8 1.19.7 1.19.6 1.19.5 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.12.0 1.13.0 1.14.0 1.15.0 1.15.1 1.15.2 1.15.3 1.16.0 1.16.1 1.16.2 1.16.3 1.16.4 1.16.5 1.16.6 1.16.7 1.16.8 1.17.0 1.17.6 1.17.7 1.17.8 1.17.9 1.18.0 1.18.1 1.18.2 1.18.3 1.18.4 1.18.5 1.18.6 1.18.7 1.18.8 1.18.9 1.19.0 1.19.1 1.19.2 1.19.3 1.19.4 1.3.19 1.3.20 1.4.0 1.4.1 1.5.0 1.5.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.16 1.5.17 1.5.18 1.5.19 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.7.0 1.7.1 1.8.0 1.8.1 1.8.3 1.9.0 1.9.1 1.9.2
nitropack / view / dashboard-oneclick.php
nitropack / view Last commit date
images 1 year ago javascript 1 year ago modals 1 year ago stylesheet 1 year ago templates 2 years ago admin.php 1 year ago connect-oneclick.php 1 year ago connect.php 2 years ago dashboard-oneclick.php 1 year ago dashboard.php 1 year ago oneclick.php 1 year ago safemode.php 2 years ago system-report.php 1 year ago
dashboard-oneclick.php
456 lines
1 <?php
2 $settings = new \NitroPack\WordPress\Settings();
3 $usage = '0 MB';
4 $max_usage = '1 GB';
5 $page_views = '0';
6 $max_page_views = '10000'; ?>
7 <?php nitropack_display_admin_notices(); ?>
8 <div class="grid grid-cols-2 gap-6 grid-col-1-tablet items-start">
9 <div class="col-span-1">
10 <!-- Optimized Pages Card -->
11 <div class="card card-optimized-pages">
12 <div class="card-header">
13 <h3><?php esc_html_e('Optimized pages', 'nitropack'); ?></h3>
14 <div class="flex flex-row items-center" style="display: none;" id="pending-optimizations-section">
15 <img src="<?php echo plugin_dir_url(__FILE__) . 'images/loading.svg'; ?>" alt="loading" class="w-4 h-4">
16 <span class="ml-2 mr-1 text-primary"> <?php esc_html_e('Processing', 'nitropack'); ?>
17 <span id="pending-optimizations-count">X</span> <?php esc_html_e('page(s) in the background', 'nitropack'); ?></span>
18 </div>
19 </div>
20 <div class="card-body">
21 <div class="card-body-inner">
22 <div class="optimized-pages"><span data-optimized-pages-total>0</span></div>
23 <div class="text-box">
24 <div class="time-ago"><?php esc_html_e('Last cache purge', 'nitropack'); ?>: <span data-last-cache-purge><?php esc_html_e('Never', 'nitropack'); ?></span></div>
25 <div class="reason"><?php esc_html_e('Reason', 'nitropack'); ?>: <span data-purge-reason><?php esc_html_e('Unknown', 'nitropack'); ?></span></div>
26 </div>
27 <button id="optimizations-purge-cache" type="button" class="btn btn-secondary" data-modal-target="modal-purge-cache" data-modal-toggle="modal-purge-cache"><?php esc_html_e('Purge cache', 'nitropack'); ?></button>
28 </div>
29 </div>
30 <?php require_once NITROPACK_PLUGIN_DIR . 'view/modals/modal-purge-cache.php'; ?>
31 </div>
32 <!-- Optimized Pages Card End -->
33 <!-- Optimization Mode Card -->
34 <div class="card card-optimization-mode">
35 <div class="card-header no-border mb-0">
36 <div class="flex items-center">
37 <h3 class="mb-0"><?php esc_html_e('Optimization mode', 'nitropack'); ?></h3>
38 <span class="tooltip-icon" data-tooltip-target="tooltip-optimization">
39 <img src="<?php echo plugin_dir_url(__FILE__) . 'images/info.svg'; ?>">
40 </span>
41 <div id="tooltip-optimization" role="tooltip" class="tooltip-container hidden">
42 <?php esc_html_e('Select from our range of predefined optimization modes to boost your site\'s performance.', 'nitropack');
43 ?>
44 <div class="tooltip-arrow" data-popper-arrow></div>
45 </div>
46 </div>
47 </div>
48 <?php $modes = array('standard' => esc_html__('Standard', 'nitropack'), 'medium' => esc_html__('Medium', 'nitropack'), 'strong' => esc_html__('Strong', 'nitropack'), 'ludicrous' => esc_html__('Ludicrous', 'nitropack'), 'custom' => esc_html__('Custom', 'nitropack')); ?>
49 <div class="tabs-wrapper">
50 <div class="tabs" id="optimization-modes">
51 <?php foreach ($modes as $mode_id => $mode) : ?>
52 <a class="btn tab-link btn-link" data-mode="<?php echo $mode_id; ?>" data-modal-target="modal-optimization-mode" data-modal-toggle="modal-optimization-mode"><?php echo $mode; ?></a>
53 <?php endforeach; ?>
54 </div>
55 <p><?php esc_html_e('Active Mode', 'nitropack'); ?>: <span class="active-mode"></span></p>
56 <div class="tab-content-wrapper">
57 <div class="hidden tab-content" role="tabpanel" data-tab="standard-tab">
58 <p class="text-secondary mt-2"> <?php esc_html_e('Standard optimization features enabled for your site. Ideal choice for maximum stability.', 'nitropack'); ?></p>
59 </div>
60 <div class="hidden tab-content" role="tabpanel" data-tab="medium-tab">
61 <p class="text-secondary mt-2"> <?php esc_html_e('Adds image lazy loading to standard optimizations. Uses built-in browser techniques for loading resources.', 'nitropack'); ?></p>
62 </div>
63 <div class="hidden tab-content" role="tabpanel" data-tab="strong-tab">
64 <p class="text-secondary mt-2"> <?php esc_html_e('Includes smart resource loading on top of Medium optimizations. Balances speed boost with stability.', 'nitropack'); ?></p>
65 </div>
66 <div class="hidden tab-content" role="tabpanel" data-tab="ludicrous-tab">
67 <p class="text-secondary mt-2"> <?php esc_html_e('Applies deferred JS and advanced resource loading for optimal performance and Core Web Vitals.', 'nitropack'); ?></p>
68 </div>
69 <div class="hidden tab-content" role="tabpanel" data-tab="custom-tab">
70 <p class="text-secondary mt-2"> <?php esc_html_e('Activated when manual setups are made. Ideal for advanced NitroPack optimizations.', 'nitropack'); ?></p>
71 </div>
72 </div>
73 </div>
74 <div class="card-footer">
75 <div class="flex flex-row">
76 <p class=""><?php esc_html_e('Which optimization mode to choose?', 'nitropack'); ?></p>
77 <a class="text-primary btn-link ml-auto see-modes" data-modal-target="modes-modal" data-modal-toggle="modes-modal"><?php esc_html_e('See modes comparison', 'nitropack'); ?></a>
78 <?php require_once NITROPACK_PLUGIN_DIR . 'view/modals/modal-modes.php'; ?>
79 </div>
80 </div>
81 <?php require_once NITROPACK_PLUGIN_DIR . 'view/modals/modal-optimization-mode.php'; ?>
82 </div>
83 <!-- Optimization Mode Card End -->
84 <!-- Automated Behavior Card -->
85 <div class="card card-automated-behavior">
86 <div class="card-header">
87 <h3><?php esc_html_e('Automated Behavior', 'nitropack'); ?></h3>
88 </div>
89 <div class="card-body">
90 <div class="options-container">
91 <div class="nitro-option" id="purge-cache-widget">
92 <div class="nitro-option-main">
93 <div class="text-box">
94 <h6><?php esc_html_e('Purge cache', 'nitropack'); ?></h6>
95 <p><?php esc_html_e('Purge affected cache when content is updated or published', 'nitropack'); ?></p>
96 </div>
97 <label class="inline-flex items-center cursor-pointer ml-auto">
98 <input type="checkbox" value="" class="sr-only peer" name="purge_cache" id="auto-purge-status" <?php if ($autoCachePurge) echo "checked"; ?>>
99 <div class="toggle"></div>
100 </label>
101 </div>
102 </div>
103 <div class="nitro-option" id="page-optimization-widget">
104 <div class="nitro-option-main">
105 <div class="text-box">
106 <h6><?php esc_html_e('Page optimization', 'nitropack'); ?></h6>
107 <p><?php esc_html_e('Select what post/page types get optimized', 'nitropack'); ?></p>
108 </div>
109 <a data-modal-target="modal-posttypes" data-modal-toggle="modal-posttypes" class="btn btn-secondary btn-icon">
110 <img src="<?php echo plugin_dir_url(__FILE__); ?>images/setting-icon.svg">
111 </a>
112 </div>
113 <?php require_once NITROPACK_PLUGIN_DIR . 'view/modals/modal-posttypes.php'; ?>
114 </div>
115 </div>
116 </div>
117 </div>
118 <!-- Automated Behavior Card End -->
119 <!-- Go to app Card -->
120 <div class="card exclusion-card">
121 <div class="card-header">
122 <h3><?php esc_html_e('Exclusions', 'nitropack'); ?></h3>
123 </div>
124 <div class="card-body">
125 <div class="options-container">
126 <div class="nitro-option" id="ajax-shortcodes-widget">
127 <?php $settings->render_ajax_shortcodes_setting(); ?>
128 </div>
129 </div>
130 </div>
131 </div>
132 <!-- Go to app card End -->
133
134
135 </div>
136 <div class="col-span-1">
137 <!-- Subscription Card End -->
138 <!-- Basic Settings Card -->
139 <div class="card card-basic-settings">
140 <div class="card-header">
141 <h3><?php esc_html_e('Basic Settings', 'nitropack'); ?></h3>
142 </div>
143 <div class="card-body">
144 <div class="options-container">
145 <div class="nitro-option" id="cache-warmup-widget">
146 <div class="nitro-option-main">
147 <div class="text-box" id="warmup-status-slider">
148
149 <?php $sitemap = get_option('np_warmup_sitemap', false);
150 $toolTipDisplayState = $sitemap ? '' : 'hidden'; ?>
151
152 <h6><?php esc_html_e('Cache warmup', 'nitropack'); ?> <span class="badge badge-primary ml-2"><?php esc_html_e('Recommended', 'nitropack'); ?></span> <span class="tooltip-icon <?php echo $toolTipDisplayState; ?>" data-tooltip-target="tooltip-sitemap">
153 <img src="<?php echo plugin_dir_url(__FILE__) . 'images/info.svg'; ?>">
154 </span></h6>
155 <div id="tooltip-sitemap" role="tooltip" class="tooltip-container hidden">
156 <?php echo $sitemap; ?>
157 <div class="tooltip-arrow" data-popper-arrow></div>
158 </div>
159 <p><?php esc_html_e('Automatically pre-caches your website\'s page content', 'nitropack'); ?>. <a href="https://support.nitropack.io/en/articles/8390320-cache-warmup" class="text-blue" target="_blank"><?php esc_html_e('Learn more', 'nitropack'); ?></a></p>
160 </div>
161 <label class="inline-flex items-center cursor-pointer ml-auto">
162 <input id="warmup-status" type="checkbox" class="sr-only peer">
163 <div class="toggle"></div>
164 </label>
165 </div>
166 <div class="msg-container" id="loading-warmup-status">
167 <img src="<?php echo plugin_dir_url(__FILE__) . 'images/loading.svg'; ?>" alt="loading" class="icon"> <span class="msg"><?php esc_html_e('Loading cache warmup status', 'nitropack'); ?></span>
168 </div>
169 </div>
170 <div class="nitro-option" id="test-mode-widget">
171 <div class="nitro-option-main">
172 <div class="text-box" id="safemode-status-slider">
173 <h6><?php esc_html_e('Test Mode', 'nitropack'); ?></h6>
174 <p><?php esc_html_e('Test NitroPack\'s features without affecting your visitors\' experience', 'nitropack'); ?>. <a href="https://support.nitropack.io/en/articles/8390292-test-mode" class="text-blue" target="_blank"><?php esc_html_e('Learn more', 'nitropack'); ?></a></p>
175 </div>
176
177 <label class="inline-flex items-center cursor-pointer ml-auto">
178 <input type="checkbox" class="sr-only peer" id="safemode-status">
179
180 <div class="toggle"></div>
181 </label>
182 </div>
183 <div class="msg-container" id="loading-safemode-status">
184 <img src="<?php echo plugin_dir_url(__FILE__) . 'images/loading.svg'; ?>" alt="loading" class="icon"> <?php esc_html_e('Loading test mode status', 'nitropack'); ?>
185 </div>
186 <?php require_once NITROPACK_PLUGIN_DIR . 'view/modals/modal-test-mode.php'; ?>
187 </div>
188 <div class="nitro-option" id="compression-widget">
189 <div class="nitro-option-main">
190 <div class="text-box">
191 <h6><span id="detected-compression"><?php esc_html_e('HTML Compression', 'nitropack'); ?> </span></h6>
192 <p><?php esc_html_e('Compressing the structure of your HTML, ensures faster page rendering and an optimized browsing experience for your users.', 'nitropack'); ?> <a href="https://support.nitropack.io/en/articles/8390333-nitropack-plugin-settings-in-wordpress#h_29b7ab4836" class="text-blue" target="_blank"><?php esc_html_e('Learn more', 'nitropack'); ?></a></p>
193 </div>
194 <label class="inline-flex items-center cursor-pointer ml-auto">
195 <input type="checkbox" id="compression-status" class="sr-only peer" <?php echo (int)$enableCompression === 1 ? "checked" : ""; ?>>
196 <div class="toggle"></div>
197 </label>
198 </div>
199 <div class="mt-4 text-primary">
200 <a href="javascript:void(0);" id="compression-test-btn" class="text-primary"><?php esc_html_e('Run compression test', 'nitropack'); ?></a>
201 <div class="flex items-start msg-container hidden">
202 <span class="msg"></span>
203 </div>
204 </div>
205 </div>
206 <?php if (\NitroPack\Integration\Plugin\BeaverBuilder::isActive()) { ?>
207 <div class="nitro-option" id="beaver-builder-widget">
208 <div class="nitro-option-main">
209 <div class="text-box">
210 <h6><span id="detected-compression"><?php esc_html_e('Sync NitroPack Purge with Beaver Builder', 'nitropack'); ?> </span></h6>
211 <p><?php esc_html_e('When Beaver Builder cache is purged, NitroPack will perform a full cache purge keeping your site\'s content up-to-date.', 'nitropack'); ?></p>
212 </div>
213 <label class="inline-flex items-center cursor-pointer ml-auto">
214 <input type="checkbox" class="sr-only peer" id="bb-purge-status" <?php if ($bbCacheSyncPurge) echo "checked"; ?>>
215 <div class="toggle"></div>
216 </label>
217 </div>
218 </div>
219 <?php } ?>
220 <div class="nitro-option" id="can-editor-clear-cache-widget">
221 <div class="nitro-option-main">
222 <div class="text-box">
223 <h6><?php esc_html_e('Allow Editors to purge cache', 'nitropack'); ?> <span class="badge badge-success ml-2">New</span></h6>
224 <p><?php esc_html_e('Give Editors the right to purge cache when content is updated.', 'nitropack'); ?></p>
225 </div>
226 <label class="inline-flex items-center cursor-pointer ml-auto">
227 <input type="checkbox" id="can-editor-clear-cache" class="sr-only peer" <?php echo (int)$canEditorClearCache === 1 ? "checked" : ""; ?>>
228 <div class="toggle"></div>
229 </label>
230 </div>
231 </div>
232 </div>
233 </div>
234 </div>
235 </div>
236 <?php $notOptimizedCPTs = nitropack_filter_non_optimized();
237 if (!get_option('nitropack-noticeOptimizeCPT') && !empty($notOptimizedCPTs)) require_once NITROPACK_PLUGIN_DIR . 'view/modals/modal-not-optimized-CPT.php'; ?>
238 </div>
239 <?php require_once NITROPACK_PLUGIN_DIR . 'view/modals/modal-unsaved-changes.php'; ?>
240 <script>
241 ($ => {
242 var getOptimizationsTimeout = null;
243 let isClearing = false;
244 var paid_plan = false;
245 $(window).on("load", function() {
246 getOptimizations();
247 getPlan();
248 <?php if ($checkedCompression != 1) { ?>
249 autoDetectCompression();
250 <?php } ?>
251 });
252
253 /* Cache Purge begin */
254 window.performCachePurge = () => {
255 purgeCache();
256 }
257
258 let purgeCache = () => {
259 let purgeEvent = new Event("cache.purge.request");
260 window.dispatchEvent(purgeEvent);
261 }
262
263 var getOptimizations = _ => {
264 var url = '<?php echo $optimizationDetailsUrl; ?>';
265 ((s, e, f) => {
266 if (window.fetch) {
267 fetch(url)
268 .then(resp => resp.json())
269 .then(s)
270 .catch(e)
271 .finally(f);
272 } else {
273 $.ajax({
274 url: url,
275 type: 'GET',
276 dataType: 'json',
277 success: s,
278 error: e,
279 complete: f
280 })
281 }
282 })(data => {
283 $('[data-last-cache-purge]').text(data.last_cache_purge.timeAgo);
284 if (data.last_cache_purge.reason) {
285 $('[data-purge-reason]').text(data.last_cache_purge.reason);
286 $('[data-purge-reason]').attr('title', data.last_cache_purge.reason);
287 $('#last-cache-purge-reason').show();
288 } else {
289 $('#last-cache-purge-reason').hide();
290 }
291 if (data.pending_count) {
292 $("#pending-optimizations-count").text(data.pending_count);
293 $("#pending-optimizations-section").show();
294 } else {
295 $("#pending-optimizations-section").hide();
296 }
297
298 $('[data-optimized-pages-total]').text(data.optimized_pages.total);
299
300 }, __ => {
301 console.error("An error occurred while fetching data for optimized pages");
302 }, __ => {
303 if (!getOptimizationsTimeout) {
304 getOptimizationsTimeout = setTimeout(function() {
305 getOptimizationsTimeout = null;
306 getOptimizations();
307 }, 60000);
308 }
309 });
310 }
311
312 var getPlan = _ => {
313
314 var url = '<?php echo $planDetailsUrl; ?>';
315 ((s, e, f) => {
316 if (window.fetch) {
317 fetch(url)
318 .then(resp => resp.json())
319 .then(s)
320 .catch(e)
321 .finally(f);
322 } else {
323 $.ajax({
324 url: url,
325 type: 'GET',
326 dataType: 'json',
327 success: s,
328 error: e,
329 complete: f
330 })
331 }
332 })(data => {
333
334 $('.plan-name').text(data.plan_title);
335 $('[data-next-billing]').text(data.next_billing ? data.next_billing : 'N/A');
336 $('[data-next-reset]').text(data.next_reset ? data.next_reset : 'N/A');
337 $('[data-page-views]').text(data.page_views ? data.page_views : 'N/A');
338 $('[data-cdn-bandwidth]').text(data.cdn_bandwidth ? data.cdn_bandwidth + ' out of ' + data.max_cdn_bandwidth : 'N/A');
339
340 for (prop in data) {
341 if (prop.indexOf("show_") === 0) continue;
342 if (prop.indexOf("label_") === 0) continue;
343 if (prop.indexOf("max_") === 0) continue;
344 if (
345 typeof data["show_" + prop] != "undefined" &&
346 data["show_" + prop] &&
347 typeof data["label_" + prop] != "undefined" &&
348 typeof data["max_" + prop] != "undefined"
349 ) {
350 let propertyLabel = data["label_" + prop];
351 let propertyValue = data[prop];
352 let propertyLimit = data["max_" + prop];
353 $("#plan-quotas").append('<li class="list-group-item px-0 d-flex justify-content-between align-items-center">' + propertyLabel + ' <span><span data-optimizations>' + propertyValue + '</span> out of <span data-max-optimizations>' + propertyLimit + '</span></span></li>');
354 }
355 }
356
357 }, __ => {
358 NitropackUI.triggerToast('error', '<?php esc_html_e('Error while fetching plan data', 'nitropack'); ?>');
359 }, __ => {});
360 }
361
362
363 $(document).on('click', "#compression-test-btn", e => {
364 e.preventDefault();
365 autoDetectCompression();
366 });
367 /* Compression end */
368
369 /* HTML Compression begin */
370 var autoDetectCompression = function() {
371 let msg_container = $('#compression-widget .msg-container'),
372 msg_icon = msg_container.find('.icon'),
373 msg_box = msg_container.find('.msg'),
374 compression_setting = $('#compression-status'),
375 compression_btn = $('#compression-test-btn');
376 //add spinner here
377 msg_box.html('<img src="<?php echo plugin_dir_url(__FILE__) . 'images/loading.svg'; ?>" alt="loading" class="icon"> <?php esc_html_e('Testing current compression status', 'nitropack'); ?>');
378 compression_btn.addClass('hidden');
379 msg_container.removeClass('hidden');
380 $.post(ajaxurl, {
381 action: 'nitropack_test_compression_ajax',
382 nonce: nitroNonce
383 }, function(response) {
384 var resp = JSON.parse(response);
385
386 if (resp.status == "success") {
387 if (resp.hasCompression) { // compression already enabled
388 compression_setting.attr("checked", false);
389
390 msg_box.text('<?php esc_html_e('Compression is already enabled on your server! There is no need to enable it in NitroPack.', 'nitropack'); ?>')
391 } else {
392 compression_setting.attr("checked", true);
393 msg_box.text('<?php esc_html_e('No compression was detected! We will now enable it in NitroPack.', 'nitropack'); ?>');
394 }
395 NitropackUI.triggerToast(resp.type, resp.message);
396 } else {
397 msg_box.text('<?php esc_html_e('Could not determine compression status automatically. Please configure it manually.', 'nitropack'); ?>');
398 }
399 setTimeout(function() {
400 msg_container.addClass('hidden');
401 compression_btn.removeClass('hidden');
402 }, 5000);
403 });
404 }
405
406
407 $("#compression-status").on("click", function(e) {
408 $.post(ajaxurl, {
409 action: 'nitropack_set_compression_ajax',
410 nonce: nitroNonce,
411 data: {
412 compressionStatus: $(this).is(":checked") ? 1 : 0
413 }
414 }, function(response) {
415 var resp = JSON.parse(response);
416 NitropackUI.triggerToast(resp.type, resp.message);
417 });
418 });
419 $("#can-editor-clear-cache").on("click", function(e) {
420 $.post(ajaxurl, {
421 action: 'nitropack_set_can_editor_clear_cache',
422 nonce: nitroNonce,
423 data: {
424 canEditorClearCache: $(this).is(":checked") ? 1 : 0
425 }
426 }, function(response) {
427 var resp = JSON.parse(response);
428 NitropackUI.triggerToast(resp.type, resp.message);
429 });
430 });
431
432 $("#auto-purge-status").on("click", function(e) {
433 $.post(ajaxurl, {
434 action: 'nitropack_set_auto_cache_purge_ajax',
435 nonce: nitroNonce,
436 autoCachePurgeStatus: $(this).is(":checked") ? 1 : 0
437 }, function(response) {
438 var resp = JSON.parse(response);
439 NitropackUI.triggerToast(resp.type, resp.message);
440 });
441 });
442
443 $("#bb-purge-status").on("click", function(e) {
444 $.post(ajaxurl, {
445 action: 'nitropack_set_bb_cache_purge_sync_ajax',
446 nonce: nitroNonce,
447 bbCachePurgeSyncStatus: $(this).is(":checked") ? 1 : 0
448 }, function(response) {
449 var resp = JSON.parse(response);
450 NitropackUI.triggerToast(resp.type, resp.message);
451 });
452 });
453
454
455 })(jQuery);
456 </script>