1- /* globals newspack_ras_config, newspack_reader_data */
1+ /* globals newspack_ras_config, newspack_reader_data, gform */
22
33window . newspack_ras_config = window . newspack_ras_config || { } ;
44
@@ -384,8 +384,10 @@ function attachAuthCookiesListener() {
384384 * Set the reader as newsletter subscriber once a newsletter form is submitted.
385385 */
386386function attachNewsletterFormListener ( ) {
387- const newspackForms = [ '.newspack-newsletters-subscribe' , '.newspack-subscribe-form' ] ;
388- const thirdPartyForms = [ '.mc4wp-form' ] ;
387+ const newspackForms = [ '.newspack-newsletters-subscribe' ] ;
388+
389+ // newspack-subscribe-form is a generic class that can be added to any 3rd party form. Once it's submitted, we consider the reader a newsletter subscriber.
390+ const thirdPartyForms = [ '.mc4wp-form' , '.newspack-subscribe-form' ] ;
389391
390392 const attachHandler = ( el , eventToListenTo = 'submit' ) => {
391393 const form = 'FORM' === el . tagName ? el : el . querySelector ( 'form' ) ;
@@ -397,9 +399,32 @@ function attachNewsletterFormListener() {
397399 } ) ;
398400 } ;
399401
400- // For third-party forms, set reader data on form submit. For first-party forms, listen for the custom event upon successful signup response.
401- document . querySelectorAll ( thirdPartyForms . join ( ',' ) ) . forEach ( el => attachHandler ( el ) ) ;
402+ const gformIds = [ ] ;
403+
404+ // For third-party forms, set reader data on form submit. Also detect Gravity Forms.
405+ document . querySelectorAll ( thirdPartyForms . join ( ',' ) ) . forEach ( el => {
406+ // If the form id stats with gform_ and it has a data-formid prop, it's a gravity form.
407+ const isGravityForm = el . id . startsWith ( 'gform_' ) && el . hasAttribute ( 'data-formid' ) ;
408+ if ( isGravityForm ) {
409+ gformIds . push ( parseInt ( el . getAttribute ( 'data-formid' ) ) ) ;
410+ return ;
411+ }
412+ // If not a gravity form, just attach the handler.
413+ attachHandler ( el ) ;
414+ } ) ;
415+
416+ // First-party forms success event listener.
402417 document . querySelectorAll ( newspackForms . join ( ',' ) ) . forEach ( el => attachHandler ( el , 'newspack-newsletters-subscribe-success' ) ) ;
418+
419+ // Gravity forms handlers.
420+ document . addEventListener ( 'gform/post_render' , event => {
421+ if ( window . gform ?. utils ?. addAsyncFilter && gformIds . includes ( event . detail ?. formId ) ) {
422+ gform . utils . addAsyncFilter ( 'gform/submission/pre_submission' , async data => {
423+ store . set ( 'is_newsletter_subscriber' , true ) ;
424+ return data ;
425+ } ) ;
426+ }
427+ } ) ;
403428}
404429
405430const readerActivation = {
0 commit comments