Feature #3170 » AutocompleteForRelatedIssues.patch
test/functional/issues_controller_test.rb (working copy) | ||
---|---|---|
1249 | 1249 |
assert_not_nil assigns(:issues) |
1250 | 1250 |
assert assigns(:issues).include?(Issue.find(13)) |
1251 | 1251 |
end |
1252 | ||
1253 |
def test_auto_complete_with_scope_all_and_cross_project_relations |
|
1254 |
Setting.cross_project_issue_relations = '1' |
|
1255 |
get :aut_complete, :project_id => 'ecookbook', :q => '13', :scope => 'all' |
|
1256 |
assert_response :success |
|
1257 |
assert_not_nil assigns(:issues) |
|
1258 |
assert assigns(:issues).include?(Issue.find(13)) |
|
1259 |
end |
|
1252 | 1260 |
|
1261 |
def test_auto_complete_with_scope_all_without_cross_project_relations |
|
1262 |
get :aut_complete, :project_id => 'ecookbook', :q => '13', :scope => 'all' |
|
1263 |
assert_response :success |
|
1264 |
assert_nil assigns(:issues) |
|
1265 |
end |
|
1266 |
|
|
1253 | 1267 |
def test_destroy_issue_with_no_time_entries |
1254 | 1268 |
assert_nil TimeEntry.find_by_issue_id(2) |
1255 | 1269 |
@request.session[:user_id] = 2 |
app/controllers/issues_controller.rb (working copy) | ||
---|---|---|
405 | 405 |
def auto_complete |
406 | 406 |
@issues = [] |
407 | 407 |
q = params[:q].to_s |
408 |
query = (params[:scope] == "all" && Setting.cross_project_issue_relations?) ? Issue : @project.issues |
|
408 | 409 |
if q.match(/^\d+$/) |
409 |
@issues << @project.issues.visible.find_by_id(q.to_i)
|
|
410 |
@issues << query.visible.find_by_id(q.to_i)
|
|
410 | 411 |
end |
411 | 412 |
unless q.blank? |
412 |
@issues += @project.issues.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10)
|
|
413 |
@issues += query.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10)
|
|
413 | 414 |
end |
414 | 415 |
render :layout => false |
415 | 416 |
end |
public/javascripts/application.js (working copy) | ||
---|---|---|
206 | 206 |
}}); |
207 | 207 |
} |
208 | 208 | |
209 |
function observeRelatedIssueField(url) { |
|
210 |
new Ajax.Autocompleter('relation_issue_to_id', |
|
211 |
'related_issue_candidates', |
|
212 |
url, |
|
213 |
{ minChars: 3, |
|
214 |
frequency: 0.5, |
|
215 |
paramName: 'q', |
|
216 |
updateElement: function(value) { |
|
217 |
document.getElementById('relation_issue_to_id').value = value.id; |
|
218 |
}, |
|
219 |
parameters: 'scope=all' |
|
220 |
}); |
|
221 |
} |
|
222 | ||
209 | 223 |
/* shows and hides ajax indicator */ |
210 | 224 |
Ajax.Responders.register({ |
211 | 225 |
onCreate: function(){ |
public/stylesheets/application.css (working copy) | ||
---|---|---|
655 | 655 |
} |
656 | 656 | |
657 | 657 |
#parent_issue_candidates ul li {width: 500px;} |
658 |
#related_issue_candidates ul li {width: 500px;} |
|
658 | 659 | |
659 | 660 |
/***** Diff *****/ |
660 | 661 |
.diff_out { background: #fcc; } |
app/views/issue_relations/_form.rhtml (working copy) | ||
---|---|---|
2 | 2 | |
3 | 3 |
<p><%= f.select :relation_type, collection_for_relation_type_select, {}, :onchange => "setPredecessorFieldsVisibility();" %> |
4 | 4 |
<%= l(:label_issue) %> #<%= f.text_field :issue_to_id, :size => 6 %> |
5 |
<div id="related_issue_candidates" class="autocomplete"></div> |
|
6 |
<%= javascript_tag "observeRelatedIssueField('#{url_for(:controller => :issues, |
|
7 |
:action => :auto_complete, |
|
8 |
:id => @issue, |
|
9 |
:project_id => @project) }')" %> |
|
5 | 10 |
<span id="predecessor_fields" style="display:none;"> |
6 | 11 |
<%= l(:field_delay) %>: <%= f.text_field :delay, :size => 3 %> <%= l(:label_day_plural) %> |
7 | 12 |
</span> |
- « Previous
- 1
- 2
- Next »