@diplodoc/transform 4.58.0 → 4.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/_yfm-only.css +57 -0
- package/dist/css/_yfm-only.css.map +3 -3
- package/dist/css/_yfm-only.min.css +1 -1
- package/dist/css/_yfm-only.min.css.map +3 -3
- package/dist/css/base.css +10 -0
- package/dist/css/base.css.map +3 -3
- package/dist/css/base.min.css +1 -1
- package/dist/css/base.min.css.map +3 -3
- package/dist/css/print.css.map +1 -1
- package/dist/css/yfm.css +67 -0
- package/dist/css/yfm.css.map +3 -3
- package/dist/css/yfm.min.css +1 -1
- package/dist/css/yfm.min.css.map +3 -3
- package/dist/js/_yfm-only.js.map +2 -2
- package/dist/js/_yfm-only.min.js.map +2 -2
- package/dist/js/base.js +233 -18
- package/dist/js/base.js.map +3 -3
- package/dist/js/base.min.js +1 -1
- package/dist/js/base.min.js.map +4 -4
- package/dist/js/yfm.js +213 -18
- package/dist/js/yfm.js.map +4 -4
- package/dist/js/yfm.min.js +1 -1
- package/dist/js/yfm.min.js.map +4 -4
- package/lib/frontmatter.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/plugins/changelog/index.js +2 -1
- package/lib/plugins/changelog/index.js.map +1 -1
- package/lib/plugins/images/collect.js +1 -1
- package/lib/plugins/images/collect.js.map +1 -1
- package/lib/plugins/images/index.js +3 -3
- package/lib/plugins/images/index.js.map +1 -1
- package/lib/plugins/inline-code/constant.d.ts +4 -0
- package/lib/plugins/inline-code/constant.js +58 -0
- package/lib/plugins/inline-code/constant.js.map +1 -0
- package/lib/plugins/inline-code/index.d.ts +3 -0
- package/lib/plugins/inline-code/index.js +45 -0
- package/lib/plugins/inline-code/index.js.map +1 -0
- package/lib/plugins.js +2 -0
- package/lib/plugins.js.map +1 -1
- package/lib/utils.d.ts +1 -0
- package/lib/utils.js +11 -1
- package/lib/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/js/base.ts +1 -0
- package/src/js/code.ts +32 -26
- package/src/js/inline-code/constant.ts +3 -0
- package/src/js/inline-code/index.ts +76 -0
- package/src/js/inline-code/utils.ts +190 -0
- package/src/js/term/utils.ts +1 -1
- package/src/scss/_code.scss +9 -0
- package/src/scss/_inline-code.scss +59 -0
- package/src/scss/_table.scss +12 -0
- package/src/scss/_yfm-only.scss +1 -0
- package/src/scss/brand.scss +1 -0
- package/src/scss/private.scss +2 -0
- package/src/transform/frontmatter.ts +1 -1
- package/src/transform/index.ts +0 -1
- package/src/transform/plugins/changelog/index.ts +3 -1
- package/src/transform/plugins/images/collect.ts +2 -2
- package/src/transform/plugins/images/index.ts +4 -4
- package/src/transform/plugins/inline-code/constant.ts +58 -0
- package/src/transform/plugins/inline-code/index.ts +58 -0
- package/src/transform/plugins.ts +2 -0
- package/src/transform/utils.ts +10 -0
package/dist/js/base.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/get-root-node-polyfill/index.js", "../../src/js/polyfill.js", "../../src/js/utils.ts", "../../src/js/code.ts", "../../src/js/anchor.ts"],
|
|
4
|
-
"sourcesContent": ["'use strict';\n\n// Node getRootNode(optional GetRootNodeOptions options);\n\n/**\n * Returns the context object\u2019s shadow-including root if options\u2019s composed is true.\n * Returns the context object\u2019s root otherwise.\n *\n * The root of an object is itself, if its parent is null, or else it is the root of its parent.\n *\n * The shadow-including root of an object is its root\u2019s host\u2019s shadow-including root,\n * if the object\u2019s root is a shadow root, and its root otherwise.\n *\n * https://dom.spec.whatwg.org/#dom-node-getrootnode\n *\n * @memberof Node.prototype\n * @param {!Object} [opt = {}] - Options.\n * @param {!boolean} [opt.composed] - See above description.\n * @returns {!Node} The root node.\n */\nfunction getRootNode(opt) {\n var composed = typeof opt === 'object' && Boolean(opt.composed);\n\n return composed ? getShadowIncludingRoot(this) : getRoot(this);\n}\n\nfunction getShadowIncludingRoot(node) {\n var root = getRoot(node);\n\n if (isShadowRoot(root)) {\n return getShadowIncludingRoot(root.host);\n }\n\n return root;\n}\n\nfunction getRoot(node) {\n if (node.parentNode != null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\nfunction isShadowRoot(node) {\n return node.nodeName === '#document-fragment' && node.constructor.name === 'ShadowRoot';\n}\n\nif (typeof module === 'object' && module.exports) {\n module.exports = getRootNode;\n}\n", "import getRootNode from 'get-root-node-polyfill';\n\nif (typeof document !== 'undefined') {\n // matches polyfill for old edge\n (function (e) {\n const matches =\n e.matches ||\n e.matchesSelector ||\n e.webkitMatchesSelector ||\n e.mozMatchesSelector ||\n e.msMatchesSelector ||\n e.oMatchesSelector;\n\n if (matches) {\n e.matches = e.matchesSelector = matches;\n } else {\n e.matches = e.matchesSelector = function matches(selector) {\n const rootNode = e.getRootNode ? e.getRootNode() : getRootNode.call(e);\n const matches = rootNode.querySelectorAll(selector);\n const th = this;\n return Array.prototype.some.call(matches, (e) => {\n return e === th;\n });\n };\n }\n // eslint-disable-next-line no-undef\n })(Element.prototype);\n}\n", "export const getEventTarget = (event: Event) => {\n const path = event.composedPath();\n return Array.isArray(path) && path.length > 0 ? path[0] : event.target;\n};\n\nexport const isCustom = (event: Event) => {\n const target = getEventTarget(event);\n return !target || !(target as HTMLElement).matches;\n};\n\nexport const copyToClipboard = async (text: string) => {\n if (!text) {\n return;\n }\n\n if (navigator.clipboard && typeof navigator.clipboard.writeText) {\n return navigator.clipboard.writeText(text);\n }\n\n const textarea = document.createElement('textarea');\n textarea.setAttribute('style', 'position: absolute; left: 1000%');\n textarea.textContent = text;\n document.body.append(textarea);\n\n textarea.select();\n document.execCommand('copy');\n\n document.body.removeChild(textarea);\n};\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst BUTTON_SELECTOR = '.yfm-clipboard-button';\n\nfunction notifySuccess(svgButton: HTMLElement | null) {\n if (!svgButton) {\n return;\n }\n\n const id = svgButton.getAttribute('data-animation');\n // @ts-expect-error\n const icon = svgButton.getRootNode().getElementById(`visibileAnimation-${id}`);\n\n if (!icon) {\n return;\n }\n\n icon.beginElement();\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !target.matches(BUTTON_SELECTOR)) {\n return;\n }\n\n const parent = target.parentNode;\n\n if (!parent) {\n return;\n }\n\n const code = parent.querySelector<HTMLElement>('pre code');\n if (!code) {\n return;\n }\n\n // Get all text nodes and filter out line numbers\n const textContent = Array.from(code.childNodes)\n .filter((node) => {\n // Skip line number spans\n if (node instanceof HTMLElement && node.classList.contains('yfm-line-number')) {\n return false;\n }\n return true;\n })\n .map((node) => node.textContent)\n .join('');\n\n copyToClipboard(textContent).then(() => {\n notifySuccess(parent.querySelector('.yfm-clipboard-icon'));\n });\n });\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst ANCHOR_BUTTON_SELECTOR = '.yfm-clipboard-anchor';\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !target.matches(ANCHOR_BUTTON_SELECTOR)) {\n return;\n }\n\n const href = target.getAttribute('data-href') || '';\n const link = new URL(href, window.location.href).toString();\n\n copyToClipboard(link);\n });\n}\n"],
|
|
5
|
-
"mappings": "yuBAAAA,EAAAC,EAAA,CAAA,+CAAAC,EAAAC,EAAA,CAAA,aAoBA,SAASC,EAAYC,EAAK,CACxB,IAAIC,EAAW,OAAOD,GAAQ,UAAY,EAAQA,EAAI,SAEtD,OAAOC,EAAWC,EAAuB,IAAI,EAAIC,EAAQ,IAAI,CAC/D,CAEA,SAASD,EAAuBE,EAAM,CACpC,IAAIC,EAAOF,EAAQC,CAAI,EAEvB,OAAIE,EAAaD,CAAI,EACZH,EAAuBG,EAAK,IAAI,EAGlCA,CACT,CAEA,SAASF,EAAQC,EAAM,CACrB,OAAIA,EAAK,YAAc,KACdD,EAAQC,EAAK,UAAU,EAGzBA,CACT,CAEA,SAASE,EAAaF,EAAM,CAC1B,OAAOA,EAAK,WAAa,sBAAwBA,EAAK,YAAY,OAAS,YAC7E,CAEI,OAAON,GAAW,UAAYA,EAAO,UACvCA,EAAO,QAAUC,EACnB,CAAA,CAAA,EClDAQ,EAAwBC,EAAAb,EAAA,CAAA,EAEpB,OAAO,UAAa,aAEnB,SAAUc,EAAG,CACV,IAAMC,EACFD,EAAE,SACFA,EAAE,iBACFA,EAAE,uBACFA,EAAE,oBACFA,EAAE,mBACFA,EAAE,iBAEFC,EACAD,EAAE,QAAUA,EAAE,gBAAkBC,EAEhCD,EAAE,QAAUA,EAAE,gBAAkB,SAAiBE,EAAU,CAEvD,IAAMD,GADWD,EAAE,YAAcA,EAAE,YAAY,EAAIF,EAAAR,QAAY,KAAKU,CAAC,GAC5C,iBAAiBE,CAAQ,EAC5CC,EAAK,KACX,OAAO,MAAM,UAAU,KAAK,KAAKF,EAAUD,GAChCA,IAAMG,CAChB,CACL,CAGR,EAAG,QAAQ,SAAS,EC1BjB,IAAMC,EAAkBC,GAAiB,CAC5C,IAAMC,EAAOD,EAAM,aAAa,EAChC,OAAO,MAAM,QAAQC,CAAI,GAAKA,EAAK,OAAS,EAAIA,EAAK,CAAC,EAAID,EAAM,MACpE,EAEaE,EAAYF,GAAiB,CACtC,IAAMG,EAASJ,EAAeC,CAAK,EACnC,MAAO,CAACG,GAAU,CAAEA,EAAuB,OAC/C,EAEaC,EAAyBC,GAAiBC,EAAA,OAAA,KAAA,WAAA,CACnD,GAAI,CAACD,EACD,OAGJ,GAAI,UAAU,WAAa,OAAO,UAAU,UAAU,UAClD,OAAO,UAAU,UAAU,UAAUA,CAAI,EAG7C,IAAME,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,aAAa,QAAS,iCAAiC,EAChEA,EAAS,YAAcF,EACvB,SAAS,KAAK,OAAOE,CAAQ,EAE7BA,EAAS,OAAO,EAChB,SAAS,YAAY,MAAM,EAE3B,SAAS,KAAK,YAAYA,CAAQ,CACtC,CAAA,EC1BMC,EAAkB,wBAExB,SAASC,EAAcC,EAA+B,CAClD,GAAI,CAACA,EACD,OAGJ,IAAMC,EAAKD,EAAU,aAAa,gBAAgB,EAE5CE,EAAOF,EAAU,YAAY,EAAE,eAAe,qBAAqBC,CAAE,EAAE,EAExEC,GAILA,EAAK,aAAa,CACtB,
|
|
6
|
-
"names": ["require_get_root_node_polyfill", "__commonJS", "exports", "module", "getRootNode", "opt", "composed", "getShadowIncludingRoot", "getRoot", "node", "root", "isShadowRoot", "import_get_root_node_polyfill", "__toESM", "e", "matches", "selector", "th", "getEventTarget", "event", "path", "isCustom", "target", "copyToClipboard", "text", "__async", "textarea", "BUTTON_SELECTOR", "notifySuccess", "svgButton", "id", "icon", "parent", "code", "textContent", "ANCHOR_BUTTON_SELECTOR", "href", "link"]
|
|
3
|
+
"sources": ["../../node_modules/get-root-node-polyfill/index.js", "../../src/js/polyfill.js", "../../src/js/utils.ts", "../../src/js/code.ts", "../../src/js/anchor.ts", "../../src/js/inline-code/constant.ts", "../../src/js/term/utils.ts", "../../src/js/inline-code/utils.ts", "../../src/js/inline-code/index.ts"],
|
|
4
|
+
"sourcesContent": ["'use strict';\n\n// Node getRootNode(optional GetRootNodeOptions options);\n\n/**\n * Returns the context object\u2019s shadow-including root if options\u2019s composed is true.\n * Returns the context object\u2019s root otherwise.\n *\n * The root of an object is itself, if its parent is null, or else it is the root of its parent.\n *\n * The shadow-including root of an object is its root\u2019s host\u2019s shadow-including root,\n * if the object\u2019s root is a shadow root, and its root otherwise.\n *\n * https://dom.spec.whatwg.org/#dom-node-getrootnode\n *\n * @memberof Node.prototype\n * @param {!Object} [opt = {}] - Options.\n * @param {!boolean} [opt.composed] - See above description.\n * @returns {!Node} The root node.\n */\nfunction getRootNode(opt) {\n var composed = typeof opt === 'object' && Boolean(opt.composed);\n\n return composed ? getShadowIncludingRoot(this) : getRoot(this);\n}\n\nfunction getShadowIncludingRoot(node) {\n var root = getRoot(node);\n\n if (isShadowRoot(root)) {\n return getShadowIncludingRoot(root.host);\n }\n\n return root;\n}\n\nfunction getRoot(node) {\n if (node.parentNode != null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\nfunction isShadowRoot(node) {\n return node.nodeName === '#document-fragment' && node.constructor.name === 'ShadowRoot';\n}\n\nif (typeof module === 'object' && module.exports) {\n module.exports = getRootNode;\n}\n", "import getRootNode from 'get-root-node-polyfill';\n\nif (typeof document !== 'undefined') {\n // matches polyfill for old edge\n (function (e) {\n const matches =\n e.matches ||\n e.matchesSelector ||\n e.webkitMatchesSelector ||\n e.mozMatchesSelector ||\n e.msMatchesSelector ||\n e.oMatchesSelector;\n\n if (matches) {\n e.matches = e.matchesSelector = matches;\n } else {\n e.matches = e.matchesSelector = function matches(selector) {\n const rootNode = e.getRootNode ? e.getRootNode() : getRootNode.call(e);\n const matches = rootNode.querySelectorAll(selector);\n const th = this;\n return Array.prototype.some.call(matches, (e) => {\n return e === th;\n });\n };\n }\n // eslint-disable-next-line no-undef\n })(Element.prototype);\n}\n", "export const getEventTarget = (event: Event) => {\n const path = event.composedPath();\n return Array.isArray(path) && path.length > 0 ? path[0] : event.target;\n};\n\nexport const isCustom = (event: Event) => {\n const target = getEventTarget(event);\n return !target || !(target as HTMLElement).matches;\n};\n\nexport const copyToClipboard = async (text: string) => {\n if (!text) {\n return;\n }\n\n if (navigator.clipboard && typeof navigator.clipboard.writeText) {\n return navigator.clipboard.writeText(text);\n }\n\n const textarea = document.createElement('textarea');\n textarea.setAttribute('style', 'position: absolute; left: 1000%');\n textarea.textContent = text;\n document.body.append(textarea);\n\n textarea.select();\n document.execCommand('copy');\n\n document.body.removeChild(textarea);\n};\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst BUTTON_SELECTOR = '.yfm-clipboard-button';\n\nfunction notifySuccess(svgButton: HTMLElement | null) {\n if (!svgButton) {\n return;\n }\n\n const id = svgButton.getAttribute('data-animation');\n // @ts-expect-error\n const icon = svgButton.getRootNode().getElementById(`visibileAnimation-${id}`);\n\n if (!icon) {\n return;\n }\n\n icon.beginElement();\n}\n\nfunction buttonCopyFn(target: HTMLElement) {\n const parent = target.parentNode;\n\n if (!parent) {\n return;\n }\n\n const code = parent.querySelector<HTMLElement>('pre code');\n if (!code) {\n return;\n }\n\n // Get all text nodes and filter out line numbers\n const textContent = Array.from(code.childNodes)\n .filter((node) => {\n // Skip line number spans\n if (node instanceof HTMLElement && node.classList.contains('yfm-line-number')) {\n return false;\n }\n return true;\n })\n .map((node) => node.textContent)\n .join('');\n\n copyToClipboard(textContent).then(() => {\n notifySuccess(parent.querySelector('.yfm-clipboard-icon'));\n });\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n const button = target.matches(BUTTON_SELECTOR);\n\n if (isCustom(event) || !button) {\n return;\n }\n\n buttonCopyFn(target);\n });\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst ANCHOR_BUTTON_SELECTOR = '.yfm-clipboard-anchor';\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !target.matches(ANCHOR_BUTTON_SELECTOR)) {\n return;\n }\n\n const href = target.getAttribute('data-href') || '';\n const link = new URL(href, window.location.href).toString();\n\n copyToClipboard(link);\n });\n}\n", "export const INLINE_CODE = '.yfm-clipboard-inline-code';\n\nexport const OPEN_CLASS = 'open';\n", "export const Selector = {\n TITLE: '.yfm .yfm-term_title',\n CONTENT: '.yfm .yfm-term_dfn',\n};\nexport const openClass = 'open';\nexport const openDefinitionClass = Selector.CONTENT.replace(/\\./g, '') + ' ' + openClass;\nlet isListenerNeeded = true;\n\nexport function setDefinitionId(definitionElement: HTMLElement, termElement: HTMLElement): void {\n const termId = termElement.getAttribute('id') || Math.random().toString(36).substr(2, 8);\n definitionElement?.setAttribute('term-id', termId);\n}\n\nexport function setDefinitonAriaAttributes(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const ariaLive = termElement.getAttribute('aria-live') || 'polite';\n definitionElement?.setAttribute('aria-live', ariaLive);\n definitionElement?.setAttribute('aria-modal', 'true');\n}\n\nexport function setDefinitionPosition(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const {\n x: termX,\n y: termY,\n right: termRight,\n left: termLeft,\n width: termWidth,\n height: termHeight,\n } = termElement.getBoundingClientRect();\n\n const termParent = termParentElement(termElement);\n\n if (!termParent) {\n return;\n }\n\n const {right: termParentRight, left: termParentLeft} = termParent.getBoundingClientRect();\n\n if ((termParentRight < termLeft || termParentLeft > termRight) && !isListenerNeeded) {\n closeDefinition(definitionElement);\n return;\n }\n\n if (isListenerNeeded && termParent) {\n termParent.addEventListener('scroll', termOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(definitionElement.getAttribute('relativeX'));\n const relativeY = Number(definitionElement.getAttribute('relativeY'));\n\n if (relativeX === termX && relativeY === termY) {\n return;\n }\n\n definitionElement.setAttribute('relativeX', String(termX));\n definitionElement.setAttribute('relativeY', String(termY));\n\n const offsetTop = termHeight + 5;\n const definitionParent = definitionElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = definitionElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(termElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - termWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n const offsetRight = 5;\n const shiftLeft = definitionOutOfScreenOnRight\n ? definitionRightCoordinate - document.body.clientWidth + offsetRight\n : 0;\n const offsetLeft =\n getCoords(termElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument;\n\n const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;\n\n definitionElement.style.top =\n Number(getCoords(termElement).top + offsetTop - customHeaderTop) + 'px';\n definitionElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + 'px';\n}\n\nfunction termOnResize() {\n const openedDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n if (!openedDefinition) {\n return;\n }\n const termId = openedDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n return;\n }\n\n setDefinitionPosition(openedDefinition, termElement);\n}\n\nfunction termParentElement(term: HTMLElement | null) {\n if (!term) {\n return null;\n }\n\n const closestScrollableParent = term.closest('table') || term.closest('code');\n\n return closestScrollableParent || term.parentElement;\n}\n\nexport function openDefinition(target: HTMLElement) {\n const openedDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n const termId = target.getAttribute('id');\n const termKey = target.getAttribute('term-key');\n const definitionElement = document.getElementById(termKey + '_element');\n\n const isSameTerm = openedDefinition && termId === openedDefinition.getAttribute('term-id');\n if (isSameTerm) {\n closeDefinition(openedDefinition);\n return;\n }\n\n const isTargetDefinitionContent = target.closest(\n [Selector.CONTENT.replace(' ', ''), openClass].join('.'),\n );\n\n if (openedDefinition && !isTargetDefinitionContent) {\n closeDefinition(openedDefinition);\n }\n\n if (!target.matches(Selector.TITLE) || !definitionElement) {\n return;\n }\n\n setDefinitionId(definitionElement, target);\n setDefinitonAriaAttributes(definitionElement, target);\n setDefinitionPosition(definitionElement, target);\n\n definitionElement.classList.toggle(openClass);\n\n trapFocus(definitionElement);\n}\n\nexport function closeDefinition(definition: HTMLElement) {\n definition.classList.remove(openClass);\n const term = getTermByDefinition(definition);\n const termParent = termParentElement(term);\n\n if (!termParent) {\n return;\n }\n\n termParent.removeEventListener('scroll', termOnResize);\n isListenerNeeded = true;\n}\n\nexport function getCoords(elem: HTMLElement) {\n const box = elem.getBoundingClientRect();\n\n const body = document.body;\n const docEl = document.documentElement;\n\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n\n return {top: Math.round(top), left: Math.round(left)};\n}\n\nexport function trapFocus(element: HTMLElement) {\n const focusableElements = element.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n const firstFocusableElement = focusableElements[0] as HTMLElement;\n const lastFocusableElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n if (firstFocusableElement) {\n firstFocusableElement.focus();\n }\n\n element.addEventListener('keydown', function (e) {\n const isTabPressed = e.key === 'Tab' || e.keyCode === 9;\n if (!isTabPressed) {\n return;\n }\n\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableElement) {\n lastFocusableElement.focus();\n e.preventDefault();\n }\n } else if (document.activeElement === lastFocusableElement) {\n firstFocusableElement.focus();\n e.preventDefault();\n }\n });\n}\n\nexport function getTermByDefinition(definition: HTMLElement) {\n const termId = definition.getAttribute('term-id');\n\n return termId ? document.getElementById(termId) : null;\n}\n", "import {getCoords} from '../term/utils';\n\nimport {OPEN_CLASS} from './constant';\n\nexport let timer: ReturnType<typeof setTimeout> | null = null;\n\nlet isListenerNeeded = true;\n\nexport function getTooltipElement(): HTMLElement | null {\n return document.querySelector('.yfm-inline-code-tooltip');\n}\n\nfunction setTooltipAriaAttributes(tooltipElement: HTMLElement, targetElement: HTMLElement): void {\n const ariaLive = targetElement.getAttribute('aria-live') || 'polite';\n tooltipElement?.setAttribute('aria-live', ariaLive);\n tooltipElement?.setAttribute('aria-modal', 'true');\n}\n\nfunction checkTimerAndClear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n}\n\nfunction tooltipParentElement(target: HTMLElement | null) {\n if (!target) {\n return null;\n }\n\n const closestScrollableParent = target.closest('table') || target.closest('code');\n\n return closestScrollableParent || target.parentElement;\n}\n\nfunction tooltipOnResize() {\n const openedDefinition = getTooltipElement();\n\n if (!openedDefinition) {\n return;\n }\n const inlineId = openedDefinition.getAttribute('inline-id') || '';\n const targetElement = document.getElementById(inlineId);\n\n if (!targetElement) {\n return;\n }\n\n setTooltipPosition(openedDefinition, targetElement);\n}\n\nexport function setTooltipPosition(tooltipElement: HTMLElement, targetElement: HTMLElement): void {\n const {\n x: inlineX,\n y: inlineY,\n right: inlineRight,\n left: inlineLeft,\n width: inlineWidth,\n height: inlineHeight,\n } = targetElement.getBoundingClientRect();\n\n const tooltipParent = tooltipParentElement(targetElement);\n\n if (!tooltipParent) {\n return;\n }\n\n const {right: tooltipParentRight, left: tooltipParentLeft} =\n tooltipParent.getBoundingClientRect();\n\n if ((tooltipParentRight < inlineLeft || tooltipParentLeft > inlineRight) && !isListenerNeeded) {\n closeTooltip(tooltipElement);\n return;\n }\n\n if (isListenerNeeded && tooltipParent) {\n tooltipParent.addEventListener('scroll', tooltipOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(tooltipElement.getAttribute('relativeX'));\n const relativeY = Number(tooltipElement.getAttribute('relativeY'));\n\n if (relativeX === inlineX && relativeY === inlineY) {\n return;\n }\n\n tooltipElement.setAttribute('relativeX', String(inlineX));\n tooltipElement.setAttribute('relativeY', String(inlineY));\n\n const offsetTop = inlineHeight + 5;\n const definitionParent = tooltipElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = tooltipElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(targetElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - inlineWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n const offsetRight = 5;\n const shiftLeft = definitionOutOfScreenOnRight\n ? definitionRightCoordinate - document.body.clientWidth + offsetRight\n : 0;\n const offsetLeft =\n getCoords(targetElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument;\n\n const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;\n\n tooltipElement.style.top =\n Number(getCoords(targetElement).top + offsetTop - customHeaderTop) + 'px';\n tooltipElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + 'px';\n}\n\nexport function getInlineCodeByTooltip(definition: HTMLElement) {\n const inlineId = definition.getAttribute('inline-id');\n\n return inlineId ? document.getElementById(inlineId) : null;\n}\n\nfunction closeTooltipFn(definition: HTMLElement) {\n definition.classList.remove(OPEN_CLASS);\n const inline = getInlineCodeByTooltip(definition);\n const tooltipParent = tooltipParentElement(inline);\n\n definition.removeAttribute('inline-id');\n\n if (!tooltipParent) {\n return;\n }\n\n tooltipParent.removeEventListener('scroll', tooltipOnResize);\n isListenerNeeded = true;\n}\n\nexport function openTooltip(target: HTMLElement) {\n const tooltipElement = document.getElementById('tooltip_inline_clipboard_dialog');\n\n if (!target.matches('.yfm-clipboard-inline-code') || !tooltipElement) {\n return;\n }\n\n tooltipElement.setAttribute('inline-id', target.getAttribute('id') || '');\n setTooltipAriaAttributes(tooltipElement, target);\n setTooltipPosition(tooltipElement, target);\n\n // In order not to get rid of the smooth appearance effect, I had to do this\n if (tooltipElement.classList.contains(OPEN_CLASS)) {\n tooltipElement.classList.remove(OPEN_CLASS);\n requestAnimationFrame(() => {\n tooltipElement.classList.add(OPEN_CLASS);\n });\n } else {\n tooltipElement.classList.add(OPEN_CLASS);\n }\n\n return tooltipElement;\n}\n\nexport function closeTooltip(target: HTMLElement) {\n checkTimerAndClear();\n closeTooltipFn(target);\n}\n\nexport function tooltipWorker(target: HTMLElement) {\n const definition = openTooltip(target);\n\n if (!definition) {\n return;\n }\n checkTimerAndClear();\n timer = setTimeout(() => {\n closeTooltip(definition);\n timer = null;\n }, 1000);\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from '../utils';\n\nimport {INLINE_CODE, OPEN_CLASS} from './constant';\nimport {\n closeTooltip,\n getInlineCodeByTooltip,\n getTooltipElement,\n setTooltipPosition,\n tooltipWorker,\n} from './utils';\n\nexport function inlineCopyFn(target: HTMLElement) {\n const innerText = target.innerText;\n\n if (!innerText) {\n return;\n }\n\n copyToClipboard(innerText).then(() => {\n tooltipWorker(target);\n });\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n const inline = target.matches(INLINE_CODE);\n\n if (isCustom(event) || !inline) {\n return;\n }\n\n inlineCopyFn(target);\n });\n\n document.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' && document.activeElement) {\n const activeElement = document.activeElement as HTMLElement;\n\n const innerText = activeElement.innerText;\n\n if (!innerText) {\n return;\n }\n\n copyToClipboard(innerText).then(() => {\n tooltipWorker(activeElement);\n });\n }\n\n const inlineTooltip = getTooltipElement();\n\n if (event.key === 'Escape' && inlineTooltip) {\n closeTooltip(inlineTooltip);\n getInlineCodeByTooltip(inlineTooltip)?.focus(); // Set focus back to open button after closing popup\n }\n });\n\n window.addEventListener('resize', () => {\n const inlineTooltip = getTooltipElement();\n if (!inlineTooltip) {\n return;\n }\n\n const inlineId = inlineTooltip.getAttribute('inline-id') || '';\n const inlineCodeElement = document.getElementById(inlineId);\n\n if (!inlineCodeElement) {\n inlineTooltip.classList.toggle(OPEN_CLASS);\n return;\n }\n\n setTooltipPosition(inlineTooltip, inlineCodeElement);\n });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["require_get_root_node_polyfill", "__commonJS", "exports", "module", "getRootNode", "opt", "composed", "getShadowIncludingRoot", "getRoot", "node", "root", "isShadowRoot", "import_get_root_node_polyfill", "__toESM", "e", "matches", "selector", "th", "getEventTarget", "event", "path", "isCustom", "target", "copyToClipboard", "text", "__async", "textarea", "BUTTON_SELECTOR", "notifySuccess", "svgButton", "id", "icon", "buttonCopyFn", "parent", "code", "textContent", "button", "ANCHOR_BUTTON_SELECTOR", "href", "link", "INLINE_CODE", "OPEN_CLASS", "Selector", "openClass", "openDefinitionClass", "getCoords", "elem", "box", "body", "docEl", "scrollTop", "scrollLeft", "clientTop", "clientLeft", "top", "left", "timer", "isListenerNeeded", "getTooltipElement", "setTooltipAriaAttributes", "tooltipElement", "targetElement", "ariaLive", "checkTimerAndClear", "tooltipParentElement", "tooltipOnResize", "openedDefinition", "inlineId", "setTooltipPosition", "inlineX", "inlineY", "inlineRight", "inlineLeft", "inlineWidth", "inlineHeight", "tooltipParent", "tooltipParentRight", "tooltipParentLeft", "closeTooltip", "relativeX", "relativeY", "offsetTop", "definitionParent", "definitionWidth", "definitionParentLeft", "definitionLeftCoordinate", "definitionRightCoordinate", "definitionOutOfScreenOnLeft", "definitionOutOfScreenOnRight", "fitDefinitionDocument", "customHeaderTop", "shiftLeft", "offsetLeft", "isShiftLeftNeeded", "getInlineCodeByTooltip", "definition", "closeTooltipFn", "inline", "openTooltip", "tooltipWorker", "inlineCopyFn", "innerText", "_a", "activeElement", "inlineTooltip", "inlineCodeElement"]
|
|
7
7
|
}
|
package/dist/js/yfm.js
CHANGED
|
@@ -484,29 +484,33 @@
|
|
|
484
484
|
}
|
|
485
485
|
icon.beginElement();
|
|
486
486
|
}
|
|
487
|
+
function buttonCopyFn(target) {
|
|
488
|
+
const parent = target.parentNode;
|
|
489
|
+
if (!parent) {
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
const code = parent.querySelector("pre code");
|
|
493
|
+
if (!code) {
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
const textContent = Array.from(code.childNodes).filter((node) => {
|
|
497
|
+
if (node instanceof HTMLElement && node.classList.contains("yfm-line-number")) {
|
|
498
|
+
return false;
|
|
499
|
+
}
|
|
500
|
+
return true;
|
|
501
|
+
}).map((node) => node.textContent).join("");
|
|
502
|
+
copyToClipboard(textContent).then(() => {
|
|
503
|
+
notifySuccess(parent.querySelector(".yfm-clipboard-icon"));
|
|
504
|
+
});
|
|
505
|
+
}
|
|
487
506
|
if (typeof document !== "undefined") {
|
|
488
507
|
document.addEventListener("click", (event) => {
|
|
489
508
|
const target = getEventTarget(event);
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
}
|
|
493
|
-
const parent = target.parentNode;
|
|
494
|
-
if (!parent) {
|
|
495
|
-
return;
|
|
496
|
-
}
|
|
497
|
-
const code = parent.querySelector("pre code");
|
|
498
|
-
if (!code) {
|
|
509
|
+
const button = target.matches(BUTTON_SELECTOR);
|
|
510
|
+
if (isCustom(event) || !button) {
|
|
499
511
|
return;
|
|
500
512
|
}
|
|
501
|
-
|
|
502
|
-
if (node instanceof HTMLElement && node.classList.contains("yfm-line-number")) {
|
|
503
|
-
return false;
|
|
504
|
-
}
|
|
505
|
-
return true;
|
|
506
|
-
}).map((node) => node.textContent).join("");
|
|
507
|
-
copyToClipboard(textContent).then(() => {
|
|
508
|
-
notifySuccess(parent.querySelector(".yfm-clipboard-icon"));
|
|
509
|
-
});
|
|
513
|
+
buttonCopyFn(target);
|
|
510
514
|
});
|
|
511
515
|
}
|
|
512
516
|
|
|
@@ -524,6 +528,10 @@
|
|
|
524
528
|
});
|
|
525
529
|
}
|
|
526
530
|
|
|
531
|
+
// src/js/inline-code/constant.ts
|
|
532
|
+
var INLINE_CODE = ".yfm-clipboard-inline-code";
|
|
533
|
+
var OPEN_CLASS = "open";
|
|
534
|
+
|
|
527
535
|
// src/js/term/utils.ts
|
|
528
536
|
var Selector = {
|
|
529
537
|
TITLE: ".yfm .yfm-term_title",
|
|
@@ -687,6 +695,193 @@
|
|
|
687
695
|
return termId ? document.getElementById(termId) : null;
|
|
688
696
|
}
|
|
689
697
|
|
|
698
|
+
// src/js/inline-code/utils.ts
|
|
699
|
+
var timer = null;
|
|
700
|
+
var isListenerNeeded2 = true;
|
|
701
|
+
function getTooltipElement() {
|
|
702
|
+
return document.querySelector(".yfm-inline-code-tooltip");
|
|
703
|
+
}
|
|
704
|
+
function setTooltipAriaAttributes(tooltipElement, targetElement) {
|
|
705
|
+
const ariaLive = targetElement.getAttribute("aria-live") || "polite";
|
|
706
|
+
tooltipElement == null ? void 0 : tooltipElement.setAttribute("aria-live", ariaLive);
|
|
707
|
+
tooltipElement == null ? void 0 : tooltipElement.setAttribute("aria-modal", "true");
|
|
708
|
+
}
|
|
709
|
+
function checkTimerAndClear() {
|
|
710
|
+
if (timer) {
|
|
711
|
+
clearTimeout(timer);
|
|
712
|
+
timer = null;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
function tooltipParentElement(target) {
|
|
716
|
+
if (!target) {
|
|
717
|
+
return null;
|
|
718
|
+
}
|
|
719
|
+
const closestScrollableParent = target.closest("table") || target.closest("code");
|
|
720
|
+
return closestScrollableParent || target.parentElement;
|
|
721
|
+
}
|
|
722
|
+
function tooltipOnResize() {
|
|
723
|
+
const openedDefinition = getTooltipElement();
|
|
724
|
+
if (!openedDefinition) {
|
|
725
|
+
return;
|
|
726
|
+
}
|
|
727
|
+
const inlineId = openedDefinition.getAttribute("inline-id") || "";
|
|
728
|
+
const targetElement = document.getElementById(inlineId);
|
|
729
|
+
if (!targetElement) {
|
|
730
|
+
return;
|
|
731
|
+
}
|
|
732
|
+
setTooltipPosition(openedDefinition, targetElement);
|
|
733
|
+
}
|
|
734
|
+
function setTooltipPosition(tooltipElement, targetElement) {
|
|
735
|
+
const {
|
|
736
|
+
x: inlineX,
|
|
737
|
+
y: inlineY,
|
|
738
|
+
right: inlineRight,
|
|
739
|
+
left: inlineLeft,
|
|
740
|
+
width: inlineWidth,
|
|
741
|
+
height: inlineHeight
|
|
742
|
+
} = targetElement.getBoundingClientRect();
|
|
743
|
+
const tooltipParent = tooltipParentElement(targetElement);
|
|
744
|
+
if (!tooltipParent) {
|
|
745
|
+
return;
|
|
746
|
+
}
|
|
747
|
+
const { right: tooltipParentRight, left: tooltipParentLeft } = tooltipParent.getBoundingClientRect();
|
|
748
|
+
if ((tooltipParentRight < inlineLeft || tooltipParentLeft > inlineRight) && !isListenerNeeded2) {
|
|
749
|
+
closeTooltip(tooltipElement);
|
|
750
|
+
return;
|
|
751
|
+
}
|
|
752
|
+
if (isListenerNeeded2 && tooltipParent) {
|
|
753
|
+
tooltipParent.addEventListener("scroll", tooltipOnResize);
|
|
754
|
+
isListenerNeeded2 = false;
|
|
755
|
+
}
|
|
756
|
+
const relativeX = Number(tooltipElement.getAttribute("relativeX"));
|
|
757
|
+
const relativeY = Number(tooltipElement.getAttribute("relativeY"));
|
|
758
|
+
if (relativeX === inlineX && relativeY === inlineY) {
|
|
759
|
+
return;
|
|
760
|
+
}
|
|
761
|
+
tooltipElement.setAttribute("relativeX", String(inlineX));
|
|
762
|
+
tooltipElement.setAttribute("relativeY", String(inlineY));
|
|
763
|
+
const offsetTop = inlineHeight + 5;
|
|
764
|
+
const definitionParent = tooltipElement.parentElement;
|
|
765
|
+
if (!definitionParent) {
|
|
766
|
+
return;
|
|
767
|
+
}
|
|
768
|
+
const { width: definitionWidth } = tooltipElement.getBoundingClientRect();
|
|
769
|
+
const { left: definitionParentLeft } = definitionParent.getBoundingClientRect();
|
|
770
|
+
const definitionLeftCoordinate = Number(getCoords(targetElement).left);
|
|
771
|
+
const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;
|
|
772
|
+
const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;
|
|
773
|
+
const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;
|
|
774
|
+
const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === "rtl";
|
|
775
|
+
const fitDefinitionDocument = isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - inlineWidth : 0;
|
|
776
|
+
const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;
|
|
777
|
+
const offsetRight = 5;
|
|
778
|
+
const shiftLeft = definitionOutOfScreenOnRight ? definitionRightCoordinate - document.body.clientWidth + offsetRight : 0;
|
|
779
|
+
const offsetLeft = getCoords(targetElement).left - definitionParentLeft + definitionParent.offsetLeft - fitDefinitionDocument;
|
|
780
|
+
const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;
|
|
781
|
+
tooltipElement.style.top = Number(getCoords(targetElement).top + offsetTop - customHeaderTop) + "px";
|
|
782
|
+
tooltipElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + "px";
|
|
783
|
+
}
|
|
784
|
+
function getInlineCodeByTooltip(definition) {
|
|
785
|
+
const inlineId = definition.getAttribute("inline-id");
|
|
786
|
+
return inlineId ? document.getElementById(inlineId) : null;
|
|
787
|
+
}
|
|
788
|
+
function closeTooltipFn(definition) {
|
|
789
|
+
definition.classList.remove(OPEN_CLASS);
|
|
790
|
+
const inline = getInlineCodeByTooltip(definition);
|
|
791
|
+
const tooltipParent = tooltipParentElement(inline);
|
|
792
|
+
definition.removeAttribute("inline-id");
|
|
793
|
+
if (!tooltipParent) {
|
|
794
|
+
return;
|
|
795
|
+
}
|
|
796
|
+
tooltipParent.removeEventListener("scroll", tooltipOnResize);
|
|
797
|
+
isListenerNeeded2 = true;
|
|
798
|
+
}
|
|
799
|
+
function openTooltip(target) {
|
|
800
|
+
const tooltipElement = document.getElementById("tooltip_inline_clipboard_dialog");
|
|
801
|
+
if (!target.matches(".yfm-clipboard-inline-code") || !tooltipElement) {
|
|
802
|
+
return;
|
|
803
|
+
}
|
|
804
|
+
tooltipElement.setAttribute("inline-id", target.getAttribute("id") || "");
|
|
805
|
+
setTooltipAriaAttributes(tooltipElement, target);
|
|
806
|
+
setTooltipPosition(tooltipElement, target);
|
|
807
|
+
if (tooltipElement.classList.contains(OPEN_CLASS)) {
|
|
808
|
+
tooltipElement.classList.remove(OPEN_CLASS);
|
|
809
|
+
requestAnimationFrame(() => {
|
|
810
|
+
tooltipElement.classList.add(OPEN_CLASS);
|
|
811
|
+
});
|
|
812
|
+
} else {
|
|
813
|
+
tooltipElement.classList.add(OPEN_CLASS);
|
|
814
|
+
}
|
|
815
|
+
return tooltipElement;
|
|
816
|
+
}
|
|
817
|
+
function closeTooltip(target) {
|
|
818
|
+
checkTimerAndClear();
|
|
819
|
+
closeTooltipFn(target);
|
|
820
|
+
}
|
|
821
|
+
function tooltipWorker(target) {
|
|
822
|
+
const definition = openTooltip(target);
|
|
823
|
+
if (!definition) {
|
|
824
|
+
return;
|
|
825
|
+
}
|
|
826
|
+
checkTimerAndClear();
|
|
827
|
+
timer = setTimeout(() => {
|
|
828
|
+
closeTooltip(definition);
|
|
829
|
+
timer = null;
|
|
830
|
+
}, 1e3);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
// src/js/inline-code/index.ts
|
|
834
|
+
function inlineCopyFn(target) {
|
|
835
|
+
const innerText = target.innerText;
|
|
836
|
+
if (!innerText) {
|
|
837
|
+
return;
|
|
838
|
+
}
|
|
839
|
+
copyToClipboard(innerText).then(() => {
|
|
840
|
+
tooltipWorker(target);
|
|
841
|
+
});
|
|
842
|
+
}
|
|
843
|
+
if (typeof document !== "undefined") {
|
|
844
|
+
document.addEventListener("click", (event) => {
|
|
845
|
+
const target = getEventTarget(event);
|
|
846
|
+
const inline = target.matches(INLINE_CODE);
|
|
847
|
+
if (isCustom(event) || !inline) {
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
850
|
+
inlineCopyFn(target);
|
|
851
|
+
});
|
|
852
|
+
document.addEventListener("keydown", (event) => {
|
|
853
|
+
var _a;
|
|
854
|
+
if (event.key === "Enter" && document.activeElement) {
|
|
855
|
+
const activeElement = document.activeElement;
|
|
856
|
+
const innerText = activeElement.innerText;
|
|
857
|
+
if (!innerText) {
|
|
858
|
+
return;
|
|
859
|
+
}
|
|
860
|
+
copyToClipboard(innerText).then(() => {
|
|
861
|
+
tooltipWorker(activeElement);
|
|
862
|
+
});
|
|
863
|
+
}
|
|
864
|
+
const inlineTooltip = getTooltipElement();
|
|
865
|
+
if (event.key === "Escape" && inlineTooltip) {
|
|
866
|
+
closeTooltip(inlineTooltip);
|
|
867
|
+
(_a = getInlineCodeByTooltip(inlineTooltip)) == null ? void 0 : _a.focus();
|
|
868
|
+
}
|
|
869
|
+
});
|
|
870
|
+
window.addEventListener("resize", () => {
|
|
871
|
+
const inlineTooltip = getTooltipElement();
|
|
872
|
+
if (!inlineTooltip) {
|
|
873
|
+
return;
|
|
874
|
+
}
|
|
875
|
+
const inlineId = inlineTooltip.getAttribute("inline-id") || "";
|
|
876
|
+
const inlineCodeElement = document.getElementById(inlineId);
|
|
877
|
+
if (!inlineCodeElement) {
|
|
878
|
+
inlineTooltip.classList.toggle(OPEN_CLASS);
|
|
879
|
+
return;
|
|
880
|
+
}
|
|
881
|
+
setTooltipPosition(inlineTooltip, inlineCodeElement);
|
|
882
|
+
});
|
|
883
|
+
}
|
|
884
|
+
|
|
690
885
|
// src/js/term/index.ts
|
|
691
886
|
if (typeof document !== "undefined") {
|
|
692
887
|
document.addEventListener("click", (event) => {
|