git ssb

0+

ev / 0qc



Tree: e4ce6bb40173e08028c870d5b637e13128c98c83

Files: e4ce6bb40173e08028c870d5b637e13128c98c83 / render.js

10010 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
11var avatar = require('./avatar')
12var ssbAvatar = require('ssb-avatar')
13
14var ssbKeys = require('ssb-keys')
15var keys = require('./keys')
16
17var diff = require('diff')
18
19function hash () {
20 return window.location.hash.substring(1)
21}
22
23module.exports.render = function (msg) {
24
25
26 var messageExists = (document.getElementById(msg.key.substring(0, 44)) !== null);
27
28 if (!messageExists) {
29 var message = h('div.message#' + msg.key.substring(0, 44))
30 //console.log(msg)
31 var messageContent = h('div.messageContent')
32 message.appendChild(messageContent)
33
34 pull(
35 sbot.backlinks({
36 query: [{$filter: {dest: msg.key}}],
37 live: true,
38 reverse: false,
39 index: 'DTA'
40 }),
41 pull.drain(function (data) {
42 if (data.sync) {
43 } else {
44 if (data.value.content.type == 'vote') {
45 var subMessageExists = (document.getElementById(data.key.substring(0, 44)) !== null)
46 if (msg.key == data.value.content.vote.link) {
47 if (data.value.content.vote.value == 1) {
48 var link = h('span', ' ', h('img.emoji', {src: config.emojiUrl + 'star.png'}), ' ', h('a', {href: '#' + data.value.content.vote.link}, tools.messageLink(data.value.content.vote.link)))
49 if (!subMessageExists) {
50 message.appendChild(h('div.submessage', h('div.messageContent', tools.mini(data, link))))
51 }
52 if (data.value.author == id) {
53 var gotIt = document.getElementById('votebutton:' + msg.key.substring(0,44))
54 if (gotIt != null) {
55 gotIt.parentNode.appendChild(tools.unstar(msg))
56 gotIt.parentNode.removeChild(gotIt)
57 }
58 }
59 } else if (data.value.content.vote.value == -1) {
60 var link = h('span', ' ', h('img.emoji', {src: config.emojiUrl + 'stars.png'}), ' ', h('a', {href: '#' + data.value.content.vote.link}, tools.messageLink(data.value.content.vote.link)))
61 if (!subMessageExists) {
62 message.appendChild(h('div.submessage', h('div.messageContent', tools.mini(data, link))))
63 }
64 if (data.value.author == id) {
65 var gotIt = document.getElementById('votebutton:' + msg.key.substring(0,44))
66 if (gotIt != null) {
67 gotIt.parentNode.appendChild(tools.star(msg))
68 gotIt.parentNode.removeChild(gotIt)
69 }
70 }
71 }
72 }
73 }
74 else if (!subMessageExists) {
75 if (data.value.content.type == 'post') {
76 if (
77 (msg.key == data.value.content.root) ||
78 (msg.value.content.root == data.value.content.root)
79 ) {
80 message.appendChild(h('div.submessage', (exports.render(data))))
81 }
82 } else {
83 var link = h('span', ' backlinked from ', tools.messageLink(data.key))
84 message.appendChild(h('div.submessage', h('div.messageContent', tools.mini(data, link))))
85 }
86 } else { //console.log('message already rendered')
87 }
88 }
89 })
90 )
91
92 if (msg.value.content.type == 'post') {
93
94 messageContent.appendChild(tools.header(msg))
95
96 if (msg.value.content.root) {
97 messageContent.appendChild(h('span', 're: ', tools.messageLink(msg.value.content.root)))
98 }
99
100 messageContent.appendChild(h('div.message__body', tools.markdown(msg.value.content.text)))
101
102 var buttons = h('div.buttons')
103
104 buttons.appendChild(tools.star(msg))
105
106 messageContent.appendChild(buttons)
107 return message
108 }
109
110 if (msg.value.content.type == 'vote') {
111 if (msg.value.content.vote.value == 1)
112 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)))
113 else if (msg.value.content.vote.value == -1)
114 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)))
115 messageContent.appendChild(tools.mini(msg, link))
116 return message
117 }
118
119 if (msg.value.content.type == 'about') {
120 if (msg.value.content.image) {
121 var image = h('span.avatar--small',
122 ' identified ',
123 h('a', {href: '#' + msg.value.content.about}, avatar.cachedName(msg.value.content.about)),
124 ' as ',
125 h('img', {src: config.blobsUrl + msg.value.content.image.link})
126 )
127 messageContent.appendChild(tools.mini(msg, image))
128 return message
129 }
130 if (msg.value.content.name) {
131 var name = h('span',
132 ' identified ',
133 h('a', {href: '#' + msg.value.content.about}, avatar.cachedName(msg.value.content.about)),
134 ' as ', msg.value.content.name
135 )
136 messageContent.appendChild(tools.mini(msg, name))
137 return message
138 }
139 }
140
141 if (msg.value.content.type == 'label'){
142 var content = h('span', ' labeled ', tools.messageLink(msg.value.content.link), ' as ', h('mark', h('a', {href: '#label/' + msg.value.content.label}, msg.value.content.label)))
143 messageContent.appendChild(tools.mini(msg, content))
144 return message
145 }
146
147 if (msg.value.content.type == 'queue') {
148 if (msg.value.content.queue == true) {
149 var content = h('span', ' added ', tools.messageLink(msg.value.content.message), ' to their ', h('a', {href: '#queue'}, 'queue'))
150 messageContent.appendChild(tools.mini(msg, content))
151 }
152 if (msg.value.content.queue == false) {
153 var content = h('span', ' removed ', tools.messageLink(msg.value.content.message), ' from their ', h('a', {href: '#queue'}, 'queue'))
154 messageContent.appendChild(tools.mini(msg, content))
155
156 }
157 return message
158 }
159
160 if (msg.value.content.type == 'scat_message') {
161 var src = hash()
162 if (src != 'backchannel') {
163 messageContent.appendChild(h('button.btn.right', h('a', {href: '#backchannel'}, 'Chat')))
164 }
165 messageContent.appendChild(tools.mini(msg, ' ' + msg.value.content.text))
166 return message
167 }
168
169 else if (msg.value.content.type == 'contact') {
170 if (msg.value.content.contact) {
171 var contact = h('a', {href: '#' + msg.value.content.contact}, avatar.name(msg.value.content.contact))
172 } else { var contact = h('p', 'no contact named')}
173
174 if (msg.value.content.following == true) {
175 var following = h('span', ' follows ', contact)
176 messageContent.appendChild(tools.mini(msg, following))
177 }
178 if (msg.value.content.following == false) {
179 var unfollowing = h('span', ' unfollows ', contact)
180 messageContent.appendChild(tools.mini(msg, unfollowing))
181 }
182 if (msg.value.content.blocking == true) {
183 var blocking = h('span', ' blocks ', contact)
184 messageContent.appendChild(tools.mini(msg, blocking))
185 }
186 if (msg.value.content.blocking == false) {
187 var unblocking = h('span', ' unblocks ', contact)
188 messageContent.appendChild(tools.mini(msg, unblocking))
189 }
190 return message
191
192 }
193
194
195 if (msg.value.content.type == 'git-update') {
196
197 messageContent.appendChild(tools.header(msg))
198
199 var reponame = h('p', 'pushed to ', h('a', {href: '#' + msg.value.content.repo}, msg.value.content.repo))
200
201 var cloneurl = h('pre', 'git clone ssb://' + msg.value.content.repo)
202
203 messageContent.appendChild(reponame)
204
205 ssbAvatar(sbot, id, msg.value.content.repo, function (err, data) {
206 if (data) {
207 var actualname = h('p', 'pushed to ', h('a', {href: '#' + msg.value.content.repo}, '%' + data.name))
208 reponame.parentNode.replaceChild(actualname, reponame)
209 }
210 })
211
212 messageContent.appendChild(cloneurl)
213
214 var commits = h('ul')
215 if (msg.value.content.commits) {
216 msg.value.content.commits.map(function (commit) {
217 commits.appendChild(h('li', h('code', commit.sha1), ' - ', commit.title))
218 })
219 }
220
221 messageContent.appendChild(commits)
222
223 return message
224 }
225
226 if (msg.value.content.type == 'git-repo') {
227 messageContent.appendChild(tools.header(msg))
228
229 var reponame = h('p', 'git-ssb repo ', h('a', {href: '#' + msg.key}, msg.key))
230
231 messageContent.appendChild(reponame)
232
233 ssbAvatar(sbot, id, msg.key, function (err, data) {
234 if (data)
235 var actualname = h('p', 'git-ssb repo ', h('a', {href: '#' + msg.key}, '%' + data.name))
236 reponame.parentNode.replaceChild(actualname, reponame)
237 })
238
239 var cloneurl = h('pre', 'git clone ssb://' + msg.key)
240 messageContent.appendChild(cloneurl)
241 return message
242 }
243
244 if (typeof msg.value.content === 'string') {
245 var unboxed = ssbKeys.unbox(msg.value.content, keys)
246 if (unboxed) {
247 msg.value.content = unboxed
248 msg.value.private = true
249 return exports.render(msg)
250 } else {
251 var privateMsg = h('span', ' sent a private message.')
252 messageContent.appendChild(tools.mini(msg, privateMsg))
253 return message
254 }
255 }
256
257 else {
258 //FULL FALLBACK
259 //message.appendChild(tools.header(msg))
260 messageContent.appendChild(tools.header(msg))
261 messageContent.appendChild(h('pre', tools.rawJSON(msg.value)))
262
263 //MINI FALLBACK
264 //var fallback = h('span', ' ' + msg.value.content.type)
265 //message.appendChild(tools.mini(msg, fallback))
266 return message
267 }
268 }
269}
270

Built with git-ssb-web