This repository has been archived by the owner on Nov 9, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 57
/
component-autocomplete.js
120 lines (106 loc) · 3.79 KB
/
component-autocomplete.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
*
* * Copyright 2013, Red Hat, Inc. and individual contributors as indicated by the
* * @author tags. See the copyright.txt file in the distribution for a full
* * listing of individual contributors.
* *
* * This is free software; you can redistribute it and/or modify it under the
* * terms of the GNU Lesser General Public License as published by the Free
* * Software Foundation; either version 2.1 of the License, or (at your option)
* * any later version.
* *
* * This software is distributed in the hope that it will be useful, but WITHOUT
* * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* * details.
* *
* * You should have received a copy of the GNU Lesser General Public License
* * along with this software; if not, write to the Free Software Foundation,
* * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* * site: http://www.fsf.org.
*/
jQuery(document).ready(function() {
jQuery(this).click(function(event) {
if (jQuery(event.target).attr("class") != 'autocomplete__results') {
jQuery('.autocomplete__results').remove();
}
});
//prevent form submit when enter key pressed in the input field.
jQuery('.autocomplete__input').keydown(function(event) {
if (isEnterKey(event)) {
event.preventDefault();
}
});
});
function onResultKeyPressed(autocomplete, event, submitFormFunction) {
var currentSelected = jQuery(autocomplete).find('.autocomplete__results')
.children('.is-selected');
if (isEnterKey(event)) {
event.preventDefault();
if (currentSelected.length != 0) {
onSubmitForm(currentSelected, submitFormFunction);
}
} else if (event.keyCode == 40) {
// key: down
if (currentSelected.length == 0
|| jQuery(currentSelected).next().length == 0) {
selectRow(jQuery(autocomplete).find('.autocomplete__results').children(
'li').first());
} else {
deselectRow(currentSelected);
selectRow(jQuery(currentSelected).next("li"));
}
} else if (event.keyCode == 38) {
// key: up
if (currentSelected.length == 0) {
selectRow(jQuery(autocomplete).find('.autocomplete__results').children(
'li').last());
} else {
deselectRow(currentSelected);
selectRow(jQuery(currentSelected).prev("li"));
}
}
}
function onSubmitForm(row, submitFormFunction) {
submitFormFunction(jQuery(row).children("input").first().val());
jQuery(row).parent().remove();
}
function selectRow(row) {
jQuery(row).addClass("is-selected");
}
function deselectRow(row) {
jQuery(row).removeClass("is-selected");
}
function isArrowKey(keyCode) {
return keyCode == 38 || keyCode == 40 || keyCode == 39 || keyCode == 37;
}
function isEnterKey(event) {
return event.keyCode == 13;
}
function onValueChange(inputField, event, renderResultFn) {
if (!isArrowKey(event.keyCode)) {
var minLength = parseInt(jQuery(inputField).next().val());
if (jQuery(inputField).val().length >= minLength) {
renderResultFn(jQuery(inputField).val())
}
}
}
function registerMouseEvent(autocompleteId, submitFormFunction) {
jQuery("[id='" + autocompleteId + "']").find('.autocomplete__results')
.children('.autocomplete__result').each(function() {
jQuery(this).mouseover(function() {
selectRow(this);
});
jQuery(this).mouseout(function() {
deselectRow(this);
});
jQuery(this).click(function() {
onSubmitForm(this, submitFormFunction);
});
});
var firstResult = jQuery("[id='" + autocompleteId + "']").find(
'.autocomplete__results').children('.autocomplete__result').first();
if (firstResult.length != 0) {
selectRow(firstResult);
}
}