forked from onozaty/redmine-view-customize-scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathautocomplete_assigned_to.js
78 lines (64 loc) · 1.99 KB
/
autocomplete_assigned_to.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
Path pattern: /issues
Type: JavaScript
担当者を入力補完を利用して選択できるようにします。
*/
$(function() {
function replaceSelectToAutocomplete(selectElement) {
var $select = $(selectElement);
if ($select.length == 0) {
return;
}
var options = $select.find('option[value!=""]')
.map(function() {
var $option = $(this);
return {
label: $option.text(),
optionValue: $option.val()
};
})
.toArray();
var $autocomplete = $('<input type="text" class="ui-autocomplete-input autocomplete" autocomplete="off">')
.autocomplete({
source: options,
minLength: 0,
select: function(event, ui) {
$select.val(ui.item.optionValue);
},
change: function(event, ui) {
if (ui.item != null) {
return;
}
var inputValue = $autocomplete.val();
var matchOption = $.grep(options, function(option) {
return option.label == inputValue;
})[0];
if (matchOption != null) {
$select.val(matchOption.optionValue);
} else {
$autocomplete.val('');
$select.val('');
}
}});
var currentSelectValue = $select.val();
if (currentSelectValue != '') {
var initAutcompleteValue = $.grep(options, function(option) {
return option.optionValue == currentSelectValue;
})[0].label;
$autocomplete.val(initAutcompleteValue);
}
$select.hide()
.after($autocomplete);
}
function setupAssignedAutocomplete() {
replaceSelectToAutocomplete('#issue_assigned_to_id');
}
// ステータス変更時などにDOMが差し替えられるので
// フォームの内容が書き変わるたびに表示切替
var _replaceIssueFormWith = replaceIssueFormWith;
replaceIssueFormWith = function(html){
_replaceIssueFormWith(html);
setupAssignedAutocomplete();
};
setupAssignedAutocomplete();
});