@@ -824,84 +824,36 @@ void function() { try {
824
824
atrulesUsage [ selectorText ] = Object . create ( null ) ;
825
825
atrulesUsage [ selectorText ] = { "count" : 1 ,
826
826
"props" : { } ,
827
- "nested" : { } ,
828
827
"conditions" : { } }
829
828
} else {
830
829
var count = atrulesUsage [ selectorText ] . count ;
831
- count = count ++ ;
830
+ atrulesUsage [ selectorText ] . count = count + 1 ;
832
831
}
833
832
834
833
var selectedAtruleUsage = atrulesUsage [ selectorText ] ;
835
834
836
835
if ( rule . cssRules ) {
837
836
CSSUsage . PropertyValuesAnalyzer . anaylzeStyleOfRulePropCount ( rule , selectedAtruleUsage ) ;
838
- processNestedRules ( rule , selectedAtruleUsage . nested ) ;
839
837
}
840
838
841
839
processConditionText ( rule . conditionText , selectedAtruleUsage . conditions ) ;
842
840
}
843
841
844
- /**
845
- * Analyzes the given @atrules, such as @supports, and counts the usage of the nested rules
846
- * according to their type. NOTE: must pass in the current usage of nested rules for the
847
- * given @atrule.
848
- */
849
- function processNestedRules ( rule , nestedRulesUsage ) {
850
- // find the rule count for nested rules
851
- for ( let index in rule . cssRules ) {
852
- let ruleBody = rule . cssRules [ index ] ;
853
-
854
- if ( ! ruleBody . cssText ) {
855
- continue ;
856
- }
857
-
858
- var nestRuleSelector ;
859
-
860
- if ( isRuleAnAtRule ( ruleBody ) ) {
861
- nestRuleSelector = '@atrule:' + ruleBody . type ;
862
-
863
- } else if ( ruleBody . style ) {
864
- if ( ruleBody . selectorText ) {
865
- try {
866
- var selectorText = CSSUsage . PropertyValuesAnalyzer . cleanSelectorText ( ruleBody . selectorText ) ;
867
- var matchedElements = [ ] . slice . call ( document . querySelectorAll ( selectorText ) ) ;
868
-
869
- if ( matchedElements . length == 0 ) {
870
- continue ;
871
- }
872
-
873
- var cleanedSelector = CSSUsage . PropertyValuesAnalyzer . generalizedSelectorsOf ( selectorText ) ;
874
- nestRuleSelector = cleanedSelector [ 0 ] ; // only passed in one selector to a function that returns many
875
- } catch ( ex ) {
876
- continue ;
877
- }
878
- }
879
- }
880
-
881
- if ( nestRuleSelector ) {
882
- if ( ! nestedRulesUsage [ nestRuleSelector ] ) {
883
- nestedRulesUsage [ nestRuleSelector ] = Object . create ( null ) ;
884
- nestedRulesUsage [ nestRuleSelector ] = { "count" : 1 }
885
- } else {
886
- var nestedCount = nestedRulesUsage [ nestRuleSelector ] . count ;
887
- nestedCount = nestedCount ++ ;
888
- }
889
- }
890
- }
891
- }
892
-
893
842
/**
894
843
* This processes the usage of conditions of conditional @atrules like @media.
895
844
* Requires the condition of the rule to process and the current recorded usage
896
845
* of the @atrule in question.
897
846
*/
898
847
function processConditionText ( conditionText , selectedAtruleConditionalUsage ) {
848
+ // replace numeric specific information from condition statements
849
+ conditionText = conditionText . replace ( / [ 0 - 9 ] + .* [ 0 - 9 ] + / g, '' ) ;
850
+
899
851
if ( ! selectedAtruleConditionalUsage [ conditionText ] ) {
900
852
selectedAtruleConditionalUsage [ conditionText ] = Object . create ( null ) ;
901
853
selectedAtruleConditionalUsage [ conditionText ] = { "count" : 1 }
902
854
} else {
903
855
var count = selectedAtruleConditionalUsage [ conditionText ] . count ;
904
- count = count ++ ;
856
+ selectedAtruleConditionalUsage [ conditionText ] . count = count + 1 ;
905
857
}
906
858
}
907
859
@@ -920,48 +872,18 @@ void function() { try {
920
872
"props" : { } }
921
873
} else {
922
874
var count = atrulesUsage [ selectorText ] . count ;
923
- count = count ++ ;
875
+ atrulesUsage [ selectorText ] . count = count + 1 ;
924
876
}
925
877
926
878
// @keyframes rule type is 7
927
879
if ( rule . type == 7 ) {
928
880
processKeyframeAtRules ( rule ) ;
929
881
} else if ( CSSUsageResults . rules [ selectorText ] . props ) {
930
882
atrulesUsage [ selectorText ] . props = CSSUsageResults . rules [ selectorText ] . props ;
931
- }
932
-
933
- if ( rule . pseudoClass ) {
934
- processPseudoClassesOfAtrules ( rule ) ;
883
+ delete atrulesUsage [ selectorText ] . props . values ;
935
884
}
936
885
}
937
886
938
-
939
- /**
940
- * If an atrule as has a pseudo class such as @page, process the pseudo class and
941
- * add it to the atrule usage.
942
- */
943
- function processPseudoClassesOfAtrules ( rule ) {
944
- var selectorText = '@atrule:' + rule . type ;
945
- var selectorAtruleUsage = CSSUsageResults . atrules [ selectorText ] ;
946
-
947
- if ( ! selectorAtruleUsage [ "pseudos" ] ) {
948
- selectorAtruleUsage [ "pseudos" ] = Object . create ( null ) ;
949
- selectorAtruleUsage [ "pseudos" ] = { } ;
950
- }
951
-
952
- var pseudosUsageForSelector = selectorAtruleUsage [ "pseudos" ] ;
953
- let pseudoClass = rule . pseudoClass ;
954
-
955
- if ( ! pseudosUsageForSelector [ pseudoClass ] ) {
956
- pseudosUsageForSelector [ pseudoClass ] = Object . create ( null ) ;
957
- pseudosUsageForSelector [ pseudoClass ] = { "count" : 1 } ;
958
- } else {
959
- var pseudoCount = pseudosUsageForSelector [ pseudoClass ] . count ;
960
- pseudoCount = pseudoCount ++ ;
961
- }
962
- }
963
-
964
-
965
887
/**
966
888
* Processes on @keyframe to add the appropriate props from the frame and a counter of which
967
889
* frames are used throughout the document.
@@ -980,18 +902,23 @@ void function() { try {
980
902
* WARN: tightly coupled with previous processing of rules.
981
903
*/
982
904
atrulesUsageForSelector . props = CSSUsageResults . rules [ "@atrule:8" ] . props ;
905
+ delete atrulesUsageForSelector . props . values ;
983
906
984
907
for ( let index in rule . cssRules ) {
985
908
let keyframe = rule . cssRules [ index ] ;
986
909
var atrulesUsageForKeyframeOfSelector = atrulesUsageForSelector . keyframes ;
987
910
988
- if ( keyframe . keyText ) {
989
- if ( ! atrulesUsageForKeyframeOfSelector [ keyframe . keyText ] ) {
990
- atrulesUsageForKeyframeOfSelector [ keyframe . keyText ] = { "count" : 1 } ;
991
- } else {
992
- var keyframeCount = atrulesUsageForKeyframeOfSelector [ keyframe . keyText ] . count ;
993
- keyframeCount = keyframeCount ++ ;
994
- }
911
+ if ( ! keyframe . keyText ) {
912
+ continue ;
913
+ }
914
+
915
+ var frame = keyframe . keyText ;
916
+
917
+ if ( ! atrulesUsageForKeyframeOfSelector [ frame ] ) {
918
+ atrulesUsageForKeyframeOfSelector [ frame ] = { "count" : 1 } ;
919
+ } else {
920
+ var keyframeCount = atrulesUsageForKeyframeOfSelector [ frame ] . count ;
921
+ atrulesUsageForKeyframeOfSelector [ frame ] . count = keyframeCount + 1 ;
995
922
}
996
923
}
997
924
}
@@ -1505,6 +1432,20 @@ void function() { try {
1505
1432
continue ;
1506
1433
}
1507
1434
1435
+ if ( ruleBody . selector ) {
1436
+ try {
1437
+ var selectorText = CssPropertyValuesAnalyzer . cleanSelectorText ( ruleBody . selectorText ) ;
1438
+ var matchedElements = [ ] . slice . call ( document . querySelectorAll ( selectorText ) ) ;
1439
+
1440
+ if ( matchedElements . length == 0 ) {
1441
+ continue ;
1442
+ }
1443
+ } catch ( ex ) {
1444
+ console . warn ( ex . stack || ( "Invalid selector: " + selectorText + " -- via " + ruleBody . selectorText ) ) ;
1445
+ continue ;
1446
+ }
1447
+ }
1448
+
1508
1449
let cssText = ' ' + style . cssText . toLowerCase ( ) ;
1509
1450
1510
1451
for ( var i = style . length ; i -- ; ) {
@@ -1532,7 +1473,7 @@ void function() { try {
1532
1473
propsForSelectedAtrule [ normalizedKey ] = { "count" : 1 } ;
1533
1474
} else {
1534
1475
var propCount = propsForSelectedAtrule [ normalizedKey ] . count ;
1535
- propCount = propCount ++ ;
1476
+ propsForSelectedAtrule [ normalizedKey ] . count = propCount + 1 ;
1536
1477
}
1537
1478
}
1538
1479
}
@@ -1812,7 +1753,7 @@ void function() { try {
1812
1753
1813
1754
CSSUsageResults . usages = results ;
1814
1755
deleteDuplicatedAtRules ( ) ; // TODO: issue #52
1815
-
1756
+
1816
1757
if ( window . debugCSSUsage ) if ( window . debugCSSUsage ) console . log ( CSSUsageResults . usages ) ;
1817
1758
}
1818
1759
@@ -1830,6 +1771,8 @@ void function() { try {
1830
1771
delete cssUsageRules [ key ] ;
1831
1772
}
1832
1773
}
1774
+
1775
+ delete CSSUsageResults . atrules [ "@atrule:8" ] ; // delete duplicated data from atrule:7, keyframe
1833
1776
}
1834
1777
} ( ) ;
1835
1778
0 commit comments