diff --git a/src/browser/ui/dom/HTMLDOMPropertyConfig.js b/src/browser/ui/dom/HTMLDOMPropertyConfig.js
index 268c963646..2c59d851a3 100644
--- a/src/browser/ui/dom/HTMLDOMPropertyConfig.js
+++ b/src/browser/ui/dom/HTMLDOMPropertyConfig.js
@@ -82,6 +82,7 @@ var HTMLDOMPropertyConfig = {
contentEditable: null,
contextMenu: MUST_USE_ATTRIBUTE,
controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+ coords: null,
crossOrigin: null,
data: null, // For `` acts as `src`.
dateTime: MUST_USE_ATTRIBUTE,
@@ -133,6 +134,7 @@ var HTMLDOMPropertyConfig = {
scrollTop: MUST_USE_PROPERTY,
seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+ shape: null,
size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
span: HAS_POSITIVE_NUMERIC_VALUE,
spellCheck: null,
@@ -146,6 +148,7 @@ var HTMLDOMPropertyConfig = {
target: null,
title: null,
type: null,
+ useMap: null,
value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,
width: MUST_USE_ATTRIBUTE,
wmode: MUST_USE_ATTRIBUTE,
diff --git a/vendor/fbtransform/transforms/__tests__/react-displayName-test.js b/vendor/fbtransform/transforms/__tests__/react-displayName-test.js
new file mode 100644
index 0000000000..6cdb1d4d6d
--- /dev/null
+++ b/vendor/fbtransform/transforms/__tests__/react-displayName-test.js
@@ -0,0 +1,138 @@
+/**
+ * Copyright 2004-present Facebook. All Rights Reserved.
+ *
+ * @emails jeffmo@fb.com
+ */
+"use strict";
+
+require('mock-modules').autoMockOff();
+
+var transformAll = require('../../syntax.js').transformAll;
+
+function transform(source) {
+ return transformAll(source, {}, ['allocate']);
+}
+
+describe('react displayName jsx', function() {
+
+ it('should only inject displayName if missing', function() {
+ var code = [
+ '/** @jsx React.DOM */',
+ '"use strict";',
+ 'var Whateva = React.createClass({',
+ ' displayName: \'Whateva\',',
+ ' render: function() {',
+ ' return
...whateva.
;',
+ ' }',
+ '});'
+ ].join('\n');
+
+ var result = [
+ '/** @jsx React.DOM */',
+ '"use strict";',
+ 'var Whateva = React.createClass({',
+ ' displayName: \'Whateva\',',
+ ' render: function() {',
+ ' return React.DOM.div({className: "whateva"}, "...whateva.");',
+ ' }',
+ '});'
+ ].join('\n');
+
+ expect(transform(code).code).toEqual(result);
+ });
+
+ it('should inject displayName in simple assignment', () => {
+ var code = [
+ '/** @jsx React.DOM */',
+ 'var Component = React.createClass({',
+ ' render: function() {',
+ ' return ;',
+ ' }',
+ '});'
+ ].join('\n');
+
+ var result = [
+ '/** @jsx React.DOM */',
+ 'var Component = React.createClass({displayName: \'Component\',',
+ ' render: function() {',
+ ' return React.DOM.div(null);',
+ ' }',
+ '});'
+ ].join('\n');
+
+ expect(transform(code).code).toEqual(result);
+ });
+
+ it('should inject displayName in simple assignment without var', () => {
+ var code = [
+ '/** @jsx React.DOM */',
+ 'var Component;',
+ 'Component = React.createClass({',
+ ' render: function() {',
+ ' return ;',
+ ' }',
+ '});'
+ ].join('\n');
+
+ var result = [
+ '/** @jsx React.DOM */',
+ 'var Component;',
+ 'Component = React.createClass({displayName: \'Component\',',
+ ' render: function() {',
+ ' return React.DOM.div(null);',
+ ' }',
+ '});'
+ ].join('\n');
+
+ expect(transform(code).code).toEqual(result);
+ });
+
+ it('should inject displayName in property assignment', () => {
+ var code = [
+ '/** @jsx React.DOM */',
+ 'exports.Component = React.createClass({',
+ ' render: function() {',
+ ' return ;',
+ ' }',
+ '});'
+ ].join('\n');
+
+ var result = [
+ '/** @jsx React.DOM */',
+ 'exports.Component = React.createClass({displayName: \'Component\',',
+ ' render: function() {',
+ ' return React.DOM.div(null);',
+ ' }',
+ '});'
+ ].join('\n');
+
+ expect(transform(code).code).toEqual(result);
+ });
+
+ it('should inject displayName in object declaration', () => {
+ var code = [
+ '/** @jsx React.DOM */',
+ 'exports = {',
+ ' Component: React.createClass({',
+ ' render: function() {',
+ ' return ;',
+ ' }',
+ ' })',
+ '};'
+ ].join('\n');
+
+ var result = [
+ '/** @jsx React.DOM */',
+ 'exports = {',
+ ' Component: React.createClass({displayName: \'Component\',',
+ ' render: function() {',
+ ' return React.DOM.div(null);',
+ ' }',
+ ' })',
+ '};'
+ ].join('\n');
+
+ expect(transform(code).code).toEqual(result);
+ });
+
+});