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.
60 lines
1.2 KiB
60 lines
1.2 KiB
const { selectOne, selectAll } = require("css-select"); |
|
|
|
function matchId(exp, id) { |
|
return exp instanceof RegExp ? exp.test(id) : Boolean(exp); |
|
} |
|
|
|
function removeFillAttrib(element) { |
|
delete element.attribs.fill; |
|
} |
|
|
|
function removeFill(id, opts) { |
|
return dom => { |
|
if (matchId(opts.removeFill, id)) { |
|
selectAll("[fill]", dom).forEach(removeFillAttrib); |
|
} |
|
}; |
|
} |
|
|
|
function removeStrokeAttrib(element) { |
|
delete element.attribs.stroke; |
|
} |
|
|
|
function removeStroke(id, opts) { |
|
return dom => { |
|
if (matchId(opts.removeStroke, id)) { |
|
selectAll("[stroke]", dom).forEach(removeStrokeAttrib); |
|
} |
|
}; |
|
} |
|
|
|
function applyParams(params) { |
|
return ({ attribs }) => { |
|
Object.keys(params).forEach(name => { |
|
attribs[name] = params[name]; |
|
}); |
|
}; |
|
} |
|
|
|
function applyRootParams(params) { |
|
return dom => { |
|
applyParams(params)(selectOne("svg", dom)); |
|
}; |
|
} |
|
|
|
function applySelectedParams(selectors) { |
|
return dom => { |
|
const svg = selectOne("svg", dom); |
|
|
|
Object.keys(selectors).forEach(selector => { |
|
selectAll(selector, svg).forEach(applyParams(selectors[selector])); |
|
}); |
|
}; |
|
} |
|
|
|
module.exports = { |
|
removeFill, |
|
removeStroke, |
|
applyRootParams, |
|
applySelectedParams |
|
};
|
|
|