Commit 28c9a595 authored by csillag's avatar csillag

Made URLs in the annotation bodies clickable, as requested in issue #155.

Changes made:

Until so far, the "details" and "summary" Handlebars templates referenced
the "text" field of the annotation object, and they automatically
HTML-escaped the content found there.

Since now we are placing HTML unsafe content there (the links),
this had to be changed. So now the templates are using triple-stash
(which means no automatic escaping), and reference the "rendered_text"
field of the annotation object.

This rendered_text is filled by manually escaping the text of the
annotation body, plus making the URLs clickable.
parent 7684f6fe
......@@ -346,6 +346,7 @@ class Hypothesis extends Annotator
.each (d) ->
_t = d3.select(this)
unless this and _t.classed('summary')
window.renderAnnotation(d.message.annotation)
_t.html Handlebars.templates.summary d.message.annotation
.classed('detail', false)
.classed('summary', true)
......@@ -416,6 +417,7 @@ class Hypothesis extends Annotator
unless count == 0
d.message.annotation.replyCount = replyCount
.html (d) ->
window.renderAnnotation(d.message.annotation)
Handlebars.templates.detail d.message.annotation
.classed('paper', (c) -> not c.parent.message?)
.classed('detail', true)
......@@ -555,3 +557,15 @@ class Hypothesis extends Annotator
annotation.id
window.Hypothesis = Hypothesis
renderAnnotation = (annotation) ->
text = annotation.text
#Must do escaping manually, since we will need to disable Handlebar's autoamtic escaping,
# so that it leaves the inserted links intact
safe_text = Handlebars.Utils.escapeExpression(text)
rendered_text = safe_text.replace /(https?:\/\/[^\s]+)/g, (match) ->
"<a href=\"" + match + "\">" + match + "</a>"
annotation.rendered_text = rendered_text
window.renderAnnotation = renderAnnotation
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment