You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.6 KiB
83 lines
2.6 KiB
"use strict"; |
|
var __spreadArrays = (this && this.__spreadArrays) || function () { |
|
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; |
|
for (var r = Array(s), k = 0, i = 0; i < il; i++) |
|
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) |
|
r[k] = a[j]; |
|
return r; |
|
}; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
var actionTypes = { |
|
equals: "", |
|
element: "~", |
|
start: "^", |
|
end: "$", |
|
any: "*", |
|
not: "!", |
|
hyphen: "|", |
|
}; |
|
var charsToEscape = new Set(__spreadArrays(Object.keys(actionTypes) |
|
.map(function (typeKey) { return actionTypes[typeKey]; }) |
|
.filter(Boolean), [ |
|
":", |
|
"[", |
|
"]", |
|
" ", |
|
"\\", |
|
])); |
|
function stringify(token) { |
|
return token.map(stringifySubselector).join(", "); |
|
} |
|
exports.default = stringify; |
|
function stringifySubselector(token) { |
|
return token.map(stringifyToken).join(""); |
|
} |
|
function stringifyToken(token) { |
|
switch (token.type) { |
|
// Simple types |
|
case "child": |
|
return " > "; |
|
case "parent": |
|
return " < "; |
|
case "sibling": |
|
return " ~ "; |
|
case "adjacent": |
|
return " + "; |
|
case "descendant": |
|
return " "; |
|
case "universal": |
|
return "*"; |
|
case "tag": |
|
return escapeName(token.name); |
|
case "pseudo-element": |
|
return "::" + escapeName(token.name); |
|
case "pseudo": |
|
if (token.data === null) |
|
return ":" + escapeName(token.name); |
|
if (typeof token.data === "string") { |
|
return ":" + escapeName(token.name) + "(" + token.data + ")"; |
|
} |
|
return ":" + escapeName(token.name) + "(" + stringify(token.data) + ")"; |
|
case "attribute": |
|
if (token.action === "exists") { |
|
return "[" + escapeName(token.name) + "]"; |
|
} |
|
if (token.name === "id" && |
|
token.action === "equals" && |
|
!token.ignoreCase) { |
|
return "#" + escapeName(token.value); |
|
} |
|
if (token.name === "class" && |
|
token.action === "element" && |
|
!token.ignoreCase) { |
|
return "." + escapeName(token.value); |
|
} |
|
return "[" + escapeName(token.name) + actionTypes[token.action] + "='" + escapeName(token.value) + "'" + (token.ignoreCase ? "i" : "") + "]"; |
|
} |
|
} |
|
function escapeName(str) { |
|
return str |
|
.split("") |
|
.map(function (c) { return (charsToEscape.has(c) ? "\\" + c : c); }) |
|
.join(""); |
|
}
|
|
|