messages.js 3.3 KB

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