PluginProbe
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance / 3.6.0
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance v3.6.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 3.8.0 All 110 releases
wp-optimize / js / cache.js

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

521 lines 14.7 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 $('#wpo_browser_cache_error_message').text(wpoptimize.please_use_positive_integers).show();
157 return false;
158 } else if (browser_cache_expire_hours > 23) {
159 $('#wpo_browser_cache_error_message').text(wpoptimize.please_use_valid_values).show();
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', {browser_cache_expire_days: browser_cache_expire_days, browser_cache_expire_hours: browser_cache_expire_hours}, function(response) {
172 var cache_status_message = $('#wpo_browser_cache_status');
173 var cache_status_field = $('#wpo_enable_browser_cache');
174 if (response) {
175 if (response.enabled) {
176 button.text(wpoptimize.update);
177 cache_status_message.removeClass('wpo-disabled').addClass('wpo-enabled');
178 cache_status_field.val('true');
179 } else {
180 button.text(wpoptimize.enable);
181 cache_status_message.addClass('wpo-disabled').removeClass('wpo-enabled');
182 cache_status_field.val('false');
183 }
184
185 if (response.message) {
186 $('#wpo_browser_cache_message').text(response.message).show();
187 } else {
188 $('#wpo_browser_cache_message').hide();
189 }
190
191 if (response.error_message) {
192 $('#wpo_browser_cache_error_message').text(response.error_message).show();
193 } else {
194 $('#wpo_browser_cache_error_message').hide();
195 }
196
197 if (response.output) {
198 $('#wpo_browser_cache_output').html(response.output).show();
199 } else {
200 $('#wpo_browser_cache_output').hide();
201 }
202
203 } else {
204 alert(wpoptimize.error_unexpected_response);
205 }
206
207 loader.hide();
208 }).fail(function() {
209 alert(wpoptimize.error_unexpected_response);
210 loader.hide();
211 });
212 });
213
214 /**
215 * Gather cache settings from forms and return it as an object.
216 *
217 * @return object
218 */
219 function gather_cache_settings() {
220 var settings = {};
221
222 $('.cache-settings').each(function() {
223 var el = $(this),
224 name = el.attr('name');
225
226 if (el.is('input[type="checkbox"]')) {
227 settings[name] = el.is(':checked') ? 1 : 0;
228 } else if (el.is('textarea')) {
229 settings[name] = el.val().split("\n");
230 } else {
231 settings[name] = el.val();
232 }
233 });
234
235 $('.cache-settings-array').each(function() {
236 var el = $(this),
237 name = el.attr('name');
238
239 if (!settings.hasOwnProperty(name)) {
240 settings[name] = [];
241 }
242
243 if (el.is('input[type="checkbox"]')) {
244 if ('value' == el.data('saveas')) {
245 if (el.is(':checked')) settings[name].push(el.val());
246 } else {
247 settings[name].push(el.is(':checked') ? 1 : 0);
248 }
249 } else if (el.is('textarea')) {
250 settings[name].push(el.val().split("\n"));
251 } else {
252 settings[name].push(el.val());
253 }
254 });
255
256 return settings;
257 }
258
259 /**
260 * Handle click on the save settings button for cache.
261 */
262 $('#wp-optimize-save-cache-settings, #wp-optimize-save-cache-advanced-rules, #wp-optimize-save-cache-preload-settings').on('click', function() {
263 var btn = $(this),
264 spinner = btn.next(),
265 success_icon = spinner.next();
266
267 spinner.show();
268 block_ui(wpoptimize.saving);
269
270 send_command('save_cache_settings', { 'cache-settings': gather_cache_settings() }, function(response) {
271
272 if (response.hasOwnProperty('js_trigger')) {
273 $(document).trigger(response.js_trigger, response);
274 }
275
276 if (response.hasOwnProperty('error')) {
277 // show error
278 console.log(response.error);
279 wp_optimize.notices.show_notice(response.error.code, response.error.message);
280 } else {
281 $('.wpo-error__enabling-cache').addClass('wpo_hidden').find('p').text('');
282 }
283
284 if (response.hasOwnProperty('warnings')) {
285 // show error
286 console.log(response.warnings);
287 $('.wpo-warnings__enabling-cache').removeClass('wpo_hidden')
288 .find('p').text(response.warnings_label);
289 var ul = $('.wpo-warnings__enabling-cache').find('ul').html('');
290 $.each(response.warnings, function(index, warning) {
291 ul.append('<li>'+warning+'</li>');
292 });
293 } else {
294 $('.wpo-warnings__enabling-cache').addClass('wpo_hidden').find('p').text('');
295 }
296
297 if (response.hasOwnProperty('advanced_cache_file_writing_error')) {
298 $('#wpo_advanced_cache_output')
299 .text(response.advanced_cache_file_content)
300 .show();
301 } else {
302 $('#wpo_advanced_cache_output').hide();
303 }
304
305 // update the toggle state depending on response.enabled
306 enable_page_caching_switch.prop('checked', response.enabled);
307 // cache is activated
308 if (enable_page_caching_switch.is(':checked')) {
309 // show purge button
310 $('.purge-cache').show();
311 // enable preload button
312 $('#wp_optimize_run_cache_preload').prop('disabled', false);
313 // disable minify preload
314 $('#wp_optimize_run_minify_preload').prop('disabled', true);
315 $('#minify-preload').show();
316 } else {
317 // hide purge button
318 $('.purge-cache').hide();
319 // disable preload button
320 $('#wp_optimize_run_cache_preload').prop('disabled', true);
321 // enable minify preload
322 $('#wp_optimize_run_minify_preload').prop('disabled', false);
323 $('#minify-preload').hide();
324 }
325
326 if (response.result) {
327 // If Result is true, show the success icon.
328 success_icon.show();
329 setTimeout(function() {
330 success_icon.fadeOut('slow', function() {
331 success_icon.hide();
332 });
333 }, 5000);
334 } else {
335 var tab_id = $('.wp-optimize-nav-tab-contents .notice:visible').closest('.wp-optimize-nav-tab-contents').attr('id'),
336 tab_name = 'cache';
337
338 if (/wpo_cache-(.+)-contents/.test(tab_id)) {
339 var match = /wpo_cache-(.+)-contents/.exec(tab_id);
340 tab_name = match[1];
341 }
342
343 // Navigate to the tab where the notice is shown
344 $('.wpo-page.active .nav-tab-wrapper a[data-tab="'+tab_name+'"]').trigger('click');
345 // If it's false, scroll to the top where the error is displayed.
346 var offset = $('.wpo-page.active').offset();
347 window.scroll(0, offset.top - 20);
348 }
349 }).always(function() {
350 $.unblockUI();
351 spinner.hide();
352 });
353 });
354
355 /**
356 * Toggle page cache
357 */
358 enable_page_caching_switch.on('change', function() {
359 // hide errors
360 $('.wpo-error__enabling-cache').addClass('wpo_hidden');
361 $('.wpo-warnings__enabling-cache').addClass('wpo_hidden');
362 $('#wpo_advanced_cache_output').hide();
363 // Trigger the save action
364 $('#wp-optimize-save-cache-settings').trigger('click');
365 });
366
367 /**
368 * Cache Preloader functionality
369 */
370
371 var run_cache_preload_btn = $('#wp_optimize_run_cache_preload'),
372 cache_preload_status_el = $('#wp_optimize_preload_cache_status'),
373 enable_schedule_preloading = $('#enable_schedule_preload'),
374 preloader_schedule_type_select = $('#preload_schedule_type');
375
376 enable_schedule_preloading.on('change', function() {
377 if (enable_schedule_preloading.prop('checked')) {
378 preloader_schedule_type_select.prop('disabled', false);
379 } else {
380 preloader_schedule_type_select.prop('disabled', true);
381 }
382 });
383
384 enable_schedule_preloading.trigger('change');
385
386 run_cache_preload_btn.on('click', function() {
387 var btn = $(this),
388 is_running = btn.data('running'),
389 status = cache_preload_status_el.text();
390
391 btn.prop('disabled', true);
392
393 if (is_running) {
394 btn.data('running', false);
395
396 heartbeat.cancel_agents(heartbeat_agents);
397
398 send_command(
399 'cancel_cache_preload',
400 null,
401 function(response) {
402 if (response && response.hasOwnProperty('message')) {
403 cache_preload_status_el.text(response.message);
404 }
405 }
406 ).always(function() {
407 btn.val(wpoptimize.run_now);
408 btn.prop('disabled', false);
409 });
410 } else {
411 cache_preload_status_el.text(wpoptimize.starting_preload);
412
413 btn.data('running', true);
414 send_command(
415 'run_cache_preload',
416 null,
417 null,
418 true,
419 {
420 timeout: 3000 // set a timeout in case the server doesn't support our close browser connection function.
421 }
422 ).always(function(response) {
423 try {
424 var resp = wpo_parse_json(response);
425 } catch (e) {
426 }
427
428 if (resp && resp.error && 'timeout' !== resp.statusText) {
429
430 var error_text = wpoptimize.error_unexpected_response;
431
432 if (typeof resp.error != 'function') {
433 error_text = resp.error;
434 } else if (resp.status) {
435 error_text = resp.status + ': ' + resp.statusText;
436 }
437
438 alert(error_text);
439
440 cache_preload_status_el.text(status);
441 btn.prop('disabled', false);
442 btn.data('running', false);
443
444 return;
445 }
446
447 cache_preload_status_el.text(wpoptimize.loading_urls);
448 btn.val(wpoptimize.cancel);
449 btn.prop('disabled', false);
450 run_update_cache_preload_status();
451 });
452 }
453 });
454
455 /**
456 * If already running then update status
457 */
458 if (run_cache_preload_btn.data('running')) {
459 run_update_cache_preload_status();
460 }
461
462 /**
463 * Create heartbeat agent action for update preloader status.
464 *
465 * @return void
466 */
467 function run_update_cache_preload_status() {
468 var agent = heartbeat.add_agent({
469 command: 'get_cache_preload_status',
470 callback: update_cache_preload_status,
471 _keep: false
472 });
473
474 if (null !== agent) heartbeat_agents.push(agent);
475 }
476
477 /**
478 * Update cache preload status ajax action.
479 *
480 * @return void
481 */
482 function update_cache_preload_status(response) {
483 if (response.done) {
484 run_cache_preload_btn.val(wpoptimize.run_now);
485 run_cache_preload_btn.data('running', false);
486 } else {
487 run_cache_preload_btn.val(wpoptimize.cancel);
488 run_cache_preload_btn.data('running', true);
489 run_update_cache_preload_status();
490 }
491 cache_preload_status_el.text(response.message);
492 update_cache_size_information(response);
493 }
494
495 /**
496 * Run update information about cache size.
497 *
498 * @return void
499 */
500 function update_cache_size_information(response) {
501 $('#wpo_current_cache_size_information').text(wpoptimize.current_cache_size + ' ' + response.size);
502 $('#wpo_current_cache_file_count').text(wpoptimize.number_of_files + ' ' + response.file_count);
503 }
504
505 var wpo_auto_preload_after_purge_btn = $('#wpo-auto-preload-after-purge');
506 wpo_auto_preload_after_purge_btn.on('click', function() {
507 var clicked_btn = this;
508
509 clicked_btn.disabled = true;
510 send_command(
511 'save_cache_auto_preload_option',
512 { enabled: !!clicked_btn.checked },
513 function(response) {
514 clicked_btn.disabled = false;
515 }
516 );
517 });
518
519 wp_optimize.cache_settings = gather_cache_settings;
520 };
521