PageSourceSearch

https://textslashplain.com/wp-content/plugins/jetpack/modules/comm…/subscription-modal.js?m=1764003632

js textslashplain.com collected 2026-10-01 10:15:33 UTC 3,820 bytes, 146 lines download raw bytes

1/* global subscriptionData */
2document.addEventListener( 'DOMContentLoaded', function () {
3	const modal = document.getElementsByClassName( 'jetpack-subscription-modal' )[ 0 ];
4
5	if ( ! modal ) {
6		return;
7	}
8
9	const close = document.getElementsByClassName( 'jetpack-subscription-modal__close' )[ 0 ];
10
11	let redirectUrl = '';
12	let hasLoaded = false;
13
14	function reloadOnCloseSubscriptionModal( customUrl ) {
15		const destinationUrl = customUrl ? new URL( customUrl ) : new URL( redirectUrl );
16
17		// Prevent redirect to external sites.
18		if ( destinationUrl.hostname !== window.location.hostname ) {
19			return;
20		}
21
22		try {
23			localStorage.setItem(
24				'jetpack-subscription-modal-on-comment-scroll-to',
25				destinationUrl.hash
26			);
27		} catch {
28			// Ok if we can't set it.
29		}
30
31		// Add cache-busting parameter
32		destinationUrl.searchParams.set( '_ctn', Date.now() );
33		window.location.href = destinationUrl.toString();
34	}
35
36	function JetpackSubscriptionModalOnCommentMessageListener( event ) {
37		let message = event && event.data;
38		if ( typeof message === 'string' ) {
39			try {
40				message = JSON.parse( message );
41			} catch {
42				return;
43			}
44		}
45
46		const type = message && message.type;
47		const data = message && message.data;
48
49		if ( type !== 'subscriptionModalShow' || typeof data.url === 'undefined' ) {
50			return;
51		}
52
53		if ( subscriptionData.homeUrl !== event.origin ) {
54			return;
55		}
56
57		if ( data.email ) {
58			const emailInput = document.querySelector(
59				'.jetpack-subscription-modal__modal-content input[type="email"]'
60			);
61			if ( ! emailInput ) {
62				reloadOnCloseSubscriptionModal( data.url );
63				return;
64			}
65
66			const appSource = document.querySelector(
67				'.jetpack-subscription-modal__modal-content input[name="app_source"]'
68			);
69			if ( ! appSource ) {
70				reloadOnCloseSubscriptionModal( data.url );
71				return;
72			}
73
74			emailInput.value = data.email;
75			if ( data.is_logged_in ) {
76				emailInput.setAttribute( 'readonly', 'readonly' );
77				appSource.value = 'atomic-subscription-modal-li';
78			}
79		}
80
81		if ( ! hasLoaded ) {
82			try {
83				const storedCount = parseInt(
84					sessionStorage.getItem( 'jetpack-subscription-modal-shown-count' )
85				);
86				const showCount = ( isNaN( storedCount ) ? 0 : storedCount ) + 1;
87				sessionStorage.setItem( 'jetpack-subscription-modal-shown-count', showCount );
88
89				if ( showCount > 5 ) {
90					new Image().src =
91						document.location.protocol +
92						'//pixel.wp.com/g.gif?v=wpcom-no-pv&x_jetpack-subscribe-modal-comm=hidden_views_limit&r=' +
93						Math.random();
94
95					reloadOnCloseSubscriptionModal( data.url );
96					return;
97				}
98			} catch {
99				// Ignore any errors.
100			}
101
102			new Image().src =
103				document.location.protocol +
104				'//pixel.wp.com/g.gif?v=wpcom-no-pv&x_jetpack-subscribe-modal-comm=showed&r=' +
105				Math.random();
106
107			modal.classList.toggle( 'open' );
108			hasLoaded = true;
109			redirectUrl = data.url;
110		}
111	}
112
113	window.addEventListener( 'message', JetpackSubscriptionModalOnCommentMessageListener );
114
115	if ( close ) {
116		close.onclick = function ( event ) {
117			event.preventDefault();
118			modal.classList.toggle( 'open' );
119			reloadOnCloseSubscriptionModal();
120		};
121	}
122
123	window.onclick = function ( event ) {
124		if ( event.target === modal ) {
125			modal.style.display = 'none';
126			reloadOnCloseSubscriptionModal();
127		}
128	};
129
130	window.addEventListener( 'load', () => {
131		// Scroll to the last comment.
132		const subscriptionScroll = localStorage.getItem(
133			'jetpack-subscription-modal-on-comment-scroll-to'
134		);
135
136		if ( subscriptionScroll ) {
137			window.location.hash = subscriptionScroll;
138			localStorage.removeItem( 'jetpack-subscription-modal-on-comment-scroll-to' );
139
140			const comment = document.querySelector( subscriptionScroll );
141			if ( comment ) {
142				comment.scrollIntoView( { block: 'center', behavior: 'smooth' } );
143			}
144		}
145	} );
146} );

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.