diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee index 3334439ca87643905de7d60546572c4ce598cdfe..f6c398c0acf17f78f3d685556220ddaceee8e983 100644 --- a/app/assets/javascripts/main.js.coffee +++ b/app/assets/javascripts/main.js.coffee @@ -13,6 +13,12 @@ window.errorMessage = (message) -> ehtml.html(message) ehtml +window.split = (val) -> + return val.split( /,\s*/ ) + +window.extractLast = (term) -> + return split( term ).pop() + # Disable button if text field is empty window.disableButtonIfEmptyField = (field_selector, button_selector) -> field = $(field_selector) diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 6b21f463c4c3318f594686ea554230d29089de14..264b764fa26367f207294a64703409bc47c97595 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -30,4 +30,10 @@ module IssuesHelper open: "open" } end + + def labels_autocomplete_source + labels = @project.issues_labels.order('count DESC') + labels = labels.map{ |l| { label: l.name, value: l.name } } + labels.to_json + end end diff --git a/app/views/issues/_form.html.haml b/app/views/issues/_form.html.haml index 670b4e059f4fe87f84fce15bef2fe02641ddd152..8a9a91a36a8153c72876cfe02783cfc58c9b3b62 100644 --- a/app/views/issues/_form.html.haml +++ b/app/views/issues/_form.html.haml @@ -55,3 +55,36 @@ = link_to "Cancel", project_issues_path(@project), class: cancel_class - else = link_to "Cancel", project_issue_path(@project, @issue), class: cancel_class + + + + +:javascript + $(function(){ + $("#issue_label_list") + .bind( "keydown", function( event ) { + if ( event.keyCode === $.ui.keyCode.TAB && + $( this ).data( "autocomplete" ).menu.active ) { + event.preventDefault(); + } + }) + .autocomplete({ + minLength: 0, + source: function( request, response ) { + response( $.ui.autocomplete.filter( + #{raw labels_autocomplete_source}, extractLast( request.term ) ) ); + }, + focus: function() { + return false; + }, + select: function(event, ui) { + var terms = split( this.value ); + terms.pop(); + terms.push( ui.item.value ); + terms.push( "" ); + this.value = terms.join( ", " ); + return false; + } + }); + }); +