padding.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. "use strict";
  2. const parsers = require("../parsers");
  3. const paddingTop = require("./paddingTop");
  4. const paddingRight = require("./paddingRight");
  5. const paddingBottom = require("./paddingBottom");
  6. const paddingLeft = require("./paddingLeft");
  7. const property = "padding";
  8. module.exports.position = "edges";
  9. module.exports.shorthandFor = new Map([
  10. [paddingTop.property, paddingTop],
  11. [paddingRight.property, paddingRight],
  12. [paddingBottom.property, paddingBottom],
  13. [paddingLeft.property, paddingLeft]
  14. ]);
  15. module.exports.parse = (v, opt = {}) => {
  16. const { globalObject } = opt;
  17. if (v === "") {
  18. return v;
  19. }
  20. const values = parsers.parsePropertyValue(property, v, {
  21. globalObject,
  22. inArray: true
  23. });
  24. const parsedValues = [];
  25. if (Array.isArray(values) && values.length) {
  26. if (values.length > 4) {
  27. return;
  28. }
  29. for (const value of values) {
  30. const parsedValue = parsers.resolveNumericValue([value], {
  31. length: values.length,
  32. min: 0,
  33. type: "length"
  34. });
  35. if (!parsedValue) {
  36. return;
  37. }
  38. parsedValues.push(parsedValue);
  39. }
  40. } else if (typeof values === "string") {
  41. parsedValues.push(values);
  42. }
  43. if (parsedValues.length) {
  44. return parsedValues;
  45. }
  46. };
  47. module.exports.definition = {
  48. set(v) {
  49. v = parsers.prepareValue(v);
  50. if (parsers.hasVarFunc(v)) {
  51. for (const [longhand] of module.exports.shorthandFor) {
  52. this._setProperty(longhand, "");
  53. }
  54. this._setProperty(property, v);
  55. } else {
  56. const val = module.exports.parse(v, {
  57. globalObject: this._global
  58. });
  59. if (Array.isArray(val) || typeof val === "string") {
  60. const priority = this._priorities.get(property) ?? "";
  61. this._positionShorthandSetter(property, val, priority);
  62. }
  63. }
  64. },
  65. get() {
  66. return this.getPropertyValue(property);
  67. },
  68. enumerable: true,
  69. configurable: true
  70. };
  71. module.exports.property = property;