3 * Provides an event handler for hidden elements in dropdown menus.
6 (function ($, Drupal, Bootstrap) {
10 * The list of supported events to proxy.
16 'click', 'dblclick', 'mousedown', 'mouseenter', 'mouseleave', 'mouseup', 'mouseover', 'mousemove', 'mouseout',
19 'keypress', 'keydown', 'keyup'
23 * Bootstrap dropdown behaviors.
25 * Proxy any dropdown element events that should actually be fired on the
26 * original target (e.g. button, submits, etc.). This allows any registered
27 * event callbacks to be fired as they were intended (despite the fact that
28 * the markup has been changed to work with Bootstrap).
30 * @see \Drupal\bootstrap\Plugin\Preprocess\BootstrapDropdown::preprocessLinks
32 * @type {Drupal~behavior#bootstrapDropdown}
34 Drupal.behaviors.bootstrapDropdown = {
35 attach: function (context) {
36 var elements = context.querySelectorAll('.dropdown [data-dropdown-target]');
37 for (var k in elements) {
38 if (!elements.hasOwnProperty(k)) {
41 var element = elements[k];
42 for (var i = 0, l = events.length; i < l; i++) {
43 var event = events[i];
44 element.removeEventListener(event, this.proxyEvent);
45 element.addEventListener(event, this.proxyEvent);
51 * Proxy event handler for bootstrap dropdowns.
56 proxyEvent: function (e) {
58 if (e.type.match(/^key/) && (e.which === 9 || e.keyCode === 9)) {
61 var target = e.currentTarget.dataset && e.currentTarget.dataset.dropdownTarget || e.currentTarget.getAttribute('data-dropdown-target');
65 var element = target && target !== '#' && document.querySelectorAll(target)[0];
67 Bootstrap.simulate(element, e.type, e);
69 else if (Bootstrap.settings.dev && window.console && !e.type.match(/^mouse/)) {
70 window.console.debug('[Drupal Bootstrap] Could not find a the target:', target);
76 })(jQuery, Drupal, Drupal.bootstrap);