Просмотр исходного кода

Added clickable urls to table row details view

Rashid Khan 12 лет назад
Родитель
Сommit
78dbf58536
2 измененных файлов с 38 добавлено и 1 удалено
  1. 36 0
      js/filters.js
  2. 2 1
      panels/table/module.html

+ 36 - 0
js/filters.js

@@ -32,4 +32,40 @@ angular.module('kibana.filters', [])
       return arr.toString();
     }
   };
+
+}).filter('noXml', function() {
+  return function(text) {
+    if(!_.isString(text)) {
+      return text;
+    }
+    return text.
+      replace(/&/g, '&').
+      replace(/</g, '&lt;').
+      replace(/>/g, '&gt;').
+      replace(/'/g, '&#39;').
+      replace(/"/g, '&quot;');
+  };
+}).filter('urlLink', function() {
+  var  //URLs starting with http://, https://, or ftp://
+    r1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim,
+    //URLs starting with "www." (without // before it, or it'd re-link the ones done above).
+    r2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim,
+    //Change email addresses to mailto:: links.
+    r3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
+
+  return function(text, target, otherProp) {
+    if(!_.isString(text)) {
+      return text;
+    }
+    _.each(text.match(r1), function(url) {
+      text = text.replace(r1, "<a href=\"$1\" target=\"_blank\">$1</a>");
+    });
+    _.each(text.match(r2), function(url) {
+      text = text.replace(r2, "$1<a href=\"http://$2\" target=\"_blank\">$2</a>");
+    });
+    _.each(text.match(r3), function(url) {
+      text = text.replace(r3, "<a href=\"mailto:$1\">$1</a>");
+    });
+    return text;
+  };
 });

+ 2 - 1
panels/table/module.html

@@ -74,7 +74,8 @@
                     <i class='icon-search pointer' ng-click="build_search(key,value)"></i>
                     <i class='icon-ban-circle pointer' ng-click="build_search(key,value,true)"></i>
                   </td>
-                  <td style="white-space:pre-wrap">{{value}}</td>
+                  <!-- At some point we need to create a more efficient way of applying the filter pipeline -->
+                  <td style="white-space:pre-wrap" ng-bind-html-unsafe="value|noXml|urlLink"></td>
                 </tr>
               </table>
             </td>