getVendorPrefixedName.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. "use strict";
  2. /**
  3. * Copyright (c) 2013-present, Facebook, Inc.
  4. *
  5. * This source code is licensed under the MIT license found in the
  6. * LICENSE file in the root directory of this source tree.
  7. *
  8. * @typechecks
  9. */
  10. var ExecutionEnvironment = require("./ExecutionEnvironment");
  11. var UserAgent = require("./UserAgent");
  12. var camelize = require("./camelize");
  13. var invariant = require("./invariant");
  14. var memoized = {};
  15. var prefixes = ['Webkit', 'ms', 'Moz', 'O'];
  16. var prefixRegex = new RegExp('^(' + prefixes.join('|') + ')');
  17. var testStyle = ExecutionEnvironment.canUseDOM ? document.createElement('div').style : {};
  18. function getWithPrefix(name) {
  19. for (var i = 0; i < prefixes.length; i++) {
  20. var prefixedName = prefixes[i] + name;
  21. if (prefixedName in testStyle) {
  22. return prefixedName;
  23. }
  24. }
  25. return null;
  26. }
  27. function guessVendorPrefixedNameFromUserAgent(name) {
  28. switch (name) {
  29. case 'lineClamp':
  30. if (UserAgent.isEngine('WebKit >= 315.14.2')) {
  31. return 'WebkitLineClamp';
  32. }
  33. return null;
  34. default:
  35. return null;
  36. }
  37. }
  38. /**
  39. * @param {string} property Name of a css property to check for.
  40. * @return {?string} property name supported in the browser, or null if not
  41. * supported.
  42. */
  43. function getVendorPrefixedName(property) {
  44. var name = camelize(property);
  45. if (memoized[name] === undefined) {
  46. var capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);
  47. if (prefixRegex.test(capitalizedName)) {
  48. !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'getVendorPrefixedName must only be called with unprefixed' + 'CSS property names. It was called with %s', property) : invariant(false) : void 0;
  49. }
  50. if (ExecutionEnvironment.canUseDOM) {
  51. memoized[name] = name in testStyle ? name : getWithPrefix(capitalizedName);
  52. } else {
  53. memoized[name] = guessVendorPrefixedNameFromUserAgent(name);
  54. }
  55. }
  56. return memoized[name];
  57. }
  58. module.exports = getVendorPrefixedName;