|
|
!function(a,b,c,d){a.fn.dropdown=function(b){var e,f=a(this),g=a(c),h=f.selector||"",i="ontouchstart"in c.documentElement,j=(new Date).getTime(),k=[],l=arguments[0],m="string"==typeof l,n=[].slice.call(arguments,1);return f.each(function(){var c,o=a.isPlainObject(b)?a.extend(!0,{},a.fn.dropdown.settings,b):a.extend({},a.fn.dropdown.settings),p=o.className,q=o.metadata,r=o.namespace,s=o.selector,t=o.error,u="."+r,v="module-"+r,w=a(this),x=w.find(s.item),y=w.find(s.text),z=w.find(s.input),A=w.children(s.menu),B=this,C=w.data(v);c={initialize:function(){c.debug("Initializing dropdown",o),c.save.defaults(),c.set.selected(),i&&c.bind.touchEvents(),c.bind.mouseEvents(),c.bind.keyboardEvents(),c.instantiate()},instantiate:function(){c.verbose("Storing instance of dropdown",c),C=c,w.data(v,c)},destroy:function(){c.verbose("Destroying previous dropdown for",w),x.off(u),w.off(u).removeData(v)},bind:{keyboardEvents:function(){c.debug("Binding keyboard events");var b={Enter:13,UpArrow:38,DownArrow:40},d=-1,e=function(a){a.addClass("hovered").mouseenter()},f=function(a){a.removeClass("hovered").mouseleave()};w.on("keydown"+u,function(g){x=w.find(s.item);var h=-1===d;if(h&&y.text()&&x.each(function(b,c){a(c).data(q.text)==y.text()&&(d=b)}),g.which==b.Enter)c.is.hidden()?c.show():h?c.hide():a(x[d]).click();else if(g.which==b.DownArrow)d<x.length-1&&(d>-1&&f(a(x[d])),d++,e(a(x[d])));else if(g.which==b.UpArrow)d>0&&(d<=x.length-1&&f(a(x[d])),d--,e(a(x[d])));else for(var i=String.fromCharCode(g.which),j=0;j<x.length;j++){var k=x[j],l=a(k).text();if(l&&l.charAt(0).toLowerCase()===i.toLowerCase()&&(j>d||a(x[d]).text().charAt(0).toLowerCase()!==i.toLowerCase())){console.log(l),f(a(x[d])),d=j,e(a(x[d]));break}}})},touchEvents:function(){c.debug("Touch device detected binding touch events"),w.on("touchstart"+u,c.event.test.toggle),x.on("touchstart"+u,c.event.item.mouseenter).on("touchstart"+u,c.event.item.click)},mouseEvents:function(){c.verbose("Mouse detected binding mouse events"),"click"==o.on?w.on("click"+u,c.event.test.toggle):"hover"==o.on?w.on("mouseenter"+u,c.delay.show).on("mouseleave"+u,c.delay.hide):w.on(o.on+u,c.toggle),x.on("mouseenter"+u,c.event.item.mouseenter).on("mouseleave"+u,c.event.item.mouseleave).on("click"+u,c.event.item.click)},intent:function(){c.verbose("Binding hide intent event to document"),i&&g.on("touchstart"+u,c.event.test.touch).on("touchmove"+u,c.event.test.touch),g.on("click"+u,c.event.test.hide)}},unbind:{intent:function(){c.verbose("Removing hide intent event from document"),i&&g.off("touchstart"+u).off("touchmove"+u),g.off("click"+u)}},event:{test:{toggle:function(a){c.determine.intent(a,c.toggle)&&a.preventDefault()},touch:function(a){c.determine.intent(a,function(){"touchstart"==a.type?c.timer=setTimeout(c.hide,o.delay.touch):"touchmove"==a.type&&clearTimeout(c.timer)}),a.stopPropagation()},hide:function(a){c.determine.intent(a,c.hide)}},item:{mouseenter:function(b){var d=a(this).find(s.submenu),e=a(this).siblings(s.item).children(s.menu);(d.length>0||e.length>0)&&(clearTimeout(c.itemTimer),c.itemTimer=setTimeout(function(){e.length>0&&c.animate.hide(!1,e.filter(":visible")),d.length>0&&(c.verbose("Showing sub-menu",d),c.animate.show(!1,d))},2*o.delay.show),b.preventDefault(),b.stopPropagation())},mouseleave:function(){var b=a(this).find(s.menu);b.size()>0&&(clearTimeout(c.itemTimer),c.itemTimer=setTimeout(function(){c.verbose("Hiding sub-menu",b),c.animate.hide(!1,b)},o.delay.hide))},click:function(b){var e=a(this),f=e.data(q.text)!==d?e.data(q.text):e.text(),g=e.data(q.value)!==d?e.data(q.value):"string"==typeof f?f.toLowerCase():f,h=function(){c.determine.selectAction(f,g),a.proxy(o.onChange,B)(g,f)};0===e.find(s.menu).size()&&("touchstart"==b.type?e.one("click",h):h())}},resetStyle:function(){a(this).removeAttr("style")}},determine:{selectAction:function(b,d){c.verbose("Determining action",o.action),a.isFunction(c.action[o.action])?(c.verbose("Triggering preset action",o.action,b,d),c.action[o.action](b,d)):a.isFunction(o.action)?(c.verbose("Triggering user action",o.action,b,d),o.action(b,d)):c.er
|