git ssb

2+

ev / mvd



Tree: 0fc4aa1df3882d6f515d9326b51183e7bd3361f1

Files: 0fc4aa1df3882d6f515d9326b51183e7bd3361f1 / render.js

4591 bytesRaw
1var h = require('hyperscript')
2var pull = require('pull-stream')
3var human = require('human-time')
4
5var sbot = require('./scuttlebot')
6var composer = require('./compose')
7var tools = require('./tools')
8
9var config = require('./config')()
10var id = require('./keys').id
11
12
13module.exports = function (msg) {
14 var message = h('div.message#' + msg.key.substring(0, 44))
15
16 if (localStorage['mute:' + msg.value.author]) {
17 var muted = h('span', ' muted')
18 message.appendChild(tools.mini(msg, muted))
19 return message
20 }
21
22 if (msg.value.private == true) {
23 var privateMsg = h('span', ' ', h('img.emoji', {src: config.emojiUrl + 'lock.png'}), ' ', h('button.btn', 'Open'))
24 message.appendChild(tools.mini(msg, privateMsg))
25 return message
26 }
27
28 else if (msg.value.content.type == 'post') {
29 var opts = {
30 type: 'post',
31 branch: msg.key
32 }
33 var fallback = {}
34
35
36 if (msg.value.content.root)
37 opts.root = msg.value.content.root
38 else
39 opts.root = msg.key
40
41 message.appendChild(tools.header(msg))
42
43 if (msg.value.content.root)
44 message.appendChild(h('span', 're: ', tools.messageLink(msg.value.content.root)))
45
46 message.appendChild(h('div.message__body', tools.markdown(msg.value.content.text)))
47
48 pull(
49 sbot.query({query: [{$filter: {value: {content: {type: 'edit', original: msg.key}}}}], limit: 100, live: true}),
50 pull.drain(function (update) {
51 if (update.sync) {
52 //console.log('Waiting for new edits.')
53 } else {
54 var newMessage = h('div', tools.markdown(update.value.content.text))
55 var latest = h('div.message__body',
56 tools.timestamp(update, {edited: true}),
57 newMessage
58 )
59 message.replaceChild(latest, message.childNodes[message.childNodes.length - 2])
60 fallback.messageText = update.value.content.text
61 opts.updated = update.key
62 opts.original = msg.key
63 }
64 })
65 )
66
67 var buttons = h('div.buttons')
68 buttons.appendChild(h('button.btn', 'Reply', {
69 onclick: function () {
70 opts.type = 'post'
71 var r = message.childNodes.length - 1
72 delete opts.updated
73 delete opts.original
74 delete fallback.messageText
75 fallback.buttons = message.childNodes[r]
76 var compose = h('div.message#re:' + msg.key.substring(0, 44), composer(opts, fallback))
77 message.removeChild(message.childNodes[r])
78 message.parentNode.insertBefore(compose, message.nextSibling)
79 }
80 }))
81
82 if (msg.value.author == id)
83 buttons.appendChild(h('button.btn', 'Edit', {
84 onclick: function () {
85 opts.type = 'edit'
86 if (!fallback.messageText)
87 fallback.messageText = msg.value.content.text
88
89 if (!opts.updated)
90 opts.updated = msg.key
91 opts.original = msg.key
92
93 var r = message.childNodes.length - 1
94 fallback.buttons = message.childNodes[r]
95 message.removeChild(message.childNodes[r])
96 var compose = h('div#edit:' + msg.key.substring(0, 44), composer(opts, fallback))
97 message.replaceChild(compose, message.lastElementChild)
98 }
99 }))
100
101
102 var done = h('button.btn.right', '-')
103 var add = h('button.btn.right', '+')
104
105 buttons.appendChild(done)
106 buttons.appendChild(add)
107 buttons.appendChild(tools.star(msg))
108 message.appendChild(buttons)
109 return message
110
111 } else if (msg.value.content.type == 'vote') {
112 if (msg.value.content.vote.value == 1)
113 var link = h('span', ' ', h('img.emoji', {src: config.emojiUrl + 'star.png'}), ' ', h('a', {href: '#' + msg.value.content.vote.link}, tools.messageLink(msg.value.content.vote.link)))
114 else if (msg.value.content.vote.value == -1)
115 var link = h('span', ' ', h('img.emoji', {src: config.emojiUrl + 'stars.png'}), ' ', h('a', {href: '#' + msg.value.content.vote.link}, tools.messageLink(msg.value.content.vote.link)))
116 message.appendChild(tools.mini(msg, link))
117 return message
118 } else if (typeof msg.value.content === 'string') {
119 var privateMsg = h('span', ' ', h('img.emoji', {src: config.emojiUrl + 'lock.png'}))
120 message.appendChild(tools.mini(msg, privateMsg))
121 return message
122 } else {
123
124 //FULL FALLBACK
125 //message.appendChild(tools.header(msg))
126 //message.appendChild(h('pre', tools.rawJSON(msg.value.content)))
127 //return message
128
129 //MINI FALLBACK
130 var fallback = h('span', ' ' + msg.value.content.type)
131 message.appendChild(tools.mini(msg, fallback))
132 return message
133 }
134}
135

Built with git-ssb-web