You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

0 lines
6.9 KiB

  1. (function(e,t,n,o){e.fn.state=function(t){var n,i=e(this),a=i.selector||"",r=arguments[0],s=[].slice.call(arguments,1),c=(new Date).getTime(),l=[];return i.each(function(){var u,d=e(this),f=e.extend(!0,{},e.fn.state.settings,t),m=this,g=d.data("module-"+f.namespace),p="string"==typeof r,v=f.namespace,h=f.metadata,b=f.className,x=f.states,y=f.text;u={initialize:function(){u.verbose("Initializing module",m),f.automatic&&u.add.defaults(),f.context&&""!==a?(u.allows("hover")&&e(m,f.context).on(a,"mouseenter."+v,u.hover.enable).on(a,"mouseleave."+v,u.hover.disable),u.allows("pressed")&&e(m,f.context).on(a,"mousedown."+v,u.pressed.enable).on(a,"mouseup."+v,u.pressed.disable),u.allows("focus")&&e(m,f.context).on(a,"focus."+v,u.focus.enable).on(a,"blur."+v,u.focus.disable),e(f.context).on(a,"mouseenter."+v,u.text.change).on(a,"mouseleave."+v,u.text.reset).on(a,"click."+v,u.toggle)):(u.allows("hover")&&d.on("mouseenter."+v,u.hover.enable).on("mouseleave."+v,u.hover.disable),u.allows("pressed")&&d.on("mousedown."+v,u.pressed.enable).on("mouseup."+v,u.pressed.disable),u.allows("focus")&&d.on("focus."+v,u.focus.enable).on("blur."+v,u.focus.disable),d.on("mouseenter."+v,u.text.change).on("mouseleave."+v,u.text.reset).on("click."+v,u.toggle)),d.data("module-"+v,u)},destroy:function(){u.verbose("Destroying previous module",m),d.off("."+v)},refresh:function(){u.verbose("Refreshing selector cache",m),d=e(m)},add:{defaults:function(){var n=t&&e.isPlainObject(t.states)?t.states:{};e.each(f.defaults,function(t,i){u.is[t]!==o&&u.is[t]()&&(u.verbose("Adding default states",t,m),e.extend(f.states,i,n))})}},is:{active:function(){return d.hasClass(b.active)},loading:function(){return d.hasClass(b.loading)},inactive:function(){return!d.hasClass(b.active)},enabled:function(){return!d.is(f.filter.active)},disabled:function(){return d.is(f.filter.active)},textEnabled:function(){return!d.is(f.filter.text)},button:function(){return d.is(".button:not(a, .submit)")},input:function(){return d.is("input")}},allow:function(e){u.debug("Now allowing state",e),x[e]=!0},disallow:function(e){u.debug("No longer allowing",e),x[e]=!1},allows:function(e){return x[e]||!1},enable:function(e){u.allows(e)&&d.addClass(b[e])},disable:function(e){u.allows(e)&&d.removeClass(b[e])},textFor:function(e){return y[e]||!1},focus:{enable:function(){d.addClass(b.focus)},disable:function(){d.removeClass(b.focus)}},hover:{enable:function(){d.addClass(b.hover)},disable:function(){d.removeClass(b.hover)}},pressed:{enable:function(){d.addClass(b.pressed).one("mouseleave",u.pressed.disable)},disable:function(){d.removeClass(b.pressed)}},toggle:function(){var e=d.data(h.promise);u.allows("active")&&u.is.enabled()&&(u.refresh(),e!==o?u.listenTo(e):u.change())},listenTo:function(t){u.debug("API request detected, waiting for state signal",t),t?(y.loading&&u.text.update(y.loading),e.when(t).then(function(){"resolved"==t.state()?(u.debug("API request succeeded"),f.activateTest=function(){return!0},f.deactivateTest=function(){return!0}):(u.debug("API request failed"),f.activateTest=function(){return!1},f.deactivateTest=function(){return!1}),u.change()})):(f.activateTest=function(){return!1},f.deactivateTest=function(){return!1})},change:function(){u.debug("Determining state change direction"),u.is.inactive()?u.activate():u.deactivate(),f.sync&&u.sync(),e.proxy(f.onChange,m)()},activate:function(){e.proxy(f.activateTest,m)()&&(u.debug("Setting state to active"),d.addClass(b.active),u.text.update(y.active)),e.proxy(f.onActivate,m)()},deactivate:function(){e.proxy(f.deactivateTest,m)()&&(u.debug("Setting state to inactive"),d.removeClass(b.active),u.text.update(y.inactive)),e.proxy(f.onDeactivate,m)()},sync:function(){u.verbose("Syncing other buttons to current state"),u.is.active()?i.not(d).state("activate"):i.not(d).state("deactivate")},text:{get:function(){return f.selector.text?d.find(f.selector.text).text():d.html()},flash:function(e,t){var n=u.text.get();e=e||f.text.flash,t=t||f.flashDuration,u.text.update(e),setTimeout(function(){u.text.update(n)},t)},change:function(){u.verbose("Checking