var h = require('hyperscript') var u = require('../util') var pull = require('pull-stream') //var plugs = require('../plugs') // //var message_content = plugs.first(exports.message_content = []) //var message_content_mini = plugs.first(exports.message_content_mini = []) // //var avatar = plugs.first(exports.avatar = []) //var avatar_name = plugs.first(exports.avatar_name = []) //var avatar_link = plugs.first(exports.avatar_link = []) //var message_meta = plugs.map(exports.message_meta = []) //var message_action = plugs.map(exports.message_action = []) //var message_link = plugs.first(exports.message_link = []) // //var sbot_links = plugs.first(exports.sbot_links = []) exports.needs = { message_content: 'first', message_content_mini: 'first', avatar: 'first', avatar_name: 'first', avatar_link: 'first', message_meta: 'map', message_action: 'map', message_link: 'first', // sbot_links: 'first' } exports.gives = 'message_render' function message_content_mini_fallback(msg) { return h('code', msg.value.content.type) } exports.create = function (api) { function mini(msg, el) { var content = el if(content && content.nodeType === 1) content.classList.add('message_content') else content = h('span.message_content', el) var div = h('div.message.message--mini.message-card.row', api.avatar_link(msg.value.author, api.avatar_name(msg.value.author)), content, h('span.message_meta.row', api.message_meta(msg)) ) div.setAttribute('tabindex', '0') return div } return function (msg, sbot) { var el = api.message_content_mini(msg) if(el) return mini(msg, el) var el = api.message_content(msg) if(!el) return mini(msg, message_content_mini_fallback(msg)) var links = [] for(var k in CACHE) { var _msg = CACHE[k] if(Array.isArray(_msg.content.mentions)) { for(var i = 0; i < _msg.content.mentions.length; i++) if(_msg.content.mentions[i].link == msg.key) links.push(k) } } var backlinks = h('div.backlinks') if(links.length) backlinks.appendChild(h('label', 'backlinks:', h('div', links.map(function (key) { return api.message_link(key) })) )) // pull( // sbot_links({dest: msg.key, rel: 'mentions', keys: true}), // pull.collect(function (err, links) { // if(links.length) // backlinks.appendChild(h('label', 'backlinks:', // h('div', links.map(function (link) { // return message_link(link.key) // })) // )) // }) // ) var content = el if(content && content.nodeType === 1) content.classList.add('message_content') else content = h('div.message_content', el) var replyLink = h('button.btn', {type: 'button'}, 'Reply') replyLink.addEventListener('click', function () { var event try { event = new CustomEvent('decent:reply', {detail: {msg: msg}}) } catch (err) { event = document.createEvent('CustomEvent') event.initCustomEvent('decent:reply', false, false, {msg: msg}) } window.dispatchEvent(event) }) var msgEl = h('div.message.message-card', h('div.title.row', h('div.avatar', api.avatar(msg.value.author, 'thumbnail')), h('div.message_meta.row', api.message_meta(msg)) ), content, h('div.message_actions.row', h('div.actions', api.message_action(msg), replyLink ) ), backlinks, {onkeydown: function (ev) { //on enter, hit first meta. if(ev.keyCode == 13) { // unless in an input if (ev.target.nodeName === 'INPUT' || ev.target.nodeName === 'TEXTAREA') return msgEl.querySelector('.enter').click() } }} ) // ); hyperscript does not seem to set attributes correctly. msgEl.setAttribute('tabindex', '0') return msgEl } }