Files: 2f3fa2face6b2be68c4502ddf460be8c0783d0bc / modules_core / search-box.js
1302 bytesRaw
1 | |
2 | const h = require('../h') |
3 | const fs = require('fs') |
4 | |
5 | |
6 | exports.needs = { |
7 | suggest_search: 'map', //REWRITE |
8 | build_suggest_box: 'first' |
9 | } |
10 | |
11 | exports.gives = { |
12 | search_box: true, |
13 | mcss: true |
14 | } |
15 | |
16 | exports.create = function (api) { |
17 | |
18 | return { |
19 | search_box, |
20 | mcss: () => fs.readFileSync(__filename.replace(/js$/, 'mcss'), 'utf8') |
21 | } |
22 | |
23 | function search_box (go) { |
24 | var search = h('Search', [ |
25 | h('input', { |
26 | type: 'search', |
27 | placeholder: 'Commands', |
28 | 'ev-click': ev => { |
29 | switch (ev.keyCode) { |
30 | case 13: // enter |
31 | ev.stopPropagation() |
32 | suggestBox.complete() |
33 | |
34 | if (go(search.value.trim(), !ev.ctrlKey)) |
35 | search.blur() |
36 | return |
37 | case 27: // escape |
38 | ev.preventDefault() |
39 | search.blur() |
40 | return |
41 | } |
42 | } |
43 | }) |
44 | ]) |
45 | |
46 | const input = search.firstChild |
47 | search.activate = (sigil, ev) => { |
48 | input.focus() |
49 | ev.preventDefault() |
50 | if (input.value[0] === sigil) { |
51 | input.selectionStart = 1 |
52 | input.selectionEnd = input.value.length |
53 | } else { |
54 | input.value = sigil |
55 | } |
56 | } |
57 | |
58 | var suggestBox = api.build_suggest_box(input, api.suggest_search) |
59 | |
60 | return search |
61 | } |
62 | |
63 | } |
64 | |
65 |
Built with git-ssb-web