2018-11-23 12:29:20 +00:00
/ * *
* @ file
* JavaScript behaviors for webform wizard .
* /
( function ( $ , Drupal ) {
'use strict' ;
/ * *
* Tracks the wizard ' s current page in the URL .
*
* @ type { Drupal ~ behavior }
*
* @ prop { Drupal ~ behaviorAttach } attach
* Tracks the wizard ' s current page in the URL .
* /
Drupal . behaviors . webformWizardTrackPage = {
attach : function ( context ) {
// Make sure on page load or Ajax refresh the location ?page is correct
// since conditional logic can skip pages.
2019-01-24 08:00:03 +00:00
// Note: window.history is only supported by IE 10+.
if ( window . history && window . history . replaceState ) {
// Track the form's current page for 8.5.x and below.
// @todo Remove the below code once only 8.6.x is supported.
// @see https://www.drupal.org/project/drupal/issues/2508796
$ ( 'form[data-webform-wizard-current-page]' , context )
. once ( 'webform-wizard-current-page' )
. each ( function ( ) {
trackPage ( this ) ;
} ) ;
// Track the form's current page for 8.6.x and above.
if ( $ ( context ) . hasData ( 'webform-wizard-current-page' ) ) {
trackPage ( context ) ;
}
2018-11-23 12:29:20 +00:00
}
// When paging next and back update the URL so that Drupal knows what
// the expected page name or index is going to be.
// NOTE: If conditional wizard page logic is configured the
// expected page name or index may not be accurate.
$ ( ':button[data-webform-wizard-page], :submit[data-webform-wizard-page]' , context ) . once ( 'webform-wizard-page' ) . on ( 'click' , function ( ) {
var page = $ ( this ) . attr ( 'data-webform-wizard-page' ) ;
this . form . action = this . form . action . replace ( /\?.+$/ , '' ) + '?page=' + page ;
} ) ;
2019-01-24 08:00:03 +00:00
/ * *
* Append the form 's current page data attribute to the browser' s URL .
*
* @ param { HTMLElement } form
* The form element .
* /
function trackPage ( form ) {
var $form = $ ( form ) ;
// Make sure the form is visible before updating the URL.
if ( $form . is ( ':visible' ) ) {
var page = $form . attr ( 'data-webform-wizard-current-page' ) ;
var url = window . location . toString ( ) . replace ( /\?.+$/ , '' ) +
'?page=' + page ;
window . history . replaceState ( null , null , url ) ;
}
}
2018-11-23 12:29:20 +00:00
}
} ;
} ) ( jQuery , Drupal ) ;