Skip to content

Commit 2989aba

Browse files
authored
Merge pull request #4430 from tenkoma/fix-does-not-work-dropdown-menu-some-browser
Fix dropdown menu doesn't work on some browser
2 parents 1ba8035 + 910768b commit 2989aba

File tree

2 files changed

+4
-131
lines changed

2 files changed

+4
-131
lines changed

themes/cakephp/static/css/style.css

+4
Original file line numberDiff line numberDiff line change
@@ -1880,6 +1880,10 @@ header {
18801880
transition: all .0s ease-out;
18811881
}
18821882

1883+
.dropdown:hover > .dropdown-menu {
1884+
display: block;
1885+
}
1886+
18831887
.navbar-nav > li > .dropdown-menu {
18841888
margin-top: 0;
18851889
border-top-left-radius: 2px;

themes/cakephp/static/vendor.js

-131
Original file line numberDiff line numberDiff line change
@@ -1,134 +1,3 @@
1-
/**
2-
* @preserve
3-
* Project: Bootstrap Hover Dropdown
4-
* Author: Cameron Spear
5-
* Version: v2.2.1
6-
* Contributors: Mattia Larentis
7-
* Dependencies: Bootstrap's Dropdown plugin, jQuery
8-
* Description: A simple plugin to enable Bootstrap dropdowns to active on hover and provide a nice user experience.
9-
* License: MIT
10-
* Homepage: http://cameronspear.com/blog/bootstrap-dropdown-on-hover-plugin/
11-
*/
12-
;(function ($, window, undefined) {
13-
// outside the scope of the jQuery plugin to
14-
// keep track of all dropdowns
15-
var $allDropdowns = $();
16-
17-
// if instantlyCloseOthers is true, then it will instantly
18-
// shut other nav items when a new one is hovered over
19-
$.fn.dropdownHover = function (options) {
20-
// don't do anything if touch is supported
21-
// (plugin causes some issues on mobile)
22-
if('ontouchstart' in document) return this; // don't want to affect chaining
23-
24-
// the element we really care about
25-
// is the dropdown-toggle's parent
26-
$allDropdowns = $allDropdowns.add(this.parent());
27-
28-
return this.each(function () {
29-
var $this = $(this),
30-
$parent = $this.parent(),
31-
defaults = {
32-
delay: 500,
33-
hoverDelay: 0,
34-
instantlyCloseOthers: true
35-
},
36-
data = {
37-
delay: $(this).data('delay'),
38-
hoverDelay: $(this).data('hover-delay'),
39-
instantlyCloseOthers: $(this).data('close-others')
40-
},
41-
showEvent = 'show.bs.dropdown',
42-
hideEvent = 'hide.bs.dropdown',
43-
// shownEvent = 'shown.bs.dropdown',
44-
// hiddenEvent = 'hidden.bs.dropdown',
45-
settings = $.extend(true, {}, defaults, options, data),
46-
timeout, timeoutHover;
47-
48-
$parent.hover(function (event) {
49-
// so a neighbor can't open the dropdown
50-
if(!$parent.hasClass('open') && !$this.is(event.target)) {
51-
// stop this event, stop executing any code
52-
// in this callback but continue to propagate
53-
return true;
54-
}
55-
56-
openDropdown(event);
57-
}, function () {
58-
// clear timer for hover event
59-
window.clearTimeout(timeoutHover)
60-
timeout = window.setTimeout(function () {
61-
$this.attr('aria-expanded', 'false');
62-
$parent.removeClass('open');
63-
$this.trigger(hideEvent);
64-
}, settings.delay);
65-
});
66-
67-
// this helps with button groups!
68-
$this.hover(function (event) {
69-
// this helps prevent a double event from firing.
70-
// see https://github.com/CWSpear/bootstrap-hover-dropdown/issues/55
71-
if(!$parent.hasClass('open') && !$parent.is(event.target)) {
72-
// stop this event, stop executing any code
73-
// in this callback but continue to propagate
74-
return true;
75-
}
76-
77-
openDropdown(event);
78-
});
79-
80-
// handle submenus
81-
$parent.find('.dropdown-submenu').each(function (){
82-
var $this = $(this);
83-
var subTimeout;
84-
$this.hover(function () {
85-
window.clearTimeout(subTimeout);
86-
$this.children('.dropdown-menu').show();
87-
// always close submenu siblings instantly
88-
$this.siblings().children('.dropdown-menu').hide();
89-
}, function () {
90-
var $submenu = $this.children('.dropdown-menu');
91-
subTimeout = window.setTimeout(function () {
92-
$submenu.hide();
93-
}, settings.delay);
94-
});
95-
});
96-
97-
function openDropdown(event) {
98-
if($this.parents(".navbar").find(".navbar-toggle").is(":visible")) {
99-
// If we're inside a navbar, don't do anything when the
100-
// navbar is collapsed, as it makes the navbar pretty unusable.
101-
return;
102-
}
103-
104-
// clear dropdown timeout here so it doesnt close before it should
105-
window.clearTimeout(timeout);
106-
// restart hover timer
107-
window.clearTimeout(timeoutHover);
108-
109-
// delay for hover event.
110-
timeoutHover = window.setTimeout(function () {
111-
$allDropdowns.find(':focus').blur();
112-
113-
if(settings.instantlyCloseOthers === true)
114-
$allDropdowns.removeClass('open');
115-
116-
// clear timer for hover event
117-
window.clearTimeout(timeoutHover);
118-
$this.attr('aria-expanded', 'true');
119-
$parent.addClass('open');
120-
$this.trigger(showEvent);
121-
}, settings.hoverDelay);
122-
}
123-
});
124-
};
125-
126-
$(document).ready(function () {
127-
// apply dropdownHover to all elements with the data-hover="dropdown" attribute
128-
$('[data-hover="dropdown"]').dropdownHover();
129-
});
130-
})(jQuery, window);
131-
1321
/**
1332
* Sticky Headers
1343
*/

0 commit comments

Comments
 (0)