Skip to content

Commit 5b17e75

Browse files
committed
Support more properties for image maps
Supporting the `<area>` tag is pretty useless if we don't support the necessary properties.
1 parent 5eb57fa commit 5b17e75

2 files changed

Lines changed: 141 additions & 0 deletions

File tree

src/browser/ui/dom/HTMLDOMPropertyConfig.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ var HTMLDOMPropertyConfig = {
8282
contentEditable: null,
8383
contextMenu: MUST_USE_ATTRIBUTE,
8484
controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
85+
coords: null,
8586
crossOrigin: null,
8687
data: null, // For `<object />` acts as `src`.
8788
dateTime: MUST_USE_ATTRIBUTE,
@@ -133,6 +134,7 @@ var HTMLDOMPropertyConfig = {
133134
scrollTop: MUST_USE_PROPERTY,
134135
seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
135136
selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
137+
shape: null,
136138
size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
137139
span: HAS_POSITIVE_NUMERIC_VALUE,
138140
spellCheck: null,
@@ -146,6 +148,7 @@ var HTMLDOMPropertyConfig = {
146148
target: null,
147149
title: null,
148150
type: null,
151+
useMap: null,
149152
value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,
150153
width: MUST_USE_ATTRIBUTE,
151154
wmode: MUST_USE_ATTRIBUTE,
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
/**
2+
* Copyright 2004-present Facebook. All Rights Reserved.
3+
*
4+
* @emails jeffmo@fb.com
5+
*/
6+
"use strict";
7+
8+
require('mock-modules').autoMockOff();
9+
10+
var transformAll = require('../../syntax.js').transformAll;
11+
12+
function transform(source) {
13+
return transformAll(source, {}, ['allocate']);
14+
}
15+
16+
describe('react displayName jsx', function() {
17+
18+
it('should only inject displayName if missing', function() {
19+
var code = [
20+
'/** @jsx React.DOM */',
21+
'"use strict";',
22+
'var Whateva = React.createClass({',
23+
' displayName: \'Whateva\',',
24+
' render: function() {',
25+
' return <div className=\'whateva\'>...whateva.</div>;',
26+
' }',
27+
'});'
28+
].join('\n');
29+
30+
var result = [
31+
'/** @jsx React.DOM */',
32+
'"use strict";',
33+
'var Whateva = React.createClass({',
34+
' displayName: \'Whateva\',',
35+
' render: function() {',
36+
' return React.DOM.div({className: "whateva"}, "...whateva.");',
37+
' }',
38+
'});'
39+
].join('\n');
40+
41+
expect(transform(code).code).toEqual(result);
42+
});
43+
44+
it('should inject displayName in simple assignment', () => {
45+
var code = [
46+
'/** @jsx React.DOM */',
47+
'var Component = React.createClass({',
48+
' render: function() {',
49+
' return <div/>;',
50+
' }',
51+
'});'
52+
].join('\n');
53+
54+
var result = [
55+
'/** @jsx React.DOM */',
56+
'var Component = React.createClass({displayName: \'Component\',',
57+
' render: function() {',
58+
' return React.DOM.div(null);',
59+
' }',
60+
'});'
61+
].join('\n');
62+
63+
expect(transform(code).code).toEqual(result);
64+
});
65+
66+
it('should inject displayName in simple assignment without var', () => {
67+
var code = [
68+
'/** @jsx React.DOM */',
69+
'var Component;',
70+
'Component = React.createClass({',
71+
' render: function() {',
72+
' return <div/>;',
73+
' }',
74+
'});'
75+
].join('\n');
76+
77+
var result = [
78+
'/** @jsx React.DOM */',
79+
'var Component;',
80+
'Component = React.createClass({displayName: \'Component\',',
81+
' render: function() {',
82+
' return React.DOM.div(null);',
83+
' }',
84+
'});'
85+
].join('\n');
86+
87+
expect(transform(code).code).toEqual(result);
88+
});
89+
90+
it('should inject displayName in property assignment', () => {
91+
var code = [
92+
'/** @jsx React.DOM */',
93+
'exports.Component = React.createClass({',
94+
' render: function() {',
95+
' return <div/>;',
96+
' }',
97+
'});'
98+
].join('\n');
99+
100+
var result = [
101+
'/** @jsx React.DOM */',
102+
'exports.Component = React.createClass({displayName: \'Component\',',
103+
' render: function() {',
104+
' return React.DOM.div(null);',
105+
' }',
106+
'});'
107+
].join('\n');
108+
109+
expect(transform(code).code).toEqual(result);
110+
});
111+
112+
it('should inject displayName in object declaration', () => {
113+
var code = [
114+
'/** @jsx React.DOM */',
115+
'exports = {',
116+
' Component: React.createClass({',
117+
' render: function() {',
118+
' return <div/>;',
119+
' }',
120+
' })',
121+
'};'
122+
].join('\n');
123+
124+
var result = [
125+
'/** @jsx React.DOM */',
126+
'exports = {',
127+
' Component: React.createClass({displayName: \'Component\',',
128+
' render: function() {',
129+
' return React.DOM.div(null);',
130+
' }',
131+
' })',
132+
'};'
133+
].join('\n');
134+
135+
expect(transform(code).code).toEqual(result);
136+
});
137+
138+
});

0 commit comments

Comments
 (0)