| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 
var $ = document.querySelector.bind(document)var state = {  theme,  raw,  content,  compiler,  html: '',  markdown: '',  toc: ''}chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {  if (req.message === 'reload') {    location.reload(true)  }  else if (req.message === 'theme') {    state.theme = req.theme    m.redraw()  }  else if (req.message === 'raw') {    state.raw = req.raw    m.redraw()  }})var oncreate = {  markdown: () => {    scroll()  },  html: () => {    scroll()    if (state.content.toc && !state.toc) {      state.toc = toc()      m.redraw()    }    setTimeout(() => Prism.highlightAll(), 20)  }}function mount () {  $('pre').style.display = 'none'  var md = $('pre').innerText  m.mount($('body'), {    oninit: () => {      ;((done) => {        if (document.charset === 'UTF-8') {          done()          return        }        m.request({method: 'GET', url: location.href,          deserialize: (body) => {            done(body)            return body          }        })      })((data) => {        state.markdown = data || md        chrome.runtime.sendMessage({          message: 'markdown',          compiler: state.compiler,          markdown: state.markdown        }, (res) => {          state.html = res.html          m.redraw()        })      })    },    view: () => {      var dom = []      if (state.raw) {        dom.push(m('pre#_markdown', {oncreate: oncreate.markdown}, state.markdown))        $('body').classList.remove('_toc-left', '_toc-right')      }      else {        if (state.theme) {          dom.push(m('link#_theme [rel="stylesheet"] [type="text/css"]', {            href: chrome.runtime.getURL('/themes/' + state.theme + '.css')          }))        }        if (state.html) {          dom.push(m('#_html', {oncreate: oncreate.html,            class: /github(-dark)?/.test(state.theme) ? 'markdown-body' : 'markdown-theme'},            m.trust(state.html)          ))          if (state.content.toc && state.toc) {            dom.push(m.trust(state.toc))            $('body').classList.add('_toc-left')          }        }      }      return (dom.length ? dom : m('div'))    }  })}function scroll () {  if (state.content.scroll) {    $('body').scrollTop = parseInt(localStorage.getItem('md-' + location.href))  }  else if (location.hash) {    $('body').scrollTop = $(location.hash) && $(location.hash).offsetTop    setTimeout(() => {      $('body').scrollTop = $(location.hash) && $(location.hash).offsetTop    }, 100)  }}scroll.init = () => {  if (state.content.scroll) {    var timeout = null    window.addEventListener('scroll', () => {      clearTimeout(timeout)      timeout = setTimeout(() => {        localStorage.setItem('md-' + location.href, $('body').scrollTop)      }, 100)    })  }  setTimeout(scroll, 100)}if (document.readyState === 'complete') {  mount()  scroll.init()}else {  window.addEventListener('DOMContentLoaded', mount)  window.addEventListener('load', scroll.init)}var toc = (  link = (header) => '<a href="#' + header.id + '">' + header.title + '</a>') =>  Array.from($('#_html').childNodes)  .filter((node) => /h[1-6]/i.test(node.tagName))  .map((node) => ({    id: node.getAttribute('id'),    level: parseInt(node.tagName.replace('H', '')),    title: node.innerText  }))  .reduce((html, header, index, headers) => {    if (index) {      var prev = headers[index - 1]    }    if (!index || prev.level === header.level) {      html += link(header)    }    else if (prev.level > header.level) {      while (prev.level-- > header.level) {        html += '</div>'      }      html += link(header)    }    else if (prev.level < header.level) {      html += '<div id="_ul">' + link(header)    }    return html  }, '<div id="_toc"><div id="_ul">') + '</div></div>'
 |