forked from mystiq/hydrogen-web
Only extract into variables if file is svg
This commit is contained in:
parent
b7a47ae901
commit
1a50effd86
2 changed files with 19 additions and 8 deletions
|
@ -31,9 +31,12 @@ function findAndReplaceUrl(decl) {
|
||||||
if (node.type !== "function" || node.value !== "url") {
|
if (node.type !== "function" || node.value !== "url") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const urlStringNode = node.nodes[0];
|
const url = node.nodes[0].value;
|
||||||
|
if (!url.match(/\.svg\?primary=.+/)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const variableName = `${idToPrepend}-${counter++}`;
|
const variableName = `${idToPrepend}-${counter++}`;
|
||||||
urlVariables.set(variableName, urlStringNode.value);
|
urlVariables.set(variableName, url);
|
||||||
node.value = "var";
|
node.value = "var";
|
||||||
node.nodes = [{ type: "word", value: `--${variableName}` }];
|
node.nodes = [{ type: "word", value: `--${variableName}` }];
|
||||||
});
|
});
|
||||||
|
@ -61,7 +64,9 @@ module.exports = (opts = {}) => {
|
||||||
|
|
||||||
Once(root, { Rule, Declaration }) {
|
Once(root, { Rule, Declaration }) {
|
||||||
root.walkDecls(decl => findAndReplaceUrl(decl));
|
root.walkDecls(decl => findAndReplaceUrl(decl));
|
||||||
|
if (urlVariables.size) {
|
||||||
addResolvedVariablesToRootSelector(root, { Rule, Declaration });
|
addResolvedVariablesToRootSelector(root, { Rule, Declaration });
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,10 +21,10 @@ module.exports.tests = function tests() {
|
||||||
return {
|
return {
|
||||||
"url is replaced with variable": async (assert) => {
|
"url is replaced with variable": async (assert) => {
|
||||||
const inputCSS = `div {
|
const inputCSS = `div {
|
||||||
background: no-repeat center/80% url("../img/image.png");
|
background: no-repeat center/80% url("../img/image.svg?primary=main-color--darker-20");
|
||||||
}
|
}
|
||||||
button {
|
button {
|
||||||
background: url("/home/foo/bar/cool.jpg");
|
background: url("/home/foo/bar/cool.svg?primary=blue&secondary=green");
|
||||||
}`;
|
}`;
|
||||||
const outputCSS =
|
const outputCSS =
|
||||||
`div {
|
`div {
|
||||||
|
@ -35,12 +35,18 @@ module.exports.tests = function tests() {
|
||||||
}`+
|
}`+
|
||||||
`
|
`
|
||||||
:root {
|
:root {
|
||||||
--icon-url-0: url("../img/image.png");
|
--icon-url-0: url("../img/image.svg?primary=main-color--darker-20");
|
||||||
--icon-url-1: url("/home/foo/bar/cool.jpg");
|
--icon-url-1: url("/home/foo/bar/cool.svg?primary=blue&secondary=green");
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
await run(inputCSS, outputCSS, { }, assert);
|
await run(inputCSS, outputCSS, { }, assert);
|
||||||
},
|
},
|
||||||
|
"non svg urls without query params are not replaced": async (assert) => {
|
||||||
|
const inputCSS = `div {
|
||||||
|
background: no-repeat url("./img/foo/bar/image.png");
|
||||||
|
}`;
|
||||||
|
await run(inputCSS, inputCSS, {}, assert);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue