From 6a5a502d58b96d41197a46aa5db3bffc9966410f Mon Sep 17 00:00:00 2001
From: JC Brand <jc@opkode.com>
Date: Sun, 7 Oct 2018 04:46:41 +0200
Subject: [PATCH] Add support for rendering xmpp: and mailto: URIs

---
 dist/converse.js  | 11 +++++++----
 src/utils/core.js | 11 +++++++----
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/dist/converse.js b/dist/converse.js
index 145cb6aac..fbb54e0c2 100644
--- a/dist/converse.js
+++ b/dist/converse.js
@@ -81605,16 +81605,19 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
   };
 
   u.addHyperlinks = function (text) {
-    return URI.withinString(text, function (url) {
-      var uri = new URI(url);
+    return URI.withinString(text, url => {
+      const uri = new URI(url);
       uri.normalize();
+      const pretty_url = uri._parts.urn ? url : uri.readable();
 
-      if (!url.startsWith('http://') && !url.startsWith('https://')) {
+      if (!uri._parts.protocol && !url.startsWith('http://') && !url.startsWith('https://')) {
         url = 'http://' + url;
       }
 
       url = u.escapeHTML(u.escapeURL(url));
-      return `<a target="_blank" rel="noopener" href="${url}">${u.escapeHTML(uri.readable())}</a>`;
+      return `<a target="_blank" rel="noopener" href="${url}">${u.escapeHTML(pretty_url)}</a>`;
+    }, {
+      'start': /\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi
     });
   };
 
diff --git a/src/utils/core.js b/src/utils/core.js
index 0f8d228be..1839c5505 100644
--- a/src/utils/core.js
+++ b/src/utils/core.js
@@ -265,14 +265,17 @@
     };
 
     u.addHyperlinks = function (text) {
-        return URI.withinString(text, function (url) {
-            var uri = new URI(url);
+        return URI.withinString(text, url => {
+            const uri = new URI(url);
             uri.normalize();
-            if (!url.startsWith('http://') && !url.startsWith('https://')) {
+            const pretty_url = uri._parts.urn ? url : uri.readable();
+            if (!uri._parts.protocol && !url.startsWith('http://') && !url.startsWith('https://')) {
                 url = 'http://' + url;
             }
             url = u.escapeHTML(u.escapeURL(url));
-            return `<a target="_blank" rel="noopener" href="${url}">${u.escapeHTML(uri.readable())}</a>`;
+            return `<a target="_blank" rel="noopener" href="${url}">${u.escapeHTML(pretty_url)}</a>`;
+        }, {
+            'start': /\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi
         });
     };
 
-- 
2.30.9