Spaces:
Build error
Build error
| import { uuid, toArray } from './util' | |
| type Pseudo = ':before' | ':after' | |
| function formatCSSText(style: CSSStyleDeclaration) { | |
| const content = style.getPropertyValue('content') | |
| return `${style.cssText} content: '${content.replace(/'|"/g, '')}';` | |
| } | |
| function formatCSSProperties(style: CSSStyleDeclaration) { | |
| return toArray<string>(style) | |
| .map((name) => { | |
| const value = style.getPropertyValue(name) | |
| const priority = style.getPropertyPriority(name) | |
| return `${name}: ${value}${priority ? ' !important' : ''};` | |
| }) | |
| .join(' ') | |
| } | |
| function getPseudoElementStyle( | |
| className: string, | |
| pseudo: Pseudo, | |
| style: CSSStyleDeclaration, | |
| ): Text { | |
| const selector = `.${className}:${pseudo}` | |
| const cssText = style.cssText | |
| ? formatCSSText(style) | |
| : formatCSSProperties(style) | |
| return document.createTextNode(`${selector}{${cssText}}`) | |
| } | |
| function clonePseudoElement<T extends HTMLElement>( | |
| nativeNode: T, | |
| clonedNode: T, | |
| pseudo: Pseudo, | |
| ) { | |
| const style = window.getComputedStyle(nativeNode, pseudo) | |
| const content = style.getPropertyValue('content') | |
| if (content === '' || content === 'none') { | |
| return | |
| } | |
| const className = uuid() | |
| try { | |
| clonedNode.className = `${clonedNode.className} ${className}` | |
| } catch (err) { | |
| return | |
| } | |
| const styleElement = document.createElement('style') | |
| styleElement.appendChild(getPseudoElementStyle(className, pseudo, style)) | |
| clonedNode.appendChild(styleElement) | |
| } | |
| export function clonePseudoElements<T extends HTMLElement>( | |
| nativeNode: T, | |
| clonedNode: T, | |
| ) { | |
| clonePseudoElement(nativeNode, clonedNode, ':before') | |
| clonePseudoElement(nativeNode, clonedNode, ':after') | |
| } | |