background.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // chrome.storage.sync.clear()
  2. chrome.storage.sync.get((sync) => {
  3. if (!sync.options) {
  4. chrome.storage.sync.set({options: md.defaults})
  5. }
  6. if (!sync.theme) {
  7. chrome.storage.sync.set({theme: 'github'})
  8. }
  9. if (sync.raw === undefined) {
  10. chrome.storage.sync.set({raw: false})
  11. }
  12. if (!sync.path) {
  13. chrome.storage.sync.set({path:
  14. '/.*\\/.*\\.(?:markdown|mdown|mkdn|md|mkd|mdwn|mdtxt|mdtext|text)(?:#.*)?$/'
  15. })
  16. }
  17. })
  18. chrome.tabs.onUpdated.addListener((id, info, tab) => {
  19. if (info.status === 'loading') {
  20. chrome.tabs.executeScript(id, {
  21. code: 'document.querySelector("pre").style.display = "none";location.href',
  22. runAt: 'document_start'
  23. }, (href) => {
  24. if (chrome.runtime.lastError) {
  25. return
  26. }
  27. chrome.storage.sync.get('path', (res) => {
  28. if (new RegExp(res.path).test(href)) {
  29. chrome.tabs.insertCSS(id, {file: 'css/content.css', runAt: 'document_start'})
  30. chrome.tabs.insertCSS(id, {file: 'css/prism.css', runAt: 'document_start'})
  31. chrome.tabs.executeScript(id, {file: 'vendor/mithril.min.js', runAt: 'document_start'})
  32. chrome.tabs.executeScript(id, {file: 'vendor/prism.js', runAt: 'document_start'})
  33. chrome.tabs.executeScript(id, {file: 'content/content.js', runAt: 'document_start'})
  34. }
  35. else {
  36. chrome.tabs.executeScript(id, {
  37. code: 'document.querySelector("pre").style.display = "block"',
  38. runAt: 'document_start'
  39. })
  40. }
  41. })
  42. })
  43. }
  44. })
  45. chrome.extension.onMessage.addListener((req, sender, sendResponse) => {
  46. if (req.message === 'markdown') {
  47. md.compile(req.markdown, sendResponse)
  48. }
  49. else if (req.message === 'settings') {
  50. chrome.storage.sync.get(['options', 'theme', 'raw'], (data) => {
  51. delete data.options.langPrefix
  52. sendResponse(data)
  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({options: md.defaults}, sendResponse)
  62. chrome.storage.sync.set({theme: 'github'})
  63. chrome.storage.sync.set({raw: false})
  64. sendMessage({message: 'reload'})
  65. }
  66. else if (req.message === 'theme') {
  67. chrome.storage.sync.set({theme: req.theme}, sendResponse)
  68. sendMessage({message: 'theme', theme: req.theme})
  69. }
  70. else if (req.message === 'raw') {
  71. chrome.storage.sync.set({raw: req.raw}, sendResponse)
  72. sendMessage({message: 'raw', raw: req.raw})
  73. }
  74. else if (req.message === 'advanced') {
  75. chrome.management.getSelf((extension) => {
  76. chrome.tabs.create({url: extension.optionsUrl}, sendResponse)
  77. })
  78. }
  79. return true
  80. })
  81. function sendMessage (obj) {
  82. chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
  83. chrome.tabs.sendMessage(tabs[0].id, obj)
  84. })
  85. }