forked from sjas/vimflowy
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsearch.js
58 lines (44 loc) · 1.52 KB
/
search.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
const searchCommand = () => {
const searchBox = document.getElementById('searchBox')
searchBox.className += ' evenDirtierSearchHack'
searchBox.focus()
}
const searchBox = (setState, getState, calculateOffset) => {
document.getElementById('searchBox').addEventListener('focus', event => {
if (event.sourceCapabilities) {
return
}
if (event.target.className.includes('evenDirtierSearchHack')) {
event.target.className = event.target.className.replace('evenDirtierSearchHack', '').trim()
return
}
debug('dirty escape search hack')
setCursorAfterVerticalMove(calculateOffset, projectAncestor(event.relatedTarget))
})
document.getElementById('searchBox').addEventListener('keydown', event => {
if (event.keyCode !== 13) {
window.clearTimeout(getState().searchFocusRetryTimeout)
return
}
event.preventDefault()
const focusFirstSearchResult = () => {
const firstMatch = document.querySelector('.searching .mainTreeRoot .project')
if (firstMatch) {
setCursorAfterVerticalMove(calculateOffset, firstMatch)
}
return Boolean(firstMatch)
}
const keepTrying = callback => {
debug('trying to focus first search result')
if (callback()) {
return
}
const searchFocusRetryTimeout = window.setTimeout(() => {
setState(s => ({searchFocusRetryTimeout: null}))
keepTrying(callback)
}, 200)
setState(s => ({searchFocusRetryTimeout}))
}
keepTrying(focusFirstSearchResult)
})
}