Ver Fonte

Render based on allowed origins

simov há 9 anos atrás
pai
commit
aaf3d0640c
2 ficheiros alterados com 58 adições e 16 exclusões
  1. 34 4
      background/background.js
  2. 24 12
      content/content.js

+ 34 - 4
background/background.js

@@ -10,13 +10,38 @@ chrome.storage.sync.get((sync) => {
   if (sync.raw === undefined) {
     chrome.storage.sync.set({raw: false})
   }
+  if (!sync.path) {
+    chrome.storage.sync.set({path:
+      '/.*\\/.*\\.(?:markdown|mdown|mkdn|md|mkd|mdwn|mdtxt|mdtext|text)(?:#.*)?$/'
+    })
+  }
 })
 
 chrome.tabs.onUpdated.addListener((id, info, tab) => {
-  if (info.status === 'complete') return
-  if (/.*\/.*\.(?:markdown|mdown|mkdn|md|mkd|mdwn|mdtxt|mdtext|text)(?:#.*)?$/
-    .test(tab.url)) {
-    chrome.pageAction.show(id)
+  if (info.status === 'loading') {
+    chrome.tabs.executeScript(id, {
+      code: 'document.querySelector("pre").style.display = "none";location.href',
+      runAt: 'document_start'
+    }, (href) => {
+      if (chrome.runtime.lastError) {
+        return
+      }
+      chrome.storage.sync.get('path', (res) => {
+        if (new RegExp(res.path).test(href)) {
+          chrome.tabs.insertCSS(id, {file: 'css/content.css', runAt: 'document_start'})
+          chrome.tabs.insertCSS(id, {file: 'css/prism.css', runAt: 'document_start'})
+          chrome.tabs.executeScript(id, {file: 'vendor/mithril.min.js', runAt: 'document_start'})
+          chrome.tabs.executeScript(id, {file: 'vendor/prism.js', runAt: 'document_start'})
+          chrome.tabs.executeScript(id, {file: 'content/content.js', runAt: 'document_start'})
+        }
+        else {
+          chrome.tabs.executeScript(id, {
+            code: 'document.querySelector("pre").style.display = "block"',
+            runAt: 'document_start'
+          })
+        }
+      })
+    })
   }
 })
 
@@ -49,6 +74,11 @@ chrome.extension.onMessage.addListener((req, sender, sendResponse) => {
     chrome.storage.sync.set({raw: req.raw}, sendResponse)
     sendMessage({message: 'raw', raw: req.raw})
   }
+  else if (req.message === 'advanced') {
+    chrome.management.getSelf((extension) => {
+      chrome.tabs.create({url: extension.optionsUrl}, sendResponse)
+    })
+  }
 
   return true
 })

+ 24 - 12
content/content.js

@@ -12,6 +12,7 @@ var state = {
 chrome.extension.sendMessage({message: 'settings'}, (data) => {
   state.theme = data.theme
   state.raw = data.raw
+  m.redraw()
 })
 
 chrome.extension.onMessage.addListener((req, sender, sendResponse) => {
@@ -28,7 +29,7 @@ chrome.extension.onMessage.addListener((req, sender, sendResponse) => {
   }
 })
 
-window.addEventListener('DOMContentLoaded', () => {
+function mount () {
   $('pre').style.display = 'none'
 
   m.mount($('body'), {
@@ -89,18 +90,29 @@ window.addEventListener('DOMContentLoaded', () => {
       return (dom.length ? dom : m('div'))
     }
   })
-})
+}
 
-window.addEventListener('load', () => setTimeout(() => {
-  var timeout = null
-  window.addEventListener('scroll', () => {
-    clearTimeout(timeout)
-    timeout = setTimeout(() => {
-      localStorage.setItem('scrolltop', document.body.scrollTop)
-    }, 100)
-  })
-  document.body.scrollTop = parseInt(localStorage.getItem('scrolltop'))
-}, 100))
+function scroll () {
+  setTimeout(() => {
+    var timeout = null
+    window.addEventListener('scroll', () => {
+      clearTimeout(timeout)
+      timeout = setTimeout(() => {
+        localStorage.setItem('scrolltop', document.body.scrollTop)
+      }, 100)
+    })
+    document.body.scrollTop = parseInt(localStorage.getItem('scrolltop'))
+  }, 100)
+}
+
+if (document.readyState === 'complete') {
+  mount()
+  scroll()
+}
+else {
+  window.addEventListener('DOMContentLoaded', mount)
+  window.addEventListener('load', scroll)
+}
 
 function updateStyles () {
   if (state.raw) {