popup.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. advancedOptions: () => {
  56. chrome.extension.sendMessage({message: 'advanced'})
  57. return false
  58. }
  59. }
  60. },
  61. view: (ctrl) => {
  62. var state = ctrl.state
  63. return m('#options', [
  64. m('a[href=""]', {onclick: ctrl.viewRaw}, (state.raw ? 'Html' : 'Markdown')),
  65. m('a[href=""]', {onclick: ctrl.setDefaults}, 'Defaults'),
  66. m('h4', 'Theme'),
  67. m('select', {onchange: ctrl.changeTheme}, state.themes.map((theme) =>
  68. m('option', {selected: state.theme === theme}, theme)
  69. )),
  70. m('h4', 'Compiler Options'),
  71. m('ul', Object.keys(state.options).map((key) =>
  72. m('li',
  73. m('label',
  74. m('input[type="checkbox"]', {
  75. name: key,
  76. checked: state.options[key],
  77. onchange: ctrl.changeOptions
  78. }),
  79. ' ' + key
  80. )
  81. )
  82. )),
  83. m('a[href=""]', {onclick: ctrl.advancedOptions}, 'Advanced Options')
  84. ])
  85. }
  86. })