Commit 03d17cff841c2fed3e864e0b507f5e8045e4a356
add channel page viewer
Matt McKegg committed on 2/15/2017, 12:18:36 PMParent: 5eaed9654b9fe9dd9e0038fe8d0cffbe584237d3
Files changed
modules/page/html/render/channel.js | added |
modules/page/html/render/channel.js | ||
---|---|---|
@@ -1,0 +1,77 @@ | ||
1 | +var { h, when, send } = require('mutant') | |
2 | +var pull = require('pull-stream') | |
3 | +var nest = require('depnest') | |
4 | + | |
5 | +exports.needs = nest({ | |
6 | + 'channel.obs.subscribed': 'first', | |
7 | + 'feed.html.rollup': 'first', | |
8 | + 'sbot.pull.log': 'first', | |
9 | + 'sbot.async.publish': 'first', | |
10 | + 'keys.sync.id': 'first' | |
11 | +}) | |
12 | + | |
13 | +exports.gives = nest('page.html.render') | |
14 | + | |
15 | +exports.create = function (api) { | |
16 | + return nest('page.html.render', function channel (path) { | |
17 | + if (path[0] !== '#') return | |
18 | + | |
19 | + var channel = path.substr(1) | |
20 | + var subscribedChannels = api.channel.obs.subscribed(api.keys.sync.id()) | |
21 | + | |
22 | + var prepend = [ | |
23 | + h('div', {className: 'PageHeading'}, [ | |
24 | + h('h1', `#${channel}`), | |
25 | + h('div.meta', [ | |
26 | + when(subscribedChannels.has(channel), | |
27 | + h('a -unsubscribe', { | |
28 | + 'href': '#', | |
29 | + 'title': 'Click to unsubscribe', | |
30 | + 'ev-click': send(unsubscribe, channel) | |
31 | + }, 'Subscribed'), | |
32 | + h('a -subscribe', { | |
33 | + 'href': '#', | |
34 | + 'ev-click': send(subscribe, channel) | |
35 | + }, 'Subscribe') | |
36 | + ) | |
37 | + ]) | |
38 | + ]), | |
39 | + //api.message.html.compose({type: 'post', channel: channel}, {placeholder: 'Write a message in this channel\n\n\n\nPeople who follow you or subscribe to this channel will also see this message in their main feed.\n\nTo create a new channel, type the channel name (preceded by a #) into the search box above. e.g #cat-pics'}) | |
40 | + ] | |
41 | + | |
42 | + return api.feed.html.rollup((opts) => { | |
43 | + return pull( | |
44 | + api.sbot.pull.log(opts), | |
45 | + pull.map(matchesChannel) | |
46 | + ) | |
47 | + }, { prepend }) | |
48 | + | |
49 | + // scoped | |
50 | + | |
51 | + function matchesChannel (msg) { | |
52 | + if (msg.sync) return | |
53 | + var c = msg && msg.value && msg.value.content | |
54 | + if (c && c.channel === channel) { | |
55 | + return msg | |
56 | + } else { | |
57 | + return {timestamp: msg.timestamp} | |
58 | + } | |
59 | + } | |
60 | + }) | |
61 | + | |
62 | + function subscribe (id) { | |
63 | + api.sbot.async.publish({ | |
64 | + type: 'channel', | |
65 | + channel: id, | |
66 | + subscribed: true | |
67 | + }) | |
68 | + } | |
69 | + | |
70 | + function unsubscribe (id) { | |
71 | + api.sbot.async.publish({ | |
72 | + type: 'channel', | |
73 | + channel: id, | |
74 | + subscribed: false | |
75 | + }) | |
76 | + } | |
77 | +} |
Built with git-ssb-web