1
0
mirror of https://github.com/svg/svgo.git synced 2025-07-29 20:21:14 +03:00

round viewBox too

This commit is contained in:
caub
2017-04-09 16:49:07 +02:00
parent 98369def3a
commit 5828949c21
2 changed files with 21 additions and 16 deletions

View File

@ -37,24 +37,32 @@ exports.fn = function(item, params) {
if (item.isElem()) {
var match;
var floatPrecision = params.floatPrecision;
if (item.hasAttr('viewBox')) {
var nums = item.attr('viewBox').value.split(/[ ,]/g);
item.attr('viewBox').value = nums.map(function(num) {
return +num.toFixed(floatPrecision);
}).join(' ');
}
item.eachAttr(function(attr) {
match = attr.value.match(regNumericValues);
var match = attr.value.match(regNumericValues);
// if attribute value matches regNumericValues
if (match) {
// round it to the fixed precision
var num = +(+match[1]).toFixed(params.floatPrecision),
var num = +(+match[1]).toFixed(floatPrecision),
units = match[3] || '';
// convert absolute values to pixels
if (params.convertToPx && units && (units in absoluteLengths)) {
var pxNum = +(absoluteLengths[units] * match[1]).toFixed(params.floatPrecision);
var pxNum = +(absoluteLengths[units] * match[1]).toFixed(floatPrecision);
if (String(pxNum).length < match[0].length)
num = pxNum,
if (String(pxNum).length < match[0].length) {
num = pxNum;
units = 'px';
}
}
// and remove leading zero

View File

@ -6,8 +6,7 @@ exports.active = false;
exports.description = 'removes viewBox attribute when possible (disabled by default)';
var regViewBox = /^0\s*[,\s]\s*0\s*[,\s]\s*([\-+]?\d*\.?\d+([eE][\-+]?\d+)?)\s*[,\s]\s*([\-+]?\d*\.?\d+([eE][\-+]?\d+)?)$/,
viewBoxElems = ['svg', 'pattern'];
var viewBoxElems = ['svg', 'pattern', 'symbol'];
/**
* Remove viewBox attr which coincides with a width/height box.
@ -33,15 +32,13 @@ exports.fn = function(item) {
item.hasAttr('height')
) {
var match = item.attr('viewBox').value.match(regViewBox);
var nums = item.attr('viewBox').value.split(/[ ,]+/g);
if (match) {
if (
item.attr('width').value === match[1] &&
item.attr('height').value === match[3]
) {
item.removeAttr('viewBox');
}
if (
item.attr('width').value.replace(/px$/, '') === nums[2] && // could use parseFloat too
item.attr('height').value.replace(/px$/, '') === nums[3]
) {
item.removeAttr('viewBox');
}
}