popup.js 2.2 KB

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