options.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. m.mount(document.querySelector('body'), {
  2. controller: function () {
  3. var state = {
  4. options: [],
  5. themes: [],
  6. theme: '',
  7. raw: false
  8. }
  9. function init (res) {
  10. state.options = res.options
  11. state.theme = res.theme
  12. state.themes = chrome.runtime.getManifest().web_accessible_resources
  13. .filter((file) => (file.indexOf('/themes/') === 0))
  14. .map((file) => (file.replace(/\/themes\/(.*)\.css/, '$1')))
  15. state.raw = res.raw
  16. m.endComputation()
  17. }
  18. // init
  19. m.startComputation()
  20. chrome.extension.sendMessage({message: 'settings'}, init)
  21. return {
  22. state: state,
  23. changeOptions: (e) => {
  24. state.options[e.target.name] = !state.options[e.target.name]
  25. chrome.extension.sendMessage({
  26. message: 'options',
  27. options: state.options
  28. }, (res) => {})
  29. },
  30. changeTheme: (e) => {
  31. state.theme = state.themes[e.target.selectedIndex]
  32. chrome.extension.sendMessage({
  33. message: 'theme',
  34. theme: state.theme
  35. }, (res) => {})
  36. },
  37. viewRaw: () => {
  38. state.raw = !state.raw
  39. chrome.extension.sendMessage({
  40. message: 'raw',
  41. raw: state.raw,
  42. theme: state.theme
  43. }, (res) => {})
  44. return false
  45. },
  46. setDefaults: () => {
  47. chrome.extension.sendMessage({
  48. message: 'defaults'
  49. }, (res) => {
  50. m.startComputation()
  51. chrome.extension.sendMessage({message: 'settings'}, init)
  52. })
  53. return false
  54. }
  55. }
  56. },
  57. view: (ctrl) => {
  58. var state = ctrl.state
  59. return m('#options', [
  60. m('a[href=""]', {onclick: ctrl.viewRaw}, (state.raw ? 'Html' : 'Markdown')),
  61. m('a[href=""]', {onclick: ctrl.setDefaults}, 'Defaults'),
  62. m('h4', 'Theme'),
  63. m('select', {onchange: ctrl.changeTheme}, state.themes.map((theme) =>
  64. m('option', {selected: state.theme === theme}, theme)
  65. )),
  66. m('h4', 'Compiler Options'),
  67. m('ul', Object.keys(state.options).map((key) =>
  68. m('li',
  69. m('label',
  70. m('input[type="checkbox"]', {
  71. name: key,
  72. checked: state.options[key],
  73. onchange: ctrl.changeOptions
  74. }),
  75. ' ' + key
  76. )
  77. )
  78. ))
  79. ])
  80. }
  81. })