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

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