67 lines
1.8 KiB
JavaScript
67 lines
1.8 KiB
JavaScript
/**
|
|
* @file
|
|
* JavaScript behaviors for tableselect enhancements.
|
|
*
|
|
* @see core/misc/tableselect.es6.js
|
|
*/
|
|
|
|
(function ($, Drupal) {
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* Initialize and tweak webform tableselect behavior.
|
|
*
|
|
* @type {Drupal~behavior}
|
|
*/
|
|
Drupal.behaviors.webformTableSelect = {
|
|
attach: function (context) {
|
|
$(context)
|
|
.find('table.js-webform-tableselect')
|
|
.once('webform-tableselect')
|
|
.each(Drupal.webformTableSelect);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Callback used in {@link Drupal.behaviors.tableSelect}.
|
|
*/
|
|
Drupal.webformTableSelect = function () {
|
|
var $table = $(this);
|
|
|
|
// Set default table rows to .selected class.
|
|
$table.find('tr').each(function () {
|
|
// Set table row selected for checkboxes.
|
|
var $tr = $(this);
|
|
if ($tr.find('input[type="checkbox"]:checked').length && !$tr.hasClass('selected')) {
|
|
$tr.addClass('selected');
|
|
}
|
|
});
|
|
|
|
// Add .selected class event handler to all tableselect elements.
|
|
// Currently .selected is only added to tables with .select-all.
|
|
if ($table.find('th.select-all').length === 0) {
|
|
$table.find('td input[type="checkbox"]:enabled').on('click', function () {
|
|
$(this).closest('tr').toggleClass('selected', this.checked);
|
|
});
|
|
}
|
|
|
|
// Add click event handler to the table row that toggles the
|
|
// checkbox or radio.
|
|
$table.find('tr').on('click', function (event) {
|
|
if ($.inArray(event.target.tagName, ['A', 'BUTTON', 'INPUT', 'SELECT']) !== -1) {
|
|
return true;
|
|
}
|
|
|
|
var $tr = $(this);
|
|
var $checkbox = $tr.find('td input[type="checkbox"]:enabled, td input[type="radio"]:enabled');
|
|
if ($checkbox.length === 0) {
|
|
return true;
|
|
}
|
|
|
|
$checkbox.click();
|
|
});
|
|
};
|
|
|
|
})(jQuery, Drupal);
|