mirror of
https://github.com/arsenetar/pelican-red.git
synced 2024-10-30 03:45:57 +00:00
Andrew Senetar
af956c82be
Adds the vendor javascript for foundation 4, zepto.js, jquery, and modernizer. foundation scripts to be compressed after finalized.
160 lines
4.4 KiB
JavaScript
160 lines
4.4 KiB
JavaScript
/*jslint unparam: true, browser: true, indent: 2 */
|
|
|
|
;(function ($, window, document, undefined) {
|
|
'use strict';
|
|
|
|
Foundation.libs.dropdown = {
|
|
name : 'dropdown',
|
|
|
|
version : '4.1.3',
|
|
|
|
settings : {
|
|
activeClass: 'open',
|
|
opened: function(){},
|
|
closed: function(){}
|
|
},
|
|
|
|
init : function (scope, method, options) {
|
|
this.scope = scope || this.scope;
|
|
Foundation.inherit(this, 'throttle scrollLeft');
|
|
|
|
if (typeof method === 'object') {
|
|
$.extend(true, this.settings, method);
|
|
}
|
|
|
|
if (typeof method != 'string') {
|
|
|
|
if (!this.settings.init) {
|
|
this.events();
|
|
}
|
|
|
|
return this.settings.init;
|
|
} else {
|
|
return this[method].call(this, options);
|
|
}
|
|
},
|
|
|
|
events : function () {
|
|
var self = this;
|
|
|
|
$(this.scope)
|
|
.on('click.fndtn.dropdown', '[data-dropdown]', function (e) {
|
|
e.preventDefault();
|
|
self.toggle($(this));
|
|
})
|
|
.on('opened.fndtn.dropdown', '[data-dropdown-content]', this.settings.opened)
|
|
.on('closed.fndtn.dropdown', '[data-dropdown-content]', this.settings.closed);
|
|
|
|
$('body').on('click.fndtn.dropdown', function (e) {
|
|
var parent = $(e.target).closest('[data-dropdown-content]');
|
|
|
|
if ($(e.target).data('dropdown')) {
|
|
return;
|
|
}
|
|
if (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;
|
|
},
|
|
|
|
close: function (dropdown) {
|
|
var self = this;
|
|
dropdown.each(function () {
|
|
if ($(this).hasClass(self.settings.activeClass)) {
|
|
$(this)
|
|
.css(Foundation.rtl ? 'right':'left', '-99999px')
|
|
.removeClass(self.settings.activeClass);
|
|
$(this).trigger('closed');
|
|
}
|
|
});
|
|
},
|
|
|
|
open: function (dropdown, target) {
|
|
this
|
|
.css(dropdown
|
|
.addClass(this.settings.activeClass), target);
|
|
dropdown.trigger('opened');
|
|
},
|
|
|
|
toggle : function (target) {
|
|
var dropdown = $('#' + target.data('dropdown'));
|
|
|
|
this.close.call(this, $('[data-dropdown-content]').not(dropdown));
|
|
|
|
if (dropdown.hasClass(this.settings.activeClass)) {
|
|
this.close.call(this, dropdown);
|
|
} else {
|
|
this.open.call(this, dropdown, target);
|
|
}
|
|
},
|
|
|
|
resize : function () {
|
|
var dropdown = $('[data-dropdown-content].open'),
|
|
target = $("[data-dropdown='" + dropdown.attr('id') + "']");
|
|
|
|
if (dropdown.length && target.length) {
|
|
this.css(dropdown, target);
|
|
}
|
|
},
|
|
|
|
css : function (dropdown, target) {
|
|
// temporary workaround until 4.2
|
|
if (/body/i.test(dropdown.offsetParent()[0].nodeName)) {
|
|
var position = target.offset();
|
|
position.top -= dropdown.offsetParent().offset().top;
|
|
position.left -= dropdown.offsetParent().offset().left;
|
|
} else {
|
|
var position = target.position();
|
|
}
|
|
|
|
if (this.small()) {
|
|
dropdown.css({
|
|
position : 'absolute',
|
|
width: '95%',
|
|
left: '2.5%',
|
|
'max-width': 'none',
|
|
top: position.top + this.outerHeight(target)
|
|
});
|
|
} else {
|
|
if (!Foundation.rtl && $(window).width() > this.outerWidth(dropdown) + target.offset().left) {
|
|
var left = position.left;
|
|
} else {
|
|
if (!dropdown.hasClass('right')) {
|
|
dropdown.addClass('right');
|
|
}
|
|
var left = position.left - (this.outerWidth(dropdown) - this.outerWidth(target));
|
|
}
|
|
|
|
dropdown.attr('style', '').css({
|
|
position : 'absolute',
|
|
top: position.top + this.outerHeight(target),
|
|
left: left
|
|
});
|
|
}
|
|
|
|
return dropdown;
|
|
},
|
|
|
|
small : function () {
|
|
return $(window).width() < 768 || $('html').hasClass('lt-ie9');
|
|
},
|
|
|
|
off: function () {
|
|
$(this.scope).off('.fndtn.dropdown');
|
|
$('html, body').off('.fndtn.dropdown');
|
|
$(window).off('.fndtn.dropdown');
|
|
$('[data-dropdown-content]').off('.fndtn.dropdown');
|
|
this.settings.init = false;
|
|
}
|
|
};
|
|
}(Foundation.zj, this, this.document));
|