| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | 'use strict';exports.type = 'perItem';exports.active = true;exports.description = 'rounds numeric values to the fixed precision, removes default ‘px’ units';exports.params = {    floatPrecision: 3,    leadingZero: true,    defaultPx: true,    convertToPx: true};var regNumericValues = /^([\-+]?\d*\.?\d+([eE][\-+]?\d+)?)(px|pt|pc|mm|cm|m|in|ft|em|ex|%)?$/,    removeLeadingZero = require('../lib/svgo/tools').removeLeadingZero,    absoluteLengths = { // relative to px        cm: 96/2.54,        mm: 96/25.4,        in: 96,        pt: 4/3,        pc: 16    };/** * Round numeric values to the fixed precision, * remove default 'px' units. * * @param {Object} item current iteration item * @param {Object} params plugin params * @return {Boolean} if false, item will be filtered out * * @author Kir Belevich */exports.fn = function(item, params) {    if (item.isElem()) {        var floatPrecision = params.floatPrecision;        if (item.hasAttr('viewBox')) {            var nums = item.attr('viewBox').value.split(/\s,?\s*|,\s*/g);            item.attr('viewBox').value = nums.map(function(value) {                var num = +value;                return isNaN(num) ? value : +num.toFixed(floatPrecision);            }).join(' ');        }        item.eachAttr(function(attr) {            // The `version` attribute is a text string and cannot be rounded            if (attr.name === 'version') { return }            var match = attr.value.match(regNumericValues);            // if attribute value matches regNumericValues            if (match) {                // round it to the fixed precision                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(floatPrecision);                    if (String(pxNum).length < match[0].length) {                        num = pxNum;                        units = 'px';                    }                }                // and remove leading zero                if (params.leadingZero) {                    num = removeLeadingZero(num);                }                // remove default 'px' units                if (params.defaultPx && units === 'px') {                    units = '';                }                attr.value = num + units;            }        });    }};
 |