From ad2e6a414f612d6fa86600a7416592009a05caed Mon Sep 17 00:00:00 2001 From: danielgrippi Date: Sat, 7 Jan 2012 20:47:30 -0800 Subject: [PATCH] autolink urls in content view --- public/javascripts/app/views/content_view.js | 13 +++++++++++-- spec/javascripts/app/views/post_view_spec.js | 17 +++++++++++++++++ spec/javascripts/support/jasmine.yml | 1 + 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/public/javascripts/app/views/content_view.js b/public/javascripts/app/views/content_view.js index 69f811461..c616392b2 100644 --- a/public/javascripts/app/views/content_view.js +++ b/public/javascripts/app/views/content_view.js @@ -10,7 +10,9 @@ app.views.Content = app.views.StreamObject.extend({ text = text || "" return mentionify( hashtagify( - markdownify(text) + urlify( + markdownify(text) + ) ) ) } @@ -34,11 +36,18 @@ app.views.Content = app.views.StreamObject.extend({ return person.diaspora_id == diasporaId }).id - return "" + fullName + "" }) return text } + + function urlify(text) { + var urlRegex = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi + return text.replace(urlRegex, function(url) { + var protocol = (url.search(/:\/\//) == -1 ? "http://" : "") + return "" + url + "" + }) + } } }) diff --git a/spec/javascripts/app/views/post_view_spec.js b/spec/javascripts/app/views/post_view_spec.js index d36581de9..f4fc85d44 100644 --- a/spec/javascripts/app/views/post_view_spec.js +++ b/spec/javascripts/app/views/post_view_spec.js @@ -126,6 +126,23 @@ describe("app.views.Post", function(){ }) }) + context("generates urls from plaintext", function(){ + it("works", function(){ + links = ["http://google.com", + "https://joindiaspora.com", + "http://www.yahooligans.com", + "obama.com", + "japan.co.jp"] + + this.statusMessage.set({text : links.join(" ")}) + var view = new app.views.Post({model : this.statusMessage}).render(); + + _.each(links, function(link) { + expect(view.$("a[href='" + link + "']").text()).toContain(link) + }) + }) + }) + context("user not signed in", function(){ it("does not provide a Feedback view", function(){ window.current_user = app.user(null); diff --git a/spec/javascripts/support/jasmine.yml b/spec/javascripts/support/jasmine.yml index ad92fb19a..1b8eb2ce2 100644 --- a/spec/javascripts/support/jasmine.yml +++ b/spec/javascripts/support/jasmine.yml @@ -42,6 +42,7 @@ src_files: - public/javascripts/app/models/* - public/javascripts/app/collections/* - public/javascripts/app/views/stream_object_view.js + - public/javascripts/app/views/content_view.js - public/javascripts/app/views/* - public/javascripts/mobile.js