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