stringify.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var actionTypes = {
  4. equals: "",
  5. element: "~",
  6. start: "^",
  7. end: "$",
  8. any: "*",
  9. not: "!",
  10. hyphen: "|",
  11. };
  12. function stringify(token) {
  13. return token.map(stringifySubselector).join(", ");
  14. }
  15. exports.default = stringify;
  16. function stringifySubselector(token) {
  17. return token.map(stringifyToken).join("");
  18. }
  19. function stringifyToken(token) {
  20. switch (token.type) {
  21. // Simple types
  22. case "child":
  23. return " > ";
  24. case "parent":
  25. return " < ";
  26. case "sibling":
  27. return " ~ ";
  28. case "adjacent":
  29. return " + ";
  30. case "descendant":
  31. return " ";
  32. case "universal":
  33. return "*";
  34. case "tag":
  35. return escapeName(token.name);
  36. case "pseudo-element":
  37. return "::" + escapeName(token.name);
  38. case "pseudo":
  39. if (token.data === null)
  40. return ":" + escapeName(token.name);
  41. if (typeof token.data === "string") {
  42. return ":" + escapeName(token.name) + "(" + token.data + ")";
  43. }
  44. return ":" + escapeName(token.name) + "(" + stringify(token.data) + ")";
  45. case "attribute":
  46. if (token.action === "exists") {
  47. return "[" + escapeName(token.name) + "]";
  48. }
  49. if (token.name === "id" &&
  50. token.action === "equals" &&
  51. !token.ignoreCase) {
  52. return "#" + escapeName(token.value);
  53. }
  54. if (token.name === "class" &&
  55. token.action === "element" &&
  56. !token.ignoreCase) {
  57. return "." + escapeName(token.value);
  58. }
  59. return "[" + escapeName(token.name) + actionTypes[token.action] + "='" + escapeName(token.value) + "'" + (token.ignoreCase ? "i" : "") + "]";
  60. default:
  61. throw new Error("Unknown type");
  62. }
  63. }
  64. function escapeName(str) {
  65. //TODO
  66. return str;
  67. }