| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- md.messages = ({storage: {defaults, state, set}, compilers, mathjax, webrequest}) => {
- return (req, sender, sendResponse) => {
- if (req.message === 'markdown') {
- var markdown = req.markdown
- if (state.content.mathjax) {
- var jax = mathjax()
- markdown = jax.tokenize(markdown)
- }
- var html = compilers[state.compiler].compile(markdown)
- if (state.content.mathjax) {
- html = jax.detokenize(html)
- }
- sendResponse({message: 'html', html})
- }
- // popup
- else if (req.message === 'popup') {
- sendResponse(Object.assign({}, state, {
- options: state[state.compiler],
- description: compilers[state.compiler].description,
- compilers: Object.keys(compilers),
- themes: state.themes,
- }))
- }
- else if (req.message === 'popup.theme') {
- set({theme: req.theme})
- notifyContent({message: 'theme', theme: req.theme})
- sendResponse()
- }
- else if (req.message === 'popup.raw') {
- set({raw: req.raw})
- notifyContent({message: 'raw', raw: req.raw})
- sendResponse()
- }
- else if (req.message === 'popup.defaults') {
- var options = Object.assign({}, defaults)
- options.origins = state.origins
- set(options)
- notifyContent({message: 'reload'})
- sendResponse()
- }
- else if (req.message === 'popup.compiler.name') {
- set({compiler: req.compiler})
- notifyContent({message: 'reload'})
- sendResponse()
- }
- else if (req.message === 'popup.compiler.options') {
- set({[req.compiler]: req.options})
- notifyContent({message: 'reload'})
- sendResponse()
- }
- else if (req.message === 'popup.content') {
- set({content: req.content})
- notifyContent({message: 'reload'})
- webrequest()
- sendResponse()
- }
- else if (req.message === 'popup.advanced') {
- // ff: opens up about:addons with openOptionsPage
- if (/Firefox/.test(navigator.userAgent)) {
- chrome.management.getSelf((extension) => {
- chrome.tabs.create({url: extension.optionsUrl})
- })
- }
- else {
- chrome.runtime.openOptionsPage()
- }
- sendResponse()
- }
- // options
- else if (req.message === 'options.origins') {
- sendResponse({
- origins: state.origins,
- header: state.header,
- match: state.match,
- })
- }
- else if (req.message === 'options.themes') {
- sendResponse({
- themes: state.themes,
- })
- }
- else if (req.message === 'options.header') {
- set({header: req.header})
- sendResponse()
- }
- // origins
- else if (req.message === 'origin.add') {
- state.origins[req.origin] = {
- match: defaults.match,
- csp: false,
- encoding: '',
- }
- set({origins: state.origins})
- sendResponse()
- }
- else if (req.message === 'origin.remove') {
- delete state.origins[req.origin]
- set({origins: state.origins})
- webrequest()
- sendResponse()
- }
- else if (req.message === 'origin.update') {
- state.origins[req.origin] = req.options
- set({origins: state.origins})
- webrequest()
- sendResponse()
- }
- // themes
- else if (req.message === 'themes') {
- set({themes: req.themes})
- ;(() => {
- var defaults = chrome.runtime.getManifest().web_accessible_resources
- .filter((file) => file.indexOf('/themes/') === 0)
- .map((file) => file.replace(/\/themes\/(.*)\.css/, '$1'))
- var custom = state.themes.map(({name}) => name)
- var all = custom.concat(defaults)
- if (!all.includes(state.theme.name)) {
- var theme = {
- name: 'github',
- url: chrome.runtime.getURL('/themes/github.css')
- }
- set({theme})
- }
- else if (custom.includes(state.theme.name)) {
- var theme = state.themes.find(({name}) => state.theme.name === name)
- set({theme})
- }
- })()
- sendResponse()
- }
- }
- function notifyContent (req, res) {
- chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
- chrome.tabs.sendMessage(tabs[0].id, req, res)
- })
- }
- }
|