Révision 05237dd8
Ajouté par Assos Assos il y a presque 7 ans
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
Weekly update of contrib modules