Whitespace and code style consistency
This commit is contained in:
@@ -24,7 +24,7 @@ var {
|
||||
renderShowAll,
|
||||
renderRssItem,
|
||||
wrapRss,
|
||||
} = require('./render');
|
||||
} = require('./render')
|
||||
|
||||
var appHash = hash([fs.readFileSync(__filename)])
|
||||
|
||||
@@ -110,9 +110,9 @@ exports.init = function (sbot, config) {
|
||||
}
|
||||
|
||||
function serveFeed(req, res, feedId, ext) {
|
||||
console.log("serving feed: " + feedId)
|
||||
console.log('serving feed: ' + feedId)
|
||||
|
||||
var showAll = req.url.endsWith("?showAll");
|
||||
var showAll = req.url.endsWith('?showAll')
|
||||
|
||||
getAbout(feedId, function (err, about) {
|
||||
if (err) return respond(res, 500, err.stack || err)
|
||||
@@ -123,7 +123,7 @@ exports.init = function (sbot, config) {
|
||||
return pull(
|
||||
// formatMsgs(feedId, ext, defaultOpts)
|
||||
renderRssItem(defaultOpts), wrapRss(about.name, defaultOpts)
|
||||
);
|
||||
)
|
||||
default:
|
||||
var publicWebHosting = about.publicWebHosting == null
|
||||
? !defaultOpts.requireOptIn : about.publicWebHosting
|
||||
@@ -131,7 +131,7 @@ exports.init = function (sbot, config) {
|
||||
return pull(
|
||||
renderAbout(defaultOpts, about,
|
||||
renderShowAll(showAll, req.url)), wrapPage(name)
|
||||
);
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,41 +187,41 @@ exports.init = function (sbot, config) {
|
||||
|
||||
function serveUserFeed(req, res, url) {
|
||||
var feedId = url.substring(url.lastIndexOf('user-feed/')+10, 100)
|
||||
console.log("serving user feed: " + feedId)
|
||||
console.log('serving user feed: ' + feedId)
|
||||
|
||||
var following = []
|
||||
var channelSubscriptions = []
|
||||
|
||||
getAbout(feedId, function (err, about) {
|
||||
pull(
|
||||
sbot.createUserStream({ id: feedId }),
|
||||
pull.filter((msg) => {
|
||||
return !msg.value ||
|
||||
msg.value.content.type == 'contact' ||
|
||||
(msg.value.content.type == 'channel' &&
|
||||
typeof msg.value.content.subscribed != 'undefined')
|
||||
}),
|
||||
pull.collect(function (err, msgs) {
|
||||
msgs.forEach((msg) => {
|
||||
if (msg.value.content.type == 'contact')
|
||||
{
|
||||
if (msg.value.content.following)
|
||||
following[msg.value.content.contact] = 1
|
||||
else
|
||||
delete following[msg.value.content.contact]
|
||||
}
|
||||
else // channel subscription
|
||||
{
|
||||
if (msg.value.content.subscribed)
|
||||
channelSubscriptions[msg.value.content.channel] = 1
|
||||
else
|
||||
delete channelSubscriptions[msg.value.content.channel]
|
||||
}
|
||||
})
|
||||
|
||||
serveFeeds(req, res, following, channelSubscriptions, feedId,
|
||||
'user feed ' + (about ? about.name : ""))
|
||||
})
|
||||
sbot.createUserStream({ id: feedId }),
|
||||
pull.filter((msg) => {
|
||||
return !msg.value ||
|
||||
msg.value.content.type == 'contact' ||
|
||||
(msg.value.content.type == 'channel' &&
|
||||
typeof msg.value.content.subscribed != 'undefined')
|
||||
}),
|
||||
pull.collect(function (err, msgs) {
|
||||
msgs.forEach((msg) => {
|
||||
if (msg.value.content.type == 'contact')
|
||||
{
|
||||
if (msg.value.content.following)
|
||||
following[msg.value.content.contact] = 1
|
||||
else
|
||||
delete following[msg.value.content.contact]
|
||||
}
|
||||
else // channel subscription
|
||||
{
|
||||
if (msg.value.content.subscribed)
|
||||
channelSubscriptions[msg.value.content.channel] = 1
|
||||
else
|
||||
delete channelSubscriptions[msg.value.content.channel]
|
||||
}
|
||||
})
|
||||
|
||||
serveFeeds(req, res, following, channelSubscriptions, feedId,
|
||||
'user feed ' + (about ? about.name : ''))
|
||||
})
|
||||
)
|
||||
})
|
||||
}
|
||||
@@ -241,58 +241,58 @@ exports.init = function (sbot, config) {
|
||||
pull(
|
||||
sbot.createLogStream({ reverse: true, limit: 5000 }),
|
||||
pull.filter((msg) => {
|
||||
return !msg.value ||
|
||||
(msg.value.author in following ||
|
||||
msg.value.content.channel in channelSubscriptions)
|
||||
return !msg.value ||
|
||||
(msg.value.author in following ||
|
||||
msg.value.content.channel in channelSubscriptions)
|
||||
}),
|
||||
pull.take(150),
|
||||
pull.collect(function (err, logs) {
|
||||
if (err) return respond(res, 500, err.stack || err)
|
||||
res.writeHead(200, {
|
||||
'Content-Type': ctype("html")
|
||||
})
|
||||
pull(
|
||||
pull.values(logs),
|
||||
paramap(addAuthorAbout, 8),
|
||||
if (err) return respond(res, 500, err.stack || err)
|
||||
res.writeHead(200, {
|
||||
'Content-Type': ctype('html')
|
||||
})
|
||||
pull(
|
||||
pull.values(logs),
|
||||
paramap(addAuthorAbout, 8),
|
||||
paramap(addBlog, 8),
|
||||
paramap(addFollowAbout, 8),
|
||||
paramap(addVoteMessage, 8),
|
||||
paramap(addGitLinks, 8),
|
||||
paramap(addGatheringAbout, 8),
|
||||
pull(renderThread(feedOpts), wrapPage(name)),
|
||||
toPull(res, function (err) {
|
||||
if (err) console.error('[viewer]', err)
|
||||
})
|
||||
)
|
||||
paramap(addFollowAbout, 8),
|
||||
paramap(addVoteMessage, 8),
|
||||
paramap(addGitLinks, 8),
|
||||
paramap(addGatheringAbout, 8),
|
||||
pull(renderThread(feedOpts), wrapPage(name)),
|
||||
toPull(res, function (err) {
|
||||
if (err) console.error('[viewer]', err)
|
||||
})
|
||||
)
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
function serveChannel(req, res, url) {
|
||||
var channelId = url.substring(url.lastIndexOf('channel/')+8, 100)
|
||||
console.log("serving channel: " + channelId)
|
||||
console.log('serving channel: ' + channelId)
|
||||
|
||||
var showAll = req.url.endsWith("?showAll")
|
||||
var showAll = req.url.endsWith('?showAll')
|
||||
|
||||
pull(
|
||||
sbot.query.read({ limit: showAll ? 300 : 10, reverse: true, query: [{$filter: { value: { content: { channel: channelId }}}}]}),
|
||||
pull.collect(function (err, logs) {
|
||||
if (err) return respond(res, 500, err.stack || err)
|
||||
res.writeHead(200, {
|
||||
'Content-Type': ctype("html")
|
||||
})
|
||||
pull(
|
||||
pull.values(logs),
|
||||
paramap(addAuthorAbout, 8),
|
||||
if (err) return respond(res, 500, err.stack || err)
|
||||
res.writeHead(200, {
|
||||
'Content-Type': ctype('html')
|
||||
})
|
||||
pull(
|
||||
pull.values(logs),
|
||||
paramap(addAuthorAbout, 8),
|
||||
paramap(addBlog, 8),
|
||||
paramap(addVoteMessage, 8),
|
||||
paramap(addGatheringAbout, 8),
|
||||
pull(renderThread(defaultOpts, '', renderShowAll(showAll, req.url)),
|
||||
wrapPage('#' + channelId)),
|
||||
toPull(res, function (err) {
|
||||
if (err) console.error('[viewer]', err)
|
||||
})
|
||||
)
|
||||
paramap(addVoteMessage, 8),
|
||||
paramap(addGatheringAbout, 8),
|
||||
pull(renderThread(defaultOpts, '', renderShowAll(showAll, req.url)),
|
||||
wrapPage('#' + channelId)),
|
||||
toPull(res, function (err) {
|
||||
if (err) console.error('[viewer]', err)
|
||||
})
|
||||
)
|
||||
})
|
||||
)
|
||||
}
|
||||
@@ -372,9 +372,9 @@ exports.init = function (sbot, config) {
|
||||
function addFollowAbout(msg, cb) {
|
||||
if (msg.value.content.contact)
|
||||
getAbout(msg.value.content.contact, function (err, about) {
|
||||
if (err) return cb(err)
|
||||
msg.value.content.contactAbout = about
|
||||
cb(null, msg)
|
||||
if (err) return cb(err)
|
||||
msg.value.content.contactAbout = about
|
||||
cb(null, msg)
|
||||
})
|
||||
else
|
||||
cb(null, msg)
|
||||
@@ -383,16 +383,16 @@ exports.init = function (sbot, config) {
|
||||
function addVoteMessage(msg, cb) {
|
||||
if (msg.value.content.type == 'vote' && msg.value.content.vote && msg.value.content.vote.link[0] == '%')
|
||||
getMsg(msg.value.content.vote.link, function (err, linkedMsg) {
|
||||
if (linkedMsg)
|
||||
msg.value.content.vote.linkedText = linkedMsg.value.content.text
|
||||
cb(null, msg)
|
||||
if (linkedMsg)
|
||||
msg.value.content.vote.linkedText = linkedMsg.value.content.text
|
||||
cb(null, msg)
|
||||
})
|
||||
else
|
||||
cb(null, msg)
|
||||
}
|
||||
|
||||
function addBlog(msg, cb) {
|
||||
if (msg.value && msg.value.content.type == "blog") {
|
||||
if (msg.value && msg.value.content.type == 'blog') {
|
||||
pull(
|
||||
sbot.blobs.get(msg.value.content.blog),
|
||||
pull.collect(function(err, blob) {
|
||||
@@ -449,15 +449,15 @@ exports.init = function (sbot, config) {
|
||||
function addGitLinks(msg, cb) {
|
||||
if (msg.value.content.type == 'git-update')
|
||||
getMsg(msg.value.content.repo, function (err, gitRepo) {
|
||||
if (gitRepo)
|
||||
msg.value.content.repoName = gitRepo.value.content.name
|
||||
cb(null, msg)
|
||||
if (gitRepo)
|
||||
msg.value.content.repoName = gitRepo.value.content.name
|
||||
cb(null, msg)
|
||||
})
|
||||
else if (msg.value.content.type == 'issue')
|
||||
getMsg(msg.value.content.project, function (err, gitRepo) {
|
||||
if (gitRepo)
|
||||
msg.value.content.repoName = gitRepo.value.content.name
|
||||
cb(null, msg)
|
||||
if (gitRepo)
|
||||
msg.value.content.repoName = gitRepo.value.content.name
|
||||
cb(null, msg)
|
||||
})
|
||||
else
|
||||
cb(null, msg)
|
||||
@@ -572,8 +572,8 @@ function serveHome(req, res, query, conf) {
|
||||
if (id) {
|
||||
res.writeHead(303, {
|
||||
Location: '/' + (
|
||||
id[0] === '#' ? 'channel/' + id.substr(1) :
|
||||
refs.isMsgId(id) ? encodeURIComponent(id) : id)
|
||||
id[0] === '#' ? 'channel/' + id.substr(1) :
|
||||
refs.isMsgId(id) ? encodeURIComponent(id) : id)
|
||||
})
|
||||
return res.end()
|
||||
}
|
||||
|
||||
@@ -1,120 +1,120 @@
|
||||
var path = require('path');
|
||||
var pull = require("pull-stream");
|
||||
var marked = require("ssb-marked");
|
||||
var htime = require("human-time");
|
||||
var emojis = require("emoji-named-characters");
|
||||
var cat = require("pull-cat");
|
||||
var h = require('hyperscript');
|
||||
var path = require('path')
|
||||
var pull = require("pull-stream")
|
||||
var marked = require("ssb-marked")
|
||||
var htime = require("human-time")
|
||||
var emojis = require("emoji-named-characters")
|
||||
var cat = require("pull-cat")
|
||||
var h = require('hyperscript')
|
||||
var refs = require('ssb-ref')
|
||||
|
||||
var emojiDir = path.join(require.resolve("emoji-named-characters"), "../pngs");
|
||||
var emojiDir = path.join(require.resolve("emoji-named-characters"), "../pngs")
|
||||
|
||||
exports.wrapPage = wrapPage;
|
||||
exports.MdRenderer = MdRenderer;
|
||||
exports.renderEmoji = renderEmoji;
|
||||
exports.formatMsgs = formatMsgs;
|
||||
exports.renderThread = renderThread;
|
||||
exports.renderAbout = renderAbout;
|
||||
exports.renderShowAll = renderShowAll;
|
||||
exports.renderRssItem = renderRssItem;
|
||||
exports.wrapRss = wrapRss;
|
||||
exports.wrapPage = wrapPage
|
||||
exports.MdRenderer = MdRenderer
|
||||
exports.renderEmoji = renderEmoji
|
||||
exports.formatMsgs = formatMsgs
|
||||
exports.renderThread = renderThread
|
||||
exports.renderAbout = renderAbout
|
||||
exports.renderShowAll = renderShowAll
|
||||
exports.renderRssItem = renderRssItem
|
||||
exports.wrapRss = wrapRss
|
||||
|
||||
function MdRenderer(opts) {
|
||||
marked.Renderer.call(this, {});
|
||||
this.opts = opts;
|
||||
marked.Renderer.call(this, {})
|
||||
this.opts = opts
|
||||
}
|
||||
|
||||
MdRenderer.prototype = new marked.Renderer();
|
||||
MdRenderer.prototype = new marked.Renderer()
|
||||
|
||||
MdRenderer.prototype.urltransform = function(href) {
|
||||
if (!href) return false;
|
||||
if (!href) return false
|
||||
switch (href[0]) {
|
||||
case "#":
|
||||
return this.opts.base + "channel/" + href.slice(1);
|
||||
case "%":
|
||||
case '#':
|
||||
return this.opts.base + 'channel/' + href.slice(1)
|
||||
case '%':
|
||||
if (!refs.isMsgId(href)) return false
|
||||
return this.opts.msg_base + encodeURIComponent(href);
|
||||
case "@":
|
||||
return this.opts.msg_base + encodeURIComponent(href)
|
||||
case '@':
|
||||
if (!refs.isFeedId(href)) return false
|
||||
href = (this.opts.mentions && this.opts.mentions[href.substr(1)]) || href;
|
||||
return this.opts.feed_base + href;
|
||||
case "&":
|
||||
href = (this.opts.mentions && this.opts.mentions[href.substr(1)]) || href
|
||||
return this.opts.feed_base + href
|
||||
case '&':
|
||||
if (!refs.isBlobId(href)) return false
|
||||
return this.opts.blob_base + href;
|
||||
return this.opts.blob_base + href
|
||||
}
|
||||
if (href.indexOf("javascript:") === 0) return false;
|
||||
return href;
|
||||
};
|
||||
if (href.indexOf('javascript:') === 0) return false
|
||||
return href
|
||||
}
|
||||
|
||||
MdRenderer.prototype.image = function(href, title, text) {
|
||||
if (text.endsWith(".svg"))
|
||||
if (text.endsWith('.svg'))
|
||||
return h('object',
|
||||
{ type: 'image/svg+xml',
|
||||
data: href,
|
||||
alt: text }).outerHTML;
|
||||
{ type: 'image/svg+xml',
|
||||
data: href,
|
||||
alt: text }).outerHTML
|
||||
else
|
||||
return h('img',
|
||||
{ src: this.opts.img_base + href,
|
||||
alt: text,
|
||||
title: title
|
||||
}).outerHTML;
|
||||
};
|
||||
{ src: this.opts.img_base + href,
|
||||
alt: text,
|
||||
title: title
|
||||
}).outerHTML
|
||||
}
|
||||
|
||||
function renderEmoji(emoji) {
|
||||
var opts = this.renderer.opts;
|
||||
var opts = this.renderer.opts
|
||||
var url = opts.mentions && opts.mentions[emoji]
|
||||
? opts.blob_base + encodeURIComponent(opts.mentions[emoji])
|
||||
: emoji in emojis && opts.emoji_base + escape(emoji) + '.png';
|
||||
: emoji in emojis && opts.emoji_base + escape(emoji) + '.png'
|
||||
return url
|
||||
? h('img.ssb-emoji',
|
||||
{ src: url,
|
||||
alt: ':' + escape(emoji) + ':',
|
||||
title: ':' + escape(emoji) + ':',
|
||||
height: 16, width: 16
|
||||
}).outerHTML
|
||||
: ":" + emoji + ":";
|
||||
? h('img.ssb-emoji',
|
||||
{ src: url,
|
||||
alt: ':' + escape(emoji) + ':',
|
||||
title: ':' + escape(emoji) + ':',
|
||||
height: 16, width: 16
|
||||
}).outerHTML
|
||||
: ':' + emoji + ':'
|
||||
}
|
||||
|
||||
function escape(str) {
|
||||
return String(str)
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """);
|
||||
.replace(/&/g, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/'/g, '"')
|
||||
}
|
||||
|
||||
function formatMsgs(id, ext, opts) {
|
||||
switch (ext || "html") {
|
||||
case "html":
|
||||
return pull(renderThread(opts, id, ''), wrapPage(id));
|
||||
case "js":
|
||||
return pull(renderThread(opts), wrapJSEmbed(opts));
|
||||
case "json":
|
||||
return wrapJSON();
|
||||
case "rss":
|
||||
return pull(renderRssItem(opts), wrapRss(id, opts));
|
||||
switch (ext || 'html') {
|
||||
case 'html':
|
||||
return pull(renderThread(opts, id, ''), wrapPage(id))
|
||||
case 'js':
|
||||
return pull(renderThread(opts), wrapJSEmbed(opts))
|
||||
case 'json':
|
||||
return wrapJSON()
|
||||
case 'rss':
|
||||
return pull(renderRssItem(opts), wrapRss(id, opts))
|
||||
default:
|
||||
return null;
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
function wrap(before, after) {
|
||||
return function(read) {
|
||||
return cat([pull.once(before), read, pull.once(after)]);
|
||||
};
|
||||
return cat([pull.once(before), read, pull.once(after)])
|
||||
}
|
||||
}
|
||||
|
||||
function callToAction() {
|
||||
return h('a.call-to-action',
|
||||
{ href: 'https://www.scuttlebutt.nz' },
|
||||
'Join Scuttlebutt now').outerHTML;
|
||||
{ href: 'https://www.scuttlebutt.nz' },
|
||||
'Join Scuttlebutt now').outerHTML
|
||||
}
|
||||
|
||||
function toolTipTop() {
|
||||
return h('span.top-tip',
|
||||
'You are reading content from ',
|
||||
h('a', { href: 'https://www.scuttlebutt.nz' },
|
||||
'Scuttlebutt')).outerHTML;
|
||||
'You are reading content from ',
|
||||
h('a', { href: 'https://www.scuttlebutt.nz' },
|
||||
'Scuttlebutt')).outerHTML
|
||||
}
|
||||
|
||||
function renderAbout(opts, about, showAllHTML = "") {
|
||||
@@ -122,39 +122,39 @@ function renderAbout(opts, about, showAllHTML = "") {
|
||||
return pull(
|
||||
pull.map(renderMsg.bind(this, opts, '')),
|
||||
wrap(toolTipTop() + '<main>', '</main>' + callToAction())
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
var figCaption = h('figcaption');
|
||||
figCaption.innerHTML = 'Feed of ' + escape(about.name) + '<br>' + marked(String(about.description || ''), opts.marked);
|
||||
var figCaption = h('figcaption')
|
||||
figCaption.innerHTML = 'Feed of ' + escape(about.name) + '<br>' + marked(String(about.description || ''), opts.marked)
|
||||
return pull(
|
||||
pull.map(renderMsg.bind(this, opts, '')),
|
||||
wrap(toolTipTop() + '<main>' +
|
||||
h('article',
|
||||
h('header',
|
||||
h('figure',
|
||||
h('img',
|
||||
{ src: opts.img_base + about.image,
|
||||
style: 'max-height: 200px; max-width: 200px;'
|
||||
}),
|
||||
figCaption)
|
||||
)).outerHTML,
|
||||
showAllHTML + '</main>' + callToAction())
|
||||
);
|
||||
h('article',
|
||||
h('header',
|
||||
h('figure',
|
||||
h('img',
|
||||
{ src: opts.img_base + about.image,
|
||||
style: 'max-height: 200px; max-width: 200px;'
|
||||
}),
|
||||
figCaption)
|
||||
)).outerHTML,
|
||||
showAllHTML + '</main>' + callToAction())
|
||||
)
|
||||
}
|
||||
|
||||
function renderThread(opts, id, showAllHTML = "") {
|
||||
return pull(
|
||||
pull.map(renderMsg.bind(this, opts, id)),
|
||||
wrap(toolTipTop() + '<main>',
|
||||
showAllHTML + '</main>' + callToAction())
|
||||
);
|
||||
showAllHTML + '</main>' + callToAction())
|
||||
)
|
||||
}
|
||||
|
||||
function renderRssItem(opts) {
|
||||
return pull(
|
||||
pull.map(renderRss.bind(this, opts))
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
function wrapPage(id) {
|
||||
@@ -168,7 +168,7 @@ function wrapPage(id) {
|
||||
styles +
|
||||
"</head><body>",
|
||||
"</body></html>"
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
function wrapRss(id, opts) {
|
||||
@@ -180,7 +180,7 @@ function wrapRss(id, opts) {
|
||||
|
||||
'</channel>'+
|
||||
'</rss>'
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
var styles = `
|
||||
@@ -304,11 +304,11 @@ var styles = `
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
`;
|
||||
`
|
||||
|
||||
function wrapJSON() {
|
||||
var first = true;
|
||||
return pull(pull.map(JSON.stringify), join(","), wrap("[", "]"));
|
||||
var first = true
|
||||
return pull(pull.map(JSON.stringify), join(','), wrap('[', ']'))
|
||||
}
|
||||
|
||||
function wrapJSEmbed(opts) {
|
||||
@@ -316,7 +316,7 @@ function wrapJSEmbed(opts) {
|
||||
wrap('<link rel=stylesheet href="' + opts.base + 'static/base.css">', ""),
|
||||
pull.map(docWrite),
|
||||
opts.base_token && rewriteBase(new RegExp(opts.base_token, "g"))
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
function rewriteBase(token) {
|
||||
@@ -332,68 +332,66 @@ function rewriteBase(token) {
|
||||
"}())\n",
|
||||
""
|
||||
)
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
function join(delim) {
|
||||
var first = true;
|
||||
var first = true
|
||||
return pull.map(function(val) {
|
||||
if (!first) return delim + String(val);
|
||||
first = false;
|
||||
return val;
|
||||
});
|
||||
if (!first) return delim + String(val)
|
||||
first = false
|
||||
return val
|
||||
})
|
||||
}
|
||||
|
||||
function replace(re, rep) {
|
||||
return pull.map(function(val) {
|
||||
return String(val).replace(re, rep);
|
||||
});
|
||||
return String(val).replace(re, rep)
|
||||
})
|
||||
}
|
||||
|
||||
function docWrite(str) {
|
||||
return "document.write(" + JSON.stringify(str) + ")\n";
|
||||
return 'document.write(' + JSON.stringify(str) + ')\n'
|
||||
}
|
||||
|
||||
function renderMsg(opts, id, msg) {
|
||||
var c = msg.value.content || {};
|
||||
var c = msg.value.content || {}
|
||||
|
||||
if (opts.renderPrivate == false && typeof(msg.value.content) == 'string') return ''
|
||||
if (opts.renderSubscribe == false && c.type == "channel" && c.subscribed != undefined) return ''
|
||||
if (opts.renderSubscribe == false && c.type == 'channel' && c.subscribed != undefined) return ''
|
||||
if (opts.renderVote == false && c.type == "vote") return ''
|
||||
if (opts.renderChess == false && c.type.startsWith("chess")) return ''
|
||||
if (opts.renderTalenet == false && c.type.startsWith("talenet")) return ''
|
||||
if (opts.renderFollow == false && c.type == "contact") return ''
|
||||
if (opts.renderAbout == false && c.type == "about") return ''
|
||||
if (opts.renderPub == false && c.type == "pub") return ''
|
||||
if (msg.author.publicWebHosting === false) return h('article', 'User has chosen not to be hosted publicly').outerHTML;
|
||||
if (msg.author.publicWebHosting == null && opts.requireOptIn) return h('article', 'User has not chosen to be hosted publicly').outerHTML;
|
||||
if (msg.author.publicWebHosting === false) return h('article', 'User has chosen not to be hosted publicly').outerHTML
|
||||
if (msg.author.publicWebHosting == null && opts.requireOptIn) return h('article', 'User has not chosen to be hosted publicly').outerHTML
|
||||
|
||||
var name = encodeURIComponent(msg.key);
|
||||
var name = encodeURIComponent(msg.key)
|
||||
return h('article#' + name,
|
||||
h('header',
|
||||
h('figure',
|
||||
h('img', { alt: '',
|
||||
src: opts.img_base + msg.author.image,
|
||||
height: 50, width: 50 }),
|
||||
h('figcaption',
|
||||
h('a.ssb-avatar-name',
|
||||
{ href: opts.base + escape(msg.value.author) },
|
||||
msg.author.name),
|
||||
msgTimestamp(msg, opts.base + name), ' ',
|
||||
h('small', h('code', msg.key))
|
||||
))),
|
||||
render(opts, id, c)).outerHTML;
|
||||
h('header',
|
||||
h('figure',
|
||||
h('img', { alt: '',
|
||||
src: opts.img_base + msg.author.image,
|
||||
height: 50, width: 50 }),
|
||||
h('figcaption',
|
||||
h('a.ssb-avatar-name',
|
||||
{ href: opts.base + escape(msg.value.author) },
|
||||
msg.author.name),
|
||||
msgTimestamp(msg, opts.base + name), ' ',
|
||||
h('small', h('code', msg.key))
|
||||
))),
|
||||
render(opts, id, c)).outerHTML
|
||||
}
|
||||
|
||||
function renderRss(opts, msg) {
|
||||
var c = msg.value.content || {};
|
||||
var name = encodeURIComponent(msg.key);
|
||||
var c = msg.value.content || {}
|
||||
var name = encodeURIComponent(msg.key)
|
||||
|
||||
let content = h('div', render(opts, c)).innerHTML;
|
||||
let content = h('div', render(opts, c)).innerHTML
|
||||
|
||||
if (!content) {
|
||||
return null;
|
||||
}
|
||||
if (!content) return null
|
||||
|
||||
return (
|
||||
'<item>' +
|
||||
@@ -404,109 +402,109 @@ function renderRss(opts, msg) {
|
||||
'<pubDate>' + new Date(msg.value.timestamp).toUTCString() + '</pubDate>' +
|
||||
'<guid>' + msg.key + '</guid>' +
|
||||
'</item>'
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
function msgTimestamp(msg, link) {
|
||||
var date = new Date(msg.value.timestamp);
|
||||
var isoStr = date.toISOString();
|
||||
var date = new Date(msg.value.timestamp)
|
||||
var isoStr = date.toISOString()
|
||||
return h('time.ssb-timestamp',
|
||||
{ datetime: isoStr },
|
||||
h('a',
|
||||
{ href: link,
|
||||
title: isoStr },
|
||||
formatDate(date)));
|
||||
{ datetime: isoStr },
|
||||
h('a',
|
||||
{ href: link,
|
||||
title: isoStr },
|
||||
formatDate(date)))
|
||||
}
|
||||
|
||||
function formatDate(date) {
|
||||
return htime(date);
|
||||
return htime(date)
|
||||
}
|
||||
|
||||
function render(opts, id, c) {
|
||||
var base = opts.base;
|
||||
var base = opts.base
|
||||
if (!c) return
|
||||
if (c.type === "post") {
|
||||
if (c.type === 'post') {
|
||||
var channel = c.channel
|
||||
? h('div.top-right',
|
||||
h('a',
|
||||
{ href: base + 'channel/' + c.channel },
|
||||
'#' + c.channel))
|
||||
: "";
|
||||
return [channel, renderPost(opts, id, c)];
|
||||
} else if (c.type == "vote" && c.vote.expression == "Dig") {
|
||||
? h('div.top-right',
|
||||
h('a',
|
||||
{ href: base + 'channel/' + c.channel },
|
||||
'#' + c.channel))
|
||||
: ''
|
||||
return [channel, renderPost(opts, id, c)]
|
||||
} else if (c.type == 'vote' && c.vote.expression == 'Dig') {
|
||||
var channel = c.channel
|
||||
? [' in ',
|
||||
h('a',
|
||||
{ href: base + 'channel/' + c.channel },
|
||||
'#' + c.channel)]
|
||||
: "";
|
||||
var linkedText = "this";
|
||||
if (typeof c.vote.linkedText != "undefined")
|
||||
linkedText = c.vote.linkedText.substring(0, 75);
|
||||
? [' in ',
|
||||
h('a',
|
||||
{ href: base + 'channel/' + c.channel },
|
||||
'#' + c.channel)]
|
||||
: ''
|
||||
var linkedText = 'this'
|
||||
if (typeof c.vote.linkedText != 'undefined')
|
||||
linkedText = c.vote.linkedText.substring(0, 75)
|
||||
return h('span.status',
|
||||
['Liked ',
|
||||
h('a', { href: base + encodeURIComponent(c.vote.link) }, linkedText),
|
||||
channel]);
|
||||
} else if (c.type == "vote") {
|
||||
var linkedText = "this";
|
||||
if (c.vote && typeof c.vote.linkedText === "string")
|
||||
linkedText = c.vote.linkedText.substring(0, 75);
|
||||
['Liked ',
|
||||
h('a', { href: base + encodeURIComponent(c.vote.link) }, linkedText),
|
||||
channel])
|
||||
} else if (c.type == 'vote') {
|
||||
var linkedText = 'this'
|
||||
if (c.vote && typeof c.vote.linkedText === 'string')
|
||||
linkedText = c.vote.linkedText.substring(0, 75)
|
||||
return h('span.status',
|
||||
['Voted ',
|
||||
h('a', { href: base + encodeURIComponent(c.vote.link) }, linkedText)]);
|
||||
} else if (c.type == "contact" && c.following) {
|
||||
var name = c.contact;
|
||||
['Voted ',
|
||||
h('a', { href: base + encodeURIComponent(c.vote.link) }, linkedText)])
|
||||
} else if (c.type == 'contact' && c.following) {
|
||||
var name = c.contact
|
||||
if (c.contactAbout)
|
||||
name = c.contactAbout.name;
|
||||
name = c.contactAbout.name
|
||||
return h('span.status',
|
||||
['Followed ',
|
||||
h('a', { href: base + c.contact }, name)]);
|
||||
} else if (c.type == "contact" && !c.following) {
|
||||
var name = c.contact;
|
||||
['Followed ',
|
||||
h('a', { href: base + c.contact }, name)])
|
||||
} else if (c.type == 'contact' && !c.following) {
|
||||
var name = c.contact
|
||||
if (c.contactAbout)
|
||||
name = c.contactAbout.name;
|
||||
name = c.contactAbout.name
|
||||
return h('span.status',
|
||||
['Unfollowed ',
|
||||
h('a', { href: base + c.contact }, name)]);
|
||||
} else if (typeof c == "string") {
|
||||
['Unfollowed ',
|
||||
h('a', { href: base + c.contact }, name)])
|
||||
} else if (typeof c == 'string') {
|
||||
return h('span.status', 'Wrote something private')
|
||||
} else if (c.type == "chess_move") {
|
||||
} else if (c.type == 'chess_move') {
|
||||
return h('span.status', 'Moved a chess piece')
|
||||
} else if (c.type == "chess_invite") {
|
||||
} else if (c.type == 'chess_invite') {
|
||||
return h('span.status', 'Started a chess game')
|
||||
}
|
||||
else if (c.type == "about") {
|
||||
else if (c.type == 'about') {
|
||||
return [h('span.status', 'Changed something in about'),
|
||||
renderDefault(c)];
|
||||
renderDefault(c)]
|
||||
}
|
||||
else if (c.type == "issue") {
|
||||
else if (c.type == 'issue') {
|
||||
return [h('span.status',
|
||||
"Created a git issue" +
|
||||
(c.repoName ? " in repo " + c.repoName : ""),
|
||||
renderPost(opts, id, c))];
|
||||
'Created a git issue' +
|
||||
(c.repoName ? ' in repo ' + c.repoName : ''),
|
||||
renderPost(opts, id, c))]
|
||||
}
|
||||
else if (c.type == "git-repo") {
|
||||
else if (c.type == 'git-repo') {
|
||||
return h('span.status',
|
||||
"Created a git repo " + c.name);
|
||||
'Created a git repo ' + c.name)
|
||||
}
|
||||
else if (c.type == "git-update") {
|
||||
return h('div.status', "Did a git update " +
|
||||
(c.repoName ? " in repo " + c.repoName : ""),
|
||||
else if (c.type == 'git-update') {
|
||||
return h('div.status', 'Did a git update ' +
|
||||
(c.repoName ? ' in repo ' + c.repoName : ''),
|
||||
(Array.isArray(c.commits) ? h('ul',
|
||||
c.commits.filter(Boolean).map(com => {
|
||||
return h('li', String(com.title || com.sha1))
|
||||
})
|
||||
) : "")
|
||||
) : '')
|
||||
)
|
||||
}
|
||||
else if (c.type == "ssb-dns") {
|
||||
return [h('span.status', 'Updated DNS'), renderDefault(c)];
|
||||
else if (c.type == 'ssb-dns') {
|
||||
return [h('span.status', 'Updated DNS'), renderDefault(c)]
|
||||
}
|
||||
else if (c.type == "pub") {
|
||||
else if (c.type == 'pub') {
|
||||
var host = c.address && c.address.host
|
||||
return h('span.status', 'Connected to the pub ' + host);
|
||||
return h('span.status', 'Connected to the pub ' + host)
|
||||
}
|
||||
else if (c.type == "npm-packages") {
|
||||
else if (c.type == 'npm-packages') {
|
||||
return h('div.status', 'Pushed npm packages',
|
||||
Array.isArray(c.mentions) ? h('ul', c.mentions.map(function (link) {
|
||||
var name = link && link.name
|
||||
@@ -515,38 +513,38 @@ function render(opts, id, c) {
|
||||
var [, name, version, tag] = m
|
||||
return h('li', name + ' v' + version + (tag ? ' (' + tag + ')' : ''))
|
||||
})) : ''
|
||||
);
|
||||
)
|
||||
}
|
||||
else if (c.type == "channel" && c.subscribed)
|
||||
else if (c.type == 'channel' && c.subscribed)
|
||||
return h('span.status',
|
||||
'Subscribed to channel ',
|
||||
h('a',
|
||||
{ href: base + 'channel/' + c.channel },
|
||||
'#' + c.channel));
|
||||
else if (c.type == "channel" && !c.subscribed)
|
||||
'Subscribed to channel ',
|
||||
h('a',
|
||||
{ href: base + 'channel/' + c.channel },
|
||||
'#' + c.channel))
|
||||
else if (c.type == 'channel' && !c.subscribed)
|
||||
return h('span.status',
|
||||
'Unsubscribed from channel ',
|
||||
h('a',
|
||||
{ href: base + 'channel/' + c.channel },
|
||||
'#' + c.channel))
|
||||
else if (c.type == "blog") {
|
||||
'Unsubscribed from channel ',
|
||||
h('a',
|
||||
{ href: base + 'channel/' + c.channel },
|
||||
'#' + c.channel))
|
||||
else if (c.type == 'blog') {
|
||||
//%RTXvyZ2fZWwTyWdlk0lYGk5sKw5Irj+Wk4QwxyOVG5g=.sha256
|
||||
var channel = c.channel
|
||||
? h('div.top-right',
|
||||
h('a',
|
||||
{ href: base + 'channel/' + c.channel },
|
||||
'#' + c.channel))
|
||||
: "";
|
||||
? h('div.top-right',
|
||||
h('a',
|
||||
{ href: base + 'channel/' + c.channel },
|
||||
'#' + c.channel))
|
||||
: ''
|
||||
|
||||
var s = h('section');
|
||||
var s = h('section')
|
||||
s.innerHTML = marked(String(c.blogContent), opts.marked)
|
||||
|
||||
return [channel, h('h2', String(c.title)), s];
|
||||
return [channel, h('h2', String(c.title)), s]
|
||||
}
|
||||
else if (c.type === 'gathering') {
|
||||
return h('div', renderGathering(opts, id, c))
|
||||
}
|
||||
else return renderDefault(c);
|
||||
else return renderDefault(c)
|
||||
}
|
||||
|
||||
function renderGathering(opts, id, c) {
|
||||
@@ -567,28 +565,28 @@ function renderGathering(opts, id, c) {
|
||||
}
|
||||
|
||||
function renderPost(opts, id, c) {
|
||||
opts.mentions = {};
|
||||
opts.mentions = {}
|
||||
if (Array.isArray(c.mentions)) {
|
||||
c.mentions.forEach(function (link) {
|
||||
if (link && link.name && link.link)
|
||||
opts.mentions[link.name] = link.link;
|
||||
});
|
||||
c.mentions.forEach(function (link) {
|
||||
if (link && link.name && link.link)
|
||||
opts.mentions[link.name] = link.link
|
||||
})
|
||||
}
|
||||
var s = h('section');
|
||||
var content = '';
|
||||
var s = h('section')
|
||||
var content = ''
|
||||
if (c.root && c.root != id)
|
||||
content += 'Re: ' + h('a',
|
||||
{ href: '/' + encodeURIComponent(c.root) },
|
||||
c.root.substring(0, 10)).outerHTML + '<br>';
|
||||
s.innerHTML = content + marked(String(c.text), opts.marked);
|
||||
return s;
|
||||
content += 'Re: ' + h('a',
|
||||
{ href: '/' + encodeURIComponent(c.root) },
|
||||
c.root.substring(0, 10)).outerHTML + '<br>'
|
||||
s.innerHTML = content + marked(String(c.text), opts.marked)
|
||||
return s
|
||||
}
|
||||
|
||||
function renderDefault(c) {
|
||||
return h('pre', JSON.stringify(c, 0, 2));
|
||||
return h('pre', JSON.stringify(c, 0, 2))
|
||||
}
|
||||
|
||||
function renderShowAll(showAll, url) {
|
||||
if (!showAll)
|
||||
return '<br>' + h('a', { href : url + '?showAll' }, 'Show whole feed').outerHTML;
|
||||
return '<br>' + h('a', { href : url + '?showAll' }, 'Show whole feed').outerHTML
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user