You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

selectors.js 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. define(["jquery"],
  2. function ($) {
  3. "use strict";
  4. var ui = {};
  5. function enable_disable_check_btn() {
  6. $("#selectorsChkMsgBtn").prop("disabled", (
  7. $.trim($("#selectorsMsgArea").val()).length === 0 ||
  8. !$("#selectorsSelArea").hasClass("is-valid")
  9. ));
  10. }
  11. function get_server(rspamd) {
  12. var checked_server = rspamd.getSelector("selSrv");
  13. return (checked_server === "All SERVERS") ? "local" : checked_server;
  14. }
  15. function checkMsg(rspamd, data) {
  16. var selector = $("#selectorsSelArea").val();
  17. rspamd.query("plugins/selectors/check_message?selector=" + encodeURIComponent(selector), {
  18. data: data,
  19. method: "POST",
  20. success: function (neighbours_status) {
  21. var json = neighbours_status[0].data;
  22. if (json.success) {
  23. rspamd.alertMessage("alert-success", "Message successfully processed");
  24. $("#selectorsResArea")
  25. .val(Object.prototype.hasOwnProperty.call(json, "data") ? json.data.toString() : "");
  26. } else {
  27. rspamd.alertMessage("alert-error", "Unexpected error processing message");
  28. }
  29. },
  30. server: get_server(rspamd)
  31. });
  32. }
  33. function checkSelectors(rspamd) {
  34. function toggle_form_group_class(remove, add) {
  35. $("#selectorsSelArea").removeClass("is-" + remove).addClass("is-" + add);
  36. enable_disable_check_btn();
  37. }
  38. var selector = $("#selectorsSelArea").val();
  39. if (selector.length) {
  40. rspamd.query("plugins/selectors/check_selector?selector=" + encodeURIComponent(selector), {
  41. method: "GET",
  42. success: function (json) {
  43. if (json[0].data.success) {
  44. toggle_form_group_class("invalid", "valid");
  45. } else {
  46. toggle_form_group_class("valid", "invalid");
  47. }
  48. },
  49. server: get_server(rspamd)
  50. });
  51. } else {
  52. $("#selectorsSelArea").removeClass("is-valid is-invalid");
  53. enable_disable_check_btn();
  54. }
  55. }
  56. function buildLists(rspamd) {
  57. function build_table_from_json(json, table_id) {
  58. Object.keys(json).forEach(function (key) {
  59. var td = $("<td/>");
  60. var tr = $("<tr/>")
  61. .append(td.clone().html("<code>" + key + "</code>"))
  62. .append(td.clone().html(json[key].description));
  63. $(table_id + " tbody").append(tr);
  64. });
  65. }
  66. function getList(list) {
  67. rspamd.query("plugins/selectors/list_" + list, {
  68. method: "GET",
  69. success: function (neighbours_status) {
  70. var json = neighbours_status[0].data;
  71. build_table_from_json(json, "#selectorsTable-" + list);
  72. },
  73. server: get_server(rspamd)
  74. });
  75. }
  76. getList("extractors");
  77. getList("transforms");
  78. }
  79. ui.displayUI = function (rspamd) {
  80. buildLists(rspamd);
  81. checkSelectors(rspamd);
  82. };
  83. ui.setup = function (rspamd) {
  84. function toggleSidebar(side) {
  85. $("#sidebar-" + side).toggleClass("collapsed");
  86. var contentClass = "col-lg-6";
  87. var openSidebarsCount = $("#sidebar-left").hasClass("collapsed") +
  88. $("#sidebar-right").hasClass("collapsed");
  89. switch (openSidebarsCount) {
  90. case 1:
  91. contentClass = "col-lg-9";
  92. break;
  93. case 2:
  94. contentClass = "col-lg-12";
  95. break;
  96. default:
  97. }
  98. $("#content").removeClass("col-lg-12 col-lg-9 col-lg-6")
  99. .addClass(contentClass);
  100. }
  101. $("#sidebar-tab-left>a").click(function () {
  102. toggleSidebar("left");
  103. return false;
  104. });
  105. $("#sidebar-tab-right>a").click(function () {
  106. toggleSidebar("right");
  107. return false;
  108. });
  109. $("#selectorsMsgClean").on("click", function () {
  110. $("#selectorsChkMsgBtn").attr("disabled", true);
  111. $("#selectorsMsgArea").val("");
  112. return false;
  113. });
  114. $("#selectorsClean").on("click", function () {
  115. $("#selectorsSelArea").val("");
  116. checkSelectors(rspamd);
  117. return false;
  118. });
  119. $("#selectorsChkMsgBtn").on("click", function () {
  120. $("#selectorsResArea").val("");
  121. checkMsg(rspamd, $("#selectorsMsgArea").val());
  122. return false;
  123. });
  124. $("#selectorsMsgArea").on("input", function () {
  125. enable_disable_check_btn();
  126. });
  127. $("#selectorsSelArea").on("input", function () {
  128. checkSelectors(rspamd);
  129. });
  130. };
  131. return ui;
  132. });