86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
/**
|
|
* @file
|
|
* Javascript behaviors for details element.
|
|
*/
|
|
|
|
(function ($, Drupal) {
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* Attach handler to toggle details open/close state.
|
|
*
|
|
* @type {Drupal~behavior}
|
|
*/
|
|
Drupal.behaviors.webformDetailsToggle = {
|
|
attach: function (context) {
|
|
$('.js-webform-details-toggle', context).once('webform-details-toggle').each(function () {
|
|
var $form = $(this);
|
|
var $details = $form.find('details');
|
|
|
|
// Toggle is only useful when there are two or more details elements.
|
|
if ($details.length < 2) {
|
|
return;
|
|
}
|
|
|
|
// Add toggle state link to first details element.
|
|
$details.first().before($('<button type="button" class="link webform-details-toggle-state"></button>')
|
|
.attr('title', Drupal.t('Toggle details widget state.'))
|
|
.on('click', function (e) {
|
|
var open;
|
|
if (isFormDetailsOpen($form)) {
|
|
$form.find('details').removeAttr('open');
|
|
open = 0;
|
|
}
|
|
else {
|
|
$form.find('details').attr('open', 'open');
|
|
open = 1;
|
|
}
|
|
setDetailsToggleLabel($form);
|
|
|
|
// Set the saved states for all the details elements.
|
|
// @see webform.element.details.save.js
|
|
if (Drupal.webformDetailsSaveGetName) {
|
|
$form.find('details').each(function () {
|
|
var name = Drupal.webformDetailsSaveGetName($(this));
|
|
if (name) {
|
|
localStorage.setItem(name, open);
|
|
}
|
|
});
|
|
}
|
|
})
|
|
.wrap('<div class="webform-details-toggle-state-wrapper"></div>')
|
|
.parent()
|
|
);
|
|
|
|
setDetailsToggleLabel($form);
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Determine if a webform's details are all opened.
|
|
*
|
|
* @param $form
|
|
* A webform.
|
|
*
|
|
* @returns {boolean}
|
|
* TRUE if a webform's details are all opened.
|
|
*/
|
|
function isFormDetailsOpen($form) {
|
|
return ($form.find('details[open]').length == $form.find('details').length)
|
|
}
|
|
|
|
/**
|
|
* Set a webform's details toggle state widget label.
|
|
*
|
|
* @param $form
|
|
* A webform.
|
|
*/
|
|
function setDetailsToggleLabel($form) {
|
|
var label = (isFormDetailsOpen($form)) ? Drupal.t('Collapse all') : Drupal.t('Expand all');
|
|
$form.find('.webform-details-toggle-state').html(label);
|
|
}
|
|
|
|
})(jQuery, Drupal);
|