This repository has been archived on 2025-01-19. You can view files and clone it, but cannot push or open issues or pull requests.
drupalcampbristol/web/modules/contrib/webform/js/webform.wizard.track.js
2019-01-24 08:00:03 +00:00

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);