您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

options.js 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*******************/
  2. /* EVENT LISTENERS */
  3. /*******************/
  4. document.querySelectorAll("button").forEach(button => {
  5. button.addActivateEvent((event) => {
  6. event.target.blur();
  7. if (button.classList.contains("save-button"))
  8. saveChanges();
  9. else
  10. resetChanges();
  11. });
  12. });
  13. document.querySelectorAll("textarea").forEach(textarea => {
  14. textarea.addEventListener("input", (event) => {
  15. setButtonsActive(true);
  16. });
  17. });
  18. document.querySelector("input[type='checkbox']").addEventListener("change", (event) => {
  19. modeSelectorInputReceived();
  20. });
  21. document.querySelectorAll(".mode-select-container span").forEach(span => {
  22. span.addActivateEvent((event) => {
  23. modeSelectorInputReceived();
  24. });
  25. });
  26. function modeSelectorInputReceived() {
  27. toggleModeSelectorState();
  28. window.currentMode = (window.currentMode == "whitelist") ? "blacklist" : "whitelist";
  29. setButtonsActive(true);
  30. }
  31. /***********/
  32. /* HELPERS */
  33. /***********/
  34. function toggleModeSelectorState(newMode) {
  35. let container = document.querySelector(".mode-select-container");
  36. let checkbox = document.querySelector("input#whitelist-mode");
  37. newMode = newMode || (container.classList.contains("whitelist") ? "blacklist" : "whitelist");
  38. container.classList.toggle("whitelist", (newMode == "whitelist"));
  39. checkbox.checked = (newMode == "whitelist");
  40. container.querySelectorAll("span").forEach(span => {
  41. span.classList.toggle("disabled", false);
  42. });
  43. document.querySelector(`.${newMode}-mode-label`).classList.toggle("disabled", true);
  44. document.querySelector("div#matchingPatterns").classList.toggle("disabled", (newMode == "whitelist"));
  45. document.querySelector("div#matchingPatterns textarea").disabled = (newMode == "whitelist");
  46. }
  47. function saveChanges() {
  48. let matchingPatterns = document.querySelector("#matchingPatterns textarea").value;
  49. let exclusionPatterns = document.querySelector("#exclusionPatterns textarea").value;
  50. let mode = document.querySelector("input#whitelist-mode").checked ? "whitelist" : "blacklist";
  51. chrome.storage.sync.set({
  52. "matchingPatterns": matchingPatterns,
  53. "exclusionPatterns": exclusionPatterns,
  54. "mode": mode
  55. }, () => { setButtonsActive(false); });
  56. }
  57. function resetChanges() {
  58. chrome.storage.sync.get([ "matchingPatterns", "exclusionPatterns", "mode" ], (result) => {
  59. document.querySelector("#matchingPatterns textarea").value = result.matchingPatterns;
  60. document.querySelector("#exclusionPatterns textarea").value = result.exclusionPatterns;
  61. window.currentMode = result.mode || "blacklist";
  62. toggleModeSelectorState(window.currentMode);
  63. setButtonsActive(false);
  64. });
  65. }
  66. function setButtonsActive(active) {
  67. document.querySelectorAll("button").forEach(button => {
  68. button.disabled = !active;
  69. });
  70. }
  71. /******************/
  72. /* INITIALIZATION */
  73. /******************/
  74. function initialize() {
  75. resetChanges();
  76. chrome.storage.sync.get("mode", (result) => {
  77. let divToFocus = (result.mode == "whitelist") ? "#exclusionPatterns" : "#matchingPatterns";
  78. document.querySelector(`${divToFocus} textarea`).focus();
  79. });
  80. }
  81. initialize();