sbot/ui/lib/com/peers.js

87 lines
2.2 KiB
JavaScript

'use strict'
var h = require('hyperscript')
var app = require('../app')
var com = require('./index')
var util = require('../util')
module.exports = function (peers) {
// markup
var rows = peers.sort(sorter).map(function (peer) {
var muted = (peer.connected) ? '' : '.text-muted'
var id = '', status = '', history = ''
if (peer.id) {
id = com.userlink(peer.id, app.users.names[peer.id])
} else
id = peer.host
if (peer.connected) {
if (peer.time && peer.time.connect)
status = 'connected'
else {
if (peer.failure)
status = 'connecting (try '+(peer.failure+1)+')...'
else
status = 'connecting...'
}
}
if (peer.time) {
if (peer.time.connect > peer.time.attempt)
history = 'connected '+util.prettydate(peer.time.connect, true)
else if (peer.time.attempt) {
if (peer.connected)
history = 'started attempt '+util.prettydate(peer.time.attempt, true)
else
history = 'attempted connect '+util.prettydate(peer.time.attempt, true)
}
}
return h('tr',
h('td'+muted,
id,
(peer.connected) ? ' '+status : h('a.btn.btn-xs.btn-default', { href: '#', title: 'Syncronize now', onclick: syncronize(peer) }, com.icon('transfer')),
h('br'),
h('small.text-muted', history)
)
)
})
if (rows.length === 0)
rows.push(h('tr', h('td.text-muted', 'No known peers')))
// put connected peers at top
function sorter(a, b) {
var an = 0, bn = 0
if (a.connected) an += 100
if (b.connected) bn += 100
if (a.failure) an -= a.failure
if (b.failure) bn -= b.failure
return bn - an
}
// handlers
function syncronize (p) {
return function (e) {
e.preventDefault()
app.ssb.gossip.connect(p, function (err) {
if (err)
return console.error(err)
var node = e.target
var parent = node.parentNode
if (parent.tagName == 'A') {
node = parent
parent = node.parentNode
}
parent.insertBefore(h('span', ' connecting...'), node)
parent.removeChild(node)
})
}
}
return rows
}