filters.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. if(_.isObject(arr) && !_.isArray(arr)) {
  32. return angular.toJson(arr);
  33. } else {
  34. return arr.toString();
  35. }
  36. }
  37. };
  38. }).filter('noXml', function() {
  39. var noXml = function(text) {
  40. return _.isString(text) ?
  41. text.
  42. replace(/&/g, '&').
  43. replace(/</g, '&lt;').
  44. replace(/>/g, '&gt;').
  45. replace(/'/g, '&#39;').
  46. replace(/"/g, '&quot;') :
  47. text;
  48. };
  49. return function(text) {
  50. return _.isArray(text) ?
  51. _.map(text,function(t) {
  52. return noXml(t);
  53. }) :
  54. noXml(text);
  55. };
  56. }).filter('urlLink', function() {
  57. var //URLs starting with http://, https://, or ftp://
  58. r1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim,
  59. //URLs starting with "www." (without // before it, or it'd re-link the ones done above).
  60. r2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim,
  61. //Change email addresses to mailto:: links.
  62. r3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
  63. var urlLink = function(text) {
  64. var t1,t2,t3;
  65. if(!_.isString(text)) {
  66. return text;
  67. } else {
  68. var i=1;
  69. _.each(text.match(r1), function(url) {
  70. t1 = text.replace(r1, "<a href=\"$1\" target=\"_blank\">$1</a>");
  71. });
  72. text = t1 || text;
  73. _.each(text.match(r2), function(url) {
  74. t2 = text.replace(r2, "$1<a href=\"http://$2\" target=\"_blank\">$2</a>");
  75. });
  76. text = t2 || text;
  77. _.each(text.match(r3), function(url) {
  78. t3 = text.replace(r3, "<a href=\"mailto:$1\">$1</a>");
  79. });
  80. text = t3 || text;
  81. return text;
  82. }
  83. };
  84. return function(text, target, otherProp) {
  85. return _.isArray(text) ?
  86. _.map(text,function(t) {
  87. return urlLink(t);
  88. }) :
  89. urlLink(text);
  90. };
  91. }).filter('gistid', function() {
  92. var gist_pattern = /(\d{5,})|([a-z0-9]{10,})|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/;
  93. return function(input, scope) {
  94. //return input+"boners"
  95. if(!(_.isUndefined(input))) {
  96. var output = input.match(gist_pattern);
  97. if(!_.isNull(output) && !_.isUndefined(output)) {
  98. return output[0].replace(/.*\//, '');
  99. }
  100. }
  101. };
  102. });