background.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // chrome.storage.sync.clear()
  2. // chrome.permissions.getAll((p) => chrome.permissions.remove({origins: p.origins}))
  3. chrome.storage.sync.get((sync) => {
  4. if (!Object.keys(sync).length) {
  5. chrome.storage.sync.set({
  6. options: md.defaults,
  7. theme: 'github',
  8. raw: false,
  9. match: '.*\\/.*\\.(?:markdown|mdown|mkdn|md|mkd|mdwn|mdtxt|mdtext|text)(?:#.*)?$',
  10. origins: {}
  11. })
  12. }
  13. })
  14. chrome.tabs.onUpdated.addListener((id, info, tab) => {
  15. if (info.status === 'loading') {
  16. chrome.tabs.executeScript(id, {
  17. code: 'document.querySelector("pre").style.display = "none";JSON.stringify(location)',
  18. runAt: 'document_start'
  19. }, (location) => {
  20. if (chrome.runtime.lastError) {
  21. return
  22. }
  23. location = JSON.parse(location)
  24. chrome.storage.sync.get('origins', (res) => {
  25. if (new RegExp(res.origins[location.origin]).test(location.href)) {
  26. chrome.tabs.insertCSS(id, {file: 'css/content.css', runAt: 'document_start'})
  27. chrome.tabs.insertCSS(id, {file: 'vendor/prism.css', runAt: 'document_start'})
  28. chrome.tabs.executeScript(id, {file: 'vendor/mithril.min.js', runAt: 'document_start'})
  29. chrome.tabs.executeScript(id, {file: 'vendor/prism.js', runAt: 'document_start'})
  30. chrome.tabs.executeScript(id, {file: 'content/content.js', runAt: 'document_start'})
  31. }
  32. else {
  33. chrome.tabs.executeScript(id, {
  34. code: 'document.querySelector("pre").style.display = "block"',
  35. runAt: 'document_start'
  36. })
  37. }
  38. })
  39. })
  40. }
  41. })
  42. chrome.extension.onMessage.addListener((req, sender, sendResponse) => {
  43. if (req.message === 'markdown') {
  44. md.compile(req.markdown, sendResponse)
  45. }
  46. else if (req.message === 'settings') {
  47. chrome.storage.sync.get(['options', 'theme', 'raw'], (res) => {
  48. delete res.options.langPrefix
  49. sendResponse(res)
  50. })
  51. chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
  52. chrome.pageAction.show(tabs[0].id)
  53. })
  54. }
  55. else if (req.message === 'options') {
  56. req.options.langPrefix = 'language-' // prism
  57. chrome.storage.sync.set({options: req.options}, sendResponse)
  58. sendMessage({message: 'reload'})
  59. }
  60. else if (req.message === 'defaults') {
  61. chrome.storage.sync.set(
  62. {options: md.defaults, theme: 'github', raw: false}, sendResponse)
  63. sendMessage({message: 'reload'})
  64. }
  65. else if (req.message === 'theme') {
  66. chrome.storage.sync.set({theme: req.theme}, sendResponse)
  67. sendMessage({message: 'theme', theme: req.theme})
  68. }
  69. else if (req.message === 'raw') {
  70. chrome.storage.sync.set({raw: req.raw}, sendResponse)
  71. sendMessage({message: 'raw', raw: req.raw})
  72. }
  73. else if (req.message === 'advanced') {
  74. chrome.management.getSelf((extension) => {
  75. chrome.tabs.create({url: extension.optionsUrl}, sendResponse)
  76. })
  77. }
  78. else if (req.message === 'origins') {
  79. chrome.storage.sync.get('origins', sendResponse)
  80. }
  81. else if (req.message === 'add') {
  82. chrome.storage.sync.get(['match', 'origins'], (res) => {
  83. res.origins[req.origin] = res.match
  84. chrome.storage.sync.set({origins: res.origins}, sendResponse)
  85. })
  86. }
  87. else if (req.message === 'remove') {
  88. chrome.storage.sync.get('origins', (res) => {
  89. delete res.origins[req.origin]
  90. chrome.storage.sync.set({origins: res.origins}, sendResponse)
  91. })
  92. }
  93. else if (req.message === 'update') {
  94. chrome.storage.sync.get('origins', (res) => {
  95. res.origins[req.origin] = req.match
  96. chrome.storage.sync.set({origins: res.origins}, sendResponse)
  97. })
  98. }
  99. return true
  100. })
  101. function sendMessage (req) {
  102. chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
  103. chrome.tabs.sendMessage(tabs[0].id, req)
  104. })
  105. }