Projet

Général

Profil

Révision 05237dd8

Ajouté par Assos Assos il y a presque 7 ans

Weekly update of contrib modules

Voir les différences:

drupal7/sites/all/themes/bootstrap/js/bootstrap.js
76 76
   */
77 77
  Drupal.behaviors.bootstrapPopovers = {
78 78
    attach: function (context, settings) {
79
      if (settings.bootstrap && settings.bootstrap.popoverEnabled) {
80
        var $currentPopover = $();
81
        if (settings.bootstrap.popoverOptions.triggerAutoclose) {
82
          $(document).on('click', function (e) {
83
            if ($currentPopover.length && !$(e.target).is('[data-toggle=popover]') && $(e.target).parents('.popover.in').length === 0) {
79
      if (!settings.bootstrap || !settings.bootstrap.popoverEnabled) {
80
        return;
81
      }
82

  
83
      // Popover autoclose.
84
      if (settings.bootstrap.popoverOptions.triggerAutoclose) {
85
        var $currentPopover = null;
86
        $(document)
87
          .on('show.bs.popover', '[data-toggle=popover]', function () {
88
            var $trigger = $(this);
89
            var popover = $trigger.data('bs.popover');
90

  
91
            // Only keep track of clicked triggers that we're manually handling.
92
            if (popover.options.originalTrigger === 'click') {
93
              if ($currentPopover && !$currentPopover.is($trigger)) {
94
                $currentPopover.popover('hide');
95
              }
96
              $currentPopover = $trigger;
97
            }
98
          })
99
          .on('click', function (e) {
100
            var $target = $(e.target);
101
            var popover = $target.is('[data-toggle=popover]') && $target.data('bs.popover');
102
            if ($currentPopover && !$target.is('[data-toggle=popover]') && !$target.closest('.popover.in')[0]) {
84 103
              $currentPopover.popover('hide');
85
              $currentPopover = $();
104
              $currentPopover = null;
86 105
            }
87
          });
106
          })
107
        ;
108
      }
109

  
110
      var elements = $(context).find('[data-toggle=popover]').toArray();
111
      for (var i = 0; i < elements.length; i++) {
112
        var $element = $(elements[i]);
113
        var options = $.extend({}, $.fn.popover.Constructor.DEFAULTS, settings.bootstrap.popoverOptions, $element.data());
114

  
115
        // Store the original trigger.
116
        options.originalTrigger = options.trigger;
117

  
118
        // If the trigger is "click", then we'll handle it manually here.
119
        if (options.trigger === 'click') {
120
          options.trigger = 'manual';
88 121
        }
89
        var elements = $(context).find('[data-toggle=popover]').toArray();
90
        for (var i = 0; i < elements.length; i++) {
91
          var $element = $(elements[i]);
92
          var options = $.extend({}, settings.bootstrap.popoverOptions, $element.data());
93
          if (!options.content) {
94
            options.content = function () {
95
              var target = $(this).data('target');
96
              return target && $(target) && $(target).length && $(target).clone().removeClass('element-invisible').wrap('<div/>').parent()[$(this).data('bs.popover').options.html ? 'html' : 'text']() || '';
97
            }
98
          }
99
          $element.popover(options).on('click', function (e) {
100
            e.preventDefault();
101
          });
102
          if (settings.bootstrap.popoverOptions.triggerAutoclose) {
103
            $element.on('show.bs.popover', function () {
104
              if ($currentPopover.length) {
105
                $currentPopover.popover('hide');
106
              }
107
              $currentPopover = $(this);
108
            });
109
          }
122

  
123
        // Retrieve content from a target element.
124
        var $target = $(options.target || $element.is('a[href^="#"]') && $element.attr('href')).clone();
125
        if (!options.content && $target[0]) {
126
          $target.removeClass('element-invisible hidden').removeAttr('aria-hidden');
127
          options.content = $target.wrap('<div/>').parent()[options.html ? 'html' : 'text']() || '';
128
        }
129

  
130
        // Initialize the popover.
131
        $element.popover(options);
132

  
133
        // Handle clicks manually.
134
        if (options.originalTrigger === 'click') {
135
          // To ensure the element is bound multiple times, remove any
136
          // previously set event handler before adding another one.
137
          $element
138
            .off('click.drupal.bootstrap.popover')
139
            .on('click.drupal.bootstrap.popover', function (e) {
140
              $(this).popover('toggle');
141
              e.preventDefault();
142
              e.stopPropagation();
143
            })
144
          ;
110 145
        }
111 146
      }
147
    },
148
    detach: function (context) {
149
      // Destroy all popovers.
150
      $(context).find('[data-toggle="popover"]')
151
        .off('click.drupal.bootstrap.popover')
152
        .popover('destroy')
153
      ;
112 154
    }
113 155
  };
114 156

  

Formats disponibles : Unified diff