secure-scuttlebot classic
at main 141 lines 4.0 kB view raw
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}