From 451dbbc3d29029b720681f7919007c957344197b Mon Sep 17 00:00:00 2001 From: Felipe Gentil Date: Fri, 16 Oct 2015 17:14:31 -0300 Subject: [PATCH 1/2] Extracting full URLs from commit message --- app/helpers/events_helper.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 6f69c2a9f32..44a8c9e32bb 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -181,6 +181,10 @@ module EventsHelper sanitize(text, tags: %w(a img b pre code p span)) end + def event_commit_urls(message) + URI.extract(message) + end + def event_commit_title(message) escape_once(truncate(message.split("\n").first, length: 70)) rescue -- GitLab From 4d75271892eaaa2cfc2d5de130ebd79404664cf2 Mon Sep 17 00:00:00 2001 From: Felipe Gentil Date: Fri, 16 Oct 2015 17:15:00 -0300 Subject: [PATCH 2/2] Replace broken url by full ones extracted from commit messages --- app/views/events/_commit.html.haml | 2 +- lib/gitlab/markdown.rb | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/views/events/_commit.html.haml b/app/views/events/_commit.html.haml index ad63841ccf3..e69cad5d136 100644 --- a/app/views/events/_commit.html.haml +++ b/app/views/events/_commit.html.haml @@ -2,4 +2,4 @@ .commit-row-title = link_to truncate_sha(commit[:id]), namespace_project_commit_path(project.namespace, project, commit[:id]), class: "commit_short_id", alt: '' · - = gfm event_commit_title(commit[:message]), project: project + = gfm event_commit_title(commit[:message]), project: project, hrefs: event_commit_urls(commit[:message]) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 32a368c2e2b..1ed9c85856e 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -102,6 +102,13 @@ module Gitlab save_options |= Nokogiri::XML::Node::SaveOptions::AS_XHTML end + uri_regex = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ + result[:output].children.select{|klass| klass.name == "a"}.map! do |a_class| + unless a_class["href"] =~ uri_regex + a_class["href"] = options[:hrefs].select{|url| url.match(a_class["href"])}.first + end + end + text = result[:output].to_html(save_with: save_options) text.html_safe -- GitLab