Astroport.ONE/templates/UPlanetRegion/zero-md.min.js.map

1 line
18 KiB
Plaintext

{"version":3,"file":"zero-md.min.js","sources":["../src/index.js"],"sourcesContent":["export class ZeroMd extends HTMLElement {\n get src() {\n return this.getAttribute('src')\n }\n\n set src(val) {\n this.reflect('src', val)\n }\n\n get manualRender() {\n return this.hasAttribute('manual-render')\n }\n\n set manualRender(val) {\n this.reflect('manual-render', val)\n }\n\n reflect(name, val) {\n if (val === false) {\n this.removeAttribute(name)\n } else {\n this.setAttribute(name, val === true ? '' : val)\n }\n }\n\n static get observedAttributes() {\n return ['src']\n }\n\n attributeChangedCallback(name, old, val) {\n if (name === 'src' && this.connected && !this.manualRender && val !== old) {\n this.render()\n }\n }\n\n constructor(defaults) {\n super()\n this.version = '$VERSION'\n this.config = {\n markedUrl: 'https://cdn.jsdelivr.net/gh/markedjs/marked@4/marked.min.js',\n prismUrl: [\n ['https://cdn.jsdelivr.net/gh/PrismJS/prism@1/prism.min.js', 'data-manual'],\n 'https://cdn.jsdelivr.net/gh/PrismJS/prism@1/plugins/autoloader/prism-autoloader.min.js'\n ],\n cssUrls: [\n 'https://cdn.jsdelivr.net/gh/sindresorhus/github-markdown-css@4/github-markdown.min.css',\n 'https://cdn.jsdelivr.net/gh/PrismJS/prism@1/themes/prism.min.css'\n ],\n hostCss:\n ':host{display:block;position:relative;contain:content;}:host([hidden]){display:none;}',\n ...defaults,\n ...window.ZeroMdConfig\n }\n this.root = this.hasAttribute('no-shadow') ? this : this.attachShadow({ mode: 'open' })\n this.root.prepend(\n ...this.makeNodes(`<div class=\"markdown-styles\"></div><div class=\"markdown-body\"></div>`)\n )\n if (!this.constructor.ready) {\n this.constructor.ready = Promise.all([\n !!window.marked || this.loadScript(this.config.markedUrl),\n !!window.Prism || this.loadScript(this.config.prismUrl)\n ])\n }\n this.clicked = this.clicked.bind(this)\n if (!this.manualRender) {\n // Scroll to hash id after first render. However, `history.scrollRestoration` inteferes with this\n // on refresh. It's much better to use a `setTimeout` rather than to alter the browser's behaviour.\n this.render().then(() => setTimeout(() => this.goto(location.hash), 250))\n }\n this.observer = new MutationObserver(() => {\n this.observeChanges()\n if (!this.manualRender) this.render()\n })\n this.observer.observe(this, { childList: true })\n this.observeChanges()\n }\n\n /**\n * Start observing changes, if not already so, in `template` and `script`.\n */\n observeChanges() {\n this.querySelectorAll('template,script[type=\"text/markdown\"]').forEach((n) => {\n this.observer.observe(n.content || n, {\n childList: true,\n subtree: true,\n attributes: true,\n characterData: true\n })\n })\n }\n\n connectedCallback() {\n this.connected = true\n this.fire('zero-md-connected', {}, { bubbles: false, composed: false })\n this.waitForReady().then(() => {\n this.fire('zero-md-ready')\n })\n if (this.shadowRoot) {\n this.shadowRoot.addEventListener('click', this.clicked)\n }\n }\n\n disconnectedCallback() {\n this.connected = false\n if (this.shadowRoot) {\n this.shadowRoot.removeEventListener('click', this.clicked)\n }\n }\n\n waitForReady() {\n const ready =\n this.connected ||\n new Promise((resolve) => {\n this.addEventListener('zero-md-connected', function handler() {\n this.removeEventListener('zero-md-connected', handler)\n resolve()\n })\n })\n return Promise.all([this.constructor.ready, ready])\n }\n\n fire(name, detail = {}, opts = { bubbles: true, composed: true }) {\n if (detail.msg) {\n console.warn(detail.msg)\n }\n this.dispatchEvent(\n new CustomEvent(name, {\n detail: { node: this, ...detail },\n ...opts\n })\n )\n }\n\n tick() {\n return new Promise((resolve) => requestAnimationFrame(resolve))\n }\n\n // Coerce anything into an array\n arrify(any) {\n return any ? (Array.isArray(any) ? any : [any]) : []\n }\n\n // Promisify an element's onload callback\n onload(node) {\n return new Promise((resolve, reject) => {\n node.onload = resolve\n node.onerror = (err) => reject(err.path ? err.path[0] : err.composedPath()[0])\n })\n }\n\n // Load a url or load (in order) an array of urls via <script> tags\n loadScript(urls) {\n return Promise.all(\n this.arrify(urls).map((item) => {\n const [url, ...attrs] = this.arrify(item)\n const el = document.createElement('script')\n el.src = url\n el.async = false\n attrs.forEach((attr) => el.setAttribute(attr, ''))\n return this.onload(document.head.appendChild(el))\n })\n )\n }\n\n // Scroll to selected element\n goto(sel) {\n let el\n try {\n el = this.root.querySelector(sel)\n } catch {}\n if (el) el.scrollIntoView()\n }\n\n // Hijack same-doc anchor hash links\n clicked(ev) {\n if (ev.metaKey || ev.ctrlKey || ev.altKey || ev.shiftKey || ev.defaultPrevented) {\n return\n }\n const a = ev.target.closest('a')\n if (a && a.hash && a.host === location.host && a.pathname === location.pathname) {\n this.goto(a.hash)\n }\n }\n\n dedent(str) {\n str = str.replace(/^\\n/, '')\n const match = str.match(/^\\s+/)\n return match ? str.replace(new RegExp(`^${match[0]}`, 'gm'), '') : str\n }\n\n getBaseUrl(src) {\n const a = document.createElement('a')\n a.href = src\n return a.href.substring(0, a.href.lastIndexOf('/') + 1)\n }\n\n // Runs Prism highlight async; falls back to sync if Web Workers throw\n highlight(container) {\n return new Promise((resolve) => {\n const unhinted = container.querySelectorAll('pre>code:not([class*=\"language-\"])')\n unhinted.forEach((n) => {\n // Dead simple language detection :)\n const lang = n.innerText.match(/^\\s*</)\n ? 'markup'\n : n.innerText.match(/^\\s*(\\$|#)/)\n ? 'bash'\n : 'js'\n n.classList.add(`language-${lang}`)\n })\n try {\n window.Prism.highlightAllUnder(container, true, resolve())\n } catch {\n window.Prism.highlightAllUnder(container)\n resolve()\n }\n })\n }\n\n /**\n * Converts HTML string into HTMLCollection of nodes\n * @param {string} html\n * @returns {HTMLCollection}\n */\n makeNodes(html) {\n const tpl = document.createElement('template')\n tpl.innerHTML = html\n return tpl.content.children\n }\n\n /**\n * Constructs the styles dom and returns HTML string\n * @returns {string} `markdown-styles` string\n */\n buildStyles() {\n const get = (query) => {\n const node = this.querySelector(query)\n return node ? node.innerHTML || ' ' : ''\n }\n const urls = this.arrify(this.config.cssUrls)\n const html = `<style>${this.config.hostCss}</style>${get('template[data-merge=\"prepend\"]')}${\n get('template:not([data-merge])') ||\n urls.reduce((a, c) => `${a}<link rel=\"stylesheet\" href=\"${c}\">`, '')\n }${get('template[data-merge=\"append\"]')}`\n return html\n }\n\n /**\n * Constructs the markdown body nodes and returns HTML string\n * @param {*} opts Markedjs options\n * @returns {Promise<string>} `markdown-body` string\n */\n async buildMd(opts = {}) {\n const src = async () => {\n if (!this.src) return ''\n const resp = await fetch(this.src)\n if (resp.ok) {\n const md = await resp.text()\n return window.marked.parse(md, {\n baseUrl: this.getBaseUrl(this.src),\n ...opts\n })\n } else {\n this.fire('zero-md-error', {\n msg: `[zero-md] HTTP error ${resp.status} while fetching src`,\n status: resp.status,\n src: this.src\n })\n return ''\n }\n }\n const script = () => {\n const el = this.querySelector('script[type=\"text/markdown\"]')\n if (!el) return ''\n const md = el.hasAttribute('data-dedent') ? this.dedent(el.text) : el.text\n return window.marked.parse(md, opts)\n }\n return (await src()) || script()\n }\n\n /**\n * Returns 32-bit DJB2a hash in base36\n * @param {string} str\n * @returns {string}\n */\n getHash(str) {\n let hash = 5381\n for (let index = 0; index < str.length; index++) {\n hash = ((hash << 5) + hash) ^ str.charCodeAt(index)\n }\n return (hash >>> 0).toString(36)\n }\n\n /**\n * Insert or replace styles node in root from a HTML string. If there are external stylesheet\n * links, wait for them to load.\n * @param {string} html styles string\n * @returns {Promise<boolean|undefined>} returns true if stamped\n */\n async stampStyles(html) {\n const hash = this.getHash(html)\n const target = this.root.querySelector('.markdown-styles')\n if (target.getAttribute('data-hash') !== hash) {\n target.setAttribute('data-hash', hash)\n const nodes = this.makeNodes(html)\n const links = [...nodes].filter(\n (i) => i.tagName === 'LINK' && i.getAttribute('rel') === 'stylesheet'\n )\n target.innerHTML = ''\n target.append(...nodes)\n await Promise.all(links.map((l) => this.onload(l))).catch((err) => {\n this.fire('zero-md-error', {\n msg: '[zero-md] An external stylesheet failed to load',\n status: undefined,\n src: err.href\n })\n })\n return true\n }\n }\n\n /**\n * Insert or replace HTML body string into DOM\n * @param {string} html markdown-body string\n * @param {string[]} [classes] list of classes to apply to `.markdown-body` wrapper\n * @returns {Promise<boolean|undefined>} returns true if stamped\n */\n async stampBody(html, classes) {\n const names = this.arrify(classes)\n const hash = this.getHash(html + JSON.stringify(names))\n const target = this.root.querySelector('.markdown-body')\n if (target.getAttribute('data-hash') !== hash) {\n target.setAttribute('data-hash', hash)\n names.unshift('markdown-body')\n target.setAttribute('class', names.join(' '))\n const nodes = this.makeNodes(html)\n target.innerHTML = ''\n target.append(...nodes)\n await this.highlight(target)\n return true\n }\n }\n\n async render(opts = {}) {\n await this.waitForReady()\n const pending = this.buildMd(opts)\n const styles = await this.stampStyles(this.buildStyles())\n await this.tick()\n const body = await this.stampBody(await pending, opts.classes)\n this.fire('zero-md-rendered', { node: this, stamped: { styles, body } })\n }\n}\n\ncustomElements.define('zero-md', ZeroMd)\n"],"names":["ZeroMd","HTMLElement","src","this","getAttribute","val","reflect","manualRender","hasAttribute","name","removeAttribute","setAttribute","observedAttributes","attributeChangedCallback","old","connected","render","constructor","defaults","super","version","config","markedUrl","prismUrl","cssUrls","hostCss","window","ZeroMdConfig","root","attachShadow","mode","prepend","makeNodes","ready","Promise","all","marked","loadScript","Prism","clicked","bind","then","setTimeout","goto","location","hash","observer","MutationObserver","observeChanges","observe","childList","querySelectorAll","forEach","n","content","subtree","attributes","characterData","connectedCallback","fire","bubbles","composed","waitForReady","shadowRoot","addEventListener","disconnectedCallback","removeEventListener","resolve","handler","detail","opts","msg","console","warn","dispatchEvent","CustomEvent","node","tick","requestAnimationFrame","arrify","any","Array","isArray","onload","reject","onerror","err","path","composedPath","urls","map","item","url","attrs","el","document","createElement","async","attr","head","appendChild","sel","querySelector","scrollIntoView","ev","metaKey","ctrlKey","altKey","shiftKey","defaultPrevented","a","target","closest","host","pathname","dedent","str","match","replace","RegExp","getBaseUrl","href","substring","lastIndexOf","highlight","container","lang","innerText","classList","add","highlightAllUnder","html","tpl","innerHTML","children","buildStyles","get","query","reduce","c","buildMd","resp","fetch","ok","md","text","parse","baseUrl","status","script","getHash","index","length","charCodeAt","toString","stampStyles","nodes","links","filter","i","tagName","append","l","catch","undefined","stampBody","classes","names","JSON","stringify","unshift","join","pending","styles","body","stamped","customElements","define"],"mappings":"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"}