UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 2.96 kB
import*as Common from"../../core/common/common.js";import*as i18n from"../../core/i18n/i18n.js";import*as SDK from"../../core/sdk/sdk.js";import*as UI from"../../ui/legacy/legacy.js";import domLinkifierStyles from"./domLinkifier.css.js";const UIStrings={node:"<node>"},str_=i18n.i18n.registerUIStrings("panels/elements/DOMLinkifier.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export const decorateNodeLabel=function(e,t,n){const o=e,i=e.nodeType()===Node.ELEMENT_NODE&&e.pseudoType();i&&e.parentNode&&(e=e.parentNode);let r=e.nodeNameInCorrectCase();const s=t.createChild("span","node-label-name");s.textContent=r;const d=e.getAttribute("id");if(d){const e=t.createChild("span","node-label-id"),n="#"+d;r+=n,UI.UIUtils.createTextChild(e,n),s.classList.add("extra")}const l=e.getAttribute("class");if(l){const e=l.split(/\s+/);if(e.length){const n=new Set,o=t.createChild("span","extra node-label-class");for(let t=0;t<e.length;++t){const i=e[t];if(i&&!n.has(i)){const e="."+i;r+=e,UI.UIUtils.createTextChild(o,e),n.add(i)}}}}if(i){const e=t.createChild("span","extra node-label-pseudo"),n="::"+o.pseudoType();UI.UIUtils.createTextChild(e,n),r+=n}UI.Tooltip.Tooltip.install(t,n||r)};export const linkifyNodeReference=function(e,t={tooltip:void 0,preventKeyboardFocus:void 0}){if(!e)return document.createTextNode(i18nString(UIStrings.node));const n=document.createElement("span");n.classList.add("monospace");const o=UI.Utils.createShadowRootWithCoreStyles(n,{cssFile:[domLinkifierStyles],delegatesFocus:void 0}).createChild("div","node-link");return decorateNodeLabel(e,o,t.tooltip),o.addEventListener("click",(()=>(Common.Revealer.reveal(e,!1),!1)),!1),o.addEventListener("mouseover",e.highlight.bind(e,void 0),!1),o.addEventListener("mouseleave",(()=>SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight()),!1),t.preventKeyboardFocus||(o.addEventListener("keydown",(t=>{"Enter"===t.key&&Common.Revealer.reveal(e,!1)})),o.tabIndex=0,UI.ARIAUtils.markAsLink(o)),n};export const linkifyDeferredNodeReference=function(e,t={tooltip:void 0,preventKeyboardFocus:void 0}){const n=document.createElement("div"),o=UI.Utils.createShadowRootWithCoreStyles(n,{cssFile:[domLinkifierStyles],delegatesFocus:void 0}).createChild("div","node-link");function i(e){Common.Revealer.reveal(e)}return o.createChild("slot"),o.addEventListener("click",e.resolve.bind(e,i),!1),o.addEventListener("mousedown",(e=>e.consume()),!1),t.preventKeyboardFocus||(o.addEventListener("keydown",(t=>"Enter"===t.key&&e.resolve(i))),o.tabIndex=0,UI.ARIAUtils.markAsLink(o)),n};let linkifierInstance;export class Linkifier{static instance(e={forceNew:null}){const{forceNew:t}=e;return linkifierInstance&&!t||(linkifierInstance=new Linkifier),linkifierInstance}linkify(e,t){if(e instanceof SDK.DOMModel.DOMNode)return linkifyNodeReference(e,t);if(e instanceof SDK.DOMModel.DeferredDOMNode)return linkifyDeferredNodeReference(e,t);throw new Error("Can't linkify non-node")}}