jquery-mobile-menu-plugin
Version:
The best jQuery plugin for app look-alike on- and off-canvas menus with sliding submenus for your website and webapp.
7 lines • 2.75 kB
JavaScript
/*
* jQuery mmenu dropdown addon
* mmenu.frebsite.nl
*
* Copyright (c) Fred Heusschen
*/
!function(t){var o="mmenu",i="dropdown";t[o].addons[i]={setup:function(){if(this.opts.offCanvas){var p=this,f=this.opts[i],r=this.conf[i];if(a=t[o].glbl,"boolean"==typeof f&&f&&(f={drop:f}),"object"!=typeof f&&(f={}),"string"==typeof f.position&&(f.position={of:f.position}),f=this.opts[i]=t.extend(!0,{},t[o].defaults[i],f),f.drop){if("string"!=typeof f.position.of){var d=this.$menu.attr("id");d&&d.length&&(this.conf.clone&&(d=e.umm(d)),f.position.of='[href="#'+d+'"]')}if("string"==typeof f.position.of){var l=t(f.position.of);if(l.length){this.$menu.addClass(e.dropdown),f.tip&&this.$menu.addClass(e.tip),f.event=f.event.split(" "),1==f.event.length&&(f.event[1]=f.event[0]),"hover"==f.event[0]&&l.on(s.mouseenter+"-dropdown",function(){p.open()}),"hover"==f.event[1]&&this.$menu.on(s.mouseleave+"-dropdown",function(){p.close()}),this.bind("opening",function(){this.$menu.data(n.style,this.$menu.attr("style")||""),a.$html.addClass(e.dropdown)}),this.bind("closed",function(){this.$menu.attr("style",this.$menu.data(n.style)),a.$html.removeClass(e.dropdown)});var h=function(n,s){var p=s[0],d=s[1],h="x"==n?"scrollLeft":"scrollTop",u="x"==n?"outerWidth":"outerHeight",c="x"==n?"left":"top",m="x"==n?"right":"bottom",v="x"==n?"width":"height",w="x"==n?"maxWidth":"maxHeight",g=null,x=a.$wndw[h](),b=l.offset()[c]-=x,$=b+l[u](),y=a.$wndw[v](),C=r.offset.button[n]+r.offset.viewport[n];if(f.position[n])switch(f.position[n]){case"left":case"bottom":g="after";break;case"right":case"top":g="before"}null===g&&(g=y/2>b+($-b)/2?"after":"before");var k,j;return"after"==g?(k="x"==n?b:$,j=y-(k+C),p[c]=k+r.offset.button[n],p[m]="auto",d.push(e["x"==n?"tipleft":"tiptop"])):(k="x"==n?$:b,j=k-C,p[m]="calc( 100% - "+(k-r.offset.button[n])+"px )",p[c]="auto",d.push(e["x"==n?"tipright":"tipbottom"])),p[w]=Math.min(t[o].configuration[i][v].max,j),[p,d]},u=function(t){if(this.vars.opened){this.$menu.attr("style",this.$menu.data(n.style));var o=[{},[]];o=h.call(this,"y",o),o=h.call(this,"x",o),this.$menu.css(o[0]),f.tip&&this.$menu.removeClass(e.tipleft+" "+e.tipright+" "+e.tiptop+" "+e.tipbottom).addClass(o[1].join(" "))}};this.bind("opening",u),a.$wndw.on(s.resize+"-dropdown",function(t){u.call(p)}),this.opts.offCanvas.blockUI||a.$wndw.on(s.scroll+"-dropdown",function(t){u.call(p)})}}}}},add:function(){e=t[o]._c,n=t[o]._d,s=t[o]._e,e.add("dropdown tip tipleft tipright tiptop tipbottom"),s.add("mouseenter mouseleave resize scroll")},clickAnchor:function(t,o){}},t[o].defaults[i]={drop:!1,event:"click",position:{},tip:!0},t[o].configuration[i]={offset:{button:{x:-10,y:10},viewport:{x:20,y:20}},height:{max:880},width:{max:440}};var e,n,s,a}(jQuery);