Browse Source

Closes #477, closes #464. Also fixes urlLink and noXml filters on array fields

Rashid Khan 12 years ago
parent
commit
7ab2a5349a
3 changed files with 40 additions and 19 deletions
  1. 38 18
      js/filters.js
  2. 1 1
      panels/table/module.html
  3. 1 0
      panels/table/module.js

+ 38 - 18
js/filters.js

@@ -32,18 +32,23 @@ angular.module('kibana.filters', [])
       return arr.toString();
     }
   };
-
 }).filter('noXml', function() {
-  return function(text) {
-    if(!_.isString(text)) {
-      return text;
-    }
-    return text.
+  var noXml = function(text) {
+    return _.isString(text) ?
+      text.
       replace(/&/g, '&').
       replace(/</g, '&lt;').
       replace(/>/g, '&gt;').
       replace(/'/g, '&#39;').
-      replace(/"/g, '&quot;');
+      replace(/"/g, '&quot;') :
+      text;
+  };
+  return function(text) {
+    return _.isArray(text) ?
+      _.map(text,function(t) {
+        return noXml(t);
+      }) :
+      noXml(text);
   };
 }).filter('urlLink', function() {
   var  //URLs starting with http://, https://, or ftp://
@@ -53,20 +58,35 @@ angular.module('kibana.filters', [])
     //Change email addresses to mailto:: links.
     r3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
 
-  return function(text, target, otherProp) {
+  var urlLink = function(text) {
+    var t1,t2,t3;
     if(!_.isString(text)) {
       return text;
+    } else {
+      var i=1;
+      _.each(text.match(r1), function(url) {
+        t1 = text.replace(r1, "<a href=\"$1\" target=\"_blank\">$1</a>");
+      });
+      text = t1 || text;
+      _.each(text.match(r2), function(url) {
+        t2 = text.replace(r2, "$1<a href=\"http://$2\" target=\"_blank\">$2</a>");
+      });
+      text = t2 || text;
+      _.each(text.match(r3), function(url) {
+        t3 = text.replace(r3, "<a href=\"mailto:$1\">$1</a>");
+      });
+      text = t3 || 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;
+  };
+
+  return function(text, target, otherProp) {
+
+    return _.isArray(text) ?
+      _.map(text,function(t) {
+        return urlLink(t);
+      }) :
+      urlLink(text);
   };
 }).filter('gistid', function() {
   var gist_pattern = /(\d{5,})|([a-z0-9]{10,})|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/;

+ 1 - 1
panels/table/module.html

@@ -75,7 +75,7 @@
                     <i class='icon-ban-circle pointer' ng-click="build_search(key,value,true)"></i>
                   </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>
+                  <td style="white-space:pre-wrap" ng-bind-html-unsafe="value|noXml|urlLink|stringify"></td>
                 </tr>
               </table>
             </td>

+ 1 - 0
panels/table/module.js

@@ -267,6 +267,7 @@ angular.module('kibana.table', [])
 
 
 })
+// This also escapes some xml sequences
 .filter('tableHighlight', function() {
   return function(text) {
     if (!_.isUndefined(text) && !_.isNull(text) && text.toString().length > 0) {