diff options
Diffstat (limited to 'node_modules/svgo/plugins/sortAttrs.js')
| -rw-r--r-- | node_modules/svgo/plugins/sortAttrs.js | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/node_modules/svgo/plugins/sortAttrs.js b/node_modules/svgo/plugins/sortAttrs.js new file mode 100644 index 00000000..221a4bf5 --- /dev/null +++ b/node_modules/svgo/plugins/sortAttrs.js @@ -0,0 +1,81 @@ +'use strict'; + +exports.type = 'perItem'; + +exports.active = false; + +exports.description = 'sorts element attributes (disabled by default)'; + +exports.params = { + order: [ + 'id', + 'width', 'height', + 'x', 'x1', 'x2', + 'y', 'y1', 'y2', + 'cx', 'cy', 'r', + 'fill', 'stroke', 'marker', + 'd', 'points' + ] +}; + +/** + * Sort element attributes for epic readability. + * + * @param {Object} item current iteration item + * @param {Object} params plugin params + * + * @author Nikolay Frantsev + */ +exports.fn = function(item, params) { + + var attrs = [], + sorted = {}, + orderlen = params.order.length + 1; + + if (item.elem) { + + item.eachAttr(function(attr) { + attrs.push(attr); + }); + + attrs.sort(function(a, b) { + if (a.prefix != b.prefix) { + // xmlns attributes implicitly have the prefix xmlns + if (a.prefix == 'xmlns') + return -1; + if (b.prefix == 'xmlns') + return 1; + return a.prefix < b.prefix ? -1 : 1; + } + + var aindex = orderlen; + var bindex = orderlen; + + for (var i = 0; i < params.order.length; i++) { + if (a.name == params.order[i]) { + aindex = i; + } else if (a.name.indexOf(params.order[i] + '-') === 0) { + aindex = i + .5; + } + if (b.name == params.order[i]) { + bindex = i; + } else if (b.name.indexOf(params.order[i] + '-') === 0) { + bindex = i + .5; + } + } + + if (aindex != bindex) { + return aindex - bindex; + } + return a.name < b.name ? -1 : 1; + }); + + attrs.forEach(function (attr) { + sorted[attr.name] = attr; + }); + + item.attrs = sorted; + + } + +}; |
