PluginProbe
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance / 4.5.2
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance v4.5.2
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.5.2, at js/cache.js

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