Skip to content

Commit

Permalink
Merge pull request #574 from capricorn86/task/344-innertext-doesnt-ad…
Browse files Browse the repository at this point in the history
…d-n-newlines-like-browser-does

Task/344 innertext doesnt add n newlines like browser does
  • Loading branch information
capricorn86 committed Oct 5, 2022
2 parents f7c8a89 + 19993dc commit 3167812
Show file tree
Hide file tree
Showing 65 changed files with 13,870 additions and 6,181 deletions.
3 changes: 2 additions & 1 deletion packages/happy-dom/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
node_modules
tmp
lib
lib
.DS_Store
20 changes: 14 additions & 6 deletions packages/happy-dom/src/css/CSSParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import CSSStyleRule from './rules/CSSStyleRule';
import CSSKeyframeRule from './rules/CSSKeyframeRule';
import CSSKeyframesRule from './rules/CSSKeyframesRule';
import CSSMediaRule from './rules/CSSMediaRule';
import CSSStyleDeclaration from './CSSStyleDeclaration';
import CSSContainerRule from './rules/CSSContainerRule';

const COMMENT_REGEXP = /\/\*[^*]*\*\//gm;

Expand Down Expand Up @@ -47,6 +47,14 @@ export default class CSSParser {
newRule.media.appendMedium(medium.trim());
}

newRule.parentStyleSheet = parentStyleSheet;
cssRules.push(newRule);
parentRule = newRule;
} else if (selectorText.startsWith('@container')) {
const conditionalText = selectorText.replace(/@container */, '');
const newRule = new CSSContainerRule();

(<string>newRule.conditionalText) = conditionalText;
newRule.parentStyleSheet = parentStyleSheet;
cssRules.push(newRule);
parentRule = newRule;
Expand All @@ -58,7 +66,10 @@ export default class CSSParser {

(<CSSKeyframesRule>parentRule).cssRules.push(<CSSKeyframeRule>newRule);
parentRule = newRule;
} else if (parentRule && parentRule.type === CSSRule.MEDIA_RULE) {
} else if (
parentRule &&
(parentRule.type === CSSRule.MEDIA_RULE || parentRule.type === CSSRule.CONTAINER_RULE)
) {
const newRule = new CSSStyleRule();
(<string>newRule.selectorText) = selectorText;
newRule.parentStyleSheet = parentStyleSheet;
Expand Down Expand Up @@ -86,10 +97,7 @@ export default class CSSParser {
case CSSRule.FONT_FACE_RULE:
case CSSRule.KEYFRAME_RULE:
case CSSRule.STYLE_RULE:
const style = new CSSStyleDeclaration();
style.cssText = cssText;
(<CSSRule>style.parentRule) = parentRule;
(<CSSStyleDeclaration>(<CSSStyleRule>parentRule).style) = style;
(<CSSStyleRule>parentRule)._cssText = cssText;
break;
}
}
Expand Down
28 changes: 15 additions & 13 deletions packages/happy-dom/src/css/CSSRule.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
import CSSStyleSheet from './CSSStyleSheet';
import CSSRuleTypeEnum from './CSSRuleTypeEnum';

/**
* CSSRule interface.
*/
export default class CSSRule {
public static STYLE_RULE = 1;
public static IMPORT_RULE = 3;
public static MEDIA_RULE = 4;
public static FONT_FACE_RULE = 5;
public static PAGE_RULE = 6;
public static KEYFRAMES_RULE = 7;
public static KEYFRAME_RULE = 8;
public static NAMESPACE_RULE = 10;
public static COUNTER_STYLE_RULE = 11;
public static SUPPORTS_RULE = 12;
public static DOCUMENT_RULE = 13;
public static FONT_FEATURE_VALUES_RULE = 14;
public static REGION_STYLE_RULE = 16;
public static CONTAINER_RULE = CSSRuleTypeEnum.containerRule;
public static STYLE_RULE = CSSRuleTypeEnum.styleRule;
public static IMPORT_RULE = CSSRuleTypeEnum.importRule;
public static MEDIA_RULE = CSSRuleTypeEnum.mediaRule;
public static FONT_FACE_RULE = CSSRuleTypeEnum.fontFaceRule;
public static PAGE_RULE = CSSRuleTypeEnum.pageRule;
public static KEYFRAMES_RULE = CSSRuleTypeEnum.keyframesRule;
public static KEYFRAME_RULE = CSSRuleTypeEnum.keyframeRule;
public static NAMESPACE_RULE = CSSRuleTypeEnum.namespaceRule;
public static COUNTER_STYLE_RULE = CSSRuleTypeEnum.counterStyleRule;
public static SUPPORTS_RULE = CSSRuleTypeEnum.supportsRule;
public static DOCUMENT_RULE = CSSRuleTypeEnum.documentRule;
public static FONT_FEATURE_VALUES_RULE = CSSRuleTypeEnum.fontFeatureValuesRule;
public static REGION_STYLE_RULE = CSSRuleTypeEnum.regionStyleRule;

public parentRule: CSSRule = null;
public parentStyleSheet: CSSStyleSheet = null;
Expand Down
18 changes: 18 additions & 0 deletions packages/happy-dom/src/css/CSSRuleTypeEnum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
enum CSSRuleTypeEnum {
containerRule = 0,
styleRule = 1,
importRule = 3,
mediaRule = 4,
fontFaceRule = 5,
pageRule = 6,
keyframesRule = 7,
keyframeRule = 8,
namespaceRule = 10,
counterStyleRule = 11,
supportsRule = 12,
documentRule = 13,
fontFeatureValuesRule = 14,
regionStyleRule = 16
}

export default CSSRuleTypeEnum;

0 comments on commit 3167812

Please sign in to comment.