PluginProbe
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance / 4.7.0
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance v4.7.0
4.7.0 4.6.1 4.6.0 4.5.5 4.5.4 4.5.3 4.5.2 3.2.20 3.2.21 3.2.22 3.2.3 3.2.5 3.2.6 3.2.7 3.2.9 3.3.0 3.3.1 3.3.2 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.7.0 3.7.1 All 111 releases
wp-optimize / js / cache.js

cache.js in WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance 4.7.0, at js/cache.js

571 lines 16.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 var WP_Optimize_Cache = function () {
2
3 var $ = jQuery;
4 var block_ui = wp_optimize.block_ui;
5 var send_command = wp_optimize.send_command;
6 var heartbeat = WP_Optimize_Heartbeat();
7 var heartbeat_agents = [];
8
9 var browser_cache_enable_btn = $('#wp_optimize_browser_cache_enable'),
10 purge_cache_btn = $('#wp-optimize-purge-cache'),
11 enable_page_caching_switch = $('#enable_page_caching'),
12 page_cache_length_value_inp = $('#page_cache_length_value');
13
14 /**
15 * Handle purge cache btn.
16 */
17 purge_cache_btn.on('click', function() {
18
19 var btn = $(this),
20 spinner = btn.next(),
21 success_icon = spinner.next();
22
23 if (btn.prop('disabled')) return false;
24 btn.prop('disabled', true);
25 spinner.show();
26
27 send_command('purge_page_cache', {}, function(response) {
28 btn.prop('disabled', false);
29 spinner.hide();
30 success_icon.show();
31 setTimeout(function() {
32 success_icon.fadeOut('slow', function() {
33 success_icon.hide();
34 });
35 run_update_cache_preload_status();
36 }, 5000);
37 update_cache_size_information(response);
38 });
39 });
40
41 /**
42 * Trigger purge cache button click if wpo_purge_cache event fired.
43 */
44 $('body').on('wpo_purge_cache', function() {
45 purge_cache_btn.trigger('click');
46 });
47
48 /**
49 * Trigger click Browser cache button if user push Enter and form start submitting.
50 */
51 browser_cache_enable_btn.closest('form').on(
52 'submit',
53 function(e) {
54 e.preventDefault();
55 browser_cache_enable_btn.trigger('click');
56 return false;
57 }
58 );
59
60 /**
61 * Disable or enable preload cache lifespan value
62 */
63 page_cache_length_value_inp.on('change', function() {
64 var value = parseInt(page_cache_length_value_inp.val(), 10);
65
66 $('#preload_schedule_type option[value="wpo_use_cache_lifespan"]').prop('disabled', isNaN(value) || value <= 0);
67 });
68
69 /**
70 * Handle Enable Gzip compression button click.
71 */
72 $('#wp-optimize-nav-tab-wpo_cache-gzip-contents').on('click', '#wp_optimize_gzip_compression_enable', function() {
73 var button = $(this),
74 loader = button.next();
75
76 loader.show();
77
78 send_command('enable_gzip_compression', {enable: button.data('enable')}, function(response) {
79 if (response) {
80
81 $('#wpo_gzip_compression_test_btn').trigger('click');
82
83 // Handle error message
84 if (response.message) {
85 $('#wpo_gzip_compression_error_message').text(response.message).show();
86 } else {
87 $('#wpo_gzip_compression_error_message').hide();
88 }
89
90 if (response.output) {
91 $('#wpo_gzip_compression_output').html(response.output).show();
92 } else {
93 $('#wpo_gzip_compression_output').hide();
94 }
95
96 } else {
97 alert(wpoptimize.error_unexpected_response);
98 }
99
100 loader.hide();
101 }).fail(function() {
102 alert(wpoptimize.error_unexpected_response);
103 loader.hide();
104 });
105 });
106
107 /**
108 * Handle Test again compressions button click
109 */
110 $('#wp-optimize-nav-tab-wpo_cache-gzip-contents').on('click', '#wpo_gzip_compression_test_btn', function() {
111 var btn = $(this);
112
113 if (btn.prop('disabled')) return;
114
115 btn.prop('disabled', true);
116 $('#wpo_gzip_compression_details').hide();
117 $('#wpo_gzip_control_panel .wpo_shade').removeClass('hidden');
118
119 send_command('get_compression_test_results_html', {}, function(response) {
120 if (response.results_html) {
121 $('#wpo_gzip_compression_details').html(response.results_html);
122 } else {
123 $('#wpo_gzip_compression_details').text(wpoptimize.error_unexpected_response);
124 }
125
126 if (response.gzip_compression_control_panel) {
127 $('#wpo_gzip_control_panel').html(response.gzip_compression_control_panel);
128 }
129 }).fail(function() {
130 alert(wpoptimize.error_unexpected_response);
131 }).always(function() {
132 $('#wpo_gzip_control_panel .wpo_shade').addClass('hidden');
133 $('#wpo_gzip_compression_details').show();
134 btn.prop('disabled', false);
135 });
136 });
137
138 /**
139 * Update gzip test results when tab is activated
140 */
141 $('#wp-optimize-wrap').on('tab-change/wpo_cache/gzip', function() {
142 if (!$('#wp-optimize-nav-tab-wpo_cache-gzip').data('activated')) {
143 $('#wp-optimize-nav-tab-wpo_cache-gzip').data('activated', true);
144 $('#wpo_gzip_compression_test_btn').trigger('click');
145 }
146 });
147
148 /**
149 * Manually check gzip status
150 */
151 $('#wp-optimize-nav-tab-wpo_cache-gzip-contents').on('click', '.wpo-refresh-gzip-status', function(e) {
152 e.preventDefault();
153 $link = $(this);
154 $link.addClass('loading');
155 send_command('get_gzip_compression_status', null, function(response) {
156 $link.removeClass('loading');
157 var gzip_status_message = $('#wpo_gzip_compression_status');
158 if (response.hasOwnProperty('status')) {
159 if (response.status) {
160 // gzip is enabled
161 gzip_status_message.removeClass('wpo-disabled').addClass('wpo-enabled');
162 } else {
163 // gzip is not enabled
164 gzip_status_message.addClass('wpo-disabled').removeClass('wpo-enabled');
165 }
166 } else if (response.hasOwnProperty('error')) {
167 alert(response.error);
168 console.log('Gzip status error code: ' + response.code);
169 console.log('Gzip status error message: ' + response.message);
170 }
171 });
172 });
173
174 /**
175 * Handle Enable browser cache button click.
176 */
177 browser_cache_enable_btn.on('click', function() {
178 var browser_cache_expire_days_el = $('#wpo_browser_cache_expire_days'),
179 browser_cache_expire_hours_el = $('#wpo_browser_cache_expire_hours'),
180 browser_cache_expire_days = parseInt(browser_cache_expire_days_el.val(), 10),
181 browser_cache_expire_hours = parseInt(browser_cache_expire_hours_el.val(), 10),
182 button = $(this),
183 loader = button.next();
184
185 // check for invalid integer.
186 if (isNaN(browser_cache_expire_days)) browser_cache_expire_days = 0;
187 if (isNaN(browser_cache_expire_hours)) browser_cache_expire_hours = 0;
188
189 if (browser_cache_expire_days < 0 || browser_cache_expire_hours < 0) {
190 alert(wpoptimize.please_use_positive_integers);
191 return false;
192 } else if (browser_cache_expire_hours > 23) {
193 alert(wpoptimize.please_use_valid_values);
194 return false;
195 } else {
196 $('#wpo_browser_cache_error_message').hide();
197 }
198
199 // set parsed values into input fields.
200 browser_cache_expire_days_el.val(browser_cache_expire_days);
201 browser_cache_expire_hours_el.val(browser_cache_expire_hours);
202
203 loader.show();
204
205 send_command('enable_browser_cache',
206 {browser_cache_expire_days: browser_cache_expire_days,
207 browser_cache_expire_hours: browser_cache_expire_hours}, function(response) {
208 var cache_status_message = $('#wpo_browser_cache_status');
209 var cache_status_field = $('#wpo_enable_browser_cache');
210 if (response) {
211 if (response.enabled) {
212 button.text(wpoptimize.update);
213 cache_status_message.removeClass('wpo-disabled').addClass('wpo-enabled');
214 cache_status_field.val('true');
215 } else {
216 button.text(wpoptimize.enable);
217 cache_status_message.addClass('wpo-disabled').removeClass('wpo-enabled');
218 cache_status_field.val('false');
219 }
220
221 if (response.message) {
222 $('#wpo_browser_cache_message').text(response.message).show();
223 } else {
224 $('#wpo_browser_cache_message').hide();
225 }
226
227 if (response.error_message) {
228 $('#wpo_browser_cache_error_message').text(response.error_message).show();
229 } else {
230 $('#wpo_browser_cache_error_message').hide();
231 }
232
233 if (response.output) {
234 $('#wpo_browser_cache_output').html(response.output).show();
235 } else {
236 $('#wpo_browser_cache_output').hide();
237 }
238
239 } else {
240 alert(wpoptimize.error_unexpected_response);
241 }
242
243 loader.hide();
244 }).fail(function() {
245 alert(wpoptimize.error_unexpected_response);
246 loader.hide();
247 });
248 });
249
250 /**
251 * Gather cache settings from forms and return it as an object.
252 *
253 * @return object
254 */
255 function gather_cache_settings() {
256 var settings = {};
257
258 $('.cache-settings').each(function() {
259 var el = $(this),
260 name = el.attr('name');
261
262 if (el.is('input[type="checkbox"]')) {
263 settings[name] = el.is(':checked') ? 1 : 0;
264 } else if (el.is('textarea')) {
265 settings[name] = el.val().split("\n");
266 } else {
267 settings[name] = el.val();
268 }
269 });
270
271 $('.cache-settings-array').each(function() {
272 var el = $(this),
273 name = el.attr('name');
274
275 if (!settings.hasOwnProperty(name)) {
276 settings[name] = [];
277 }
278
279 if (el.is('input[type="checkbox"]')) {
280 if ('value' == el.data('saveas')) {
281 if (el.is(':checked')) settings[name].push(el.val());
282 } else {
283 settings[name].push(el.is(':checked') ? 1 : 0);
284 }
285 } else if (el.is('textarea')) {
286 settings[name].push(el.val().split("\n"));
287 } else {
288 settings[name].push(el.val());
289 }
290 });
291
292 return settings;
293 }
294
295 /**
296 * Handle click on the save settings button for cache.
297 */
298 $('#wp-optimize-save-cache-settings, #wp-optimize-save-cache-advanced-rules, #wp-optimize-save-cache-preload-settings').on('click', function() {
299 var btn = $(this),
300 spinner = btn.next(),
301 success_icon = spinner.next();
302
303 spinner.show();
304 block_ui(wpoptimize.saving);
305
306 send_command('save_cache_settings', { 'cache-settings': gather_cache_settings() }, function(response) {
307
308 if (response.hasOwnProperty('js_trigger')) {
309 $(document).trigger(response.js_trigger, response);
310 }
311
312 if (response.hasOwnProperty('error')) {
313 // show error
314 console.log(response.error);
315 wp_optimize.notices.show_notice(response.error.code, response.error.message);
316 } else {
317 $('.wpo-error__enabling-cache').addClass('wpo_hidden').find('p').text('');
318 }
319
320 if (response.hasOwnProperty('warnings')) {
321 // show error
322 console.log(response.warnings);
323 $('.wpo-warnings__enabling-cache').removeClass('wpo_hidden')
324 .find('p').text(response.warnings_label);
325 var ul = $('.wpo-warnings__enabling-cache').find('ul').html('');
326 $.each(response.warnings, function(index, warning) {
327 ul.append('<li>'+warning+'</li>');
328 });
329 } else {
330 $('.wpo-warnings__enabling-cache').addClass('wpo_hidden').find('p').text('');
331 }
332
333 if (response.hasOwnProperty('advanced_cache_file_writing_error')) {
334 $('#wpo_advanced_cache_output')
335 .text(response.advanced_cache_file_content)
336 .show();
337 } else {
338 $('#wpo_advanced_cache_output').hide();
339 }
340
341 // update the toggle state depending on response.enabled
342 enable_page_caching_switch.prop('checked', response.enabled);
343 // cache is activated
344 if (enable_page_caching_switch.is(':checked')) {
345 // show purge button
346 $('.purge-cache').show();
347 // enable preload button
348 $('#wp_optimize_run_cache_preload').prop('disabled', false);
349 // disable minify preload
350 $('#wp_optimize_run_minify_preload').prop('disabled', true);
351 $('#minify-preload').show();
352 } else {
353 // hide purge button
354 $('.purge-cache').hide();
355 // disable preload button
356 $('#wp_optimize_run_cache_preload').prop('disabled', true);
357 // enable minify preload
358 $('#wp_optimize_run_minify_preload').prop('disabled', false);
359 $('#minify-preload').hide();
360 }
361
362 $(document).trigger('wp-optimize/cache/toggle-status', {enabled: response.enabled});
363
364 if (response.result) {
365 // If Result is true, show the success icon.
366 success_icon.show();
367 setTimeout(function() {
368 success_icon.fadeOut('slow', function() {
369 success_icon.hide();
370 });
371 }, 5000);
372 } else {
373 var tab_id = $('.wp-optimize-nav-tab-contents .notice:visible').closest('.wp-optimize-nav-tab-contents').attr('id'),
374 tab_name = 'cache';
375
376 if (/wpo_cache-(.+)-contents/.test(tab_id)) {
377 var match = /wpo_cache-(.+)-contents/.exec(tab_id);
378 tab_name = match[1];
379 }
380
381 // Navigate to the tab where the notice is shown
382 $('.wpo-page.active .nav-tab-wrapper a[data-tab="'+tab_name+'"]').trigger('click');
383 // If it's false, scroll to the top where the error is displayed.
384 var offset = $('.wpo-page.active').offset();
385 window.scroll(0, offset.top - 20);
386 }
387 }).always(function() {
388 $.unblockUI();
389 spinner.hide();
390 });
391 });
392
393 /**
394 * Toggle page cache
395 */
396 enable_page_caching_switch.on('change', function() {
397 // hide errors
398 $('.wpo-error__enabling-cache').addClass('wpo_hidden');
399 $('.wpo-warnings__enabling-cache').addClass('wpo_hidden');
400 $('#wpo_advanced_cache_output').hide();
401 // Trigger the save action
402 $('#wp-optimize-save-cache-settings').trigger('click');
403 });
404
405 /**
406 * Cache Preloader functionality
407 */
408
409 var run_cache_preload_btn = $('#wp_optimize_run_cache_preload'),
410 cache_preload_status_el = $('#wp_optimize_preload_cache_status'),
411 enable_schedule_preloading = $('#enable_schedule_preload'),
412 preloader_schedule_type_select = $('#preload_schedule_type');
413
414 enable_schedule_preloading.on('change', function() {
415 if (enable_schedule_preloading.prop('checked')) {
416 preloader_schedule_type_select.prop('disabled', false);
417 } else {
418 preloader_schedule_type_select.prop('disabled', true);
419 }
420 });
421
422 enable_schedule_preloading.trigger('change');
423
424 run_cache_preload_btn.on('click', function() {
425 var btn = $(this),
426 is_running = btn.data('running'),
427 status = cache_preload_status_el.text();
428
429 btn.prop('disabled', true);
430
431 if (is_running) {
432 btn.data('running', false);
433
434 heartbeat.cancel_agents(heartbeat_agents);
435
436 send_command(
437 'cancel_cache_preload',
438 null,
439 function(response) {
440 if (response && response.hasOwnProperty('message')) {
441 cache_preload_status_el.text(response.message);
442 }
443 }
444 ).always(function() {
445 btn.val(wpoptimize.run_now);
446 btn.prop('disabled', false);
447 });
448 } else {
449 cache_preload_status_el.text(wpoptimize.starting_preload);
450
451 btn.data('running', true);
452 send_command(
453 'run_cache_preload',
454 null,
455 null,
456 true,
457 {
458 timeout: 3000 // set a timeout in case the server doesn't support our close browser connection function.
459 }
460 ).always(function(response) {
461 try {
462 var resp = wpo_parse_json(response);
463 } catch (e) {
464 }
465
466 if (resp && resp.error && 'timeout' !== resp.statusText) {
467
468 var error_text = wpoptimize.error_unexpected_response;
469
470 if (typeof resp.error != 'function') {
471 error_text = resp.error;
472 } else if (resp.status) {
473 error_text = resp.status + ': ' + resp.statusText;
474 }
475
476 alert(error_text);
477
478 cache_preload_status_el.text(status);
479 btn.prop('disabled', false);
480 btn.data('running', false);
481
482 return;
483 }
484
485 cache_preload_status_el.text(wpoptimize.loading_urls);
486 btn.val(wpoptimize.cancel);
487 btn.prop('disabled', false);
488 run_update_cache_preload_status();
489 });
490 }
491 });
492
493 /**
494 * If already running then update status
495 */
496 if (run_cache_preload_btn.data('running')) {
497 run_update_cache_preload_status();
498 }
499
500 /**
501 * Create heartbeat agent action for update preloader status.
502 *
503 * @return void
504 */
505 function run_update_cache_preload_status() {
506 var agent = heartbeat.add_agent({
507 command: 'get_cache_preload_status',
508 callback: update_cache_preload_status,
509 _keep: false
510 });
511
512 if (null !== agent) heartbeat_agents.push(agent);
513 }
514
515 /**
516 * Update cache preload status ajax action.
517 *
518 * @return void
519 */
520 function update_cache_preload_status(response) {
521 if (response.done) {
522 run_cache_preload_btn.val(wpoptimize.run_now);
523 run_cache_preload_btn.data('running', false);
524 } else {
525 run_cache_preload_btn.val(wpoptimize.cancel);
526 run_cache_preload_btn.data('running', true);
527 run_update_cache_preload_status();
528 }
529 cache_preload_status_el.text(response.message);
530 update_cache_size_information(response);
531 }
532
533 /**
534 * Run update information about cache size.
535 *
536 * @return void
537 */
538 function update_cache_size_information(response) {
539 $('#wpo_current_cache_size_information').text(wpoptimize.current_cache_size + ' ' + response.size);
540 $('#wpo_current_cache_file_count').text(wpoptimize.number_of_files + ' ' + response.file_count);
541 }
542
543
544 $('#wpo-auto-preload-after-purge').on('click', function() {
545 var clicked_btn = this;
546 var success_icon = $(this).closest('.wpo-fieldgroup__subgroup').find('.dashicons-yes');
547
548 clicked_btn.disabled = true;
549
550 block_ui(wpoptimize.saving);
551
552 send_command(
553 'save_cache_auto_preload_option',
554 { enabled: !!clicked_btn.checked },
555 function(response) {
556 clicked_btn.disabled = false;
557 $.unblockUI();
558 if (response.success) {
559 success_icon.show().fadeOut(1000);
560 } else {
561 clicked_btn.checked = !clicked_btn.checked;
562 alert(response.message);
563 }
564
565 }
566 );
567 });
568
569 wp_optimize.cache_settings = gather_cache_settings;
570 };
571