@depup/jsdom 28.1.0-depup.1
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/LICENSE.txt +22 -0
- package/README.md +38 -0
- package/changes.json +38 -0
- package/lib/api.js +373 -0
- package/lib/generated/event-sets.js +115 -0
- package/lib/generated/idl/AbortController.js +143 -0
- package/lib/generated/idl/AbortSignal.js +249 -0
- package/lib/generated/idl/AbstractRange.js +171 -0
- package/lib/generated/idl/AddEventListenerOptions.js +53 -0
- package/lib/generated/idl/AssignedNodesOptions.js +28 -0
- package/lib/generated/idl/Attr.js +219 -0
- package/lib/generated/idl/BarProp.js +117 -0
- package/lib/generated/idl/BeforeUnloadEvent.js +139 -0
- package/lib/generated/idl/BinaryType.js +12 -0
- package/lib/generated/idl/Blob.js +253 -0
- package/lib/generated/idl/BlobCallback.js +30 -0
- package/lib/generated/idl/BlobEvent.js +157 -0
- package/lib/generated/idl/BlobEventInit.js +43 -0
- package/lib/generated/idl/BlobPropertyBag.js +42 -0
- package/lib/generated/idl/CDATASection.js +109 -0
- package/lib/generated/idl/CanPlayTypeResult.js +12 -0
- package/lib/generated/idl/CharacterData.js +455 -0
- package/lib/generated/idl/CloseEvent.js +168 -0
- package/lib/generated/idl/CloseEventInit.js +65 -0
- package/lib/generated/idl/Comment.js +120 -0
- package/lib/generated/idl/CompositionEvent.js +219 -0
- package/lib/generated/idl/CompositionEventInit.js +32 -0
- package/lib/generated/idl/Crypto.js +148 -0
- package/lib/generated/idl/CustomElementConstructor.js +34 -0
- package/lib/generated/idl/CustomElementRegistry.js +269 -0
- package/lib/generated/idl/CustomEvent.js +206 -0
- package/lib/generated/idl/CustomEventInit.js +32 -0
- package/lib/generated/idl/DOMException.js +222 -0
- package/lib/generated/idl/DOMImplementation.js +237 -0
- package/lib/generated/idl/DOMParser.js +140 -0
- package/lib/generated/idl/DOMRect.js +276 -0
- package/lib/generated/idl/DOMRectInit.js +76 -0
- package/lib/generated/idl/DOMRectReadOnly.js +285 -0
- package/lib/generated/idl/DOMStringMap.js +299 -0
- package/lib/generated/idl/DOMTokenList.js +539 -0
- package/lib/generated/idl/DeviceMotionEvent.js +183 -0
- package/lib/generated/idl/DeviceMotionEventAcceleration.js +145 -0
- package/lib/generated/idl/DeviceMotionEventAccelerationInit.js +61 -0
- package/lib/generated/idl/DeviceMotionEventInit.js +70 -0
- package/lib/generated/idl/DeviceMotionEventRotationRate.js +145 -0
- package/lib/generated/idl/DeviceMotionEventRotationRateInit.js +61 -0
- package/lib/generated/idl/DeviceOrientationEvent.js +183 -0
- package/lib/generated/idl/DeviceOrientationEventInit.js +80 -0
- package/lib/generated/idl/Document.js +4511 -0
- package/lib/generated/idl/DocumentFragment.js +336 -0
- package/lib/generated/idl/DocumentReadyState.js +12 -0
- package/lib/generated/idl/DocumentType.js +254 -0
- package/lib/generated/idl/Element.js +3720 -0
- package/lib/generated/idl/ElementCreationOptions.js +26 -0
- package/lib/generated/idl/ElementDefinitionOptions.js +29 -0
- package/lib/generated/idl/ElementInternals.js +2152 -0
- package/lib/generated/idl/EndingType.js +12 -0
- package/lib/generated/idl/ErrorEvent.js +192 -0
- package/lib/generated/idl/ErrorEventInit.js +92 -0
- package/lib/generated/idl/Event.js +430 -0
- package/lib/generated/idl/EventHandlerNonNull.js +36 -0
- package/lib/generated/idl/EventInit.js +58 -0
- package/lib/generated/idl/EventListener.js +35 -0
- package/lib/generated/idl/EventListenerOptions.js +28 -0
- package/lib/generated/idl/EventModifierInit.js +221 -0
- package/lib/generated/idl/EventTarget.js +259 -0
- package/lib/generated/idl/External.js +130 -0
- package/lib/generated/idl/File.js +185 -0
- package/lib/generated/idl/FileList.js +298 -0
- package/lib/generated/idl/FilePropertyBag.js +33 -0
- package/lib/generated/idl/FileReader.js +468 -0
- package/lib/generated/idl/FocusEvent.js +144 -0
- package/lib/generated/idl/FocusEventInit.js +36 -0
- package/lib/generated/idl/FormData.js +468 -0
- package/lib/generated/idl/Function.js +42 -0
- package/lib/generated/idl/GetRootNodeOptions.js +31 -0
- package/lib/generated/idl/HTMLAnchorElement.js +1026 -0
- package/lib/generated/idl/HTMLAreaElement.js +825 -0
- package/lib/generated/idl/HTMLAudioElement.js +111 -0
- package/lib/generated/idl/HTMLBRElement.js +156 -0
- package/lib/generated/idl/HTMLBaseElement.js +196 -0
- package/lib/generated/idl/HTMLBodyElement.js +880 -0
- package/lib/generated/idl/HTMLButtonElement.js +525 -0
- package/lib/generated/idl/HTMLCanvasElement.js +307 -0
- package/lib/generated/idl/HTMLCollection.js +352 -0
- package/lib/generated/idl/HTMLDListElement.js +159 -0
- package/lib/generated/idl/HTMLDataElement.js +156 -0
- package/lib/generated/idl/HTMLDataListElement.js +126 -0
- package/lib/generated/idl/HTMLDetailsElement.js +159 -0
- package/lib/generated/idl/HTMLDialogElement.js +159 -0
- package/lib/generated/idl/HTMLDirectoryElement.js +159 -0
- package/lib/generated/idl/HTMLDivElement.js +156 -0
- package/lib/generated/idl/HTMLElement.js +3492 -0
- package/lib/generated/idl/HTMLEmbedElement.js +381 -0
- package/lib/generated/idl/HTMLFieldSetElement.js +332 -0
- package/lib/generated/idl/HTMLFontElement.js +239 -0
- package/lib/generated/idl/HTMLFormControlsCollection.js +318 -0
- package/lib/generated/idl/HTMLFormElement.js +661 -0
- package/lib/generated/idl/HTMLFrameElement.js +513 -0
- package/lib/generated/idl/HTMLFrameSetElement.js +711 -0
- package/lib/generated/idl/HTMLHRElement.js +323 -0
- package/lib/generated/idl/HTMLHeadElement.js +111 -0
- package/lib/generated/idl/HTMLHeadingElement.js +156 -0
- package/lib/generated/idl/HTMLHtmlElement.js +156 -0
- package/lib/generated/idl/HTMLIFrameElement.js +689 -0
- package/lib/generated/idl/HTMLImageElement.js +906 -0
- package/lib/generated/idl/HTMLInputElement.js +1931 -0
- package/lib/generated/idl/HTMLLIElement.js +204 -0
- package/lib/generated/idl/HTMLLabelElement.js +182 -0
- package/lib/generated/idl/HTMLLegendElement.js +169 -0
- package/lib/generated/idl/HTMLLinkElement.js +555 -0
- package/lib/generated/idl/HTMLMapElement.js +171 -0
- package/lib/generated/idl/HTMLMarqueeElement.js +558 -0
- package/lib/generated/idl/HTMLMediaElement.js +900 -0
- package/lib/generated/idl/HTMLMenuElement.js +159 -0
- package/lib/generated/idl/HTMLMetaElement.js +279 -0
- package/lib/generated/idl/HTMLMeterElement.js +368 -0
- package/lib/generated/idl/HTMLModElement.js +217 -0
- package/lib/generated/idl/HTMLOListElement.js +284 -0
- package/lib/generated/idl/HTMLObjectElement.js +945 -0
- package/lib/generated/idl/HTMLOptGroupElement.js +200 -0
- package/lib/generated/idl/HTMLOptionElement.js +379 -0
- package/lib/generated/idl/HTMLOptionsCollection.js +513 -0
- package/lib/generated/idl/HTMLOutputElement.js +395 -0
- package/lib/generated/idl/HTMLParagraphElement.js +156 -0
- package/lib/generated/idl/HTMLParamElement.js +279 -0
- package/lib/generated/idl/HTMLPictureElement.js +111 -0
- package/lib/generated/idl/HTMLPreElement.js +163 -0
- package/lib/generated/idl/HTMLProgressElement.js +232 -0
- package/lib/generated/idl/HTMLQuoteElement.js +176 -0
- package/lib/generated/idl/HTMLScriptElement.js +472 -0
- package/lib/generated/idl/HTMLSelectElement.js +993 -0
- package/lib/generated/idl/HTMLSlotElement.js +195 -0
- package/lib/generated/idl/HTMLSourceElement.js +340 -0
- package/lib/generated/idl/HTMLSpanElement.js +111 -0
- package/lib/generated/idl/HTMLStyleElement.js +210 -0
- package/lib/generated/idl/HTMLTableCaptionElement.js +156 -0
- package/lib/generated/idl/HTMLTableCellElement.js +733 -0
- package/lib/generated/idl/HTMLTableColElement.js +376 -0
- package/lib/generated/idl/HTMLTableElement.js +802 -0
- package/lib/generated/idl/HTMLTableRowElement.js +417 -0
- package/lib/generated/idl/HTMLTableSectionElement.js +349 -0
- package/lib/generated/idl/HTMLTemplateElement.js +124 -0
- package/lib/generated/idl/HTMLTextAreaElement.js +1210 -0
- package/lib/generated/idl/HTMLTimeElement.js +156 -0
- package/lib/generated/idl/HTMLTitleElement.js +155 -0
- package/lib/generated/idl/HTMLTrackElement.js +366 -0
- package/lib/generated/idl/HTMLUListElement.js +200 -0
- package/lib/generated/idl/HTMLUnknownElement.js +109 -0
- package/lib/generated/idl/HTMLVideoElement.js +344 -0
- package/lib/generated/idl/HashChangeEvent.js +157 -0
- package/lib/generated/idl/HashChangeEventInit.js +50 -0
- package/lib/generated/idl/Headers.js +418 -0
- package/lib/generated/idl/History.js +266 -0
- package/lib/generated/idl/InputEvent.js +168 -0
- package/lib/generated/idl/InputEventInit.js +68 -0
- package/lib/generated/idl/KeyboardEvent.js +445 -0
- package/lib/generated/idl/KeyboardEventInit.js +116 -0
- package/lib/generated/idl/Location.js +404 -0
- package/lib/generated/idl/MessageEvent.js +317 -0
- package/lib/generated/idl/MessageEventInit.js +100 -0
- package/lib/generated/idl/MimeType.js +156 -0
- package/lib/generated/idl/MimeTypeArray.js +326 -0
- package/lib/generated/idl/MouseEvent.js +595 -0
- package/lib/generated/idl/MouseEventInit.js +189 -0
- package/lib/generated/idl/MutationCallback.js +34 -0
- package/lib/generated/idl/MutationObserver.js +178 -0
- package/lib/generated/idl/MutationObserverInit.js +121 -0
- package/lib/generated/idl/MutationRecord.js +229 -0
- package/lib/generated/idl/NamedNodeMap.js +529 -0
- package/lib/generated/idl/Navigator.js +326 -0
- package/lib/generated/idl/Node.js +765 -0
- package/lib/generated/idl/NodeFilter.js +75 -0
- package/lib/generated/idl/NodeIterator.js +207 -0
- package/lib/generated/idl/NodeList.js +302 -0
- package/lib/generated/idl/OnBeforeUnloadEventHandlerNonNull.js +42 -0
- package/lib/generated/idl/OnErrorEventHandlerNonNull.js +56 -0
- package/lib/generated/idl/PageTransitionEvent.js +144 -0
- package/lib/generated/idl/PageTransitionEventInit.js +35 -0
- package/lib/generated/idl/Performance.js +142 -0
- package/lib/generated/idl/Plugin.js +359 -0
- package/lib/generated/idl/PluginArray.js +336 -0
- package/lib/generated/idl/PointerEvent.js +324 -0
- package/lib/generated/idl/PointerEventInit.js +241 -0
- package/lib/generated/idl/PopStateEvent.js +144 -0
- package/lib/generated/idl/PopStateEventInit.js +32 -0
- package/lib/generated/idl/ProcessingInstruction.js +122 -0
- package/lib/generated/idl/ProgressEvent.js +170 -0
- package/lib/generated/idl/ProgressEventInit.js +65 -0
- package/lib/generated/idl/PromiseRejectionEvent.js +157 -0
- package/lib/generated/idl/PromiseRejectionEventInit.js +42 -0
- package/lib/generated/idl/RadioNodeList.js +296 -0
- package/lib/generated/idl/Range.js +643 -0
- package/lib/generated/idl/SVGAnimatedPreserveAspectRatio.js +136 -0
- package/lib/generated/idl/SVGAnimatedRect.js +136 -0
- package/lib/generated/idl/SVGAnimatedString.js +149 -0
- package/lib/generated/idl/SVGBoundingBoxOptions.js +64 -0
- package/lib/generated/idl/SVGDefsElement.js +109 -0
- package/lib/generated/idl/SVGDescElement.js +109 -0
- package/lib/generated/idl/SVGElement.js +3157 -0
- package/lib/generated/idl/SVGGElement.js +109 -0
- package/lib/generated/idl/SVGGraphicsElement.js +139 -0
- package/lib/generated/idl/SVGMetadataElement.js +109 -0
- package/lib/generated/idl/SVGNumber.js +132 -0
- package/lib/generated/idl/SVGPreserveAspectRatio.js +196 -0
- package/lib/generated/idl/SVGRect.js +210 -0
- package/lib/generated/idl/SVGSVGElement.js +786 -0
- package/lib/generated/idl/SVGStringList.js +511 -0
- package/lib/generated/idl/SVGSwitchElement.js +109 -0
- package/lib/generated/idl/SVGSymbolElement.js +146 -0
- package/lib/generated/idl/SVGTitleElement.js +109 -0
- package/lib/generated/idl/Screen.js +180 -0
- package/lib/generated/idl/ScrollBehavior.js +12 -0
- package/lib/generated/idl/ScrollIntoViewOptions.js +45 -0
- package/lib/generated/idl/ScrollLogicalPosition.js +14 -0
- package/lib/generated/idl/ScrollOptions.js +30 -0
- package/lib/generated/idl/ScrollRestoration.js +12 -0
- package/lib/generated/idl/Selection.js +571 -0
- package/lib/generated/idl/SelectionMode.js +12 -0
- package/lib/generated/idl/ShadowRoot.js +189 -0
- package/lib/generated/idl/ShadowRootInit.js +30 -0
- package/lib/generated/idl/ShadowRootMode.js +12 -0
- package/lib/generated/idl/StaticRange.js +123 -0
- package/lib/generated/idl/StaticRangeInit.js +72 -0
- package/lib/generated/idl/Storage.js +397 -0
- package/lib/generated/idl/StorageEvent.js +318 -0
- package/lib/generated/idl/StorageEventInit.js +99 -0
- package/lib/generated/idl/StyleSheetList.js +300 -0
- package/lib/generated/idl/SubmitEvent.js +144 -0
- package/lib/generated/idl/SubmitEventInit.js +36 -0
- package/lib/generated/idl/SupportedType.js +18 -0
- package/lib/generated/idl/Text.js +170 -0
- package/lib/generated/idl/TextDecodeOptions.js +28 -0
- package/lib/generated/idl/TextDecoder.js +211 -0
- package/lib/generated/idl/TextDecoderOptions.js +43 -0
- package/lib/generated/idl/TextEncoder.js +176 -0
- package/lib/generated/idl/TextEncoderEncodeIntoResult.js +42 -0
- package/lib/generated/idl/TextTrackKind.js +12 -0
- package/lib/generated/idl/TouchEvent.js +222 -0
- package/lib/generated/idl/TouchEventInit.js +89 -0
- package/lib/generated/idl/TransitionEvent.js +170 -0
- package/lib/generated/idl/TransitionEventInit.js +65 -0
- package/lib/generated/idl/TreeWalker.js +255 -0
- package/lib/generated/idl/UIEvent.js +235 -0
- package/lib/generated/idl/UIEventInit.js +62 -0
- package/lib/generated/idl/ValidityState.js +249 -0
- package/lib/generated/idl/VisibilityState.js +12 -0
- package/lib/generated/idl/VoidFunction.js +26 -0
- package/lib/generated/idl/WebSocket.js +480 -0
- package/lib/generated/idl/WheelEvent.js +191 -0
- package/lib/generated/idl/WheelEventInit.js +71 -0
- package/lib/generated/idl/XMLDocument.js +109 -0
- package/lib/generated/idl/XMLHttpRequest.js +663 -0
- package/lib/generated/idl/XMLHttpRequestEventTarget.js +334 -0
- package/lib/generated/idl/XMLHttpRequestResponseType.js +14 -0
- package/lib/generated/idl/XMLHttpRequestUpload.js +109 -0
- package/lib/generated/idl/XMLSerializer.js +132 -0
- package/lib/generated/idl/utils.js +252 -0
- package/lib/generated/js-globals.json +332 -0
- package/lib/jsdom/browser/Window.js +952 -0
- package/lib/jsdom/browser/default-stylesheet.css +415 -0
- package/lib/jsdom/browser/not-implemented.js +20 -0
- package/lib/jsdom/browser/parser/html.js +208 -0
- package/lib/jsdom/browser/parser/index.js +37 -0
- package/lib/jsdom/browser/parser/xml.js +202 -0
- package/lib/jsdom/browser/resources/async-resource-queue.js +114 -0
- package/lib/jsdom/browser/resources/decompress-interceptor.js +184 -0
- package/lib/jsdom/browser/resources/jsdom-dispatcher.js +756 -0
- package/lib/jsdom/browser/resources/per-document-resource-loader.js +116 -0
- package/lib/jsdom/browser/resources/request-interceptor.js +171 -0
- package/lib/jsdom/browser/resources/request-manager.js +33 -0
- package/lib/jsdom/browser/resources/resource-queue.js +142 -0
- package/lib/jsdom/browser/resources/stream-handler.js +89 -0
- package/lib/jsdom/level2/style.js +65 -0
- package/lib/jsdom/level3/xpath.js +1875 -0
- package/lib/jsdom/living/aborting/AbortController-impl.js +17 -0
- package/lib/jsdom/living/aborting/AbortSignal-impl.js +131 -0
- package/lib/jsdom/living/attributes/Attr-impl.js +60 -0
- package/lib/jsdom/living/attributes/NamedNodeMap-impl.js +78 -0
- package/lib/jsdom/living/attributes.js +312 -0
- package/lib/jsdom/living/constraint-validation/DefaultConstraintValidation-impl.js +75 -0
- package/lib/jsdom/living/constraint-validation/ValidityState-impl.js +66 -0
- package/lib/jsdom/living/crypto/Crypto-impl.js +68 -0
- package/lib/jsdom/living/cssom/StyleSheetList-impl.js +38 -0
- package/lib/jsdom/living/custom-elements/CustomElementRegistry-impl.js +279 -0
- package/lib/jsdom/living/custom-elements/ElementInternals-impl.js +56 -0
- package/lib/jsdom/living/deviceorientation/DeviceMotionEventAcceleration-impl.js +7 -0
- package/lib/jsdom/living/deviceorientation/DeviceMotionEventRotationRate-impl.js +7 -0
- package/lib/jsdom/living/documents.js +15 -0
- package/lib/jsdom/living/domparsing/DOMParser-impl.js +59 -0
- package/lib/jsdom/living/domparsing/InnerHTML-impl.js +30 -0
- package/lib/jsdom/living/domparsing/XMLSerializer-impl.js +18 -0
- package/lib/jsdom/living/domparsing/parse5-adapter-serialization.js +63 -0
- package/lib/jsdom/living/domparsing/serialization.js +36 -0
- package/lib/jsdom/living/encoding/TextDecoder-impl.js +25 -0
- package/lib/jsdom/living/encoding/TextEncoder-impl.js +26 -0
- package/lib/jsdom/living/events/BeforeUnloadEvent-impl.js +12 -0
- package/lib/jsdom/living/events/BlobEvent-impl.js +14 -0
- package/lib/jsdom/living/events/CloseEvent-impl.js +10 -0
- package/lib/jsdom/living/events/CompositionEvent-impl.js +20 -0
- package/lib/jsdom/living/events/CustomEvent-impl.js +21 -0
- package/lib/jsdom/living/events/DeviceMotionEvent-impl.js +49 -0
- package/lib/jsdom/living/events/DeviceOrientationEvent-impl.js +10 -0
- package/lib/jsdom/living/events/ErrorEvent-impl.js +14 -0
- package/lib/jsdom/living/events/Event-impl.js +195 -0
- package/lib/jsdom/living/events/EventModifierMixin-impl.js +24 -0
- package/lib/jsdom/living/events/EventTarget-impl.js +438 -0
- package/lib/jsdom/living/events/FocusEvent-impl.js +9 -0
- package/lib/jsdom/living/events/HashChangeEvent-impl.js +14 -0
- package/lib/jsdom/living/events/InputEvent-impl.js +11 -0
- package/lib/jsdom/living/events/KeyboardEvent-impl.js +29 -0
- package/lib/jsdom/living/events/MessageEvent-impl.js +25 -0
- package/lib/jsdom/living/events/MouseEvent-impl.js +72 -0
- package/lib/jsdom/living/events/PageTransitionEvent-impl.js +20 -0
- package/lib/jsdom/living/events/PointerEvent-impl.js +21 -0
- package/lib/jsdom/living/events/PopStateEvent-impl.js +9 -0
- package/lib/jsdom/living/events/ProgressEvent-impl.js +14 -0
- package/lib/jsdom/living/events/PromiseRejectionEvent-impl.js +14 -0
- package/lib/jsdom/living/events/StorageEvent-impl.js +26 -0
- package/lib/jsdom/living/events/SubmitEvent-impl.js +13 -0
- package/lib/jsdom/living/events/TouchEvent-impl.js +14 -0
- package/lib/jsdom/living/events/TransitionEvent-impl.js +10 -0
- package/lib/jsdom/living/events/UIEvent-impl.js +43 -0
- package/lib/jsdom/living/events/WheelEvent-impl.js +12 -0
- package/lib/jsdom/living/fetch/Headers-impl.js +173 -0
- package/lib/jsdom/living/fetch/header-list.js +158 -0
- package/lib/jsdom/living/fetch/header-types.js +205 -0
- package/lib/jsdom/living/fetch/header-utils.js +26 -0
- package/lib/jsdom/living/file-api/Blob-impl.js +125 -0
- package/lib/jsdom/living/file-api/File-impl.js +12 -0
- package/lib/jsdom/living/file-api/FileList-impl.js +15 -0
- package/lib/jsdom/living/file-api/FileReader-impl.js +148 -0
- package/lib/jsdom/living/geometry/DOMRect-impl.js +39 -0
- package/lib/jsdom/living/geometry/DOMRectReadOnly-impl.js +72 -0
- package/lib/jsdom/living/helpers/binary-data.js +63 -0
- package/lib/jsdom/living/helpers/by-id-cache.js +67 -0
- package/lib/jsdom/living/helpers/colors.js +245 -0
- package/lib/jsdom/living/helpers/create-element.js +329 -0
- package/lib/jsdom/living/helpers/create-event-accessor.js +209 -0
- package/lib/jsdom/living/helpers/custom-elements.js +272 -0
- package/lib/jsdom/living/helpers/dates-and-times.js +270 -0
- package/lib/jsdom/living/helpers/details.js +15 -0
- package/lib/jsdom/living/helpers/encoding.js +60 -0
- package/lib/jsdom/living/helpers/events.js +24 -0
- package/lib/jsdom/living/helpers/focusing.js +104 -0
- package/lib/jsdom/living/helpers/form-controls.js +309 -0
- package/lib/jsdom/living/helpers/html-constructor.js +78 -0
- package/lib/jsdom/living/helpers/internal-constants.js +12 -0
- package/lib/jsdom/living/helpers/is-window.js +18 -0
- package/lib/jsdom/living/helpers/iterable-weak-set.js +48 -0
- package/lib/jsdom/living/helpers/json.js +7 -0
- package/lib/jsdom/living/helpers/mutation-observers.js +198 -0
- package/lib/jsdom/living/helpers/namespaces.js +16 -0
- package/lib/jsdom/living/helpers/node.js +108 -0
- package/lib/jsdom/living/helpers/number-and-date-inputs.js +195 -0
- package/lib/jsdom/living/helpers/ordered-set.js +104 -0
- package/lib/jsdom/living/helpers/page-transition-event.js +9 -0
- package/lib/jsdom/living/helpers/runtime-script-errors.js +75 -0
- package/lib/jsdom/living/helpers/shadow-dom.js +285 -0
- package/lib/jsdom/living/helpers/strings.js +168 -0
- package/lib/jsdom/living/helpers/style-rules.js +404 -0
- package/lib/jsdom/living/helpers/stylesheets.js +148 -0
- package/lib/jsdom/living/helpers/svg/basic-types.js +41 -0
- package/lib/jsdom/living/helpers/svg/render.js +46 -0
- package/lib/jsdom/living/helpers/system-colors.js +147 -0
- package/lib/jsdom/living/helpers/text.js +19 -0
- package/lib/jsdom/living/helpers/traversal.js +72 -0
- package/lib/jsdom/living/helpers/validate-names.js +65 -0
- package/lib/jsdom/living/hr-time/Performance-impl.js +22 -0
- package/lib/jsdom/living/interfaces.js +252 -0
- package/lib/jsdom/living/mutation-observer/MutationObserver-impl.js +95 -0
- package/lib/jsdom/living/mutation-observer/MutationRecord-impl.js +37 -0
- package/lib/jsdom/living/navigator/MimeType-impl.js +3 -0
- package/lib/jsdom/living/navigator/MimeTypeArray-impl.js +21 -0
- package/lib/jsdom/living/navigator/Navigator-impl.js +29 -0
- package/lib/jsdom/living/navigator/NavigatorConcurrentHardware-impl.js +8 -0
- package/lib/jsdom/living/navigator/NavigatorCookies-impl.js +7 -0
- package/lib/jsdom/living/navigator/NavigatorID-impl.js +37 -0
- package/lib/jsdom/living/navigator/NavigatorLanguage-impl.js +9 -0
- package/lib/jsdom/living/navigator/NavigatorOnLine-impl.js +7 -0
- package/lib/jsdom/living/navigator/NavigatorPlugins-impl.js +8 -0
- package/lib/jsdom/living/navigator/Plugin-impl.js +3 -0
- package/lib/jsdom/living/navigator/PluginArray-impl.js +23 -0
- package/lib/jsdom/living/node-document-position.js +10 -0
- package/lib/jsdom/living/node-type.js +16 -0
- package/lib/jsdom/living/node.js +331 -0
- package/lib/jsdom/living/nodes/CDATASection-impl.js +16 -0
- package/lib/jsdom/living/nodes/CharacterData-impl.js +118 -0
- package/lib/jsdom/living/nodes/ChildNode-impl.js +80 -0
- package/lib/jsdom/living/nodes/Comment-impl.js +20 -0
- package/lib/jsdom/living/nodes/DOMImplementation-impl.js +120 -0
- package/lib/jsdom/living/nodes/DOMStringMap-impl.js +64 -0
- package/lib/jsdom/living/nodes/DOMTokenList-impl.js +171 -0
- package/lib/jsdom/living/nodes/Document-impl.js +1000 -0
- package/lib/jsdom/living/nodes/DocumentFragment-impl.js +44 -0
- package/lib/jsdom/living/nodes/DocumentOrShadowRoot-impl.js +28 -0
- package/lib/jsdom/living/nodes/DocumentType-impl.js +24 -0
- package/lib/jsdom/living/nodes/Element-impl.js +584 -0
- package/lib/jsdom/living/nodes/ElementCSSInlineStyle-impl.js +22 -0
- package/lib/jsdom/living/nodes/ElementContentEditable-impl.js +7 -0
- package/lib/jsdom/living/nodes/GlobalEventHandlers-impl.js +81 -0
- package/lib/jsdom/living/nodes/HTMLAnchorElement-impl.js +50 -0
- package/lib/jsdom/living/nodes/HTMLAreaElement-impl.js +43 -0
- package/lib/jsdom/living/nodes/HTMLAudioElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLBRElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLBaseElement-impl.js +44 -0
- package/lib/jsdom/living/nodes/HTMLBodyElement-impl.js +12 -0
- package/lib/jsdom/living/nodes/HTMLButtonElement-impl.js +79 -0
- package/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js +136 -0
- package/lib/jsdom/living/nodes/HTMLCollection-impl.js +96 -0
- package/lib/jsdom/living/nodes/HTMLDListElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLDataElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLDataListElement-impl.js +20 -0
- package/lib/jsdom/living/nodes/HTMLDetailsElement-impl.js +35 -0
- package/lib/jsdom/living/nodes/HTMLDialogElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLDirectoryElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLDivElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLElement-impl.js +211 -0
- package/lib/jsdom/living/nodes/HTMLEmbedElement-impl.js +8 -0
- package/lib/jsdom/living/nodes/HTMLFieldSetElement-impl.js +43 -0
- package/lib/jsdom/living/nodes/HTMLFontElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLFormControlsCollection-impl.js +33 -0
- package/lib/jsdom/living/nodes/HTMLFormElement-impl.js +248 -0
- package/lib/jsdom/living/nodes/HTMLFrameElement-impl.js +266 -0
- package/lib/jsdom/living/nodes/HTMLFrameSetElement-impl.js +12 -0
- package/lib/jsdom/living/nodes/HTMLHRElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLHeadElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLHeadingElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLHtmlElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLHyperlinkElementUtils-impl.js +368 -0
- package/lib/jsdom/living/nodes/HTMLIFrameElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLImageElement-impl.js +127 -0
- package/lib/jsdom/living/nodes/HTMLInputElement-impl.js +1097 -0
- package/lib/jsdom/living/nodes/HTMLLIElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLLabelElement-impl.js +94 -0
- package/lib/jsdom/living/nodes/HTMLLegendElement-impl.js +18 -0
- package/lib/jsdom/living/nodes/HTMLLinkElement-impl.js +107 -0
- package/lib/jsdom/living/nodes/HTMLMapElement-impl.js +13 -0
- package/lib/jsdom/living/nodes/HTMLMarqueeElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLMediaElement-impl.js +138 -0
- package/lib/jsdom/living/nodes/HTMLMenuElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLMetaElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLMeterElement-impl.js +180 -0
- package/lib/jsdom/living/nodes/HTMLModElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLOListElement-impl.js +22 -0
- package/lib/jsdom/living/nodes/HTMLObjectElement-impl.js +26 -0
- package/lib/jsdom/living/nodes/HTMLOptGroupElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLOptionElement-impl.js +146 -0
- package/lib/jsdom/living/nodes/HTMLOptionsCollection-impl.js +110 -0
- package/lib/jsdom/living/nodes/HTMLOrSVGElement-impl.js +88 -0
- package/lib/jsdom/living/nodes/HTMLOutputElement-impl.js +88 -0
- package/lib/jsdom/living/nodes/HTMLParagraphElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLParamElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLPictureElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLPreElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLProgressElement-impl.js +72 -0
- package/lib/jsdom/living/nodes/HTMLQuoteElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLScriptElement-impl.js +255 -0
- package/lib/jsdom/living/nodes/HTMLSelectElement-impl.js +283 -0
- package/lib/jsdom/living/nodes/HTMLSlotElement-impl.js +59 -0
- package/lib/jsdom/living/nodes/HTMLSourceElement-impl.js +8 -0
- package/lib/jsdom/living/nodes/HTMLSpanElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLStyleElement-impl.js +76 -0
- package/lib/jsdom/living/nodes/HTMLTableCaptionElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLTableCellElement-impl.js +73 -0
- package/lib/jsdom/living/nodes/HTMLTableColElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLTableElement-impl.js +236 -0
- package/lib/jsdom/living/nodes/HTMLTableRowElement-impl.js +88 -0
- package/lib/jsdom/living/nodes/HTMLTableSectionElement-impl.js +61 -0
- package/lib/jsdom/living/nodes/HTMLTemplateElement-impl.js +67 -0
- package/lib/jsdom/living/nodes/HTMLTextAreaElement-impl.js +244 -0
- package/lib/jsdom/living/nodes/HTMLTimeElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLTitleElement-impl.js +18 -0
- package/lib/jsdom/living/nodes/HTMLTrackElement-impl.js +13 -0
- package/lib/jsdom/living/nodes/HTMLUListElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLUnknownElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/HTMLVideoElement-impl.js +17 -0
- package/lib/jsdom/living/nodes/LinkStyle-impl.js +2 -0
- package/lib/jsdom/living/nodes/Node-impl.js +1179 -0
- package/lib/jsdom/living/nodes/NodeList-impl.js +43 -0
- package/lib/jsdom/living/nodes/NonDocumentTypeChildNode-impl.js +28 -0
- package/lib/jsdom/living/nodes/NonElementParentNode-impl.js +11 -0
- package/lib/jsdom/living/nodes/ParentNode-impl.js +90 -0
- package/lib/jsdom/living/nodes/ProcessingInstruction-impl.js +22 -0
- package/lib/jsdom/living/nodes/RadioNodeList-impl.js +49 -0
- package/lib/jsdom/living/nodes/SVGDefsElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/SVGDescElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/SVGElement-impl.js +64 -0
- package/lib/jsdom/living/nodes/SVGGElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/SVGGraphicsElement-impl.js +16 -0
- package/lib/jsdom/living/nodes/SVGMetadataElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/SVGSVGElement-impl.js +40 -0
- package/lib/jsdom/living/nodes/SVGSwitchElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/SVGSymbolElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/SVGTests-impl.js +42 -0
- package/lib/jsdom/living/nodes/SVGTitleElement-impl.js +9 -0
- package/lib/jsdom/living/nodes/ShadowRoot-impl.js +41 -0
- package/lib/jsdom/living/nodes/Slotable-impl.js +48 -0
- package/lib/jsdom/living/nodes/Text-impl.js +96 -0
- package/lib/jsdom/living/nodes/WindowEventHandlers-impl.js +14 -0
- package/lib/jsdom/living/nodes/XMLDocument-impl.js +4 -0
- package/lib/jsdom/living/range/AbstractRange-impl.js +43 -0
- package/lib/jsdom/living/range/Range-impl.js +902 -0
- package/lib/jsdom/living/range/StaticRange-impl.js +39 -0
- package/lib/jsdom/living/range/boundary-point.js +47 -0
- package/lib/jsdom/living/selection/Selection-impl.js +358 -0
- package/lib/jsdom/living/svg/SVGAnimatedPreserveAspectRatio-impl.js +24 -0
- package/lib/jsdom/living/svg/SVGAnimatedRect-impl.js +122 -0
- package/lib/jsdom/living/svg/SVGAnimatedString-impl.js +42 -0
- package/lib/jsdom/living/svg/SVGListBase.js +195 -0
- package/lib/jsdom/living/svg/SVGNumber-impl.js +48 -0
- package/lib/jsdom/living/svg/SVGPreserveAspectRatio-impl.js +100 -0
- package/lib/jsdom/living/svg/SVGRect-impl.js +143 -0
- package/lib/jsdom/living/svg/SVGStringList-impl.js +16 -0
- package/lib/jsdom/living/traversal/NodeIterator-impl.js +107 -0
- package/lib/jsdom/living/traversal/TreeWalker-impl.js +217 -0
- package/lib/jsdom/living/traversal/helpers.js +44 -0
- package/lib/jsdom/living/webidl/DOMException-impl.js +46 -0
- package/lib/jsdom/living/websockets/WebSocket-impl.js +211 -0
- package/lib/jsdom/living/webstorage/Storage-impl.js +102 -0
- package/lib/jsdom/living/window/BarProp-impl.js +10 -0
- package/lib/jsdom/living/window/External-impl.js +9 -0
- package/lib/jsdom/living/window/History-impl.js +148 -0
- package/lib/jsdom/living/window/Location-impl.js +227 -0
- package/lib/jsdom/living/window/Screen-impl.js +13 -0
- package/lib/jsdom/living/window/SessionHistory.js +163 -0
- package/lib/jsdom/living/window/navigation.js +87 -0
- package/lib/jsdom/living/window-properties.js +241 -0
- package/lib/jsdom/living/xhr/FormData-impl.js +191 -0
- package/lib/jsdom/living/xhr/XMLHttpRequest-impl.js +1057 -0
- package/lib/jsdom/living/xhr/XMLHttpRequestEventTarget-impl.js +17 -0
- package/lib/jsdom/living/xhr/XMLHttpRequestUpload-impl.js +4 -0
- package/lib/jsdom/living/xhr/multipart-form-data.js +99 -0
- package/lib/jsdom/living/xhr/xhr-sync-worker.js +51 -0
- package/lib/jsdom/living/xhr/xhr-utils.js +206 -0
- package/lib/jsdom/utils.js +105 -0
- package/lib/jsdom/virtual-console.js +46 -0
- package/package.json +143 -0
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const fs = require("node:fs");
|
|
4
|
+
const path = require("node:path");
|
|
5
|
+
const cssom = require("@acemir/cssom");
|
|
6
|
+
const Specificity = require("@bramus/specificity").default;
|
|
7
|
+
const { CSSStyleDeclaration } = require("cssstyle");
|
|
8
|
+
const { wrapperForImpl } = require("../../../generated/idl/utils");
|
|
9
|
+
const { getSpecifiedColor, getComputedOrUsedColor } = require("./colors");
|
|
10
|
+
const { asciiLowercase } = require("./strings");
|
|
11
|
+
const { deprecatedAliases, systemColors } = require("./system-colors");
|
|
12
|
+
|
|
13
|
+
const defaultStyleSheet = fs.readFileSync(
|
|
14
|
+
path.resolve(__dirname, "../../browser/default-stylesheet.css"),
|
|
15
|
+
{ encoding: "utf-8" }
|
|
16
|
+
);
|
|
17
|
+
let parsedDefaultStyleSheet;
|
|
18
|
+
|
|
19
|
+
// Properties for which getResolvedValue is implemented. This is less than
|
|
20
|
+
// every supported property.
|
|
21
|
+
// https://drafts.csswg.org/indexes/#properties
|
|
22
|
+
const propertiesWithResolvedValueImplemented = {
|
|
23
|
+
"__proto__": null,
|
|
24
|
+
|
|
25
|
+
// https://drafts.csswg.org/css2/visufx.html#visibility
|
|
26
|
+
"visibility": {
|
|
27
|
+
inherited: true,
|
|
28
|
+
initial: "visible",
|
|
29
|
+
computedValue: "as-specified"
|
|
30
|
+
},
|
|
31
|
+
// https://svgwg.org/svg2-draft/interact.html#PointerEventsProperty
|
|
32
|
+
"pointer-events": {
|
|
33
|
+
inherited: true,
|
|
34
|
+
initial: "auto",
|
|
35
|
+
computedValue: "as-specified"
|
|
36
|
+
},
|
|
37
|
+
// https://drafts.csswg.org/css-backgrounds-3/#propdef-background-color
|
|
38
|
+
"background-color": {
|
|
39
|
+
inherited: false,
|
|
40
|
+
initial: "transparent",
|
|
41
|
+
computedValue: "computed-color"
|
|
42
|
+
},
|
|
43
|
+
// https://drafts.csswg.org/css-logical-1/#propdef-border-block-end-color
|
|
44
|
+
"border-block-start-color": {
|
|
45
|
+
inherited: false,
|
|
46
|
+
initial: "currentcolor",
|
|
47
|
+
computedValue: "computed-color"
|
|
48
|
+
},
|
|
49
|
+
"border-block-end-color": {
|
|
50
|
+
inherited: false,
|
|
51
|
+
initial: "currentcolor",
|
|
52
|
+
computedValue: "computed-color"
|
|
53
|
+
},
|
|
54
|
+
"border-inline-start-color": {
|
|
55
|
+
inherited: false,
|
|
56
|
+
initial: "currentcolor",
|
|
57
|
+
computedValue: "computed-color"
|
|
58
|
+
},
|
|
59
|
+
"border-inline-end-color": {
|
|
60
|
+
inherited: false,
|
|
61
|
+
initial: "currentcolor",
|
|
62
|
+
computedValue: "computed-color"
|
|
63
|
+
},
|
|
64
|
+
// https://drafts.csswg.org/css-backgrounds-3/#propdef-border-bottom-color
|
|
65
|
+
"border-top-color": {
|
|
66
|
+
inherited: false,
|
|
67
|
+
initial: "currentcolor",
|
|
68
|
+
computedValue: "computed-color"
|
|
69
|
+
},
|
|
70
|
+
"border-right-color": {
|
|
71
|
+
inherited: false,
|
|
72
|
+
initial: "currentcolor",
|
|
73
|
+
computedValue: "computed-color"
|
|
74
|
+
},
|
|
75
|
+
"border-bottom-color": {
|
|
76
|
+
inherited: false,
|
|
77
|
+
initial: "currentcolor",
|
|
78
|
+
computedValue: "computed-color"
|
|
79
|
+
},
|
|
80
|
+
"border-left-color": {
|
|
81
|
+
inherited: false,
|
|
82
|
+
initial: "currentcolor",
|
|
83
|
+
computedValue: "computed-color"
|
|
84
|
+
},
|
|
85
|
+
// https://drafts.csswg.org/css-ui-4/#propdef-caret-color
|
|
86
|
+
"caret-color": {
|
|
87
|
+
inherited: true,
|
|
88
|
+
initial: "auto",
|
|
89
|
+
computedValue: "computed-color"
|
|
90
|
+
},
|
|
91
|
+
// https://drafts.csswg.org/css-color-4/#propdef-color
|
|
92
|
+
"color": {
|
|
93
|
+
inherited: true,
|
|
94
|
+
initial: "canvastext",
|
|
95
|
+
computedValue: "computed-color"
|
|
96
|
+
},
|
|
97
|
+
// https://drafts.csswg.org/css-ui-4/#propdef-outline-color
|
|
98
|
+
"outline-color": {
|
|
99
|
+
inherited: false,
|
|
100
|
+
initial: "invert",
|
|
101
|
+
computedValue: "computed-color"
|
|
102
|
+
},
|
|
103
|
+
// https://drafts.csswg.org/css-display/#the-display-properties
|
|
104
|
+
// Currently only "as-specified" is supported as a computed value
|
|
105
|
+
"display": {
|
|
106
|
+
inherited: false,
|
|
107
|
+
initial: "inline",
|
|
108
|
+
computedValue: "as-specified"
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const implementedProperties = Object.keys(propertiesWithResolvedValueImplemented);
|
|
112
|
+
|
|
113
|
+
function getComputedStyleDeclaration(elementImpl) {
|
|
114
|
+
const styleCache = elementImpl._ownerDocument._styleCache;
|
|
115
|
+
const cachedDeclaration = styleCache.get(elementImpl);
|
|
116
|
+
if (cachedDeclaration) {
|
|
117
|
+
const opts = prepareCssstyleOpts(elementImpl);
|
|
118
|
+
const clonedDeclaration = new CSSStyleDeclaration(null, opts);
|
|
119
|
+
// TODO: Remove when cssstyle options are ready.
|
|
120
|
+
clonedDeclaration._global = elementImpl._globalObject;
|
|
121
|
+
clonedDeclaration._computed = true;
|
|
122
|
+
|
|
123
|
+
for (let i = 0; i < cachedDeclaration.length; i++) {
|
|
124
|
+
const property = cachedDeclaration.item(i);
|
|
125
|
+
const value = cachedDeclaration.getPropertyValue(property);
|
|
126
|
+
const priority = cachedDeclaration.getPropertyPriority(property);
|
|
127
|
+
clonedDeclaration.setProperty(property, value, priority);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return clonedDeclaration;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const declaration = prepareComputedStyleDeclaration(elementImpl, { styleCache });
|
|
134
|
+
|
|
135
|
+
// TODO: Remove later.
|
|
136
|
+
for (const property of implementedProperties) {
|
|
137
|
+
declaration.setProperty(property, getResolvedValue(elementImpl, property));
|
|
138
|
+
}
|
|
139
|
+
declaration._readonly = true;
|
|
140
|
+
|
|
141
|
+
return declaration;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function prepareComputedStyleDeclaration(elementImpl, { styleCache }) {
|
|
145
|
+
const opts = prepareCssstyleOpts(elementImpl);
|
|
146
|
+
const declaration = new CSSStyleDeclaration(null, opts);
|
|
147
|
+
// TODO: Remove when cssstyle options are ready.
|
|
148
|
+
declaration._global = elementImpl._globalObject;
|
|
149
|
+
declaration._computed = true;
|
|
150
|
+
|
|
151
|
+
applyStyleSheetRules(elementImpl, declaration);
|
|
152
|
+
|
|
153
|
+
for (let i = 0; i < elementImpl.style.length; i++) {
|
|
154
|
+
const { style } = elementImpl;
|
|
155
|
+
handlePropertyForInlineStyle(style.item(i), declaration, style);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
styleCache.set(elementImpl, declaration);
|
|
159
|
+
|
|
160
|
+
return declaration;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function prepareCssstyleOpts(elementImpl) {
|
|
164
|
+
// TODO: Prepare options for cssstyle.
|
|
165
|
+
const opts = {
|
|
166
|
+
context: wrapperForImpl(elementImpl)
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
return opts;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function applyStyleSheetRules(elementImpl, declaration) {
|
|
173
|
+
if (!parsedDefaultStyleSheet) {
|
|
174
|
+
parsedDefaultStyleSheet = cssom.parse(defaultStyleSheet);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const specificities = new Map();
|
|
178
|
+
handleSheet(parsedDefaultStyleSheet, elementImpl, declaration, specificities);
|
|
179
|
+
for (const sheet of elementImpl._ownerDocument.styleSheets._list) {
|
|
180
|
+
handleSheet(sheet, elementImpl, declaration, specificities);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function handleSheet(sheet, elementImpl, declaration, specificities) {
|
|
185
|
+
for (const rule of sheet.cssRules) {
|
|
186
|
+
if (rule.media) {
|
|
187
|
+
let hasMediaScreen = false;
|
|
188
|
+
for (let i = 0; i < rule.media.length; i++) {
|
|
189
|
+
const mediaType = rule.media[i];
|
|
190
|
+
hasMediaScreen = mediaType === "screen";
|
|
191
|
+
if (hasMediaScreen) {
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (rule.constructor.name === "CSSImportRule") {
|
|
196
|
+
// Handle @import rules if:
|
|
197
|
+
// - imported sheet loaded successfully
|
|
198
|
+
// - media is empty or matches "screen"
|
|
199
|
+
if (rule.styleSheet !== null && (rule.media.length === 0 || hasMediaScreen)) {
|
|
200
|
+
for (const innerRule of rule.styleSheet.cssRules) {
|
|
201
|
+
const { ast, match } = matches(innerRule, elementImpl);
|
|
202
|
+
if (match) {
|
|
203
|
+
handleRule(innerRule, declaration, specificities, ast);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Keep handling @media rules only if media matches "screen"
|
|
208
|
+
} else if (hasMediaScreen) {
|
|
209
|
+
for (const innerRule of rule.cssRules) {
|
|
210
|
+
const { ast, match } = matches(innerRule, elementImpl);
|
|
211
|
+
if (match) {
|
|
212
|
+
handleRule(innerRule, declaration, specificities, ast);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
} else {
|
|
217
|
+
const { ast, match } = matches(rule, elementImpl);
|
|
218
|
+
if (match) {
|
|
219
|
+
handleRule(rule, declaration, specificities, ast);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function handleRule(rule, declaration, specificities, ast) {
|
|
226
|
+
const { style } = rule;
|
|
227
|
+
for (let i = 0; i < style.length; i++) {
|
|
228
|
+
const property = style[i];
|
|
229
|
+
handleProperty(property, declaration, style, specificities, ast);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function handleProperty(property, declaration, style, specificities, ast) {
|
|
234
|
+
const value = style.getPropertyValue(property);
|
|
235
|
+
const priority = style.getPropertyPriority(property);
|
|
236
|
+
if (priority) {
|
|
237
|
+
declaration.setProperty(property, value, priority);
|
|
238
|
+
} else if (!declaration.getPropertyPriority(property)) {
|
|
239
|
+
const { value: specificity } = Specificity.max(...Specificity.calculate(ast));
|
|
240
|
+
if (specificities.has(property)) {
|
|
241
|
+
if (Specificity.compare(specificity, specificities.get(property)) >= 0) {
|
|
242
|
+
specificities.set(property, specificity);
|
|
243
|
+
declaration.setProperty(property, value);
|
|
244
|
+
}
|
|
245
|
+
} else {
|
|
246
|
+
specificities.set(property, specificity);
|
|
247
|
+
declaration.setProperty(property, value);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function handlePropertyForInlineStyle(property, declaration, style) {
|
|
253
|
+
const value = style.getPropertyValue(property);
|
|
254
|
+
const priority = style.getPropertyPriority(property);
|
|
255
|
+
if (!declaration.getPropertyPriority(property) || priority) {
|
|
256
|
+
declaration.setProperty(property, value, priority);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function matches(rule, elementImpl) {
|
|
261
|
+
try {
|
|
262
|
+
const { selectorText } = rule;
|
|
263
|
+
const domSelector = elementImpl._ownerDocument._domSelector;
|
|
264
|
+
const { ast, match, pseudoElement } = domSelector.check(selectorText, elementImpl);
|
|
265
|
+
// `pseudoElement` is a pseudo-element selector (e.g. `::before`).
|
|
266
|
+
// However, we do not support getComputedStyle(element, pseudoElement), so `match` is set to `false`.
|
|
267
|
+
if (pseudoElement) {
|
|
268
|
+
return {
|
|
269
|
+
match: false
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
return { ast, match, pseudoElement };
|
|
273
|
+
} catch {
|
|
274
|
+
// fall through
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
match: false
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Naive implementation of https://drafts.csswg.org/css-cascade-4/#cascading
|
|
282
|
+
// based on the previous jsdom implementation of getComputedStyle.
|
|
283
|
+
// Does not implement https://drafts.csswg.org/css-cascade-4/#cascade-specificity,
|
|
284
|
+
// or rather specificity is only implemented by the order in which the matching
|
|
285
|
+
// rules appear. The last rule is the most specific while the first rule is
|
|
286
|
+
// the least specific.
|
|
287
|
+
function getCascadedPropertyValue(element, property) {
|
|
288
|
+
return getComputedStyleDeclaration(element).getPropertyValue(property);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// https://drafts.csswg.org/css-cascade-4/#specified-value
|
|
292
|
+
function getSpecifiedValue(element, property) {
|
|
293
|
+
const { initial, inherited, computedValue } = propertiesWithResolvedValueImplemented[property];
|
|
294
|
+
const cascade = getCascadedPropertyValue(element, property);
|
|
295
|
+
|
|
296
|
+
if (cascade !== "") {
|
|
297
|
+
if (computedValue === "computed-color") {
|
|
298
|
+
return getSpecifiedColor(cascade);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return cascade;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Defaulting
|
|
305
|
+
if (inherited && element.parentElement !== null) {
|
|
306
|
+
return getComputedValue(element.parentElement, property);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// root element without parent element or inherited property
|
|
310
|
+
return initial;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// https://drafts.csswg.org/css-cascade-4/#computed-value
|
|
314
|
+
function getComputedValue(element, property) {
|
|
315
|
+
const { computedValue, inherited, initial } = propertiesWithResolvedValueImplemented[property];
|
|
316
|
+
let specifiedValue = getSpecifiedValue(element, property);
|
|
317
|
+
// https://drafts.csswg.org/css-cascade/#defaulting-keywords
|
|
318
|
+
switch (specifiedValue) {
|
|
319
|
+
case "initial": {
|
|
320
|
+
specifiedValue = initial;
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
case "inherit": {
|
|
324
|
+
if (element.parentElement !== null) {
|
|
325
|
+
specifiedValue = getComputedValue(element.parentElement, property);
|
|
326
|
+
} else {
|
|
327
|
+
specifiedValue = initial;
|
|
328
|
+
}
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
case "unset": {
|
|
332
|
+
if (inherited && element.parentElement !== null) {
|
|
333
|
+
specifiedValue = getComputedValue(element.parentElement, property);
|
|
334
|
+
} else {
|
|
335
|
+
specifiedValue = initial;
|
|
336
|
+
}
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
// TODO: https://drafts.csswg.org/css-cascade-5/#revert-layer
|
|
340
|
+
case "revert-layer": {
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
// TODO: https://drafts.csswg.org/css-cascade-5/#default
|
|
344
|
+
case "revert": {
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
default: {
|
|
348
|
+
// fall through; specifiedValue is not a CSS-wide keyword.
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (computedValue === "as-specified") {
|
|
352
|
+
return specifiedValue;
|
|
353
|
+
} else if (computedValue === "computed-color") {
|
|
354
|
+
let value = asciiLowercase(specifiedValue);
|
|
355
|
+
// https://drafts.csswg.org/css-color-4/#resolving-other-colors
|
|
356
|
+
if (specifiedValue === "currentcolor") {
|
|
357
|
+
if (property === "color") {
|
|
358
|
+
if (element.parentElement !== null) {
|
|
359
|
+
return getComputedValue(element.parentElement, "color");
|
|
360
|
+
}
|
|
361
|
+
value = initial;
|
|
362
|
+
} else {
|
|
363
|
+
return getComputedValue(element, "color");
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
if (systemColors.has(value) || deprecatedAliases.has(value)) {
|
|
367
|
+
let key = value;
|
|
368
|
+
if (deprecatedAliases.has(value)) {
|
|
369
|
+
key = deprecatedAliases.get(value);
|
|
370
|
+
}
|
|
371
|
+
const { light, dark } = systemColors.get(key);
|
|
372
|
+
const colorScheme = getCascadedPropertyValue(element, "color-scheme");
|
|
373
|
+
if (colorScheme === "dark") {
|
|
374
|
+
return dark;
|
|
375
|
+
}
|
|
376
|
+
return light;
|
|
377
|
+
}
|
|
378
|
+
return getComputedOrUsedColor(specifiedValue);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
throw new TypeError(`Internal error: unrecognized computed value instruction '${computedValue}'`);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// https://drafts.csswg.org/cssom/#resolved-value
|
|
385
|
+
// Only implements the properties that are defined in propertiesWithResolvedValueImplemented.
|
|
386
|
+
function getResolvedValue(element, property) {
|
|
387
|
+
// We can always use the computed value with the current set of propertiesWithResolvedValueImplemented:
|
|
388
|
+
// * Color properties end up with the used value, but we don't implement any actual differences between used and
|
|
389
|
+
// computed that https://drafts.csswg.org/css-cascade-5/#used-value gestures at.
|
|
390
|
+
// * The other properties fall back to the "any other property: The resolved value is the computed value." case.
|
|
391
|
+
return getComputedValue(element, property);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
function invalidateStyleCache(elementImpl) {
|
|
395
|
+
if (elementImpl._attached) {
|
|
396
|
+
elementImpl._ownerDocument._styleCache = new WeakMap();
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
module.exports = {
|
|
401
|
+
SHADOW_DOM_PSEUDO_REGEXP: /^::(?:part|slotted)\(/i,
|
|
402
|
+
getComputedStyleDeclaration,
|
|
403
|
+
invalidateStyleCache
|
|
404
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const cssom = require("@acemir/cssom");
|
|
3
|
+
const { legacyHookDecode } = require("@exodus/bytes/encoding.js");
|
|
4
|
+
const whatwgURL = require("whatwg-url");
|
|
5
|
+
const { invalidateStyleCache } = require("./style-rules");
|
|
6
|
+
|
|
7
|
+
// TODO: this should really implement https://html.spec.whatwg.org/multipage/links.html#link-type-stylesheet
|
|
8
|
+
// It (and the things it calls) is nowhere close right now.
|
|
9
|
+
exports.fetchStylesheet = (elementImpl, urlString, importRule) => {
|
|
10
|
+
const document = elementImpl._ownerDocument;
|
|
11
|
+
let defaultEncodingLabel = document._encoding;
|
|
12
|
+
const resourceLoader = document._resourceLoader;
|
|
13
|
+
|
|
14
|
+
if (elementImpl.localName === "link" && elementImpl.hasAttributeNS(null, "charset")) {
|
|
15
|
+
defaultEncodingLabel = elementImpl.getAttributeNS(null, "charset");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function onStylesheetLoad(data, response) {
|
|
19
|
+
if (!response.ok) {
|
|
20
|
+
throw new Error("Status code: " + response.status);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// if the element was detached before the load could finish, don't process the data
|
|
24
|
+
if (!elementImpl._attached) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const css = legacyHookDecode(data, defaultEncodingLabel);
|
|
29
|
+
|
|
30
|
+
// TODO: MIME type checking?
|
|
31
|
+
if (!importRule && elementImpl.sheet) {
|
|
32
|
+
exports.removeStylesheet(elementImpl.sheet, elementImpl);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (importRule) {
|
|
36
|
+
// According to the spec, we don't add the stylesheet to the document's
|
|
37
|
+
// stylesheet list when it's loaded via an @import rule.
|
|
38
|
+
exports.createStylesheet(css, elementImpl, urlString, {
|
|
39
|
+
ownerRule: importRule,
|
|
40
|
+
styleSheet: importRule.styleSheet
|
|
41
|
+
});
|
|
42
|
+
} else {
|
|
43
|
+
const createdSheet = exports.createStylesheet(css, elementImpl, urlString, {
|
|
44
|
+
ownerNode: elementImpl
|
|
45
|
+
});
|
|
46
|
+
exports.addStylesheet(createdSheet, elementImpl);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
resourceLoader.fetch(urlString, {
|
|
51
|
+
element: elementImpl,
|
|
52
|
+
onLoad: onStylesheetLoad
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// https://drafts.csswg.org/cssom/#remove-a-css-style-sheet
|
|
57
|
+
exports.removeStylesheet = (sheet, elementImpl) => {
|
|
58
|
+
const { styleSheets } = elementImpl._ownerDocument;
|
|
59
|
+
styleSheets._remove(sheet);
|
|
60
|
+
|
|
61
|
+
// Remove the association explicitly; in the spec it's implicit so this step doesn't exist.
|
|
62
|
+
elementImpl.sheet = null;
|
|
63
|
+
|
|
64
|
+
invalidateStyleCache(elementImpl);
|
|
65
|
+
|
|
66
|
+
// TODO: "Set the CSS style sheet’s parent CSS style sheet, owner node and owner CSS rule to null."
|
|
67
|
+
// Probably when we have a real CSSOM implementation.
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// https://drafts.csswg.org/cssom/#create-a-css-style-sheet kinda:
|
|
71
|
+
// - Parsing failures are now handled gracefully
|
|
72
|
+
// - Like the browser's behaviour, when css.parse() passes trough some invalid CSS
|
|
73
|
+
// it will try it's best to ignore the invalid parts without blocking the parsing operations
|
|
74
|
+
// returning a stylesheet with the valid parts only.
|
|
75
|
+
// - css.parse() now receives a funcion that we can use to handle the error as it's second argument
|
|
76
|
+
// - The import rules stuff seems out of place, and probably should affect the load event...
|
|
77
|
+
exports.createStylesheet = (sheetText, elementImpl, baseURLString, parserOptions) => {
|
|
78
|
+
const sheet = cssom.parse(sheetText, {
|
|
79
|
+
globalObject: elementImpl._globalObject,
|
|
80
|
+
...parserOptions
|
|
81
|
+
}, err => {
|
|
82
|
+
if (elementImpl._ownerDocument._defaultView) {
|
|
83
|
+
const error = new Error("Could not parse CSS stylesheet", { cause: err });
|
|
84
|
+
error.sheetText = sheetText;
|
|
85
|
+
error.type = "css-parsing";
|
|
86
|
+
|
|
87
|
+
elementImpl._ownerDocument._defaultView._virtualConsole.emit("jsdomError", error);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
scanForImportRules(elementImpl, sheet.cssRules, baseURLString);
|
|
92
|
+
|
|
93
|
+
return sheet;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// https://drafts.csswg.org/cssom/#add-a-css-style-sheet
|
|
97
|
+
exports.addStylesheet = (sheet, elementImpl) => {
|
|
98
|
+
elementImpl._ownerDocument.styleSheets._add(sheet);
|
|
99
|
+
|
|
100
|
+
// Set the association explicitly; in the spec it's implicit.
|
|
101
|
+
elementImpl.sheet = sheet;
|
|
102
|
+
|
|
103
|
+
invalidateStyleCache(elementImpl);
|
|
104
|
+
|
|
105
|
+
// TODO: title and disabled stuff
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
// Tracking in https://github.com/jsdom/jsdom/issues/2124
|
|
109
|
+
function scanForImportRules(elementImpl, cssRules, baseURLString) {
|
|
110
|
+
if (!cssRules) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
for (let i = 0; i < cssRules.length; ++i) {
|
|
115
|
+
if (cssRules[i].cssRules) {
|
|
116
|
+
// @media rule: keep searching inside it.
|
|
117
|
+
scanForImportRules(elementImpl, cssRules[i].cssRules, baseURLString);
|
|
118
|
+
} else if (cssRules[i].href) {
|
|
119
|
+
// @import rule: fetch the resource and evaluate it.
|
|
120
|
+
// See http://dev.w3.org/csswg/cssom/#css-import-rule
|
|
121
|
+
// If loading of the style sheet fails its cssRules list is simply
|
|
122
|
+
// empty. I.e. an @import rule always has an associated style sheet.
|
|
123
|
+
|
|
124
|
+
// Use whatwgURL.URL instead of whatwgURL.parseURL so that we get an error we can use as the cause if the URL
|
|
125
|
+
// doesn't parse.
|
|
126
|
+
let parsed;
|
|
127
|
+
try {
|
|
128
|
+
parsed = new whatwgURL.URL(cssRules[i].href, baseURLString);
|
|
129
|
+
} catch (cause) {
|
|
130
|
+
const window = elementImpl._ownerDocument._defaultView;
|
|
131
|
+
if (window) {
|
|
132
|
+
// Synthetic cause to ensure that all resource loading errors have causes.
|
|
133
|
+
const error = new Error(
|
|
134
|
+
`Could not parse CSS @import URL "${cssRules[i].href}" relative to base URL "${baseURLString}"`,
|
|
135
|
+
{ cause }
|
|
136
|
+
);
|
|
137
|
+
error.type = "resource-loading";
|
|
138
|
+
error.url = cssRules[i].href;
|
|
139
|
+
window._virtualConsole.emit("jsdomError", error);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (parsed) {
|
|
144
|
+
exports.fetchStylesheet(elementImpl, parsed.href, cssRules[i]);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// https://svgwg.org/svg2-draft/types.html#TermDetach
|
|
4
|
+
function detach(value) {
|
|
5
|
+
if (typeof value === "string") {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
throw new TypeError(`jsdom internal error: detaching object of wrong type ${value}`);
|
|
10
|
+
}
|
|
11
|
+
exports.detach = detach;
|
|
12
|
+
|
|
13
|
+
// https://svgwg.org/svg2-draft/types.html#TermAttach
|
|
14
|
+
// listObject corresponds to the parameter taken by the algorithm in the spec, but is currently unused because only
|
|
15
|
+
// DOMString type is supported by jsdom (and this function) right now.
|
|
16
|
+
// eslint-disable-next-line no-unused-vars
|
|
17
|
+
function attach(value, listObject) {
|
|
18
|
+
if (typeof value === "string") {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
throw new TypeError(`jsdom internal error: attaching object of wrong type ${value}`);
|
|
23
|
+
}
|
|
24
|
+
exports.attach = attach;
|
|
25
|
+
|
|
26
|
+
// https://svgwg.org/svg2-draft/types.html#TermReserialize for DOMString.
|
|
27
|
+
function reserializeSpaceSeparatedTokens(elements) {
|
|
28
|
+
return elements.join(" ");
|
|
29
|
+
}
|
|
30
|
+
exports.reserializeSpaceSeparatedTokens = reserializeSpaceSeparatedTokens;
|
|
31
|
+
|
|
32
|
+
// Used for systemLanguage attribute, whose value is a set of comma-separated tokens:
|
|
33
|
+
// https://svgwg.org/svg2-draft/struct.html#SystemLanguageAttribute
|
|
34
|
+
// SVG 2 spec (https://svgwg.org/svg2-draft/types.html#TermReserialize) says any SVGStringList should reserialize the
|
|
35
|
+
// same way, as space-separated tokens, but doing so for systemLanguage is illogical and contradicts the Firefox
|
|
36
|
+
// behavior.
|
|
37
|
+
// I cannot find a description of reserialization of SVGStringList in the SVG 1.1 spec.
|
|
38
|
+
function reserializeCommaSeparatedTokens(elements) {
|
|
39
|
+
return elements.join(", ");
|
|
40
|
+
}
|
|
41
|
+
exports.reserializeCommaSeparatedTokens = reserializeCommaSeparatedTokens;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const { SVG_NS } = require("../namespaces");
|
|
3
|
+
|
|
4
|
+
// https://svgwg.org/svg2-draft/render.html#TermNeverRenderedElement
|
|
5
|
+
const neverRenderedElements = new Set([
|
|
6
|
+
"clipPath",
|
|
7
|
+
"defs",
|
|
8
|
+
"desc",
|
|
9
|
+
"linearGradient",
|
|
10
|
+
"marker",
|
|
11
|
+
"mask",
|
|
12
|
+
"metadata",
|
|
13
|
+
"pattern",
|
|
14
|
+
"radialGradient",
|
|
15
|
+
"script",
|
|
16
|
+
"style",
|
|
17
|
+
"title",
|
|
18
|
+
"symbol"
|
|
19
|
+
]);
|
|
20
|
+
|
|
21
|
+
// https://svgwg.org/svg2-draft/render.html#Rendered-vs-NonRendered
|
|
22
|
+
exports.isRenderedElement = elImpl => {
|
|
23
|
+
if (neverRenderedElements.has(elImpl._localName)) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// This does not check for elements excluded because of conditional processing attributes or ‘switch’ structures,
|
|
28
|
+
// because conditional processing is not implemented.
|
|
29
|
+
// https://svgwg.org/svg2-draft/struct.html#ConditionalProcessing
|
|
30
|
+
|
|
31
|
+
// This does not check for computed style of display being none, since that is not yet implemented for HTML
|
|
32
|
+
// focusability either (and there are no tests yet).
|
|
33
|
+
|
|
34
|
+
if (!elImpl.isConnected) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// The spec is unclear about how to deal with non-SVG parents, so we only perform this check for SVG-namespace
|
|
39
|
+
// parents.
|
|
40
|
+
if (elImpl.parentElement && elImpl.parentElement._namespaceURI === SVG_NS &&
|
|
41
|
+
!exports.isRenderedElement(elImpl.parentNode)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return true;
|
|
46
|
+
};
|