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

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