Commit 865ad391590f0190881008c270959f5bd1f8c6da
move compose and render tools into their own files
Ev Bogue committed on 4/28/2018, 7:34:56 PMParent: 7ee2a3885b11ba612000e0ce307579bb5deccfe3
Files changed
render.js | changed |
scuttlebot.js | changed |
compose.js | added |
rendertools.js | added |
render.js | ||
---|---|---|
@@ -1,46 +1,20 @@ | ||
1 | 1 … | var h = require('hyperscript') |
2 | -var human = require('human-time') | |
3 | -var ref = require('ssb-ref') | |
4 | -var avatar = require('./avatar') | |
5 | - | |
6 | 2 … | var markdown = require('ssb-markdown') |
7 | 3 … | var config = require('./config')() |
8 | 4 … | |
9 | -function rawJSON (obj) { | |
10 | - return JSON.stringify(obj, null, 2) | |
11 | - .split(/([%@&][a-zA-Z0-9\/\+]{43}=*\.[\w]+)/) | |
12 | - .map(function (e) { | |
13 | - if(ref.isMsg(e) || ref.isFeed(e) || ref.isBlob(e)) { | |
14 | - return h('a', {href: '#' + e}, e) | |
15 | - } | |
16 | - return e | |
17 | - }) | |
18 | -} | |
5 … | +var sbot = require('./scuttlebot') | |
6 … | +var composer = require('./compose') | |
19 | 7 … | |
20 | -function header (msg) { | |
21 | - return h('div.header', | |
22 | - h('span.avatar', | |
23 | - h('a', {href: '#' + msg.value.author}, | |
24 | - h('span.avatar--small', avatar.image(msg.value.author)), | |
25 | - avatar.name(msg.value.author) | |
26 | - ) | |
27 | - ), | |
28 | - h('span.timestamp', h('a', {href: '#' + msg.key}, human(new Date(msg.value.timestamp)))), | |
29 | - ) | |
30 | -} | |
8 … | +var tools = require('./rendertools') | |
31 | 9 … | |
32 | -function messageLink (msglink) { | |
33 | - var link = h('span', h('a', {href: '#' + msglink}, msglink.substring(0, 8) + '...')) | |
34 | - return link | |
35 | -} | |
10 … | +module.exports = function (msg) { | |
36 | 11 … | |
37 | -module.exports = function (msg) { | |
38 | 12 … | var message = h('div.message') |
39 | 13 … | if (msg.value.content.type == 'post') { |
40 | - message.appendChild(header(msg)) | |
14 … | + message.appendChild(tools.header(msg)) | |
41 | 15 … | if (msg.value.content.root) { |
42 | - message.appendChild(h('span', 're: ', messageLink(msg.value.content.root))) | |
16 … | + message.appendChild(h('span', 're: ', tools.messageLink(msg.value.content.root))) | |
43 | 17 … | } |
44 | 18 … | message.appendChild(h('div.message__body', |
45 | 19 … | {innerHTML: markdown.block(msg.value.content.text, {toUrl: function (url, image) { |
46 | 20 … | if(url[0] == '%' || url[0] == '@') return '#' + url |
@@ -49,36 +23,42 @@ | ||
49 | 23 … | return config.blobsUrl + url |
50 | 24 … | }})} |
51 | 25 … | ) |
52 | 26 … | ) |
27 … | + message.appendChild(h('button.btn', 'Reply', { | |
28 … | + onclick: function () { | |
29 … | + var compose = composer() | |
30 … | + message.replaceChild(compose, message.lastElementChild) | |
31 … | + } | |
32 … | + })) | |
53 | 33 … | return message |
54 | 34 … | } else if (msg.value.content.type == 'vote') { |
55 | - message.appendChild(header(msg)) | |
35 … | + message.appendChild(tools.header(msg)) | |
56 | 36 … | var embed = msg.value.content.vote.link |
57 | 37 … | |
58 | 38 … | var embedded = h('div.embedded') |
59 | 39 … | sbot.get(embed, function (err, msg) { |
60 | 40 … | if (err) {console.log('could not find message locally, try ooo?') } |
61 | 41 … | msg.value = msg |
62 | 42 … | msg.key = embed |
63 | 43 … | if (msg.value.content.text) { |
64 | - //message.appendChild(h('img.emoji', {src: config.emojiUrl + 'star.png'})) | |
65 | 44 … | message.appendChild(embedded) |
66 | - embedded.appendChild(header(msg)) | |
45 … | + embedded.appendChild(tools.header(msg)) | |
67 | 46 … | embedded.appendChild(h('div.message__body', |
68 | 47 … | {innerHTML: markdown.block(msg.value.content.text.substring(0, 256) + '... ', {toUrl: function (url, image) { |
69 | 48 … | if(url[0] == '@') return '#' + url |
70 | 49 … | if(url[0] == '%') return '#' + url |
71 | 50 … | if(!image) return url |
72 | 51 … | if(url[0] !== '&') return url |
73 | 52 … | return config.blobsUrl + url |
74 | - }})}, messageLink(msg.key) | |
53 … | + }})}, tools.messageLink(msg.key) | |
75 | 54 … | )) |
76 | 55 … | } |
77 | 56 … | }) |
78 | 57 … | return message |
79 | - } else { | |
80 | - //message.appendChild(h('pre', rawJSON(msg.value.content))) | |
58 … | + } else { | |
59 … | + //message.appendChild(tools.header(msg)) | |
60 … | + //message.appendChild(h('pre', tools.rawJSON(msg.value.content))) | |
81 | 61 … | //return message |
82 | 62 … | return |
83 | 63 … | } |
84 | 64 … | } |
scuttlebot.js | ||
---|---|---|
@@ -62,7 +62,30 @@ | ||
62 | 62 … | }) |
63 | 63 … | }), |
64 | 64 … | links: rec.source(function (query) { |
65 | 65 … | return sbot.links(query) |
66 … | + }), | |
67 … | + addblob: rec.sink(function (cb) { | |
68 … | + return sbot.blobs.add(cb) | |
69 … | + }), | |
70 … | + publish: rec.async(function (content, cb) { | |
71 … | + if(content.recps) | |
72 … | + content = ssbKeys.box(content, content.recps.map(function (e) { | |
73 … | + return ref.isFeed(e) ? e : e.link | |
74 … | + })) | |
75 … | + else if(content.mentions) | |
76 … | + content.mentions.forEach(function (mention) { | |
77 … | + if(ref.isBlob(mention.link)) { | |
78 … | + sbot.blobs.push(mention.link, function (err) { | |
79 … | + if(err) console.error(err) | |
80 … | + }) | |
81 … | + } | |
82 … | + }) | |
83 … | + feed.add(content, function (err, msg) { | |
84 … | + if(err) console.error(err) | |
85 … | + else if(!cb) console.log(msg) | |
86 … | + cb && cb(err, msg) | |
87 … | + }) | |
66 | 88 … | }) |
89 … | + | |
67 | 90 … | } |
68 | 91 … |
compose.js | ||
---|---|---|
@@ -1,0 +1,52 @@ | ||
1 … | +var h = require('hyperscript') | |
2 … | +var pull = require('pull-stream') | |
3 … | +var sbot = require('./scuttlebot') | |
4 … | + | |
5 … | +var mime = require('simple-mime')('application/octect-stream') | |
6 … | +var split = require('split-buffer') | |
7 … | + | |
8 … | +function file_input (onAdded) { | |
9 … | + return h('label.btn', 'Upload file', | |
10 … | + h('input', { type: 'file', hidden: true, | |
11 … | + onchange: function (ev) { | |
12 … | + var file = ev.target.files[0] | |
13 … | + if (!file) return | |
14 … | + var reader = new FileReader() | |
15 … | + reader.onload = function () { | |
16 … | + pull( | |
17 … | + pull.values(split(new Buffer(reader.result), 64*1024)), | |
18 … | + sbot.addblob(function (err, blob) { | |
19 … | + if(err) return console.error(err) | |
20 … | + onAdded({ | |
21 … | + link: blob, | |
22 … | + name: file.name, | |
23 … | + size: reader.result.length || reader.result.byteLength, | |
24 … | + type: mime(file.name) | |
25 … | + }) | |
26 … | + }) | |
27 … | + ) | |
28 … | + } | |
29 … | + reader.readAsArrayBuffer(file) | |
30 … | + } | |
31 … | + })) | |
32 … | +} | |
33 … | + | |
34 … | +module.exports = function (opts) { | |
35 … | + var files = [] | |
36 … | + var filesById = {} | |
37 … | + | |
38 … | + var textarea = h('textarea.compose', {placeholder: 'Reply to this post'}) | |
39 … | + | |
40 … | + var composer = h('div', | |
41 … | + textarea, | |
42 … | + h('button.btn', 'Preview'), | |
43 … | + file_input(function (file) { | |
44 … | + files.push(file) | |
45 … | + filesById[file.link] = file | |
46 … | + var embed = file.type.indexOf('image/') === 0 ? '!' : '' | |
47 … | + textarea.value += embed + '['+file.name+']('+file.link+')' | |
48 … | + }) | |
49 … | + ) | |
50 … | + return composer | |
51 … | +} | |
52 … | + |
rendertools.js | ||
---|---|---|
@@ -1,0 +1,33 @@ | ||
1 … | +var h = require('hyperscript') | |
2 … | +var human = require('human-time') | |
3 … | +var avatar = require('./avatar') | |
4 … | +var ref = require('ssb-ref') | |
5 … | + | |
6 … | + | |
7 … | +module.exports.header = function (msg) { | |
8 … | + return h('div.header', | |
9 … | + h('span.avatar', | |
10 … | + h('a', {href: '#' + msg.value.author}, | |
11 … | + h('span.avatar--small', avatar.image(msg.value.author)), | |
12 … | + avatar.name(msg.value.author) | |
13 … | + ) | |
14 … | + ), | |
15 … | + h('span.timestamp', h('a', {href: '#' + msg.key}, human(new Date(msg.value.timestamp)))), | |
16 … | + ) | |
17 … | +} | |
18 … | + | |
19 … | +module.exports.messageLink = function (msglink) { | |
20 … | + var link = h('span', h('a', {href: '#' + msglink}, msglink.substring(0, 8) + '...')) | |
21 … | + return link | |
22 … | +} | |
23 … | + | |
24 … | +module.exports.rawJSON = function (obj) { | |
25 … | + return JSON.stringify(obj, null, 2) | |
26 … | + .split(/([%@&][a-zA-Z0-9\/\+]{43}=*\.[\w]+)/) | |
27 … | + .map(function (e) { | |
28 … | + if(ref.isMsg(e) || ref.isFeed(e) || ref.isBlob(e)) { | |
29 … | + return h('a', {href: '#' + e}, e) | |
30 … | + } | |
31 … | + return e | |
32 … | + }) | |
33 … | +} |
Built with git-ssb-web