mirror of
https://github.com/svg/svgo.git
synced 2026-01-27 07:02:06 +03:00
MDN used to redirect hits to `/docs` to the users locale, however they stopped doing that for some reason. This broke all MDN links on our documentation/JSDocs. This inserts `en-US` to all MDN URLs which fixes the links. (Unfortunately, this means all users may be taken to the English site regardless of their language preference.)
96 lines
2.3 KiB
JavaScript
96 lines
2.3 KiB
JavaScript
import { querySelectorAll } from '../lib/xast.js';
|
|
|
|
export const name = 'removeAttributesBySelector';
|
|
export const description =
|
|
'removes attributes of elements that match a css selector';
|
|
|
|
/**
|
|
* Removes attributes of elements that match a css selector.
|
|
*
|
|
* @example
|
|
* <caption>A selector removing a single attribute</caption>
|
|
* plugins: [
|
|
* {
|
|
* name: "removeAttributesBySelector",
|
|
* params: {
|
|
* selector: "[fill='#00ff00']"
|
|
* attributes: "fill"
|
|
* }
|
|
* }
|
|
* ]
|
|
*
|
|
* <rect x="0" y="0" width="100" height="100" fill="#00ff00" stroke="#00ff00"/>
|
|
* ↓
|
|
* <rect x="0" y="0" width="100" height="100" stroke="#00ff00"/>
|
|
*
|
|
* <caption>A selector removing multiple attributes</caption>
|
|
* plugins: [
|
|
* {
|
|
* name: "removeAttributesBySelector",
|
|
* params: {
|
|
* selector: "[fill='#00ff00']",
|
|
* attributes: [
|
|
* "fill",
|
|
* "stroke"
|
|
* ]
|
|
* }
|
|
* }
|
|
* ]
|
|
*
|
|
* <rect x="0" y="0" width="100" height="100" fill="#00ff00" stroke="#00ff00"/>
|
|
* ↓
|
|
* <rect x="0" y="0" width="100" height="100"/>
|
|
*
|
|
* <caption>Multiple selectors removing attributes</caption>
|
|
* plugins: [
|
|
* {
|
|
* name: "removeAttributesBySelector",
|
|
* params: {
|
|
* selectors: [
|
|
* {
|
|
* selector: "[fill='#00ff00']",
|
|
* attributes: "fill"
|
|
* },
|
|
* {
|
|
* selector: "#remove",
|
|
* attributes: [
|
|
* "stroke",
|
|
* "id"
|
|
* ]
|
|
* }
|
|
* ]
|
|
* }
|
|
* }
|
|
* ]
|
|
*
|
|
* <rect x="0" y="0" width="100" height="100" fill="#00ff00" stroke="#00ff00"/>
|
|
* ↓
|
|
* <rect x="0" y="0" width="100" height="100"/>
|
|
*
|
|
* @link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors|MDN CSS Selectors
|
|
*
|
|
* @author Bradley Mease
|
|
*
|
|
* @type {import('../lib/types.js').Plugin<any>}
|
|
*/
|
|
export const fn = (root, params) => {
|
|
const selectors = Array.isArray(params.selectors)
|
|
? params.selectors
|
|
: [params];
|
|
for (const { selector, attributes } of selectors) {
|
|
const nodes = querySelectorAll(root, selector);
|
|
for (const node of nodes) {
|
|
if (node.type === 'element') {
|
|
if (Array.isArray(attributes)) {
|
|
for (const name of attributes) {
|
|
delete node.attributes[name];
|
|
}
|
|
} else {
|
|
delete node.attributes[attributes];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return {};
|
|
};
|