75 lines
2.1 KiB
JavaScript
75 lines
2.1 KiB
JavaScript
/**
|
|
* @file
|
|
* JavaScript behaviors for toggle integration.
|
|
*/
|
|
|
|
(function ($, Drupal) {
|
|
|
|
'use strict';
|
|
|
|
// @see https://github.com/simontabor/jquery-toggles
|
|
Drupal.webform = Drupal.webform || {};
|
|
Drupal.webform.toggles = Drupal.webform.toggles || {};
|
|
Drupal.webform.toggles.options = Drupal.webform.toggles.options || {};
|
|
|
|
/**
|
|
* Initialize toggle element using Toggles.
|
|
*
|
|
* @type {Drupal~behavior}
|
|
*/
|
|
Drupal.behaviors.webformToggle = {
|
|
attach: function (context) {
|
|
if (!$.fn.toggles) {
|
|
return;
|
|
}
|
|
|
|
$(context).find('.js-webform-toggle').once('webform-toggle').each(function () {
|
|
var $toggle = $(this);
|
|
var $wrapper = $toggle.parent();
|
|
var $checkbox = $wrapper.find('input[type="checkbox"]');
|
|
var $label = $wrapper.find('label');
|
|
|
|
var options = $.extend({
|
|
checkbox: $checkbox,
|
|
on: $checkbox.is(':checked'),
|
|
clicker: $label,
|
|
text: {
|
|
on: $toggle.attr('data-toggle-text-on') || '',
|
|
off: $toggle.attr('data-toggle-text-off') || ''
|
|
}
|
|
}, Drupal.webform.toggles.options);
|
|
|
|
$toggle.toggles(options);
|
|
|
|
// Trigger change event for #states API.
|
|
// @see Drupal.states.Trigger.states.checked.change
|
|
$toggle.on('toggle', function () {
|
|
$checkbox.trigger('change');
|
|
});
|
|
|
|
// If checkbox is disabled then add the .disabled class to the toggle.
|
|
if ($checkbox.attr('disabled') || $checkbox.attr('readonly')) {
|
|
$toggle.addClass('disabled');
|
|
}
|
|
|
|
// Add .clearfix to the wrapper.
|
|
$wrapper.addClass('clearfix');
|
|
});
|
|
}
|
|
};
|
|
|
|
// Track the disabling of a toggle's checkbox using states.
|
|
if ($.fn.toggles) {
|
|
$(document).on('state:disabled', function (event) {
|
|
$('.js-webform-toggle').each(function () {
|
|
var $toggle = $(this);
|
|
var $wrapper = $toggle.parent();
|
|
var $checkbox = $wrapper.find('input[type="checkbox"]');
|
|
var isDisabled = ($checkbox.attr('disabled') || $checkbox.attr('readonly'));
|
|
$toggle[isDisabled ? 'disabled' : 'disabled']();
|
|
});
|
|
});
|
|
}
|
|
|
|
})(jQuery, Drupal);
|