html-element.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. (function ($) {
  2. 'use strict';
  3. Drupal.FieldGroup = Drupal.FieldGroup || {};
  4. Drupal.FieldGroup.Effects = Drupal.FieldGroup.Effects || {};
  5. /**
  6. * Implements Drupal.FieldGroup.processHook().
  7. */
  8. Drupal.FieldGroup.Effects.processHtml_element = {
  9. execute: function (context, settings, group_info) {
  10. $('.field-group-html-element', context).once('fieldgroup-effects').each(function () {
  11. var $wrapper = $(this);
  12. if ($wrapper.hasClass('fieldgroup-collapsible')) {
  13. Drupal.FieldGroup.Effects.processHtml_element.renderCollapsible($wrapper);
  14. }
  15. else {
  16. // Add required field markers if needed
  17. if (group_info.settings.show_label && $wrapper.is('.required-fields') && ($wrapper.find('[required]').length > 0 || $wrapper.find('.form-required').length > 0)) {
  18. $wrapper.find(group_info.settings.label_element + ':first').addClass('form-required');
  19. }
  20. }
  21. });
  22. },
  23. renderCollapsible: function($wrapper) {
  24. // Turn the legend into a clickable link, but retain span.field-group-format-toggler
  25. // for CSS positioning.
  26. var $toggler = $('.field-group-toggler:first', $wrapper);
  27. var $link = $('<a class="field-group-title" href="#"></a>');
  28. $link.prepend($toggler.contents());
  29. // Add required field markers if needed
  30. if ($wrapper.is('.required-fields') && ($wrapper.find('[required]').length > 0 || $wrapper.find('.form-required').length > 0)) {
  31. $link.addClass('form-required');
  32. }
  33. $link.appendTo($toggler);
  34. // .wrapInner() does not retain bound events.
  35. $link.click(function () {
  36. var wrapper = $wrapper.get(0);
  37. // Don't animate multiple times.
  38. if (!wrapper.animating) {
  39. wrapper.animating = true;
  40. var speed = $wrapper.hasClass('speed-fast') ? 300 : 1000;
  41. if ($wrapper.hasClass('effect-none') && $wrapper.hasClass('speed-none')) {
  42. $('> .field-group-wrapper', wrapper).toggle();
  43. }
  44. else if ($wrapper.hasClass('effect-blind')) {
  45. $('> .field-group-wrapper', wrapper).toggle('blind', {}, speed);
  46. }
  47. else {
  48. $('> .field-group-wrapper', wrapper).toggle(speed);
  49. }
  50. wrapper.animating = false;
  51. }
  52. $wrapper.toggleClass('collapsed');
  53. return false;
  54. });
  55. }
  56. };
  57. })(jQuery);