diff --git a/js/views/message_view.js b/js/views/message_view.js index ddae6183f..9e4d98144 100644 --- a/js/views/message_view.js +++ b/js/views/message_view.js @@ -31,7 +31,6 @@ } }); - var ContentMessageView = Whisper.View.extend({ tagName: 'div', template: $('#message').html(), @@ -45,6 +44,9 @@ renderDelivered: function() { if (this.model.get('delivered')) { this.$el.addClass('delivered'); } }, + autoLink: function(text) { + return text.replace(/(^|[\s\n]|)((?:https?|ftp):\/\/[\-A-Z0-9+\u0026\u2019@#\/%?=()~_|!:,.;]*[\-A-Z0-9+\u0026@#\/%=~()_|])/gi, "$1$2"); + }, render: function() { this.$el.html( Mustache.render(this.template, { @@ -54,6 +56,9 @@ }) ); + var content = this.$el.find('.content'); + content.html(this.autoLink(content.html())); + this.renderDelivered(); this.$el.find('.attachments').append( diff --git a/test/index.html b/test/index.html index a0da11954..e3acb6029 100644 --- a/test/index.html +++ b/test/index.html @@ -47,16 +47,13 @@ '; + message.set('body', xss); + var view = new Whisper.MessageView({model: message}); + view.render(); + assert.include(view.$el.text(), xss); // should appear as escaped text + assert.strictEqual(view.$el.find('script').length, 0); // should not appear as html + }); });