settings.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. var Settings = () => {
  2. var defaults = {
  3. icon: 'default',
  4. theme: 'light',
  5. _icons: ['default', 'light', 'dark'],
  6. _themes: ['light', 'dark', 'auto'],
  7. }
  8. var state = Object.assign({}, defaults)
  9. chrome.runtime.sendMessage({message: 'options.settings'}, (res) => {
  10. Object.assign(state, res)
  11. document.querySelector('body').classList.add(state.theme)
  12. m.redraw()
  13. })
  14. var events = {
  15. icon: (e) => {
  16. state.icon = state._icons[e.target.selectedIndex]
  17. chrome.runtime.sendMessage({
  18. message: 'options.icon',
  19. settings: {
  20. icon: state.icon,
  21. theme: state.theme,
  22. },
  23. })
  24. },
  25. theme: (e) => {
  26. state.theme = state._themes[e.target.selectedIndex]
  27. chrome.runtime.sendMessage({
  28. message: 'options.theme',
  29. settings: {
  30. icon: state.icon,
  31. theme: state.theme,
  32. },
  33. })
  34. document.querySelector('body').classList.remove(...state._themes)
  35. document.querySelector('body').classList.add(state.theme)
  36. }
  37. }
  38. var oncreate = {}
  39. var onupdate = {}
  40. var render = () => [
  41. m('.row',
  42. m('.col-xxl-6.col-xl-6.col-lg-6.col-md-6.col-sm-12',
  43. m('span.m-label',
  44. 'Extension Icon'
  45. )
  46. ),
  47. m('.col-xxl-6.col-xl-6.col-lg-6.col-md-6.col-sm-12',
  48. m('select.mdc-elevation--z2 m-select', {
  49. onchange: events.icon
  50. },
  51. state._icons.map((icon) =>
  52. m('option', {selected: state.icon === icon}, icon)
  53. )
  54. )
  55. ),
  56. ),
  57. m('.row',
  58. m('.col-xxl-6.col-xl-6.col-lg-6.col-md-6.col-sm-12',
  59. m('span.m-label',
  60. 'Popup & Options Page'
  61. )
  62. ),
  63. m('.col-xxl-6.col-xl-6.col-lg-6.col-md-6.col-sm-12',
  64. m('select.mdc-elevation--z2 m-select', {
  65. onchange: events.theme
  66. },
  67. state._themes.map((theme) =>
  68. m('option', {selected: state.theme === theme}, theme)
  69. )
  70. )
  71. ),
  72. ),
  73. ]
  74. return {state, render}
  75. }