-
-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathsearch.view.ts
86 lines (62 loc) · 1.46 KB
/
search.view.ts
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
namespace $.$$ {
/**
* Search input with suggest and clear button.
* @see https://mol.hyoo.ru/#!section=demos/demo=mol_search_demo
*/
export class $mol_search extends $.$mol_search {
@ $mol_mem
anchor_content() {
return [
this.Query(),
... this.query() ? [ this.Clear() ] : [],
]
}
@ $mol_mem
suggests_showed( next = true ) {
this.query()
if( !this.focused() ) return false
return next
}
suggest_selected( next? : string ) {
if( next === undefined ) return
this.query( next )
this.Query().focused( true )
}
nav_components() {
return [
this.Query(),
... this.menu_items(),
]
}
@ $mol_mem
nav_focused( component? : $mol_view ) {
if( !this.focused() ) return null
if( component == null ) {
for( let comp of this.nav_components() ) {
if( comp && comp.focused() ) return comp
}
return null
}
if( this.suggests_showed() ) {
this.ensure_visible( component, "center" )
component.focused( true )
}
return component
}
suggest_label( key: string ) {
return key
}
@ $mol_mem
menu_items() {
return this.suggests().map( ( suggest : string ) => this.Suggest( suggest ) )
}
suggest_select( id : string , event? : MouseEvent ) {
this.query( id )
this.Query().selection([ id.length, id.length ])
this.Query().focused( true )
}
clear( event? : Event ) {
this.query( '' )
}
}
}