diff --git a/build/minified/modules/behavior/state.js b/build/minified/modules/behavior/state.js index f05887f5a..f7ee1638a 100644 --- a/build/minified/modules/behavior/state.js +++ b/build/minified/modules/behavior/state.js @@ -485,7 +485,7 @@ $.fn.state = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, error: function() { diff --git a/build/minified/modules/behavior/state.min.js b/build/minified/modules/behavior/state.min.js index 5afb8e421..c9b377154 100644 --- a/build/minified/modules/behavior/state.min.js +++ b/build/minified/modules/behavior/state.min.js @@ -1 +1 @@ -(function(e,t,n,a){e.fn.state=function(t){var n,o=e(this),i=o.selector||"",r=arguments[0],s=[].slice.call(arguments,1),l=(new Date).getTime(),c=[];return o.each(function(){var u,d=e(this),f=e.extend(!0,{},e.fn.state.settings,t),g=this,m=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",g),f.automatic&&u.add.defaults(),f.context&&""!==i?(u.allows("hover")&&e(g,f.context).on(i,"mouseenter."+v,u.hover.enable).on(i,"mouseleave."+v,u.hover.disable),u.allows("pressed")&&e(g,f.context).on(i,"mousedown."+v,u.pressed.enable).on(i,"mouseup."+v,u.pressed.disable),u.allows("focus")&&e(g,f.context).on(i,"focus."+v,u.focus.enable).on(i,"blur."+v,u.focus.disable),e(f.context).on(i,"mouseenter."+v,u.text.change).on(i,"mouseleave."+v,u.text.reset).on(i,"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",g),d.off("."+v)},refresh:function(){u.verbose("Refreshing selector cache",g),d=e(g)},add:{defaults:function(){var n=t&&e.isPlainObject(t.states)?t.states:{};e.each(f.defaults,function(t,o){u.is[t]!==a&&u.is[t]()&&(u.verbose("Adding default states",t,g),e.extend(f.states,o,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")}},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!==a?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(),f.onChange()},activate:function(){e.proxy(f.activateTest,g)()&&(u.debug("Setting state to active"),d.addClass(b.active),u.text.update(y.active))},deactivate:function(){e.proxy(f.deactivateTest,g)()&&(u.debug("Setting state to inactive"),d.removeClass(b.active),u.text.update(y.inactive))},sync:function(){u.verbose("Syncing other buttons to current state"),u.is.active()?o.not(d).state("activate"):o.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===a?f[e]:(f[e]=t,a)},performance:{log:function(e){var t,n;f.performance&&(t=(new Date).getTime(),n=t-l,l=t,c.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 ("+i+")";f.moduleName+": "+i+"("+o.size()+" elements)",console.group!==a&&c.length>0&&(console.groupCollapsed(t),console.table?console.table(c):e.each(c,function(e,t){console.log(t.Name+":"+t["Execution Time"])}),console.groupEnd(),c=[])}},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.verbose=Function.prototype.bind.call(console.info,console,f.moduleName+":"))},error:function(){console.log!==a&&(u.error=Function.prototype.bind.call(console.log,console,f.moduleName+":"))},invoke:function(t,n,o){var i,r;return o=o||[].slice.call(arguments,2),"string"==typeof t&&m!==a&&(t=t.split("."),i=t.length-1,e.each(t,function(t,n){return e.isPlainObject(m[n])&&t!=i?(m=m[n],!0):m[n]!==a?(r=m[n],!0):(u.error(f.errors.method),!1)})),e.isFunction(r)?r.apply(n,o):r}},p?n=u.invoke(r,this,s):(m!==a&&u.destroy(),u.initialize())}),n!==a?n:this},e.fn.state.settings={moduleName:"State Module",debug:!0,verbose:!1,namespace:"state",performance:!0,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); \ No newline at end of file +(function(e,t,n,a){e.fn.state=function(t){var n,o=e(this),i=o.selector||"",r=arguments[0],s=[].slice.call(arguments,1),l=(new Date).getTime(),c=[];return o.each(function(){var u,d=e(this),f=e.extend(!0,{},e.fn.state.settings,t),g=this,m=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",g),f.automatic&&u.add.defaults(),f.context&&""!==i?(u.allows("hover")&&e(g,f.context).on(i,"mouseenter."+v,u.hover.enable).on(i,"mouseleave."+v,u.hover.disable),u.allows("pressed")&&e(g,f.context).on(i,"mousedown."+v,u.pressed.enable).on(i,"mouseup."+v,u.pressed.disable),u.allows("focus")&&e(g,f.context).on(i,"focus."+v,u.focus.enable).on(i,"blur."+v,u.focus.disable),e(f.context).on(i,"mouseenter."+v,u.text.change).on(i,"mouseleave."+v,u.text.reset).on(i,"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",g),d.off("."+v)},refresh:function(){u.verbose("Refreshing selector cache",g),d=e(g)},add:{defaults:function(){var n=t&&e.isPlainObject(t.states)?t.states:{};e.each(f.defaults,function(t,o){u.is[t]!==a&&u.is[t]()&&(u.verbose("Adding default states",t,g),e.extend(f.states,o,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")}},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!==a?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(),f.onChange()},activate:function(){e.proxy(f.activateTest,g)()&&(u.debug("Setting state to active"),d.addClass(b.active),u.text.update(y.active))},deactivate:function(){e.proxy(f.deactivateTest,g)()&&(u.debug("Setting state to inactive"),d.removeClass(b.active),u.text.update(y.inactive))},sync:function(){u.verbose("Syncing other buttons to current state"),u.is.active()?o.not(d).state("activate"):o.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===a?f[e]:(f[e]=t,a)},performance:{log:function(e){var t,n;f.performance&&(t=(new Date).getTime(),n=t-l,l=t,c.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 ("+i+")";f.moduleName+": "+i+"("+o.size()+" elements)",console.group!==a&&c.length>0&&(console.groupCollapsed(t),console.table?console.table(c):e.each(c,function(e,t){console.log(t.Name+":"+t["Execution Time"])}),console.groupEnd(),c=[])}},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!==a&&(u.error=Function.prototype.bind.call(console.log,console,f.moduleName+":"))},invoke:function(t,n,o){var i,r;return o=o||[].slice.call(arguments,2),"string"==typeof t&&m!==a&&(t=t.split("."),i=t.length-1,e.each(t,function(t,n){return e.isPlainObject(m[n])&&t!=i?(m=m[n],!0):m[n]!==a?(r=m[n],!0):(u.error(f.errors.method),!1)})),e.isFunction(r)?r.apply(n,o):r}},p?n=u.invoke(r,this,s):(m!==a&&u.destroy(),u.initialize())}),n!==a?n:this},e.fn.state.settings={moduleName:"State Module",debug:!0,verbose:!1,namespace:"state",performance:!0,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); \ No newline at end of file diff --git a/build/minified/modules/checkbox.js b/build/minified/modules/checkbox.js index 29a2c2d9b..8653f8918 100644 --- a/build/minified/modules/checkbox.js +++ b/build/minified/modules/checkbox.js @@ -66,6 +66,13 @@ $.fn.checkbox = function(parameters) { } }, + destroy: function() { + module.verbose('Destroying previous module for', $module); + $module + .off(namespace) + ; + }, + is: { radio: function() { return $module @@ -83,13 +90,6 @@ $.fn.checkbox = function(parameters) { } }, - destroy: function() { - module.verbose('Destroying previous module for', $module); - $module - .off(namespace) - ; - }, - enable: function() { module.debug('Enabling checkbox'); $module @@ -157,7 +157,7 @@ $.fn.checkbox = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { diff --git a/build/minified/modules/checkbox.min.js b/build/minified/modules/checkbox.min.js index dcbc18124..ee409036e 100644 --- a/build/minified/modules/checkbox.min.js +++ b/build/minified/modules/checkbox.min.js @@ -1 +1 @@ -(function(e,t,n,o){e.fn.checkbox=function(t){var n,a=e(this),i=e.extend(!0,{},e.fn.checkbox.settings,t),s="."+i.namespace,r="module-"+i.namespace,l=(a.selector||"",(new Date).getTime()),c=[],u=arguments[0],d="string"==typeof u,f=[].slice.call(arguments,1);return a.each(function(){var t,m=e(this),p=e(this).find(i.selector.input),g=m.selector||"",h=this,v=m.data("module-"+i.namespace),b=i.className,y=i.namespace,x=i.errors;t={initialize:function(){i.context&&""!==g?(t.verbose("Initializing checkbox with delegated events",m),e(h,i.context).on(g,"click"+s,t.toggle).data(r,t)):(t.verbose("Initializing checkbox with bound events",m),m.on("click"+s,t.toggle).data(r,t))},is:{radio:function(){return m.hasClass(b.radio)}},can:{disable:function(){return"boolean"==typeof i.required?i.required:!t.is.radio()}},destroy:function(){t.verbose("Destroying previous module for",m),m.off(y)},enable:function(){t.debug("Enabling checkbox"),m.addClass(b.active),p.prop("checked",!0),e.proxy(i.onChange,p.get())(),e.proxy(i.onEnable,p.get())()},disable:function(){t.debug("Disabling checkbox"),m.removeClass(b.active),p.prop("checked",!1),e.proxy(i.onChange,p.get())(),e.proxy(i.onDisable,p.get())()},toggle:function(){t.verbose("Toggling checkbox state"),p.prop("checked")!==o&&p.prop("checked")?t.can.disable()&&t.disable():t.enable()},setting:function(n,a){return a===o?i[n]:(e.isPlainObject(n)?(t.verbose("Modifying settings object",n,a),e.extend(!0,i,n)):(t.verbose("Modifying setting",n,a),i[n]=a),o)},internal:function(n,a){return a===o?t[n]:(e.isPlainObject(n)?(t.verbose("Modifying internal property",n,a),e.extend(!0,t,n)):(t.verbose("Changing internal method to",a),t[n]=a),o)},debug:function(){i.debug&&(t.performance.log(arguments[0]),t.verbose=Function.prototype.bind.call(console.info,console,i.moduleName+":"))},verbose:function(){i.verbose&&i.debug&&(t.performance.log(arguments[0]),t.verbose=Function.prototype.bind.call(console.info,console,i.moduleName+":"))},error:function(){console.log!==o&&(t.error=Function.prototype.bind.call(console.log,console,i.moduleName+":"))},performance:{log:function(e){var n,o,a;i.performance&&(n=(new Date).getTime(),a=l||n,o=n-a,l=n,c.push({Element:h,Name:e,"Execution Time":o}),clearTimeout(t.performance.timer),t.performance.timer=setTimeout(t.performance.display,100))},display:function(){var t=i.moduleName,n=(i.moduleName+": "+g+"("+a.size()+" elements)",0);g&&(t+="Performance ("+g+")"),(console.group!==o||console.table!==o)&&c.length>0&&(console.groupCollapsed(t),console.table?(e.each(c,function(e,t){n+=t["Execution Time"]}),console.table(c)):e.each(c,function(e,t){n+=t["Execution Time"]}),console.log("Total Execution Time:",n+"ms"),console.groupEnd(),c=[],l=!1)}},invoke:function(n,a,i){var s,r;return a=a||f,i=h||i,"string"==typeof n&&v!==o&&(n=n.split("."),s=n.length-1,e.each(n,function(n,a){return e.isPlainObject(v[a])&&n!=s?(v=v[a],!0):v[a]!==o?(r=v[a],!0):(t.error(x.method),!1)})),e.isFunction(r)?(t.verbose("Executing invoked function",r),r.apply(i,a)):r||!1}},d?(v===o&&t.initialize(),n=t.invoke(u)):(v!==o&&t.destroy(),t.initialize())}),n?n:this},e.fn.checkbox.settings={moduleName:"Checkbox Module",namespace:"checkbox",verbose:!0,debug:!0,performance:!1,context:!1,required:"auto",onChange:function(){},onEnable:function(){},onDisable:function(){},errors:{method:"The method you called is not defined."},selector:{input:"input"},className:{active:"active",radio:"radio"}}})(jQuery,window,document); \ No newline at end of file +(function(e,t,n,o){e.fn.checkbox=function(t){var n,a=e(this),i=e.extend(!0,{},e.fn.checkbox.settings,t),s="."+i.namespace,r="module-"+i.namespace,l=(a.selector||"",(new Date).getTime()),c=[],u=arguments[0],d="string"==typeof u,f=[].slice.call(arguments,1);return a.each(function(){var t,m=e(this),p=e(this).find(i.selector.input),g=m.selector||"",h=this,v=m.data("module-"+i.namespace),b=i.className,y=i.namespace,x=i.errors;t={initialize:function(){i.context&&""!==g?(t.verbose("Initializing checkbox with delegated events",m),e(h,i.context).on(g,"click"+s,t.toggle).data(r,t)):(t.verbose("Initializing checkbox with bound events",m),m.on("click"+s,t.toggle).data(r,t))},destroy:function(){t.verbose("Destroying previous module for",m),m.off(y)},is:{radio:function(){return m.hasClass(b.radio)}},can:{disable:function(){return"boolean"==typeof i.required?i.required:!t.is.radio()}},enable:function(){t.debug("Enabling checkbox"),m.addClass(b.active),p.prop("checked",!0),e.proxy(i.onChange,p.get())(),e.proxy(i.onEnable,p.get())()},disable:function(){t.debug("Disabling checkbox"),m.removeClass(b.active),p.prop("checked",!1),e.proxy(i.onChange,p.get())(),e.proxy(i.onDisable,p.get())()},toggle:function(){t.verbose("Toggling checkbox state"),p.prop("checked")!==o&&p.prop("checked")?t.can.disable()&&t.disable():t.enable()},setting:function(n,a){return a===o?i[n]:(e.isPlainObject(n)?(t.verbose("Modifying settings object",n,a),e.extend(!0,i,n)):(t.verbose("Modifying setting",n,a),i[n]=a),o)},internal:function(n,a){return a===o?t[n]:(e.isPlainObject(n)?(t.verbose("Modifying internal property",n,a),e.extend(!0,t,n)):(t.verbose("Changing internal method to",a),t[n]=a),o)},debug:function(){i.debug&&(t.performance.log(arguments[0]),t.debug=Function.prototype.bind.call(console.info,console,i.moduleName+":"))},verbose:function(){i.verbose&&i.debug&&(t.performance.log(arguments[0]),t.verbose=Function.prototype.bind.call(console.info,console,i.moduleName+":"))},error:function(){console.log!==o&&(t.error=Function.prototype.bind.call(console.log,console,i.moduleName+":"))},performance:{log:function(e){var n,o,a;i.performance&&(n=(new Date).getTime(),a=l||n,o=n-a,l=n,c.push({Element:h,Name:e,"Execution Time":o}),clearTimeout(t.performance.timer),t.performance.timer=setTimeout(t.performance.display,100))},display:function(){var t=i.moduleName,n=(i.moduleName+": "+g+"("+a.size()+" elements)",0);g&&(t+="Performance ("+g+")"),(console.group!==o||console.table!==o)&&c.length>0&&(console.groupCollapsed(t),console.table?(e.each(c,function(e,t){n+=t["Execution Time"]}),console.table(c)):e.each(c,function(e,t){n+=t["Execution Time"]}),console.log("Total Execution Time:",n+"ms"),console.groupEnd(),c=[],l=!1)}},invoke:function(n,a,i){var s,r;return a=a||f,i=h||i,"string"==typeof n&&v!==o&&(n=n.split("."),s=n.length-1,e.each(n,function(n,a){return e.isPlainObject(v[a])&&n!=s?(v=v[a],!0):v[a]!==o?(r=v[a],!0):(t.error(x.method),!1)})),e.isFunction(r)?(t.verbose("Executing invoked function",r),r.apply(i,a)):r||!1}},d?(v===o&&t.initialize(),n=t.invoke(u)):(v!==o&&t.destroy(),t.initialize())}),n?n:this},e.fn.checkbox.settings={moduleName:"Checkbox Module",namespace:"checkbox",verbose:!0,debug:!0,performance:!1,context:!1,required:"auto",onChange:function(){},onEnable:function(){},onDisable:function(){},errors:{method:"The method you called is not defined."},selector:{input:"input"},className:{active:"active",radio:"radio"}}})(jQuery,window,document); \ No newline at end of file diff --git a/build/minified/modules/dropdown.js b/build/minified/modules/dropdown.js index 99716859b..7a7e9c2ee 100644 --- a/build/minified/modules/dropdown.js +++ b/build/minified/modules/dropdown.js @@ -34,6 +34,8 @@ $.fn.dropdown = function(parameters) { var $module = $(this), $menu = $(this).find(settings.selector.menu), + $item = $(this).find(settings.selector.item), + $input = $(this).find(settings.selector.input) isTouchDevice = ('ontouchstart' in document.documentElement), @@ -61,23 +63,53 @@ $.fn.dropdown = function(parameters) { } else { module.verbose('Initializing dropdown with bound events', $module); - $module - .on(module.get.event() + eventNamespace, module.toggle) + .on(module.get.event() + eventNamespace, module.intent.test) + ; + $item + .on('click' + eventNamespace, module.event.select) ; - $module .data(moduleNamespace, module) ; } }, + destroy: function() { + module.verbose('Destroying previous module for', $module); + $module + .off(namespace) + ; + }, + + event: { + + item: { + + click: function () { + var + value = $(this).data(metadata.value) || $(this).html() + ; + module.verbose('Determining select action'); + if( $.isFunction( module.action[settings.action] ) { + module.action[ settings.action ](value); + } + else { + module.error(errors.action); + } + } + + } + + }, + intent: { test: function(event) { module.debug('Checking if click was inside the dropdown', event.target); - if( $(event.target).closest($module).size() == 0 ) { - module.hide(); + if( $(event.target).closest($menu).size() == 0 ) { + module.toggle(); + event.stopPropagation(); } }, @@ -97,6 +129,22 @@ $.fn.dropdown = function(parameters) { }, + action: { + + nothing: function() {}, + + close: function() { + module.hide(); + }, + + form: function(value) { + module.debug('Adding selected value to hidden input', value); + $input.val(value); + module.hide(); + } + + } + get: { event: function() { @@ -122,13 +170,6 @@ $.fn.dropdown = function(parameters) { } }, - destroy: function() { - module.verbose('Destroying previous dropdown for', $module); - $module - .off(namespace) - ; - }, - animate: { show: function() { if(animation.show == 'show') { @@ -150,7 +191,6 @@ $.fn.dropdown = function(parameters) { } }, hide: function() { - console.log(animation.hide); if(animation.hide == 'hide') { $menu .hide() @@ -235,7 +275,7 @@ $.fn.dropdown = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { @@ -359,6 +399,8 @@ $.fn.dropdown.settings = { debug : true, performance : false, + action: 'close', + animation: { show: 'slide', hide: 'slide' @@ -371,11 +413,18 @@ $.fn.dropdown.settings = { onHide : function(){}, errors : { + action : 'You called a dropdown action that was not defined', method : 'The method you called is not defined.' }, + metadata: { + value: 'value' + }, + selector : { + input : 'input[type="hidden"]', menu : '.menu' + item : '.menu > .item' }, className : { diff --git a/build/minified/modules/dropdown.min.css b/build/minified/modules/dropdown.min.css index a64ed10ed..9fe03d6a8 100644 --- a/build/minified/modules/dropdown.min.css +++ b/build/minified/modules/dropdown.min.css @@ -1 +1 @@ -.ui.dropdown{position:relative;display:inline-block;line-height:1;white-space:nowrap}.ui.dropdown .menu{position:absolute;display:none;top:100%;background-color:#FFF;min-width:100%;-webkit-box-shadow:0 2px 0 0 rgba(0,0,0,.1),1px 0 0 0 rgba(0,0,0,.1) inset,-1px 0 0 0 rgba(0,0,0,.1) inset,0 -1px 0 0 rgba(0,0,0,.1) inset;-moz-box-shadow:0 2px 0 0 rgba(0,0,0,.1),1px 0 0 0 rgba(0,0,0,.1) inset,-1px 0 0 0 rgba(0,0,0,.1) inset;box-shadow:0 2px 0 0 rgba(0,0,0,.1),1px 0 0 0 rgba(0,0,0,.1) inset,-1px 0 0 0 rgba(0,0,0,.1) inset,0 -1px 0 0 rgba(0,0,0,.1) inset;-moz-border-radius:0 0 .325em .325em;-webkit-border-radius:0 0 .325em .325em;border-radius:0 0 .325em .325em;-webkit-transition:opacity .2s ease-out;-moz-transition:opacity .2s ease-out;-o-transition:opacity .2s ease-out;-ms-transition:opacity .2s ease-out;transition:opacity .2s ease-out;z-index:11}.ui.dropdown .menu{left:0}.ui>.ui.dropdown:last-child .menu{left:auto;right:0}.ui.dropdown .menu .item{cursor:pointer;border:0;border-top:1px solid rgba(0,0,0,.05);font-size:.9em;display:block;color:rgba(0,0,0,.75);padding:.85em 1em;font-size:.9rem;text-transform:none;font-weight:400;text-align:left;-webkit-touch-callout:none}.ui.dropdown .menu .item .icon{margin-right:.75em}.ui.dropdown .menu .item:first-child{border-top:0}.ui.dropdown.visible{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.dropdown .menu .item:hover{background-color:rgba(0,0,0,.02)}.ui.dropdown .menu .active.item{border-top:1px solid rgba(0,0,0,.05);font-weight:700}.ui.simple.dropdown .menu{overflow:hidden;height:0;width:0;position:absolute;opacity:0;-webkit-transition:opacity .2s ease-out;-moz-transition:opacity .2s ease-out;-o-transition:opacity .2s ease-out;-ms-transition:opacity .2s ease-out;transition:opacity .2s ease-out}.ui.simple.dropdown:hover .menu{display:block;overflow:visible;min-width:210px;width:100%;height:auto;opacity:1}.ui.selection.dropdown{cursor:pointer;display:inline-block;background-color:#FFF;padding:.5em 1em;line-height:1.33;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);-webkit-border-radius:.3125em;-moz-border-radius:.3125em;border-radius:.3125em}.ui.selection.dropdown>.dropdown.icon{float:right;margin:.2em 0 .2em .5em}.ui.selection.dropdown,.ui.selection.dropdown .menu{-webkit-transition:box-shadow .2s ease-out;-moz-transition:box-shadow .2s ease-out;-o-transition:box-shadow .2s ease-out;-ms-transition:box-shadow .2s ease-out;transition:box-shadow .2s ease-out}.ui.selection.dropdown .menu{-webkit-box-shadow:0 1px 0 1px #EEE;-moz-box-shadow:0 1px 0 1px #EEE;box-shadow:0 1px 0 1px #EEE}.ui.selection.dropdown:hover,.ui.selection.dropdown.hover{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);-moz-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2)}.ui.selection.dropdown:hover .menu{-webkit-box-shadow:0 1px 0 1px #D3D3D3;-moz-box-shadow:0 1px 0 1px #D3D3D3;box-shadow:0 1px 0 1px #D3D3D3} \ No newline at end of file +.ui.dropdown{position:relative;display:inline-block;line-height:1;white-space:nowrap;-webkit-transition:border-radius .1s ease;-moz-transition:border-radius .1s ease;-o-transition:border-radius .1s ease;-ms-transition:border-radius .1s ease;transition:border-radius .1s ease}.ui.dropdown .menu{position:absolute;display:none;top:100%;background-color:#FFF;min-width:100%;-webkit-box-shadow:0 2px 0 0 rgba(0,0,0,.1),1px 0 0 0 rgba(0,0,0,.1) inset,-1px 0 0 0 rgba(0,0,0,.1) inset,0 -1px 0 0 rgba(0,0,0,.1) inset;-moz-box-shadow:0 2px 0 0 rgba(0,0,0,.1),1px 0 0 0 rgba(0,0,0,.1) inset,-1px 0 0 0 rgba(0,0,0,.1) inset;box-shadow:0 2px 0 0 rgba(0,0,0,.1),1px 0 0 0 rgba(0,0,0,.1) inset,-1px 0 0 0 rgba(0,0,0,.1) inset,0 -1px 0 0 rgba(0,0,0,.1) inset;-moz-border-radius:0 0 .325em .325em;-webkit-border-radius:0 0 .325em .325em;border-radius:0 0 .325em .325em;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;-o-transition:opacity .2s ease;-ms-transition:opacity .2s ease;transition:opacity .2s ease;z-index:11}.ui.dropdown .menu{left:0}.ui>.ui.dropdown:last-child .menu{left:auto;right:0}.ui.dropdown .menu .item{cursor:pointer;border:0;border-top:1px solid rgba(0,0,0,.05);font-size:.9em;display:block;color:rgba(0,0,0,.75);padding:.85em 1em;font-size:.9rem;text-transform:none;font-weight:400;text-align:left;-webkit-touch-callout:none}.ui.dropdown .menu .item .icon{margin-right:.75em}.ui.dropdown .menu .item:first-child{border-top:0}.ui.dropdown.visible{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.dropdown .menu .item:hover{background-color:rgba(0,0,0,.02)}.ui.dropdown .menu .active.item{border-top:1px solid rgba(0,0,0,.05);font-weight:700}.ui.simple.dropdown .menu{overflow:hidden;height:0;width:0;position:absolute;opacity:0;-webkit-transition:opacity .2s ease-out;-moz-transition:opacity .2s ease-out;-o-transition:opacity .2s ease-out;-ms-transition:opacity .2s ease-out;transition:opacity .2s ease-out}.ui.simple.dropdown:hover .menu{display:block;overflow:visible;min-width:210px;width:100%;height:auto;opacity:1}.ui.selection.dropdown{cursor:pointer;display:inline-block;background-color:#FFF;padding:.5em 1em;line-height:1.33;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);-webkit-border-radius:.3125em;-moz-border-radius:.3125em;border-radius:.3125em}.ui.selection.dropdown>.dropdown.icon{float:right;margin:.2em 0 .2em .5em}.ui.selection.dropdown,.ui.selection.dropdown .menu{-webkit-transition:box-shadow .2s ease-out;-moz-transition:box-shadow .2s ease-out;-o-transition:box-shadow .2s ease-out;-ms-transition:box-shadow .2s ease-out;transition:box-shadow .2s ease-out}.ui.selection.dropdown .menu{-webkit-box-shadow:0 1px 0 1px #EEE;-moz-box-shadow:0 1px 0 1px #EEE;box-shadow:0 1px 0 1px #EEE}.ui.selection.dropdown:hover,.ui.selection.dropdown.hover{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);-moz-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2)}.ui.selection.dropdown:hover .menu{-webkit-box-shadow:0 1px 0 1px #D3D3D3;-moz-box-shadow:0 1px 0 1px #D3D3D3;box-shadow:0 1px 0 1px #D3D3D3} \ No newline at end of file diff --git a/build/minified/modules/dropdown.min.js b/build/minified/modules/dropdown.min.js index 2228baba9..1d1820cb5 100644 --- a/build/minified/modules/dropdown.min.js +++ b/build/minified/modules/dropdown.min.js @@ -1 +1 @@ -(function(e,t,n,o){e.fn.dropdown=function(t){var a,i=e(this),s=e(n),r=e.extend(!0,{},e.fn.dropdown.settings,t),c="."+r.namespace,l="module-"+r.namespace,u=(i.selector||"",(new Date).getTime()),d=[],f=arguments[0],m="string"==typeof f,p=[].slice.call(arguments,1);return i.each(function(){var t,g=e(this),h=e(this).find(r.selector.menu),v="ontouchstart"in n.documentElement,b=g.selector||"",y=this,x=g.data("module-"+r.namespace),C=r.className,w=r.namespace,T=r.animation,k=r.errors;t={initialize:function(){r.context&&""!==b?(t.verbose("Initializing dropdown with delegated events",g),e(y,r.context).on(b,"click"+c,t.toggle).data(l,t)):(t.verbose("Initializing dropdown with bound events",g),g.on(t.get.event()+c,t.toggle),g.data(l,t))},intent:{test:function(n){t.debug("Checking if click was inside the dropdown",n.target),0==e(n.target).closest(g).size()&&t.hide()},bind:function(){t.verbose("Binding hide intent event to document"),e(n).on("click",t.intent.test)},unbind:function(){t.verbose("Removing hide intent event from document"),s.off("click")}},get:{event:function(){return v?"touchstart":"hover"==r.on?"hover":"click"==r.on?"click":o}},can:{click:function(){return v||"click"==r.on},show:function(){return!g.hasClass(C.disabled)}},destroy:function(){t.verbose("Destroying previous dropdown for",g),g.off(w)},animate:{show:function(){"show"==T.show?h.show():"slide"==T.show&&h.children().css("opacity",0).delay(100).animate({opacity:1},300,"easeOutQuad").end().slideDown(200,"easeOutQuad")},hide:function(){console.log(T.hide),"hide"==T.hide?h.hide():"slide"==T.hide&&h.children().css("opacity",1).animate({opacity:0},300,"easeOutQuad").end().delay(100).slideUp(200,"easeOutQuad")}},show:function(){t.debug("Showing dropdown"),g.addClass(C.active),t.animate.show(),t.can.click()&&t.intent.bind(),e.proxy(r.onChange,h.get())(),e.proxy(r.onShow,h.get())()},hide:function(){t.debug("Hiding dropdown"),g.removeClass(C.active),t.can.click()&&t.intent.unbind(),t.animate.hide(),e.proxy(r.onChange,h.get())(),e.proxy(r.onHide,h.get())()},toggle:function(){t.can.show()&&h.is(":not(:visible)")?t.show():t.hide()},setting:function(t,n){return n===o?r[t]:(e.isPlainObject(t)?e.extend(!0,r,t):r[t]=n,o)},internal:function(n,a){return a===o?t[n]:(e.isPlainObject(n)?e.extend(!0,t,n):t[n]=a,o)},debug:function(){r.debug&&(t.performance.log(arguments[0]),t.verbose=Function.prototype.bind.call(console.info,console,r.moduleName+":"))},verbose:function(){r.verbose&&r.debug&&(t.performance.log(arguments[0]),t.verbose=Function.prototype.bind.call(console.info,console,r.moduleName+":"))},error:function(){console.log!==o&&(t.error=Function.prototype.bind.call(console.log,console,r.moduleName+":"))},performance:{log:function(e){var n,o,a;r.performance&&(n=(new Date).getTime(),a=u||n,o=n-a,u=n,d.push({Element:y,Name:e,"Execution Time":o}),clearTimeout(t.performance.timer),t.performance.timer=setTimeout(t.performance.display,100))},display:function(){var t=r.moduleName,n=(r.moduleName+": "+b+"("+i.size()+" elements)",0);b&&(t+="Performance ("+b+")"),(console.group!==o||console.table!==o)&&d.length>0&&(console.groupCollapsed(t),console.table?(e.each(d,function(e,t){n+=t["Execution Time"]}),console.table(d)):e.each(d,function(e,t){n+=t["Execution Time"]}),console.log("Total Execution Time:",n+"ms"),console.groupEnd(),d=[],u=!1)}},invoke:function(n,a,i){var s,r;return a=a||p,i=y||i,"string"==typeof n&&x!==o&&(n=n.split("."),s=n.length-1,e.each(n,function(n,a){return e.isPlainObject(x[a])&&n!=s?(x=x[a],!0):x[a]!==o?(r=x[a],!0):(t.error(k.method),!1)})),e.isFunction(r)?(t.verbose("Executing invoked function",r),r.apply(i,a)):r||!1}},m?(x===o&&t.initialize(),a=t.invoke(f)):(x!==o&&t.destroy(),t.initialize())}),a?a:this},e.fn.dropdown.settings={moduleName:"Dropdown Module",namespace:"dropdown",verbose:!0,debug:!0,performance:!1,animation:{show:"slide",hide:"slide"},on:"click",onChange:function(){},onShow:function(){},onHide:function(){},errors:{method:"The method you called is not defined."},selector:{menu:".menu"},className:{active:"visible"}}})(jQuery,window,document); \ No newline at end of file +(function(e,t,n,o){e.fn.dropdown=function(t){var a,i=e(this),s=e(n),r=e.extend(!0,{},e.fn.dropdown.settings,t),c="."+r.namespace,l="module-"+r.namespace,u=(i.selector||"",(new Date).getTime()),d=[],f=arguments[0],m="string"==typeof f,p=[].slice.call(arguments,1);return i.each(function(){var t,g=e(this),h=e(this).find(r.selector.menu),v="ontouchstart"in n.documentElement,b=g.selector||"",y=this,x=g.data("module-"+r.namespace),C=r.className,w=r.namespace,T=r.animation,k=r.errors;t={initialize:function(){r.context&&""!==b?(t.verbose("Initializing dropdown with delegated events",g),e(y,r.context).on(b,"click"+c,t.toggle).data(l,t)):(t.verbose("Initializing dropdown with bound events",g),g.on(t.get.event()+c,t.intent.test),g.data(l,t))},intent:{test:function(n){t.debug("Checking if click was inside the dropdown",n.target),0==e(n.target).closest(h).size()&&(t.toggle(),n.stopPropagation())},bind:function(){t.verbose("Binding hide intent event to document"),e(n).on("click",t.intent.test)},unbind:function(){t.verbose("Removing hide intent event from document"),s.off("click")}},get:{event:function(){return v?"touchstart":"hover"==r.on?"hover":"click"==r.on?"click":o}},can:{click:function(){return v||"click"==r.on},show:function(){return!g.hasClass(C.disabled)}},destroy:function(){t.verbose("Destroying previous dropdown for",g),g.off(w)},animate:{show:function(){"show"==T.show?h.show():"slide"==T.show&&h.children().css("opacity",0).delay(100).animate({opacity:1},300,"easeOutQuad").end().slideDown(200,"easeOutQuad")},hide:function(){"hide"==T.hide?h.hide():"slide"==T.hide&&h.children().css("opacity",1).animate({opacity:0},300,"easeOutQuad").end().delay(100).slideUp(200,"easeOutQuad")}},show:function(){t.debug("Showing dropdown"),g.addClass(C.active),t.animate.show(),t.can.click()&&t.intent.bind(),e.proxy(r.onChange,h.get())(),e.proxy(r.onShow,h.get())()},hide:function(){t.debug("Hiding dropdown"),g.removeClass(C.active),t.can.click()&&t.intent.unbind(),t.animate.hide(),e.proxy(r.onChange,h.get())(),e.proxy(r.onHide,h.get())()},toggle:function(){t.can.show()&&h.is(":not(:visible)")?t.show():t.hide()},setting:function(t,n){return n===o?r[t]:(e.isPlainObject(t)?e.extend(!0,r,t):r[t]=n,o)},internal:function(n,a){return a===o?t[n]:(e.isPlainObject(n)?e.extend(!0,t,n):t[n]=a,o)},debug:function(){r.debug&&(t.performance.log(arguments[0]),t.debug=Function.prototype.bind.call(console.info,console,r.moduleName+":"))},verbose:function(){r.verbose&&r.debug&&(t.performance.log(arguments[0]),t.verbose=Function.prototype.bind.call(console.info,console,r.moduleName+":"))},error:function(){console.log!==o&&(t.error=Function.prototype.bind.call(console.log,console,r.moduleName+":"))},performance:{log:function(e){var n,o,a;r.performance&&(n=(new Date).getTime(),a=u||n,o=n-a,u=n,d.push({Element:y,Name:e,"Execution Time":o}),clearTimeout(t.performance.timer),t.performance.timer=setTimeout(t.performance.display,100))},display:function(){var t=r.moduleName,n=(r.moduleName+": "+b+"("+i.size()+" elements)",0);b&&(t+="Performance ("+b+")"),(console.group!==o||console.table!==o)&&d.length>0&&(console.groupCollapsed(t),console.table?(e.each(d,function(e,t){n+=t["Execution Time"]}),console.table(d)):e.each(d,function(e,t){n+=t["Execution Time"]}),console.log("Total Execution Time:",n+"ms"),console.groupEnd(),d=[],u=!1)}},invoke:function(n,a,i){var s,r;return a=a||p,i=y||i,"string"==typeof n&&x!==o&&(n=n.split("."),s=n.length-1,e.each(n,function(n,a){return e.isPlainObject(x[a])&&n!=s?(x=x[a],!0):x[a]!==o?(r=x[a],!0):(t.error(k.method),!1)})),e.isFunction(r)?(t.verbose("Executing invoked function",r),r.apply(i,a)):r||!1}},m?(x===o&&t.initialize(),a=t.invoke(f)):(x!==o&&t.destroy(),t.initialize())}),a?a:this},e.fn.dropdown.settings={moduleName:"Dropdown Module",namespace:"dropdown",verbose:!0,debug:!0,performance:!1,action:"close",animation:{show:"slide",hide:"slide"},on:"click",onChange:function(){},onShow:function(){},onHide:function(){},errors:{method:"The method you called is not defined."},selector:{menu:".menu"},className:{active:"visible"}}})(jQuery,window,document); \ No newline at end of file diff --git a/build/packaged/modules/behavior/state.js b/build/packaged/modules/behavior/state.js index f05887f5a..f7ee1638a 100644 --- a/build/packaged/modules/behavior/state.js +++ b/build/packaged/modules/behavior/state.js @@ -485,7 +485,7 @@ $.fn.state = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, error: function() { diff --git a/build/packaged/modules/checkbox.js b/build/packaged/modules/checkbox.js index 29a2c2d9b..8653f8918 100644 --- a/build/packaged/modules/checkbox.js +++ b/build/packaged/modules/checkbox.js @@ -66,6 +66,13 @@ $.fn.checkbox = function(parameters) { } }, + destroy: function() { + module.verbose('Destroying previous module for', $module); + $module + .off(namespace) + ; + }, + is: { radio: function() { return $module @@ -83,13 +90,6 @@ $.fn.checkbox = function(parameters) { } }, - destroy: function() { - module.verbose('Destroying previous module for', $module); - $module - .off(namespace) - ; - }, - enable: function() { module.debug('Enabling checkbox'); $module @@ -157,7 +157,7 @@ $.fn.checkbox = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { diff --git a/build/packaged/modules/dropdown.js b/build/packaged/modules/dropdown.js index 99716859b..7a7e9c2ee 100644 --- a/build/packaged/modules/dropdown.js +++ b/build/packaged/modules/dropdown.js @@ -34,6 +34,8 @@ $.fn.dropdown = function(parameters) { var $module = $(this), $menu = $(this).find(settings.selector.menu), + $item = $(this).find(settings.selector.item), + $input = $(this).find(settings.selector.input) isTouchDevice = ('ontouchstart' in document.documentElement), @@ -61,23 +63,53 @@ $.fn.dropdown = function(parameters) { } else { module.verbose('Initializing dropdown with bound events', $module); - $module - .on(module.get.event() + eventNamespace, module.toggle) + .on(module.get.event() + eventNamespace, module.intent.test) + ; + $item + .on('click' + eventNamespace, module.event.select) ; - $module .data(moduleNamespace, module) ; } }, + destroy: function() { + module.verbose('Destroying previous module for', $module); + $module + .off(namespace) + ; + }, + + event: { + + item: { + + click: function () { + var + value = $(this).data(metadata.value) || $(this).html() + ; + module.verbose('Determining select action'); + if( $.isFunction( module.action[settings.action] ) { + module.action[ settings.action ](value); + } + else { + module.error(errors.action); + } + } + + } + + }, + intent: { test: function(event) { module.debug('Checking if click was inside the dropdown', event.target); - if( $(event.target).closest($module).size() == 0 ) { - module.hide(); + if( $(event.target).closest($menu).size() == 0 ) { + module.toggle(); + event.stopPropagation(); } }, @@ -97,6 +129,22 @@ $.fn.dropdown = function(parameters) { }, + action: { + + nothing: function() {}, + + close: function() { + module.hide(); + }, + + form: function(value) { + module.debug('Adding selected value to hidden input', value); + $input.val(value); + module.hide(); + } + + } + get: { event: function() { @@ -122,13 +170,6 @@ $.fn.dropdown = function(parameters) { } }, - destroy: function() { - module.verbose('Destroying previous dropdown for', $module); - $module - .off(namespace) - ; - }, - animate: { show: function() { if(animation.show == 'show') { @@ -150,7 +191,6 @@ $.fn.dropdown = function(parameters) { } }, hide: function() { - console.log(animation.hide); if(animation.hide == 'hide') { $menu .hide() @@ -235,7 +275,7 @@ $.fn.dropdown = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { @@ -359,6 +399,8 @@ $.fn.dropdown.settings = { debug : true, performance : false, + action: 'close', + animation: { show: 'slide', hide: 'slide' @@ -371,11 +413,18 @@ $.fn.dropdown.settings = { onHide : function(){}, errors : { + action : 'You called a dropdown action that was not defined', method : 'The method you called is not defined.' }, + metadata: { + value: 'value' + }, + selector : { + input : 'input[type="hidden"]', menu : '.menu' + item : '.menu > .item' }, className : { diff --git a/build/packaged/semantic.min.css.REMOVED.git-id b/build/packaged/semantic.min.css.REMOVED.git-id index 796d6b8ca..cf106ee25 100644 --- a/build/packaged/semantic.min.css.REMOVED.git-id +++ b/build/packaged/semantic.min.css.REMOVED.git-id @@ -1 +1 @@ -1062a585b0696a0af4d861a6941560c167dfba24 \ No newline at end of file +5dd53cafcc4e065adc363338f570384e7d941806 \ No newline at end of file diff --git a/build/packaged/semantic.min.js.REMOVED.git-id b/build/packaged/semantic.min.js.REMOVED.git-id index 893a181a1..536a4a87a 100644 --- a/build/packaged/semantic.min.js.REMOVED.git-id +++ b/build/packaged/semantic.min.js.REMOVED.git-id @@ -1 +1 @@ -abc35da2d20047da9c3ba4d4ed7f9cf750458436 \ No newline at end of file +3e66f0dc5b499861816375c6e348512adf5250df \ No newline at end of file diff --git a/build/uncompressed/modules/behavior/state.js b/build/uncompressed/modules/behavior/state.js index f05887f5a..f7ee1638a 100644 --- a/build/uncompressed/modules/behavior/state.js +++ b/build/uncompressed/modules/behavior/state.js @@ -485,7 +485,7 @@ $.fn.state = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, error: function() { diff --git a/build/uncompressed/modules/checkbox.js b/build/uncompressed/modules/checkbox.js index 29a2c2d9b..8653f8918 100644 --- a/build/uncompressed/modules/checkbox.js +++ b/build/uncompressed/modules/checkbox.js @@ -66,6 +66,13 @@ $.fn.checkbox = function(parameters) { } }, + destroy: function() { + module.verbose('Destroying previous module for', $module); + $module + .off(namespace) + ; + }, + is: { radio: function() { return $module @@ -83,13 +90,6 @@ $.fn.checkbox = function(parameters) { } }, - destroy: function() { - module.verbose('Destroying previous module for', $module); - $module - .off(namespace) - ; - }, - enable: function() { module.debug('Enabling checkbox'); $module @@ -157,7 +157,7 @@ $.fn.checkbox = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { diff --git a/build/uncompressed/modules/dropdown.css b/build/uncompressed/modules/dropdown.css index ace5f836e..1113fab2a 100644 --- a/build/uncompressed/modules/dropdown.css +++ b/build/uncompressed/modules/dropdown.css @@ -17,6 +17,11 @@ display: inline-block; line-height: 1; white-space: nowrap; + -webkit-transition: border-radius 0.1s ease; + -moz-transition: border-radius 0.1s ease; + -o-transition: border-radius 0.1s ease; + -ms-transition: border-radius 0.1s ease; + transition: border-radius 0.1s ease; } .ui.dropdown .menu { position: absolute; @@ -30,11 +35,11 @@ -moz-border-radius: 0px 0px 0.325em 0.325em; -webkit-border-radius: 0px 0px 0.325em 0.325em; border-radius: 0px 0px 0.325em 0.325em; - -webkit-transition: opacity 0.2s ease-out; - -moz-transition: opacity 0.2s ease-out; - -o-transition: opacity 0.2s ease-out; - -ms-transition: opacity 0.2s ease-out; - transition: opacity 0.2s ease-out; + -webkit-transition: opacity 0.2s ease; + -moz-transition: opacity 0.2s ease; + -o-transition: opacity 0.2s ease; + -ms-transition: opacity 0.2s ease; + transition: opacity 0.2s ease; z-index: 11; } /* Flyout Direction */ diff --git a/build/uncompressed/modules/dropdown.js b/build/uncompressed/modules/dropdown.js index 99716859b..7a7e9c2ee 100644 --- a/build/uncompressed/modules/dropdown.js +++ b/build/uncompressed/modules/dropdown.js @@ -34,6 +34,8 @@ $.fn.dropdown = function(parameters) { var $module = $(this), $menu = $(this).find(settings.selector.menu), + $item = $(this).find(settings.selector.item), + $input = $(this).find(settings.selector.input) isTouchDevice = ('ontouchstart' in document.documentElement), @@ -61,23 +63,53 @@ $.fn.dropdown = function(parameters) { } else { module.verbose('Initializing dropdown with bound events', $module); - $module - .on(module.get.event() + eventNamespace, module.toggle) + .on(module.get.event() + eventNamespace, module.intent.test) + ; + $item + .on('click' + eventNamespace, module.event.select) ; - $module .data(moduleNamespace, module) ; } }, + destroy: function() { + module.verbose('Destroying previous module for', $module); + $module + .off(namespace) + ; + }, + + event: { + + item: { + + click: function () { + var + value = $(this).data(metadata.value) || $(this).html() + ; + module.verbose('Determining select action'); + if( $.isFunction( module.action[settings.action] ) { + module.action[ settings.action ](value); + } + else { + module.error(errors.action); + } + } + + } + + }, + intent: { test: function(event) { module.debug('Checking if click was inside the dropdown', event.target); - if( $(event.target).closest($module).size() == 0 ) { - module.hide(); + if( $(event.target).closest($menu).size() == 0 ) { + module.toggle(); + event.stopPropagation(); } }, @@ -97,6 +129,22 @@ $.fn.dropdown = function(parameters) { }, + action: { + + nothing: function() {}, + + close: function() { + module.hide(); + }, + + form: function(value) { + module.debug('Adding selected value to hidden input', value); + $input.val(value); + module.hide(); + } + + } + get: { event: function() { @@ -122,13 +170,6 @@ $.fn.dropdown = function(parameters) { } }, - destroy: function() { - module.verbose('Destroying previous dropdown for', $module); - $module - .off(namespace) - ; - }, - animate: { show: function() { if(animation.show == 'show') { @@ -150,7 +191,6 @@ $.fn.dropdown = function(parameters) { } }, hide: function() { - console.log(animation.hide); if(animation.hide == 'hide') { $menu .hide() @@ -235,7 +275,7 @@ $.fn.dropdown = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { @@ -359,6 +399,8 @@ $.fn.dropdown.settings = { debug : true, performance : false, + action: 'close', + animation: { show: 'slide', hide: 'slide' @@ -371,11 +413,18 @@ $.fn.dropdown.settings = { onHide : function(){}, errors : { + action : 'You called a dropdown action that was not defined', method : 'The method you called is not defined.' }, + metadata: { + value: 'value' + }, + selector : { + input : 'input[type="hidden"]', menu : '.menu' + item : '.menu > .item' }, className : { diff --git a/node/src/documents/modules/dropdown.html b/node/src/documents/modules/dropdown.html index 256863e3f..55c9a2d53 100644 --- a/node/src/documents/modules/dropdown.html +++ b/node/src/documents/modules/dropdown.html @@ -60,13 +60,13 @@ type : 'UI Module'
A button can be formatted with a dropdown beside it
diff --git a/node/src/files/components/semantic/modules/behavior/state.js b/node/src/files/components/semantic/modules/behavior/state.js index f05887f5a..f7ee1638a 100644 --- a/node/src/files/components/semantic/modules/behavior/state.js +++ b/node/src/files/components/semantic/modules/behavior/state.js @@ -485,7 +485,7 @@ $.fn.state = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, error: function() { diff --git a/node/src/files/components/semantic/modules/checkbox.js b/node/src/files/components/semantic/modules/checkbox.js index 29a2c2d9b..44066009b 100644 --- a/node/src/files/components/semantic/modules/checkbox.js +++ b/node/src/files/components/semantic/modules/checkbox.js @@ -157,7 +157,7 @@ $.fn.checkbox = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { diff --git a/node/src/files/components/semantic/modules/dropdown.css b/node/src/files/components/semantic/modules/dropdown.css index ace5f836e..1113fab2a 100644 --- a/node/src/files/components/semantic/modules/dropdown.css +++ b/node/src/files/components/semantic/modules/dropdown.css @@ -17,6 +17,11 @@ display: inline-block; line-height: 1; white-space: nowrap; + -webkit-transition: border-radius 0.1s ease; + -moz-transition: border-radius 0.1s ease; + -o-transition: border-radius 0.1s ease; + -ms-transition: border-radius 0.1s ease; + transition: border-radius 0.1s ease; } .ui.dropdown .menu { position: absolute; @@ -30,11 +35,11 @@ -moz-border-radius: 0px 0px 0.325em 0.325em; -webkit-border-radius: 0px 0px 0.325em 0.325em; border-radius: 0px 0px 0.325em 0.325em; - -webkit-transition: opacity 0.2s ease-out; - -moz-transition: opacity 0.2s ease-out; - -o-transition: opacity 0.2s ease-out; - -ms-transition: opacity 0.2s ease-out; - transition: opacity 0.2s ease-out; + -webkit-transition: opacity 0.2s ease; + -moz-transition: opacity 0.2s ease; + -o-transition: opacity 0.2s ease; + -ms-transition: opacity 0.2s ease; + transition: opacity 0.2s ease; z-index: 11; } /* Flyout Direction */ diff --git a/node/src/files/components/semantic/modules/dropdown.js b/node/src/files/components/semantic/modules/dropdown.js index 99716859b..32f70286d 100644 --- a/node/src/files/components/semantic/modules/dropdown.js +++ b/node/src/files/components/semantic/modules/dropdown.js @@ -61,9 +61,8 @@ $.fn.dropdown = function(parameters) { } else { module.verbose('Initializing dropdown with bound events', $module); - $module - .on(module.get.event() + eventNamespace, module.toggle) + .on(module.get.event() + eventNamespace, module.intent.test) ; $module @@ -76,8 +75,9 @@ $.fn.dropdown = function(parameters) { test: function(event) { module.debug('Checking if click was inside the dropdown', event.target); - if( $(event.target).closest($module).size() == 0 ) { - module.hide(); + if( $(event.target).closest($menu).size() == 0 ) { + module.toggle(); + event.stopPropagation(); } }, @@ -150,7 +150,6 @@ $.fn.dropdown = function(parameters) { } }, hide: function() { - console.log(animation.hide); if(animation.hide == 'hide') { $menu .hide() @@ -235,7 +234,7 @@ $.fn.dropdown = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { @@ -359,6 +358,8 @@ $.fn.dropdown.settings = { debug : true, performance : false, + action: 'close', + animation: { show: 'slide', hide: 'slide' diff --git a/spec/modules/module.commented.js b/spec/modules/module.commented.js index c5cd3eb83..724238b5d 100755 --- a/spec/modules/module.commented.js +++ b/spec/modules/module.commented.js @@ -201,7 +201,7 @@ $.fn.example = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, diff --git a/spec/modules/module.js b/spec/modules/module.js index 96ac35c4a..aba18d662 100755 --- a/spec/modules/module.js +++ b/spec/modules/module.js @@ -127,7 +127,7 @@ $.fn.example = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { diff --git a/src/modules/behavior/state.js b/src/modules/behavior/state.js index f05887f5a..f7ee1638a 100755 --- a/src/modules/behavior/state.js +++ b/src/modules/behavior/state.js @@ -485,7 +485,7 @@ $.fn.state = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, error: function() { diff --git a/src/modules/checkbox.js b/src/modules/checkbox.js index 29a2c2d9b..8653f8918 100755 --- a/src/modules/checkbox.js +++ b/src/modules/checkbox.js @@ -66,6 +66,13 @@ $.fn.checkbox = function(parameters) { } }, + destroy: function() { + module.verbose('Destroying previous module for', $module); + $module + .off(namespace) + ; + }, + is: { radio: function() { return $module @@ -83,13 +90,6 @@ $.fn.checkbox = function(parameters) { } }, - destroy: function() { - module.verbose('Destroying previous module for', $module); - $module - .off(namespace) - ; - }, - enable: function() { module.debug('Enabling checkbox'); $module @@ -157,7 +157,7 @@ $.fn.checkbox = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { diff --git a/src/modules/dropdown.js b/src/modules/dropdown.js index 99716859b..7a7e9c2ee 100644 --- a/src/modules/dropdown.js +++ b/src/modules/dropdown.js @@ -34,6 +34,8 @@ $.fn.dropdown = function(parameters) { var $module = $(this), $menu = $(this).find(settings.selector.menu), + $item = $(this).find(settings.selector.item), + $input = $(this).find(settings.selector.input) isTouchDevice = ('ontouchstart' in document.documentElement), @@ -61,23 +63,53 @@ $.fn.dropdown = function(parameters) { } else { module.verbose('Initializing dropdown with bound events', $module); - $module - .on(module.get.event() + eventNamespace, module.toggle) + .on(module.get.event() + eventNamespace, module.intent.test) + ; + $item + .on('click' + eventNamespace, module.event.select) ; - $module .data(moduleNamespace, module) ; } }, + destroy: function() { + module.verbose('Destroying previous module for', $module); + $module + .off(namespace) + ; + }, + + event: { + + item: { + + click: function () { + var + value = $(this).data(metadata.value) || $(this).html() + ; + module.verbose('Determining select action'); + if( $.isFunction( module.action[settings.action] ) { + module.action[ settings.action ](value); + } + else { + module.error(errors.action); + } + } + + } + + }, + intent: { test: function(event) { module.debug('Checking if click was inside the dropdown', event.target); - if( $(event.target).closest($module).size() == 0 ) { - module.hide(); + if( $(event.target).closest($menu).size() == 0 ) { + module.toggle(); + event.stopPropagation(); } }, @@ -97,6 +129,22 @@ $.fn.dropdown = function(parameters) { }, + action: { + + nothing: function() {}, + + close: function() { + module.hide(); + }, + + form: function(value) { + module.debug('Adding selected value to hidden input', value); + $input.val(value); + module.hide(); + } + + } + get: { event: function() { @@ -122,13 +170,6 @@ $.fn.dropdown = function(parameters) { } }, - destroy: function() { - module.verbose('Destroying previous dropdown for', $module); - $module - .off(namespace) - ; - }, - animate: { show: function() { if(animation.show == 'show') { @@ -150,7 +191,6 @@ $.fn.dropdown = function(parameters) { } }, hide: function() { - console.log(animation.hide); if(animation.hide == 'hide') { $menu .hide() @@ -235,7 +275,7 @@ $.fn.dropdown = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); } }, verbose: function() { @@ -359,6 +399,8 @@ $.fn.dropdown.settings = { debug : true, performance : false, + action: 'close', + animation: { show: 'slide', hide: 'slide' @@ -371,11 +413,18 @@ $.fn.dropdown.settings = { onHide : function(){}, errors : { + action : 'You called a dropdown action that was not defined', method : 'The method you called is not defined.' }, + metadata: { + value: 'value' + }, + selector : { + input : 'input[type="hidden"]', menu : '.menu' + item : '.menu > .item' }, className : { diff --git a/src/modules/dropdown.less b/src/modules/dropdown.less index a6feff2e0..07dd82833 100644 --- a/src/modules/dropdown.less +++ b/src/modules/dropdown.less @@ -21,6 +21,12 @@ line-height: 1; white-space: nowrap; + + -webkit-transition: border-radius 0.1s ease; + -moz-transition: border-radius 0.1s ease; + -o-transition: border-radius 0.1s ease; + -ms-transition: border-radius 0.1s ease; + transition: border-radius 0.1s ease; } .ui.dropdown .menu { @@ -52,11 +58,11 @@ -webkit-border-radius: 0px 0px 0.325em 0.325em; border-radius: 0px 0px 0.325em 0.325em; - -webkit-transition: opacity 0.2s ease-out; - -moz-transition: opacity 0.2s ease-out; - -o-transition: opacity 0.2s ease-out; - -ms-transition: opacity 0.2s ease-out; - transition: opacity 0.2s ease-out; + -webkit-transition: opacity 0.2s ease; + -moz-transition: opacity 0.2s ease; + -o-transition: opacity 0.2s ease; + -ms-transition: opacity 0.2s ease; + transition: opacity 0.2s ease; z-index: 11; }