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