diff options
-rw-r--r-- | lib/app.js | 29 | ||||
-rw-r--r-- | lib/render-msg.js | 133 |
2 files changed, 162 insertions, 0 deletions
@@ -53,6 +53,7 @@ function App(sbot, config) { this.getBlobSize = memo({cache: this.blobSizeCache = lru(100)}, sbot.blobs.size.bind(sbot.blobs)) this.getVotes = memo({cache: lru(100)}, this._getVotes.bind(this)) + this.getIdeaTitle = memo({cache: lru(100)}, this.getIdeaTitle) this.unboxMsg = this.unboxMsg.bind(this) @@ -776,3 +777,31 @@ App.prototype.getAddresses = function (id) { pull.unique() ) } + +App.prototype.getIdeaTitle = function (id, cb) { + pull( + this.sbot.backlinks.read({ + reverse: true, + query: [ + {$filter: { + dest: id, + value: { + content: { + type: 'talenet-idea-update', + ideaKey: id, + title: {$truthy: true} + } + } + }}, + {$map: ['value', 'content', 'title']} + ] + }), + pull.take(1), + pull.collect(function (err, titles) { + if (err) return cb(err) + var title = titles && titles[0] + || (String(id).substr(0, 8) + '…') + cb(null, title) + }) + ) +} diff --git a/lib/render-msg.js b/lib/render-msg.js index a7b7339..f84b0ae 100644 --- a/lib/render-msg.js +++ b/lib/render-msg.js @@ -277,6 +277,14 @@ RenderMsg.prototype.message = function (cb) { case 'macaco_maluco-sombrio-score': return this.sombrioScore(cb) case 'blog': return this.blog(cb) case 'image-map': return this.imageMap(cb) + case 'talenet-identity-skill_assignment': return this.identitySkillAssign(cb) + case 'talenet-idea-skill_assignment': return this.ideaSkillAssign(cb) + case 'talenet-idea-create': return this.ideaCreate(cb) + case 'talenet-idea-association': return this.ideaAssocate(cb) + case 'talenet-skill-create': return this.skillCreate(cb) + case 'talenet-idea-hat': return this.ideaHat(cb) + case 'talenet-idea-update': return this.ideaUpdate(cb) + case 'talenet-idea-comment': return this.ideaComment(cb) default: return this.object(cb) } } @@ -400,6 +408,10 @@ RenderMsg.prototype.title1 = function (cb) { self.chessInviteTitle(cb) else if (self.c.type === 'bookclub') self.bookclubTitle(cb) + else if (self.c.type === 'talenet-skill-create') + cb(null, title(self.c.name)) + else if (self.c.type === 'talenet-idea-create') + self.app.getIdeaTitle(self.msg.key, cb) else self.app.getAbout(self.msg.key, function (err, about) { if (err) return cb(err) @@ -1479,3 +1491,124 @@ RenderMsg.prototype.imageMap = function (cb) { }) : '' ]), cb) } + +RenderMsg.prototype.skillCreate = function (cb) { + var self = this + self.wrapMini(h('span', + ' created skill ', + h('ins', self.c.name) + ), cb) +} + +RenderMsg.prototype.ideaCreate = function (cb) { + var self = this + self.wrapMini(h('span', + ' has an idea' + ), cb) +} + +RenderMsg.prototype.identitySkillAssign = function (cb) { + var self = this + self.link(self.c.skillKey, function (err, a) { + self.wrapMini(h('span', + self.c.action === 'assign' ? 'has ' + : h('code', self.c.action), ' ', + 'skill ', a + ), cb) + }) +} + +RenderMsg.prototype.ideaSkillAssign = function (cb) { + var self = this + var done = multicb({pluck: 1, spread: true}) + self.link(self.c.skillKey, done()) + self.link(self.c.ideaKey, done()) + done(function (err, skillA, ideaA) { + self.wrapMini(h('span', + self.c.action === 'assign' ? 'needs ' + : h('code', self.c.action), ' ', + 'skill ', skillA, + ' for idea ', + ideaA + ), cb) + }) +} + +RenderMsg.prototype.ideaAssocate = function (cb) { + var self = this + self.link(self.c.ideaKey, function (err, a) { + self.wrapMini(h('span', + self.c.action === 'associate' ? 'likes ' + : h('code', self.c.action), ' ', + 'idea ', a + ), cb) + }) +} + +RenderMsg.prototype.ideaHat = function (cb) { + var self = this + self.link(self.c.ideaKey, function (err, a) { + self.wrapMini(h('span', + self.c.action === 'take' ? 'takes ' + : h('code', self.c.action), ' ', + 'idea ', a + ), cb) + }) +} + +RenderMsg.prototype.ideaUpdate = function (cb) { + var self = this + var done = multicb({pluck: 1, spread: true}) + var props = {} + for (var k in self.c) { + if (k !== 'ideaKey' && k !== 'type' && k !== 'talenet-version') { + props[k] = self.c[k] + } + } + var keys = Object.keys(props).sort().join() + + if (keys === 'title') { + return self.wrapMini(h('span', + 'titles idea ', + h('a', {href: self.toUrl(self.c.ideaKey)}, props.title) + ), cb) + } + + if (keys === 'description') { + return self.link(self.c.ideaKey, function (err, a) { + self.wrap(h('div', + 'describes idea ', a, ':', + h('blockquote', {innerHTML: self.render.markdown(props.description)}) + ), cb) + }) + } + + if (keys === 'description,title') { + return self.wrap(h('div', + 'describes idea ', + h('a', {href: self.toUrl(self.c.ideaKey)}, props.title), + ':', + h('blockquote', {innerHTML: self.render.markdown(props.description)}) + ), cb) + } + + self.link(self.c.ideaKey, done()) + var table = self.valueTable(props, 1, done()) + done(function (err, ideaA) { + self.wrap(h('div', [ + 'updates idea ', ideaA, + table + ]), cb) + }) +} + +RenderMsg.prototype.ideaComment = function (cb) { + var self = this + self.link(self.c.ideaKey, function (err, ideaA) { + self.wrap(h('div', [ + h('div', h('small', h('span.symbol', '→'), ' idea ', ideaA)), + self.c.text ? + h('div', {innerHTML: self.render.markdown(self.c.text)}) : '' + ]), cb) + }) +} |