Skip to content

Commit

Permalink
chore: [#1332] Continues on implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
capricorn86 committed May 3, 2024
1 parent aa67746 commit 8aac0a1
Show file tree
Hide file tree
Showing 80 changed files with 3,621 additions and 2,867 deletions.
2 changes: 1 addition & 1 deletion packages/global-registrator/tsconfig.json
Expand Up @@ -2,7 +2,7 @@
"compilerOptions": {
"outDir": "lib",
"rootDir": "src",
"target": "ES2020",
"target": "ES2022",
"declaration": true,
"declarationMap": true,
"module": "Node16",
Expand Down
37 changes: 29 additions & 8 deletions packages/happy-dom/src/PropertySymbol.ts
@@ -1,7 +1,5 @@
export const abort = Symbol('abort');
export const activeElement = Symbol('activeElement');
export const appendFormControlItem = Symbol('appendFormControlItem');
export const appendNamedItem = Symbol('appendNamedItem');
export const asyncTaskManager = Symbol('asyncTaskManager');
export const bodyBuffer = Symbol('bodyBuffer');
export const buffer = Symbol('buffer');
Expand All @@ -14,7 +12,8 @@ export const childNodes = Symbol('childNodes');
export const children = Symbol('children');
export const classList = Symbol('classList');
export const computedStyle = Symbol('computedStyle');
export const connectToNode = Symbol('connectToNode');
export const connectedToDocument = Symbol('connectedToDocument');
export const disconnectedFromDocument = Symbol('disconnectedFromDocument');
export const contentLength = Symbol('contentLength');
export const contentType = Symbol('contentType');
export const cssText = Symbol('cssText');
Expand Down Expand Up @@ -53,16 +52,11 @@ export const readyStateManager = Symbol('readyStateManager');
export const referrer = Symbol('referrer');
export const registry = Symbol('registry');
export const relList = Symbol('relList');
export const removeFormControlItem = Symbol('removeFormControlItem');
export const removeNamedItem = Symbol('removeNamedItem');
export const removeNamedItemIndex = Symbol('removeNamedItemIndex');
export const removeNamedItemWithoutConsequences = Symbol('removeNamedItemWithoutConsequences');
export const resetSelection = Symbol('resetSelection');
export const rootNode = Symbol('rootNode');
export const selectNode = Symbol('selectNode');
export const selectedness = Symbol('selectedness');
export const selection = Symbol('selection');
export const setNamedItemWithoutConsequences = Symbol('setNamedItemWithoutConsequences');
export const setupVMContext = Symbol('setupVMContext');
export const shadowRoot = Symbol('shadowRoot');
export const start = Symbol('start');
Expand Down Expand Up @@ -170,3 +164,30 @@ export const capabilities = Symbol('capabilities');
export const settings = Symbol('settings');
export const dataListNode = Symbol('dataListNode');
export const setNamedItem = Symbol('setNamedItem');
export const fieldSetNode = Symbol('fieldSetNode');
export const addRemoveListener = Symbol('addRemoveListener');
export const addSetListener = Symbol('addSetListener');
export const removeSetListener = Symbol('removeSetListener');
export const removeRemoveListener = Symbol('removeRemoveListener');
export const appendFormControlItemByName = Symbol('appendFormControlItemByName');
export const removeFormControlItemByName = Symbol('removeFormControlItemByName');
export const clone = Symbol('clone');
export const addItem = Symbol('addItem');
export const addNamedItem = Symbol('addNamedItem');
export const removeItem = Symbol('removeItem');
export const removeNamedItem = Symbol('removeNamedItem');
export const items = Symbol('items');
export const removeItemIndex = Symbol('removeItemIndex');
export const indexOf = Symbol('indexOf');
export const updateNamedItem = Symbol('updateNamedItem');
export const childNodesFlatten = Symbol('childNodesFlatten');
export const includes = Symbol('includes');
export const insertItem = Symbol('insertItem');
export const addEventListener = Symbol('addEventListener');
export const removeEventListener = Symbol('removeEventListener');
export const htmlCollections = Symbol('htmlCollections');
export const namedItemListeners = Symbol('namedItemListeners');
export const dispatchEvent = Symbol('dispatchEvent');
export const getNamedItems = Symbol('getNamedItems');
export const setNamedItemProperty = Symbol('setNamedItemProperty');
export const selectedOptions = Symbol('selectedOptions');
Expand Up @@ -6,7 +6,7 @@ import DOMExceptionNameEnum from '../../exception/DOMExceptionNameEnum.js';
import DOMException from '../../exception/DOMException.js';
import CSSStyleDeclarationElementStyle from './element-style/CSSStyleDeclarationElementStyle.js';
import CSSStyleDeclarationPropertyManager from './property-manager/CSSStyleDeclarationPropertyManager.js';
import NamedNodeMap from '../../named-node-map/NamedNodeMap.js';
import NamedNodeMap from '../../nodes/element/NamedNodeMap.js';

/**
* CSS Style Declaration.
Expand Down Expand Up @@ -83,10 +83,10 @@ export default abstract class AbstractCSSStyleDeclaration {

if (!styleAttribute) {
styleAttribute = this.#ownerElement[PropertySymbol.ownerDocument].createAttribute('style');
// We use "[PropertySymbol.setNamedItemWithoutConsequences]" here to avoid triggering setting "Element.style.cssText" when setting the "style" attribute.
(<NamedNodeMap>this.#ownerElement[PropertySymbol.attributes])[
PropertySymbol.setNamedItemWithoutConsequences
](styleAttribute);
(<NamedNodeMap>this.#ownerElement[PropertySymbol.attributes])[PropertySymbol.setNamedItem](
styleAttribute,
true
);
}

if (this.#ownerElement[PropertySymbol.isConnected]) {
Expand Down Expand Up @@ -141,10 +141,10 @@ export default abstract class AbstractCSSStyleDeclaration {
if (!styleAttribute) {
styleAttribute = this.#ownerElement[PropertySymbol.ownerDocument].createAttribute('style');

// We use "[PropertySymbol.setNamedItemWithoutConsequences]" here to avoid triggering setting "Element.style.cssText" when setting the "style" attribute.
(<NamedNodeMap>this.#ownerElement[PropertySymbol.attributes])[
PropertySymbol.setNamedItemWithoutConsequences
](styleAttribute);
(<NamedNodeMap>this.#ownerElement[PropertySymbol.attributes])[PropertySymbol.setNamedItem](
styleAttribute,
true
);
}

if (this.#ownerElement[PropertySymbol.isConnected]) {
Expand Down Expand Up @@ -188,10 +188,9 @@ export default abstract class AbstractCSSStyleDeclaration {
(<Attr>this.#ownerElement[PropertySymbol.attributes]['style'])[PropertySymbol.value] =
newCSSText;
} else {
// We use "[PropertySymbol.removeNamedItemWithoutConsequences]" here to avoid triggering setting "Element.style.cssText" when setting the "style" attribute.
(<NamedNodeMap>this.#ownerElement[PropertySymbol.attributes])[
PropertySymbol.removeNamedItemWithoutConsequences
]('style');
PropertySymbol.removeNamedItem
]('style', true);
}
} else {
this.#style.remove(name);
Expand Down
19 changes: 10 additions & 9 deletions packages/happy-dom/src/dom-parser/DOMParser.ts
Expand Up @@ -38,14 +38,15 @@ export default class DOMParser {

const newDocument = <Document>this.#createDocument(mimeType);

newDocument[PropertySymbol.childNodes].length = 0;
newDocument[PropertySymbol.children].length = 0;
while (newDocument[PropertySymbol.childNodes][PropertySymbol.items].length) {
newDocument.removeChild(newDocument[PropertySymbol.childNodes][PropertySymbol.items][0]);
}

const root = <DocumentFragment>XMLParser.parse(newDocument, string, { evaluateScripts: true });
let documentElement = null;
let documentTypeNode = null;

for (const node of root[PropertySymbol.childNodes]) {
for (const node of root[PropertySymbol.childNodes][PropertySymbol.items]) {
if (node['tagName'] === 'HTML') {
documentElement = node;
} else if (node[PropertySymbol.nodeType] === NodeTypeEnum.documentTypeNode) {
Expand All @@ -64,16 +65,16 @@ export default class DOMParser {
newDocument.appendChild(documentElement);
const body = newDocument.body;
if (body) {
for (const child of root[PropertySymbol.childNodes].slice()) {
body.appendChild(child);
while (root[PropertySymbol.childNodes][PropertySymbol.items].length) {
body.appendChild(root[PropertySymbol.childNodes][PropertySymbol.items][0]);
}
}
} else {
switch (mimeType) {
case 'image/svg+xml':
{
for (const node of root[PropertySymbol.childNodes].slice()) {
newDocument.appendChild(node);
while (root[PropertySymbol.childNodes][PropertySymbol.items].length) {
newDocument.appendChild(root[PropertySymbol.childNodes][PropertySymbol.items][0]);
}
}
break;
Expand All @@ -88,8 +89,8 @@ export default class DOMParser {
documentElement.appendChild(bodyElement);
newDocument.appendChild(documentElement);

for (const node of root[PropertySymbol.childNodes].slice()) {
bodyElement.appendChild(node);
while (root[PropertySymbol.childNodes][PropertySymbol.items].length) {
bodyElement.appendChild(root[PropertySymbol.childNodes][PropertySymbol.items][0]);
}
}
break;
Expand Down
4 changes: 2 additions & 2 deletions packages/happy-dom/src/form-data/FormData.ts
Expand Up @@ -59,8 +59,8 @@ export default class FormData implements Iterable<[string, string | File]> {
this.append(node.name, file);
}
}
} else if (node.value) {
this.append(node.name, node.value);
} else if ((<HTMLInputElement>node).value) {
this.append(node.name, (<HTMLInputElement>node).value);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion packages/happy-dom/src/index.ts
Expand Up @@ -72,7 +72,7 @@ import DocumentType from './nodes/document-type/DocumentType.js';
import Document from './nodes/document/Document.js';
import DOMRect from './nodes/element/DOMRect.js';
import Element from './nodes/element/Element.js';
import HTMLCollection from './nodes/element/HTMLCollection.js';
import HTMLCollection from './nodes/element/HTMLCollection2.js';
import HTMLAnchorElement from './nodes/html-anchor-element/HTMLAnchorElement.js';
import HTMLAreaElement from './nodes/html-area-element/HTMLAreaElement.js';
import HTMLAudioElement from './nodes/html-audio-element/HTMLAudioElement.js';
Expand Down

0 comments on commit 8aac0a1

Please sign in to comment.