Socket
Socket
Sign inDemoInstall

stylecow-plugin-nested-rules

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

stylecow-plugin-nested-rules - npm Package Compare versions

Comparing version 4.0.1 to 4.1.0

tests/cases/nested-inverted/ast.json

104

index.js

@@ -18,3 +18,3 @@ module.exports = function (stylecow) {

if (child.type === 'AtRule' && child.name === 'media') {
nestedMedia(parentRule, child, index + offset);
nestedRuleMedia(parentRule, child, index + offset);
++offset;

@@ -36,3 +36,29 @@ }

function nestedMedia(parentRule, media, parentRuleIndex) {
//Merge nested @media
stylecow.addTask({
filter: {
type: 'AtRule',
name: 'media'
},
fn: function (parentMedia) {
var index = parentMedia.index();
var offset = 1;
parentMedia
.getChild('Block')
.getChildren({
type: 'AtRule',
name: 'media'
})
.forEach(function (child) {
nestedMedia(parentMedia, child, index + offset);
});
if (!parentMedia.getChild('Block').length) {
parentRule.remove();
}
}
});
function nestedRuleMedia(parentRule, media, parentRuleIndex) {
var rule = new stylecow.Rule();

@@ -65,2 +91,18 @@

function nestedMedia(parentMedia, media, parentMediaIndex) {
var mediaQueries = media.getChild('MediaQueries');
var mergedMediaQueries = new stylecow.MediaQueries();
parentMedia
.getChild('MediaQueries')
.forEach(function (parentMediaQuery) {
mediaQueries.forEach(function (mediaQuery) {
mergedMediaQueries.push(mergeMediaQuery(parentMediaQuery.clone(), mediaQuery.clone()));
});
});
mediaQueries.replaceWith(mergedMediaQueries);
parentMedia.getParent().splice(parentMediaIndex, 0, media);
}
function nestedRule(parentRule, rule, parentRuleIndex) {

@@ -74,3 +116,3 @@ var selectors = rule.getChild('Selectors');

selectors.forEach(function (selector) {
mergedSelectors.push(merge(parentSelector.clone(), selector.clone()));
mergedSelectors.push(mergeSelector(parentSelector.clone(), selector.clone()));
});

@@ -83,36 +125,52 @@ });

function merge (selector, appendedSelector) {
var firstElement = appendedSelector.shift();
function mergeSelector (selector, appendedSelector) {
var joinCombinator = appendedSelector.getChild({
type: 'Combinator',
name: '&'
});
// html { .foo { => html .foo
if (firstElement.type !== 'Combinator') {
var separator = (new stylecow.Combinator()).setName(' ');
selector.push(separator);
selector.push(firstElement);
if (!joinCombinator) {
if (appendedSelector[0].type !== 'Combinator') {
appendedSelector.unshift((new stylecow.Combinator()).setName(' '));
}
joinCombinator = (new stylecow.Combinator()).setName('&');
appendedSelector.unshift(joinCombinator);
}
// html { >.foo { => html>.foo
else if (firstElement.name !== '&') {
selector.push(firstElement);
}
// .foo { &html { => html.foo
else if (appendedSelector.length && appendedSelector[0].is('TypeSelector')) {
firstElement = appendedSelector.shift();
//resolve .foo&html => html.foo
var next = joinCombinator.next();
if (next && next.is('TypeSelector')) {
var combinators = selector.getChildren('Combinator');
if (combinators.length) {
combinators.pop().after(firstElement);
combinators.pop().after(next);
} else {
selector.unshift(firstElement);
selector.unshift(next);
}
}
while (appendedSelector[0]) {
selector.push(appendedSelector[0]);
while (selector[0]) {
joinCombinator.before(selector.shift());
}
return selector;
joinCombinator.remove();
return appendedSelector;
}
function mergeMediaQuery (mediaQueries, appendedMediaQuery) {
var expression = new stylecow.ConditionalExpression();
while (appendedMediaQuery[0]) {
expression.push(appendedMediaQuery.shift());
}
var joinKeyword = (new stylecow.Keyword()).setName('and');
mediaQueries.push(joinKeyword);
mediaQueries.push(expression);
return mediaQueries;
}
};
{
"name": "stylecow-plugin-nested-rules",
"description": "Stylecow plugin to add support for nested rules.",
"version": "4.0.1",
"version": "4.1.0",
"author": "Oscar Otero <oom@oscarotero.com>",

@@ -6,0 +6,0 @@ "homepage": "https://github.com/stylecow/stylecow-plugin-nested-rules",

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc