content.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. window.addEventListener('DOMContentLoaded', () => {
  2. document.querySelector('body').classList.add('markdown-body') // github
  3. m.mount(document.querySelector('body'), {
  4. controller: function () {
  5. var state = {
  6. theme: '',
  7. html: '',
  8. markdown: document.querySelector('pre').innerText,
  9. raw: false,
  10. getURL: () => chrome.extension.getURL('/themes/' + state.theme + '.css')
  11. }
  12. setTimeout(() => {
  13. chrome.extension.sendMessage({message: 'settings'}, (data) => {
  14. state.theme = data.theme
  15. state.raw = data.raw
  16. m.redraw()
  17. setTimeout(() => {
  18. chrome.extension.sendMessage({
  19. message: 'markdown',
  20. markdown: state.markdown
  21. }, (res) => {
  22. state.html = res.marked
  23. m.redraw()
  24. })
  25. }, 0)
  26. })
  27. }, 0)
  28. chrome.extension.onMessage.addListener((req, sender, sendResponse) => {
  29. if (req.message === 'reload') {
  30. window.location.reload(true)
  31. }
  32. else if (req.message === 'theme') {
  33. state.theme = req.theme
  34. m.redraw()
  35. }
  36. else if (req.message === 'raw') {
  37. state.raw = req.raw
  38. m.redraw()
  39. }
  40. })
  41. return {
  42. state: state,
  43. config: (element, initialized, context) => {
  44. if (!initialized) {
  45. Prism.highlightAll()
  46. }
  47. }
  48. }
  49. },
  50. view: (ctrl) => {
  51. var state = ctrl.state
  52. var dom = []
  53. if (state.raw) {
  54. dom.push(m('pre#markdown', state.markdown))
  55. }
  56. if (state.theme && !state.raw) {
  57. dom.push(m('link#theme [rel="stylesheet"] [type="text/css"]',
  58. {href: state.getURL()}))
  59. }
  60. if (state.html && !state.raw) {
  61. dom.push(m('#html', {config: ctrl.config}, m.trust(state.html)))
  62. }
  63. return (dom.length ? dom : m('div'))
  64. }
  65. })
  66. })
  67. window.addEventListener('load', () => setTimeout(() => {
  68. var timeout = null
  69. window.addEventListener('scroll', () => {
  70. clearTimeout(timeout)
  71. timeout = setTimeout(() => {
  72. localStorage.setItem('scrolltop', document.body.scrollTop)
  73. }, 100)
  74. })
  75. document.body.scrollTop = parseInt(localStorage.getItem('scrolltop'))
  76. }, 100))