68 lines
2.3 KiB
JavaScript
68 lines
2.3 KiB
JavaScript
/**
|
|
* @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.
|
|
// 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);
|
|
}
|
|
}
|
|
|
|
// 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;
|
|
});
|
|
|
|
/**
|
|
* 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);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
})(jQuery, Drupal);
|