@@ -34,6 +34,56 @@ var removeImportant = function (renderer) {
34
34
} ;
35
35
} ;
36
36
37
+ var warnOnReservedSelectors = function ( renderer ) {
38
+ var putRaw = renderer . putRaw ;
39
+
40
+ renderer . putRaw = function ( rawCssRule ) {
41
+ var pos = rawCssRule . indexOf ( '{' ) ;
42
+
43
+ if ( pos < 0 )
44
+ return putRaw ( rawCssRule ) ;
45
+
46
+ var selectors = ' ' + rawCssRule . substr ( 0 , pos ) ;
47
+
48
+ if ( selectors . match ( / \s \. - a m p - / g) ) {
49
+ console . error (
50
+ 'Detected class name that starts with "-amp-". ' +
51
+ 'Class names starting with "-amp-" are reserved from AMP components. ' +
52
+ rawCssRule
53
+ ) ;
54
+ }
55
+
56
+ if ( selectors . match ( / \s i - a m p - / g) ) {
57
+ console . error (
58
+ 'Detected CSS selector that matches "i-amp-" elements. ' +
59
+ 'Slectors for "i-amp-" elements are reserved from AMP components. ' +
60
+ rawCssRule
61
+ ) ;
62
+ }
63
+
64
+ return putRaw ( rawCssRule ) ;
65
+ } ;
66
+ } ;
67
+
68
+ var removeReservedSelectors = function ( renderer ) {
69
+ var putRaw = renderer . putRaw ;
70
+
71
+ renderer . putRaw = function ( rawCssRule ) {
72
+ var pos = rawCssRule . indexOf ( '{' ) ;
73
+
74
+ if ( pos < 0 )
75
+ return putRaw ( rawCssRule ) ;
76
+
77
+ var selectors = ' ' + rawCssRule . substr ( 0 , pos ) ;
78
+
79
+ if ( selectors . match ( / \s \. - a m p - / g) || selectors . match ( / \s i - a m p - / g) ) {
80
+ return ;
81
+ }
82
+
83
+ return putRaw ( rawCssRule ) ;
84
+ } ;
85
+ } ;
86
+
37
87
var warnOnBanned = function ( renderer ) {
38
88
var decl = renderer . decl ;
39
89
@@ -84,6 +134,16 @@ exports.addon = function (renderer, config) {
84
134
removeImportant ( renderer ) ;
85
135
}
86
136
137
+ // Warn on reserved selectors.
138
+ if ( process . env . NODE_ENV !== 'production' ) {
139
+ warnOnReservedSelectors ( renderer ) ;
140
+ }
141
+
142
+ // Remove reserved selectors ".-amp-" and "i-amp-".
143
+ if ( config . removeReserved ) {
144
+ removeReservedSelectors ( renderer ) ;
145
+ }
146
+
87
147
// Warn on banned CSS properties.
88
148
if ( process . env . NODE_ENV !== 'production' ) {
89
149
warnOnBanned ( renderer ) ;
0 commit comments