lintel-contrib-dropdowns
Version:
Dropdowns for lintel.
2 lines • 2.58 kB
JavaScript
!function(){"use strict";function a(){$(".btn-dropdown-toggle").each(function(){var a=$(this).data("lt.dropdown");a&&a.isVisible()&&a.hide()})}function b(a){return this.each(function(){var d=$(this),e=$.extend({},b.defaults,d.data(),"object"==typeof a&&a),f=d.data("lt.dropdown");f||(f=new c(this,e),d.data("lt.dropdown",f)),"string"==typeof a&&f[a]()})}var c=function(a,b){this.$btn=$(a),this.$menu=this.$btn.siblings(".dropdown"),this.$container=this.$btn.closest(".btn-group"),this.options=b||{}};c.prototype.isVisible=function(){return this.$container.hasClass("open")},c.prototype.show=function(){var b=$.Event("show.lt.dropdown",{relatedTarget:this.$menu[0]});if(this.$btn.trigger(b),!b.isDefaultPrevented()){a(),this.$container.addClass("open"),this.$btn.attr("aria-expanded",!0),this.optionsEscape(),this.dropdownKeydown(),this.dropdownFocus(),this.options.onShow.call(this,this.$menu,this.$btn);var c=$.Event("shown.lt.dropdown",{relatedTarget:this.$menu[0]});this.$btn.trigger(c)}},c.prototype.hide=function(){var a=$.Event("hide.lt.dropdown",{relatedTarget:this.$menu[0]});if(this.$btn.trigger(a),!a.isDefaultPrevented()){this.$container.removeClass("open"),this.$btn.attr("aria-expanded",!1),this.optionsEscape(),this.dropdownKeydown(),this.restoreFocus(),this.options.onHide.call(this,this.$menu,this.$btn);var b=$.Event("hidden.lt.dropdown",{relatedTarget:this.$menu[0]});this.$btn.trigger(b)}},c.prototype.optionsEscape=function(){this.isVisible()&&this.options.esc?this.$menu.on("keydown.close.lt.dropdown",$.proxy(function(a){27===a.which&&this.hide()},this)):this.$menu.off("keydown.close.lt.dropdown")},c.prototype.dropdownKeydown=function(){this.isVisible()?this.$menu.on("keydown.lt.dropdown",$.proxy(function(a){if(/(38|40|27|32)/.test(a.which)&&!/input|textarea/i.test(a.target.tagName)){a.preventDefault(),a.stopPropagation();var b=this.$menu.find("li:not(.dropdown-divider)"),c=b.index($(a.target).closest("li")),d=b.length-1;(38===a.which||74===a.which)&&c>0?b.eq(c-1).find("a").focus():(40===a.which||75===a.which)&&d>c&&b.eq(c+1).find("a").focus()}},this)):this.$menu.off("keydown.lt.dropdown")},c.prototype.dropdownFocus=function(){this.$menu.find("li:visible:first a").focus()},c.prototype.restoreFocus=function(){this.$btn.focus()},c.prototype.toggle=function(){this.isVisible()?this.hide():this.show()},b.defaults={onShow:function(){},onHide:function(){},esc:!0},$.fn.dropdown=b,$(document).on("click.lt.dropdown",'[data-toggle="dropdown"]',function(a){a.preventDefault(),b.call($(this),"toggle")})}(jQuery);
//# sourceMappingURL=dropdowns.min.js.map