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.dialog.js
2018-11-23 12:29:20 +00:00

76 lines
2.6 KiB
JavaScript

/**
* @file
* JavaScript behaviors for webform dialogs.
*/
(function ($, Drupal, drupalSettings) {
'use strict';
// @see http://api.jqueryui.com/dialog/
Drupal.webform = Drupal.webform || {};
Drupal.webform.dialog = Drupal.webform.dialog || {};
Drupal.webform.dialog.options = Drupal.webform.dialog.options || {};
/**
* Open webform dialog using preset options.
*
* @type {Drupal~behavior}
*/
Drupal.behaviors.webformDialog = {
attach: function (context) {
$('a.webform-dialog', context).once('webform-dialog').each(function () {
var $a = $(this);
// Get default options.
var options = $.extend({}, Drupal.webform.dialog.options);
// Get preset dialog options.
if ($a.attr('class').match(/webform-dialog-([a-z0-9_]+)/)) {
var dialogOptionsName = RegExp.$1;
if (drupalSettings.webform.dialog.options[dialogOptionsName]) {
options = drupalSettings.webform.dialog.options[dialogOptionsName];
// Unset title.
delete options.title;
}
}
// Get custom dialog options.
if ($(this).data('dialog-options')) {
$.extend(options, $(this).data('dialog-options'));
}
var href = $a.attr('href');
// Replace ENTITY_TYPE and ENTITY_ID placeholders and update the href.
// @see webform_page_attachments()
if (href.indexOf('?source_entity_type=ENTITY_TYPE&source_entity_id=ENTITY_ID') !== -1) {
if (drupalSettings.webform.dialog.entity_type && drupalSettings.webform.dialog.entity_id) {
href = href.replace('ENTITY_TYPE', encodeURIComponent(drupalSettings.webform.dialog.entity_type));
href = href.replace('ENTITY_ID', encodeURIComponent(drupalSettings.webform.dialog.entity_id));
}
else {
href = href.replace('?source_entity_type=ENTITY_TYPE&source_entity_id=ENTITY_ID', '');
}
$a.attr('href', href);
}
// Append _webform_dialog=1 to href to trigger Ajax support.
// @see \Drupal\webform\WebformSubmissionForm::setEntity
href += (href.indexOf('?') === -1 ? '?' : '&') + '_webform_dialog=1';
var element_settings = {};
element_settings.progress = {type: 'fullscreen'};
element_settings.url = href;
element_settings.event = 'click';
element_settings.dialogType = $a.data('dialog-type') || 'modal';
element_settings.dialog = options;
element_settings.element = this;
Drupal.ajax(element_settings);
});
}
};
})(jQuery, Drupal, drupalSettings);