diff --git a/plugins/removeElementsByAttr.js b/plugins/removeElementsByAttr.js index 1dda1e34..c726f708 100644 --- a/plugins/removeElementsByAttr.js +++ b/plugins/removeElementsByAttr.js @@ -4,7 +4,7 @@ exports.type = 'perItem'; exports.active = false; -exports.description = 'removes arbitrary elements by ID (disabled by default)'; +exports.description = 'removes arbitrary elements by ID or className (disabled by default)'; exports.params = { id: [], @@ -12,7 +12,7 @@ exports.params = { }; /** - * Remove SVG elements by ID. + * Remove arbitrary SVG elements by ID or className. * * @param id * examples: @@ -29,26 +29,52 @@ exports.params = { * - 'elementID' * - 'anotherID' * + * @param class + * examples: + * + * > single: remove all elements with class of `elementClass` + * --- + * removeElementsByAttr: + * class: 'elementClass' + * + * > list: remove all elements with class of `elementClass` or `anotherClass` + * --- + * removeElementsByAttr: + * class: + * - 'elementClass' + * - 'anotherClass' + * * @param {Object} item current iteration item * @param {Object} params plugin params * @return {Boolean} if false, item will be filtered out * - * @author Eli Dupuis + * @author Eli Dupuis (@elidupuis) */ exports.fn = function(item, params) { - var elemId; + var elemId, elemClass; - // wrap into an array if params is not - if (!Array.isArray(params.id)) { - params.id = [params.id]; - } + // wrap params in an array if not already + ['id', 'class'].forEach(function(key) { + if (!Array.isArray(params[key])) { + params[key] = [ params[key] ]; + } + }); + // abort if current item is no an element if (!item.isElem()) { return; } + // remove element if it's `id` matches configured `id` params elemId = item.attr('id'); if (elemId) { return params.id.indexOf(elemId.value) === -1; } + + // remove element if it's `class` contains any of the configured `class` params + elemClass = item.attr('class'); + if (elemClass) { + var hasClassRegex = new RegExp(params.class.join('|')); + return !hasClassRegex.test(elemClass.value); + } }; diff --git a/test/plugins/removeElementsByAttr.01.svg b/test/plugins/removeElementsByAttr.01.svg index 966f4aa0..9757a69a 100644 --- a/test/plugins/removeElementsByAttr.01.svg +++ b/test/plugins/removeElementsByAttr.01.svg @@ -6,9 +6,6 @@ @@@ + - -@@@ - -{ "id": "someID" } diff --git a/test/plugins/removeElementsByAttr.02.svg b/test/plugins/removeElementsByAttr.02.svg index aa15fc9e..966f4aa0 100644 --- a/test/plugins/removeElementsByAttr.02.svg +++ b/test/plugins/removeElementsByAttr.02.svg @@ -1,12 +1,14 @@ - + @@@ - + + + @@@ -{ "id": ["someID", "anotherID"] } +{ "id": "someID" } diff --git a/test/plugins/removeElementsByAttr.03.svg b/test/plugins/removeElementsByAttr.03.svg index 9757a69a..aa15fc9e 100644 --- a/test/plugins/removeElementsByAttr.03.svg +++ b/test/plugins/removeElementsByAttr.03.svg @@ -1,11 +1,12 @@ - + @@@ - - - - + + +@@@ + +{ "id": ["someID", "anotherID"] } diff --git a/test/plugins/removeElementsByAttr.04.svg b/test/plugins/removeElementsByAttr.04.svg new file mode 100644 index 00000000..ba9ce205 --- /dev/null +++ b/test/plugins/removeElementsByAttr.04.svg @@ -0,0 +1,17 @@ + + + + + + + +@@@ + + + + + + +@@@ + +{ "class": "someClass" } diff --git a/test/plugins/removeElementsByAttr.05.svg b/test/plugins/removeElementsByAttr.05.svg new file mode 100644 index 00000000..1fb474a9 --- /dev/null +++ b/test/plugins/removeElementsByAttr.05.svg @@ -0,0 +1,13 @@ + + + + + + +@@@ + + + +@@@ + +{ "class": ["someClass", "anotherClass"] } diff --git a/test/plugins/removeElementsByAttr.06.svg b/test/plugins/removeElementsByAttr.06.svg new file mode 100644 index 00000000..f5fd2914 --- /dev/null +++ b/test/plugins/removeElementsByAttr.06.svg @@ -0,0 +1,16 @@ + + + + + + + +@@@ + + + + + +@@@ + +{ "id": "someID", "class": "someClass" }