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

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