@@ -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.
0 commit comments