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.
 
 
 

1 lines
6.9 KiB

(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 if text should be changed"),u.is.textEnabled()&&(u.is.active()?y.hover?(u.verbose("Changing text to hover text",y.hover),u.text.update(y.hover)):y.disable&&(u.verbose("Changing text to disable text",y.disable),u.text.update(y.disable)):y.hover?(u.verbose("Changing text to hover text",y.disable),u.text.update(y.hover)):y.enable&&(u.verbose("Changing text to enable text",y.disable),u.text.update(y.enable)))},reset:function(){var e=y.active||d.data(h.storedText),t=y.inactive||d.data(h.storedText);u.is.textEnabled()&&(u.is.active()&&e?(u.verbose("Resetting active text",e),u.text.update(e)):t&&(u.verbose("Resetting inactive text",e),u.text.update(t)))},update:function(e){var t=u.text.get();e&&e!==t&&(u.debug("Updating text",e),f.selector.text?d.data(h.storedText,e).find(f.selector.text).text(e):d.data(h.storedText,e).html(e))}},setting:function(e,t){return t===o?f[e]:(f[e]=t,o)},performance:{log:function(e){var t,n;f.performance&&(t=(new Date).getTime(),n=t-c,c=t,l.push({Name:e,"Execution Time":n}),clearTimeout(u.performance.timer),u.performance.timer=setTimeout(u.performance.display,100))},display:function(){var t=f.moduleName+" Performance ("+a+")";f.moduleName+": "+a+"("+i.size()+" elements)",console.group!==o&&l.length>0&&(console.groupCollapsed(t),console.table?console.table(l):e.each(l,function(e,t){console.log(t.Name+":"+t["Execution Time"])}),console.groupEnd(),l=[])}},verbose:function(){f.verbose&&f.debug&&(u.performance.log(arguments[0]),u.verbose=Function.prototype.bind.call(console.info,console,f.moduleName+":"))},debug:function(){f.debug&&(u.performance.log(arguments[0]),u.debug=Function.prototype.bind.call(console.info,console,f.moduleName+":"))},error:function(){console.log!==o&&(u.error=Function.prototype.bind.call(console.error,console,f.moduleName+":"))},invoke:function(t,n,i){var a,r;return i=i||[].slice.call(arguments,2),"string"==typeof t&&g!==o&&(t=t.split("."),a=t.length-1,e.each(t,function(t,n){return e.isPlainObject(g[n])&&t!=a?(g=g[n],!0):g[n]!==o?(r=g[n],!0):(u.error(f.errors.method),!1)})),e.isFunction(r)?r.apply(n,i):r}},p?n=u.invoke(r,this,s):(g!==o&&u.destroy(),u.initialize())}),n!==o?n:this},e.fn.state.settings={moduleName:"State Module",debug:!0,verbose:!1,namespace:"state",performance:!1,onActivate:function(){},onDeactivate:function(){},onChange:function(){},activateTest:function(){return!0},deactivateTest:function(){return!0},automatic:!0,sync:!1,flashDuration:3e3,filter:{text:".loading, .disabled",active:".disabled"},context:!1,errors:{method:"The method you called is not defined."},metadata:{promise:"promise",storedText:"stored-text"},className:{focus:"focus",hover:"hover",pressed:"down",active:"active",loading:"loading"},selector:{text:!1},defaults:{input:{hover:!0,focus:!0,pressed:!0,loading:!1,active:!1},button:{hover:!0,focus:!1,pressed:!0,active:!1,loading:!0}},states:{hover:!0,focus:!0,pressed:!0,loading:!1,active:!1},text:{flash:!1,hover:!1,active:!1,inactive:!1,enable:!1,disable:!1}}})(jQuery,window,document);