Simplify element removal in ConfigParser
authorRaphael von der GrĂ¼n <raphinesse@gmail.com>
Mon, 21 May 2018 17:45:35 +0000 (19:45 +0200)
committerDarryl Pogue <dvpdiner2@gmail.com>
Tue, 22 May 2018 03:41:22 +0000 (20:41 -0700)
src/ConfigParser/ConfigParser.js

index 0aaa032..a393755 100644 (file)
@@ -86,6 +86,11 @@ function findElementAttributeValue (attributeName, elems) {
     return value || '';
 }
 
+function removeChildren (el, selector) {
+    const matches = el.findall(selector);
+    matches.forEach(child => el.remove(child));
+}
+
 ConfigParser.prototype = {
     getAttribute: function (attr) {
         return this.doc.getroot().attrib[attr];
@@ -428,17 +433,10 @@ ConfigParser.prototype = {
      * @param id name of the plugin
      */
     removePlugin: function (id) {
-        if (id) {
-            var plugins = this.doc.findall('./plugin/[@name="' + id + '"]')
-                .concat(this.doc.findall('./feature/param[@name="id"][@value="' + id + '"]/..'));
-            var children = this.doc.getroot().getchildren();
-            plugins.forEach(function (plugin) {
-                var idx = children.indexOf(plugin);
-                if (idx > -1) {
-                    children.splice(idx, 1);
-                }
-            });
-        }
+        if (!id) return;
+        const root = this.doc.getroot();
+        removeChildren(root, `./plugin/[@name="${id}"]`);
+        removeChildren(root, `./feature/param[@name="id"][@value="${id}"]/..`);
     },
 
     // Add any element to the root
@@ -469,14 +467,7 @@ ConfigParser.prototype = {
      * @param  {String} name the engine name.
      */
     removeEngine: function (name) {
-        var engines = this.doc.findall('./engine/[@name="' + name + '"]');
-        for (var i = 0; i < engines.length; i++) {
-            var children = this.doc.getroot().getchildren();
-            var idx = children.indexOf(engines[i]);
-            if (idx > -1) {
-                children.splice(idx, 1);
-            }
-        }
+        removeChildren(this.doc.getroot(), `./engine/[@name="${name}"]`);
     },
     getEngines: function () {
         var engines = this.doc.findall('./engine');