Commit 81408e3008723f4b30952d1e379525f80a8ddf6d
Merge pull request #185 from ssbc/more_filters
re-add user filter, add root-only filtermix irving authored on 3/18/2018, 5:59:25 AM
GitHub committed on 3/18/2018, 5:59:25 AM
Parent: 763857ca6f3f257c3bef51274852277c073fadf8
Parent: 7d91615511c10dc2290684814abc7dd43da98917
Files changed
app/html/filter.js | changed |
app/html/filter.mcss | changed |
app/html/filter.js | ||
---|---|---|
@@ -3,15 +3,15 @@ | ||
3 | 3 … | const Abort = require('pull-abortable') |
4 | 4 … | const pull = require('pull-stream') |
5 | 5 … | const addSuggest = require('suggest-box') |
6 | 6 … | const { isFeed } = require('ssb-ref') |
7 | -const some = require('lodash/some') | |
8 | 7 … | const get = require('lodash/get') |
9 | 8 … | const isEqual = require('lodash/isEqual') |
10 | 9 … | |
11 | 10 … | exports.gives = nest('app.html.filter') |
12 | 11 … | |
13 | 12 … | exports.needs = nest({ |
13 … | + 'about.async.suggest': 'first', | |
14 | 14 … | 'channel.async.suggest': 'first', |
15 | 15 … | 'contact.obs.following': 'first', |
16 | 16 … | 'keys.sync.id': 'first', |
17 | 17 … | 'settings.obs.get': 'first', |
@@ -28,30 +28,29 @@ | ||
28 | 28 … | |
29 | 29 … | const myId = api.keys.sync.id() |
30 | 30 … | const peopleIFollow = api.contact.obs.following(myId) |
31 | 31 … | |
32 | - const { set } = api.settings.sync | |
33 | - | |
34 | 32 … | const filterSettings = api.settings.obs.get('filter', {exclude: {}}) |
35 | 33 … | |
36 | - const channelInput = h('input', | |
37 | - { value: filterSettings().exclude.channels, | |
38 | - 'ev-keyup': (ev) => { | |
39 | - var text = ev.target.value | |
40 | - if (text.length == 0 || ev.which == 13) { | |
41 | - api.settings.sync.set({ | |
42 | - filter: { | |
43 | - exclude: { | |
44 | - channels: text | |
45 | - } | |
34 … | + const channelInput = h('input', { | |
35 … | + value: filterSettings().exclude.channels, | |
36 … | + 'ev-keyup': (ev) => { | |
37 … | + var text = ev.target.value | |
38 … | + if (text.length === 0 || ev.which === 13) { | |
39 … | + api.settings.sync.set({ | |
40 … | + filter: { | |
41 … | + exclude: { | |
42 … | + channels: text | |
46 | 43 … | } |
47 | - }) | |
48 | - draw() | |
49 | - } | |
44 … | + } | |
45 … | + }) | |
46 … | + draw() | |
50 | 47 … | } |
51 | 48 … | } |
52 | - ) | |
49 … | + }) | |
53 | 50 … | |
51 … | + const userInput = h('input') | |
52 … | + | |
54 | 53 … | const isFiltered = computed(filterSettings, (filterSettings) => { |
55 | 54 … | const _settings = Object.assign({}, filterSettings) |
56 | 55 … | delete _settings.defaults |
57 | 56 … | |
@@ -70,13 +69,19 @@ | ||
70 | 69 … | 'Filter', |
71 | 70 … | h('i.fa.fa-filter') |
72 | 71 … | ]), |
73 | 72 … | h('section', [ |
73 … | + h('div.users', [ | |
74 … | + toggle({ type: 'peopleIFollow', filterGroup: 'only', label: 'Only people I follow' }), | |
75 … | + h('div.user-filter', [ | |
76 … | + h('label', 'Only this user (temporary filter):'), | |
77 … | + userInput | |
78 … | + ]) | |
79 … | + ]), | |
74 | 80 … | h('div.channels', [ |
75 | 81 … | h('label', 'Exclude channels'), |
76 | 82 … | channelInput |
77 | 83 … | ]), |
78 | - toggle({ type: 'peopleIFollow', filterGroup: 'only', label: 'Only people I follow' }), | |
79 | 84 … | h('div.message-types', [ |
80 | 85 … | h('header', 'Show messages'), |
81 | 86 … | toggle({ type: 'post' }), |
82 | 87 … | toggle({ type: 'like' }), |
@@ -84,8 +89,11 @@ | ||
84 | 89 … | toggle({ type: 'contact' }), |
85 | 90 … | toggle({ type: 'channel' }), |
86 | 91 … | toggle({ type: 'pub' }), |
87 | 92 … | toggle({ type: 'chess' }) |
93 … | + ]), | |
94 … | + h('div.root-messages', [ | |
95 … | + toggle({ type: 'rootMessages', filterGroup: 'only', label: 'Root messages only' }) | |
88 | 96 … | ]) |
89 | 97 … | ]) |
90 | 98 … | ]) |
91 | 99 … | ]) |
@@ -129,14 +137,39 @@ | ||
129 | 137 … | |
130 | 138 … | draw() |
131 | 139 … | }) |
132 | 140 … | |
141 … | + var userId | |
142 … | + const getAboutSuggestions = api.about.async.suggest() | |
143 … | + addSuggest(userInput, (inputText, cb) => { | |
144 … | + inputText = inputText.replace(/^@/, '') | |
145 … | + cb(null, getAboutSuggestions(inputText.slice(1))) | |
146 … | + }, {cls: 'PatchSuggest'}) | |
147 … | + userInput.addEventListener('suggestselect', ev => { | |
148 … | + userId = ev.detail.id | |
149 … | + userInput.value = userId | |
150 … | + | |
151 … | + draw() | |
152 … | + }) | |
153 … | + | |
133 | 154 … | function followFilter (msg) { |
134 | 155 … | if (!filterSettings().only.peopleIFollow) return true |
135 | 156 … | |
136 | 157 … | return Array.from(peopleIFollow()).concat(myId).includes(msg.value.author) |
137 | 158 … | } |
138 | 159 … | |
160 … | + function userFilter (msg) { | |
161 … | + if (!userId) return true | |
162 … | + | |
163 … | + return msg.value.author === userId | |
164 … | + } | |
165 … | + | |
166 … | + function rootFilter (msg) { | |
167 … | + if (!filterSettings().only.rootMessages) return true | |
168 … | + | |
169 … | + return !msg.value.content.root | |
170 … | + } | |
171 … | + | |
139 | 172 … | function channelFilter (msg) { |
140 | 173 … | var filters = filterSettings().exclude.channels |
141 | 174 … | if (!filters) return true |
142 | 175 … | filters = filters.split(' ').map(c => c.slice(1)) |
@@ -158,8 +191,10 @@ | ||
158 | 191 … | function filterDownThrough () { |
159 | 192 … | return pull( |
160 | 193 … | downScrollAborter, |
161 | 194 … | pull.filter(followFilter), |
195 … | + pull.filter(userFilter), | |
196 … | + pull.filter(rootFilter), | |
162 | 197 … | pull.filter(channelFilter), |
163 | 198 … | pull.filter(messageFilter) |
164 | 199 … | ) |
165 | 200 … | } |
@@ -169,8 +204,10 @@ | ||
169 | 204 … | function filterUpThrough () { |
170 | 205 … | return pull( |
171 | 206 … | upScrollAborter, |
172 | 207 … | pull.filter(followFilter), |
208 … | + pull.filter(userFilter), | |
209 … | + pull.filter(rootFilter), | |
173 | 210 … | pull.filter(channelFilter), |
174 | 211 … | pull.filter(messageFilter) |
175 | 212 … | ) |
176 | 213 … | } |
app/html/filter.mcss | |||
---|---|---|---|
@@ -56,9 +56,32 @@ | |||
56 | 56 … | flex-wrap: wrap | |
57 | 57 … | justify-content: space-between | |
58 | 58 … | align-items: center | |
59 | 59 … | ||
60 | - div.channels { | ||
60 … | + div.users { | ||
61 … | + flex-basis: 100% | ||
62 … | + margin-bottom: .5rem | ||
63 … | + | ||
64 … | + display: flex | ||
65 … | + align-items: center | ||
66 … | + | ||
67 … | + div.FilterToggle { | ||
68 … | + flex-grow: 1 | ||
69 … | + } | ||
70 … | + div.user-filter { | ||
71 … | + label { | ||
72 … | + margin-right: .4rem | ||
73 … | + } | ||
74 … | + input { | ||
75 … | + border: 1px gainsboro solid | ||
76 … | + font-size: 1rem | ||
77 … | + } | ||
78 … | + } | ||
79 … | + } | ||
80 … | + | ||
81 … | + div.channels { | ||
82 … | + display: flex | ||
83 … | + | ||
61 | 84 … | label { | |
62 | 85 … | margin-right: .4rem | |
63 | 86 … | } | |
64 | 87 … | input { | |
@@ -67,15 +90,20 @@ | |||
67 | 90 … | } | |
68 | 91 … | } | |
69 | 92 … | ||
70 | 93 … | div.message-types { | |
94 … | + flex-basis: 100% | ||
95 … | + | ||
71 | 96 … | margin: .6rem 0 | |
72 | 97 … | display: flex | |
73 | 98 … | ||
74 | 99 … | header { | |
75 | 100 … | margin-right: 1rem | |
76 | 101 … | } | |
77 | 102 … | } | |
103 … | + | ||
104 … | + div.root-messages { | ||
105 … | + } | ||
78 | 106 … | } | |
79 | 107 … | ||
80 | 108 … | } | |
81 | 109 … | } |
Built with git-ssb-web