git ssb

0+

alanz / patchwork



forked from Matt McKegg / patchwork

Tree: a61adf51b6aeb00c6018ce2fb80cba9383b52625

Files: a61adf51b6aeb00c6018ce2fb80cba9383b52625 / modules / app / html / search.js

1678 bytesRaw
1var h = require('mutant/h')
2var nest = require('depnest')
3var addSuggest = require('suggest-box')
4
5exports.needs = nest({
6 'profile.async.suggest': 'first',
7 'channel.async.suggest': 'first'
8})
9
10exports.gives = nest('app.html.search')
11
12exports.create = function (api) {
13 return nest('app.html.search', function (setView) {
14 var getProfileSuggestions = api.profile.async.suggest()
15 var getChannelSuggestions = api.channel.async.suggest()
16 var searchBox = h('input.search', {
17 type: 'search',
18 placeholder: 'word, @key, #channel',
19 'ev-suggestselect': (ev) => {
20 setView(ev.detail.id)
21 searchBox.value = ev.detail.id
22 },
23 'ev-keydown': (ev) => {
24 if (ev.code === 'Enter') {
25 doSearch()
26 ev.preventDefault()
27 }
28 }
29 })
30
31 setImmediate(() => {
32 addSuggest(searchBox, (inputText, cb) => {
33 if (inputText[0] === '@') {
34 cb(null, getProfileSuggestions(inputText.slice(1)), {idOnly: true})
35 } else if (inputText[0] === '#') {
36 cb(null, getChannelSuggestions(inputText.slice(1)))
37 }
38 }, {cls: 'SuggestBox'})
39 })
40
41 return searchBox
42
43 function doSearch () {
44 var value = searchBox.value.trim()
45 if (value.startsWith('/') || value.startsWith('?') || value.startsWith('@') || value.startsWith('#') || value.startsWith('%')) {
46 if (value.startsWith('@') && value.length < 30) {
47 return // probably not a key
48 } else if (value.length > 2) {
49 setView(value)
50 }
51 } else if (value.trim()) {
52 if (value.length > 2) {
53 setView(`?${value.trim()}`)
54 }
55 }
56 }
57 })
58}
59

Built with git-ssb-web