PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 8.9.1
Jetpack – WP Security, Backup, Speed, & Growth v8.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 / idc-notice.js
jetpack / _inc Last commit date
blocks 5 years ago build 5 years ago fonts 8 years ago genericons 6 years ago lib 5 years ago social-logos 5 years ago accessible-focus.js 5 years ago class.jetpack-provision.php 6 years ago connect-button.js 5 years ago crowdsignal-shortcode.js 5 years ago crowdsignal-survey.js 5 years ago facebook-embed.js 5 years ago footer.php 7 years ago gallery-settings.js 5 years ago genericons.php 11 years ago header.php 7 years ago idc-notice.js 5 years ago jetpack-admin.js 5 years ago jetpack-connection-banner.js 5 years ago jetpack-deactivate-dialog.js 5 years ago jetpack-jitm.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-server-sandbox.php 6 years ago jetpack-wizard-banner.js 5 years ago jquery.jetpack-resize.js 5 years ago polldaddy-shortcode.js 5 years ago postmessage.js 8 years ago social-logos.php 6 years ago twitter-timeline.js 5 years ago
idc-notice.js
242 lines
1 /* global idcL10n, jQuery, analytics, history, wpCookies */
2
3 ( function ( $ ) {
4 var restNonce = idcL10n.nonce,
5 currentUrl = idcL10n.currentUrl,
6 restRoot = idcL10n.apiRoot,
7 notice = $( '.jp-idc-notice' ),
8 idcButtons = $( '.jp-idc-notice .dops-button' ),
9 tracksUser = idcL10n.tracksUserData,
10 tracksEvent = idcL10n.tracksEventData,
11 adminBarMenu = $( '#wp-admin-bar-jetpack-idc' ),
12 confirmSafeModeButton = $( '#jp-idc-confirm-safe-mode-action' ),
13 fixConnectionButton = $( '#jp-idc-fix-connection-action' ),
14 migrateButton = $( '#jp-idc-migrate-action' ),
15 reconnectButton = $( '#jp-idc-reconnect-site-action' ),
16 errorNotice = $( '.jp-idc-error__notice' ),
17 erroredAction = false;
18
19 // Initialize Tracks and bump stats.
20 if ( 'undefined' !== typeof analytics ) {
21 analytics.initialize( tracksUser.userid, tracksUser.username );
22 }
23
24 if ( tracksEvent.isAdmin ) {
25 trackAndBumpMCStats( 'notice_view' );
26 } else {
27 trackAndBumpMCStats( 'non_admin_notice_view', { page: tracksEvent.currentScreen } );
28 }
29 clearConfirmationArgsFromUrl();
30
31 // If the user dismisses the notice, set a cookie for one week so we don't display it for that time.
32 notice.on( 'click', '.notice-dismiss', function () {
33 var secure = 'https:' === window.location.protocol;
34 wpCookies.set( 'jetpack_idc_dismiss_notice', '1', 7 * 24 * 60 * 60, false, false, secure );
35 trackAndBumpMCStats( 'non_admin_notice_dismiss', { page: tracksEvent.currentScreen } );
36 } );
37
38 notice.on( 'click', '#jp-idc-error__action', function () {
39 errorNotice.hide();
40 switch ( erroredAction ) {
41 case 'confirm':
42 confirmSafeMode();
43 break;
44 case 'start-fresh':
45 startFreshConnection();
46 break;
47 case 'migrate':
48 migrateStatsAndSubscribers();
49 break;
50 default:
51 return;
52 }
53 } );
54
55 // Confirm Safe Mode
56 confirmSafeModeButton.on( 'click', confirmSafeMode );
57
58 // Fix connection
59 fixConnectionButton.on( 'click', fixJetpackConnection );
60
61 // Start fresh connection
62 reconnectButton.on( 'click', startFreshConnection );
63
64 // Starts migration process.
65 migrateButton.on( 'click', migrateStatsAndSubscribers );
66
67 function disableDopsButtons() {
68 idcButtons.prop( 'disabled', true );
69 }
70
71 function enableDopsButtons() {
72 idcButtons.prop( 'disabled', false );
73 }
74
75 function clearConfirmationArgsFromUrl( allowReload ) {
76 allowReload = 'undefined' === typeof allowReload ? false : allowReload;
77
78 // If the jetpack_idc_clear_confirmation query arg is present, let's try to clear it.
79 //
80 // Otherwise, there's a weird flow where if the user dismisses the notice, then shows the notice, then clicks
81 // the confirm safe mode button again, and then reloads the page, then the notice never disappears.
82 if (
83 window.location.search &&
84 -1 !== window.location.search.indexOf( 'jetpack_idc_clear_confirmation' )
85 ) {
86 trackAndBumpMCStats( 'clear_confirmation_clicked' );
87
88 // If push state is available, let's use that to minimize reloading the page.
89 // Otherwise, we can clear the args by reloading the page.
90 if ( history && history.pushState ) {
91 history.pushState( {}, '', currentUrl );
92 } else if ( allowReload ) {
93 window.location.href = currentUrl;
94 }
95 }
96 }
97
98 function confirmSafeMode() {
99 errorNotice.hide();
100 trackAndBumpMCStats( 'confirm_safe_mode' );
101
102 var route = restRoot + 'jetpack/v4/identity-crisis/confirm-safe-mode';
103 disableDopsButtons();
104 $.ajax( {
105 method: 'POST',
106 beforeSend: function ( xhr ) {
107 xhr.setRequestHeader( 'X-WP-Nonce', restNonce );
108 },
109 url: route,
110 data: {},
111 success: function () {
112 notice.hide();
113 adminBarMenu.removeClass( 'hide' );
114
115 // We must refresh the Jetpack admin UI page in order for the React UI to render.
116 if ( window.location.search && 1 === window.location.search.indexOf( 'page=jetpack' ) ) {
117 window.location.reload();
118 }
119 },
120 error: function ( error ) {
121 erroredAction = 'confirm';
122 displayErrorNotice( error );
123 enableDopsButtons();
124 },
125 } );
126 }
127
128 function migrateStatsAndSubscribers() {
129 errorNotice.hide();
130 trackAndBumpMCStats( 'migrate' );
131
132 var route = restRoot + 'jetpack/v4/identity-crisis/migrate';
133 disableDopsButtons();
134 $.ajax( {
135 method: 'POST',
136 beforeSend: function ( xhr ) {
137 xhr.setRequestHeader( 'X-WP-Nonce', restNonce );
138 },
139 url: route,
140 data: {},
141 success: function () {
142 notice.hide();
143 if ( $( 'body' ).hasClass( 'toplevel_page_jetpack' ) ) {
144 // On the main Jetpack page, sites in IDC will not see Jetpack's interface.
145 // Once IDC is resolved, we need to refresh the page to regain access to the UI.
146 window.location.reload( true );
147 }
148 },
149 error: function ( error ) {
150 erroredAction = 'migrate';
151 displayErrorNotice( error );
152 enableDopsButtons();
153 },
154 } );
155 }
156
157 function fixJetpackConnection() {
158 errorNotice.hide();
159 trackAndBumpMCStats( 'fix_connection' );
160 notice.addClass( 'jp-idc-show-second-step' );
161 }
162
163 /**
164 * On successful request of the endpoint, we will redirect to the
165 * connection auth flow after appending a specific 'from=' param for tracking.
166 */
167 function startFreshConnection() {
168 errorNotice.hide();
169 trackAndBumpMCStats( 'start_fresh' );
170
171 var route = restRoot + 'jetpack/v4/identity-crisis/start-fresh';
172 disableDopsButtons();
173 $.ajax( {
174 method: 'POST',
175 beforeSend: function ( xhr ) {
176 xhr.setRequestHeader( 'X-WP-Nonce', restNonce );
177 },
178 url: route,
179 data: {},
180 success: function ( connectUrl ) {
181 // Add a from param and take them to connect.
182 window.location = connectUrl + '&from=idc-notice';
183 },
184 error: function ( error ) {
185 erroredAction = 'start-fresh';
186 displayErrorNotice( error );
187 enableDopsButtons();
188 },
189 } );
190 }
191
192 /**
193 * Displays an error message from the REST endpoints we're hitting.
194 *
195 * @param error {Object} Object containing the errored response from the API
196 */
197 function displayErrorNotice( error ) {
198 var errorDescription = $( '.jp-idc-error__desc' );
199 if ( error && error.responseJSON && error.responseJSON.message ) {
200 errorDescription.html( error.responseJSON.message );
201 } else {
202 errorDescription.html( '' );
203 }
204 errorNotice.css( 'display', 'flex' );
205 }
206
207 /**
208 * This function will fire both a Tracks and MC stat.
209 * It will make sure to format the event name properly for the given stat home.
210 *
211 * Tracks: Will be prefixed by 'jetpack_idc_' and use underscores.
212 * MC: Will not be prefixed, and will use dashes.
213 *
214 * @param eventName string
215 * @param extraProps object
216 */
217 function trackAndBumpMCStats( eventName, extraProps ) {
218 if ( 'undefined' === typeof extraProps || 'object' !== typeof extraProps ) {
219 extraProps = {};
220 }
221
222 if (
223 eventName &&
224 eventName.length &&
225 'undefined' !== typeof analytics &&
226 analytics.tracks &&
227 analytics.mc
228 ) {
229 // Format for Tracks
230 eventName = eventName.replace( /-/g, '_' );
231 eventName =
232 eventName.indexOf( 'jetpack_idc_' ) !== 0 ? 'jetpack_idc_' + eventName : eventName;
233 analytics.tracks.recordEvent( eventName, extraProps );
234
235 // Now format for MC stats
236 eventName = eventName.replace( 'jetpack_idc_', '' );
237 eventName = eventName.replace( /_/g, '-' );
238 analytics.mc.bumpStat( 'jetpack-idc', eventName );
239 }
240 }
241 } )( jQuery );
242