messages.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. md.messages = ({storage: {defaults, state, set}, compilers, mathjax, xhr, webrequest}) => {
  2. return (req, sender, sendResponse) => {
  3. // content
  4. if (req.message === 'markdown') {
  5. var markdown = req.markdown
  6. if (state.content.mathjax) {
  7. var jax = mathjax()
  8. markdown = jax.tokenize(markdown)
  9. }
  10. var html = compilers[state.compiler].compile(markdown)
  11. if (state.content.mathjax) {
  12. html = jax.detokenize(html)
  13. }
  14. sendResponse({message: 'html', html})
  15. }
  16. else if (req.message === 'autoreload') {
  17. xhr.get(req.location, (err, body) => {
  18. sendResponse({err, body})
  19. })
  20. }
  21. // popup
  22. else if (req.message === 'popup') {
  23. sendResponse(Object.assign({}, state, {
  24. options: state[state.compiler],
  25. description: compilers[state.compiler].description,
  26. compilers: Object.keys(compilers),
  27. themes: state.themes,
  28. }))
  29. }
  30. else if (req.message === 'popup.theme') {
  31. set({theme: req.theme})
  32. notifyContent({message: 'theme', theme: req.theme})
  33. sendResponse()
  34. }
  35. else if (req.message === 'popup.raw') {
  36. set({raw: req.raw})
  37. notifyContent({message: 'raw', raw: req.raw})
  38. sendResponse()
  39. }
  40. else if (req.message === 'popup.themes') {
  41. set({themes: req.themes})
  42. notifyContent({message: 'themes', themes: req.themes})
  43. sendResponse()
  44. }
  45. else if (req.message === 'popup.defaults') {
  46. var options = Object.assign({}, defaults)
  47. options.origins = state.origins
  48. set(options)
  49. notifyContent({message: 'reload'})
  50. sendResponse()
  51. }
  52. else if (req.message === 'popup.compiler.name') {
  53. set({compiler: req.compiler})
  54. notifyContent({message: 'reload'})
  55. sendResponse()
  56. }
  57. else if (req.message === 'popup.compiler.options') {
  58. set({[req.compiler]: req.options})
  59. notifyContent({message: 'reload'})
  60. sendResponse()
  61. }
  62. else if (req.message === 'popup.content') {
  63. set({content: req.content})
  64. notifyContent({message: 'reload'})
  65. webrequest()
  66. sendResponse()
  67. }
  68. else if (req.message === 'popup.advanced') {
  69. // ff: opens up about:addons with openOptionsPage
  70. if (/Firefox/.test(navigator.userAgent)) {
  71. chrome.management.getSelf((extension) => {
  72. chrome.tabs.create({url: extension.optionsUrl})
  73. })
  74. }
  75. else {
  76. chrome.runtime.openOptionsPage()
  77. }
  78. sendResponse()
  79. }
  80. // options
  81. else if (req.message === 'options.origins') {
  82. sendResponse({
  83. origins: state.origins,
  84. header: state.header,
  85. match: state.match,
  86. })
  87. }
  88. else if (req.message === 'options.header') {
  89. set({header: req.header})
  90. sendResponse()
  91. }
  92. // origins
  93. else if (req.message === 'origin.add') {
  94. state.origins[req.origin] = {
  95. match: defaults.match,
  96. csp: false,
  97. encoding: '',
  98. }
  99. set({origins: state.origins})
  100. sendResponse()
  101. }
  102. else if (req.message === 'origin.remove') {
  103. delete state.origins[req.origin]
  104. set({origins: state.origins})
  105. webrequest()
  106. sendResponse()
  107. }
  108. else if (req.message === 'origin.update') {
  109. state.origins[req.origin] = req.options
  110. set({origins: state.origins})
  111. webrequest()
  112. sendResponse()
  113. }
  114. return true
  115. }
  116. function notifyContent (req, res) {
  117. chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
  118. chrome.tabs.sendMessage(tabs[0].id, req, res)
  119. })
  120. }
  121. }