PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.0.2
Jetpack – WP Security, Backup, Speed, & Growth v13.0.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 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 / modules / comments / subscription-modal-on-comment / subscription-modal.js
jetpack / modules / comments / subscription-modal-on-comment Last commit date
class-jetpack-subscription-modal-on-comment.php 2 years ago subscription-modal.css 2 years ago subscription-modal.js 2 years ago
subscription-modal.js
176 lines
1 document.addEventListener( 'DOMContentLoaded', function () {
2 const modal = document.getElementsByClassName( 'jetpack-subscription-modal' )[ 0 ];
3
4 if ( ! modal ) {
5 return;
6 }
7
8 const close = document.getElementsByClassName( 'jetpack-subscription-modal__close' )[ 0 ];
9 const subscribeForms = document.querySelectorAll( '.jetpack-subscription-modal__form' );
10
11 let redirectUrl = '';
12 let subscriptionData = '';
13 let hasLoaded = false;
14
15 function reloadOnCloseSubscriptionModal( customUrl ) {
16 const destinationUrl = customUrl ? new URL( customUrl ) : new URL( redirectUrl );
17
18 // Prevent redirect to external sites.
19 if ( destinationUrl.hostname !== window.location.hostname ) {
20 return;
21 }
22
23 localStorage.setItem( 'jetpack-subscription-modal-on-comment-scroll-to', destinationUrl.hash );
24
25 // For avoiding Firefox reload, we need to force reload bypassing the cache.
26 window.location.reload( true );
27 }
28
29 function handleSubscriptionModalIframeResult( eventFromIframe ) {
30 if ( eventFromIframe.origin === 'https://subscribe.wordpress.com' && eventFromIframe.data ) {
31 const data = JSON.parse( eventFromIframe.data );
32 const iframeElement = document.querySelector( '.jetpack-subscription-modal__iframe' );
33 if ( data && data.action === 'close' ) {
34 window.removeEventListener( 'message', handleSubscriptionModalIframeResult );
35 iframeElement.src = 'about:blank';
36 reloadOnCloseSubscriptionModal( subscriptionData.url );
37 }
38 }
39 }
40
41 function showSubscriptionIframe( subscriptionData ) {
42 const modalContainer = document.querySelector( '.jetpack-subscription-modal' );
43 const iframeElement = document.querySelector( '.jetpack-subscription-modal__iframe' );
44 const subscribeData = {
45 email: document.querySelector( '.jetpack-subscription-modal__form-email' ).value,
46 post_id: subscriptionData.post_id,
47 plan: 'newsletter',
48 blog: subscriptionData.blog_id,
49 source: 'jetpack_subscribe',
50 display: 'alternate',
51 app_source: subscriptionData.is_logged_in
52 ? 'atomic-subscription-modal-li'
53 : 'atomic-subscription-modal-lo',
54 locale: subscriptionData.lang,
55 };
56 const params = new URLSearchParams( subscribeData );
57
58 iframeElement.src = 'https://subscribe.wordpress.com/memberships/?' + params.toString();
59
60 modalContainer.classList.add( 'has-iframe' );
61
62 window.addEventListener( 'message', handleSubscriptionModalIframeResult, false );
63 }
64
65 function JetpackSubscriptionModalOnCommentMessageListener( event ) {
66 let message = event && event.data;
67 if ( typeof message === 'string' ) {
68 try {
69 message = JSON.parse( message );
70 } catch ( err ) {
71 return;
72 }
73 }
74
75 const type = message && message.type;
76 const data = message && message.data;
77
78 if ( type !== 'subscriptionModalShow' || typeof data.url === 'undefined' ) {
79 return;
80 }
81
82 if ( ! event.origin.includes( window.location.host ) ) {
83 return;
84 }
85
86 if ( data.email ) {
87 const emailInput = document.querySelector( '.jetpack-subscription-modal__form-email' );
88 emailInput.value = data.email;
89 if ( data.is_logged_in ) {
90 emailInput.setAttribute( 'readonly', 'readonly' );
91 }
92 }
93
94 if ( ! hasLoaded ) {
95 const storedCount = parseInt(
96 sessionStorage.getItem( 'jetpack-subscription-modal-shown-count' )
97 );
98 const showCount = ( isNaN( storedCount ) ? 0 : storedCount ) + 1;
99 sessionStorage.setItem( 'jetpack-subscription-modal-shown-count', showCount );
100
101 if ( showCount > 5 ) {
102 new Image().src =
103 document.location.protocol +
104 '//pixel.wp.com/g.gif?v=wpcom-no-pv&x_jetpack-subscribe-modal-comm=hidden_views_limit&r=' +
105 Math.random();
106
107 reloadOnCloseSubscriptionModal( data.url );
108 return;
109 }
110
111 new Image().src =
112 document.location.protocol +
113 '//pixel.wp.com/g.gif?v=wpcom-no-pv&x_jetpack-subscribe-modal-comm=showed&r=' +
114 Math.random();
115
116 modal.classList.toggle( 'open' );
117 hasLoaded = true;
118 redirectUrl = data.url;
119 subscriptionData = data;
120 return;
121 }
122 }
123
124 window.addEventListener( 'message', JetpackSubscriptionModalOnCommentMessageListener );
125
126 if ( close ) {
127 close.onclick = function ( event ) {
128 event.preventDefault();
129 modal.classList.toggle( 'open' );
130 reloadOnCloseSubscriptionModal();
131 };
132 }
133
134 subscribeForms.forEach( form => {
135 form.addEventListener( 'submit', function ( event ) {
136 if ( form.resubmitted ) {
137 return;
138 }
139
140 const emailInput = form.querySelector( 'input[type=email]' );
141 const email = emailInput ? emailInput.value : form.dataset.subscriber_email;
142
143 if ( ! email ) {
144 return;
145 }
146 event.preventDefault();
147 showSubscriptionIframe( subscriptionData );
148 return;
149 } );
150 } );
151
152 window.onclick = function ( event ) {
153 if ( event.target === modal ) {
154 modal.style.display = 'none';
155 reloadOnCloseSubscriptionModal();
156 }
157 };
158
159 window.addEventListener( 'load', () => {
160 // Scroll to the last comment.
161 const subscriptionScroll = localStorage.getItem(
162 'jetpack-subscription-modal-on-comment-scroll-to'
163 );
164
165 if ( subscriptionScroll ) {
166 window.location.hash = subscriptionScroll;
167 localStorage.removeItem( 'jetpack-subscription-modal-on-comment-scroll-to' );
168
169 const comment = document.querySelector( subscriptionScroll );
170 if ( comment ) {
171 comment.scrollIntoView( { block: 'center', behavior: 'smooth' } );
172 }
173 }
174 } );
175 } );
176