themer.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. const setValue = (property, value) => {
  2. if (value) {
  3. document.documentElement.style.setProperty(`--${property}`, value);
  4. const input = document.querySelector(`#${property}`);
  5. if (input) {
  6. value = value.replace('px', '');
  7. input.value = value;
  8. }
  9. }
  10. };
  11. const setValueFromLocalStorage = property => {
  12. let value = localStorage.getItem(property);
  13. setValue(property, value);
  14. };
  15. const setTheme = options => {
  16. for (let option of Object.keys(options)) {
  17. const property = option;
  18. const value = options[option];
  19. setValue(property, value);
  20. localStorage.setItem(property, value);
  21. }
  22. }
  23. document.addEventListener('DOMContentLoaded', () => {
  24. setValueFromLocalStorage('color-background');
  25. setValueFromLocalStorage('color-text-pri');
  26. setValueFromLocalStorage('color-text-acc');
  27. });
  28. const dataThemeButtons = document.querySelectorAll('[data-theme]');
  29. for (let i = 0; i < dataThemeButtons.length; i++) {
  30. dataThemeButtons[i].addEventListener('click', () => {
  31. const theme = dataThemeButtons[i].dataset.theme;
  32. switch (theme) {
  33. case 'blackboard':
  34. setTheme({
  35. 'color-background': '#1a1a1a',
  36. 'color-text-pri': '#FFFDEA',
  37. 'color-text-acc': '#5c5c5c'
  38. });
  39. return;
  40. case 'gazette':
  41. setTheme({
  42. 'color-background': '#F2F7FF',
  43. 'color-text-pri': '#000000',
  44. 'color-text-acc': '#5c5c5c'
  45. });
  46. return;
  47. case 'espresso':
  48. setTheme({
  49. 'color-background': '#21211F',
  50. 'color-text-pri': '#D1B59A',
  51. 'color-text-acc': '#4E4E4E'
  52. });
  53. return;
  54. case 'cab':
  55. setTheme({
  56. 'color-background': '#F6D305',
  57. 'color-text-pri': '#1F1F1F',
  58. 'color-text-acc': '#424242'
  59. });
  60. return;
  61. case 'cloud':
  62. setTheme({
  63. 'color-background': '#f1f2f0',
  64. 'color-text-pri': '#35342f',
  65. 'color-text-acc': '#37bbe4'
  66. });
  67. return;
  68. case 'lime':
  69. setTheme({
  70. 'color-background': '#263238',
  71. 'color-text-pri': '#AABBC3',
  72. 'color-text-acc': '#aeea00'
  73. });
  74. return;
  75. case 'white':
  76. setTheme({
  77. 'color-background': '#ffffff',
  78. 'color-text-pri': '#222222',
  79. 'color-text-acc': '#dddddd'
  80. });
  81. return;
  82. case 'tron':
  83. setTheme({
  84. 'color-background': '#242B33',
  85. 'color-text-pri': '#EFFBFF',
  86. 'color-text-acc': '#6EE2FF'
  87. });
  88. return;
  89. case 'blues':
  90. setTheme({
  91. 'color-background': '#2B2C56',
  92. 'color-text-pri': '#EFF1FC',
  93. 'color-text-acc': '#6677EB'
  94. });
  95. return;
  96. case 'passion':
  97. setTheme({
  98. 'color-background': '#f5f5f5',
  99. 'color-text-pri': '#12005e',
  100. 'color-text-acc': '#8e24aa'
  101. });
  102. return;
  103. case 'chalk':
  104. setTheme({
  105. 'color-background': '#263238',
  106. 'color-text-pri': '#AABBC3',
  107. 'color-text-acc': '#FF869A'
  108. });
  109. return;
  110. case 'paper':
  111. setTheme({
  112. 'color-background': '#F8F6F1',
  113. 'color-text-pri': '#4C432E',
  114. 'color-text-acc': '#AA9A73'
  115. });
  116. return;
  117. }
  118. })
  119. }