filters.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*jshint globalstrict:true */
  2. /*global angular:true */
  3. 'use strict';
  4. angular.module('kibana.filters', [])
  5. .filter('stringSort', function() {
  6. return function(input) {
  7. return input.sort();
  8. };
  9. }).filter('pinnedQuery', function(querySrv) {
  10. return function( items, pinned) {
  11. var ret = _.filter(querySrv.ids,function(id){
  12. var v = querySrv.list[id];
  13. if(!_.isUndefined(v.pin) && v.pin === true && pinned === true) {
  14. return true;
  15. }
  16. if((_.isUndefined(v.pin) || v.pin === false) && pinned === false) {
  17. return true;
  18. }
  19. });
  20. return ret;
  21. };
  22. }).filter('slice', function() {
  23. return function(arr, start, end) {
  24. if(!_.isUndefined(arr)) {
  25. return arr.slice(start, end);
  26. }
  27. };
  28. }).filter('stringify', function() {
  29. return function(arr, start, end) {
  30. if(!_.isUndefined(arr)) {
  31. return arr.toString();
  32. }
  33. };
  34. }).filter('noXml', function() {
  35. var noXml = function(text) {
  36. return _.isString(text) ?
  37. text.
  38. replace(/&/g, '&').
  39. replace(/</g, '&lt;').
  40. replace(/>/g, '&gt;').
  41. replace(/'/g, '&#39;').
  42. replace(/"/g, '&quot;') :
  43. text;
  44. };
  45. return function(text) {
  46. return _.isArray(text) ?
  47. _.map(text,function(t) {
  48. return noXml(t);
  49. }) :
  50. noXml(text);
  51. };
  52. }).filter('urlLink', function() {
  53. var //URLs starting with http://, https://, or ftp://
  54. r1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim,
  55. //URLs starting with "www." (without // before it, or it'd re-link the ones done above).
  56. r2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim,
  57. //Change email addresses to mailto:: links.
  58. r3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
  59. var urlLink = function(text) {
  60. var t1,t2,t3;
  61. if(!_.isString(text)) {
  62. return text;
  63. } else {
  64. var i=1;
  65. _.each(text.match(r1), function(url) {
  66. t1 = text.replace(r1, "<a href=\"$1\" target=\"_blank\">$1</a>");
  67. });
  68. text = t1 || text;
  69. _.each(text.match(r2), function(url) {
  70. t2 = text.replace(r2, "$1<a href=\"http://$2\" target=\"_blank\">$2</a>");
  71. });
  72. text = t2 || text;
  73. _.each(text.match(r3), function(url) {
  74. t3 = text.replace(r3, "<a href=\"mailto:$1\">$1</a>");
  75. });
  76. text = t3 || text;
  77. return text;
  78. }
  79. };
  80. return function(text, target, otherProp) {
  81. return _.isArray(text) ?
  82. _.map(text,function(t) {
  83. return urlLink(t);
  84. }) :
  85. urlLink(text);
  86. };
  87. }).filter('gistid', function() {
  88. var gist_pattern = /(\d{5,})|([a-z0-9]{10,})|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/;
  89. return function(input, scope) {
  90. //return input+"boners"
  91. if(!(_.isUndefined(input))) {
  92. var output = input.match(gist_pattern);
  93. if(!_.isNull(output) && !_.isUndefined(output)) {
  94. return output[0].replace(/.*\//, '');
  95. }
  96. }
  97. };
  98. });