Move all files to 2017/
This commit is contained in:
parent
ac7370f67f
commit
2875863330
15717 changed files with 0 additions and 0 deletions
|
@ -0,0 +1,114 @@
|
|||
/**
|
||||
* @file
|
||||
* JavaScript behaviors for details element.
|
||||
*/
|
||||
|
||||
(function ($, Drupal) {
|
||||
|
||||
'use strict';
|
||||
|
||||
Drupal.webform = Drupal.webform || {};
|
||||
Drupal.webform.detailsToggle = Drupal.webform.detailsToggle || {};
|
||||
Drupal.webform.detailsToggle.options = Drupal.webform.detailsToggle.options || {};
|
||||
|
||||
/**
|
||||
* 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 $tabs = $form.find('.webform-tabs');
|
||||
|
||||
// Get only the main details elements and ignore all nested details.
|
||||
var selector = ($tabs.length) ? '.webform-tab' : '.js-webform-details-toggle';
|
||||
var $details = $form.find('details').filter(function () {
|
||||
// @todo Figure out how to optimize the below code.
|
||||
var $parents = $(this).parentsUntil(selector);
|
||||
return ($parents.find('details').length === 0);
|
||||
});
|
||||
|
||||
// Toggle is only useful when there are two or more details elements.
|
||||
if ($details.length < 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
var options = $.extend({
|
||||
button: '<button type="button" class="webform-details-toggle-state"></button>'
|
||||
}, Drupal.webform.detailsToggle.options);
|
||||
|
||||
// Create toggle buttons.
|
||||
var $toggle = $(options.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();
|
||||
|
||||
if ($tabs.length) {
|
||||
// Add toggle state before the tabs.
|
||||
$tabs.find('.item-list:first-child').eq(0).before($toggle);
|
||||
}
|
||||
else {
|
||||
// Add toggle state link to first details element.
|
||||
$details.eq(0).before($toggle);
|
||||
}
|
||||
|
||||
setDetailsToggleLabel($form);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Determine if a webform's details are all opened.
|
||||
*
|
||||
* @param {jQuery} $form
|
||||
* A webform.
|
||||
*
|
||||
* @return {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 {jQuery} $form
|
||||
* A webform.
|
||||
*/
|
||||
function setDetailsToggleLabel($form) {
|
||||
var isOpen = isFormDetailsOpen($form);
|
||||
|
||||
var label = (isOpen) ? Drupal.t('Collapse all') : Drupal.t('Expand all');
|
||||
$form.find('.webform-details-toggle-state').html(label);
|
||||
|
||||
var text = (isOpen) ? Drupal.t('All details have been expanded.') : Drupal.t('All details have been collapsed.');
|
||||
Drupal.announce(text);
|
||||
}
|
||||
|
||||
})(jQuery, Drupal);
|
Reference in a new issue