summaryrefslogtreecommitdiff
path: root/website/static/js/foundation/foundation.dropdown.js
diff options
context:
space:
mode:
Diffstat (limited to 'website/static/js/foundation/foundation.dropdown.js')
-rw-r--r--website/static/js/foundation/foundation.dropdown.js183
1 files changed, 183 insertions, 0 deletions
diff --git a/website/static/js/foundation/foundation.dropdown.js b/website/static/js/foundation/foundation.dropdown.js
new file mode 100644
index 0000000..62f1164
--- /dev/null
+++ b/website/static/js/foundation/foundation.dropdown.js
@@ -0,0 +1,183 @@
+/*jslint unparam: true, browser: true, indent: 2 */
+
+;(function ($, window, document, undefined) {
+ 'use strict';
+
+ Foundation.libs.dropdown = {
+ name : 'dropdown',
+
+ version : '4.3.2',
+
+ settings : {
+ activeClass: 'open',
+ is_hover: false,
+ opened: function(){},
+ closed: function(){}
+ },
+
+ init : function (scope, method, options) {
+ this.scope = scope || this.scope;
+ Foundation.inherit(this, 'throttle scrollLeft data_options');
+
+ 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) {
+ var settings = $.extend({}, self.settings, self.data_options($(this)));
+ e.preventDefault();
+
+ if (!settings.is_hover) self.toggle($(this));
+ })
+ .on('mouseenter', '[data-dropdown]', function (e) {
+ var settings = $.extend({}, self.settings, self.data_options($(this)));
+ if (settings.is_hover) self.toggle($(this));
+ })
+ .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('opened.fndtn.dropdown', '[data-dropdown-content]', this.settings.opened)
+ .on('closed.fndtn.dropdown', '[data-dropdown-content]', this.settings.closed);
+
+ $(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;
+ },
+
+ 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'));
+ if (dropdown.length === 0) {
+ // No dropdown found, not continuing
+ return;
+ }
+
+ this.close.call(this, $('[data-dropdown-content]').not(dropdown));
+
+ if (dropdown.hasClass(this.settings.activeClass)) {
+ this.close.call(this, dropdown);
+ } else {
+ this.close.call(this, $('[data-dropdown-content]'))
+ 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) {
+ var offset_parent = dropdown.offsetParent();
+ // if (offset_parent.length > 0 && /body/i.test(dropdown.offsetParent()[0].nodeName)) {
+ var position = target.offset();
+ position.top -= offset_parent.offset().top;
+ position.left -= offset_parent.offset().left;
+ // } else {
+ // var position = target.position();
+ // }
+
+ if (this.small()) {
+ dropdown.css({
+ position : 'absolute',
+ width: '95%',
+ 'max-width': 'none',
+ top: position.top + this.outerHeight(target)
+ });
+ dropdown.css(Foundation.rtl ? 'right':'left', '2.5%');
+ } else {
+ if (!Foundation.rtl && $(window).width() > this.outerWidth(dropdown) + target.offset().left && !this.data_options(target).align_right) {
+ var left = position.left;
+ if (dropdown.hasClass('right')) {
+ dropdown.removeClass('right');
+ }
+ } 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;
+ },
+
+ reflow : function () {}
+ };
+}(Foundation.zj, this, this.document));