
| Current Path : /var/www/html/strat/web/modules/contrib/webform/js/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/html/strat/web/modules/contrib/webform/js/webform.element.states.js |
/**
* @file
* JavaScript behaviors for element #states.
*/
(function ($, Drupal, drupalSettings, once) {
'use strict';
/**
* Element #states builder.
*
* @type {Drupal~behavior}
*/
Drupal.behaviors.webformElementStates = {
attach: function (context) {
$(once('webform-element-states-condition', '.webform-states-table--condition', context)).each(function () {
var $condition = $(this);
var $selector = $condition.find('.webform-states-table--selector select');
var $value = $condition.find('.webform-states-table--value input');
var $trigger = $condition.find('.webform-states-table--trigger select');
// Initialize autocompletion.
$value.autocomplete({minLength: 0}).on('focus', function () {
$value.autocomplete('search', '');
});
// Initialize trigger and selector.
$trigger.on('change', function () {$selector.trigger('change');});
$selector.on('change', function () {
var selector = $selector.val();
var sourceKey = drupalSettings.webformElementStates.selectors[selector];
var source = drupalSettings.webformElementStates.sources[sourceKey];
var notPattern = ($trigger.val().indexOf('pattern') === -1);
if (source && notPattern) {
// Enable autocompletion.
$value
.autocomplete('option', 'source', source)
.addClass('form-autocomplete');
}
else {
// Disable autocompletion.
$value
.autocomplete('option', 'source', [])
.removeClass('form-autocomplete');
}
// Always disable browser auto completion.
var off = /chrom(e|ium)/.test(window.navigator.userAgent.toLowerCase()) ? 'chrome-off-' + Math.floor(Math.random() * 100000000) : 'off';
$value.attr('autocomplete', off);
}).trigger('change');
});
// If the states:state is required or optional the required checkbox
// should be checked and disabled.
var $state = $(context).find('.webform-states-table--state select');
if ($state.length) {
$(once('webform-element-states-state', $state))
.on('change', toggleRequiredCheckbox);
toggleRequiredCheckbox();
}
}
};
/**
* Track required checked state.
*
* @type {null|boolean}
*/
var requiredChecked = null;
/**
* Toggle the required checkbox when states:state is required or optional.
*/
function toggleRequiredCheckbox() {
var $input = $('input[name="properties[required]"]');
if (!$input.length) {
return;
}
// Determine if any states:state is required or optional.
var required = false;
$('.webform-states-table--state select').each(function () {
var value = $(this).val();
if (value === 'required' || value === 'optional') {
required = true;
}
});
if (required) {
requiredChecked = $input.prop('checked');
$input.attr('disabled', true);
$input.prop('checked', true);
}
else {
$input.attr('disabled', false);
if (requiredChecked !== null) {
$input.prop('checked', requiredChecked);
requiredChecked = null;
}
}
$input.trigger('change');
}
})(jQuery, Drupal, drupalSettings, once);