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

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