Commit 85d5f606f656fc8680e28baf3d58d24898d23261

Authored by Dmitriy Zaporozhets
1 parent 2b921a6c

Labels autocomplete

app/assets/javascripts/main.js.coffee
... ... @@ -13,6 +13,12 @@ window.errorMessage = (message) ->
13 13 ehtml.html(message)
14 14 ehtml
15 15  
  16 +window.split = (val) ->
  17 + return val.split( /,\s*/ )
  18 +
  19 +window.extractLast = (term) ->
  20 + return split( term ).pop()
  21 +
16 22 # Disable button if text field is empty
17 23 window.disableButtonIfEmptyField = (field_selector, button_selector) ->
18 24 field = $(field_selector)
... ...
app/helpers/issues_helper.rb
... ... @@ -30,4 +30,10 @@ module IssuesHelper
30 30 open: "open"
31 31 }
32 32 end
  33 +
  34 + def labels_autocomplete_source
  35 + labels = @project.issues_labels.order('count DESC')
  36 + labels = labels.map{ |l| { label: l.name, value: l.name } }
  37 + labels.to_json
  38 + end
33 39 end
... ...
app/views/issues/_form.html.haml
... ... @@ -55,3 +55,36 @@
55 55 = link_to "Cancel", project_issues_path(@project), class: cancel_class
56 56 - else
57 57 = link_to "Cancel", project_issue_path(@project, @issue), class: cancel_class
  58 +
  59 +
  60 +
  61 +
  62 +:javascript
  63 + $(function(){
  64 + $("#issue_label_list")
  65 + .bind( "keydown", function( event ) {
  66 + if ( event.keyCode === $.ui.keyCode.TAB &&
  67 + $( this ).data( "autocomplete" ).menu.active ) {
  68 + event.preventDefault();
  69 + }
  70 + })
  71 + .autocomplete({
  72 + minLength: 0,
  73 + source: function( request, response ) {
  74 + response( $.ui.autocomplete.filter(
  75 + #{raw labels_autocomplete_source}, extractLast( request.term ) ) );
  76 + },
  77 + focus: function() {
  78 + return false;
  79 + },
  80 + select: function(event, ui) {
  81 + var terms = split( this.value );
  82 + terms.pop();
  83 + terms.push( ui.item.value );
  84 + terms.push( "" );
  85 + this.value = terms.join( ", " );
  86 + return false;
  87 + }
  88 + });
  89 + });
  90 +
... ...