aboutsummaryrefslogtreecommitdiff
path: root/lib/render-msg.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/render-msg.js')
-rw-r--r--lib/render-msg.js56
1 files changed, 53 insertions, 3 deletions
diff --git a/lib/render-msg.js b/lib/render-msg.js
index be055ff..88e6d97 100644
--- a/lib/render-msg.js
+++ b/lib/render-msg.js
@@ -28,10 +28,60 @@ RenderMsg.prototype.linkify = function (text) {
return arr
}
+function token() {
+ return '__' + Math.random().toString(36).substr(2) + '__'
+}
+
RenderMsg.prototype.raw = function (cb) {
- this.wrap(h('pre',
- this.linkify(JSON.stringify(this.msg, 0, 2))
- ), cb)
+ // linkify various things in the JSON. TODO: abstract this better
+
+ // clone the message for linkifying
+ var m = {}, k
+ for (k in this.msg) m[k] = this.msg[k]
+ m.value = {}
+ for (k in this.msg.value) m.value[k] = this.msg.value[k]
+ var tokens = {}
+
+ // link to feed starting from this message
+ var tok = token()
+ tokens[tok] = h('a', {href:
+ this.toUrl(m.value.author + '?gt=' + (m.value.sequence-1))},
+ m.value.sequence)
+ m.value.sequence = tok
+
+ if (typeof m.value.content === 'object' && m.value.content != null) {
+ var c = m.value.content = {}
+ for (k in this.c) c[k] = this.c[k]
+
+ // link to messages of same type
+ tok = token()
+ tokens[tok] = h('a', {href: this.toUrl('/type/' + c.type)}, c.type)
+ c.type = tok
+
+ // link to channel
+ if (c.channel) {
+ tok = token()
+ tokens[tok] = h('a', {href: this.toUrl('#' + c.channel)}, c.channel)
+ c.channel = tok
+ }
+ }
+
+ // link refs
+ var els = this.linkify(JSON.stringify(m, 0, 2))
+
+ // stitch it all together
+ for (var i = 0; i < els.length; i++) {
+ if (typeof els[i] === 'string') {
+ for (var tok in tokens) {
+ if (els[i].indexOf(tok) !== -1) {
+ var parts = els[i].split(tok)
+ els.splice(i, 1, parts[0], tokens[tok], parts[1])
+ continue
+ }
+ }
+ }
+ }
+ this.wrap(h('pre', els), cb)
}
RenderMsg.prototype.wrap = function (content, cb) {