sbot/ui/lib/pages/home.js

72 lines
2.2 KiB
JavaScript
Raw Normal View History

'use strict'
var h = require('hyperscript')
var o = require('observable')
var mlib = require('ssb-msgs')
var pull = require('pull-stream')
var app = require('../app')
var ui = require('../ui')
var com = require('../com')
var social = require('../social-graph')
module.exports = function () {
var hlf // home live feed
// filters
var p = app.user.profile
function homeFilter (m) {
var a = m.value.author
if (app.users.profiles[a] && app.users.profiles[a].flagged) // flagged by user
return false
if (app.homeMode.view == 'all')
return true
if (app.homeMode.view == 'friends')
return a == app.user.id || social.follows(app.user.id, a)
return social.follows(app.homeMode.view, a) // `view` is the id of a pub
}
// live-mode
if (app.homeMode.live)
hlf = app.ssb.patchwork.createHomeStream({ gt: [Date.now(), null], live: true })
// markup
function render (msg) {
return com.message(msg, { markread: true })
}
function notification (vo, href, title, icon) {
return o.transform(vo, function (v) {
var cls = (v>0) ? '.highlight' : ''
return h('a'+cls, { href: href, title: title }, com.icon(icon), ' ', v)
})
}
ui.setPage('home', h('.layout-twocol',
h('.layout-main',
com.notifications(),
com.composer(null, null, { placeholder: 'Share a message with the world...' }),
com.messageFeed({ feed: app.ssb.patchwork.createHomeStream, render: render, onempty: onempty, filter: homeFilter, limit: 100, infinite: true, live: hlf })
),
h('.layout-rightnav',
h('.shortcuts',
notification(app.observ.indexCounts.inboxUnread, '#/inbox', 'Your inbox', 'inbox'),
notification(app.observ.indexCounts.votesUnread, '#/stars', 'Stars on your posts, and stars by you', 'star'),
notification(app.observ.indexCounts.followsUnread, '#/friends', 'Friends, followers, and other users', 'user')
),
com.notifications.side(),
com.friendsHexagrid({ size: 80 }),
com.help.side()
)
), { onPageTeardown: function () {
// abort streams
hlf && hlf(true, function(){})
}})
function onempty (el) {
if (app.homeMode.view == 'all')
el.appendChild(com.help.welcome())
}
}