Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /**********/
  2. /* EVENTS */
  3. /**********/
  4. function modeSelectorInputReceived() {
  5. toggleModeSelectorState();
  6. window.currentMode = (window.currentMode == "whitelist") ? "blacklist" : "whitelist";
  7. setButtonsActive(true);
  8. }
  9. /***********/
  10. /* HELPERS */
  11. /***********/
  12. function toggleModeSelectorState(newMode) {
  13. let container = document.querySelector(".mode-select-container");
  14. let checkbox = document.querySelector("input#whitelist-mode");
  15. newMode = newMode || (container.classList.contains("whitelist") ? "blacklist" : "whitelist");
  16. container.classList.toggle("whitelist", (newMode == "whitelist"));
  17. checkbox.checked = (newMode == "whitelist");
  18. container.querySelectorAll("span").forEach(span => {
  19. span.classList.toggle("disabled", false);
  20. });
  21. document.querySelector(`.${newMode}-mode-label`).classList.toggle("disabled", true);
  22. document.querySelector("div#matchingPatterns").classList.toggle("disabled", (newMode == "whitelist"));
  23. document.querySelector("div#matchingPatterns textarea").disabled = (newMode == "whitelist");
  24. }
  25. function saveChanges() {
  26. let matchingPatterns = document.querySelector("#matchingPatterns textarea").value;
  27. let exclusionPatterns = document.querySelector("#exclusionPatterns textarea").value;
  28. let mode = document.querySelector("input#whitelist-mode").checked ? "whitelist" : "blacklist";
  29. chrome.storage.sync.set({
  30. "matchingPatterns": matchingPatterns,
  31. "exclusionPatterns": exclusionPatterns,
  32. "mode": mode
  33. }, () => { setButtonsActive(false); });
  34. }
  35. function resetChanges() {
  36. chrome.storage.sync.get([ "matchingPatterns", "exclusionPatterns", "mode" ], (result) => {
  37. document.querySelector("#matchingPatterns textarea").value = result.matchingPatterns || "";
  38. document.querySelector("#exclusionPatterns textarea").value = result.exclusionPatterns || "";
  39. window.currentMode = result.mode || "blacklist";
  40. toggleModeSelectorState(window.currentMode);
  41. setButtonsActive(false);
  42. // Expand all textareas.
  43. document.querySelectorAll("textarea").forEach(textarea => {
  44. expandTextarea(textarea);
  45. });
  46. });
  47. }
  48. function setButtonsActive(active) {
  49. document.querySelectorAll("button").forEach(button => {
  50. button.disabled = !active;
  51. });
  52. }
  53. function expandTextarea(textarea) {
  54. let totalBorderHeight = 2;
  55. if (textarea.clientHeight == textarea.scrollHeight + totalBorderHeight) return;
  56. requestAnimationFrame(() => {
  57. textarea.style.height = 'auto';
  58. textarea.style.height = textarea.scrollHeight + totalBorderHeight + 'px';
  59. });
  60. }
  61. /******************/
  62. /* INITIALIZATION */
  63. /******************/
  64. function initialize() {
  65. resetChanges();
  66. chrome.storage.sync.get("mode", (result) => {
  67. let divToFocus = (result.mode == "whitelist") ? "#exclusionPatterns" : "#matchingPatterns";
  68. document.querySelector(`${divToFocus} textarea`).focus();
  69. });
  70. // Listeners for Reset and Save buttons.
  71. document.querySelectorAll("button").forEach(button => {
  72. button.addActivateEvent((event) => {
  73. event.target.blur();
  74. if (button.classList.contains("save-button"))
  75. saveChanges();
  76. else
  77. resetChanges();
  78. });
  79. });
  80. // Listeners to activate Reset/Save buttons when textareas get input.
  81. document.querySelectorAll("textarea").forEach(textarea => {
  82. textarea.addEventListener("input", (event) => {
  83. setButtonsActive(true);
  84. });
  85. });
  86. // Listeners to auto-expand textareas on input.
  87. document.querySelectorAll("textarea").forEach(textarea => {
  88. textarea.addEventListener("input", (event) => {
  89. expandTextarea(textarea);
  90. });
  91. });
  92. // Listeners for mode select switch.
  93. document.querySelector("input[type='checkbox']").addEventListener("change", (event) => {
  94. modeSelectorInputReceived();
  95. });
  96. document.querySelectorAll(".mode-select-container span").forEach(span => {
  97. span.addActivateEvent((event) => {
  98. modeSelectorInputReceived();
  99. });
  100. });
  101. }
  102. initialize();