diff --git a/plugins/cleanupNumericValues.js b/plugins/cleanupNumericValues.js index 487443a5..af364310 100644 --- a/plugins/cleanupNumericValues.js +++ b/plugins/cleanupNumericValues.js @@ -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 diff --git a/plugins/removeViewBox.js b/plugins/removeViewBox.js index b78d4ae0..b1878ce0 100644 --- a/plugins/removeViewBox.js +++ b/plugins/removeViewBox.js @@ -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'); } }