popup.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. Author: Farooq Karimi Zadeh
  3. Email: fkz@riseup.net
  4. Repo: https://notabug.org/farooqkz/veil-client-ff
  5. */
  6. const atab_qInfo = {currentWindow:true, active:true};
  7. const setto = (btn, namespace, state) => {
  8. var word0 = state === "report"?"Report ":"Retract vote about ";
  9. var word1 = namespace === "page"?"page":"site";
  10. btn.innerHTML = word0 + word1;
  11. btn.onclick = e => {
  12. const next_state = state === "report"?"retract":"report";
  13. browser.tabs.query(atab_qInfo).then(tabs => {
  14. var url = tabs[0].url;
  15. var key = namespace === "page"?url:url.split("/")[2];
  16. if (key.startsWith("https")) {
  17. key = key.replace("https", "http");
  18. }
  19. // ^ It is either page url or hostname(and port if any)
  20. var addr = "http://de1.hashbang.sh:6101/";
  21. addr += (state === "report"?"vote":"unvote") + "?addr=";
  22. addr += key;
  23. // ^ So we have constructed the address we want to fetch() :)
  24. fetch(addr).then(response => {
  25. if (response.ok) {
  26. setto(btn, namespace, state === "retract"?"report":"retract");
  27. var storage_key = "reported_" + namespace + "s";
  28. // It MUST be either reported_sites or reported_pages
  29. browser.storage.local.get(storage_key).then(data => {
  30. data = data[storage_key];
  31. if (state === "retract") {
  32. data.splice(data.indexOf(key), 1);
  33. } else {
  34. if (!data.includes(key))
  35. data = data.concat([key]);
  36. }
  37. let data_ = {};
  38. data_[storage_key] = data;
  39. browser.storage.local.set(data_);
  40. });
  41. setto(btn, namespace, next_state);
  42. browser.tabs.reload();
  43. }
  44. });
  45. });
  46. };
  47. };
  48. browser.storage.local.get(["reported_sites", "reported_pages"]).then(somedata => {
  49. browser.tabs.query(atab_qInfo).then(tabs => {
  50. var site_btn = document.getElementsByName("report_site_btn")[0];
  51. var url = tabs[0].url;
  52. if (url.startsWith("https")) {
  53. url = url.replace("https", "http");
  54. }
  55. var hostname = url.split("/")[2];
  56. if (somedata["reported_sites"].includes(hostname)) {
  57. setto(site_btn, "site", "retract");
  58. } else {
  59. setto(site_btn, "site", "report");
  60. }
  61. var page_btn = document.getElementsByName("report_page_btn")[0];
  62. if (somedata["reported_pages"].includes(url)) {
  63. setto(page_btn, "page", "retract");
  64. } else {
  65. setto(page_btn, "page", "report");
  66. }
  67. });
  68. });
  69. browser.storage.local.get("badsites").then(badsites => {
  70. browser.tabs.query(atab_qInfo).then(tabs => {
  71. var hostname = tabs[0].url.split("/")[2];
  72. var score = Number(badsites["badsites"][hostname] || 0);
  73. if (score >= 10 || score === -1){
  74. document.getElementsByName("badsite")[0].innerHTML =
  75. '<span style="color: red">This website is not safe and has inappropriate images</span>';
  76. document.getElementsByName("badpage")[0].style.display = "none";
  77. }else{
  78. document.getElementsByName("badsite")[0].innerHTML =
  79. '<span style="color: green">This website is safe.</span>';
  80. }
  81. });
  82. });
  83. browser.storage.local.get("badpages").then(function(badpages) {
  84. browser.tabs.query(atab_qInfo).then(function(tabs) {
  85. var url = tabs[0].url;
  86. if (url.startsWith("https")) {
  87. url = url.replace("https", "http");
  88. }
  89. var score = Number(badpages["badpages"][url] || 0);
  90. if (score >= 10 || score === -1){
  91. document.getElementsByName("badpage")[0].innerHTML =
  92. '<span style="color: red">This page is not safe and has inappropriate images</span>';
  93. } else {
  94. document.getElementsByName("badpage")[0].innerHTML =
  95. '<span style="color: green">This page is safe.</span> ';
  96. }
  97. });
  98. });