Commit 339a023bbaaa61ba00aff4dafebc56391660606d
add force disconnect button on connected pubs
Matt McKegg committed on 12/12/2017, 8:23:16 PMParent: dee627bd4c8dda263ef6736bbe0bc2516f802a0e
Files changed
locales/en.json | changed |
modules/page/html/render/public.js | changed |
sbot/index.js | changed |
styles/dark/profile-list.mcss | changed |
styles/light/profile-list.mcss | changed |
locales/en.json | ||
---|---|---|
@@ -188,6 +188,7 @@ | ||
188 | 188 … | "Unread Message": "Unread Message", |
189 | 189 … | "Font Size": "Font Size", |
190 | 190 … | "Public Feed Options": "Public Feed Options", |
191 | 191 … | "Only include posts from subscribed channels": "Only include posts from subscribed channels", |
192 | - "Default": "Default" | |
193 | -} | |
192 … | + "Default": "Default", | |
193 … | + "Force Disconnect": "Force Disconnect" | |
194 … | +} |
modules/page/html/render/public.js | ||
---|---|---|
@@ -1,14 +1,15 @@ | ||
1 | 1 … | var nest = require('depnest') |
2 | 2 … | var extend = require('xtend') |
3 | 3 … | var pull = require('pull-stream') |
4 | -var { h, send, when, computed, map } = require('mutant') | |
4 … | +var { h, send, when, computed, map, onceTrue } = require('mutant') | |
5 | 5 … | |
6 | 6 … | exports.needs = nest({ |
7 | 7 … | sbot: { |
8 | 8 … | obs: { |
9 | 9 … | connectedPeers: 'first', |
10 | - localPeers: 'first' | |
10 … | + localPeers: 'first', | |
11 … | + connection: 'first' | |
11 | 12 … | } |
12 | 13 … | }, |
13 | 14 … | 'sbot.pull.stream': 'first', |
14 | 15 … | 'feed.pull.public': 'first', |
@@ -238,8 +239,11 @@ | ||
238 | 239 … | h('div.name', [ api.about.obs.name(id) ]) |
239 | 240 … | ]), |
240 | 241 … | h('div.progress', [ |
241 | 242 … | api.progress.html.peer(id) |
243 … | + ]), | |
244 … | + h('div.controls', [ | |
245 … | + h('a.disconnect', {href: '#disconnect', 'ev-click': send(disconnect, id), title: i18n('Force Disconnect')}, ['x']) | |
242 | 246 … | ]) |
243 | 247 … | ]) |
244 | 248 … | }) |
245 | 249 … | ]) |
@@ -260,8 +264,14 @@ | ||
260 | 264 … | channel: id, |
261 | 265 … | subscribed: false |
262 | 266 … | }) |
263 | 267 … | } |
268 … | + | |
269 … | + function disconnect (id) { | |
270 … | + onceTrue(api.sbot.obs.connection, (sbot) => { | |
271 … | + sbot.patchwork.disconnect(id) | |
272 … | + }) | |
273 … | + } | |
264 | 274 … | } |
265 | 275 … | } |
266 | 276 … | |
267 | 277 … | function getType (msg) { |
sbot/index.js | ||
---|---|---|
@@ -6,8 +6,9 @@ | ||
6 | 6 … | var Search = require('./search') |
7 | 7 … | var RecentFeeds = require('./recent-feeds') |
8 | 8 … | var LiveBacklinks = require('./live-backlinks') |
9 | 9 … | var pull = require('pull-stream') |
10 … | +var ref = require('ssb-ref') | |
10 | 11 … | |
11 | 12 … | exports.name = 'patchwork' |
12 | 13 … | exports.version = require('../package.json').version |
13 | 14 … | exports.manifest = { |
@@ -26,9 +27,11 @@ | ||
26 | 27 … | liveBacklinks: { |
27 | 28 … | subscribe: 'sync', |
28 | 29 … | unsubscribe: 'sync', |
29 | 30 … | stream: 'source' |
30 | - } | |
31 … | + }, | |
32 … | + | |
33 … | + disconnect: 'async' | |
31 | 34 … | } |
32 | 35 … | |
33 | 36 … | exports.init = function (ssb, config) { |
34 | 37 … | var progress = Progress(ssb, config) |
@@ -62,7 +65,19 @@ | ||
62 | 65 … | recentFeeds: recentFeeds.stream, |
63 | 66 … | linearSearch: search.linear, |
64 | 67 … | getSubscriptions: subscriptions.get, |
65 | 68 … | getChannels: channels.get, |
66 | - liveBacklinks: LiveBacklinks(ssb, config) | |
69 … | + liveBacklinks: LiveBacklinks(ssb, config), | |
70 … | + | |
71 … | + disconnect: function (opts, cb) { | |
72 … | + if (ref.isFeed(opts)) opts = {key: opts} | |
73 … | + if (opts && (opts.key || opts.host)) { | |
74 … | + ssb.gossip.peers().find(peer => { | |
75 … | + if (peer.state === 'connected' && (peer.key === opts.key || peer.host === opts.host)) { | |
76 … | + ssb.gossip.disconnect(peer, cb) | |
77 … | + return true | |
78 … | + } | |
79 … | + }) | |
80 … | + } | |
81 … | + } | |
67 | 82 … | } |
68 | 83 … | } |
styles/dark/profile-list.mcss | ||
---|---|---|
@@ -32,12 +32,8 @@ | ||
32 | 32 … | height: 12px |
33 | 33 … | content: "<circle cx='6' stroke='#888' fill='none' cy='6' r='5' /> <circle cx='6' cy='6' r='3' fill='#888'/>" |
34 | 34 … | } |
35 | 35 … | |
36 | - :hover { | |
37 | - background-color: #434141; | |
38 | - } | |
39 | - | |
40 | 36 … | div.avatar { |
41 | 37 … | img { |
42 | 38 … | width: 40px |
43 | 39 … | height: 40px |
@@ -72,6 +68,41 @@ | ||
72 | 68 … | width: 20px |
73 | 69 … | flex: 1 |
74 | 70 … | } |
75 | 71 … | } |
72 … | + | |
73 … | + div.controls { | |
74 … | + opacity: 0 | |
75 … | + position: absolute | |
76 … | + right: 7px | |
77 … | + top: 0 | |
78 … | + bottom: 0 | |
79 … | + display: flex; | |
80 … | + justify-content: center; | |
81 … | + flex-direction: column; | |
82 … | + width: 15px; | |
83 … | + transition: opacity 0.2s | |
84 … | + a.disconnect { | |
85 … | + color: white; | |
86 … | + border-radius: 10px; | |
87 … | + height: 16px; | |
88 … | + width: 16px; | |
89 … | + background-color: #777 | |
90 … | + text-align: center | |
91 … | + vertical-align: middle | |
92 … | + font-size: 14px; | |
93 … | + overflow: hidden; | |
94 … | + :hover { | |
95 … | + text-decoration: none | |
96 … | + background-color: #F77 | |
97 … | + } | |
98 … | + } | |
99 … | + } | |
100 … | + | |
101 … | + :hover { | |
102 … | + background-color: #434141; | |
103 … | + div.controls { | |
104 … | + opacity: 1 | |
105 … | + } | |
106 … | + } | |
76 | 107 … | } |
77 | 108 … | } |
styles/light/profile-list.mcss | |||
---|---|---|---|
@@ -32,12 +32,8 @@ | |||
32 | 32 … | height: 12px | |
33 | 33 … | content: "<circle cx='6' stroke='#888' fill='none' cy='6' r='5' /> <circle cx='6' cy='6' r='3' fill='#888'/>" | |
34 | 34 … | } | |
35 | 35 … | ||
36 | - :hover { | ||
37 | - background-color: rgba(255, 255, 255, 0.4); | ||
38 | - } | ||
39 | - | ||
40 | 36 … | div.avatar { | |
41 | 37 … | img { | |
42 | 38 … | width: 40px | |
43 | 39 … | height: 40px | |
@@ -70,9 +66,44 @@ | |||
70 | 66 … | -pending { | |
71 | 67 … | opacity: 1 | |
72 | 68 … | } | |
73 | 69 … | width: 20px | |
74 | - flex: 1 | ||
70 … | + flex: 1 | ||
75 | 71 … | } | |
76 | 72 … | } | |
73 … | + | ||
74 … | + div.controls { | ||
75 … | + opacity: 0 | ||
76 … | + position: absolute | ||
77 … | + right: 7px | ||
78 … | + top: 0 | ||
79 … | + bottom: 0 | ||
80 … | + display: flex; | ||
81 … | + justify-content: center; | ||
82 … | + flex-direction: column; | ||
83 … | + width: 15px; | ||
84 … | + transition: opacity 0.2s | ||
85 … | + a.disconnect { | ||
86 … | + color: white; | ||
87 … | + border-radius: 10px; | ||
88 … | + height: 16px; | ||
89 … | + width: 16px; | ||
90 … | + background-color: #777 | ||
91 … | + text-align: center | ||
92 … | + vertical-align: middle | ||
93 … | + font-size: 14px; | ||
94 … | + overflow: hidden; | ||
95 … | + :hover { | ||
96 … | + text-decoration: none | ||
97 … | + background-color: #F77 | ||
98 … | + } | ||
99 … | + } | ||
100 … | + } | ||
101 … | + | ||
102 … | + :hover { | ||
103 … | + background-color: rgba(255, 255, 255, 0.4); | ||
104 … | + div.controls { | ||
105 … | + opacity: 1 | ||
106 … | + } | ||
107 … | + } | ||
77 | 108 … | } | |
78 | 109 … | } |
Built with git-ssb-web