Commit 652e17c6ca36341c8b5f36c66780d9bae9bfc721
Search page modular styling
mix irving committed on 2/4/2017, 5:14:01 AMParent: e50286f70acfd2b61a42f560edfdfc1083b1e0fc
Files changed
modules_basic/scroller.mcss | changed |
modules_extra/search.js | changed |
modules_extra/search.mcss | added |
modules_basic/scroller.mcss | |||
---|---|---|---|
@@ -8,16 +8,16 @@ | |||
8 | 8 … | min-height: 0px | |
9 | 9 … | ||
10 | 10 … | div.wrapper { | |
11 | 11 … | flex: 1 | |
12 | - max-width: 600px | ||
12 … | + width: 600px | ||
13 | 13 … | margin-left: auto | |
14 | 14 … | margin-right: auto | |
15 | 15 … | ||
16 | 16 … | section.content { | |
17 | 17 … | ||
18 | 18 … | div { | |
19 | - border-top: solid 1px gainsboro | ||
19 … | + border-bottom: solid 1px gainsboro | ||
20 | 20 … | } | |
21 | 21 … | } | |
22 | 22 … | } | |
23 | 23 … | } |
modules_extra/search.js | ||
---|---|---|
@@ -1,17 +1,22 @@ | ||
1 | -var h = require('hyperscript') | |
2 | -var u = require('../util') | |
3 | -var pull = require('pull-stream') | |
4 | -var Scroller = require('pull-scroll') | |
5 | -var TextNodeSearcher = require('text-node-searcher') | |
1 … | +const h = require('../h') | |
2 … | +const fs = require('fs') | |
3 … | +const { Value } = require('@mmckegg/mutant') | |
4 … | +const u = require('../util') | |
5 … | +const pull = require('pull-stream') | |
6 … | +const Scroller = require('pull-scroll') | |
7 … | +const TextNodeSearcher = require('text-node-searcher') | |
6 | 8 … | |
7 | 9 … | exports.needs = { |
8 | 10 … | build_scroller: 'first', |
9 | 11 … | message_render: 'first', |
10 | 12 … | sbot_log: 'first' |
11 | 13 … | } |
12 | 14 … | |
13 | -exports.gives = 'screen_view' | |
15 … | +exports.gives = { | |
16 … | + screen_view: true, | |
17 … | + mcss: true | |
18 … | +} | |
14 | 19 … | |
15 | 20 … | var whitespace = /\s+/ |
16 | 21 … | |
17 | 22 … | function andSearch(terms, inputs) { |
@@ -52,46 +57,57 @@ | ||
52 | 57 … | } |
53 | 58 … | |
54 | 59 … | exports.create = function (api) { |
55 | 60 … | |
56 | - return function (path) { | |
57 | - if(path[0] === '?') { | |
58 | - var query = path.substr(1).trim().split(whitespace) | |
59 | - var _matches = searchFilter(query) | |
61 … | + return { | |
62 … | + screen_view, | |
63 … | + mcss: () => fs.readFileSync(__filename.replace(/js$/, 'mcss'), 'utf8') | |
64 … | + } | |
60 | 65 … | |
61 | - var total = 0, matches = 0 | |
66 … | + function screen_view (path) { | |
67 … | + if (path[0] !== '?') return | |
62 | 68 … | |
63 | - var header = h('div.search_header', '') | |
64 | - var { container, content } = api.build_scroller({ prepend: header}) | |
65 | - container.id = path // helps tabs find this tab | |
69 … | + var query = path.substr(1).trim().split(whitespace) | |
70 … | + var _matches = searchFilter(query) | |
66 | 71 … | |
67 | - function matchesQuery (data) { | |
68 | - total++ | |
69 | - var m = _matches(data) | |
70 | - if(m) matches++ | |
71 | - header.textContent = 'searched:'+total+', found:'+matches | |
72 | - return m | |
73 | - } | |
72 … | + const searched = Value(0) | |
73 … | + const matches = Value(0) | |
74 … | + const searchHeader = h('Search', [ | |
75 … | + h('header', h('h1', query)), | |
76 … | + h('section.details', [ | |
77 … | + h('div.searched', ['Searched: ', searched]), | |
78 … | + h('div.matches', [matches, ' matches']) | |
79 … | + ]) | |
80 … | + ]) | |
81 … | + var { container, content } = api.build_scroller({ prepend: searchHeader }) | |
82 … | + container.id = path // helps tabs find this tab | |
74 | 83 … | |
75 | - function renderMsg(msg) { | |
76 | - var el = api.message_render(msg) | |
77 | - highlight(el, createOrRegExp(query)) | |
78 | - return el | |
79 | - } | |
84 … | + function matchesQuery (data) { | |
85 … | + searched.set(searched() + 1) | |
86 … | + var m = _matches(data) | |
87 … | + if(m) matches.set(matches() +1 ) | |
88 … | + | |
89 … | + return m | |
90 … | + } | |
80 | 91 … | |
81 | - pull( | |
82 | - api.sbot_log({old: false}), | |
83 | - pull.filter(matchesQuery), | |
84 | - Scroller(container, content, renderMsg, true, false) | |
85 | - ) | |
92 … | + function renderMsg(msg) { | |
93 … | + var el = api.message_render(msg) | |
94 … | + highlight(el, createOrRegExp(query)) | |
95 … | + return el | |
96 … | + } | |
86 | 97 … | |
87 | - pull( | |
88 | - u.next(api.sbot_log, {reverse: true, limit: 500, live: false}), | |
89 | - pull.filter(matchesQuery), | |
90 | - Scroller(container, content, renderMsg, false, false) | |
91 | - ) | |
98 … | + pull( | |
99 … | + api.sbot_log({old: false}), | |
100 … | + pull.filter(matchesQuery), | |
101 … | + Scroller(container, content, renderMsg, true, false) | |
102 … | + ) | |
92 | 103 … | |
93 | - return container | |
94 | - } | |
104 … | + pull( | |
105 … | + u.next(api.sbot_log, {reverse: true, limit: 500, live: false}), | |
106 … | + pull.filter(matchesQuery), | |
107 … | + Scroller(container, content, renderMsg, false, false) | |
108 … | + ) | |
109 … | + | |
110 … | + return container | |
95 | 111 … | } |
112 … | +} | |
96 | 113 … | |
97 | -} |
modules_extra/search.mcss | ||
---|---|---|
@@ -1,0 +1,22 @@ | ||
1 … | +Search { | |
2 … | + padding: .5rem | |
3 … | + border-bottom: solid 1px gainsboro | |
4 … | + | |
5 … | + header { | |
6 … | + h1 { | |
7 … | + } | |
8 … | + } | |
9 … | + | |
10 … | + section.details { | |
11 … | + display: flex | |
12 … | + justify-content: space-between | |
13 … | + | |
14 … | + font-family: monospace | |
15 … | + | |
16 … | + div.searched {} | |
17 … | + div.matched {} | |
18 … | + } | |
19 … | + | |
20 … | +} | |
21 … | + | |
22 … | + |
Built with git-ssb-web