Repository: cordova-lib Updated Branches: refs/heads/master 405d0da0f -> a01779552
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/cordova/restore.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/restore.js b/cordova-lib/src/cordova/restore.js index 6e4d262..ffd1edc 100644 --- a/cordova-lib/src/cordova/restore.js +++ b/cordova-lib/src/cordova/restore.js @@ -60,41 +60,39 @@ function installPlatformsFromConfigXML(cfg){ //returns a Promise function installPluginsFromConfigXML(cfg) { //Install plugins that are listed on config.xml + var pluginsFromConfig = []; var projectRoot = cordova_util.cdProjectRoot(); var plugins_dir = path.join(projectRoot, 'plugins'); - // Get all configured plugins - var features = cfg.getFeatureIdList(); - if (0 === features.length) { - return Q.all('No config.xml plugins to install'); - } - - return features.reduce(function(soFar, featureId) { - - var pluginPath = path.join(plugins_dir, featureId); - if (fs.existsSync(pluginPath)) { - // Plugin already exists - return soFar; + var features = cfg.doc.findall('feature'); + features.forEach(function(feature){ + var params = feature.findall('param'); + var pluginId = ''; + var pluginVersion = ''; + for (var i = 0; i < params.length; i++) { + if (params[i].attrib.name === 'id') { + pluginId = params[i].attrib.value; + } + if (params[i].attrib.name === 'version') { + pluginVersion = params[i].attrib.value; + } } - - return soFar.then(function() { - events.emit('log', 'Discovered ' + featureId + ' in config.xml. Installing to the project'); - - var feature = cfg.getFeature(featureId); - - // Install from given URL if defined or using a plugin id - var installFrom = feature.url; - if (!installFrom) { - installFrom = feature.id; - if (!!feature.version) { - installFrom += ('@' + feature.version); - } + var pluginPath = path.join(plugins_dir,pluginId); + // contents of the plugins folder takes precedence hence + // we ignore if the correct version is installed or not. + if (pluginId !== '' && !fs.existsSync(pluginPath)) { + if ( pluginVersion !== '') { + pluginId = pluginId + '@' + pluginVersion; } + events.emit('log', 'Discovered ' + pluginId + ' in config.xml. Installing to the project'); + pluginsFromConfig.push(pluginId); + } + }); - // Add feature preferences as CLI variables if have any - var options = 'undefined' !== typeof feature.variables ? {cli_variables: feature.variables} : null; - - return plugin('add', installFrom, options); - }); - }, Q()); + //Use cli instead of plugman directly ensuring all the hooks + // to get fired. + if (pluginsFromConfig.length >0) { + return plugin('add', pluginsFromConfig); + } + return Q.all('No config.xml plugins to install'); } http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/cordova/superspawn.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/superspawn.js b/cordova-lib/src/cordova/superspawn.js index 51a4d6b..b35e311 100644 --- a/cordova-lib/src/cordova/superspawn.js +++ b/cordova-lib/src/cordova/superspawn.js @@ -141,10 +141,3 @@ exports.spawn = function(cmd, args, opts) { return d.promise; }; -exports.maybeSpawn = function(cmd, args, opts) { - if (fs.existsSync(cmd)) { - return exports.spawn(cmd, args, opts); - } - return Q(null); -}; - http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/create.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/create.js b/cordova-lib/src/plugman/create.js index a63ffea..684b126 100644 --- a/cordova-lib/src/plugman/create.js +++ b/cordova-lib/src/plugman/create.js @@ -37,38 +37,38 @@ module.exports = function create( name, id, version, pluginPath, options ) { clobber, jsMod; - // Check we are not already in a plugin + //check we are not already in a plugin if( fs.existsSync( cwd + 'plugin.xml' ) ) { return Q.reject( new CordovaError( 'plugin.xml already exists. Are you already in a plugin?' ) ); } - // Create a plugin.xml file + //Create a plugin.xml file root = et.Element( 'plugin' ); root.set( 'xmlns', 'http://apache.org/cordova/ns/plugins/1.0' ); root.set( 'xmlns:android', 'http://schemas.android.com/apk/res/android' ); root.set( 'id', id ); root.set( 'version', version ); - // Add the name tag + //Add the name tag pluginName = et.XML( '<name>' ); pluginName.text = name; root.append( pluginName ); - // Loop through the options( variables ) for other tags + //loop through the options( variables ) for other tags for( var key in options ) { var temp = et.XML( '<' + key + '>'); temp.text = options[ key ]; root.append( temp ); } - // Setup the directory structure + //setup the directory structure shell.mkdir( '-p', cwd + 'www' ); shell.mkdir( '-p', cwd + 'src' ); - // Create a base plugin.js file + //create a base plugin.js file baseJS = fs.readFileSync( templatesDir + 'base.js', 'utf-8').replace( /%pluginName%/g, name ); fs.writeFileSync( cwd + 'www/' + name + '.js', baseJS, 'utf-8' ); - // Add it to the xml as a js module + //Add it to the xml as a js module jsMod = et.Element( 'js-module' ); jsMod.set( 'src', 'www/' + name + '.js' ); jsMod.set( 'name', name ); @@ -79,7 +79,7 @@ module.exports = function create( name, id, version, pluginPath, options ) { root.append( jsMod ); - // Write out the plugin.xml file + //Write out the plugin.xml file fs.writeFileSync( cwd + 'plugin.xml', new et.ElementTree( root ).write( {indent: 4} ), 'utf-8' ); return Q(); http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/install.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/install.js b/cordova-lib/src/plugman/install.js index 045afb7..83834b4 100644 --- a/cordova-lib/src/plugman/install.js +++ b/cordova-lib/src/plugman/install.js @@ -512,19 +512,19 @@ function handleInstall(actions, pluginInfo, platform, project_dir, plugins_dir, var handler = platform_modules[platform]; var platformTag = pluginInfo._et.find('./platform[@name="'+platform+'"]'); - // CB-6976 Windows Universal Apps. For smooth transition and to prevent mass api failures // we allow using windows8 tag for new windows platform if (platform == 'windows' && !platformTag) { platformTag = pluginInfo._et.find('platform[@name="' + 'windows8' + '"]'); } - if (platformTag) { + if ( pluginInfo.hasPlatformSection(platform) ) { var sourceFiles = platformTag.findall('./source-file'), headerFiles = platformTag.findall('./header-file'), resourceFiles = platformTag.findall('./resource-file'), frameworkFiles = platformTag.findall('./framework'), libFiles = platformTag.findall('./lib-file'); + // queue up native stuff sourceFiles && sourceFiles.forEach(function(item) { actions.push(actions.createAction(handler['source-file'].install, http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/platform.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/platform.js b/cordova-lib/src/plugman/platform.js index 8761986..414e975 100644 --- a/cordova-lib/src/plugman/platform.js +++ b/cordova-lib/src/plugman/platform.js @@ -33,23 +33,23 @@ module.exports = { var pluginxml, platform; - // Check to make sure we are in the plugin first + //check to make sure we are in the plugin first if( !fs.existsSync( 'plugin.xml' ) ) { return Q.reject( new Error( "can't find a plugin.xml. Are you in the plugin?" ) ); } - // Get the current plugin.xml file + //Get the current plugin.xml file pluginxml = et.parse( fs.readFileSync('plugin.xml', 'utf-8') ); - // Check if this platform exists + //Check if this platform exists if( pluginxml.find("./platform/[@name='"+ platformName +"']") ) { return Q.reject( new Error( "platform: " + platformName + " already added" ) ); } - // Get the platform specific elements + //Get the platform specific elements platform = doPlatform( platformName, pluginxml.find("./name").text, pluginxml.getroot().get( "id" ) ); - // Make sure we support it + //Make sure we support it if( !platform ) { return Q.reject( new Error( "platform: " + platformName + " not yet supported" ) ); } @@ -60,26 +60,26 @@ module.exports = { return Q(); }, remove: function( platformName ) { - // Check to make sure we are in the plugin first + //check to make sure we are in the plugin first if( !fs.existsSync( 'plugin.xml' ) ) { return Q.reject( new Error( "can't find a plugin.xml. Are you in the plugin?" ) ); } - // Get the current plugin.xml file + //Get the current plugin.xml file var pluginxml = et.parse( fs.readFileSync('plugin.xml', 'utf-8') ); - // Check if this platform exists + //Check if this platform exists if( !pluginxml.find("./platform/[@name='"+ platformName +"']") ) { return Q.reject( new Error( "platform: " + platformName + " hasn't been added" ) ); } - // Remove the Platform in question + //Remove the Platform in question pluginxml.getroot().remove( 0, pluginxml.find("./platform/[@name='"+ platformName +"']") ); - // Rewrite the plugin.xml file back out + //Rewrite the plugin.xml file back out fs.writeFileSync( "plugin.xml", pluginxml.write( "plugin.xml", {indent: 4} ), 'utf-8' ); - // Remove the src/"platform" + //Remove the src/"platform" shell.rm( '-rf', 'src/' + platformName ); return Q(); @@ -107,7 +107,7 @@ function doPlatform( platformName, pluginName, pluginID, pluginVersion ) { } function doPlatformBase( templatesDir, platformName, pluginName, pluginID, pluginVersion ) { - // Create the default plugin file + //Create the default plugin file var baseFiles = [], i = 0; http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/platforms/ios.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/platforms/ios.js b/cordova-lib/src/plugman/platforms/ios.js index 49336fc..6e2f3fd 100644 --- a/cordova-lib/src/plugman/platforms/ios.js +++ b/cordova-lib/src/plugman/platforms/ios.js @@ -26,7 +26,7 @@ var path = require('path') , fs = require('fs') , glob = require('glob') , xcode = require('xcode') - , plist = require('plist') + , plist = require('plist-with-patches') , shell = require('shelljs') , events = require('../../events') , cachedProjectFiles = {} @@ -38,7 +38,7 @@ module.exports = { }, package_name:function(project_dir) { var plist_file = glob.sync(path.join(project_dir, '**', '*-Info.plist'))[0]; - return plist.parse(fs.readFileSync(plist_file, 'utf8')).CFBundleIdentifier; + return plist.parseFileSync(plist_file).CFBundleIdentifier; }, 'source-file':{ install:function(source_el, plugin_dir, project_dir, plugin_id, project) { http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/platforms/ubuntu.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/platforms/ubuntu.js b/cordova-lib/src/plugman/platforms/ubuntu.js index bf2665b..c422d7c 100644 --- a/cordova-lib/src/plugman/platforms/ubuntu.js +++ b/cordova-lib/src/plugman/platforms/ubuntu.js @@ -32,10 +32,8 @@ function toCamelCase(str) { }).join(''); } -var shell = require('shelljs') - , fs = require('fs') +var fs = require('fs') , path = require('path') - , common = require('./common') , events = require('../../events') , xml_helpers = require(path.join(__dirname, '..', '..', 'util', 'xml-helpers')); @@ -51,24 +49,26 @@ module.exports = { }, 'source-file':{ install:function(source_el, plugin_dir, project_dir, plugin_id) { - var dest = path.join('build', 'src', 'plugins', plugin_id, path.basename(source_el.attrib.src)); - common.copyFile(plugin_dir, source_el.attrib.src, project_dir, dest); + var shell = require('shelljs'); + var dest = path.join(project_dir, 'build', 'src', 'plugins', plugin_id); + shell.mkdir(dest); + shell.cp(path.join(plugin_dir, source_el.attrib.src), dest); - var cmake = path.join(project_dir, 'build', 'CMakeLists.txt'); - shell.exec('touch ' + cmake); + shell.exec('touch ' + path.join(project_dir, 'CMakeLists.txt')); }, uninstall:function(source_el, project_dir, plugin_id) { + var shell = require('shelljs'); + var dest = path.join(project_dir, 'build', 'src', 'plugins', plugin_id); shell.rm(path.join(dest, path.basename(source_el.attrib.src))); - - var cmake = path.join(project_dir, 'build', 'CMakeLists.txt'); - shell.exec('touch ' + cmake); } }, 'header-file':{ install:function(source_el, plugin_dir, project_dir, plugin_id) { - var dest = path.join('build', 'src', 'plugins', plugin_id, path.basename(source_el.attrib.src)); - common.copyFile(plugin_dir, source_el.attrib.src, project_dir, dest); + var shell = require('shelljs'); + var dest = path.join(project_dir, 'build', 'src', 'plugins', plugin_id); + shell.mkdir(dest); + shell.cp(path.join(plugin_dir, source_el.attrib.src), dest); var plugins = path.join(project_dir, 'build', 'src', 'coreplugins.cpp'); var src = String(fs.readFileSync(plugins)); @@ -81,6 +81,7 @@ module.exports = { fs.writeFileSync(plugins, src); }, uninstall:function(source_el, project_dir, plugin_id) { + var shell = require('shelljs'); var dest = path.join(project_dir, 'build', 'src', 'plugins', plugin_id); shell.rm(path.join(dest, path.basename(source_el.attrib.src))); @@ -97,15 +98,15 @@ module.exports = { }, 'resource-file':{ install:function(source_el, plugin_dir, project_dir, plugin_id) { - var dest = path.join('qml', path.basename(source_el.attrib.src)); - if (source_el.attrib['target-dir']) - dest = path.join(source_el.attrib['target-dir'], path.basename(source_el.attrib.src)); - common.copyFile(plugin_dir, source_el.attrib.src, project_dir, dest); + var shell = require('shelljs'); + var dest = path.join(project_dir, 'qml'); + shell.mkdir(dest); + shell.cp(path.join(plugin_dir, source_el.attrib.src), dest); }, uninstall:function(source_el, project_dir, plugin_id) { + var shell = require('shelljs'); + var dest = path.join(project_dir, 'qml'); - if (source_el.attrib['target-dir']) - dest = path.join(project_dir, source_el.attrib['target-dir']); shell.rm(path.join(dest, path.basename(source_el.attrib.src))); } }, http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/platforms/windows.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/platforms/windows.js b/cordova-lib/src/plugman/platforms/windows.js index 347e6a3..803a3c8 100644 --- a/cordova-lib/src/plugman/platforms/windows.js +++ b/cordova-lib/src/plugman/platforms/windows.js @@ -39,8 +39,8 @@ module.exports = { package_name:function(project_dir) { // CB-6976 Windows Universal Apps. To make platform backward compatible // with old template we look for package.appxmanifest file as well. - var manifestPath = fs.existsSync(path.join(project_dir, 'package.windows.appxmanifest')) ? - path.join(project_dir, 'package.windows.appxmanifest') : + var manifestPath = fs.existsSync(path.join(project_dir, 'package.store.appxmanifest')) ? + path.join(project_dir, 'package.store.appxmanifest') : path.join(project_dir, 'package.appxmanifest'); var manifest = xml_helpers.parseElementtreeSync(manifestPath); @@ -61,15 +61,15 @@ module.exports = { 'source-file': { install:function(source_el, plugin_dir, project_dir, plugin_id, project_file) { var targetDir = source_el.attrib['target-dir'] || ''; - var dest = path.join('plugins', plugin_id, targetDir, path.basename(source_el.attrib['src'])); + var dest = path.join('www', 'plugins', plugin_id, targetDir, path.basename(source_el.attrib['src'])); common.copyNewFile(plugin_dir, source_el.attrib['src'], project_dir, dest); // add reference to this file to jsproj. project_file.addSourceFile(dest); }, uninstall:function(source_el, project_dir, plugin_id, project_file) { - var dest = path.join('plugins', plugin_id, - source_el.attrib['target-dir'] || '', + var dest = path.join('www', 'plugins', plugin_id, + source_el.attrib['target-dir'] ? source_el.attrib['target-dir'] : '', path.basename(source_el.attrib['src'])); common.removeFile(project_dir, dest); // remove reference to this file from csproj. http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/prepare.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/prepare.js b/cordova-lib/src/plugman/prepare.js index 284d164..961141e 100644 --- a/cordova-lib/src/plugman/prepare.js +++ b/cordova-lib/src/plugman/prepare.js @@ -26,6 +26,8 @@ var platform_modules = require('./platforms'), path = require('path'), config_changes = require('./util/config-changes'), xml_helpers = require('../util/xml-helpers'), + wp8 = require('./platforms/wp8'), + windows = require('./platforms/windows'), common = require('./platforms/common'), fs = require('fs'), shell = require('shelljs'), @@ -71,6 +73,16 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir, www_ events.emit('verbose', 'Processing configuration changes for plugins.'); config_changes.process(plugins_dir, project_dir, platform); + // for windows phone and windows8 platforms we need to add all www resources to the .csproj(.jsproj) file + // first we need to remove them all to prevent duplicates + var projFile; + if (platform == 'wp8' || platform == 'windows8' || platform == 'windows') { + projFile = (platform == 'wp8') ? wp8.parseProjectFile(project_dir) : + windows.parseProjectFile(project_dir); + // remove reference to cordova_plugins.js and all files inside plugins folder + projFile.removeSourceFile(/^(\$\(MSBuildThisFileDirectory\))?www\\(cordova_plugins.js|plugins\\)/i); + } + platform_json = config_changes.get_platform_json(plugins_dir, platform); // This array holds all the metadata for each module and ends up in cordova_plugins.json var plugins = Object.keys(platform_json.installed_plugins).concat(Object.keys(platform_json.dependent_plugins)); @@ -138,11 +150,11 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir, www_ var fsPath = path.join.apply(path, pathParts); var scriptContent = fs.readFileSync(path.join(pluginDir, fsPath), 'utf-8').replace(/^\ufeff/, ''); // Window BOM - if (fsPath.match(/.*\.json$/)) { - scriptContent = 'module.exports = ' + scriptContent; - } scriptContent = 'cordova.define("' + moduleName + '", function(require, exports, module) { ' + scriptContent + '\n});\n'; fs.writeFileSync(path.join(platformPluginsDir, plugin_id, fsPath), scriptContent, 'utf-8'); + if(platform == 'wp8' || platform == 'windows8') { + projFile.addSourceFile(path.join('www', 'plugins', plugin_id, fsPath)); + } // Prepare the object for cordova_plugins.json. var obj = { @@ -183,4 +195,9 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir, www_ events.emit('verbose', 'Writing out cordova_plugins.js...'); fs.writeFileSync(path.join(wwwDir, 'cordova_plugins.js'), final_contents, 'utf-8'); + + if(platform == 'wp8' || platform == 'windows8' || platform == 'windows') { + projFile.addSourceFile(path.join('www', 'cordova_plugins.js')); + projFile.write(); + } }; http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/registry/manifest.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/registry/manifest.js b/cordova-lib/src/plugman/registry/manifest.js index 4496f34..5306b0e 100644 --- a/cordova-lib/src/plugman/registry/manifest.js +++ b/cordova-lib/src/plugman/registry/manifest.js @@ -88,7 +88,7 @@ function generatePackageJsonFromPluginXml(plugin_path) { if(keywords) package_json.keywords = keywords.split(','); if(platforms) package_json.platforms = platforms; - // Adding engines + // adding engines if(engines) { package_json.engines = []; for(var i = 0, j = engines.length ; i < j ; i++) { @@ -96,10 +96,10 @@ function generatePackageJsonFromPluginXml(plugin_path) { } } - // Set docs_path to doc/index.md exists + //set docs_path to doc/index.md exists var docs_path = path.resolve(plugin_path, 'doc/index.md'); if(!(fs.existsSync(docs_path))){ - // Set docs_path to doc/en/index.md + //set docs_path to doc/en/index.md docs_path = path.resolve(plugin_path, 'doc/en/index.md'); } if(fs.existsSync(docs_path)){ @@ -107,8 +107,9 @@ function generatePackageJsonFromPluginXml(plugin_path) { package_json.englishdoc = englishdoc; } - // Write package.json + // write package.json var package_json_path = path.resolve(plugin_path, 'package.json'); + //console.log('about to write package.json'); fs.writeFileSync(package_json_path, JSON.stringify(package_json, null, 4), 'utf8'); return package_json; }); http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/util/action-stack.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/util/action-stack.js b/cordova-lib/src/plugman/util/action-stack.js index d2508de..376b397 100644 --- a/cordova-lib/src/plugman/util/action-stack.js +++ b/cordova-lib/src/plugman/util/action-stack.js @@ -25,8 +25,6 @@ var platforms = require("../platforms"), events = require('../../events'), Q = require('q'); -var superspawn = require('../../cordova/superspawn'); -var path = require('path'); function ActionStack() { this.stack = []; @@ -98,13 +96,12 @@ ActionStack.prototype = { } events.emit('verbose', 'Action stack processing complete.'); - return superspawn.maybeSpawn(path.join(project_dir, 'cordova', 'version')) - .then(function(platformVersion) { - if (project_files) { - events.emit('verbose', 'Writing out ' + platform + ' project files...'); - project_files.write(platformVersion); - } - }); + if (project_files) { + events.emit('verbose', 'Writing out ' + platform + ' project files...'); + project_files.write(); + } + + return Q(); } }; http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/util/android-project.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/util/android-project.js b/cordova-lib/src/plugman/util/android-project.js index bedec6b..d13bfe9 100644 --- a/cordova-lib/src/plugman/util/android-project.js +++ b/cordova-lib/src/plugman/util/android-project.js @@ -29,7 +29,6 @@ var fs = require('fs'), path = require('path'), properties_parser = require('properties-parser'), shell = require('shelljs'); -var semver = require('semver'); function addLibraryReference(projectProperties, libraryPath) { @@ -86,22 +85,16 @@ AndroidProject.prototype = { delete this._subProjectDirs[subDir]; this._dirty = true; }, - write: function(platformVersion) { + write: function () { if (!this._dirty) return; for (var filename in this._propertiesEditors) { fs.writeFileSync(filename, this._propertiesEditors[filename].toString()); } - // Starting with 3.6.0, the build scripts set ANDROID_HOME, so there is - // no reason to keep run this command. Plus - we really want to avoid - // relying on the presense of native SDKs within plugman. - var needsUpdateProject = !platformVersion || semver.lt(platformVersion, '3.6.0'); - if (needsUpdateProject) { - for (var sub_dir in this._subProjectDirs) - { - shell.exec('android update lib-project --path "' + sub_dir + '"'); - } + for (var sub_dir in this._subProjectDirs) + { + shell.exec('android update lib-project --path "' + sub_dir + '"'); } this._dirty = false; }, http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/util/config-changes.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/util/config-changes.js b/cordova-lib/src/plugman/util/config-changes.js index 8a580cc..f93a9b5 100644 --- a/cordova-lib/src/plugman/util/config-changes.js +++ b/cordova-lib/src/plugman/util/config-changes.js @@ -38,7 +38,7 @@ var fs = require('fs'), path = require('path'), glob = require('glob'), - plist = require('plist'), + plist = require('plist-with-patches'), bplist = require('bplist-parser'), et = require('elementtree'), semver = require('semver'), @@ -201,7 +201,7 @@ function remove_plugin_changes(plugin_name, plugin_id, is_top_level) { if (self.platform == 'windows' && file == 'package.appxmanifest' && !fs.existsSync(path.join(self.project_dir, 'package.appxmanifest'))) { // New windows template separate manifest files for Windows8, Windows8.1 and WP8.1 - var substs = ['package.phone.appxmanifest', 'package.windows.appxmanifest', 'package.windows80.appxmanifest']; + var substs = ['package.phone.appxmanifest', 'package.store.appxmanifest', 'package.store80.appxmanifest']; for (var subst in substs) { events.emit('verbose', 'Applying munge to ' + substs[subst]); self.apply_file_munge(substs[subst], munge.files[file], true); @@ -260,7 +260,7 @@ function add_plugin_changes(plugin_id, plugin_vars, is_top_level, should_increme // CB-6976 Windows Universal Apps. Compatibility fix for existing plugins. if (self.platform == 'windows' && file == 'package.appxmanifest' && !fs.existsSync(path.join(self.project_dir, 'package.appxmanifest'))) { - var substs = ['package.phone.appxmanifest', 'package.windows.appxmanifest', 'package.windows80.appxmanifest']; + var substs = ['package.phone.appxmanifest', 'package.store.appxmanifest', 'package.store80.appxmanifest']; for (var subst in substs) { events.emit('verbose', 'Applying munge to ' + substs[subst]); self.apply_file_munge(substs[subst], munge.files[file]); @@ -421,8 +421,8 @@ ConfigKeeper.prototype.get = ConfigKeeper_get; function ConfigKeeper_get(project_dir, platform, file) { var self = this; - // This fixes a bug with older plugins - when specifying config xml instead of res/xml/config.xml - // https://issues.apache.org/jira/browse/CB-6414 + //This fixes a bug with older plugins - when specifying config xml instead of res/xml/config.xml + //https://issues.apache.org/jira/browse/CB-6414 if(file == 'config.xml' && platform == 'android'){ file = 'res/xml/config.xml'; } @@ -554,9 +554,8 @@ function ConfigFile_load() { // We always write out text plist, not binary. // Do we still need to support binary plist? // If yes, use plist.parseStringSync() and read the file once. - self.data = isBinaryPlist(filepath) ? - bplist.parseBuffer(fs.readFileSync(filepath)) : - plist.parse(fs.readFileSync(filepath, 'utf8')); + self.plist_module = (isBinaryPlist(filepath) ? bplist : plist); + self.data = self.plist_module.parseFileSync(filepath); } } @@ -797,7 +796,7 @@ function process_munge(obj, createParents, func, keys /* or key1, key2 .... */ ) } // All values from munge are added to base as -// base[file][selector][child] += munge[file][selector][child] +// base[file][selector][child] += base[file][selector][child] // Returns a munge object containing values that exist in munge // but not in base. function increment_munge(base, munge) { @@ -820,7 +819,7 @@ function increment_munge(base, munge) { } // Update the base munge object as -// base[file][selector][child] -= munge[file][selector][child] +// base[file][selector][child] -= base[file][selector][child] // nodes that reached zero value are removed from base and added to the returned munge // object. function decrement_munge(base, munge) { http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/plugman/util/plist-helpers.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/util/plist-helpers.js b/cordova-lib/src/plugman/util/plist-helpers.js index 605a6c2..b8d93f2 100644 --- a/cordova-lib/src/plugman/util/plist-helpers.js +++ b/cordova-lib/src/plugman/util/plist-helpers.js @@ -23,12 +23,12 @@ // contains PLIST utility functions -var plist = require('plist'); +var plist = require('plist-with-patches'); // adds node to doc at selector module.exports.graftPLIST = graftPLIST; function graftPLIST(doc, xml, selector) { - var obj = plist.parse('<plist>'+xml+'</plist>'); + var obj = plist.parseStringSync('<plist>'+xml+'</plist>'); var node = doc[selector]; if (node && Array.isArray(node) && Array.isArray(obj)) @@ -42,7 +42,7 @@ function graftPLIST(doc, xml, selector) { // removes node from doc at selector module.exports.prunePLIST = prunePLIST; function prunePLIST(doc, xml, selector) { - var obj = plist.parse('<plist>'+xml+'</plist>'); + var obj = plist.parseStringSync('<plist>'+xml+'</plist>'); pruneOBJECT(doc, selector, obj); http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/a0177955/cordova-lib/src/util/windows/jsproj.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/util/windows/jsproj.js b/cordova-lib/src/util/windows/jsproj.js index ef1cb38..d847603 100644 --- a/cordova-lib/src/util/windows/jsproj.js +++ b/cordova-lib/src/util/windows/jsproj.js @@ -82,6 +82,8 @@ jsproj.prototype = { events.emit('verbose','addReference::' + relPath); + relPath = this.isUniversalWindowsApp ? '$(MSBuildThisFileDirectory)' + relPath : relPath; + var item = new et.Element('ItemGroup'); var extName = path.extname(relPath); @@ -108,6 +110,8 @@ jsproj.prototype = { removeReference:function(relPath) { events.emit('verbose','removeReference::' + relPath); + relPath = this.isUniversalWindowsApp ? '$(MSBuildThisFileDirectory)' + relPath : relPath; + var extName = path.extname(relPath); var includeText = path.basename(relPath,extName); // <ItemGroup> @@ -130,6 +134,7 @@ jsproj.prototype = { relative_path.forEach(function(filePath) { filePath = filePath.split('/').join('\\'); + filePath = this.isUniversalWindowsApp ? '$(MSBuildThisFileDirectory)' + filePath : filePath; var content = new et.Element('Content'); content.attrib.Include = filePath; @@ -143,6 +148,7 @@ jsproj.prototype = { if (!isRegexp) { // path.normalize(relative_path);// ?? relative_path = relative_path.split('/').join('\\'); + relative_path = this.isUniversalWindowsApp ? '$(MSBuildThisFileDirectory)' + relative_path : relative_path; } var root = this.xml.getroot();