git ssb

0+

alanz / patchwork



forked from Matt McKegg / patchwork

Tree: 38b0812f2f3a84faff8a7c371f0d54fe34ad12c8

Files: 38b0812f2f3a84faff8a7c371f0d54fe34ad12c8 / modules / message.js

3257 bytesRaw
1var h = require('../lib/h')
2var when = require('@mmckegg/mutant/when')
3
4var plugs = require('patchbay/plugs')
5var message_content = plugs.first(exports.message_content = [])
6var message_content_mini = plugs.first(exports.message_content_mini = [])
7var message_link = plugs.first(exports.message_link = [])
8var avatar_image = plugs.first(exports.avatar_image = [])
9var avatar_name = plugs.first(exports.avatar_name = [])
10var avatar_link = plugs.first(exports.avatar_link = [])
11var message_meta = plugs.map(exports.message_meta = [])
12var message_main_meta = plugs.map(exports.message_main_meta = [])
13var message_action = plugs.map(exports.message_action = [])
14var contextMenu = require('../lib/context-menu')
15
16exports.data_render = function (msg) {
17 var div = h('Message -data', {
18 'ev-contextmenu': contextMenu.bind(null, msg)
19 }, [
20 messageHeader(msg),
21 h('section', [
22 h('pre', [
23 JSON.stringify(msg, null, 2)
24 ])
25 ])
26 ])
27 return div
28}
29
30exports.message_render = function (msg, opts) {
31 opts = opts || {}
32 var inContext = opts.inContext
33 var previousId = opts.previousId
34 var inSummary = opts.inSummary
35
36 var elMini = message_content_mini(msg)
37 var el = message_content(msg)
38
39 if (elMini && (!el || inSummary)) {
40 var div = h('Message', {
41 'ev-contextmenu': contextMenu.bind(null, msg)
42 }, [
43 h('header', [
44 h('div.mini', [
45 avatar_link(msg.value.author, avatar_name(msg.value.author), ''),
46 ' ', elMini
47 ]),
48 h('div.meta', [message_main_meta(msg)])
49 ])
50 ])
51 div.setAttribute('tabindex', '0')
52 return div
53 }
54
55 if (!el) return
56
57 var classList = []
58 var replyInfo = null
59
60 if (msg.value.content.root) {
61 classList.push('-reply')
62 if (!inContext) {
63 replyInfo = h('span', ['in reply to ', message_link(msg.value.content.root)])
64 } else if (previousId && last(msg.value.content.branch) && previousId !== last(msg.value.content.branch)) {
65 replyInfo = h('span', ['in reply to ', message_link(last(msg.value.content.branch))])
66 }
67 }
68
69 var element = h('Message', {
70 classList,
71 'ev-contextmenu': contextMenu.bind(null, msg),
72 'ev-keydown': function (ev) {
73 // on enter, hit first meta.
74 if (ev.keyCode === 13) {
75 element.querySelector('.enter').click()
76 }
77 }
78 }, [
79 messageHeader(msg, replyInfo),
80 h('section', [el]),
81 when(msg.key, h('footer', [
82 h('div.actions', [
83 message_action(msg),
84 h('a', {href: '#' + msg.key}, 'Reply')
85 ])
86 ]))
87 ])
88
89 // ); hyperscript does not seem to set attributes correctly.
90 element.setAttribute('tabindex', '0')
91
92 return element
93}
94
95function messageHeader (msg, replyInfo) {
96 return h('header', [
97 h('div.main', [
98 h('a.avatar', {href: `#${msg.value.author}`}, avatar_image(msg.value.author)),
99 h('div.main', [
100 h('div.name', [
101 h('a', {href: `#${msg.value.author}`}, avatar_name(msg.value.author))
102 ]),
103 h('div.meta', [
104 message_main_meta(msg),
105 ' ', replyInfo
106 ])
107 ])
108 ]),
109 h('div.meta', message_meta(msg))
110 ])
111}
112
113function last (array) {
114 if (Array.isArray(array)) {
115 return array[array.length - 1]
116 } else {
117 return array
118 }
119}
120

Built with git-ssb-web