var self = this;
$(this.scope)
+ .off('.dropdown')
.on('click.fndtn.dropdown', '[data-dropdown]', function (e) {
- var settings = $.extend({}, self.settings, self.data_options($(this)));
+ var settings = $(this).data('dropdown-init') || self.settings;
e.preventDefault();
- if (!settings.is_hover) self.toggle($(this));
+ if (!settings.is_hover || Modernizr.touch) self.toggle($(this));
+ })
+ .on('mouseenter.fndtn.dropdown', '[data-dropdown], [data-dropdown-content]', function (e) {
+ var $this = $(this);
+ clearTimeout(self.timeout);
+
+ if ($this.data('dropdown')) {
+ var dropdown = $('#' + $this.data('dropdown')),
+ target = $this;
+ } else {
+ var dropdown = $this;
+ target = $("[data-dropdown='" + dropdown.attr('id') + "']");
+ }
+
+ var settings = target.data('dropdown-init') || self.settings;
+ if (settings.is_hover) self.open.apply(self, [dropdown, target]);
})
- .on('mouseenter', '[data-dropdown]', function (e) {
- var settings = $.extend({}, self.settings, self.data_options($(this)));
- if (settings.is_hover) self.toggle($(this));
+ .on('mouseleave.fndtn.dropdown', '[data-dropdown], [data-dropdown-content]', function (e) {
+ var $this = $(this);
+ self.timeout = setTimeout(function () {
+ if ($this.data('dropdown')) {
+ var settings = $this.data('dropdown-init') || self.settings;
+ if (settings.is_hover) self.close.call(self, $('#' + $this.data('dropdown')));
+ } else {
+ var target = $('[data-dropdown="' + $(this).attr('id') + '"]'),
+ settings = target.data('dropdown-init') || self.settings;
+ if (settings.is_hover) self.close.call(self, $this);
+ }
+ }.bind(this), 150);
})
- .on('mouseleave', '[data-dropdown-content]', function (e) {
- var target = $('[data-dropdown="' + $(this).attr('id') + '"]'),
- settings = $.extend({}, self.settings, self.data_options(target));
- if (settings.is_hover) self.close.call(self, $(this));
+ .on('click.fndtn.dropdown', function (e) {
+ var parent = $(e.target).closest('[data-dropdown-content]');
+
+ if ($(e.target).data('dropdown') || $(e.target).parent().data('dropdown')) {
+ return;
+ }
+ if (!($(e.target).data('revealId')) &&
+ (parent.length > 0 && ($(e.target).is('[data-dropdown-content]') ||
+ $.contains(parent.first()[0], e.target)))) {
+ e.stopPropagation();
+ return;
+ }
+
+ self.close.call(self, $('[data-dropdown-content]'));
})
- .on('opened.fndtn.dropdown', '[data-dropdown-content]', this.settings.opened)
- .on('closed.fndtn.dropdown', '[data-dropdown-content]', this.settings.closed);
+ .on('opened.fndtn.dropdown', '[data-dropdown-content]', function () {
+ self.settings.opened.call(this);
+ })
+ .on('closed.fndtn.dropdown', '[data-dropdown-content]', function () {
+ self.settings.closed.call(this);
+ });
- $(document).on('click.fndtn.dropdown', function (e) {
- var parent = $(e.target).closest('[data-dropdown-content]');
-
- if ($(e.target).data('dropdown') || $(e.target).parent().data('dropdown')) {
- return;
- }
- if (!($(e.target).data('revealId')) &&
- (parent.length > 0 && ($(e.target).is('[data-dropdown-content]') ||
- $.contains(parent.first()[0], e.target)))) {
- e.stopPropagation();
- return;
- }
-
- self.close.call(self, $('[data-dropdown-content]'));
- });
-
- $(window).on('resize.fndtn.dropdown', self.throttle(function () {
- self.resize.call(self);
- }, 50)).trigger('resize');
-
- this.settings.init = true;
+ $(window)
+ .off('.dropdown')
+ .on('resize.fndtn.dropdown', self.throttle(function () {
+ self.resize.call(self);
+ }, 50)).trigger('resize');
},
close: function (dropdown) {