|
1 | | -var HTMLDOMPropertyConfig = require('./lib/html'); |
2 | | -var SVGDOMPropertyConfig = require('./lib/svg'); |
| 1 | +var HTMLDOMPropertyConfig = require('./lib/HTMLDOMPropertyConfig'); |
| 2 | +var SVGDOMPropertyConfig = require('./lib/SVGDOMPropertyConfig'); |
| 3 | +var injection = require('./lib/injection'); |
| 4 | + |
| 5 | +var MUST_USE_PROPERTY = injection.MUST_USE_PROPERTY; |
| 6 | +var HAS_BOOLEAN_VALUE = injection.HAS_BOOLEAN_VALUE; |
| 7 | +var HAS_NUMERIC_VALUE = injection.HAS_NUMERIC_VALUE; |
| 8 | +var HAS_POSITIVE_NUMERIC_VALUE = injection.HAS_POSITIVE_NUMERIC_VALUE; |
| 9 | +var HAS_OVERLOADED_BOOLEAN_VALUE = injection.HAS_OVERLOADED_BOOLEAN_VALUE; |
| 10 | + |
| 11 | +/** |
| 12 | + * @see https://github.com/facebook/react/blob/15-stable/src/renderers/dom/shared/DOMProperty.js#L14-L16 |
| 13 | + * |
| 14 | + * @param {Number} value |
| 15 | + * @param {Number} bitmask |
| 16 | + * @return {Boolean} |
| 17 | + */ |
| 18 | +function checkMask(value, bitmask) { |
| 19 | + return (value & bitmask) === bitmask; |
| 20 | +} |
| 21 | + |
| 22 | +/** |
| 23 | + * @see https://github.com/facebook/react/blob/15-stable/src/renderers/dom/shared/DOMProperty.js#L57 |
| 24 | + * |
| 25 | + * @param {Object} domPropertyConfig - HTMLDOMPropertyConfig or SVGDOMPropertyConfig |
| 26 | + * @param {Object} config - The object to be mutated |
| 27 | + * @param {Boolean} isSVG - Whether the injected config is HTML or SVG (it assumes the default is HTML) |
| 28 | + */ |
| 29 | +function injectDOMPropertyConfig(domPropertyConfig, config, isSVG) { |
| 30 | + var Properties = domPropertyConfig.Properties; |
| 31 | + var DOMAttributeNames = domPropertyConfig.DOMAttributeNames; |
| 32 | + var attributeName; |
| 33 | + var propertyName; |
| 34 | + var propConfig; |
| 35 | + |
| 36 | + for (propertyName in Properties) { |
| 37 | + attributeName = |
| 38 | + DOMAttributeNames[propertyName] || |
| 39 | + (isSVG ? propertyName : propertyName.toLowerCase()); |
| 40 | + propConfig = Properties[propertyName]; |
| 41 | + |
| 42 | + config[attributeName] = { |
| 43 | + attributeName: attributeName, |
| 44 | + propertyName: propertyName, |
| 45 | + mustUseProperty: checkMask(propConfig, MUST_USE_PROPERTY), |
| 46 | + hasBooleanValue: checkMask(propConfig, HAS_BOOLEAN_VALUE), |
| 47 | + hasNumericValue: checkMask(propConfig, HAS_NUMERIC_VALUE), |
| 48 | + hasPositiveNumericValue: checkMask( |
| 49 | + propConfig, |
| 50 | + HAS_POSITIVE_NUMERIC_VALUE |
| 51 | + ), |
| 52 | + hasOverloadedBooleanValue: checkMask( |
| 53 | + propConfig, |
| 54 | + HAS_OVERLOADED_BOOLEAN_VALUE |
| 55 | + ) |
| 56 | + }; |
| 57 | + } |
| 58 | +} |
| 59 | + |
| 60 | +/** |
| 61 | + * Properties map. |
| 62 | + * |
| 63 | + * @type {Object} |
| 64 | + */ |
| 65 | +var properties = {}; |
| 66 | +injectDOMPropertyConfig(HTMLDOMPropertyConfig, properties); |
| 67 | +injectDOMPropertyConfig(SVGDOMPropertyConfig, properties, true); |
3 | 68 |
|
4 | 69 | var ATTRIBUTE_NAME_START_CHAR = |
5 | 70 | ':A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD'; |
6 | | - |
7 | 71 | var ATTRIBUTE_NAME_CHAR = |
8 | 72 | ATTRIBUTE_NAME_START_CHAR + '\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040'; |
9 | 73 |
|
10 | 74 | module.exports = { |
11 | | - HTMLDOMPropertyConfig: HTMLDOMPropertyConfig, |
12 | | - SVGDOMPropertyConfig: SVGDOMPropertyConfig, |
| 75 | + properties: properties, |
13 | 76 |
|
14 | 77 | /** |
15 | 78 | * Checks whether a property name is a custom attribute. |
|
0 commit comments