This repository has been archived by the owner on Jul 29, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.engine.traditional.js
80 lines (66 loc) · 2.28 KB
/
app.engine.traditional.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
(function($, _, Common, exports) {
exports.startEngine = startEngine
function startEngine() {
var isEqualToLast = IsEqualToLast()
var switchLatest = SwitchLatest()
toggleButtonEnabled(false)
$('#search .controls input').on('keyup', _.debounce(function(e) {
var input = $.trim(e.currentTarget.value)
var isValidInputForButton = isInputValidForButton(input)
if (isValidInputForButton && !isEqualToLast(input)) {
onSearchTerm(input)
toggleButtonEnabled(false)
} else {
toggleButtonEnabled(isValidInputForButton)
}
}, 500))
$('#search .controls button').on('click', function() {
var input = getSearchInput()
if (isInputValidForButton(input)) onSearchTerm(input)
toggleButtonEnabled(false)
})
function getSearchInput() { return $.trim($('#search input').val()) }
function onSearchTerm(term) {
toggleLoadingIndicator(true)
switchLatest(Common.searchService(term))
.done(onSearchSuccess)
.fail(onSearchFailure)
.always(onSearchComplete)
}
function isInputValidForButton(input) { return !_.isEmpty(input) }
function onSearchComplete() {
toggleLoadingIndicator(false)
toggleButtonEnabled(isInputValidForButton(getSearchInput()))
}
}
function onSearchSuccess(results) {
Common.showSearchSuccess($('#search .results'), results)
}
function onSearchFailure(message) {
Common.showSearchFailure($('#search .results'), message)
}
function toggleLoadingIndicator(enable) {
$('#search .controls .searchButton').toggleClass('loading', enable)
}
function toggleButtonEnabled(enable) {
$('#search .controls button').prop('disabled', !enable)
}
function IsEqualToLast() {
var lastNonEqual
return function(current) {
var isEqual = current === lastNonEqual
if (!isEqual) lastNonEqual = current
return isEqual
}
}
function SwitchLatest() {
var last
return function(promise) {
last = promise
var deferred = $.Deferred()
promise.done(function(e) { if (promise === last) deferred.resolve(e) })
promise.fail(function(e) { if (promise === last) deferred.reject(e) })
return deferred.promise()
}
}
})(window.jQuery, window._, window.App.Common, window.App)