This repository has been archived on 2025-01-19. You can view files and clone it, but cannot push or open issues or pull requests.
drupalcampbristol/web/modules/contrib/webform/js/webform.tooltip.js
2018-11-23 12:29:20 +00:00

101 lines
3.1 KiB
JavaScript

/**
* @file
* JavaScript behaviors for jQuery UI tooltip integration.
*
* Please Note:
* jQuery UI's tooltip implementation is not very responsive or adaptive.
*
* @see https://www.drupal.org/node/2207383
*/
(function ($, Drupal) {
'use strict';
var tooltipDefaultOptions = {
// @see https://stackoverflow.com/questions/18231315/jquery-ui-tooltip-html-with-links
show: {delay: 100},
close: function (event, ui) {
ui.tooltip.hover(
function () {
$(this).stop(true).fadeTo(400, 1);
},
function () {
$(this).fadeOut('400', function () {
$(this).remove();
});
});
}
};
// @see http://api.jqueryui.com/tooltip/
Drupal.webform = Drupal.webform || {};
Drupal.webform.tooltipElement = Drupal.webform.tooltipElement || {};
Drupal.webform.tooltipElement.options = Drupal.webform.tooltipElement.options || tooltipDefaultOptions;
Drupal.webform.tooltipLink = Drupal.webform.tooltipLink || {};
Drupal.webform.tooltipLink.options = Drupal.webform.tooltipLink.options || tooltipDefaultOptions;
/**
* Initialize jQuery UI tooltip element support.
*
* @type {Drupal~behavior}
*/
Drupal.behaviors.webformTooltipElement = {
attach: function (context) {
$(context).find('.js-webform-tooltip-element').once('webform-tooltip-element').each(function () {
var $element = $(this);
// Checkboxes, radios, buttons, toggles, etc… use fieldsets.
// @see \Drupal\webform\Plugin\WebformElement\OptionsBase::prepare
var $description;
if ($element.is('fieldset')) {
$description = $element.find('> .fieldset-wrapper > .description > .webform-element-description.visually-hidden');
}
else {
$description = $element.find('> .description > .webform-element-description.visually-hidden');
}
var has_visible_input = $element.find(':input:not([type=hidden])').length;
var has_checkboxes_or_radios = $element.find(':checkbox, :radio').length;
var is_composite = $element.hasClass('form-composite');
var is_custom = $element.is('.js-form-type-webform-signature, .js-form-type-webform-image-select, .js-form-type-webform-mapping, .js-form-type-webform-rating, .js-form-type-datelist, .js-form-type-datetime');
var items;
if (has_visible_input && !has_checkboxes_or_radios && !is_composite && !is_custom) {
items = ':input';
}
else {
items = $element;
}
var options = $.extend({
items: items,
content: $description.html()
}, Drupal.webform.tooltipElement.options);
$element.tooltip(options);
});
}
};
/**
* Initialize jQuery UI tooltip link support.
*
* @type {Drupal~behavior}
*/
Drupal.behaviors.webformTooltipLink = {
attach: function (context) {
$(context).find('.js-webform-tooltip-link').once('webform-tooltip-link').each(function () {
var $link = $(this);
var options = $.extend({}, Drupal.webform.tooltipLink.options);
$link.tooltip(options);
});
}
};
})(jQuery, Drupal);