Skip to content

Commit b793408

Browse files
committed
basic processing of only nested at rules added
1 parent 3c3f31b commit b793408

File tree

3 files changed

+114
-93
lines changed

3 files changed

+114
-93
lines changed

Recipe.min.js

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -834,6 +834,7 @@ void function() { try {
834834

835835
if(rule.cssRules) {
836836
CSSUsage.PropertyValuesAnalyzer.anaylzeStyleOfRulePropCount(rule, selectedAtruleUsage);
837+
processNestedAtRules(rule.cssRules, selectedAtruleUsage);
837838
}
838839

839840
processConditionText(rule.conditionText, selectedAtruleUsage.conditions);
@@ -846,6 +847,8 @@ void function() { try {
846847
*/
847848
function processConditionText(conditionText, selectedAtruleConditionalUsage) {
848849
conditionText = conditionText.replace(/[0-9]/g, '');
850+
conditionText = conditionText.replace(".px", "px");
851+
conditionText = conditionText.replace(".em", "px");
849852
if(!selectedAtruleConditionalUsage[conditionText]) {
850853
selectedAtruleConditionalUsage[conditionText] = Object.create(null);
851854
selectedAtruleConditionalUsage[conditionText] = {"count": 1}
@@ -855,6 +858,41 @@ void function() { try {
855858
}
856859
}
857860

861+
/**
862+
* This processes the usage of nested atrules within other at rules.
863+
*/
864+
function processNestedAtRules(cssRules, selectedAtruleConditionalUsage) {
865+
for(let index in cssRules) {
866+
let ruleBody = cssRules[index];
867+
868+
869+
if(!ruleBody.cssText) {
870+
continue;
871+
}
872+
873+
// only collect stats for sub atrules
874+
if(!isRuleAnAtRule(ruleBody)) {
875+
continue;
876+
}
877+
878+
var nestRuleSelector = nestRuleSelector = '@atrule:' + ruleBody.type;
879+
880+
if(!selectedAtruleConditionalUsage["nested"]) {
881+
selectedAtruleConditionalUsage["nested"] = Object.create(null);
882+
}
883+
884+
var nestedUsage = selectedAtruleConditionalUsage["nested"];
885+
886+
if(!nestedUsage[nestRuleSelector]) {
887+
nestedUsage[nestRuleSelector] = Object.create(null);
888+
nestedUsage[nestRuleSelector] = { "count": 1 }
889+
} else {
890+
var nestedCount = nestedUsage[nestRuleSelector].count;
891+
nestedUsage[nestRuleSelector].count = nestedCount + 1;
892+
}
893+
}
894+
}
895+
858896
/**
859897
* This will process all other @atrules that don't have conditions or styles.
860898
* [1] It will process any props and values used within the body of the rule.
@@ -879,39 +917,8 @@ void function() { try {
879917
} else if(CSSUsageResults.rules[selectorText].props) {
880918
atrulesUsage[selectorText].props = CSSUsageResults.rules[selectorText].props;
881919
}
882-
883-
if(rule.pseudoClass) {
884-
processPseudoClassesOfAtrules(rule);
885-
}
886920
}
887921

888-
889-
/**
890-
* If an atrule as has a pseudo class such as @page, process the pseudo class and
891-
* add it to the atrule usage.
892-
*/
893-
function processPseudoClassesOfAtrules(rule) {
894-
var selectorText = '@atrule:' + rule.type;
895-
var selectorAtruleUsage = CSSUsageResults.atrules[selectorText];
896-
897-
if(!selectorAtruleUsage["pseudos"]) {
898-
selectorAtruleUsage["pseudos"] = Object.create(null);
899-
selectorAtruleUsage["pseudos"] = {};
900-
}
901-
902-
var pseudosUsageForSelector = selectorAtruleUsage["pseudos"];
903-
let pseudoClass = rule.pseudoClass;
904-
905-
if(!pseudosUsageForSelector[pseudoClass]) {
906-
pseudosUsageForSelector[pseudoClass] = Object.create(null);
907-
pseudosUsageForSelector[pseudoClass] = {"count": 1};
908-
} else {
909-
var pseudoCount = pseudosUsageForSelector[pseudoClass].count;
910-
pseudosUsageForSelector[pseudoClass].count = pseudoCount + 1;
911-
}
912-
}
913-
914-
915922
/**
916923
* Processes on @keyframe to add the appropriate props from the frame and a counter of which
917924
* frames are used throughout the document.

cssUsage.src.js

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -834,6 +834,7 @@ void function() { try {
834834

835835
if(rule.cssRules) {
836836
CSSUsage.PropertyValuesAnalyzer.anaylzeStyleOfRulePropCount(rule, selectedAtruleUsage);
837+
processNestedAtRules(rule.cssRules, selectedAtruleUsage);
837838
}
838839

839840
processConditionText(rule.conditionText, selectedAtruleUsage.conditions);
@@ -846,6 +847,8 @@ void function() { try {
846847
*/
847848
function processConditionText(conditionText, selectedAtruleConditionalUsage) {
848849
conditionText = conditionText.replace(/[0-9]/g, '');
850+
conditionText = conditionText.replace(".px", "px");
851+
conditionText = conditionText.replace(".em", "px");
849852
if(!selectedAtruleConditionalUsage[conditionText]) {
850853
selectedAtruleConditionalUsage[conditionText] = Object.create(null);
851854
selectedAtruleConditionalUsage[conditionText] = {"count": 1}
@@ -855,6 +858,41 @@ void function() { try {
855858
}
856859
}
857860

861+
/**
862+
* This processes the usage of nested atrules within other at rules.
863+
*/
864+
function processNestedAtRules(cssRules, selectedAtruleConditionalUsage) {
865+
for(let index in cssRules) {
866+
let ruleBody = cssRules[index];
867+
868+
869+
if(!ruleBody.cssText) {
870+
continue;
871+
}
872+
873+
// only collect stats for sub atrules
874+
if(!isRuleAnAtRule(ruleBody)) {
875+
continue;
876+
}
877+
878+
var nestRuleSelector = nestRuleSelector = '@atrule:' + ruleBody.type;
879+
880+
if(!selectedAtruleConditionalUsage["nested"]) {
881+
selectedAtruleConditionalUsage["nested"] = Object.create(null);
882+
}
883+
884+
var nestedUsage = selectedAtruleConditionalUsage["nested"];
885+
886+
if(!nestedUsage[nestRuleSelector]) {
887+
nestedUsage[nestRuleSelector] = Object.create(null);
888+
nestedUsage[nestRuleSelector] = { "count": 1 }
889+
} else {
890+
var nestedCount = nestedUsage[nestRuleSelector].count;
891+
nestedUsage[nestRuleSelector].count = nestedCount + 1;
892+
}
893+
}
894+
}
895+
858896
/**
859897
* This will process all other @atrules that don't have conditions or styles.
860898
* [1] It will process any props and values used within the body of the rule.
@@ -879,39 +917,8 @@ void function() { try {
879917
} else if(CSSUsageResults.rules[selectorText].props) {
880918
atrulesUsage[selectorText].props = CSSUsageResults.rules[selectorText].props;
881919
}
882-
883-
if(rule.pseudoClass) {
884-
processPseudoClassesOfAtrules(rule);
885-
}
886920
}
887921

888-
889-
/**
890-
* If an atrule as has a pseudo class such as @page, process the pseudo class and
891-
* add it to the atrule usage.
892-
*/
893-
function processPseudoClassesOfAtrules(rule) {
894-
var selectorText = '@atrule:' + rule.type;
895-
var selectorAtruleUsage = CSSUsageResults.atrules[selectorText];
896-
897-
if(!selectorAtruleUsage["pseudos"]) {
898-
selectorAtruleUsage["pseudos"] = Object.create(null);
899-
selectorAtruleUsage["pseudos"] = {};
900-
}
901-
902-
var pseudosUsageForSelector = selectorAtruleUsage["pseudos"];
903-
let pseudoClass = rule.pseudoClass;
904-
905-
if(!pseudosUsageForSelector[pseudoClass]) {
906-
pseudosUsageForSelector[pseudoClass] = Object.create(null);
907-
pseudosUsageForSelector[pseudoClass] = {"count": 1};
908-
} else {
909-
var pseudoCount = pseudosUsageForSelector[pseudoClass].count;
910-
pseudosUsageForSelector[pseudoClass].count = pseudoCount + 1;
911-
}
912-
}
913-
914-
915922
/**
916923
* Processes on @keyframe to add the appropriate props from the frame and a counter of which
917924
* frames are used throughout the document.

src/cssUsage.js

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ void function() { try {
337337

338338
if(rule.cssRules) {
339339
CSSUsage.PropertyValuesAnalyzer.anaylzeStyleOfRulePropCount(rule, selectedAtruleUsage);
340+
processNestedAtRules(rule.cssRules, selectedAtruleUsage);
340341
}
341342

342343
processConditionText(rule.conditionText, selectedAtruleUsage.conditions);
@@ -349,6 +350,8 @@ void function() { try {
349350
*/
350351
function processConditionText(conditionText, selectedAtruleConditionalUsage) {
351352
conditionText = conditionText.replace(/[0-9]/g, '');
353+
conditionText = conditionText.replace(".px", "px");
354+
conditionText = conditionText.replace(".em", "px");
352355
if(!selectedAtruleConditionalUsage[conditionText]) {
353356
selectedAtruleConditionalUsage[conditionText] = Object.create(null);
354357
selectedAtruleConditionalUsage[conditionText] = {"count": 1}
@@ -358,6 +361,41 @@ void function() { try {
358361
}
359362
}
360363

364+
/**
365+
* This processes the usage of nested atrules within other at rules.
366+
*/
367+
function processNestedAtRules(cssRules, selectedAtruleConditionalUsage) {
368+
for(let index in cssRules) {
369+
let ruleBody = cssRules[index];
370+
371+
372+
if(!ruleBody.cssText) {
373+
continue;
374+
}
375+
376+
// only collect stats for sub atrules
377+
if(!isRuleAnAtRule(ruleBody)) {
378+
continue;
379+
}
380+
381+
var nestRuleSelector = nestRuleSelector = '@atrule:' + ruleBody.type;
382+
383+
if(!selectedAtruleConditionalUsage["nested"]) {
384+
selectedAtruleConditionalUsage["nested"] = Object.create(null);
385+
}
386+
387+
var nestedUsage = selectedAtruleConditionalUsage["nested"];
388+
389+
if(!nestedUsage[nestRuleSelector]) {
390+
nestedUsage[nestRuleSelector] = Object.create(null);
391+
nestedUsage[nestRuleSelector] = { "count": 1 }
392+
} else {
393+
var nestedCount = nestedUsage[nestRuleSelector].count;
394+
nestedUsage[nestRuleSelector].count = nestedCount + 1;
395+
}
396+
}
397+
}
398+
361399
/**
362400
* This will process all other @atrules that don't have conditions or styles.
363401
* [1] It will process any props and values used within the body of the rule.
@@ -382,39 +420,8 @@ void function() { try {
382420
} else if(CSSUsageResults.rules[selectorText].props) {
383421
atrulesUsage[selectorText].props = CSSUsageResults.rules[selectorText].props;
384422
}
385-
386-
if(rule.pseudoClass) {
387-
processPseudoClassesOfAtrules(rule);
388-
}
389423
}
390424

391-
392-
/**
393-
* If an atrule as has a pseudo class such as @page, process the pseudo class and
394-
* add it to the atrule usage.
395-
*/
396-
function processPseudoClassesOfAtrules(rule) {
397-
var selectorText = '@atrule:' + rule.type;
398-
var selectorAtruleUsage = CSSUsageResults.atrules[selectorText];
399-
400-
if(!selectorAtruleUsage["pseudos"]) {
401-
selectorAtruleUsage["pseudos"] = Object.create(null);
402-
selectorAtruleUsage["pseudos"] = {};
403-
}
404-
405-
var pseudosUsageForSelector = selectorAtruleUsage["pseudos"];
406-
let pseudoClass = rule.pseudoClass;
407-
408-
if(!pseudosUsageForSelector[pseudoClass]) {
409-
pseudosUsageForSelector[pseudoClass] = Object.create(null);
410-
pseudosUsageForSelector[pseudoClass] = {"count": 1};
411-
} else {
412-
var pseudoCount = pseudosUsageForSelector[pseudoClass].count;
413-
pseudosUsageForSelector[pseudoClass].count = pseudoCount + 1;
414-
}
415-
}
416-
417-
418425
/**
419426
* Processes on @keyframe to add the appropriate props from the frame and a counter of which
420427
* frames are used throughout the document.

0 commit comments

Comments
 (0)