PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 9.9.1
Jetpack – WP Security, Backup, Speed, & Growth v9.9.1
15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / _inc / connect-button.js
jetpack / _inc Last commit date
blocks 4 years ago build 4 years ago fonts 8 years ago genericons 6 years ago lib 4 years ago social-logos 5 years ago accessible-focus.js 5 years ago class.jetpack-provision.php 4 years ago connect-button.js 4 years ago crowdsignal-shortcode.js 5 years ago crowdsignal-survey.js 5 years ago facebook-embed.js 5 years ago gallery-settings.js 5 years ago genericons.php 11 years ago header.php 7 years ago jetpack-admin.js 5 years ago jetpack-connection-banner.js 5 years ago jetpack-deactivate-dialog.js 5 years ago jetpack-modules.js 5 years ago jetpack-modules.models.js 6 years ago jetpack-modules.views.js 5 years ago jetpack-recommendations-banner.js 5 years ago jetpack-server-sandbox.php 6 years ago jquery.jetpack-resize.js 5 years ago polldaddy-shortcode.js 5 years ago postmessage.js 5 years ago social-logos.php 5 years ago twitter-timeline.js 5 years ago
connect-button.js
205 lines
1 /* global jpConnect */
2
3 jQuery( document ).ready( function ( $ ) {
4 var connectButton = $( '.jp-connect-button, .jp-banner__alt-connect-button' ).eq( 0 );
5 var tosText = $( '.jp-connect-full__tos-blurb' );
6 var jetpackConnectIframe = $( '<iframe class="jp-jetpack-connect__iframe" />' );
7 // Sections that only show up in the first Set Up screen
8 var connectionHelpSections = $(
9 '#jetpack-connection-cards, .jp-connect-full__dismiss-paragraph, .jp-connect-full__testimonial'
10 );
11 // Sections that only show up in the "Authorize user" screen
12 var connectButtonFrom = '';
13
14 connectButton.on( 'click', function ( event ) {
15 event.preventDefault();
16
17 if ( 'undefined' === typeof URLSearchParams ) {
18 connectButtonFrom = '';
19 } else {
20 var searchParams = new URLSearchParams( $( this ).prop( 'search' ) );
21 connectButtonFrom = searchParams && searchParams.get( 'from' );
22 }
23
24 if ( connectionHelpSections.length ) {
25 connectionHelpSections.fadeOut( 600 );
26 }
27
28 jetpackConnectButton.startConnectionFlow();
29 } );
30
31 var jetpackConnectButton = {
32 isRegistering: false,
33 isPaidPlan: false,
34 startConnectionFlow: function () {
35 var connectionHelpSections = $( '#jetpack-connection-cards, .jp-connect-full__testimonial' );
36 if ( connectionHelpSections.length ) {
37 connectionHelpSections.fadeOut( 600 );
38 }
39
40 if ( ! jetpackConnectButton.isRegistering ) {
41 jetpackConnectButton.handleConnection();
42 }
43 },
44 selectAndStartAuthorizationFlow: function ( data ) {
45 if ( data.allowInplaceAuthorization && 'original' !== jpConnect.forceVariation ) {
46 jetpackConnectButton.handleAuthorizeInPlaceFlow( data );
47 } else {
48 // Forcing original connection flow, `JETPACK_SHOULD_NOT_USE_CONNECTION_IFRAME = true`
49 // or we're dealing with Safari which has issues with handling 3rd party cookies.
50 if ( data.alternateAuthorizeUrl ) {
51 window.location = data.alternateAuthorizeUrl;
52 } else {
53 window.location = data.authorizeUrl;
54 }
55 }
56 },
57 handleConnection: function () {
58 // Alternative connection buttons should redirect to the main one for the "connect in place" flow.
59 if ( connectButton.hasClass( 'jp-banner__alt-connect-button' ) ) {
60 // Make sure we don't lose the `from` parameter, if set.
61 var fromParam = ( connectButtonFrom && '&from=' + connectButtonFrom ) || '';
62 window.location = jpConnect.connectInPlaceUrl + fromParam;
63 return;
64 }
65
66 jetpackConnectButton.isRegistering = true;
67 tosText.hide();
68 connectButton.hide();
69 jetpackConnectButton.triggerLoadingState();
70
71 var registerUrl = jpConnect.apiBaseUrl + '/connection/register';
72
73 // detect Calypso Env and add to API URL
74 if ( window.Initial_State && window.Initial_State.calypsoEnv ) {
75 registerUrl =
76 registerUrl + '?' + $.param( { calypso_env: window.Initial_State.calypsoEnv } );
77 }
78
79 $.ajax( {
80 url: registerUrl,
81 type: 'POST',
82 data: {
83 registration_nonce: jpConnect.registrationNonce,
84 _wpnonce: jpConnect.apiNonce,
85 from: connectButtonFrom,
86 no_iframe: 'original' === jpConnect.forceVariation,
87 },
88 error: jetpackConnectButton.handleConnectionError,
89 success: jetpackConnectButton.selectAndStartAuthorizationFlow,
90 } );
91 },
92 triggerLoadingState: function () {
93 var loadingText = $( '<span>' )
94 .addClass( 'jp-connect-full__button-container-loading' )
95 .text( jpConnect.buttonTextRegistering )
96 .appendTo( '.jp-connect-full__button-container' );
97
98 var spinner = $( '<div>' ).addClass( 'jp-spinner' );
99 var spinnerOuter = $( '<div>' ).addClass( 'jp-spinner__outer' ).appendTo( spinner );
100 $( '<div>' ).addClass( 'jp-spinner__inner' ).appendTo( spinnerOuter );
101 loadingText.after( spinner );
102 },
103 handleAuthorizeInPlaceFlow: function ( data ) {
104 window.addEventListener( 'message', jetpackConnectButton.receiveData );
105 jetpackConnectIframe.attr(
106 'src',
107 data.authorizeUrl + '&from=' + connectButtonFrom + '&iframe_source=jetpack-connect-main'
108 );
109 jetpackConnectIframe.on( 'load', function () {
110 jetpackConnectIframe.show();
111 $( '.jp-connect-full__button-container' ).hide();
112 $( '#jp-connect-full__step1-header' ).hide();
113 $( '#jp-connect-full__step2-header' ).show();
114 } );
115 jetpackConnectIframe.hide();
116 $( '.jp-connect-full__button-container' ).after( jetpackConnectIframe );
117
118 // At this point we are pretty sure if things work out that we will be loading the admin script
119 var link = document.createElement( 'link' );
120 link.rel = 'preload';
121 link.as = 'script';
122 link.href = jpConnect.preFetchScript;
123 document.head.appendChild( link );
124 },
125 fetchPlanType: function () {
126 return $.ajax( {
127 url: jpConnect.apiBaseUrl + '/site',
128 type: 'GET',
129 data: {
130 _wpnonce: jpConnect.apiSiteDataNonce,
131 },
132 success: function ( data ) {
133 var siteData = JSON.parse( data.data );
134 jetpackConnectButton.isPaidPlan =
135 siteData.options.is_pending_plan || ! siteData.plan.is_free;
136 },
137 } );
138 },
139 receiveData: function ( event ) {
140 if (
141 event.origin !== jpConnect.jetpackApiDomain ||
142 event.source !== jetpackConnectIframe.get( 0 ).contentWindow
143 ) {
144 return;
145 }
146
147 switch ( event.data ) {
148 case 'close':
149 window.removeEventListener( 'message', this.receiveData );
150 jetpackConnectButton.handleAuthorizationComplete();
151 break;
152 case 'wpcom_nocookie':
153 jetpackConnectIframe.hide();
154 jetpackConnectButton.handleConnectionError();
155 break;
156 }
157 },
158 handleAuthorizationComplete: function () {
159 jetpackConnectButton.isRegistering = false;
160
161 // Fetch plan type late to make sure any stored license keys have been
162 // attached to the site during the connection.
163 jetpackConnectButton.fetchPlanType().always( function () {
164 if ( ! jetpackConnectButton.isPaidPlan ) {
165 window.location.assign( jpConnect.plansPromptUrl );
166 return;
167 }
168
169 var parser = document.createElement( 'a' );
170 parser.href = jpConnect.dashboardUrl;
171 var reload =
172 window.location.pathname === parser.pathname &&
173 window.location.hash.length &&
174 parser.hash.length;
175
176 window.location.assign( jpConnect.dashboardUrl );
177
178 if ( reload ) {
179 // The Jetpack admin page has hashes in the URLs, so we need to reload the page after .assign()
180 window.location.reload( true );
181 }
182 } );
183 },
184 handleConnectionError: function ( error ) {
185 jetpackConnectButton.isRegistering = false;
186 // If something goes wrong, we take users to Calypso.
187 window.location = connectButton.attr( 'href' );
188 },
189 };
190
191 // When we visit /wp-admin/admin.php?page=jetpack#/setup, immediately start the connection flow.
192 var hash = location.hash.replace( /(#\/setup).*/, 'setup' );
193
194 // In case the parameter has been manually set in the URL after redirect.
195 connectButtonFrom = location.hash.split( '&from=' )[ 1 ];
196
197 if ( 'setup' === hash ) {
198 if ( connectionHelpSections.length ) {
199 connectionHelpSections.hide();
200 }
201
202 jetpackConnectButton.startConnectionFlow();
203 }
204 } );
205