You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by an...@apache.org on 2013/03/04 20:32:51 UTC

[76/91] [abbrv] git commit: Adds support for old plugin.xml spec using for config.xml iOS projects.

Adds support for old plugin.xml spec using <plugins-plist> for config.xml iOS projects.


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugman/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugman/commit/394d5ec8
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugman/tree/394d5ec8
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugman/diff/394d5ec8

Branch: refs/heads/master
Commit: 394d5ec8541314b94f4fdb6d8ff47bb508675c10
Parents: 52295fa
Author: Fil Maj <ma...@gmail.com>
Authored: Mon Feb 4 15:53:54 2013 -0800
Committer: Fil Maj <ma...@gmail.com>
Committed: Mon Feb 4 15:53:54 2013 -0800

----------------------------------------------------------------------
 platforms/ios.js            |   47 +++++++++++++++++++++++++------------
 test/ios-install.js         |   23 ++++++++++++++++++
 test/ios-uninstall.js       |   25 ++++++++++++++++++++
 test/plugins/PGSQLitePlugin |    1 +
 4 files changed, 81 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/394d5ec8/platforms/ios.js
----------------------------------------------------------------------
diff --git a/platforms/ios.js b/platforms/ios.js
index 63e3eaf..2d0e473 100644
--- a/platforms/ios.js
+++ b/platforms/ios.js
@@ -224,32 +224,49 @@ function pluginInstalled(plugin_et, config_path) {
 function updateConfigXml(action, config_path, plugin_et) {
     var hosts = plugin_et.findall('./access'),
         platformTag = plugin_et.find('./platform[@name="ios"]'), // FIXME: can probably do better than this
-        plistEle = platformTag.find('./plugins-plist'), // TODO: use this for older that have plugins-plist
-        configChanges = getConfigChanges(platformTag),
+        plistEle = platformTag.find('./plugins-plist'), // use this for older that have plugins-plist
         pl,
         external_hosts = [];
+
     // edit configuration files
     var xmlDoc = xml_helpers.parseElementtreeSync(config_path),
         output;
 
-    configChanges[path.basename(config_path)].forEach(function (configNode) {
-        var selector = configNode.attrib["parent"],
-            children = configNode.findall('*');
-
-        if( action == 'install') {
-            if (!xml_helpers.graftXML(xmlDoc, children, selector)) {
-                throw new Error('failed to add children to ' + filename);
-            }
+    if (plistEle) {
+        // if the plugin supports the old plugins-plist elemtn..
+        var name = plistEle.attrib.key;
+        var value = plistEle.attrib.string;
+        var pluginsEl = xmlDoc.find('plugins');
+        if ( action == 'install') {
+            var new_plugin = new et.Element('plugin');
+            new_plugin.attrib.name = name;
+            new_plugin.attrib.value = value;
+            pluginsEl.append(new_plugin);
         } else {
-            if (!xml_helpers.pruneXML(xmlDoc, children, selector)) {
-                throw new Error('failed to remove children from' + filename);
-            }
+            var culprit = pluginsEl.find("plugin[@name='"+name+"']");
+            pluginsEl.remove(0, culprit);
         }
-    });
+    } else {
+        var configChanges = getConfigChanges(platformTag);
+        var base_config_path = path.basename(config_path);
+        configChanges[base_config_path].forEach(function (configNode) {
+            var selector = configNode.attrib["parent"],
+                children = configNode.findall('*');
+
+            if( action == 'install') {
+                if (!xml_helpers.graftXML(xmlDoc, children, selector)) {
+                    throw new Error('failed to add children to ' + filename);
+                }
+            } else {
+                if (!xml_helpers.pruneXML(xmlDoc, children, selector)) {
+                    throw new Error('failed to remove children from' + filename);
+                }
+            }
+        });
 
+    }
     output = xmlDoc.write({indent: 4});
     fs.writeFileSync(config_path, output);
-
 }
 
 // updates plist file and/or config.xml

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/394d5ec8/test/ios-install.js
----------------------------------------------------------------------
diff --git a/test/ios-install.js b/test/ios-install.js
index ff3c26d..1940c87 100644
--- a/test/ios-install.js
+++ b/test/ios-install.js
@@ -141,6 +141,29 @@ exports['should edit config.xml'] = function (test) {
     test.done();
 }
 
+exports['should edit config.xml even when using old <plugins-plist> approach'] = function (test) {
+    // setting up PGSQLitePlugin (with config.xml) 
+    var dummy_plugin_dir = path.join(test_dir, 'plugins', 'PGSQLitePlugin')
+    var dummy_xml_path = path.join(dummy_plugin_dir, 'plugin.xml')
+    
+    // overriding some params
+    var project_dir = path.join(test_dir, 'projects', 'ios-config-xml')
+    var dummy_plugin_et  = new et.ElementTree(et.XML(fs.readFileSync(dummy_xml_path, 'utf-8')));
+
+    // run the platform-specific function
+    ios.handlePlugin('install', project_dir, dummy_plugin_dir, dummy_plugin_et);
+    
+    var configXmlPath = path.join(project_dir, 'SampleApp', 'config.xml');
+    var pluginsTxt = fs.readFileSync(configXmlPath, 'utf-8'),
+        pluginsDoc = new et.ElementTree(et.XML(pluginsTxt)),
+        expected = 'plugins/plugin[@name="PGSQLitePlugin"]' +
+                    '[@value="PGSQLitePlugin"]';
+
+    test.ok(pluginsDoc.find(expected));
+
+    test.done();
+}
+
 exports['should edit the pbxproj file'] = function (test) {
     // run the platform-specific function
     ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/394d5ec8/test/ios-uninstall.js
----------------------------------------------------------------------
diff --git a/test/ios-uninstall.js b/test/ios-uninstall.js
index 7ec46ce..ee5483b 100644
--- a/test/ios-uninstall.js
+++ b/test/ios-uninstall.js
@@ -122,6 +122,31 @@ exports['should edit PhoneGap.plist'] = function (test) {
     test.done();
 }
 
+exports['should edit config.xml even when using old <plugins-plist> approach'] = function (test) {
+    // setting up PGSQLitePlugin (with config.xml) 
+    var dummy_plugin_dir = path.join(test_dir, 'plugins', 'PGSQLitePlugin')
+    var dummy_xml_path = path.join(dummy_plugin_dir, 'plugin.xml')
+    
+    // overriding some params
+    var project_dir = path.join(test_dir, 'projects', 'ios-config-xml')
+    var dummy_plugin_et  = new et.ElementTree(et.XML(fs.readFileSync(dummy_xml_path, 'utf-8')));
+
+    // run the platform-specific function
+    ios.handlePlugin('install', project_dir, dummy_plugin_dir, dummy_plugin_et);
+    
+    ios.handlePlugin('uninstall', project_dir, dummy_plugin_dir, dummy_plugin_et);
+    
+    var configXmlPath = path.join(project_dir, 'SampleApp', 'config.xml');
+    var pluginsTxt = fs.readFileSync(configXmlPath, 'utf-8'),
+        pluginsDoc = new et.ElementTree(et.XML(pluginsTxt)),
+        expected = 'plugins/plugin[@name="PGSQLitePlugin"]' +
+                    '[@value="PGSQLitePlugin"]';
+
+    test.ok(!pluginsDoc.find(expected));
+
+    test.done();
+}
+
 exports['should edit config.xml'] = function (test) {
     // setting up WebNotification (with config.xml) 
     var dummy_plugin_dir = path.join(test_dir, 'plugins', 'WebNotifications')

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/394d5ec8/test/plugins/PGSQLitePlugin
----------------------------------------------------------------------
diff --git a/test/plugins/PGSQLitePlugin b/test/plugins/PGSQLitePlugin
new file mode 160000
index 0000000..ac84255
--- /dev/null
+++ b/test/plugins/PGSQLitePlugin
@@ -0,0 +1 @@
+Subproject commit ac84255d517b3a8ea86caea1c06d4f836ab6f96d