git ssb

16+

Dominic / patchbay



Tree: 412108a3ce4d28bc54066fc6ee4272fa7c1eee57

Files: 412108a3ce4d28bc54066fc6ee4272fa7c1eee57 / main / html / search.js

1776 bytesRaw
1const nest = require('depnest')
2const { h } = require('mutant')
3const addSuggest = require('suggest-box')
4
5exports.gives = nest('main.html.search')
6
7exports.needs = nest({
8 'about.async.suggest': 'first',
9 'channel.async.suggest': 'first'
10})
11
12exports.create = function (api) {
13
14 return nest('main.html.search', search)
15
16 function search (go) {
17
18 const getProfileSuggestions = api.about.async.suggest()
19 const getChannelSuggestions = api.channel.async.suggest()
20
21 const input = h('input', {
22 type: 'search',
23 placeholder: '?search, @name, #channel',
24 'ev-keyup': ev => {
25 switch (ev.keyCode) {
26 case 13: // enter
27 if (go(input.value.trim(), !ev.ctrlKey))
28 input.blur()
29 return
30 case 27: // escape
31 ev.preventDefault()
32 input.blur()
33 return
34 }
35 }
36 })
37 input.addEventListener('suggestselect', ev => {
38 if (go(input.value.trim(), !ev.ctrlKey))
39 input.blur()
40 })
41 const search = h('Search', input)
42
43 search.input = input
44 search.activate = (sigil, ev) => {
45 input.focus()
46 ev.preventDefault()
47 if (input.value[0] === sigil) {
48 input.selectionStart = 1
49 input.selectionEnd = input.value.length
50 } else {
51 input.value = sigil
52 }
53 }
54
55 addSuggest(input, (inputText, cb) => {
56 if (inputText[0] === '@') {
57 cb(null, getProfileSuggestions(inputText.slice(1)).map(s => {
58 s.value = s.id
59 return s
60 }))
61 } else if (inputText[0] === '#') {
62 cb(null, getChannelSuggestions(inputText.slice(1)).map(s => {
63 s.value = s.id
64 return s
65 }))
66 }
67 }, {cls: 'SuggestBox'})
68
69 return search
70 }
71
72}
73
74
75
76

Built with git-ssb-web