happy-dom 2.24.5 → 2.26.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.

Files changed (79) hide show
  1. package/lib/event/EventTarget.d.ts +9 -0
  2. package/lib/event/EventTarget.js +11 -0
  3. package/lib/event/EventTarget.js.map +1 -1
  4. package/lib/event/NonImplementedEventTypes.js +0 -1
  5. package/lib/event/NonImplementedEventTypes.js.map +1 -1
  6. package/lib/event/events/IPointerEventInit.d.ts +13 -0
  7. package/lib/event/events/IPointerEventInit.js +3 -0
  8. package/lib/event/events/IPointerEventInit.js.map +1 -0
  9. package/lib/event/events/PointerEvent.d.ts +24 -0
  10. package/lib/event/events/PointerEvent.js +64 -0
  11. package/lib/event/events/PointerEvent.js.map +1 -0
  12. package/lib/nodes/document/Document.d.ts +15 -1
  13. package/lib/nodes/document/Document.js +26 -1
  14. package/lib/nodes/document/Document.js.map +1 -1
  15. package/lib/nodes/document/IDocument.d.ts +1 -0
  16. package/lib/nodes/document-fragment/DocumentFragment.d.ts +1 -0
  17. package/lib/nodes/document-fragment/DocumentFragment.js +4 -1
  18. package/lib/nodes/document-fragment/DocumentFragment.js.map +1 -1
  19. package/lib/nodes/element/Element.d.ts +7 -0
  20. package/lib/nodes/element/Element.js +45 -4
  21. package/lib/nodes/element/Element.js.map +1 -1
  22. package/lib/nodes/element/IElement.d.ts +7 -0
  23. package/lib/nodes/html-element/HTMLElement.js +16 -4
  24. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  25. package/lib/nodes/html-input-element/HTMLInputElement.d.ts +9 -6
  26. package/lib/nodes/html-input-element/HTMLInputElement.js +18 -8
  27. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  28. package/lib/nodes/html-input-element/IHTMLInputElement.d.ts +0 -1
  29. package/lib/nodes/html-link-element/HTMLLinkElement.d.ts +5 -12
  30. package/lib/nodes/html-link-element/HTMLLinkElement.js +39 -68
  31. package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
  32. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts +5 -12
  33. package/lib/nodes/html-script-element/HTMLScriptElement.js +21 -49
  34. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  35. package/lib/nodes/html-style-element/HTMLStyleElement.js +1 -1
  36. package/lib/nodes/html-style-element/HTMLStyleElement.js.map +1 -1
  37. package/lib/nodes/node/INode.d.ts +1 -1
  38. package/lib/nodes/node/Node.d.ts +8 -13
  39. package/lib/nodes/node/Node.js +57 -63
  40. package/lib/nodes/node/Node.js.map +1 -1
  41. package/lib/nodes/shadow-root/ShadowRoot.d.ts +7 -0
  42. package/lib/nodes/shadow-root/ShadowRoot.js +16 -0
  43. package/lib/nodes/shadow-root/ShadowRoot.js.map +1 -1
  44. package/lib/nodes/svg-element/ISVGElement.d.ts +2 -0
  45. package/lib/nodes/svg-element/SVGElement.d.ts +24 -0
  46. package/lib/nodes/svg-element/SVGElement.js +45 -1
  47. package/lib/nodes/svg-element/SVGElement.js.map +1 -1
  48. package/lib/query-selector/SelectorItem.d.ts +8 -0
  49. package/lib/query-selector/SelectorItem.js +29 -11
  50. package/lib/query-selector/SelectorItem.js.map +1 -1
  51. package/lib/window/Window.d.ts +2 -0
  52. package/lib/window/Window.js +2 -0
  53. package/lib/window/Window.js.map +1 -1
  54. package/lib/xml-parser/XMLParser.js +1 -1
  55. package/lib/xml-parser/XMLParser.js.map +1 -1
  56. package/package.json +2 -2
  57. package/src/event/EventTarget.ts +12 -0
  58. package/src/event/NonImplementedEventTypes.ts +0 -1
  59. package/src/event/events/IPointerEventInit.ts +14 -0
  60. package/src/event/events/PointerEvent.ts +42 -0
  61. package/src/nodes/document/Document.ts +21 -1
  62. package/src/nodes/document/IDocument.ts +1 -0
  63. package/src/nodes/document-fragment/DocumentFragment.ts +4 -1
  64. package/src/nodes/element/Element.ts +48 -4
  65. package/src/nodes/element/IElement.ts +8 -0
  66. package/src/nodes/html-element/HTMLElement.ts +21 -4
  67. package/src/nodes/html-input-element/HTMLInputElement.ts +21 -9
  68. package/src/nodes/html-input-element/IHTMLInputElement.ts +0 -1
  69. package/src/nodes/html-link-element/HTMLLinkElement.ts +46 -73
  70. package/src/nodes/html-script-element/HTMLScriptElement.ts +24 -49
  71. package/src/nodes/html-style-element/HTMLStyleElement.ts +1 -1
  72. package/src/nodes/node/INode.ts +1 -1
  73. package/src/nodes/node/Node.ts +60 -62
  74. package/src/nodes/shadow-root/ShadowRoot.ts +14 -0
  75. package/src/nodes/svg-element/ISVGElement.ts +2 -0
  76. package/src/nodes/svg-element/SVGElement.ts +47 -0
  77. package/src/query-selector/SelectorItem.ts +38 -19
  78. package/src/window/Window.ts +2 -0
  79. package/src/xml-parser/XMLParser.ts +1 -1
