From 4d0bfb2ef68eb8626defb73fd21a37d9c52e7d47 Mon Sep 17 00:00:00 2001 From: Jack Lukic Date: Tue, 28 May 2013 11:11:42 -0400 Subject: [PATCH] Extends dropdown to set default form value, more fixes Former-commit-id: 42b5814a5f769572a289725cd8c31cf0e6e8aa22 Former-commit-id: 2ecba8b56a102054fea6c1bc3420205aa46767fa --- build/minified/modules/dropdown.js | 90 ++++++++++++++----- build/minified/modules/dropdown.min.js | 2 +- build/packaged/modules/dropdown.js | 90 ++++++++++++++----- build/packaged/semantic.min.js.REMOVED.git-id | 2 +- build/uncompressed/modules/dropdown.js | 90 ++++++++++++++----- node/src/documents/modules/dropdown.html | 8 +- .../components/semantic/modules/dropdown.js | 90 ++++++++++++++----- src/modules/dropdown.js | 90 ++++++++++++++----- 8 files changed, 341 insertions(+), 121 deletions(-) mode change 100644 => 100755 node/src/documents/modules/dropdown.html mode change 100644 => 100755 src/modules/dropdown.js diff --git a/build/minified/modules/dropdown.js b/build/minified/modules/dropdown.js index b39a96b9b..ce5a41dfa 100644 --- a/build/minified/modules/dropdown.js +++ b/build/minified/modules/dropdown.js @@ -78,7 +78,9 @@ $.fn.dropdown = function(parameters) { .on(settings.on + eventNamespace, module.toggle) ; } - + if(settings.action == 'form') { + module.set.selected(); + } $item .on(module.get.selectEvent() + eventNamespace, module.event.item.click) ; @@ -116,8 +118,8 @@ $.fn.dropdown = function(parameters) { click: function () { var $choice = $(this), - name = $choice.data(metadata.name) || $choice.text(), - value = $choice.data(metadata.value) || name + text = $choice.data(metadata.text) || $choice.text(), + value = $choice.data(metadata.value) || text ; module.verbose('Adding active state to selected item'); $item @@ -126,8 +128,8 @@ $.fn.dropdown = function(parameters) { $choice .addClass(className.active) ; - module.action.determine(name, value); - $.proxy(settings.onChange, $menu.get())(name, value); + module.action.determine(text, value); + $.proxy(settings.onChange, $menu.get())(text, value); } } @@ -139,8 +141,8 @@ $.fn.dropdown = function(parameters) { test: function(event, callback) { module.debug('Determining whether event occurred in dropdown', event.target); callback = callback || function(){}; - if( $(event.target).closest($menu).size() == 0 ) { - module.verbose('Triggering event', callback) + if( $(event.target).closest($menu).size() === 0 ) { + module.verbose('Triggering event', callback); callback(); } else { @@ -166,14 +168,14 @@ $.fn.dropdown = function(parameters) { action: { - determine: function(name, value) { + determine: function(text, value) { if( $.isFunction( module.action[settings.action] ) ) { module.verbose('Triggering preset action', settings.action); - module.action[ settings.action ](name, value); + module.action[ settings.action ](text, value); } else if( $.isFunction(settings.action) ) { module.verbose('Triggering user action', settings.action); - settings.action(name, value); + settings.action(text, value); } else { module.error(errors.action); @@ -186,16 +188,14 @@ $.fn.dropdown = function(parameters) { module.hide(); }, - changeText: function(name, value) { - module.debug('Changing text', name); - $text.text(name); + changeText: function(text, value) { + module.set.text(text); module.hide(); }, - form: function(name, value) { - module.debug('Adding selected value to hidden input', name, value); - $text.text(name); - $input.val(value); + form: function(text, value) { + module.set.text(text); + module.set.value(value); module.hide(); } @@ -207,6 +207,52 @@ $.fn.dropdown = function(parameters) { ? 'touchstart' : 'click' ; + }, + text: function() { + return $text.text(); + }, + value: function() { + return $input.val(); + }, + item: function(value) { + var + $selectedItem + ; + value = value || $input.val(); + $item + .each(function() { + if( $(this).data(metadata.value) == value ) { + $selectedItem = $(this); + } + }) + ; + return $selectedItem; + } + }, + + set: { + text: function(text) { + module.debug('Changing text', text); + $text.text(text); + }, + value: function(value) { + module.debug('Adding selected value to hidden input', value); + $input.val(value); + }, + selected: function(value) { + var + selectedValue = value || $input.val(), + $selectedItem = module.get.item(value), + selectedText = $selectedItem.data(metadata.text) || $selectedItem.text() + ; + module.debug('Setting selected menu item to', $selectedItem); + $item + .removeClass(className.active) + ; + $selectedItem + .addClass(className.active) + ; + module.set.text(selectedText); } }, @@ -348,7 +394,7 @@ $.fn.dropdown = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); } }, verbose: function() { @@ -358,9 +404,7 @@ $.fn.dropdown = function(parameters) { } }, error: function() { - if(console.log !== undefined) { - module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); - } + module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); }, performance: { log: function(message) { @@ -491,7 +535,7 @@ $.fn.dropdown.settings = { }, metadata: { - name : 'name', + text : 'text', value : 'value' }, @@ -499,7 +543,7 @@ $.fn.dropdown.settings = { menu : '.menu', item : '.menu > .item', text : '> .text', - input : '> input[type="hidden"]', + input : '> input[type="hidden"]' }, className : { diff --git a/build/minified/modules/dropdown.min.js b/build/minified/modules/dropdown.min.js index 401f0b3bc..5e563d5d8 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 i,a=e(this),s=e(n),r=e.extend(!0,{},e.fn.dropdown.settings,t),c="."+r.namespace,l="module-"+r.namespace,u=(a.selector||"",(new Date).getTime()),d=[],f=arguments[0],m="string"==typeof f,g=[].slice.call(arguments,1);return a.each(function(){var t,p=e(this),h=e(this).find(r.selector.menu),v=e(this).find(r.selector.item),b=e(this).find(r.selector.text),y=e(this).find(r.selector.input),x="ontouchstart"in n.documentElement,C=p.selector||"",w=this,T=p.data("module-"+r.namespace),k=r.className,N=r.metadata,z=r.namespace,P=r.animation,D=r.errors;t={initialize:function(){t.verbose("Initializing dropdown with bound events",p),x?p.on("touchstart"+c,t.event.test.toggle):"click"==r.on?p.on("click"+c,t.event.test.toggle):"hover"==r.on?p.on("mouseenter"+c,t.show).on("mouseleave"+c,t.delayedHide):p.on(r.on+c,t.toggle),v.on(t.get.selectEvent()+c,t.event.item.click),p.data(l,t)},destroy:function(){t.verbose("Destroying previous module for",p),p.off(z)},event:{stopPropagation:function(e){e.stopPropagation()},test:{toggle:function(e){t.intent.test(e,t.toggle),e.stopPropagation()},hide:function(e){t.intent.test(e,t.hide),e.stopPropagation()}},item:{click:function(){var n=e(this),o=n.data(N.name)||n.text(),i=n.data(N.value)||o;t.verbose("Adding active state to selected item"),v.removeClass(k.active),n.addClass(k.active),t.action.determine(o,i),e.proxy(r.onChange,h.get())(o,i)}}},intent:{test:function(n,o){t.debug("Determining whether event occurred in dropdown",n.target),o=o||function(){},0==e(n.target).closest(h).size()?(t.verbose("Triggering event",o),o()):t.verbose("Event occurred in dropdown, canceling callback")},bind:function(){t.verbose("Binding hide intent event to document"),s.on(t.get.selectEvent(),t.event.test.hide)},unbind:function(){t.verbose("Removing hide intent event from document"),s.off(t.get.selectEvent())}},action:{determine:function(n,o){e.isFunction(t.action[r.action])?(t.verbose("Triggering preset action",r.action),t.action[r.action](n,o)):e.isFunction(r.action)?(t.verbose("Triggering user action",r.action),r.action(n,o)):t.error(D.action)},nothing:function(){},hide:function(){t.hide()},changeText:function(e){t.debug("Changing text",e),b.text(e),t.hide()},form:function(e,n){t.debug("Adding selected value to hidden input",e,n),b.text(e),y.val(n),t.hide()}},get:{selectEvent:function(){return x?"touchstart":"click"}},is:{visible:function(){return h.is(":visible")},hidden:function(){return h.is(":not(:visible)")}},can:{click:function(){return x||"click"==r.on},show:function(){return!p.hasClass(k.disabled)}},animate:{show:function(){t.verbose("Doing menu showing animation"),"show"==P.show?h.show():"slide"==P.show&&h.clearQueue().children().clearQueue().css("opacity",0).delay(100).animate({opacity:1},300,"easeOutQuad").end().slideDown(200,"easeOutQuad")},hide:function(){t.verbose("Doing menu hiding animation"),"hide"==P.hide?h.hide():"slide"==P.hide&&h.clearQueue().children().clearQueue().css("opacity",1).animate({opacity:0},300,"easeOutQuad").end().delay(100).slideUp(200,"easeOutQuad")}},show:function(){clearTimeout(t.graceTimer),t.is.visible()||(t.debug("Showing dropdown"),p.addClass(k.visible),t.animate.show(),t.can.click()&&t.intent.bind(),e.proxy(r.onShow,h.get())())},delayedHide:function(){t.verbose("User moused away setting timer to hide dropdown"),t.graceTimer=setTimeout(t.hide,r.gracePeriod)},hide:function(){t.is.hidden()||(t.debug("Hiding dropdown"),p.removeClass(k.visible),t.can.click()&&t.intent.unbind(),t.animate.hide(),e.proxy(r.onHide,h.get())())},toggle:function(){t.verbose("Toggling menu visibility"),t.can.show()?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,i){return i===o?t[n]:(e.isPlainObject(n)?e.extend(!0,t,n):t[n]=i,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,i;r.performance&&(n=(new Date).getTime(),i=u||n,o=n-i,u=n,d.push({Element:w,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+": "+C+"("+a.size()+" elements)",0);C&&(t+="Performance ("+C+")"),(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,i,a){var s,r;return i=i||g,a=w||a,"string"==typeof n&&T!==o&&(n=n.split("."),s=n.length-1,e.each(n,function(n,i){return e.isPlainObject(T[i])&&n!=s?(T=T[i],!0):T[i]!==o?(r=T[i],!0):(t.error(D.method),!1)})),e.isFunction(r)?(t.verbose("Executing invoked function",r),r.apply(a,i)):r||!1}},m?(T===o&&t.initialize(),i=t.invoke(f)):(T!==o&&t.destroy(),t.initialize())}),i?i:this},e.fn.dropdown.settings={moduleName:"Dropdown Module",namespace:"dropdown",verbose:!0,debug:!0,performance:!1,on:"click",gracePeriod:300,action:"hide",animation:{show:"slide",hide:"slide"},onChange:function(){},onShow:function(){},onHide:function(){},errors:{action:"You called a dropdown action that was not defined",method:"The method you called is not defined."},metadata:{name:"name",value:"value"},selector:{menu:".menu",item:".menu > .item",text:"> .text",input:'> input[type="hidden"]'},className:{active:"active",disabled:"disabled",visible:"visible"}}})(jQuery,window,document); \ No newline at end of file +(function(e,t,n,o){e.fn.dropdown=function(t){var i,a=e(this),s=e(n),r=e.extend(!0,{},e.fn.dropdown.settings,t),c="."+r.namespace,l="module-"+r.namespace,u=(a.selector||"",(new Date).getTime()),d=[],f=arguments[0],m="string"==typeof f,g=[].slice.call(arguments,1);return a.each(function(){var t,p=e(this),h=e(this).find(r.selector.menu),v=e(this).find(r.selector.item),b=e(this).find(r.selector.text),y=e(this).find(r.selector.input),x="ontouchstart"in n.documentElement,C=p.selector||"",w=this,T=p.data("module-"+r.namespace),k=r.className,N=r.metadata,z=r.namespace,P=r.animation,D=r.errors;t={initialize:function(){t.verbose("Initializing dropdown with bound events",p),x?p.on("touchstart"+c,t.event.test.toggle):"click"==r.on?p.on("click"+c,t.event.test.toggle):"hover"==r.on?p.on("mouseenter"+c,t.show).on("mouseleave"+c,t.delayedHide):p.on(r.on+c,t.toggle),"form"==r.action&&t.set.selected(),v.on(t.get.selectEvent()+c,t.event.item.click),p.data(l,t)},destroy:function(){t.verbose("Destroying previous module for",p),p.off(z)},event:{stopPropagation:function(e){e.stopPropagation()},test:{toggle:function(e){t.intent.test(e,t.toggle),e.stopPropagation()},hide:function(e){t.intent.test(e,t.hide),e.stopPropagation()}},item:{click:function(){var n=e(this),o=n.data(N.text)||n.text(),i=n.data(N.value)||o;t.verbose("Adding active state to selected item"),v.removeClass(k.active),n.addClass(k.active),t.action.determine(o,i),e.proxy(r.onChange,h.get())(o,i)}}},intent:{test:function(n,o){t.debug("Determining whether event occurred in dropdown",n.target),o=o||function(){},0===e(n.target).closest(h).size()?(t.verbose("Triggering event",o),o()):t.verbose("Event occurred in dropdown, canceling callback")},bind:function(){t.verbose("Binding hide intent event to document"),s.on(t.get.selectEvent(),t.event.test.hide)},unbind:function(){t.verbose("Removing hide intent event from document"),s.off(t.get.selectEvent())}},action:{determine:function(n,o){e.isFunction(t.action[r.action])?(t.verbose("Triggering preset action",r.action),t.action[r.action](n,o)):e.isFunction(r.action)?(t.verbose("Triggering user action",r.action),r.action(n,o)):t.error(D.action)},nothing:function(){},hide:function(){t.hide()},changeText:function(e){t.set.text(e),t.hide()},form:function(e,n){t.set.text(e),t.set.value(n),t.hide()}},get:{selectEvent:function(){return x?"touchstart":"click"},text:function(){return b.text()},value:function(){return y.val()},item:function(t){var n;return t=t||y.val(),v.each(function(){e(this).data(N.value)==t&&(n=e(this))}),n}},set:{text:function(e){t.debug("Changing text",e),b.text(e)},value:function(e){t.debug("Adding selected value to hidden input",e),y.val(e)},selected:function(e){var n=(e||y.val(),t.get.item(e)),o=n.data(N.text)||n.text();t.debug("Setting selected menu item to",n),v.removeClass(k.active),n.addClass(k.active),t.set.text(o)}},is:{visible:function(){return h.is(":visible")},hidden:function(){return h.is(":not(:visible)")}},can:{click:function(){return x||"click"==r.on},show:function(){return!p.hasClass(k.disabled)}},animate:{show:function(){t.verbose("Doing menu showing animation"),"show"==P.show?h.show():"slide"==P.show&&h.clearQueue().children().clearQueue().css("opacity",0).delay(100).animate({opacity:1},300,"easeOutQuad").end().slideDown(200,"easeOutQuad")},hide:function(){t.verbose("Doing menu hiding animation"),"hide"==P.hide?h.hide():"slide"==P.hide&&h.clearQueue().children().clearQueue().css("opacity",1).animate({opacity:0},300,"easeOutQuad").end().delay(100).slideUp(200,"easeOutQuad")}},show:function(){clearTimeout(t.graceTimer),t.is.visible()||(t.debug("Showing dropdown"),p.addClass(k.visible),t.animate.show(),t.can.click()&&t.intent.bind(),e.proxy(r.onShow,h.get())())},delayedHide:function(){t.verbose("User moused away setting timer to hide dropdown"),t.graceTimer=setTimeout(t.hide,r.gracePeriod)},hide:function(){t.is.hidden()||(t.debug("Hiding dropdown"),p.removeClass(k.visible),t.can.click()&&t.intent.unbind(),t.animate.hide(),e.proxy(r.onHide,h.get())())},toggle:function(){t.verbose("Toggling menu visibility"),t.can.show()?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,i){return i===o?t[n]:(e.isPlainObject(n)?e.extend(!0,t,n):t[n]=i,o)},debug:function(){r.debug&&(t.performance.log(arguments[0]),t.debug=Function.prototype.bind.call(console.log,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(){t.error=Function.prototype.bind.call(console.log,console,r.moduleName+":")},performance:{log:function(e){var n,o,i;r.performance&&(n=(new Date).getTime(),i=u||n,o=n-i,u=n,d.push({Element:w,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+": "+C+"("+a.size()+" elements)",0);C&&(t+="Performance ("+C+")"),(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,i,a){var s,r;return i=i||g,a=w||a,"string"==typeof n&&T!==o&&(n=n.split("."),s=n.length-1,e.each(n,function(n,i){return e.isPlainObject(T[i])&&n!=s?(T=T[i],!0):T[i]!==o?(r=T[i],!0):(t.error(D.method),!1)})),e.isFunction(r)?(t.verbose("Executing invoked function",r),r.apply(a,i)):r||!1}},m?(T===o&&t.initialize(),i=t.invoke(f)):(T!==o&&t.destroy(),t.initialize())}),i?i:this},e.fn.dropdown.settings={moduleName:"Dropdown Module",namespace:"dropdown",verbose:!0,debug:!0,performance:!1,on:"click",gracePeriod:300,action:"hide",animation:{show:"slide",hide:"slide"},onChange:function(){},onShow:function(){},onHide:function(){},errors:{action:"You called a dropdown action that was not defined",method:"The method you called is not defined."},metadata:{text:"text",value:"value"},selector:{menu:".menu",item:".menu > .item",text:"> .text",input:'> input[type="hidden"]'},className:{active:"active",disabled:"disabled",visible:"visible"}}})(jQuery,window,document); \ No newline at end of file diff --git a/build/packaged/modules/dropdown.js b/build/packaged/modules/dropdown.js index b39a96b9b..ce5a41dfa 100644 --- a/build/packaged/modules/dropdown.js +++ b/build/packaged/modules/dropdown.js @@ -78,7 +78,9 @@ $.fn.dropdown = function(parameters) { .on(settings.on + eventNamespace, module.toggle) ; } - + if(settings.action == 'form') { + module.set.selected(); + } $item .on(module.get.selectEvent() + eventNamespace, module.event.item.click) ; @@ -116,8 +118,8 @@ $.fn.dropdown = function(parameters) { click: function () { var $choice = $(this), - name = $choice.data(metadata.name) || $choice.text(), - value = $choice.data(metadata.value) || name + text = $choice.data(metadata.text) || $choice.text(), + value = $choice.data(metadata.value) || text ; module.verbose('Adding active state to selected item'); $item @@ -126,8 +128,8 @@ $.fn.dropdown = function(parameters) { $choice .addClass(className.active) ; - module.action.determine(name, value); - $.proxy(settings.onChange, $menu.get())(name, value); + module.action.determine(text, value); + $.proxy(settings.onChange, $menu.get())(text, value); } } @@ -139,8 +141,8 @@ $.fn.dropdown = function(parameters) { test: function(event, callback) { module.debug('Determining whether event occurred in dropdown', event.target); callback = callback || function(){}; - if( $(event.target).closest($menu).size() == 0 ) { - module.verbose('Triggering event', callback) + if( $(event.target).closest($menu).size() === 0 ) { + module.verbose('Triggering event', callback); callback(); } else { @@ -166,14 +168,14 @@ $.fn.dropdown = function(parameters) { action: { - determine: function(name, value) { + determine: function(text, value) { if( $.isFunction( module.action[settings.action] ) ) { module.verbose('Triggering preset action', settings.action); - module.action[ settings.action ](name, value); + module.action[ settings.action ](text, value); } else if( $.isFunction(settings.action) ) { module.verbose('Triggering user action', settings.action); - settings.action(name, value); + settings.action(text, value); } else { module.error(errors.action); @@ -186,16 +188,14 @@ $.fn.dropdown = function(parameters) { module.hide(); }, - changeText: function(name, value) { - module.debug('Changing text', name); - $text.text(name); + changeText: function(text, value) { + module.set.text(text); module.hide(); }, - form: function(name, value) { - module.debug('Adding selected value to hidden input', name, value); - $text.text(name); - $input.val(value); + form: function(text, value) { + module.set.text(text); + module.set.value(value); module.hide(); } @@ -207,6 +207,52 @@ $.fn.dropdown = function(parameters) { ? 'touchstart' : 'click' ; + }, + text: function() { + return $text.text(); + }, + value: function() { + return $input.val(); + }, + item: function(value) { + var + $selectedItem + ; + value = value || $input.val(); + $item + .each(function() { + if( $(this).data(metadata.value) == value ) { + $selectedItem = $(this); + } + }) + ; + return $selectedItem; + } + }, + + set: { + text: function(text) { + module.debug('Changing text', text); + $text.text(text); + }, + value: function(value) { + module.debug('Adding selected value to hidden input', value); + $input.val(value); + }, + selected: function(value) { + var + selectedValue = value || $input.val(), + $selectedItem = module.get.item(value), + selectedText = $selectedItem.data(metadata.text) || $selectedItem.text() + ; + module.debug('Setting selected menu item to', $selectedItem); + $item + .removeClass(className.active) + ; + $selectedItem + .addClass(className.active) + ; + module.set.text(selectedText); } }, @@ -348,7 +394,7 @@ $.fn.dropdown = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); } }, verbose: function() { @@ -358,9 +404,7 @@ $.fn.dropdown = function(parameters) { } }, error: function() { - if(console.log !== undefined) { - module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); - } + module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); }, performance: { log: function(message) { @@ -491,7 +535,7 @@ $.fn.dropdown.settings = { }, metadata: { - name : 'name', + text : 'text', value : 'value' }, @@ -499,7 +543,7 @@ $.fn.dropdown.settings = { menu : '.menu', item : '.menu > .item', text : '> .text', - input : '> input[type="hidden"]', + input : '> input[type="hidden"]' }, className : { diff --git a/build/packaged/semantic.min.js.REMOVED.git-id b/build/packaged/semantic.min.js.REMOVED.git-id index 686b45e9d..f5e5038b6 100644 --- a/build/packaged/semantic.min.js.REMOVED.git-id +++ b/build/packaged/semantic.min.js.REMOVED.git-id @@ -1 +1 @@ -0657a243786e10353758f85935b46ba1b07094dc \ No newline at end of file +2c4195be95b12a3b16a540277bbbb730beedecca \ No newline at end of file diff --git a/build/uncompressed/modules/dropdown.js b/build/uncompressed/modules/dropdown.js index b39a96b9b..ce5a41dfa 100644 --- a/build/uncompressed/modules/dropdown.js +++ b/build/uncompressed/modules/dropdown.js @@ -78,7 +78,9 @@ $.fn.dropdown = function(parameters) { .on(settings.on + eventNamespace, module.toggle) ; } - + if(settings.action == 'form') { + module.set.selected(); + } $item .on(module.get.selectEvent() + eventNamespace, module.event.item.click) ; @@ -116,8 +118,8 @@ $.fn.dropdown = function(parameters) { click: function () { var $choice = $(this), - name = $choice.data(metadata.name) || $choice.text(), - value = $choice.data(metadata.value) || name + text = $choice.data(metadata.text) || $choice.text(), + value = $choice.data(metadata.value) || text ; module.verbose('Adding active state to selected item'); $item @@ -126,8 +128,8 @@ $.fn.dropdown = function(parameters) { $choice .addClass(className.active) ; - module.action.determine(name, value); - $.proxy(settings.onChange, $menu.get())(name, value); + module.action.determine(text, value); + $.proxy(settings.onChange, $menu.get())(text, value); } } @@ -139,8 +141,8 @@ $.fn.dropdown = function(parameters) { test: function(event, callback) { module.debug('Determining whether event occurred in dropdown', event.target); callback = callback || function(){}; - if( $(event.target).closest($menu).size() == 0 ) { - module.verbose('Triggering event', callback) + if( $(event.target).closest($menu).size() === 0 ) { + module.verbose('Triggering event', callback); callback(); } else { @@ -166,14 +168,14 @@ $.fn.dropdown = function(parameters) { action: { - determine: function(name, value) { + determine: function(text, value) { if( $.isFunction( module.action[settings.action] ) ) { module.verbose('Triggering preset action', settings.action); - module.action[ settings.action ](name, value); + module.action[ settings.action ](text, value); } else if( $.isFunction(settings.action) ) { module.verbose('Triggering user action', settings.action); - settings.action(name, value); + settings.action(text, value); } else { module.error(errors.action); @@ -186,16 +188,14 @@ $.fn.dropdown = function(parameters) { module.hide(); }, - changeText: function(name, value) { - module.debug('Changing text', name); - $text.text(name); + changeText: function(text, value) { + module.set.text(text); module.hide(); }, - form: function(name, value) { - module.debug('Adding selected value to hidden input', name, value); - $text.text(name); - $input.val(value); + form: function(text, value) { + module.set.text(text); + module.set.value(value); module.hide(); } @@ -207,6 +207,52 @@ $.fn.dropdown = function(parameters) { ? 'touchstart' : 'click' ; + }, + text: function() { + return $text.text(); + }, + value: function() { + return $input.val(); + }, + item: function(value) { + var + $selectedItem + ; + value = value || $input.val(); + $item + .each(function() { + if( $(this).data(metadata.value) == value ) { + $selectedItem = $(this); + } + }) + ; + return $selectedItem; + } + }, + + set: { + text: function(text) { + module.debug('Changing text', text); + $text.text(text); + }, + value: function(value) { + module.debug('Adding selected value to hidden input', value); + $input.val(value); + }, + selected: function(value) { + var + selectedValue = value || $input.val(), + $selectedItem = module.get.item(value), + selectedText = $selectedItem.data(metadata.text) || $selectedItem.text() + ; + module.debug('Setting selected menu item to', $selectedItem); + $item + .removeClass(className.active) + ; + $selectedItem + .addClass(className.active) + ; + module.set.text(selectedText); } }, @@ -348,7 +394,7 @@ $.fn.dropdown = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); } }, verbose: function() { @@ -358,9 +404,7 @@ $.fn.dropdown = function(parameters) { } }, error: function() { - if(console.log !== undefined) { - module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); - } + module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); }, performance: { log: function(message) { @@ -491,7 +535,7 @@ $.fn.dropdown.settings = { }, metadata: { - name : 'name', + text : 'text', value : 'value' }, @@ -499,7 +543,7 @@ $.fn.dropdown.settings = { menu : '.menu', item : '.menu > .item', text : '> .text', - input : '> input[type="hidden"]', + input : '> input[type="hidden"]' }, className : { diff --git a/node/src/documents/modules/dropdown.html b/node/src/documents/modules/dropdown.html old mode 100644 new mode 100755 index f41da6ece..a7c251ace --- a/node/src/documents/modules/dropdown.html +++ b/node/src/documents/modules/dropdown.html @@ -288,7 +288,7 @@ type : 'UI Module' Time in milliseconds to allow a user to move cursor back into dropdown before hiding when on event is set to hover - action + animation
{ @@ -299,9 +299,9 @@ type : 'UI Module' - animation - auto - Setting to true/false will determine whether an input will allow no selection. Auto will set disallow this behavior only for radio boxes + action + hide + Sets a default action to occur. Possible values are 'nothing', 'form', 'changeText', 'hide' diff --git a/node/src/files/components/semantic/modules/dropdown.js b/node/src/files/components/semantic/modules/dropdown.js index b39a96b9b..ce5a41dfa 100644 --- a/node/src/files/components/semantic/modules/dropdown.js +++ b/node/src/files/components/semantic/modules/dropdown.js @@ -78,7 +78,9 @@ $.fn.dropdown = function(parameters) { .on(settings.on + eventNamespace, module.toggle) ; } - + if(settings.action == 'form') { + module.set.selected(); + } $item .on(module.get.selectEvent() + eventNamespace, module.event.item.click) ; @@ -116,8 +118,8 @@ $.fn.dropdown = function(parameters) { click: function () { var $choice = $(this), - name = $choice.data(metadata.name) || $choice.text(), - value = $choice.data(metadata.value) || name + text = $choice.data(metadata.text) || $choice.text(), + value = $choice.data(metadata.value) || text ; module.verbose('Adding active state to selected item'); $item @@ -126,8 +128,8 @@ $.fn.dropdown = function(parameters) { $choice .addClass(className.active) ; - module.action.determine(name, value); - $.proxy(settings.onChange, $menu.get())(name, value); + module.action.determine(text, value); + $.proxy(settings.onChange, $menu.get())(text, value); } } @@ -139,8 +141,8 @@ $.fn.dropdown = function(parameters) { test: function(event, callback) { module.debug('Determining whether event occurred in dropdown', event.target); callback = callback || function(){}; - if( $(event.target).closest($menu).size() == 0 ) { - module.verbose('Triggering event', callback) + if( $(event.target).closest($menu).size() === 0 ) { + module.verbose('Triggering event', callback); callback(); } else { @@ -166,14 +168,14 @@ $.fn.dropdown = function(parameters) { action: { - determine: function(name, value) { + determine: function(text, value) { if( $.isFunction( module.action[settings.action] ) ) { module.verbose('Triggering preset action', settings.action); - module.action[ settings.action ](name, value); + module.action[ settings.action ](text, value); } else if( $.isFunction(settings.action) ) { module.verbose('Triggering user action', settings.action); - settings.action(name, value); + settings.action(text, value); } else { module.error(errors.action); @@ -186,16 +188,14 @@ $.fn.dropdown = function(parameters) { module.hide(); }, - changeText: function(name, value) { - module.debug('Changing text', name); - $text.text(name); + changeText: function(text, value) { + module.set.text(text); module.hide(); }, - form: function(name, value) { - module.debug('Adding selected value to hidden input', name, value); - $text.text(name); - $input.val(value); + form: function(text, value) { + module.set.text(text); + module.set.value(value); module.hide(); } @@ -207,6 +207,52 @@ $.fn.dropdown = function(parameters) { ? 'touchstart' : 'click' ; + }, + text: function() { + return $text.text(); + }, + value: function() { + return $input.val(); + }, + item: function(value) { + var + $selectedItem + ; + value = value || $input.val(); + $item + .each(function() { + if( $(this).data(metadata.value) == value ) { + $selectedItem = $(this); + } + }) + ; + return $selectedItem; + } + }, + + set: { + text: function(text) { + module.debug('Changing text', text); + $text.text(text); + }, + value: function(value) { + module.debug('Adding selected value to hidden input', value); + $input.val(value); + }, + selected: function(value) { + var + selectedValue = value || $input.val(), + $selectedItem = module.get.item(value), + selectedText = $selectedItem.data(metadata.text) || $selectedItem.text() + ; + module.debug('Setting selected menu item to', $selectedItem); + $item + .removeClass(className.active) + ; + $selectedItem + .addClass(className.active) + ; + module.set.text(selectedText); } }, @@ -348,7 +394,7 @@ $.fn.dropdown = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); } }, verbose: function() { @@ -358,9 +404,7 @@ $.fn.dropdown = function(parameters) { } }, error: function() { - if(console.log !== undefined) { - module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); - } + module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); }, performance: { log: function(message) { @@ -491,7 +535,7 @@ $.fn.dropdown.settings = { }, metadata: { - name : 'name', + text : 'text', value : 'value' }, @@ -499,7 +543,7 @@ $.fn.dropdown.settings = { menu : '.menu', item : '.menu > .item', text : '> .text', - input : '> input[type="hidden"]', + input : '> input[type="hidden"]' }, className : { diff --git a/src/modules/dropdown.js b/src/modules/dropdown.js old mode 100644 new mode 100755 index b39a96b9b..ce5a41dfa --- a/src/modules/dropdown.js +++ b/src/modules/dropdown.js @@ -78,7 +78,9 @@ $.fn.dropdown = function(parameters) { .on(settings.on + eventNamespace, module.toggle) ; } - + if(settings.action == 'form') { + module.set.selected(); + } $item .on(module.get.selectEvent() + eventNamespace, module.event.item.click) ; @@ -116,8 +118,8 @@ $.fn.dropdown = function(parameters) { click: function () { var $choice = $(this), - name = $choice.data(metadata.name) || $choice.text(), - value = $choice.data(metadata.value) || name + text = $choice.data(metadata.text) || $choice.text(), + value = $choice.data(metadata.value) || text ; module.verbose('Adding active state to selected item'); $item @@ -126,8 +128,8 @@ $.fn.dropdown = function(parameters) { $choice .addClass(className.active) ; - module.action.determine(name, value); - $.proxy(settings.onChange, $menu.get())(name, value); + module.action.determine(text, value); + $.proxy(settings.onChange, $menu.get())(text, value); } } @@ -139,8 +141,8 @@ $.fn.dropdown = function(parameters) { test: function(event, callback) { module.debug('Determining whether event occurred in dropdown', event.target); callback = callback || function(){}; - if( $(event.target).closest($menu).size() == 0 ) { - module.verbose('Triggering event', callback) + if( $(event.target).closest($menu).size() === 0 ) { + module.verbose('Triggering event', callback); callback(); } else { @@ -166,14 +168,14 @@ $.fn.dropdown = function(parameters) { action: { - determine: function(name, value) { + determine: function(text, value) { if( $.isFunction( module.action[settings.action] ) ) { module.verbose('Triggering preset action', settings.action); - module.action[ settings.action ](name, value); + module.action[ settings.action ](text, value); } else if( $.isFunction(settings.action) ) { module.verbose('Triggering user action', settings.action); - settings.action(name, value); + settings.action(text, value); } else { module.error(errors.action); @@ -186,16 +188,14 @@ $.fn.dropdown = function(parameters) { module.hide(); }, - changeText: function(name, value) { - module.debug('Changing text', name); - $text.text(name); + changeText: function(text, value) { + module.set.text(text); module.hide(); }, - form: function(name, value) { - module.debug('Adding selected value to hidden input', name, value); - $text.text(name); - $input.val(value); + form: function(text, value) { + module.set.text(text); + module.set.value(value); module.hide(); } @@ -207,6 +207,52 @@ $.fn.dropdown = function(parameters) { ? 'touchstart' : 'click' ; + }, + text: function() { + return $text.text(); + }, + value: function() { + return $input.val(); + }, + item: function(value) { + var + $selectedItem + ; + value = value || $input.val(); + $item + .each(function() { + if( $(this).data(metadata.value) == value ) { + $selectedItem = $(this); + } + }) + ; + return $selectedItem; + } + }, + + set: { + text: function(text) { + module.debug('Changing text', text); + $text.text(text); + }, + value: function(value) { + module.debug('Adding selected value to hidden input', value); + $input.val(value); + }, + selected: function(value) { + var + selectedValue = value || $input.val(), + $selectedItem = module.get.item(value), + selectedText = $selectedItem.data(metadata.text) || $selectedItem.text() + ; + module.debug('Setting selected menu item to', $selectedItem); + $item + .removeClass(className.active) + ; + $selectedItem + .addClass(className.active) + ; + module.set.text(selectedText); } }, @@ -348,7 +394,7 @@ $.fn.dropdown = function(parameters) { debug: function() { if(settings.debug) { module.performance.log(arguments[0]); - module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + module.debug = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); } }, verbose: function() { @@ -358,9 +404,7 @@ $.fn.dropdown = function(parameters) { } }, error: function() { - if(console.log !== undefined) { - module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); - } + module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); }, performance: { log: function(message) { @@ -491,7 +535,7 @@ $.fn.dropdown.settings = { }, metadata: { - name : 'name', + text : 'text', value : 'value' }, @@ -499,7 +543,7 @@ $.fn.dropdown.settings = { menu : '.menu', item : '.menu > .item', text : '> .text', - input : '> input[type="hidden"]', + input : '> input[type="hidden"]' }, className : {