Skip to content

Commit

Permalink
Warn when casing CSS vendor prefixes incorrectly
Browse files Browse the repository at this point in the history
Fixes facebook#2487.

Test Plan: jest
  • Loading branch information
sophiebits committed Nov 15, 2014
1 parent 0db323e commit 22da7b6
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/browser/ui/dom/CSSPropertyOperations.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ if (ExecutionEnvironment.canUseDOM) {
}

if (__DEV__) {
// 'msTransform' is correct, but the other prefixes should be capitalized
var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;

var warnedStyleNames = {};

var warnHyphenatedStyleName = function(name) {
Expand All @@ -48,6 +51,19 @@ if (__DEV__) {
camelizeStyleName(name) + '?'
);
};

var warnBadVendoredStyleName = function(name) {
if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
return;
}

warnedStyleNames[name] = true;
warning(
false,
'Unsupported vendor-prefixed style property ' + name + '. Did you mean ' +
name.charAt(0).toUpperCase() + name.slice(1) + '?'
);
};
}

/**
Expand Down Expand Up @@ -76,6 +92,8 @@ var CSSPropertyOperations = {
if (__DEV__) {
if (styleName.indexOf('-') > -1) {
warnHyphenatedStyleName(styleName);
} else if (badVendoredStyleNamePattern.test(styleName)) {
warnBadVendoredStyleName(styleName);
}
}
var styleValue = styles[styleName];
Expand Down Expand Up @@ -103,6 +121,8 @@ var CSSPropertyOperations = {
if (__DEV__) {
if (styleName.indexOf('-') > -1) {
warnHyphenatedStyleName(styleName);
} else if (badVendoredStyleNamePattern.test(styleName)) {
warnBadVendoredStyleName(styleName);
}
}
var styleValue = dangerousStyleValue(styleName, styles[styleName]);
Expand Down
17 changes: 17 additions & 0 deletions src/browser/ui/dom/__tests__/CSSPropertyOperations-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -136,4 +136,21 @@ describe('CSSPropertyOperations', function() {
expect(console.warn.argsForCall[1][0]).toContain('WebkitTransform');
});

it('warns when miscapitalizing vendored style names', function() {
spyOn(console, 'warn');

CSSPropertyOperations.createMarkupForStyles({
msTransform: 'translate3d(0, 0, 0)',
oTransform: 'translate3d(0, 0, 0)',
webkitTransform: 'translate3d(0, 0, 0)'
});

// msTransform is correct already and shouldn't warn
expect(console.warn.argsForCall.length).toBe(2);
expect(console.warn.argsForCall[0][0]).toContain('oTransform');
expect(console.warn.argsForCall[0][0]).toContain('OTransform');
expect(console.warn.argsForCall[1][0]).toContain('webkitTransform');
expect(console.warn.argsForCall[1][0]).toContain('WebkitTransform');
});

});

0 comments on commit 22da7b6

Please sign in to comment.