@@ -131,7 +131,7 @@ var XMLParser = /** @class */ (function () {
131
131
  var lastIndex = 0;
132
132
  var match;
133
133
  while ((match = commentRegExp.exec(text))) {
134
- if (match.index > 0) {
134
+ if (match.index > 0 && lastIndex !== match.index) {
135
135
  var textNode = document.createTextNode(text.substring(lastIndex, match.index));
136
136
  nodes.push(textNode);
137
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"XMLParser.js","sourceRoot":"","sources":["../../src/xml-parser/XMLParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"XMLParser.js","sourceRoot":"","sources":["../../src/xml-parser/XMLParser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "happy-dom",
3
- "version": "2.24.5",
3
+ "version": "2.26.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://github.com/capricorn86/happy-dom",
6
6
  "repository": "https://github.com/capricorn86/happy-dom",
@@ -74,5 +74,5 @@
74
74
  "ts-jest": "^26.5.6",
75
75
  "typescript": "^4.2.4"
76
76
  },
77
- "gitHead": "e0f4f0203b1a258596eff7d2ae322f4947381df7"
77
+ "gitHead": "25625b3efdb5bc92944e668aeb1ee94983a63d81"
78
78
  }
@@ -67,4 +67,16 @@ export default abstract class EventTarget implements IEventTarget {
67
67
 
68
68
  return !(event.cancelable && event.defaultPrevented);
69
69
  }
70
+
71
+ /**
72
+ * Adds an event listener.
73
+ *
74
+ * This is only supported by IE8- and Opera, but for some reason React uses it and calls it, so therefore we will keep support for it until they stop using it.
75
+ *
76
+ * @param type Event type.
77
+ * @param listener Listener.
78
+ */
79
+ public attachEvent(type: string, listener: ((event: Event) => void) | IEventListener): void {
80
+ this.addEventListener(type.replace('on', ''), listener);
81
+ }
70
82
  }
@@ -25,7 +25,6 @@ export default [
25
25
  'OverconstrainedError',
26
26
  'PageTransitionEvent',
27
27
  'PaymentRequestUpdateEvent',
28
- 'PointerEvent',
29
28
  'PopStateEvent',
30
29
  'ProgressEvent',
31
30
  'RelatedEvent',
@@ -0,0 +1,14 @@
1
+ import IMouseEventInit from './IMouseEventInit';
2
+
3
+ export default interface IPointerEventInit extends IMouseEventInit {
4
+ pointerId?: number;
5
+ width?: number;
6
+ height?: number;
7
+ pressure?: number;
8
+ tangentialPressure?: number;
9
+ tiltX?: number;
10
+ tiltY?: number;
11
+ twist?: number;
12
+ pointerType?: string;
13
+ isPrimary?: boolean;
14
+ }
@@ -0,0 +1,42 @@
1
+ import MouseEvent from './MouseEvent';
2
+ import IPointerEventInit from './IPointerEventInit';
3
+
4
+ /**
5
+ *
6
+ */
7
+ export default class PointerEvent extends MouseEvent {
8
+ public readonly pointerId: number = 0;
9
+ public readonly width: number = 0;
10
+ public readonly height: number = 0;
11
+ public readonly pressure: number = 0;
12
+ public readonly tangentialPressure: number = 0;
13
+ public readonly tiltX: number = 0;
14
+ public readonly tiltY: number = 0;
15
+ public readonly twist: number = 0;
16
+ public readonly pointerType: string = '';
17
+ public readonly isPrimary: boolean = false;
18
+
19
+ /**
20
+ * Constructor.
21
+ *
22
+ * @param type Event type.
23
+ * @param [eventInit] Event init.
24
+ */
25
+ constructor(type: string, eventInit: IPointerEventInit = null) {
26
+ super(type, eventInit);
27
+
28
+ if (eventInit) {
29
+ this.pointerId = eventInit.pointerId !== undefined ? eventInit.pointerId : 0;
30
+ this.width = eventInit.width !== undefined ? eventInit.width : 0;
31
+ this.height = eventInit.height !== undefined ? eventInit.height : 0;
32
+ this.pressure = eventInit.pressure !== undefined ? eventInit.pressure : 0;
33
+ this.tangentialPressure =
34
+ eventInit.tangentialPressure !== undefined ? eventInit.tangentialPressure : 0;
35
+ this.tiltX = eventInit.tiltX !== undefined ? eventInit.tiltX : 0;
36
+ this.tiltY = eventInit.tiltY !== undefined ? eventInit.tiltY : 0;
37
+ this.twist = eventInit.twist !== undefined ? eventInit.twist : 0;
38
+ this.pointerType = eventInit.pointerType !== undefined ? eventInit.pointerType : '';
39
+ this.isPrimary = eventInit.isPrimary || eventInit.isPrimary;
40
+ }
41
+ }
42
+ }
@@ -33,6 +33,7 @@ import IHTMLLinkElement from '../html-link-element/IHTMLLinkElement';
33
33
  import IHTMLStyleElement from '../html-style-element/IHTMLStyleElement';
34
34
  import DocumentReadyStateEnum from './DocumentReadyStateEnum';
35
35
  import DocumentReadyStateManager from './DocumentReadyStateManager';
36
+ import Location from '../../location/Location';
36
37
 
37
38
  /**
38
39
  * Document.
@@ -44,8 +45,9 @@ export default class Document extends Node implements IDocument {
44
45
  public implementation: DOMImplementation;
45
46
  public readonly children: IHTMLCollection<IElement> = HTMLCollectionFactory.create();
46
47
  public readonly readyState = DocumentReadyStateEnum.interactive;
48
+ public readonly isConnected: boolean = true;
47
49
  public _readyStateManager: DocumentReadyStateManager = null;
48
- protected _isConnected = true;
50
+ public _activeElement: IHTMLElement = null;
49
51
  protected _isFirstWrite = true;
50
52
  protected _isFirstWriteAfterOpen = false;
51
53
  private _defaultView: Window = null;
@@ -209,6 +211,24 @@ export default class Document extends Node implements IDocument {
209
211
  return styleSheets;
210
212
  }
211
213
 
214
+ /**
215
+ * Returns active element.
216
+ *
217
+ * @returns Active element.
218
+ */
219
+ public get activeElement(): IHTMLElement {
220
+ return this._activeElement || this.body || this.documentElement || null;
221
+ }
222
+
223
+ /**
224
+ * Returns location.
225
+ *
226
+ * @returns Location.
227
+ */
228
+ public get location(): Location {
229
+ return this._defaultView.location;
230
+ }
231
+
212
232
  /**
213
233
  * Inserts a set of Node objects or DOMString objects after the last child of the ParentNode. DOMString objects are inserted as equivalent Text nodes.
214
234
  *
@@ -23,6 +23,7 @@ export default interface IDocument extends IParentNode {
23
23
  readonly doctype: IDocumentType;
24
24
  readonly body: IHTMLElement;
25
25
  readonly head: IHTMLElement;
26
+ readonly activeElement: IHTMLElement;
26
27
 
27
28
  /**
28
29
  * Replaces the document HTML with new HTML.
@@ -13,6 +13,7 @@ import HTMLCollectionFactory from '../element/HTMLCollectionFactory';
13
13
  export default class DocumentFragment extends Node implements IDocumentFragment {
14
14
  public nodeType = Node.DOCUMENT_FRAGMENT_NODE;
15
15
  public readonly children: IHTMLCollection<IElement> = HTMLCollectionFactory.create();
16
+ public _rootNode: INode = this;
16
17
 
17
18
  /**
18
19
  * Last element child.
@@ -65,7 +66,9 @@ export default class DocumentFragment extends Node implements IDocumentFragment
65
66
  for (const child of this.childNodes.slice()) {
66
67
  this.removeChild(child);
67
68
  }
68
- this.appendChild(this.ownerDocument.createTextNode(textContent));
69
+ if (textContent) {
70
+ this.appendChild(this.ownerDocument.createTextNode(textContent));
71
+ }
69
72
  }
70
73
 
71
74
  /**
@@ -94,7 +94,7 @@ export default class Element extends Node implements IElement {
94
94
  * @returns Local name.
95
95
  */
96
96
  public get localName(): string {
97
- return this.tagName.toLowerCase();
97
+ return this.tagName ? this.tagName.toLowerCase() : 'unknown';
98
98
  }
99
99
 
100
100
  /**
@@ -139,7 +139,9 @@ export default class Element extends Node implements IElement {
139
139
  for (const child of this.childNodes.slice()) {
140
140
  this.removeChild(child);
141
141
  }
142
- this.appendChild(this.ownerDocument.createTextNode(textContent));
142
+ if (textContent) {
143
+ this.appendChild(this.ownerDocument.createTextNode(textContent));
144
+ }
143
145
  }
144
146
 
145
147
  /**
@@ -454,6 +456,9 @@ export default class Element extends Node implements IElement {
454
456
  * @param text String to insert.
455
457
  */
456
458
  public insertAdjacentText(position: TInsertAdjacentPositions, text: string): void {
459
+ if (!text) {
460
+ return;
461
+ }
457
462
  const textNode = <IText>this.ownerDocument.createTextNode(text);
458
463
  this.insertAdjacentElement(position, textNode);
459
464
  }
@@ -598,7 +603,7 @@ export default class Element extends Node implements IElement {
598
603
  (<IDocument>this.shadowRoot.ownerDocument) = this.ownerDocument;
599
604
  (<Element>this.shadowRoot.host) = this;
600
605
  (<string>this.shadowRoot.mode) = shadowRootInit.mode;
601
- this.shadowRoot.isConnected = this.isConnected;
606
+ (<ShadowRoot>this.shadowRoot)._connectToNode(this);
602
607
  return this.shadowRoot;
603
608
  }
604
609
 
@@ -636,7 +641,46 @@ export default class Element extends Node implements IElement {
636
641
  * @returns "true" if matching.
637
642
  */
638
643
  public matches(selector: string): boolean {
639
- return new SelectorItem(selector).match(this);
644
+ for (const part of selector.split(',')) {
645
+ if (new SelectorItem(part.trim()).match(this)) {
646
+ return true;
647
+ }
648
+ }
649
+ return false;
650
+ }
651
+
652
+ /**
653
+ * Traverses the Element and its parents (heading toward the document root) until it finds a node that matches the provided selector string.
654
+ *
655
+ * @param selector Selector.
656
+ * @returns Closest matching element.
657
+ */
658
+ public closest(selector: string): IElement {
659
+ let rootElement: IElement = this.ownerDocument.documentElement;
660
+ if (!this.isConnected) {
661
+ rootElement = this;
662
+ while (rootElement.parentNode) {
663
+ rootElement = <IElement>rootElement.parentNode;
664
+ }
665
+ }
666
+ const elements = rootElement.querySelectorAll(selector);
667
+
668
+ // eslint-disable-next-line
669
+ let parent: IElement = this;
670
+ while (parent) {
671
+ if (elements.includes(parent)) {
672
+ return parent;
673
+ }
674
+ parent = parent.parentElement;
675
+ }
676
+
677
+ // QuerySelectorAll() will not match the element it is looking in when searched for
678
+ // Therefore we need to check if it matches the root
679
+ if (rootElement.matches(selector)) {
680
+ return rootElement;
681
+ }
682
+
683
+ return null;
640
684
  }
641
685
 
642
686
  /**
@@ -152,6 +152,14 @@ export default interface IElement extends IChildNode, INonDocumentTypeChildNode,
152
152
  */
153
153
  matches(selector: string): boolean;
154
154
 
155
+ /**
156
+ * Traverses the Element and its parents (heading toward the document root) until it finds a node that matches the provided selector string.
157
+ *
158
+ * @param selector Selector.
159
+ * @returns Closest matching element.
160
+ */
161
+ closest(selector: string): IElement;
162
+
155
163
  /**
156
164
  * The setAttributeNode() method adds a new Attr node to the specified element.
157
165
  *
@@ -1,8 +1,9 @@
1
1
  import Element from '../element/Element';
2
- import Event from '../../event/Event';
3
2
  import IHTMLElement from './IHTMLElement';
4
3
  import CSSStyleDeclaration from '../../css/CSSStyleDeclaration';
5
4
  import Attr from '../../attribute/Attr';
5
+ import FocusEvent from '../../event/events/FocusEvent';
6
+ import PointerEvent from '../../event/events/PointerEvent';
6
7
 
7
8
  /**
8
9
  * HTML Element.
@@ -172,7 +173,7 @@ export default class HTMLElement extends Element implements IHTMLElement {
172
173
  * Triggers a click event.
173
174
  */
174
175
  public click(): void {
175
- const event = new Event('click', {
176
+ const event = new PointerEvent('click', {
176
177
  bubbles: true,
177
178
  composed: true
178
179
  });
@@ -185,8 +186,14 @@ export default class HTMLElement extends Element implements IHTMLElement {
185
186
  * Triggers a blur event.
186
187
  */
187
188
  public blur(): void {
189
+ if (this.ownerDocument['_activeElement'] !== this || !this.isConnected) {
190
+ return;
191
+ }
192
+
193
+ this.ownerDocument['_activeElement'] = null;
194
+
188
195
  for (const eventType of ['blur', 'focusout']) {
189
- const event = new Event(eventType, {
196
+ const event = new FocusEvent(eventType, {
190
197
  bubbles: true,
191
198
  composed: true
192
199
  });
@@ -200,8 +207,18 @@ export default class HTMLElement extends Element implements IHTMLElement {
200
207
  * Triggers a focus event.
201
208
  */
202
209
  public focus(): void {
210
+ if (this.ownerDocument['_activeElement'] === this || !this.isConnected) {
211
+ return;
212
+ }
213
+
214
+ if (this.ownerDocument['_activeElement'] !== null) {
215
+ this.ownerDocument['_activeElement'].blur();
216
+ }
217
+
218
+ this.ownerDocument['_activeElement'] = this;
219
+
203
220
  for (const eventType of ['focus', 'focusin']) {
204
- const event = new Event(eventType, {
221
+ const event = new FocusEvent(eventType, {
205
222
  bubbles: true,
206
223
  composed: true
207
224
  });
@@ -37,9 +37,6 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
37
37
  // Type specific: file
38
38
  public files: File[] = [];
39
39
 
40
- // Not categorized
41
- public defaultValue = '';
42
-
43
40
  // Type specific: text/password/search/tel/url/week/month
44
41
  private _selectionStart = null;
45
42
  private _selectionEnd = null;
@@ -384,21 +381,21 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
384
381
  }
385
382
 
386
383
  /**
387
- * Returns defaultvalue.
384
+ * Returns defaultValue.
388
385
  *
389
386
  * @returns Defaultvalue.
390
387
  */
391
- public get defaultvalue(): string {
388
+ public get defaultValue(): string {
392
389
  return this.getAttributeNS(null, 'defaultvalue') || '';
393
390
  }
394
391
 
395
392
  /**
396
- * Sets defaultvalue.
393
+ * Sets defaultValue.
397
394
  *
398
- * @param defaultvalue Defaultvalue.
395
+ * @param defaultValue Defaultvalue.
399
396
  */
400
- public set defaultvalue(defaultvalue: string) {
401
- this.setAttributeNS(null, 'defaultvalue', defaultvalue);
397
+ public set defaultValue(defaultValue: string) {
398
+ this.setAttributeNS(null, 'defaultvalue', defaultValue);
402
399
  }
403
400
 
404
401
  /**
@@ -780,6 +777,21 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
780
777
  return this.value ? parseFloat(this.value) : NaN;
781
778
  }
782
779
 
780
+ /**
781
+ * Selects the text.
782
+ */
783
+ public select(): void {
784
+ if (!this._isSelectionSupported()) {
785
+ return null;
786
+ }
787
+
788
+ this._selectionStart = 0;
789
+ this._selectionEnd = this.value.length;
790
+ this._selectionDirection = HTMLInputElementSelectionDirectionEnum.none;
791
+
792
+ this.dispatchEvent(new Event('select', { bubbles: true, cancelable: true }));
793
+ }
794
+
783
795
  /**
784
796
  * Set selection range.
785
797
  *
@@ -35,7 +35,6 @@ export default interface IHTMLInputElement extends IHTMLElement {
35
35
  allowdirs: string;
36
36
  autocomplete: string;
37
37
  src: string;
38
- defaultvalue: string;
39
38
  readOnly: boolean;
40
39
  disabled: boolean;
41
40
  autofocus: boolean;
@@ -6,6 +6,7 @@ import Document from '../document/Document';
6
6
  import IHTMLLinkElement from './IHTMLLinkElement';
7
7
  import Event from '../../event/Event';
8
8
  import ErrorEvent from '../../event/events/ErrorEvent';
9
+ import INode from '../../nodes/node/INode';
9
10
 
10
11
  /**
11
12
  * HTML Link Element.
@@ -19,79 +20,6 @@ export default class HTMLLinkElement extends HTMLElement implements IHTMLLinkEle
19
20
  public readonly sheet: CSSStyleSheet = null;
20
21
  public _evaluateCSS = true;
21
22
 
22
- /**
23
- * Returns "true" if connected to DOM.
24
- *
25
- * @returns "true" if connected.
26
- */
27
- public get isConnected(): boolean {
28
- return this._isConnected;
29
- }
30
-
31
- /**
32
- * Sets the connected state.
33
- *
34
- * @param isConnected "true" if connected.
35
- */
36
- public set isConnected(isConnected) {
37
- if (this._isConnected !== isConnected) {
38
- this._isConnected = isConnected;
39
-
40
- for (const child of this.childNodes) {
41
- child.isConnected = isConnected;
42
- }
43
-
44
- // eslint-disable-next-line
45
- if (this.shadowRoot) {
46
- // eslint-disable-next-line
47
- this.shadowRoot.isConnected = isConnected;
48
- }
49
-
50
- if (isConnected && this._evaluateCSS) {
51
- const href = this.getAttributeNS(null, 'href');
52
- const rel = this.getAttributeNS(null, 'rel');
53
- if (href !== null && rel && rel.toLowerCase() === 'stylesheet') {
54
- (<Document>this.ownerDocument)._readyStateManager.startTask();
55
- ResourceFetcher.fetch({ window: this.ownerDocument.defaultView, url: href })
56
- .then(code => {
57
- const styleSheet = new CSSStyleSheet();
58
- styleSheet.replaceSync(code);
59
- (<CSSStyleSheet>this.sheet) = styleSheet;
60
- this.dispatchEvent(new Event('load'));
61
- (<Document>this.ownerDocument)._readyStateManager.endTask();
62
- })
63
- .catch(error => {
64
- this.dispatchEvent(
65
- new ErrorEvent('error', {
66
- message: error.message,
67
- error
68
- })
69
- );
70
- this.ownerDocument.defaultView.dispatchEvent(
71
- new ErrorEvent('error', {
72
- message: error.message,
73
- error
74
- })
75
- );
76
- (<Document>this.ownerDocument)._readyStateManager.endTask();
77
- if (
78
- !this._listeners['error'] &&
79
- !this.ownerDocument.defaultView._listeners['error']
80
- ) {
81
- this.ownerDocument.defaultView.console.error(error);
82
- }
83
- });
84
- }
85
- }
86
-
87
- if (isConnected && this.connectedCallback) {
88
- this.connectedCallback();
89
- } else if (!isConnected && this.disconnectedCallback) {
90
- this.disconnectedCallback();
91
- }
92
- }
93
- }
94
-
95
23
  /**
96
24
  * Returns as.
97
25
  *
@@ -286,4 +214,49 @@ export default class HTMLLinkElement extends HTMLElement implements IHTMLLinkEle
286
214
 
287
215
  return replacedAttribute;
288
216
  }
217
+
218
+ /**
219
+ * @override
220
+ */
221
+ public _connectToNode(parentNode: INode = null): void {
222
+ const isConnected = this.isConnected;
223
+ const isParentConnected = parentNode ? parentNode.isConnected : false;
224
+
225
+ super._connectToNode(parentNode);
226
+
227
+ if (isConnected !== isParentConnected && this._evaluateCSS) {
228
+ const href = this.getAttributeNS(null, 'href');
229
+ const rel = this.getAttributeNS(null, 'rel');
230
+
231
+ if (href !== null && rel && rel.toLowerCase() === 'stylesheet') {
232
+ (<Document>this.ownerDocument)._readyStateManager.startTask();
233
+ ResourceFetcher.fetch({ window: this.ownerDocument.defaultView, url: href })
234
+ .then(code => {
235
+ const styleSheet = new CSSStyleSheet();
236
+ styleSheet.replaceSync(code);
237
+ (<CSSStyleSheet>this.sheet) = styleSheet;
238
+ this.dispatchEvent(new Event('load'));
239
+ (<Document>this.ownerDocument)._readyStateManager.endTask();
240
+ })
241
+ .catch(error => {
242
+ this.dispatchEvent(
243
+ new ErrorEvent('error', {
244
+ message: error.message,
245
+ error
246
+ })
247
+ );
248
+ this.ownerDocument.defaultView.dispatchEvent(
249
+ new ErrorEvent('error', {
250
+ message: error.message,
251
+ error
252
+ })
253
+ );
254
+ (<Document>this.ownerDocument)._readyStateManager.endTask();
255
+ if (!this._listeners['error'] && !this.ownerDocument.defaultView._listeners['error']) {
256
+ this.ownerDocument.defaultView.console.error(error);
257
+ }
258
+ });
259
+ }
260
+ }
261
+ }
289
262
  }
@@ -4,6 +4,7 @@ import IHTMLScriptElement from './IHTMLScriptElement';
4
4
  import ScriptUtility from './ScriptUtility';
5
5
  import Event from '../../event/Event';
6
6
  import ErrorEvent from '../../event/events/ErrorEvent';
7
+ import INode from '../../nodes/node/INode';
7
8
 
8
9
  /**
9
10
  * HTML Script Element.
@@ -16,55 +17,6 @@ export default class HTMLScriptElement extends HTMLElement implements IHTMLScrip
16
17
  public onload: (event: Event) => void = null;
17
18
  public _evaluateScript = true;
18
19
 
19
- /**
20
- * Returns "true" if connected to DOM.
21
- *
22
- * @returns "true" if connected.
23
- */
24
- public get isConnected(): boolean {
25
- return this._isConnected;
26
- }
27
-
28
- /**
29
- * Sets the connected state.
30
- *
31
- * @param isConnected "true" if connected.
32
- */
33
- public set isConnected(isConnected) {
34
- if (this._isConnected !== isConnected) {
35
- this._isConnected = isConnected;
36
-
37
- for (const child of this.childNodes) {
38
- child.isConnected = isConnected;
39
- }
40
-
41
- // eslint-disable-next-line
42
- if (this.shadowRoot) {
43
- // eslint-disable-next-line
44
- this.shadowRoot.isConnected = isConnected;
45
- }
46
-
47
- if (isConnected && this._evaluateScript) {
48
- const src = this.getAttributeNS(null, 'src');
49
-
50
- if (src !== null) {
51
- ScriptUtility.loadExternalScript(this);
52
- } else {
53
- const textContent = this.textContent;
54
- if (textContent) {
55
- this.ownerDocument.defaultView.eval(textContent);
56
- }
57
- }
58
- }
59
-
60
- if (isConnected && this.connectedCallback) {
61
- this.connectedCallback();
62
- } else if (!isConnected && this.disconnectedCallback) {
63
- this.disconnectedCallback();
64
- }
65
- }
66
- }
67
-
68
20
  /**
69
21
  * Returns type.
70
22
  *
@@ -226,4 +178,27 @@ export default class HTMLScriptElement extends HTMLElement implements IHTMLScrip
226
178
  public cloneNode(deep = false): IHTMLScriptElement {
227
179
  return <IHTMLScriptElement>super.cloneNode(deep);
228
180
  }
181
+
182
+ /**
183
+ * @override
184
+ */
185
+ public _connectToNode(parentNode: INode = null): void {
186
+ const isConnected = this.isConnected;
187
+ const isParentConnected = parentNode ? parentNode.isConnected : false;
188
+
189
+ super._connectToNode(parentNode);
190
+
191
+ if (isConnected !== isParentConnected && this._evaluateScript) {
192
+ const src = this.getAttributeNS(null, 'src');
193
+
194
+ if (src !== null) {
195
+ ScriptUtility.loadExternalScript(this);
196
+ } else {
197
+ const textContent = this.textContent;
198
+ if (textContent) {
199
+ this.ownerDocument.defaultView.eval(textContent);
200
+ }
201
+ }
202
+ }
203
+ }
229
204
  }
@@ -15,7 +15,7 @@ export default class HTMLStyleElement extends HTMLElement implements IHTMLStyleE
15
15
  * @returns CSS style sheet.
16
16
  */
17
17
  public get sheet(): CSSStyleSheet {
18
- if (!this._isConnected) {
18
+ if (!this.isConnected) {
19
19
  return null;
20
20
  }
21
21
  const styleSheet = new CSSStyleSheet();