mirror of
				https://github.com/capistrano/capistrano
				synced 2023-03-27 23:21:18 -04:00 
			
		
		
		
	* Add social icons, optimize images * Fix manifest asset urls * Fix ms tile image url * Add favicon tag
		
			
				
	
	
		
			178 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*jslint unparam: true, browser: true, indent: 2 */
 | 
						|
 | 
						|
;(function ($, window, document, undefined) {
 | 
						|
  'use strict';
 | 
						|
 | 
						|
  Foundation.libs.dropdown = {
 | 
						|
    name : 'dropdown',
 | 
						|
 | 
						|
    version : '4.2.0',
 | 
						|
 | 
						|
    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);
 | 
						|
 | 
						|
      $('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.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();
 | 
						|
      // temporary workaround until 4.2
 | 
						|
      if (offset_parent.length > 0 && /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;
 | 
						|
          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));
 |