backgroundPosition.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. "use strict";
  2. const parsers = require("../parsers");
  3. module.exports.parse = function parse(v) {
  4. const parts = parsers.splitValue(v);
  5. if (!parts.length || parts.length > 2) {
  6. return;
  7. }
  8. const validKeywordsX = ["left", "center", "right"];
  9. const validKeywordsY = ["top", "center", "bottom"];
  10. if (parts.length === 1) {
  11. const dim = parsers.parseMeasurement(parts[0]);
  12. if (dim) {
  13. return dim;
  14. }
  15. const validKeywords = new Set([...validKeywordsX, ...validKeywordsY]);
  16. return parsers.parseKeyword(v, [...validKeywords]);
  17. }
  18. const [partX, partY] = parts;
  19. const posX = parsers.parseMeasurement(partX) || parsers.parseKeyword(partX, validKeywordsX);
  20. if (posX) {
  21. const posY = parsers.parseMeasurement(partY) || parsers.parseKeyword(partY, validKeywordsY);
  22. if (posY) {
  23. return `${posX} ${posY}`;
  24. }
  25. }
  26. };
  27. module.exports.isValid = function isValid(v) {
  28. if (v === "") {
  29. return true;
  30. }
  31. return typeof module.exports.parse(v) === "string";
  32. };
  33. module.exports.definition = {
  34. set(v) {
  35. v = parsers.prepareValue(v, this._global);
  36. if (parsers.hasVarFunc(v)) {
  37. this._setProperty("background", "");
  38. this._setProperty("background-position", v);
  39. } else {
  40. this._setProperty("background-position", module.exports.parse(v));
  41. }
  42. },
  43. get() {
  44. return this.getPropertyValue("background-position");
  45. },
  46. enumerable: true,
  47. configurable: true
  48. };