secure-scuttlebot classic
1var h = require('hyperscript')
2var u = require('../util')
3var pull = require('pull-stream')
4
5//var plugs = require('../plugs')
6//
7//var message_content = plugs.first(exports.message_content = [])
8//var message_content_mini = plugs.first(exports.message_content_mini = [])
9//
10//var avatar = plugs.first(exports.avatar = [])
11//var avatar_name = plugs.first(exports.avatar_name = [])
12//var avatar_link = plugs.first(exports.avatar_link = [])
13//var message_meta = plugs.map(exports.message_meta = [])
14//var message_action = plugs.map(exports.message_action = [])
15//var message_link = plugs.first(exports.message_link = [])
16//
17//var sbot_links = plugs.first(exports.sbot_links = [])
18
19exports.needs = {
20 message_content: 'first',
21 message_content_mini: 'first',
22 avatar: 'first',
23 avatar_name: 'first',
24 avatar_link: 'first',
25 message_meta: 'map',
26 message_action: 'map',
27 message_link: 'first',
28// sbot_links: 'first'
29}
30
31exports.gives = 'message_render'
32
33function message_content_mini_fallback(msg) {
34 return h('code', msg.value.content.type)
35}
36
37exports.create = function (api) {
38
39 function mini(msg, el) {
40 var content = el
41 if(content && content.nodeType === 1)
42 content.classList.add('message_content')
43 else
44 content = h('span.message_content', el)
45
46 var div = h('div.message.message--mini.message-card.row',
47 api.avatar_link(msg.value.author, api.avatar_name(msg.value.author)),
48 content,
49 h('span.message_meta.row', api.message_meta(msg))
50 )
51 div.setAttribute('tabindex', '0')
52 return div
53 }
54
55 return function (msg, sbot) {
56 var el = api.message_content_mini(msg)
57 if(el) return mini(msg, el)
58
59 var el = api.message_content(msg)
60 if(!el) return mini(msg, message_content_mini_fallback(msg))
61
62 var links = []
63 for(var k in CACHE) {
64 var _msg = CACHE[k]
65 if(Array.isArray(_msg.content.mentions)) {
66 for(var i = 0; i < _msg.content.mentions.length; i++)
67 if(_msg.content.mentions[i].link == msg.key)
68 links.push(k)
69 }
70 }
71
72 var backlinks = h('div.backlinks')
73 if(links.length)
74 backlinks.appendChild(h('label', 'backlinks:',
75 h('div', links.map(function (key) {
76 return api.message_link(key)
77 }))
78 ))
79
80
81 // pull(
82 // sbot_links({dest: msg.key, rel: 'mentions', keys: true}),
83 // pull.collect(function (err, links) {
84 // if(links.length)
85 // backlinks.appendChild(h('label', 'backlinks:',
86 // h('div', links.map(function (link) {
87 // return message_link(link.key)
88 // }))
89 // ))
90 // })
91 // )
92
93 var content = el
94 if(content && content.nodeType === 1)
95 content.classList.add('message_content')
96 else
97 content = h('div.message_content', el)
98
99 var replyLink = h('button.btn', {type: 'button'}, 'Reply')
100 replyLink.addEventListener('click', function () {
101 var event
102 try {
103 event = new CustomEvent('decent:reply', {detail: {msg: msg}})
104 } catch (err) {
105 event = document.createEvent('CustomEvent')
106 event.initCustomEvent('decent:reply', false, false, {msg: msg})
107 }
108 window.dispatchEvent(event)
109 })
110
111 var msgEl = h('div.message.message-card',
112 h('div.title.row',
113 h('div.avatar', api.avatar(msg.value.author, 'thumbnail')),
114 h('div.message_meta.row', api.message_meta(msg))
115 ),
116 content,
117 h('div.message_actions.row',
118 h('div.actions', api.message_action(msg),
119 replyLink
120 )
121 ),
122 backlinks,
123 {onkeydown: function (ev) {
124 //on enter, hit first meta.
125 if(ev.keyCode == 13) {
126
127 // unless in an input
128 if (ev.target.nodeName === 'INPUT'
129 || ev.target.nodeName === 'TEXTAREA') return
130
131 msgEl.querySelector('.enter').click()
132 }
133 }}
134 )
135
136 // ); hyperscript does not seem to set attributes correctly.
137 msgEl.setAttribute('tabindex', '0')
138
139 return msgEl
140 }
141}