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