happy-dom 2.53.1 → 3.0.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.
Potentially problematic release.
This version of happy-dom might be problematic. Click here for more details.
- package/README.md +26 -6
- package/lib/async-task-manager/AsyncTaskManager.js +34 -78
- package/lib/async-task-manager/AsyncTaskManager.js.map +1 -1
- package/lib/attribute/Attr.js +19 -28
- package/lib/attribute/Attr.js.map +1 -1
- package/lib/config/ElementTag.d.ts +2 -1
- package/lib/config/ElementTag.js +16 -15
- package/lib/config/ElementTag.js.map +1 -1
- package/lib/config/NonImplemenetedElementClasses.js +0 -1
- package/lib/config/NonImplemenetedElementClasses.js.map +1 -1
- package/lib/cookie/CookieUtility.js +21 -26
- package/lib/cookie/CookieUtility.js.map +1 -1
- package/lib/css/CSS.js +12 -18
- package/lib/css/CSS.js.map +1 -1
- package/lib/css/CSSParser.js +29 -33
- package/lib/css/CSSParser.js.map +1 -1
- package/lib/css/CSSRule.js +24 -29
- package/lib/css/CSSRule.js.map +1 -1
- package/lib/css/CSSStyleDeclaration.js +4516 -6005
- package/lib/css/CSSStyleDeclaration.js.map +1 -1
- package/lib/css/CSSStyleSheet.js +17 -59
- package/lib/css/CSSStyleSheet.js.map +1 -1
- package/lib/css/CSSUnitValue.js +4 -5
- package/lib/css/CSSUnitValue.js.map +1 -1
- package/lib/css/MediaList.js +23 -28
- package/lib/css/MediaList.js.map +1 -1
- package/lib/css/rules/CSSFontFaceRule.js +6 -24
- package/lib/css/rules/CSSFontFaceRule.js.map +1 -1
- package/lib/css/rules/CSSKeyframeRule.js +14 -36
- package/lib/css/rules/CSSKeyframeRule.js.map +1 -1
- package/lib/css/rules/CSSKeyframesRule.js +31 -54
- package/lib/css/rules/CSSKeyframesRule.js.map +1 -1
- package/lib/css/rules/CSSMediaRule.js +29 -56
- package/lib/css/rules/CSSMediaRule.js.map +1 -1
- package/lib/css/rules/CSSStyleRule.js +16 -38
- package/lib/css/rules/CSSStyleRule.js.map +1 -1
- package/lib/custom-element/CustomElementRegistry.js +21 -24
- package/lib/custom-element/CustomElementRegistry.js.map +1 -1
- package/lib/dom-implementation/DOMImplementation.js +12 -13
- package/lib/dom-implementation/DOMImplementation.js.map +1 -1
- package/lib/dom-parser/DOMParser.js +29 -35
- package/lib/dom-parser/DOMParser.js.map +1 -1
- package/lib/dom-token-list/DOMTokenList.js +64 -79
- package/lib/dom-token-list/DOMTokenList.js.map +1 -1
- package/lib/event/DataTransfer.js +4 -5
- package/lib/event/DataTransfer.js.map +1 -1
- package/lib/event/DataTransferItem.js +7 -8
- package/lib/event/DataTransferItem.js.map +1 -1
- package/lib/event/DataTransferItemList.js +10 -11
- package/lib/event/DataTransferItemList.js.map +1 -1
- package/lib/event/Event.js +11 -15
- package/lib/event/Event.js.map +1 -1
- package/lib/event/EventTarget.js +14 -16
- package/lib/event/EventTarget.js.map +1 -1
- package/lib/event/IUIEventInit.d.ts +2 -2
- package/lib/event/UIEvent.d.ts +2 -2
- package/lib/event/UIEvent.js +25 -46
- package/lib/event/UIEvent.js.map +1 -1
- package/lib/event/events/AnimationEvent.js +11 -29
- package/lib/event/events/AnimationEvent.js.map +1 -1
- package/lib/event/events/CustomEvent.js +9 -31
- package/lib/event/events/CustomEvent.js.map +1 -1
- package/lib/event/events/ErrorEvent.js +15 -34
- package/lib/event/events/ErrorEvent.js.map +1 -1
- package/lib/event/events/FocusEvent.js +7 -26
- package/lib/event/events/FocusEvent.js.map +1 -1
- package/lib/event/events/InputEvent.js +13 -32
- package/lib/event/events/InputEvent.js.map +1 -1
- package/lib/event/events/KeyboardEvent.js +27 -46
- package/lib/event/events/KeyboardEvent.js.map +1 -1
- package/lib/event/events/MouseEvent.js +33 -52
- package/lib/event/events/MouseEvent.js.map +1 -1
- package/lib/event/events/PointerEvent.js +25 -44
- package/lib/event/events/PointerEvent.js.map +1 -1
- package/lib/event/events/ProgressEvent.js +11 -30
- package/lib/event/events/ProgressEvent.js.map +1 -1
- package/lib/event/events/StorageEvent.js +13 -32
- package/lib/event/events/StorageEvent.js.map +1 -1
- package/lib/event/events/WheelEvent.js +16 -35
- package/lib/event/events/WheelEvent.js.map +1 -1
- package/lib/exception/DOMException.js +5 -24
- package/lib/exception/DOMException.js.map +1 -1
- package/lib/fetch/FetchHandler.js +18 -22
- package/lib/fetch/FetchHandler.js.map +1 -1
- package/lib/fetch/Headers.js +3 -23
- package/lib/fetch/Headers.js.map +1 -1
- package/lib/fetch/Request.js +61 -81
- package/lib/fetch/Request.js.map +1 -1
- package/lib/fetch/ResourceFetchHandler.js +18 -67
- package/lib/fetch/ResourceFetchHandler.js.map +1 -1
- package/lib/fetch/Response.js +61 -81
- package/lib/fetch/Response.js.map +1 -1
- package/lib/file/Blob.js +29 -78
- package/lib/file/Blob.js.map +1 -1
- package/lib/file/File.js +9 -27
- package/lib/file/File.js.map +1 -1
- package/lib/file/FileReader.js +57 -78
- package/lib/file/FileReader.js.map +1 -1
- package/lib/history/History.js +32 -37
- package/lib/history/History.js.map +1 -1
- package/lib/index.d.ts +5 -3
- package/lib/index.js +71 -69
- package/lib/index.js.map +1 -1
- package/lib/location/Location.js +11 -28
- package/lib/location/Location.js.map +1 -1
- package/lib/location/RelativeURL.js +5 -8
- package/lib/location/RelativeURL.js.map +1 -1
- package/lib/location/URL.js +46 -59
- package/lib/location/URL.js.map +1 -1
- package/lib/match-media/MediaQueryList.js +28 -54
- package/lib/match-media/MediaQueryList.js.map +1 -1
- package/lib/mutation-observer/MutationListener.js +3 -4
- package/lib/mutation-observer/MutationListener.js.map +1 -1
- package/lib/mutation-observer/MutationObserver.js +12 -13
- package/lib/mutation-observer/MutationObserver.js.map +1 -1
- package/lib/mutation-observer/MutationRecord.js +3 -4
- package/lib/mutation-observer/MutationRecord.js.map +1 -1
- package/lib/navigator/MimeType.js +5 -6
- package/lib/navigator/MimeType.js.map +1 -1
- package/lib/navigator/MimeTypeArray.js +10 -11
- package/lib/navigator/MimeTypeArray.js.map +1 -1
- package/lib/navigator/Navigator.js +7 -8
- package/lib/navigator/Navigator.js.map +1 -1
- package/lib/navigator/Plugin.js +10 -11
- package/lib/navigator/Plugin.js.map +1 -1
- package/lib/navigator/PluginArray.js +12 -13
- package/lib/navigator/PluginArray.js.map +1 -1
- package/lib/nodes/character-data/CharacterData.js +119 -184
- package/lib/nodes/character-data/CharacterData.js.map +1 -1
- package/lib/nodes/character-data/CharacterDataUtility.js +12 -15
- package/lib/nodes/character-data/CharacterDataUtility.js.map +1 -1
- package/lib/nodes/child-node/ChildNodeUtility.js +24 -45
- package/lib/nodes/child-node/ChildNodeUtility.js.map +1 -1
- package/lib/nodes/child-node/NonDocumentChildNodeUtility.js +9 -12
- package/lib/nodes/child-node/NonDocumentChildNodeUtility.js.map +1 -1
- package/lib/nodes/comment/Comment.js +20 -43
- package/lib/nodes/comment/Comment.js.map +1 -1
- package/lib/nodes/document/Document.d.ts +3 -3
- package/lib/nodes/document/Document.js +334 -461
- package/lib/nodes/document/Document.js.map +1 -1
- package/lib/nodes/document/DocumentReadyStateManager.js +16 -19
- package/lib/nodes/document/DocumentReadyStateManager.js.map +1 -1
- package/lib/nodes/document/IDocument.d.ts +2 -2
- package/lib/nodes/document-fragment/DocumentFragment.js +93 -153
- package/lib/nodes/document-fragment/DocumentFragment.js.map +1 -1
- package/lib/nodes/document-type/DocumentType.js +22 -45
- package/lib/nodes/document-type/DocumentType.js.map +1 -1
- package/lib/nodes/element/DOMRect.js +3 -4
- package/lib/nodes/element/DOMRect.js.map +1 -1
- package/lib/nodes/element/Element.js +367 -496
- package/lib/nodes/element/Element.js.map +1 -1
- package/lib/nodes/element/HTMLCollection.js +4 -24
- package/lib/nodes/element/HTMLCollection.js.map +1 -1
- package/lib/nodes/element/HTMLCollectionFactory.js +6 -9
- package/lib/nodes/element/HTMLCollectionFactory.js.map +1 -1
- package/lib/nodes/element/Range.js +89 -114
- package/lib/nodes/element/Range.js.map +1 -1
- package/lib/nodes/html-base-element/HTMLBaseElement.d.ts +42 -0
- package/lib/nodes/html-base-element/HTMLBaseElement.js +62 -0
- package/lib/nodes/html-base-element/HTMLBaseElement.js.map +1 -0
- package/lib/nodes/html-base-element/IHTMLBaseElement.d.ts +19 -0
- package/lib/nodes/html-base-element/IHTMLBaseElement.js +3 -0
- package/lib/nodes/html-base-element/IHTMLBaseElement.js.map +1 -0
- package/lib/nodes/html-document/HTMLDocument.js +3 -23
- package/lib/nodes/html-document/HTMLDocument.js.map +1 -1
- package/lib/nodes/html-element/DatasetUtility.js +9 -12
- package/lib/nodes/html-element/DatasetUtility.js.map +1 -1
- package/lib/nodes/html-element/HTMLElement.js +232 -290
- package/lib/nodes/html-element/HTMLElement.js.map +1 -1
- package/lib/nodes/html-form-element/HTMLFormElement.js +170 -235
- package/lib/nodes/html-form-element/HTMLFormElement.js.map +1 -1
- package/lib/nodes/html-image-element/HTMLImageElement.js +178 -237
- package/lib/nodes/html-image-element/HTMLImageElement.js.map +1 -1
- package/lib/nodes/html-image-element/Image.js +7 -27
- package/lib/nodes/html-image-element/Image.js.map +1 -1
- package/lib/nodes/html-input-element/HTMLInputElement.d.ts +17 -6
- package/lib/nodes/html-input-element/HTMLInputElement.js +719 -866
- package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
- package/lib/nodes/html-input-element/HTMLInputElementValueSanitizer.js +9 -12
- package/lib/nodes/html-input-element/HTMLInputElementValueSanitizer.js.map +1 -1
- package/lib/nodes/html-input-element/HTMLInputElementValueStepping.js +5 -8
- package/lib/nodes/html-input-element/HTMLInputElementValueStepping.js.map +1 -1
- package/lib/nodes/html-input-element/IHTMLInputElement.d.ts +11 -1
- package/lib/nodes/html-input-element/ValidityState.js +47 -69
- package/lib/nodes/html-input-element/ValidityState.js.map +1 -1
- package/lib/nodes/html-label-element/HTMLLabelElement.js +53 -87
- package/lib/nodes/html-label-element/HTMLLabelElement.js.map +1 -1
- package/lib/nodes/html-link-element/HTMLLinkElement.js +197 -252
- package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
- package/lib/nodes/html-meta-element/HTMLMetaElement.js +66 -102
- package/lib/nodes/html-meta-element/HTMLMetaElement.js.map +1 -1
- package/lib/nodes/html-script-element/HTMLScriptElement.js +145 -193
- package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
- package/lib/nodes/html-script-element/ScriptUtility.js +58 -112
- package/lib/nodes/html-script-element/ScriptUtility.js.map +1 -1
- package/lib/nodes/html-slot-element/HTMLSlotElement.js +33 -65
- package/lib/nodes/html-slot-element/HTMLSlotElement.js.map +1 -1
- package/lib/nodes/html-style-element/HTMLStyleElement.js +75 -109
- package/lib/nodes/html-style-element/HTMLStyleElement.js.map +1 -1
- package/lib/nodes/html-template-element/HTMLTemplateElement.js +60 -99
- package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +349 -444
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
- package/lib/nodes/html-unknown-element/HTMLUnknownElement.js +17 -37
- package/lib/nodes/html-unknown-element/HTMLUnknownElement.js.map +1 -1
- package/lib/nodes/node/INode.d.ts +1 -0
- package/lib/nodes/node/Node.d.ts +6 -0
- package/lib/nodes/node/Node.js +193 -244
- package/lib/nodes/node/Node.js.map +1 -1
- package/lib/nodes/node/NodeList.js +4 -24
- package/lib/nodes/node/NodeList.js.map +1 -1
- package/lib/nodes/node/NodeListFactory.js +6 -9
- package/lib/nodes/node/NodeListFactory.js.map +1 -1
- package/lib/nodes/parent-node/ParentNodeUtility.js +43 -78
- package/lib/nodes/parent-node/ParentNodeUtility.js.map +1 -1
- package/lib/nodes/shadow-root/ShadowRoot.js +53 -83
- package/lib/nodes/shadow-root/ShadowRoot.js.map +1 -1
- package/lib/nodes/svg-document/SVGDocument.js +3 -23
- package/lib/nodes/svg-document/SVGDocument.js.map +1 -1
- package/lib/nodes/svg-element/DOMMatrix.js +3 -4
- package/lib/nodes/svg-element/DOMMatrix.js.map +1 -1
- package/lib/nodes/svg-element/SVGAngle.js +10 -11
- package/lib/nodes/svg-element/SVGAngle.js.map +1 -1
- package/lib/nodes/svg-element/SVGAnimatedRect.js +4 -5
- package/lib/nodes/svg-element/SVGAnimatedRect.js.map +1 -1
- package/lib/nodes/svg-element/SVGElement.js +58 -93
- package/lib/nodes/svg-element/SVGElement.js.map +1 -1
- package/lib/nodes/svg-element/SVGGraphicsElement.js +14 -32
- package/lib/nodes/svg-element/SVGGraphicsElement.js.map +1 -1
- package/lib/nodes/svg-element/SVGLength.js +16 -17
- package/lib/nodes/svg-element/SVGLength.js.map +1 -1
- package/lib/nodes/svg-element/SVGNumber.js +3 -4
- package/lib/nodes/svg-element/SVGNumber.js.map +1 -1
- package/lib/nodes/svg-element/SVGPoint.js +3 -4
- package/lib/nodes/svg-element/SVGPoint.js.map +1 -1
- package/lib/nodes/svg-element/SVGRect.js +3 -4
- package/lib/nodes/svg-element/SVGRect.js.map +1 -1
- package/lib/nodes/svg-element/SVGSVGElement.js +187 -248
- package/lib/nodes/svg-element/SVGSVGElement.js.map +1 -1
- package/lib/nodes/svg-element/SVGTransform.js +16 -17
- package/lib/nodes/svg-element/SVGTransform.js.map +1 -1
- package/lib/nodes/text/Text.js +20 -43
- package/lib/nodes/text/Text.js.map +1 -1
- package/lib/nodes/xml-document/XMLDocument.js +3 -23
- package/lib/nodes/xml-document/XMLDocument.js.map +1 -1
- package/lib/query-selector/QuerySelector.js +36 -44
- package/lib/query-selector/QuerySelector.js.map +1 -1
- package/lib/query-selector/SelectorItem.js +62 -66
- package/lib/query-selector/SelectorItem.js.map +1 -1
- package/lib/resize-observer/ResizeObserver.js +8 -11
- package/lib/resize-observer/ResizeObserver.js.map +1 -1
- package/lib/screen/Screen.js +3 -4
- package/lib/screen/Screen.js.map +1 -1
- package/lib/selection/Selection.js +29 -30
- package/lib/selection/Selection.js.map +1 -1
- package/lib/storage/Storage.js +22 -27
- package/lib/storage/Storage.js.map +1 -1
- package/lib/tree-walker/NodeFilterMask.js +1 -1
- package/lib/tree-walker/NodeFilterMask.js.map +1 -1
- package/lib/tree-walker/TreeWalker.js +30 -33
- package/lib/tree-walker/TreeWalker.js.map +1 -1
- package/lib/window/GlobalWindow.d.ts +84 -0
- package/lib/window/GlobalWindow.js +90 -0
- package/lib/window/GlobalWindow.js.map +1 -0
- package/lib/window/IWindow.d.ts +31 -18
- package/lib/window/VMGlobalPropertyScript.d.ts +2 -0
- package/lib/window/VMGlobalPropertyScript.js +65 -0
- package/lib/window/VMGlobalPropertyScript.js.map +1 -0
- package/lib/window/Window.d.ts +72 -105
- package/lib/window/Window.js +269 -489
- package/lib/window/Window.js.map +1 -1
- package/lib/xml-parser/XMLParser.js +65 -71
- package/lib/xml-parser/XMLParser.js.map +1 -1
- package/lib/xml-serializer/XMLSerializer.js +30 -37
- package/lib/xml-serializer/XMLSerializer.js.map +1 -1
- package/package.json +6 -7
- package/src/config/ElementTag.ts +2 -1
- package/src/config/NonImplemenetedElementClasses.ts +0 -1
- package/src/dom-parser/DOMParser.ts +4 -5
- package/src/event/IUIEventInit.ts +2 -2
- package/src/event/UIEvent.ts +2 -2
- package/src/fetch/FetchHandler.ts +3 -3
- package/src/fetch/ResourceFetchHandler.ts +3 -3
- package/src/index.ts +7 -3
- package/src/nodes/document/Document.ts +4 -4
- package/src/nodes/document/IDocument.ts +2 -2
- package/src/nodes/html-base-element/HTMLBaseElement.ts +61 -0
- package/src/nodes/html-base-element/IHTMLBaseElement.ts +21 -0
- package/src/nodes/html-input-element/HTMLInputElement.ts +37 -12
- package/src/nodes/html-input-element/IHTMLInputElement.ts +13 -1
- package/src/nodes/html-link-element/HTMLLinkElement.ts +8 -2
- package/src/nodes/html-script-element/ScriptUtility.ts +4 -4
- package/src/nodes/node/INode.ts +1 -0
- package/src/nodes/node/Node.ts +14 -0
- package/src/window/GlobalWindow.ts +82 -0
- package/src/window/IWindow.ts +26 -12
- package/src/window/VMGlobalPropertyScript.ts +62 -0
- package/src/window/Window.ts +106 -173
- package/tsconfig.json +1 -1
- package/lib/window/AsyncWindow.d.ts +0 -10
- package/lib/window/AsyncWindow.js +0 -38
- package/lib/window/AsyncWindow.js.map +0 -1
- package/src/window/AsyncWindow.ts +0 -17
package/lib/nodes/text/Text.js
CHANGED
@@ -1,55 +1,34 @@
|
|
1
1
|
"use strict";
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
3
|
-
var extendStatics = function (d, b) {
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
7
|
-
return extendStatics(d, b);
|
8
|
-
};
|
9
|
-
return function (d, b) {
|
10
|
-
if (typeof b !== "function" && b !== null)
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
12
|
-
extendStatics(d, b);
|
13
|
-
function __() { this.constructor = d; }
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
15
|
-
};
|
16
|
-
})();
|
17
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
18
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
19
4
|
};
|
20
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
21
|
-
|
22
|
-
|
6
|
+
const Node_1 = __importDefault(require("../node/Node"));
|
7
|
+
const CharacterData_1 = __importDefault(require("../character-data/CharacterData"));
|
23
8
|
/**
|
24
9
|
* Text node.
|
25
10
|
*/
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
11
|
+
class Text extends CharacterData_1.default {
|
12
|
+
constructor() {
|
13
|
+
super(...arguments);
|
14
|
+
this.nodeType = Node_1.default.TEXT_NODE;
|
15
|
+
}
|
16
|
+
/**
|
17
|
+
* Node name.
|
18
|
+
*
|
19
|
+
* @returns Node name.
|
20
|
+
*/
|
21
|
+
get nodeName() {
|
22
|
+
return '#text';
|
32
23
|
}
|
33
|
-
Object.defineProperty(Text.prototype, "nodeName", {
|
34
|
-
/**
|
35
|
-
* Node name.
|
36
|
-
*
|
37
|
-
* @returns Node name.
|
38
|
-
*/
|
39
|
-
get: function () {
|
40
|
-
return '#text';
|
41
|
-
},
|
42
|
-
enumerable: false,
|
43
|
-
configurable: true
|
44
|
-
});
|
45
24
|
/**
|
46
25
|
* Converts to string.
|
47
26
|
*
|
48
27
|
* @returns String.
|
49
28
|
*/
|
50
|
-
|
29
|
+
toString() {
|
51
30
|
return '[object Text]';
|
52
|
-
}
|
31
|
+
}
|
53
32
|
/**
|
54
33
|
* Clones a node.
|
55
34
|
*
|
@@ -57,11 +36,9 @@ var Text = /** @class */ (function (_super) {
|
|
57
36
|
* @param [deep=false] "true" to clone deep.
|
58
37
|
* @returns Cloned node.
|
59
38
|
*/
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
return Text;
|
65
|
-
}(CharacterData_1.default));
|
39
|
+
cloneNode(deep = false) {
|
40
|
+
return super.cloneNode(deep);
|
41
|
+
}
|
42
|
+
}
|
66
43
|
exports.default = Text;
|
67
44
|
//# sourceMappingURL=Text.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Text.js","sourceRoot":"","sources":["../../../src/nodes/text/Text.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"Text.js","sourceRoot":"","sources":["../../../src/nodes/text/Text.ts"],"names":[],"mappings":";;;;;AAAA,wDAAgC;AAChC,oFAA4D;AAG5D;;GAEG;AACH,MAAqB,IAAK,SAAQ,uBAAa;IAA/C;;QACiB,aAAQ,GAAG,cAAI,CAAC,SAAS,CAAC;IA8B3C,CAAC;IA5BA;;;;OAIG;IACH,IAAW,QAAQ;QAClB,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACd,OAAO,eAAe,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACI,SAAS,CAAC,IAAI,GAAG,KAAK;QAC5B,OAAa,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CACD;AA/BD,uBA+BC"}
|
@@ -1,33 +1,13 @@
|
|
1
1
|
"use strict";
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
3
|
-
var extendStatics = function (d, b) {
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
7
|
-
return extendStatics(d, b);
|
8
|
-
};
|
9
|
-
return function (d, b) {
|
10
|
-
if (typeof b !== "function" && b !== null)
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
12
|
-
extendStatics(d, b);
|
13
|
-
function __() { this.constructor = d; }
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
15
|
-
};
|
16
|
-
})();
|
17
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
18
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
19
4
|
};
|
20
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
21
|
-
|
6
|
+
const Document_1 = __importDefault(require("../document/Document"));
|
22
7
|
/**
|
23
8
|
* Document.
|
24
9
|
*/
|
25
|
-
|
26
|
-
|
27
|
-
function XMLDocument() {
|
28
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
29
|
-
}
|
30
|
-
return XMLDocument;
|
31
|
-
}(Document_1.default));
|
10
|
+
class XMLDocument extends Document_1.default {
|
11
|
+
}
|
32
12
|
exports.default = XMLDocument;
|
33
13
|
//# sourceMappingURL=XMLDocument.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"XMLDocument.js","sourceRoot":"","sources":["../../../src/nodes/xml-document/XMLDocument.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"XMLDocument.js","sourceRoot":"","sources":["../../../src/nodes/xml-document/XMLDocument.ts"],"names":[],"mappings":";;;;;AAAA,oEAA4C;AAE5C;;GAEG;AACH,MAAqB,WAAY,SAAQ,kBAAQ;CAAG;AAApD,8BAAoD"}
|
@@ -3,10 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
const Node_1 = __importDefault(require("../nodes/node/Node"));
|
7
|
+
const SelectorItem_1 = __importDefault(require("./SelectorItem"));
|
8
|
+
const NodeListFactory_1 = __importDefault(require("../nodes/node/NodeListFactory"));
|
9
|
+
const SELECTOR_PART_REGEXP = /(\[[^\]]+\]|[a-zA-Z0-9-_.#"*:()\]]+)|([ ,>]+)/g;
|
10
10
|
// The above one seem to work fine and is faster, but this one can be useful if more rules need to be added as it is more "correct".
|
11
11
|
// Const SELECTOR_PART_REGEXP = /([a-zA-Z0-9-$.]+|\[[a-zA-Z0-9-]+\]|\[[a-zA-Z0-9$-~|^$*]+[ ]*=[ ]*"[^"]+"\])|([ ,]+)/g;
|
12
12
|
/**
|
@@ -14,9 +14,7 @@ var SELECTOR_PART_REGEXP = /(\[[^\]]+\]|[a-zA-Z0-9-_.#"*:()\]]+)|([ ,>]+)/g;
|
|
14
14
|
*
|
15
15
|
* @class QuerySelector
|
16
16
|
*/
|
17
|
-
|
18
|
-
function QuerySelector() {
|
19
|
-
}
|
17
|
+
class QuerySelector {
|
20
18
|
/**
|
21
19
|
* Finds elements based on a query selector.
|
22
20
|
*
|
@@ -24,19 +22,17 @@ var QuerySelector = /** @class */ (function () {
|
|
24
22
|
* @param selector Selector.
|
25
23
|
* @returns HTML elements.
|
26
24
|
*/
|
27
|
-
|
28
|
-
|
29
|
-
for (
|
30
|
-
|
31
|
-
for (var _b = 0, _c = this.findAll(node, [node], parts); _b < _c.length; _b++) {
|
32
|
-
var element = _c[_b];
|
25
|
+
static querySelectorAll(node, selector) {
|
26
|
+
const matches = NodeListFactory_1.default.create();
|
27
|
+
for (const parts of this.getSelectorParts(selector)) {
|
28
|
+
for (const element of this.findAll(node, [node], parts)) {
|
33
29
|
if (!matches.includes(element)) {
|
34
30
|
matches.push(element);
|
35
31
|
}
|
36
32
|
}
|
37
33
|
}
|
38
34
|
return matches;
|
39
|
-
}
|
35
|
+
}
|
40
36
|
/**
|
41
37
|
* Finds an element based on a query selector.
|
42
38
|
*
|
@@ -44,16 +40,15 @@ var QuerySelector = /** @class */ (function () {
|
|
44
40
|
* @param selector Selector.
|
45
41
|
* @returns HTML element.
|
46
42
|
*/
|
47
|
-
|
48
|
-
for (
|
49
|
-
|
50
|
-
var match = this.findFirst(node, [node], parts);
|
43
|
+
static querySelector(node, selector) {
|
44
|
+
for (const parts of this.getSelectorParts(selector)) {
|
45
|
+
const match = this.findFirst(node, [node], parts);
|
51
46
|
if (match) {
|
52
47
|
return match;
|
53
48
|
}
|
54
49
|
}
|
55
50
|
return null;
|
56
|
-
}
|
51
|
+
}
|
57
52
|
/**
|
58
53
|
* Finds elements based on a query selector for a part of a list of selectors separated with comma.
|
59
54
|
*
|
@@ -63,15 +58,14 @@ var QuerySelector = /** @class */ (function () {
|
|
63
58
|
* @param [selectorItem] Selector item.
|
64
59
|
* @returns HTML elements.
|
65
60
|
*/
|
66
|
-
|
67
|
-
|
61
|
+
static findAll(rootNode, nodes, selectorParts, selectorItem) {
|
62
|
+
const isDirectChild = selectorParts[0] === '>';
|
68
63
|
if (isDirectChild) {
|
69
64
|
selectorParts = selectorParts.slice(1);
|
70
65
|
}
|
71
|
-
|
72
|
-
|
73
|
-
for (
|
74
|
-
var node = nodes_1[_i];
|
66
|
+
const selector = selectorItem || new SelectorItem_1.default(selectorParts[0]);
|
67
|
+
let matched = [];
|
68
|
+
for (const node of nodes) {
|
75
69
|
if (node.nodeType === Node_1.default.ELEMENT_NODE) {
|
76
70
|
if (selector.match(node)) {
|
77
71
|
if (selectorParts.length === 1) {
|
@@ -89,7 +83,7 @@ var QuerySelector = /** @class */ (function () {
|
|
89
83
|
}
|
90
84
|
}
|
91
85
|
return matched;
|
92
|
-
}
|
86
|
+
}
|
93
87
|
/**
|
94
88
|
* Finds an element based on a query selector for a part of a list of selectors separated with comma.
|
95
89
|
*
|
@@ -100,14 +94,13 @@ var QuerySelector = /** @class */ (function () {
|
|
100
94
|
* @param [selectorItem] Selector item.
|
101
95
|
* @returns HTML element.
|
102
96
|
*/
|
103
|
-
|
104
|
-
|
97
|
+
static findFirst(rootNode, nodes, selectorParts, selectorItem) {
|
98
|
+
const isDirectChild = selectorParts[0] === '>';
|
105
99
|
if (isDirectChild) {
|
106
100
|
selectorParts = selectorParts.slice(1);
|
107
101
|
}
|
108
|
-
|
109
|
-
for (
|
110
|
-
var node = nodes_2[_i];
|
102
|
+
const selector = selectorItem || new SelectorItem_1.default(selectorParts[0]);
|
103
|
+
for (const node of nodes) {
|
111
104
|
if (node.nodeType === Node_1.default.ELEMENT_NODE && selector.match(node)) {
|
112
105
|
if (selectorParts.length === 1) {
|
113
106
|
if (rootNode !== node) {
|
@@ -115,39 +108,39 @@ var QuerySelector = /** @class */ (function () {
|
|
115
108
|
}
|
116
109
|
}
|
117
110
|
else {
|
118
|
-
|
111
|
+
const childSelector = this.findFirst(rootNode, node.children, selectorParts.slice(1), null);
|
119
112
|
if (childSelector) {
|
120
113
|
return childSelector;
|
121
114
|
}
|
122
115
|
}
|
123
116
|
}
|
124
117
|
if (!isDirectChild && node['children']) {
|
125
|
-
|
118
|
+
const childSelector = this.findFirst(rootNode, node['children'], selectorParts, selector);
|
126
119
|
if (childSelector) {
|
127
120
|
return childSelector;
|
128
121
|
}
|
129
122
|
}
|
130
123
|
}
|
131
124
|
return null;
|
132
|
-
}
|
125
|
+
}
|
133
126
|
/**
|
134
127
|
* Splits a selector string into groups and parts.
|
135
128
|
*
|
136
129
|
* @param selector Selector.
|
137
130
|
* @returns HTML element.
|
138
131
|
*/
|
139
|
-
|
132
|
+
static getSelectorParts(selector) {
|
140
133
|
if (selector === '*' || (!selector.includes(',') && !selector.includes(' '))) {
|
141
134
|
return [[selector]];
|
142
135
|
}
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
136
|
+
const regexp = new RegExp(SELECTOR_PART_REGEXP);
|
137
|
+
const groups = [];
|
138
|
+
let currentSelector = '';
|
139
|
+
let parts = [];
|
140
|
+
let match;
|
148
141
|
while ((match = regexp.exec(selector))) {
|
149
142
|
if (match[2]) {
|
150
|
-
|
143
|
+
const trimmed = match[2].trim();
|
151
144
|
parts.push(currentSelector);
|
152
145
|
currentSelector = '';
|
153
146
|
if (trimmed === ',') {
|
@@ -169,8 +162,7 @@ var QuerySelector = /** @class */ (function () {
|
|
169
162
|
groups.push(parts);
|
170
163
|
}
|
171
164
|
return groups;
|
172
|
-
}
|
173
|
-
|
174
|
-
}());
|
165
|
+
}
|
166
|
+
}
|
175
167
|
exports.default = QuerySelector;
|
176
168
|
//# sourceMappingURL=QuerySelector.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"QuerySelector.js","sourceRoot":"","sources":["../../src/query-selector/QuerySelector.ts"],"names":[],"mappings":";;;;;AAGA,
|
1
|
+
{"version":3,"file":"QuerySelector.js","sourceRoot":"","sources":["../../src/query-selector/QuerySelector.ts"],"names":[],"mappings":"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"}
|
@@ -3,24 +3,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
const DOMException_1 = __importDefault(require("../exception/DOMException"));
|
7
|
+
const ATTRIBUTE_REGEXP = /\[([a-zA-Z0-9-_]+)\]|\[([a-zA-Z0-9-_]+)([~|^$*]{0,1})[ ]*=[ ]*["']{0,1}([^"']+)["']{0,1}\]/g;
|
8
|
+
const ATTRIBUTE_NAME_REGEXP = /[^a-zA-Z0-9-_$]/;
|
9
|
+
const PSUEDO_REGEXP = /:([a-zA-Z-]+)\(([0-9n+-]+|odd|even)\)|:not\(([^)]+)\)|:([a-zA-Z-]+)/g;
|
10
|
+
const CLASS_REGEXP = /\.([a-zA-Z0-9-_$]+)/g;
|
11
|
+
const TAG_NAME_REGEXP = /^[a-zA-Z0-9-]+/;
|
12
12
|
/**
|
13
13
|
* Selector item.
|
14
14
|
*/
|
15
|
-
|
15
|
+
class SelectorItem {
|
16
16
|
/**
|
17
17
|
* Constructor.
|
18
18
|
*
|
19
19
|
* @param selector Selector.
|
20
20
|
*/
|
21
|
-
|
21
|
+
constructor(selector) {
|
22
22
|
this.tagName = null;
|
23
|
-
|
23
|
+
const [baseSelector, psuedoSelector] = selector.split(':');
|
24
24
|
this.isAll = baseSelector === '*';
|
25
25
|
this.isID = !this.isAll ? selector.startsWith('#') : false;
|
26
26
|
this.isAttribute = !this.isAll && !this.isID && baseSelector.includes('[');
|
@@ -38,8 +38,8 @@ var SelectorItem = /** @class */ (function () {
|
|
38
38
|
* @param element HTML element.
|
39
39
|
* @returns TRUE if matching.
|
40
40
|
*/
|
41
|
-
|
42
|
-
|
41
|
+
match(element) {
|
42
|
+
const selector = this.selector;
|
43
43
|
// Is all (*)
|
44
44
|
if (this.isAll) {
|
45
45
|
return true;
|
@@ -67,7 +67,7 @@ var SelectorItem = /** @class */ (function () {
|
|
67
67
|
return false;
|
68
68
|
}
|
69
69
|
return true;
|
70
|
-
}
|
70
|
+
}
|
71
71
|
/**
|
72
72
|
* Matches a psuedo selector.
|
73
73
|
*
|
@@ -75,11 +75,11 @@ var SelectorItem = /** @class */ (function () {
|
|
75
75
|
* @param selector Selector.
|
76
76
|
* @returns True if it is a match.
|
77
77
|
*/
|
78
|
-
|
79
|
-
|
80
|
-
|
78
|
+
matchesPsuedo(element, selector) {
|
79
|
+
const regexp = new RegExp(PSUEDO_REGEXP, 'g');
|
80
|
+
let match;
|
81
81
|
while ((match = regexp.exec(selector))) {
|
82
|
-
|
82
|
+
const isNotClass = match[3] && match[3].trim()[0] === '.';
|
83
83
|
if (match[1] && !this.matchesNthChild(element, match[1], match[2])) {
|
84
84
|
return false;
|
85
85
|
}
|
@@ -93,7 +93,7 @@ var SelectorItem = /** @class */ (function () {
|
|
93
93
|
}
|
94
94
|
}
|
95
95
|
return true;
|
96
|
-
}
|
96
|
+
}
|
97
97
|
/**
|
98
98
|
* Matches a nth-child selector.
|
99
99
|
*
|
@@ -102,48 +102,48 @@ var SelectorItem = /** @class */ (function () {
|
|
102
102
|
* @param place Place.
|
103
103
|
* @returns True if it is a match.
|
104
104
|
*/
|
105
|
-
|
106
|
-
|
105
|
+
matchesNthChild(element, psuedo, place) {
|
106
|
+
let children = element.parentNode ? element.parentNode.children : [];
|
107
107
|
switch (psuedo.toLowerCase()) {
|
108
108
|
case 'nth-of-type':
|
109
|
-
children = children.filter(
|
109
|
+
children = children.filter((child) => child.tagName === element.tagName);
|
110
110
|
break;
|
111
111
|
case 'nth-last-child':
|
112
112
|
children = children.reverse();
|
113
113
|
break;
|
114
114
|
case 'nth-last-of-type':
|
115
|
-
children = children.filter(
|
115
|
+
children = children.filter((child) => child.tagName === element.tagName).reverse();
|
116
116
|
break;
|
117
117
|
}
|
118
118
|
if (place === 'odd') {
|
119
|
-
|
119
|
+
const index = children.indexOf(element);
|
120
120
|
return index !== -1 && (index + 1) % 2 !== 0;
|
121
121
|
}
|
122
122
|
else if (place === 'even') {
|
123
|
-
|
123
|
+
const index = children.indexOf(element);
|
124
124
|
return index !== -1 && (index + 1) % 2 === 0;
|
125
125
|
}
|
126
126
|
else if (place.includes('n')) {
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
127
|
+
const [a, b] = place.replace(/ /g, '').split('n');
|
128
|
+
const childIndex = children.indexOf(element);
|
129
|
+
const aNumber = Number(a);
|
130
|
+
const bNumber = b !== undefined ? Number(b) : 0;
|
131
131
|
if (isNaN(aNumber) || isNaN(bNumber)) {
|
132
|
-
throw new DOMException_1.default(
|
132
|
+
throw new DOMException_1.default(`The selector "${this.selector}" is not valid.`);
|
133
133
|
}
|
134
|
-
for (
|
134
|
+
for (let i = 0, max = children.length; i <= max; i += aNumber) {
|
135
135
|
if (childIndex === i + bNumber - 1) {
|
136
136
|
return true;
|
137
137
|
}
|
138
138
|
}
|
139
139
|
return false;
|
140
140
|
}
|
141
|
-
|
141
|
+
const number = Number(place);
|
142
142
|
if (isNaN(number)) {
|
143
|
-
throw new DOMException_1.default(
|
143
|
+
throw new DOMException_1.default(`The selector "${this.selector}" is not valid.`);
|
144
144
|
}
|
145
145
|
return children[number - 1] === element;
|
146
|
-
}
|
146
|
+
}
|
147
147
|
/**
|
148
148
|
* Matches a psuedo selector expression.
|
149
149
|
*
|
@@ -151,8 +151,8 @@ var SelectorItem = /** @class */ (function () {
|
|
151
151
|
* @param psuedo Psuedo name.
|
152
152
|
* @returns True if it is a match.
|
153
153
|
*/
|
154
|
-
|
155
|
-
|
154
|
+
matchesPsuedoExpression(element, psuedo) {
|
155
|
+
const parent = element.parentNode;
|
156
156
|
if (!parent) {
|
157
157
|
return false;
|
158
158
|
}
|
@@ -160,31 +160,29 @@ var SelectorItem = /** @class */ (function () {
|
|
160
160
|
case 'first-child':
|
161
161
|
return parent.children[0] === element;
|
162
162
|
case 'last-child':
|
163
|
-
|
163
|
+
const lastChildChildren = parent.children;
|
164
164
|
return lastChildChildren[lastChildChildren.length - 1] === element;
|
165
165
|
case 'only-child':
|
166
|
-
|
166
|
+
const onlyChildChildren = parent.children;
|
167
167
|
return onlyChildChildren.length === 1 && onlyChildChildren[0] === element;
|
168
168
|
case 'first-of-type':
|
169
|
-
for (
|
170
|
-
var child = _a[_i];
|
169
|
+
for (const child of parent.children) {
|
171
170
|
if (child.tagName === element.tagName) {
|
172
171
|
return child === element;
|
173
172
|
}
|
174
173
|
}
|
175
174
|
return false;
|
176
175
|
case 'last-of-type':
|
177
|
-
for (
|
178
|
-
|
176
|
+
for (let i = parent.children.length - 1; i >= 0; i--) {
|
177
|
+
const child = parent.children[i];
|
179
178
|
if (child.tagName === element.tagName) {
|
180
179
|
return child === element;
|
181
180
|
}
|
182
181
|
}
|
183
182
|
return false;
|
184
183
|
case 'only-of-type':
|
185
|
-
|
186
|
-
for (
|
187
|
-
var child = _c[_b];
|
184
|
+
let isFound = false;
|
185
|
+
for (const child of parent.children) {
|
188
186
|
if (child.tagName === element.tagName) {
|
189
187
|
if (isFound || child !== element) {
|
190
188
|
return false;
|
@@ -195,7 +193,7 @@ var SelectorItem = /** @class */ (function () {
|
|
195
193
|
return isFound;
|
196
194
|
}
|
197
195
|
return false;
|
198
|
-
}
|
196
|
+
}
|
199
197
|
/**
|
200
198
|
* Matches attribute.
|
201
199
|
*
|
@@ -203,11 +201,11 @@ var SelectorItem = /** @class */ (function () {
|
|
203
201
|
* @param selector Selector.
|
204
202
|
* @returns True if it is a match.
|
205
203
|
*/
|
206
|
-
|
207
|
-
|
208
|
-
|
204
|
+
matchesAttribute(element, selector) {
|
205
|
+
const regexp = new RegExp(ATTRIBUTE_REGEXP, 'g');
|
206
|
+
let match;
|
209
207
|
while ((match = regexp.exec(selector))) {
|
210
|
-
|
208
|
+
const isPsuedo = match.index > 0 && selector[match.index - 1] === '(';
|
211
209
|
if (!isPsuedo &&
|
212
210
|
((match[1] && !this.matchesAttributeName(element, match[1])) ||
|
213
211
|
(match[2] && !this.matchesAttributeNameAndValue(element, match[2], match[4], match[3])))) {
|
@@ -215,7 +213,7 @@ var SelectorItem = /** @class */ (function () {
|
|
215
213
|
}
|
216
214
|
}
|
217
215
|
return true;
|
218
|
-
}
|
216
|
+
}
|
219
217
|
/**
|
220
218
|
* Matches class.
|
221
219
|
*
|
@@ -223,17 +221,17 @@ var SelectorItem = /** @class */ (function () {
|
|
223
221
|
* @param selector Selector.
|
224
222
|
* @returns True if it is a match.
|
225
223
|
*/
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
224
|
+
matchesClass(element, selector) {
|
225
|
+
const regexp = new RegExp(CLASS_REGEXP, 'g');
|
226
|
+
const classList = element.className.split(' ');
|
227
|
+
let match;
|
230
228
|
while ((match = regexp.exec(selector.split(':')[0]))) {
|
231
229
|
if (!classList.includes(match[1])) {
|
232
230
|
return false;
|
233
231
|
}
|
234
232
|
}
|
235
233
|
return true;
|
236
|
-
}
|
234
|
+
}
|
237
235
|
/**
|
238
236
|
* Matches attribute name only.
|
239
237
|
*
|
@@ -241,12 +239,12 @@ var SelectorItem = /** @class */ (function () {
|
|
241
239
|
* @param attributeName Attribute name.
|
242
240
|
* @returns True if it is a match.
|
243
241
|
*/
|
244
|
-
|
242
|
+
matchesAttributeName(element, attributeName) {
|
245
243
|
if (ATTRIBUTE_NAME_REGEXP.test(attributeName)) {
|
246
|
-
throw new DOMException_1.default(
|
244
|
+
throw new DOMException_1.default(`The selector "${this.selector}" is not valid.`);
|
247
245
|
}
|
248
246
|
return !!element._attributes[attributeName.toLowerCase()];
|
249
|
-
}
|
247
|
+
}
|
250
248
|
/** .
|
251
249
|
*
|
252
250
|
* Matches attribute name and value.
|
@@ -264,12 +262,11 @@ var SelectorItem = /** @class */ (function () {
|
|
264
262
|
* @param attributeValue
|
265
263
|
* @param matchType
|
266
264
|
*/
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
var value = attributeValue;
|
265
|
+
matchesAttributeNameAndValue(element, attributeName, attributeValue, matchType = null) {
|
266
|
+
const attribute = element._attributes[attributeName.toLowerCase()];
|
267
|
+
const value = attributeValue;
|
271
268
|
if (ATTRIBUTE_NAME_REGEXP.test(attributeName)) {
|
272
|
-
throw new DOMException_1.default(
|
269
|
+
throw new DOMException_1.default(`The selector "${this.selector}" is not valid.`);
|
273
270
|
}
|
274
271
|
if (!attribute) {
|
275
272
|
return false;
|
@@ -281,7 +278,7 @@ var SelectorItem = /** @class */ (function () {
|
|
281
278
|
return attribute.value && attribute.value.split(' ').includes(value);
|
282
279
|
// [attribute|="value"] - Starts with the specified word.
|
283
280
|
case '|':
|
284
|
-
return attribute && attribute.value && new RegExp(
|
281
|
+
return attribute && attribute.value && new RegExp(`^${value}[- ]`).test(attribute.value);
|
285
282
|
// [attribute^="value"] - Begins with a specified value.
|
286
283
|
case '^':
|
287
284
|
return attribute && attribute.value && attribute.value.startsWith(value);
|
@@ -294,8 +291,7 @@ var SelectorItem = /** @class */ (function () {
|
|
294
291
|
}
|
295
292
|
}
|
296
293
|
return attribute && attribute.value === value;
|
297
|
-
}
|
298
|
-
|
299
|
-
}());
|
294
|
+
}
|
295
|
+
}
|
300
296
|
exports.default = SelectorItem;
|
301
297
|
//# sourceMappingURL=SelectorItem.js.map
|