bmarshall511/slider-menu.jquery.js

View on GitHub
dist/js/slider-menu.jquery.min.js

Summary

Maintainability
A
0 mins
Test Coverage
!function(e){"use strict";e.fn.sliderMenu=function(n){var a=e.extend({back:"<span>Back</span>"},n),t={},i={};return i.initMenu=function(n){var a=this.buildMenu(n.clone());n.replaceWith(a),e(a).on("click","a",function(n){t.$container=e(this).closest(".slider-menu"),t.$parentItem=e(this).parent("li"),t.$parentMenu=t.$parentItem.parent("ul"),t.$childMenu=e("> ul",t.$parentItem),i.clickHandler(n,e(this))})},i.buildMenu=function(n){var t=e("<div>").addClass("slider-menu"),i=e("<nav>").attr({role:"navigation","aria-label":"Menu","data-left":0});return e("ul",n).prepend('<li><a href="#" class="slider-menu-back">'+a.back+"</a>").parent().addClass("slider-menu-children"),i.html(n),t.html(i),t},i.clickHandler=function(e,n){(t.$childMenu.length||n.hasClass("slider-menu-back"))&&(e.preventDefault(),t.$parentItem.data("vertical")?i.toggleExpand(n):i.slideController(n))},i.toggleExpand=function(e){t.$childMenu.is(":visible")?(t.$parentMenu.addClass("slider-menu-active"),t.$childMenu.removeClass("slider-menu-active"),t.$container.css("height",t.$parentMenu.height()),e.removeClass("slider-menu-open")):(t.$childMenu.addClass("slider-menu-active"),t.$container.css("height",t.$parentMenu.height()),e.addClass("slider-menu-open"))},i.slideController=function(n){e('[data-vertical="true"] ul',t.$container).removeClass("slider-menu-active"),e('[data-vertical="true"] a',t.$container).removeClass("slider-menu-open"),t.$parentMenu.removeClass("slider-menu-active"),n.hasClass("slider-menu-back")?i.slide(n,!0):i.slide(n)},i.slide=function(n,a){var i=e("nav",t.$container),l=a?t.$parentMenu.parent().parent():e("> ul",t.$parentItem),r=a?parseInt(i.attr("data-left"),10)+100:parseInt(i.attr("data-left"),10)-100;l.addClass("slider-menu-active").parents("ul").addClass("slider-menu-active"),t.$container.css("height",l.outerHeight()),i.attr("data-left",r).css("left",r+"%")},e(this).each(function(){i.initMenu(e(this))})}}(jQuery);