| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | 
							- 'use strict';
 
- var DEFAULT_SEPARATOR = ':';
 
- exports.type = 'perItem';
 
- exports.active = false;
 
- exports.description = 'removes specified attributes';
 
- exports.params = {
 
-     elemSeparator: DEFAULT_SEPARATOR,
 
-     preserveCurrentColor: false,
 
-     attrs: []
 
- };
 
- /**
 
-  * Remove attributes
 
-  *
 
-  * @param elemSeparator
 
-  *   format: string
 
-  *
 
-  * @param preserveCurrentColor
 
-  *   format: boolean
 
-  *
 
-  * @param attrs:
 
-  *
 
-  *   format: [ element* : attribute* : value* ]
 
-  *
 
-  *   element   : regexp (wrapped into ^...$), single * or omitted > all elements (must be present when value is used)
 
-  *   attribute : regexp (wrapped into ^...$)
 
-  *   value     : regexp (wrapped into ^...$), single * or omitted > all values
 
-  *
 
-  *   examples:
 
-  *
 
-  *     > basic: remove fill attribute
 
-  *     ---
 
-  *     removeAttrs:
 
-  *       attrs: 'fill'
 
-  *
 
-  *     > remove fill attribute on path element
 
-  *     ---
 
-  *       attrs: 'path:fill'
 
-  *
 
-  *     > remove fill attribute on path element where value is none
 
-  *     ---
 
-  *       attrs: 'path:fill:none'
 
-  *
 
-  *
 
-  *     > remove all fill and stroke attribute
 
-  *     ---
 
-  *       attrs:
 
-  *         - 'fill'
 
-  *         - 'stroke'
 
-  *
 
-  *     [is same as]
 
-  *
 
-  *       attrs: '(fill|stroke)'
 
-  *
 
-  *     [is same as]
 
-  *
 
-  *       attrs: '*:(fill|stroke)'
 
-  *
 
-  *     [is same as]
 
-  *
 
-  *       attrs: '.*:(fill|stroke)'
 
-  *
 
-  *     [is same as]
 
-  *
 
-  *       attrs: '.*:(fill|stroke):.*'
 
-  *
 
-  *
 
-  *     > remove all stroke related attributes
 
-  *     ----
 
-  *     attrs: 'stroke.*'
 
-  *
 
-  *
 
-  * @param {Object} item current iteration item
 
-  * @param {Object} params plugin params
 
-  * @return {Boolean} if false, item will be filtered out
 
-  *
 
-  * @author Benny Schudel
 
-  */
 
- exports.fn = function(item, params) {
 
-         // wrap into an array if params is not
 
-     if (!Array.isArray(params.attrs)) {
 
-         params.attrs = [params.attrs];
 
-     }
 
-     if (item.isElem()) {
 
-         var elemSeparator = typeof params.elemSeparator == 'string' ? params.elemSeparator : DEFAULT_SEPARATOR;
 
-         var preserveCurrentColor = typeof params.preserveCurrentColor == 'boolean' ? params.preserveCurrentColor : false;
 
-             // prepare patterns
 
-         var patterns = params.attrs.map(function(pattern) {
 
-                 // if no element separators (:), assume it's attribute name, and apply to all elements *regardless of value*
 
-             if (pattern.indexOf(elemSeparator) === -1) {
 
-                 pattern = ['.*', elemSeparator, pattern, elemSeparator, '.*'].join('');
 
-                 // if only 1 separator, assume it's element and attribute name, and apply regardless of attribute value
 
-             } else if (pattern.split(elemSeparator).length < 3) {
 
-                 pattern = [pattern, elemSeparator, '.*'].join('');
 
-             }
 
-                 // create regexps for element, attribute name, and attribute value
 
-             return pattern.split(elemSeparator)
 
-                 .map(function(value) {
 
-                         // adjust single * to match anything
 
-                     if (value === '*') { value = '.*'; }
 
-                     return new RegExp(['^', value, '$'].join(''), 'i');
 
-                 });
 
-         });
 
-             // loop patterns
 
-         patterns.forEach(function(pattern) {
 
-                 // matches element
 
-             if (pattern[0].test(item.elem)) {
 
-                     // loop attributes
 
-                 item.eachAttr(function(attr) {
 
-                     var name = attr.name;
 
-                     var value = attr.value;
 
-                     var isFillCurrentColor = preserveCurrentColor && name == 'fill' && value == 'currentColor';
 
-                     var isStrokeCurrentColor = preserveCurrentColor && name == 'stroke' && value == 'currentColor';
 
-                     if (!(isFillCurrentColor || isStrokeCurrentColor)) {
 
-                         // matches attribute name
 
-                         if (pattern[1].test(name)) {
 
-                             // matches attribute value
 
-                             if (pattern[2].test(attr.value)) {
 
-                                 item.removeAttr(name);
 
-                             }
 
-                         }
 
-                     }
 
-                 });
 
-             }
 
-         });
 
-     }
 
- };
 
 
  |