diff --git a/plugins/removeAttrs.js b/plugins/removeAttrs.js
index 0ee35f26b..491e0dc42 100644
--- a/plugins/removeAttrs.js
+++ b/plugins/removeAttrs.js
@@ -25,10 +25,11 @@ exports.params = {
*
* @param attrs:
*
- * format: [ element* : attribute* ]
+ * format: [ element* : attribute* : value* ]
*
- * element : regexp (wrapped into ^...$), single * or omitted > all elements
+ * 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:
*
@@ -41,6 +42,10 @@ exports.params = {
* ---
* attrs: 'path:fill'
*
+ * > remove fill attribute on path element where value is none
+ * ---
+ * attrs: 'path:fill:none'
+ *
*
* > remove all fill and stroke attribute
* ---
@@ -60,6 +65,10 @@ exports.params = {
*
* attrs: '.*:(fill|stroke)'
*
+ * [is same as]
+ *
+ * attrs: '.*:(fill|stroke):.*'
+ *
*
* > remove all stroke related attributes
* ----
@@ -85,12 +94,16 @@ exports.fn = function(item, params) {
// prepare patterns
var patterns = params.attrs.map(function(pattern) {
- // apply to all elements if specifc element is omitted
+ // 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].join('');
+ 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 and attribute name
+ // create regexps for element, attribute name, and attribute value
return pattern.split(elemSeparator)
.map(function(value) {
@@ -118,7 +131,11 @@ exports.fn = function(item, params) {
if (!(isFillCurrentColor || isStrokeCurrentColor)) {
// matches attribute name
if (pattern[1].test(name)) {
- item.removeAttr(name);
+
+ // matches attribute value
+ if (pattern[2].test(attr.value)) {
+ item.removeAttr(name);
+ }
}
}
diff --git a/test/plugins/removeAttrs.04.svg b/test/plugins/removeAttrs.04.svg
new file mode 100644
index 000000000..86e924d49
--- /dev/null
+++ b/test/plugins/removeAttrs.04.svg
@@ -0,0 +1,21 @@
+
+
+@@@
+
+
+
+@@@
+
+{"attrs":"*:(stroke|fill):red"}
diff --git a/test/plugins/removeAttrs.05.svg b/test/plugins/removeAttrs.05.svg
new file mode 100644
index 000000000..edbb5dc77
--- /dev/null
+++ b/test/plugins/removeAttrs.05.svg
@@ -0,0 +1,21 @@
+
+
+@@@
+
+
+
+@@@
+
+{"attrs":"*:(stroke|fill):((?!^#FFF$).)*"}