| '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, | 
|         xmlnsOrder = params.xmlnsOrder || 'front'; | 
|   | 
|     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 (xmlnsOrder == 'front') { | 
|                     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; | 
|   | 
|     } | 
|   | 
| }; |