Skip to content

Commit 7314eae

Browse files
committed
feat: improve amp addon
1 parent 5e5b633 commit 7314eae

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

addon/amp.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,56 @@ var removeImportant = function (renderer) {
3434
};
3535
};
3636

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\.-amp-/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(/\si-amp-/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\.-amp-/g) || selectors.match(/\si-amp-/g)) {
80+
return;
81+
}
82+
83+
return putRaw(rawCssRule);
84+
};
85+
};
86+
3787
var warnOnBanned = function (renderer) {
3888
var decl = renderer.decl;
3989

@@ -84,6 +134,16 @@ exports.addon = function (renderer, config) {
84134
removeImportant(renderer);
85135
}
86136

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+
87147
// Warn on banned CSS properties.
88148
if (process.env.NODE_ENV !== 'production') {
89149
warnOnBanned(renderer);

0 commit comments

Comments
 (0)