style.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /**
  2. * DevExtreme (core/utils/style.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var camelize = require("./inflector").camelize;
  11. var callOnce = require("./call_once");
  12. var typeUtils = require("./type");
  13. var domAdapter = require("../dom_adapter");
  14. var jsPrefixes = ["", "Webkit", "Moz", "O", "Ms"];
  15. var cssPrefixes = {
  16. "": "",
  17. Webkit: "-webkit-",
  18. Moz: "-moz-",
  19. O: "-o-",
  20. ms: "-ms-"
  21. };
  22. var getStyles = callOnce(function() {
  23. return domAdapter.createElement("dx").style
  24. });
  25. var forEachPrefixes = function(prop, callBack) {
  26. prop = camelize(prop, true);
  27. var result;
  28. for (var i = 0, cssPrefixesCount = jsPrefixes.length; i < cssPrefixesCount; i++) {
  29. var jsPrefix = jsPrefixes[i];
  30. var prefixedProp = jsPrefix + prop;
  31. var lowerPrefixedProp = camelize(prefixedProp);
  32. result = callBack(lowerPrefixedProp, jsPrefix);
  33. if (void 0 === result) {
  34. result = callBack(prefixedProp, jsPrefix)
  35. }
  36. if (void 0 !== result) {
  37. break
  38. }
  39. }
  40. return result || ""
  41. };
  42. var styleProp = function(name) {
  43. if (name in getStyles()) {
  44. return name
  45. }
  46. var originalName = name;
  47. name = name.charAt(0).toUpperCase() + name.substr(1);
  48. for (var i = 1; i < jsPrefixes.length; i++) {
  49. var prefixedProp = jsPrefixes[i].toLowerCase() + name;
  50. if (prefixedProp in getStyles()) {
  51. return prefixedProp
  52. }
  53. }
  54. return originalName
  55. };
  56. var stylePropPrefix = function(prop) {
  57. return forEachPrefixes(prop, function(specific, jsPrefix) {
  58. if (specific in getStyles()) {
  59. return cssPrefixes[jsPrefix]
  60. }
  61. })
  62. };
  63. var pxExceptions = ["fillOpacity", "columnCount", "flexGrow", "flexShrink", "fontWeight", "lineHeight", "opacity", "zIndex", "zoom"];
  64. var normalizeStyleProp = function(prop, value) {
  65. if (typeUtils.isNumeric(value) && pxExceptions.indexOf(prop) === -1) {
  66. value += "px"
  67. }
  68. return value
  69. };
  70. var setDimensionProperty = function(elements, propertyName, value) {
  71. if (elements) {
  72. value = typeUtils.isNumeric(value) ? value += "px" : value;
  73. for (var i = 0; i < elements.length; ++i) {
  74. elements[i].style[propertyName] = value
  75. }
  76. }
  77. };
  78. var setWidth = function(elements, value) {
  79. setDimensionProperty(elements, "width", value)
  80. };
  81. var setHeight = function(elements, value) {
  82. setDimensionProperty(elements, "height", value)
  83. };
  84. exports.styleProp = styleProp;
  85. exports.stylePropPrefix = stylePropPrefix;
  86. exports.normalizeStyleProp = normalizeStyleProp;
  87. exports.setWidth = setWidth;
  88. exports.setHeight = setHeight;