You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.9 KiB
56 lines
1.9 KiB
/** |
|
* Copyright 2013-2015, Facebook, Inc. |
|
* All rights reserved. |
|
* |
|
* This source code is licensed under the BSD-style license found in the |
|
* LICENSE file in the root directory of this source tree. An additional grant |
|
* of patent rights can be found in the PATENTS file in the same directory. |
|
* |
|
* @providesModule dangerousStyleValue |
|
* @typechecks static-only |
|
*/ |
|
|
|
'use strict'; |
|
|
|
var CSSProperty = require("./CSSProperty"); |
|
|
|
var isUnitlessNumber = CSSProperty.isUnitlessNumber; |
|
|
|
/** |
|
* Convert a value into the proper css writable value. The style name `name` |
|
* should be logical (no hyphens), as specified |
|
* in `CSSProperty.isUnitlessNumber`. |
|
* |
|
* @param {string} name CSS property name such as `topMargin`. |
|
* @param {*} value CSS property value such as `10px`. |
|
* @return {string} Normalized style value with dimensions applied. |
|
*/ |
|
function dangerousStyleValue(name, value) { |
|
// Note that we've removed escapeTextForBrowser() calls here since the |
|
// whole string will be escaped when the attribute is injected into |
|
// the markup. If you provide unsafe user data here they can inject |
|
// arbitrary CSS which may be problematic (I couldn't repro this): |
|
// https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet |
|
// http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/ |
|
// This is not an XSS hole but instead a potential CSS injection issue |
|
// which has lead to a greater discussion about how we're going to |
|
// trust URLs moving forward. See #2115901 |
|
|
|
var isEmpty = value == null || typeof value === 'boolean' || value === ''; |
|
if (isEmpty) { |
|
return ''; |
|
} |
|
|
|
var isNonNumeric = isNaN(value); |
|
if (isNonNumeric || value === 0 || |
|
isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) { |
|
return '' + value; // cast to string |
|
} |
|
|
|
if (typeof value === 'string') { |
|
value = value.trim(); |
|
} |
|
return value + 'px'; |
|
} |
|
|
|
module.exports = dangerousStyleValue;
|
|
|