You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by sg...@apache.org on 2014/09/30 09:45:52 UTC

[06/38] CB-7666 Move stuff outside of windows subdir

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/lib/prepare.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/lib/prepare.js b/windows/template/cordova/lib/prepare.js
deleted file mode 100644
index 5e3f533..0000000
--- a/windows/template/cordova/lib/prepare.js
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
-       Licensed to the Apache Software Foundation (ASF) under one
-       or more contributor license agreements.  See the NOTICE file
-       distributed with this work for additional information
-       regarding copyright ownership.  The ASF licenses this file
-       to you under the Apache License, Version 2.0 (the
-       "License"); you may not use this file except in compliance
-       with the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-       Unless required by applicable law or agreed to in writing,
-       software distributed under the License is distributed on an
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-       KIND, either express or implied.  See the License for the
-       specific language governing permissions and limitations
-       under the License.
-*/
-
-var path  = require('path'),
-    fs  = require('fs'),
-    et = require('elementtree'),
-    shell = require('shelljs'),
-    ConfigParser = require('./ConfigParser');
-
-var ROOT = path.join(__dirname, '..', '..'),
-    accessRules;
-
-module.exports.applyPlatformConfig = function () {
-    console.log('Applying Platform Config...');
-
-    var config = new ConfigParser(path.join(ROOT, 'config.xml'));
-
-    accessRules = config.getAccessRules().filter(function(rule) {
-        if (rule.indexOf('https://') == 0 || rule == '*') {
-            return true;
-        } else {
-            console.log('Access rules must begin with "https://", the following rule will be ignored: ' + rule);
-        }
-        return false;
-    });
-
-    ['package.windows.appxmanifest', 'package.windows80.appxmanifest', 'package.phone.appxmanifest'].forEach(
-        function(manifestFile) {
-            updateManifestFile(config, path.join(ROOT, manifestFile));
-    })
-
-    copyImages(config);
-}
-
-function updateManifestFile (config, manifestPath) {
-
-    var contents = fs.readFileSync(manifestPath, 'utf-8');
-    if(contents) {
-        //Windows is the BOM. Skip the Byte Order Mark.
-        contents = contents.substring(contents.indexOf('<'));
-    };
-
-    var manifest =  new et.ElementTree(et.XML(contents));
-
-    applyCoreProperties(config, manifest);
-    // sort Capability elements as per CB-5350 Windows8 build fails due to invalid 'Capabilities' definition
-    sortCapabilities(manifest);
-    applyAccessRules(config, manifest);
-    applyBackgroundColor(config, manifest);
-
-    //Write out manifest
-    fs.writeFileSync(manifestPath, manifest.write({indent: 4}), 'utf-8');
-}
-
-function applyCoreProperties(config, manifest) {
-    var version = fixConfigVersion(config.version());
-    var name = config.name();
-    var pkgName = config.packageName();
-    var author = config.author();
-    var startPage = config.startPage();
-
-    if (!startPage) {
-        // If not specified, set default value
-        // http://cordova.apache.org/docs/en/edge/config_ref_index.md.html#The%20config.xml%20File
-        startPage = "index.html";
-    }
-
-    var identityNode = manifest.find('.//Identity');
-    if(!identityNode) {
-        throw new Error('Invalid manifest file (no <Identity> node): ' + manifestPath);
-    }
-    // Update identity name and version
-    pkgName && (identityNode.attrib.Name = pkgName);
-    version && (identityNode.attrib.Version = version);
-
-    // Update name (windows8 has it in the Application[@Id] and Application.VisualElements[@DisplayName])
-    var app = manifest.find('.//Application');
-    if(!app) {
-        throw new Error('Invalid manifest file (no <Application> node): ' + manifestPath);
-    }
-    if (pkgName) {
-        // 64 symbols restriction goes from manifest schema definition
-        // http://msdn.microsoft.com/en-us/library/windows/apps/br211415.aspx
-        var appId = pkgName.length <= 64 ? pkgName : pkgName.substr(0, 64);
-        app.attrib.Id = appId;
-    }
-    app.attrib.StartPage = 'www/' + startPage;
-
-    var visualElems = manifest.find('.//VisualElements') // windows 8.0
-        || manifest.find('.//m2:VisualElements') // windows 8.1
-        || manifest.find('.//m3:VisualElements'); // windows phone 8.1
-
-    if(!visualElems) {
-        throw new Error('Invalid manifest file (no <VisualElements> node): ' + manifestPath);
-    }
-    name && (visualElems.attrib.DisplayName = name);
-
-    // Update properties
-    var properties = manifest.find('.//Properties');
-    if (properties && properties.find) {
-        var displayNameElement = properties.find('.//DisplayName');
-        if (displayNameElement && name) {
-            displayNameElement.text = name;
-        }
-
-        var publisherNameElement = properties.find('.//PublisherDisplayName');
-        if (publisherNameElement && author) {
-            publisherNameElement.text = author;
-        }
-    }
-}
-
-// Adjust version number as per CB-5337 Windows8 build fails due to invalid app version
-function fixConfigVersion (version) {
-    if(version && version.match(/\.\d/g)) {
-        var numVersionComponents = version.match(/\.\d/g).length + 1;
-        while (numVersionComponents++ < 4) {
-            version += '.0';
-        }
-    }
-    return version;
-}
-
-function applyAccessRules (config, manifest) {
-    // Updates WhiteListing rules
-    //<ApplicationContentUriRules>
-    //    <Rule Match="https://www.example.com" Type="include"/>
-    //</ApplicationContentUriRules>
-    var appUriRulesRoot = manifest.find('.//Application'),
-        appUriRules = appUriRulesRoot.find('.//ApplicationContentUriRules');
-
-    if (appUriRules != null) {
-        appUriRulesRoot.remove(null, appUriRules);
-    }
-    // rules are not defined or allow any
-    if (accessRules.length == 0 || accessRules.indexOf('*') > -1) {
-        return;
-    } 
-
-    appUriRules = et.Element('ApplicationContentUriRules');
-    appUriRulesRoot.append(appUriRules);
-
-    accessRules.forEach(function(rule) {
-        var el = et.Element('Rule')
-        el.attrib.Match = rule;
-        el.attrib.Type = 'include';
-        appUriRules.append(el);
-    });
-}
-
-function sortCapabilities(manifest) {
-
-    // removes namespace prefix (m3:Capability -> Capability)
-    // this is required since elementtree returns qualified name with namespace
-    function extractLocalName(tag) {
-        return tag.split(':').pop(); // takes last part of string after ':'
-    }
-
-    var capabilitiesRoot = manifest.find('.//Capabilities'),
-        capabilities = capabilitiesRoot._children || [];
-    // to sort elements we remove them and then add again in the appropriate order
-    capabilities.forEach(function(elem) { // no .clear() method
-        capabilitiesRoot.remove(0, elem);
-        // CB-7601 we need local name w/o namespace prefix to sort capabilities correctly
-        elem.localName = extractLocalName(elem.tag);
-    });
-    capabilities.sort(function(a, b) {
-        return (a.localName > b.localName) ? 1: -1;
-    });
-    capabilities.forEach(function(elem) {
-        capabilitiesRoot.append(elem);
-    });
-}
-
-function copyImages(config) {
-    var platformRoot = ROOT;
-    // TODO find the way to detect whether command was triggered by CLI or not
-    var appRoot = path.join(platformRoot, '..', '..');
-
-    function copyImage(src, dest) {
-        src = path.join(appRoot, src),
-        dest = path.join(platformRoot, 'images', dest);
-        //console.log('Copying image from ' + src + ' to ' + dest);
-        shell.cp('-f', src, dest);
-    }
-
-    function copyMrtImage(src, dest) {
-        var srcDir = path.dirname(src),
-            srcExt = path.extname(src),
-            srcFileName = path.basename(src, srcExt);
-     
-        var destExt = path.extname(dest),
-            destFileName = path.basename(dest, destExt);
-
-        // all MRT images: logo.png, logo.scale-100.png, logo.scale-200.png, etc
-        var images = fs.readdirSync(srcDir).filter(function(e) { 
-            return e.match('^'+srcFileName + '(.scale-[0-9]+)?' + srcExt);
-        });
-        // warn if no images found
-        if (images.length == 0) {
-            console.log('No images found for target: ' + destFileName);
-            return;
-        }
-        // copy images with new name but keeping scale suffix
-        images.forEach(function(img) {
-            var scale = path.extname(path.basename(img, srcExt));
-            if (scale == '') {
-                scale = '.scale-100';
-            }
-            copyImage(path.join(srcDir, img), destFileName+scale+destExt);
-        });
-        
-    }
-
-    // Platform default images
-    var platformImages = [
-        {dest: 'Square150x150Logo.scale-100.png', width: 150, height: 150},
-        {dest: 'Square30x30Logo.scale-100.png', width: 30, height: 30},
-        {dest: 'StoreLogo.scale-100.png', width: 50, height: 50},
-        {dest: 'SplashScreen.scale-100.png', width: 620, height: 300},
-        // scaled images are specified here for backward compatibility only so we can find them by size
-        {dest: 'StoreLogo.scale-240.png', width: 120, height: 120},
-        {dest: 'Square44x44Logo.scale-240.png', width: 106, height: 106},
-        {dest: 'Square71x71Logo.scale-240.png', width: 170, height: 170},
-        {dest: 'Square70x70Logo.scale-100.png', width: 70, height: 70},
-        {dest: 'Square150x150Logo.scale-240.png', width: 360, height: 360},
-        {dest: 'Square310x310Logo.scale-100.png', width: 310, height: 310},
-        {dest: 'Wide310x150Logo.scale-100.png', width: 310, height: 150},
-        {dest: 'Wide310x150Logo.scale-240.png', width: 744, height: 360},
-        {dest: 'SplashScreenPhone.scale-240.png', width: 1152, height: 1920}
-    ];
-
-    function findPlatformImage(width, height) {
-        if (!width && !height){
-            // this could be default image, 
-            // Windows requires specific image dimension so we can't apply it
-            return null;
-        }
-        for (var idx in platformImages){
-            var res = platformImages[idx];
-            // If only one of width or height is not specified, use another parameter for comparation
-            // If both specified, compare both.
-            if ((!width || (width == res.width)) &&
-                (!height || (height == res.height))){
-                return res;
-            }
-        }
-        return null;
-    }
-
-    var images = config.getIcons().concat(config.getSplashScreens());
-
-    images.forEach(function (img) {
-        if (img.target) {
-            copyMrtImage(img.src, img.target + '.png');
-        } else {
-            // find target image by size
-            var targetImg = findPlatformImage (img.width, img.height);
-            if (targetImg) {
-                copyImage(img.src, targetImg.dest);
-            } else {
-                console.log('The following image is skipped due to unsupported size: ' + img.src);
-            }
-        }
-    });
-}
-
-function applyBackgroundColor (config, manifest) {
-
-    function refineColor(color) {
-        // return three-byte hexadecimal number preceded by "#" (required for Windows)
-        color = color.replace('0x', '').replace('#', '');
-        if (color.length == 3) {
-            color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2]
-        }
-        // alpha is not supported, so we remove it
-        if (color.length == 8) { // AArrggbb
-            color = color.slice(2);
-        }
-        return '#' + color;
-    }
-    // background color
-    var bgColor = config.getPreference('BackgroundColor');
-    if (bgColor) {
-        var visualElems = manifest.find('.//VisualElements') // windows 8.0
-            || manifest.find('.//m2:VisualElements') // windows 8.1
-            || manifest.find('.//m3:VisualElements'); // windows phone 8.1
-        visualElems.attrib.BackgroundColor = refineColor(bgColor);
-    }
-
-    // Splash Screen background color
-    bgColor = config.getPreference('SplashScreenBackgroundColor');
-    if (bgColor) {
-        var visualElems = manifest.find('.//SplashScreen') // windows 8.0
-            || manifest.find('.//m2:SplashScreen') // windows 8.1
-            || manifest.find('.//m3:SplashScreen'); // windows phone 8.1
-        visualElems.attrib.BackgroundColor = refineColor(bgColor);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/lib/run.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/lib/run.js b/windows/template/cordova/lib/run.js
deleted file mode 100644
index 1bd1904..0000000
--- a/windows/template/cordova/lib/run.js
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-       Licensed to the Apache Software Foundation (ASF) under one
-       or more contributor license agreements.  See the NOTICE file
-       distributed with this work for additional information
-       regarding copyright ownership.  The ASF licenses this file
-       to you under the Apache License, Version 2.0 (the
-       "License"); you may not use this file except in compliance
-       with the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-       Unless required by applicable law or agreed to in writing,
-       software distributed under the License is distributed on an
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-       KIND, either express or implied.  See the License for the
-       specific language governing permissions and limitations
-       under the License.
-*/
-
-var Q = require('q'),
-    nopt  = require('nopt'),
-    path  = require('path'),
-    build = require('./build'),
-    utils = require('./utils'),
-    ConfigParser = require('./ConfigParser'),
-    packages = require('./package');
-
-var ROOT = path.join(__dirname, '..', '..');
-
-module.exports.run = function (argv) {
-    if (!utils.isCordovaProject(ROOT)){
-        return Q.reject("Could not find project at " + ROOT);
-    }
-
-    // parse args
-    var args  = nopt({"debug": Boolean, "release": Boolean, "nobuild": Boolean,
-        "device": Boolean, "emulator": Boolean, "target": String, "archs": String,
-        "phone": Boolean, "win": Boolean}, {"r" : "--release"}, argv);
-
-    // Validate args
-    if (args.debug && args.release) {
-        return Q.reject('Only one of "debug"/"release" options should be specified');
-    }
-    if ((args.device && args.emulator) || ((args.device || args.emulator) && args.target)) {
-        return Q.reject('Only one of "device"/"emulator"/"target" options should be specified');
-    }
-    if (args.phone && args.win) {
-        return Q.reject('Only one of "phone"/"win" options should be specified');
-    }
-
-    // Get build/deploy options
-    var buildType    = args.release ? "release" : "debug",
-        buildArchs   = args.archs ? args.archs.split(' ') : ["anycpu"],
-        projectType  = args.phone ? "phone" : "windows",
-        deployTarget = args.target ? args.target : args.device ? "device" : "emulator";
-
-    // for win switch we should correctly handle 8.0 and 8.1 version as per configuration
-    if (projectType == 'windows' && getWindowsTargetVersion() == '8.0') {
-        projectType = 'windows80'
-    }
-
-    // if --nobuild isn't specified then build app first
-    var buildPackages = args.nobuild ? Q() : build.run(argv);
-
-    return buildPackages.then(function () {
-        return packages.getPackage(projectType, buildType, buildArchs[0]);
-    }).then(function(pkg) {
-        console.log('\nDeploying ' + pkg.type + ' package to ' + deployTarget + ':\n' + pkg.file);
-        return pkg.type == "phone" ?
-            packages.deployToPhone(pkg.file, deployTarget) :
-            packages.deployToDesktop(pkg.file, deployTarget);
-    });
-};
-
-module.exports.help = function () {
-    console.log("\nUsage: run [ --device | --emulator | --target=<id> ] [ --debug | --release | --nobuild ]");
-    console.log("           [ --x86 | --x64 | --arm ] [--phone | --win]");
-    console.log("    --device      : Deploys and runs the project on the connected device.");
-    console.log("    --emulator    : Deploys and runs the project on an emulator.");
-    console.log("    --target=<id> : Deploys and runs the project on the specified target.");
-    console.log("    --debug       : Builds project in debug mode.");
-    console.log("    --release     : Builds project in release mode.");
-    console.log("    --nobuild     : Uses pre-built package, or errors if project is not built.");
-    console.log("    --archs       : Specific chip architectures (`anycpu`, `arm`, `x86`, `x64`).");
-    console.log("    --phone, --win");
-    console.log("                  : Specifies project type to deploy");
-    console.log("");
-    console.log("Examples:");
-    console.log("    run");
-    console.log("    run --emulator");
-    console.log("    run --device");
-    console.log("    run --target=7988B8C3-3ADE-488d-BA3E-D052AC9DC710");
-    console.log("    run --device --release");
-    console.log("    run --emulator --debug");
-    console.log("");
-    process.exit(0);
-};
-
-
-function getWindowsTargetVersion() {
-    var config = new ConfigParser(path.join(ROOT, 'config.xml'));
-    var windowsTargetVersion = config.getPreference('windows-target-version')
-    switch(windowsTargetVersion) {
-    case '8':
-    case '8.0':
-        return '8.0'
-    case '8.1':
-        return '8.1'
-    default:
-        throw new Error('Unsupported windows-target-version value: ' + windowsTargetVersion)
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/lib/spawn.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/lib/spawn.js b/windows/template/cordova/lib/spawn.js
deleted file mode 100644
index 0ccb0f5..0000000
--- a/windows/template/cordova/lib/spawn.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-       Licensed to the Apache Software Foundation (ASF) under one
-       or more contributor license agreements.  See the NOTICE file
-       distributed with this work for additional information
-       regarding copyright ownership.  The ASF licenses this file
-       to you under the Apache License, Version 2.0 (the
-       "License"); you may not use this file except in compliance
-       with the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-       Unless required by applicable law or agreed to in writing,
-       software distributed under the License is distributed on an
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-       KIND, either express or implied.  See the License for the
-       specific language governing permissions and limitations
-       under the License.
-*/
-
-var Q    = require('q'),
-    proc = require('child_process');
-
-// Takes a command and optional current working directory.
-module.exports = function(cmd, args, opt_cwd) {
-    var d = Q.defer();
-    try {
-        var child = proc.spawn(cmd, args, {cwd: opt_cwd, stdio: 'inherit'});
-        child.on('exit', function(code) {
-            if (code) {
-                d.reject('Error code ' + code + ' for command: ' + cmd + ' with args: ' + args);
-            } else {
-                d.resolve();
-            }
-        });
-    } catch(e) {
-        console.error('error caught: ' + e);
-        d.reject(e);
-    }
-    return d.promise;
-};

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/lib/utils.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/lib/utils.js b/windows/template/cordova/lib/utils.js
deleted file mode 100644
index c409b86..0000000
--- a/windows/template/cordova/lib/utils.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-       Licensed to the Apache Software Foundation (ASF) under one
-       or more contributor license agreements.  See the NOTICE file
-       distributed with this work for additional information
-       regarding copyright ownership.  The ASF licenses this file
-       to you under the Apache License, Version 2.0 (the
-       "License"); you may not use this file except in compliance
-       with the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-       Unless required by applicable law or agreed to in writing,
-       software distributed under the License is distributed on an
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-       KIND, either express or implied.  See the License for the
-       specific language governing permissions and limitations
-       under the License.
-*/
-
-var Q     = require('Q'),
-    fs    = require('fs'),
-    path  = require('path'),
-    exec  = require('./exec'),
-    spawn = require('./spawn');
-
-// returns full path to msbuild tools required to build the project and tools version
-module.exports.getMSBuildTools = function () {
-    var versions = ['12.0', '4.0'];
-    // create chain of promises, which returns specific msbuild version object
-    // or null, if specific msbuild path not found in registry
-    return Q.all(versions.map(function (version) {
-        return exec(
-            'reg query HKLM\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\' + version + ' /v MSBuildToolsPath'
-        ).then(function(output) {
-            // fetch msbuild path from 'reg' output
-            var msbPath = /MSBuildToolsPath\s+REG_SZ\s+(.*)/i.exec(output);
-            if (msbPath) {
-                return {version: version, path: msbPath[1]};
-            }
-            return null;
-        });
-    })).then(function (versions) {
-        // select first msbuild version available, and resolve promise with it
-        return versions[0] || versions[1] ?
-            Q.resolve(versions[0] || versions[1]) :
-            // Reject promise if no msbuild versions found
-            Q.reject('MSBuild tools not found');
-    });
-};
-
-// unblocks and returns path to WindowsStoreAppUtils.ps1
-// which provides helper functions to install/unistall/start Windows Store app
-module.exports.getAppStoreUtils = function () {
-    var appStoreUtils = path.join(__dirname, 'WindowsStoreAppUtils.ps1');
-    if (!fs.existsSync (appStoreUtils)) {
-        return Q.reject("Can't unblock AppStoreUtils script");
-    }
-    //console.log("Removing execution restrictions from AppStoreUtils...");
-    return spawn('powershell', ['Unblock-File', module.exports.quote(appStoreUtils)]).then(function () {
-        return Q.resolve(appStoreUtils);
-    }).fail(function (err) {
-        return Q.reject(err);
-    });
-};
-
-// returns path to AppDeploy util from Windows Phone 8.1 SDK
-module.exports.getAppDeployUtils = function () {
-    var appDeployUtils = path.join((process.env["ProgramFiles(x86)"] || process.env["ProgramFiles"]),
-        'Microsoft SDKs', 'Windows Phone', 'v8.1', 'Tools', 'AppDeploy', 'AppDeployCmd.exe');
-    // Check if AppDeployCmd is exists
-    if (!fs.existsSync(appDeployUtils)) {
-        console.warn("WARNING: AppDeploy tool (AppDeployCmd.exe) didn't found. Assume that it's in %PATH%");
-        return Q.resolve("AppDeployCmd");
-    }
-    return Q.resolve(appDeployUtils);
-};
-
-// checks to see if a .jsproj file exists in the project root
-module.exports.isCordovaProject = function (platformpath) {
-    if (fs.existsSync(platformpath)) {
-        var files = fs.readdirSync(platformpath);
-        for (var i in files){
-            if (path.extname(files[i]) == '.shproj'){
-                return true;
-            }
-        }
-    }
-    return false;
-};
-
-module.exports.quote = function(str) {
-    return '"' + str + '"';
-};

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/log.bat
----------------------------------------------------------------------
diff --git a/windows/template/cordova/log.bat b/windows/template/cordova/log.bat
deleted file mode 100644
index d23aeab..0000000
--- a/windows/template/cordova/log.bat
+++ /dev/null
@@ -1,19 +0,0 @@
-:: Licensed to the Apache Software Foundation (ASF) under one
-:: or more contributor license agreements.  See the NOTICE file
-:: distributed with this work for additional information
-:: regarding copyright ownership.  The ASF licenses this file
-:: to you under the Apache License, Version 2.0 (the
-:: "License"); you may not use this file except in compliance
-:: with the License.  You may obtain a copy of the License at
-:: 
-:: http://www.apache.org/licenses/LICENSE-2.0
-:: 
-:: Unless required by applicable law or agreed to in writing,
-:: software distributed under the License is distributed on an
-:: "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-:: KIND, either express or implied.  See the License for the
-:: specific language governing permissions and limitations
-:: under the License
-@ECHO OFF
-ECHO Sorry, logging is not supported for Windows. 1>&2
-EXIT /B 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/.bin/nopt
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/.bin/nopt b/windows/template/cordova/node_modules/.bin/nopt
deleted file mode 100644
index 25995f3..0000000
--- a/windows/template/cordova/node_modules/.bin/nopt
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-basedir=`dirname "$0"`
-
-case `uname` in
-    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
-esac
-
-if [ -x "$basedir/node" ]; then
-  "$basedir/node"  "$basedir/../nopt/bin/nopt.js" "$@"
-  ret=$?
-else 
-  node  "$basedir/../nopt/bin/nopt.js" "$@"
-  ret=$?
-fi
-exit $ret

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/.bin/nopt.cmd
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/.bin/nopt.cmd b/windows/template/cordova/node_modules/.bin/nopt.cmd
deleted file mode 100644
index c8e8216..0000000
--- a/windows/template/cordova/node_modules/.bin/nopt.cmd
+++ /dev/null
@@ -1,5 +0,0 @@
-@IF EXIST "%~dp0\node.exe" (
-  "%~dp0\node.exe"  "%~dp0\..\nopt\bin\nopt.js" %*
-) ELSE (
-  node  "%~dp0\..\nopt\bin\nopt.js" %*
-)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/.npmignore
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/.npmignore b/windows/template/cordova/node_modules/elementtree/.npmignore
deleted file mode 100644
index 3c3629e..0000000
--- a/windows/template/cordova/node_modules/elementtree/.npmignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/.travis.yml
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/.travis.yml b/windows/template/cordova/node_modules/elementtree/.travis.yml
deleted file mode 100644
index 6f27c96..0000000
--- a/windows/template/cordova/node_modules/elementtree/.travis.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-language: node_js
-
-node_js:
-  - 0.6
-
-script: make test
-
-notifications:
-  email:
-    - tomaz+travisci@tomaz.me

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/CHANGES.md
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/CHANGES.md b/windows/template/cordova/node_modules/elementtree/CHANGES.md
deleted file mode 100644
index 83bd61b..0000000
--- a/windows/template/cordova/node_modules/elementtree/CHANGES.md
+++ /dev/null
@@ -1,34 +0,0 @@
-elementtree v0.1.5 (in development)
-
-* Fix a bug in the find() and findtext() method which could manifest itself
-  under some conditions.
-  [metagriffin]
-
-elementtree v0.1.4
-
-* Allow user to use namespaced attributes when using find* functions.
-  [Andrew Lunny]
-
-elementtree v0.1.3
-
-* Improve the output of text content in the tags (strip unnecessary line break
-  characters).
-
-[Darryl Pogue]
-
-elementtree v0.1.2
-
- * Allow user to pass 'indent' option to ElementTree.write method. If this
-   option is specified (e.g. {'indent': 4}). XML will be pretty printed.
-   [Darryl Pogue, Tomaz Muraus]
-
- * Bump sax dependency version.
-
-elementtree v0.1.1 - 2011-09-23
-
- * Improve special character escaping.
-   [Ryan Phillips]
-
-elementtree v0.1.0 - 2011-09-05
-
- * Initial release.

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/LICENSE.txt
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/LICENSE.txt b/windows/template/cordova/node_modules/elementtree/LICENSE.txt
deleted file mode 100644
index 6b0b127..0000000
--- a/windows/template/cordova/node_modules/elementtree/LICENSE.txt
+++ /dev/null
@@ -1,203 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/Makefile
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/Makefile b/windows/template/cordova/node_modules/elementtree/Makefile
deleted file mode 100644
index ab7c4e0..0000000
--- a/windows/template/cordova/node_modules/elementtree/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-TESTS := \
-	tests/test-simple.js
-
-
-
-PATH := ./node_modules/.bin:$(PATH)
-
-WHISKEY := $(shell bash -c 'PATH=$(PATH) type -p whiskey')
-
-default: test
-
-test:
-	NODE_PATH=`pwd`/lib/ ${WHISKEY} --scope-leaks --sequential --real-time --tests "${TESTS}"
-
-tap:
-	NODE_PATH=`pwd`/lib/ ${WHISKEY} --test-reporter tap --sequential --real-time --tests "${TESTS}"
-
-coverage:
-	NODE_PATH=`pwd`/lib/ ${WHISKEY} --sequential --coverage  --coverage-reporter html --coverage-dir coverage_html --tests "${TESTS}"
-
-.PHONY: default test coverage tap scope

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/NOTICE
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/NOTICE b/windows/template/cordova/node_modules/elementtree/NOTICE
deleted file mode 100644
index 28ad70a..0000000
--- a/windows/template/cordova/node_modules/elementtree/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-node-elementtree
-Copyright (c) 2011, Rackspace, Inc.
-
-The ElementTree toolkit is Copyright (c) 1999-2007 by Fredrik Lundh
-

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/README.md
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/README.md b/windows/template/cordova/node_modules/elementtree/README.md
deleted file mode 100644
index 8a7e710..0000000
--- a/windows/template/cordova/node_modules/elementtree/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-node-elementtree
-====================
-
-node-elementtree is a [Node.js](http://nodejs.org) XML parser and serializer based upon the [Python ElementTree v1.3](http://effbot.org/zone/element-index.htm) module.
-
-Installation
-====================
-
-    $ npm install elementtree
-    
-Using the library
-====================
-
-For the usage refer to the Python ElementTree library documentation - [http://effbot.org/zone/element-index.htm#usage](http://effbot.org/zone/element-index.htm#usage).
-
-Supported XPath expressions in `find`, `findall` and `findtext` methods are listed on [http://effbot.org/zone/element-xpath.htm](http://effbot.org/zone/element-xpath.htm).
-
-Build status
-====================
-
-[![Build Status](https://secure.travis-ci.org/racker/node-elementtree.png)](http://travis-ci.org/racker/node-elementtree)
-
-
-License
-====================
-
-node-elementtree is distributed under the [Apache license](http://www.apache.org/licenses/LICENSE-2.0.html).

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/lib/constants.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/lib/constants.js b/windows/template/cordova/node_modules/elementtree/lib/constants.js
deleted file mode 100644
index b057faf..0000000
--- a/windows/template/cordova/node_modules/elementtree/lib/constants.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var DEFAULT_PARSER = 'sax';
-
-exports.DEFAULT_PARSER = DEFAULT_PARSER;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/lib/elementpath.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/lib/elementpath.js b/windows/template/cordova/node_modules/elementtree/lib/elementpath.js
deleted file mode 100644
index 2e93f47..0000000
--- a/windows/template/cordova/node_modules/elementtree/lib/elementpath.js
+++ /dev/null
@@ -1,343 +0,0 @@
-/**
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var sprintf = require('./sprintf').sprintf;
-
-var utils = require('./utils');
-var SyntaxError = require('./errors').SyntaxError;
-
-var _cache = {};
-
-var RE = new RegExp(
-  "(" +
-  "'[^']*'|\"[^\"]*\"|" +
-  "::|" +
-  "//?|" +
-  "\\.\\.|" +
-  "\\(\\)|" +
-  "[/.*:\\[\\]\\(\\)@=])|" +
-  "((?:\\{[^}]+\\})?[^/\\[\\]\\(\\)@=\\s]+)|" +
-  "\\s+", 'g'
-);
-
-var xpath_tokenizer = utils.findall.bind(null, RE);
-
-function prepare_tag(next, token) {
-  var tag = token[0];
-
-  function select(context, result) {
-    var i, len, elem, rv = [];
-
-    for (i = 0, len = result.length; i < len; i++) {
-      elem = result[i];
-      elem._children.forEach(function(e) {
-        if (e.tag === tag) {
-          rv.push(e);
-        }
-      });
-    }
-
-    return rv;
-  }
-
-  return select;
-}
-
-function prepare_star(next, token) {
-  function select(context, result) {
-    var i, len, elem, rv = [];
-
-    for (i = 0, len = result.length; i < len; i++) {
-      elem = result[i];
-      elem._children.forEach(function(e) {
-        rv.push(e);
-      });
-    }
-
-    return rv;
-  }
-
-  return select;
-}
-
-function prepare_dot(next, token) {
-  function select(context, result) {
-    var i, len, elem, rv = [];
-
-    for (i = 0, len = result.length; i < len; i++) {
-      elem = result[i];
-      rv.push(elem);
-    }
-
-    return rv;
-  }
-
-  return select;
-}
-
-function prepare_iter(next, token) {
-  var tag;
-  token = next();
-
-  if (token[1] === '*') {
-    tag = '*';
-  }
-  else if (!token[1]) {
-    tag = token[0] || '';
-  }
-  else {
-    throw new SyntaxError(token);
-  }
-
-  function select(context, result) {
-    var i, len, elem, rv = [];
-
-    for (i = 0, len = result.length; i < len; i++) {
-      elem = result[i];
-      elem.iter(tag, function(e) {
-        if (e !== elem) {
-          rv.push(e);
-        }
-      });
-    }
-
-    return rv;
-  }
-
-  return select;
-}
-
-function prepare_dot_dot(next, token) {
-  function select(context, result) {
-    var i, len, elem, rv = [], parent_map = context.parent_map;
-
-    if (!parent_map) {
-      context.parent_map = parent_map = {};
-
-      context.root.iter(null, function(p) {
-        p._children.forEach(function(e) {
-          parent_map[e] = p;
-        });
-      });
-    }
-
-    for (i = 0, len = result.length; i < len; i++) {
-      elem = result[i];
-
-      if (parent_map.hasOwnProperty(elem)) {
-        rv.push(parent_map[elem]);
-      }
-    }
-
-    return rv;
-  }
-
-  return select;
-}
-
-
-function prepare_predicate(next, token) {
-  var tag, key, value, select;
-  token = next();
-
-  if (token[1] === '@') {
-    // attribute
-    token = next();
-
-    if (token[1]) {
-      throw new SyntaxError(token, 'Invalid attribute predicate');
-    }
-
-    key = token[0];
-    token = next();
-
-    if (token[1] === ']') {
-      select = function(context, result) {
-        var i, len, elem, rv = [];
-
-        for (i = 0, len = result.length; i < len; i++) {
-          elem = result[i];
-
-          if (elem.get(key)) {
-            rv.push(elem);
-          }
-        }
-
-        return rv;
-      };
-    }
-    else if (token[1] === '=') {
-      value = next()[1];
-
-      if (value[0] === '"' || value[value.length - 1] === '\'') {
-        value = value.slice(1, value.length - 1);
-      }
-      else {
-        throw new SyntaxError(token, 'Ivalid comparison target');
-      }
-
-      token = next();
-      select = function(context, result) {
-        var i, len, elem, rv = [];
-
-        for (i = 0, len = result.length; i < len; i++) {
-          elem = result[i];
-
-          if (elem.get(key) === value) {
-            rv.push(elem);
-          }
-        }
-
-        return rv;
-      };
-    }
-
-    if (token[1] !== ']') {
-      throw new SyntaxError(token, 'Invalid attribute predicate');
-    }
-  }
-  else if (!token[1]) {
-    tag = token[0] || '';
-    token = next();
-
-    if (token[1] !== ']') {
-      throw new SyntaxError(token, 'Invalid node predicate');
-    }
-
-    select = function(context, result) {
-      var i, len, elem, rv = [];
-
-      for (i = 0, len = result.length; i < len; i++) {
-        elem = result[i];
-
-        if (elem.find(tag)) {
-          rv.push(elem);
-        }
-      }
-
-      return rv;
-    };
-  }
-  else {
-    throw new SyntaxError(null, 'Invalid predicate');
-  }
-
-  return select;
-}
-
-
-
-var ops = {
-  "": prepare_tag,
-  "*": prepare_star,
-  ".": prepare_dot,
-  "..": prepare_dot_dot,
-  "//": prepare_iter,
-  "[": prepare_predicate,
-};
-
-function _SelectorContext(root) {
-  this.parent_map = null;
-  this.root = root;
-}
-
-function findall(elem, path) {
-  var selector, result, i, len, token, value, select, context;
-
-  if (_cache.hasOwnProperty(path)) {
-    selector = _cache[path];
-  }
-  else {
-    // TODO: Use smarter cache purging approach
-    if (Object.keys(_cache).length > 100) {
-      _cache = {};
-    }
-
-    if (path.charAt(0) === '/') {
-      throw new SyntaxError(null, 'Cannot use absolute path on element');
-    }
-
-    result = xpath_tokenizer(path);
-    selector = [];
-
-    function getToken() {
-      return result.shift();
-    }
-
-    token = getToken();
-    while (true) {
-      var c = token[1] || '';
-      value = ops[c](getToken, token);
-
-      if (!value) {
-        throw new SyntaxError(null, sprintf('Invalid path: %s', path));
-      }
-
-      selector.push(value);
-      token = getToken();
-
-      if (!token) {
-        break;
-      }
-      else if (token[1] === '/') {
-        token = getToken();
-      }
-
-      if (!token) {
-        break;
-      }
-    }
-
-    _cache[path] = selector;
-  }
-
-  // Execute slector pattern
-  result = [elem];
-  context = new _SelectorContext(elem);
-
-  for (i = 0, len = selector.length; i < len; i++) {
-    select = selector[i];
-    result = select(context, result);
-  }
-
-  return result || [];
-}
-
-function find(element, path) {
-  var resultElements = findall(element, path);
-
-  if (resultElements && resultElements.length > 0) {
-    return resultElements[0];
-  }
-
-  return null;
-}
-
-function findtext(element, path, defvalue) {
-  var resultElements = findall(element, path);
-
-  if (resultElements && resultElements.length > 0) {
-    return resultElements[0].text;
-  }
-
-  return defvalue;
-}
-
-
-exports.find = find;
-exports.findall = findall;
-exports.findtext = findtext;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/lib/elementtree.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/lib/elementtree.js b/windows/template/cordova/node_modules/elementtree/lib/elementtree.js
deleted file mode 100644
index b46268c..0000000
--- a/windows/template/cordova/node_modules/elementtree/lib/elementtree.js
+++ /dev/null
@@ -1,598 +0,0 @@
-/**
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var sprintf = require('./sprintf').sprintf;
-
-var utils = require('./utils');
-var ElementPath = require('./elementpath');
-var TreeBuilder = require('./treebuilder').TreeBuilder;
-var get_parser = require('./parser').get_parser;
-var constants = require('./constants');
-
-var element_ids = 0;
-
-function Element(tag, attrib)
-{
-  this._id = element_ids++;
-  this.tag = tag;
-  this.attrib = {};
-  this.text = null;
-  this.tail = null;
-  this._children = [];
-
-  if (attrib) {
-    this.attrib = utils.merge(this.attrib, attrib);
-  }
-}
-
-Element.prototype.toString = function()
-{
-  return sprintf("<Element %s at %s>", this.tag, this._id);
-};
-
-Element.prototype.makeelement = function(tag, attrib)
-{
-  return new Element(tag, attrib);
-};
-
-Element.prototype.len = function()
-{
-  return this._children.length;
-};
-
-Element.prototype.getItem = function(index)
-{
-  return this._children[index];
-};
-
-Element.prototype.setItem = function(index, element)
-{
-  this._children[index] = element;
-};
-
-Element.prototype.delItem = function(index)
-{
-  this._children.splice(index, 1);
-};
-
-Element.prototype.getSlice = function(start, stop)
-{
-  return this._children.slice(start, stop);
-};
-
-Element.prototype.setSlice = function(start, stop, elements)
-{
-  var i;
-  var k = 0;
-  for (i = start; i < stop; i++, k++) {
-    this._children[i] = elements[k];
-  }
-};
-
-Element.prototype.delSlice = function(start, stop)
-{
-  this._children.splice(start, stop - start);
-};
-
-Element.prototype.append = function(element)
-{
-  this._children.push(element);
-};
-
-Element.prototype.extend = function(elements)
-{
-  this._children.concat(elements);
-};
-
-Element.prototype.insert = function(index, element)
-{
-  this._children[index] = element;
-};
-
-Element.prototype.remove = function(index, element)
-{
-  this._children = this._children.filter(function(e) {
-    /* TODO: is this the right way to do this? */
-    if (e._id === element._id) {
-      return false;
-    }
-    return true;
-  });
-};
-
-Element.prototype.getchildren = function() {
-  return this._children;
-};
-
-Element.prototype.find = function(path)
-{
-  return ElementPath.find(this, path);
-};
-
-Element.prototype.findtext = function(path, defvalue)
-{
-  return ElementPath.findtext(this, path, defvalue);
-};
-
-Element.prototype.findall = function(path, defvalue)
-{
-  return ElementPath.findall(this, path, defvalue);
-};
-
-Element.prototype.clear = function()
-{
-  this.attrib = {};
-  this._children = [];
-  this.text = null;
-  this.tail = null;
-};
-
-Element.prototype.get = function(key, defvalue)
-{
-  if (this.attrib[key] !== undefined) {
-    return this.attrib[key];
-  }
-  else {
-    return defvalue;
-  }
-};
-
-Element.prototype.set = function(key, value)
-{
-  this.attrib[key] = value;
-};
-
-Element.prototype.keys = function()
-{
-  return Object.keys(this.attrib);
-};
-
-Element.prototype.items = function()
-{
-  return utils.items(this.attrib);
-};
-
-/*
- * In python this uses a generator, but in v8 we don't have em,
- * so we use a callback instead.
- **/
-Element.prototype.iter = function(tag, callback)
-{
-  var self = this;
-  var i, child;
-
-  if (tag === "*") {
-    tag = null;
-  }
-
-  if (tag === null || this.tag === tag) {
-    callback(self);
-  }
-
-  for (i = 0; i < this._children.length; i++) {
-    child = this._children[i];
-    child.iter(tag, function(e) {
-      callback(e);
-    });
-  }
-};
-
-Element.prototype.itertext = function(callback)
-{
-  this.iter(null, function(e) {
-    if (e.text) {
-      callback(e.text);
-    }
-
-    if (e.tail) {
-      callback(e.tail);
-    }
-  });
-};
-
-
-function SubElement(parent, tag, attrib) {
-  var element = parent.makeelement(tag, attrib);
-  parent.append(element);
-  return element;
-}
-
-function Comment(text) {
-  var element = new Element(Comment);
-  if (text) {
-    element.text = text;
-  }
-  return element;
-}
-
-function ProcessingInstruction(target, text)
-{
-  var element = new Element(ProcessingInstruction);
-  element.text = target;
-  if (text) {
-    element.text = element.text + " " + text;
-  }
-  return element;
-}
-
-function QName(text_or_uri, tag)
-{
-  if (tag) {
-    text_or_uri = sprintf("{%s}%s", text_or_uri, tag);
-  }
-  this.text = text_or_uri;
-}
-
-QName.prototype.toString = function() {
-  return this.text;
-};
-
-function ElementTree(element)
-{
-  this._root = element;
-}
-
-ElementTree.prototype.getroot = function() {
-  return this._root;
-};
-
-ElementTree.prototype._setroot = function(element) {
-  this._root = element;
-};
-
-ElementTree.prototype.parse = function(source, parser) {
-  if (!parser) {
-    parser = get_parser(constants.DEFAULT_PARSER);
-    parser = new parser.XMLParser(new TreeBuilder());
-  }
-
-  parser.feed(source);
-  this._root = parser.close();
-  return this._root;
-};
-
-ElementTree.prototype.iter = function(tag, callback) {
-  this._root.iter(tag, callback);
-};
-
-ElementTree.prototype.find = function(path) {
-  return this._root.find(path);
-};
-
-ElementTree.prototype.findtext = function(path, defvalue) {
-  return this._root.findtext(path, defvalue);
-};
-
-ElementTree.prototype.findall = function(path) {
-  return this._root.findall(path);
-};
-
-/**
- * Unlike ElementTree, we don't write to a file, we return you a string.
- */
-ElementTree.prototype.write = function(options) {
-  var sb = [];
-  options = utils.merge({
-    encoding: 'utf-8',
-    xml_declaration: null,
-    default_namespace: null,
-    method: 'xml'}, options);
-
-  if (options.xml_declaration !== false) {
-    sb.push("<?xml version='1.0' encoding='"+options.encoding +"'?>\n");
-  }
-
-  if (options.method === "text") {
-    _serialize_text(sb, self._root, encoding);
-  }
-  else {
-    var qnames, namespaces, indent, indent_string;
-    var x = _namespaces(this._root, options.encoding, options.default_namespace);
-    qnames = x[0];
-    namespaces = x[1];
-
-    if (options.hasOwnProperty('indent')) {
-      indent = 0;
-      indent_string = new Array(options.indent + 1).join(' ');
-    }
-    else {
-      indent = false;
-    }
-
-    if (options.method === "xml") {
-      _serialize_xml(function(data) {
-        sb.push(data);
-      }, this._root, options.encoding, qnames, namespaces, indent, indent_string);
-    }
-    else {
-      /* TODO: html */
-      throw new Error("unknown serialization method "+ options.method);
-    }
-  }
-
-  return sb.join("");
-};
-
-var _namespace_map = {
-    /* "well-known" namespace prefixes */
-    "http://www.w3.org/XML/1998/namespace": "xml",
-    "http://www.w3.org/1999/xhtml": "html",
-    "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf",
-    "http://schemas.xmlsoap.org/wsdl/": "wsdl",
-    /* xml schema */
-    "http://www.w3.org/2001/XMLSchema": "xs",
-    "http://www.w3.org/2001/XMLSchema-instance": "xsi",
-    /* dublic core */
-    "http://purl.org/dc/elements/1.1/": "dc",
-};
-
-function register_namespace(prefix, uri) {
-  if (/ns\d+$/.test(prefix)) {
-    throw new Error('Prefix format reserved for internal use');
-  }
-
-  if (_namespace_map.hasOwnProperty(uri) && _namespace_map[uri] === prefix) {
-    delete _namespace_map[uri];
-  }
-
-  _namespace_map[uri] = prefix;
-}
-
-
-function _escape(text, encoding, isAttribute, isText) {
-  if (text) {
-    text = text.toString();
-    text = text.replace(/&/g, '&amp;');
-    text = text.replace(/</g, '&lt;');
-    text = text.replace(/>/g, '&gt;');
-    if (!isText) {
-        text = text.replace(/\n/g, '&#xA;');
-        text = text.replace(/\r/g, '&#xD;');
-    }
-    if (isAttribute) {
-      text = text.replace(/"/g, '&quot;');
-    }
-  }
-  return text;
-}
-
-/* TODO: benchmark single regex */
-function _escape_attrib(text, encoding) {
-  return _escape(text, encoding, true);
-}
-
-function _escape_cdata(text, encoding) {
-  return _escape(text, encoding, false);
-}
-
-function _escape_text(text, encoding) {
-  return _escape(text, encoding, false, true);
-}
-
-function _namespaces(elem, encoding, default_namespace) {
-  var qnames = {};
-  var namespaces = {};
-
-  if (default_namespace) {
-    namespaces[default_namespace] = "";
-  }
-
-  function encode(text) {
-    return text;
-  }
-
-  function add_qname(qname) {
-    if (qname[0] === "{") {
-      var tmp = qname.substring(1).split("}", 2);
-      var uri = tmp[0];
-      var tag = tmp[1];
-      var prefix = namespaces[uri];
-
-      if (prefix === undefined) {
-        prefix = _namespace_map[uri];
-        if (prefix === undefined) {
-          prefix = "ns" + Object.keys(namespaces).length;
-        }
-        if (prefix !== "xml") {
-          namespaces[uri] = prefix;
-        }
-      }
-
-      if (prefix) {
-        qnames[qname] = sprintf("%s:%s", prefix, tag);
-      }
-      else {
-        qnames[qname] = tag;
-      }
-    }
-    else {
-      if (default_namespace) {
-        throw new Error('cannot use non-qualified names with default_namespace option');
-      }
-
-      qnames[qname] = qname;
-    }
-  }
-
-
-  elem.iter(null, function(e) {
-    var i;
-    var tag = e.tag;
-    var text = e.text;
-    var items = e.items();
-
-    if (tag instanceof QName && qnames[tag.text] === undefined) {
-      add_qname(tag.text);
-    }
-    else if (typeof(tag) === "string") {
-      add_qname(tag);
-    }
-    else if (tag !== null && tag !== Comment && tag !== ProcessingInstruction) {
-      throw new Error('Invalid tag type for serialization: '+ tag);
-    }
-
-    if (text instanceof QName && qnames[text.text] === undefined) {
-      add_qname(text.text);
-    }
-
-    items.forEach(function(item) {
-      var key = item[0],
-          value = item[1];
-      if (key instanceof QName) {
-        key = key.text;
-      }
-
-      if (qnames[key] === undefined) {
-        add_qname(key);
-      }
-
-      if (value instanceof QName && qnames[value.text] === undefined) {
-        add_qname(value.text);
-      }
-    });
-  });
-  return [qnames, namespaces];
-}
-
-function _serialize_xml(write, elem, encoding, qnames, namespaces, indent, indent_string) {
-  var tag = elem.tag;
-  var text = elem.text;
-  var items;
-  var i;
-
-  var newlines = indent || (indent === 0);
-  write(Array(indent + 1).join(indent_string));
-
-  if (tag === Comment) {
-    write(sprintf("<!--%s-->", _escape_cdata(text, encoding)));
-  }
-  else if (tag === ProcessingInstruction) {
-    write(sprintf("<?%s?>", _escape_cdata(text, encoding)));
-  }
-  else {
-    tag = qnames[tag];
-    if (tag === undefined) {
-      if (text) {
-        write(_escape_text(text, encoding));
-      }
-      elem.iter(function(e) {
-        _serialize_xml(write, e, encoding, qnames, null, newlines ? indent + 1 : false, indent_string);
-      });
-    }
-    else {
-      write("<" + tag);
-      items = elem.items();
-
-      if (items || namespaces) {
-        items.sort(); // lexical order
-
-        items.forEach(function(item) {
-          var k = item[0],
-              v = item[1];
-
-            if (k instanceof QName) {
-              k = k.text;
-            }
-
-            if (v instanceof QName) {
-              v = qnames[v.text];
-            }
-            else {
-              v = _escape_attrib(v, encoding);
-            }
-            write(sprintf(" %s=\"%s\"", qnames[k], v));
-        });
-
-        if (namespaces) {
-          items = utils.items(namespaces);
-          items.sort(function(a, b) { return a[1] < b[1]; });
-
-          items.forEach(function(item) {
-            var k = item[1],
-                v = item[0];
-
-            if (k) {
-              k = ':' + k;
-            }
-
-            write(sprintf(" xmlns%s=\"%s\"", k, _escape_attrib(v, encoding)));
-          });
-        }
-      }
-
-      if (text || elem.len()) {
-        if (text && text.toString().match(/^\s*$/)) {
-            text = null;
-        }
-
-        write(">");
-        if (!text && newlines) {
-          write("\n");
-        }
-
-        if (text) {
-          write(_escape_text(text, encoding));
-        }
-        elem._children.forEach(function(e) {
-          _serialize_xml(write, e, encoding, qnames, null, newlines ? indent + 1 : false, indent_string);
-        });
-
-        if (!text && indent) {
-          write(Array(indent + 1).join(indent_string));
-        }
-        write("</" + tag + ">");
-      }
-      else {
-        write(" />");
-      }
-    }
-  }
-
-  if (newlines) {
-    write("\n");
-  }
-}
-
-function parse(source, parser) {
-  var tree = new ElementTree();
-  tree.parse(source, parser);
-  return tree;
-}
-
-function tostring(element, options) {
-  return new ElementTree(element).write(options);
-}
-
-exports.PI = ProcessingInstruction;
-exports.Comment = Comment;
-exports.ProcessingInstruction = ProcessingInstruction;
-exports.SubElement = SubElement;
-exports.QName = QName;
-exports.ElementTree = ElementTree;
-exports.ElementPath = ElementPath;
-exports.Element = function(tag, attrib) {
-  return new Element(tag, attrib);
-};
-
-exports.XML = function(data) {
-  var et = new ElementTree();
-  return et.parse(data);
-};
-
-exports.parse = parse;
-exports.register_namespace = register_namespace;
-exports.tostring = tostring;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/lib/errors.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/lib/errors.js b/windows/template/cordova/node_modules/elementtree/lib/errors.js
deleted file mode 100644
index e8742be..0000000
--- a/windows/template/cordova/node_modules/elementtree/lib/errors.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var util = require('util');
-
-var sprintf = require('./sprintf').sprintf;
-
-function SyntaxError(token, msg) {
-  msg = msg || sprintf('Syntax Error at token %s', token.toString());
-  this.token = token;
-  this.message = msg;
-  Error.call(this, msg);
-}
-
-util.inherits(SyntaxError, Error);
-
-exports.SyntaxError = SyntaxError;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/lib/parser.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/lib/parser.js b/windows/template/cordova/node_modules/elementtree/lib/parser.js
deleted file mode 100644
index 7307ee4..0000000
--- a/windows/template/cordova/node_modules/elementtree/lib/parser.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-/* TODO: support node-expat C++ module optionally */
-
-var util = require('util');
-var parsers = require('./parsers/index');
-
-function get_parser(name) {
-  if (name === 'sax') {
-    return parsers.sax;
-  }
-  else {
-    throw new Error('Invalid parser: ' + name);
-  }
-}
-
-
-exports.get_parser = get_parser;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/lib/parsers/index.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/lib/parsers/index.js b/windows/template/cordova/node_modules/elementtree/lib/parsers/index.js
deleted file mode 100644
index 5eac5c8..0000000
--- a/windows/template/cordova/node_modules/elementtree/lib/parsers/index.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.sax = require('./sax');

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/lib/parsers/sax.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/lib/parsers/sax.js b/windows/template/cordova/node_modules/elementtree/lib/parsers/sax.js
deleted file mode 100644
index 69b0a59..0000000
--- a/windows/template/cordova/node_modules/elementtree/lib/parsers/sax.js
+++ /dev/null
@@ -1,56 +0,0 @@
-var util = require('util');
-
-var sax = require('sax');
-
-var TreeBuilder = require('./../treebuilder').TreeBuilder;
-
-function XMLParser(target) {
-  this.parser = sax.parser(true);
-
-  this.target = (target) ? target : new TreeBuilder();
-
-  this.parser.onopentag = this._handleOpenTag.bind(this);
-  this.parser.ontext = this._handleText.bind(this);
-  this.parser.oncdata = this._handleCdata.bind(this);
-  this.parser.ondoctype = this._handleDoctype.bind(this);
-  this.parser.oncomment = this._handleComment.bind(this);
-  this.parser.onclosetag = this._handleCloseTag.bind(this);
-  this.parser.onerror = this._handleError.bind(this);
-}
-
-XMLParser.prototype._handleOpenTag = function(tag) {
-  this.target.start(tag.name, tag.attributes);
-};
-
-XMLParser.prototype._handleText = function(text) {
-  this.target.data(text);
-};
-
-XMLParser.prototype._handleCdata = function(text) {
-  this.target.data(text);
-};
-
-XMLParser.prototype._handleDoctype = function(text) {
-};
-
-XMLParser.prototype._handleComment = function(comment) {
-};
-
-XMLParser.prototype._handleCloseTag = function(tag) {
-  this.target.end(tag);
-};
-
-XMLParser.prototype._handleError = function(err) {
-  throw err;
-};
-
-XMLParser.prototype.feed = function(chunk) {
-  this.parser.write(chunk);
-};
-
-XMLParser.prototype.close = function() {
-  this.parser.close();
-  return this.target.close();
-};
-
-exports.XMLParser = XMLParser;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/lib/sprintf.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/lib/sprintf.js b/windows/template/cordova/node_modules/elementtree/lib/sprintf.js
deleted file mode 100644
index f802c1b..0000000
--- a/windows/template/cordova/node_modules/elementtree/lib/sprintf.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var cache = {};
-
-
-// Do any others need escaping?
-var TO_ESCAPE = {
-  '\'': '\\\'',
-  '\n': '\\n'
-};
-
-
-function populate(formatter) {
-  var i, type,
-      key = formatter,
-      prev = 0,
-      arg = 1,
-      builder = 'return \'';
-
-  for (i = 0; i < formatter.length; i++) {
-    if (formatter[i] === '%') {
-      type = formatter[i + 1];
-
-      switch (type) {
-        case 's':
-          builder += formatter.slice(prev, i) + '\' + arguments[' + arg + '] + \'';
-          prev = i + 2;
-          arg++;
-          break;
-        case 'j':
-          builder += formatter.slice(prev, i) + '\' + JSON.stringify(arguments[' + arg + ']) + \'';
-          prev = i + 2;
-          arg++;
-          break;
-        case '%':
-          builder += formatter.slice(prev, i + 1);
-          prev = i + 2;
-          i++;
-          break;
-      }
-
-
-    } else if (TO_ESCAPE[formatter[i]]) {
-      builder += formatter.slice(prev, i) + TO_ESCAPE[formatter[i]];
-      prev = i + 1;
-    }
-  }
-
-  builder += formatter.slice(prev) + '\';';
-  cache[key] = new Function(builder);
-}
-
-
-/**
- * A fast version of sprintf(), which currently only supports the %s and %j.
- * This caches a formatting function for each format string that is used, so
- * you should only use this sprintf() will be called many times with a single
- * format string and a limited number of format strings will ever be used (in
- * general this means that format strings should be string literals).
- *
- * @param {String} formatter A format string.
- * @param {...String} var_args Values that will be formatted by %s and %j.
- * @return {String} The formatted output.
- */
-exports.sprintf = function(formatter, var_args) {
-  if (!cache[formatter]) {
-    populate(formatter);
-  }
-
-  return cache[formatter].apply(null, arguments);
-};

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/lib/treebuilder.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/lib/treebuilder.js b/windows/template/cordova/node_modules/elementtree/lib/treebuilder.js
deleted file mode 100644
index 393a98f..0000000
--- a/windows/template/cordova/node_modules/elementtree/lib/treebuilder.js
+++ /dev/null
@@ -1,60 +0,0 @@
-function TreeBuilder(element_factory) {
-  this._data = [];
-  this._elem = [];
-  this._last = null;
-  this._tail = null;
-  if (!element_factory) {
-    /* evil circular dep */
-    element_factory = require('./elementtree').Element;
-  }
-  this._factory = element_factory;
-}
-
-TreeBuilder.prototype.close = function() {
-  return this._last;
-};
-
-TreeBuilder.prototype._flush = function() {
-  if (this._data) {
-    if (this._last !== null) {
-      var text = this._data.join("");
-      if (this._tail) {
-        this._last.tail = text;
-      }
-      else {
-        this._last.text = text;
-      }
-    }
-    this._data = [];
-  }
-};
-
-TreeBuilder.prototype.data = function(data) {
-  this._data.push(data);
-};
-
-TreeBuilder.prototype.start = function(tag, attrs) {
-  this._flush();
-  var elem = this._factory(tag, attrs);
-  this._last = elem;
-
-  if (this._elem.length) {
-    this._elem[this._elem.length - 1].append(elem);
-  }
-
-  this._elem.push(elem);
-
-  this._tail = null;
-};
-
-TreeBuilder.prototype.end = function(tag) {
-  this._flush();
-  this._last = this._elem.pop();
-  if (this._last.tag !== tag) {
-    throw new Error("end tag mismatch");
-  }
-  this._tail = 1;
-  return this._last;
-};
-
-exports.TreeBuilder = TreeBuilder;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/lib/utils.js
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/lib/utils.js b/windows/template/cordova/node_modules/elementtree/lib/utils.js
deleted file mode 100644
index b08a670..0000000
--- a/windows/template/cordova/node_modules/elementtree/lib/utils.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-/**
- * @param {Object} hash.
- * @param {Array} ignored.
- */
-function items(hash, ignored) {
-  ignored = ignored || null;
-  var k, rv = [];
-
-  function is_ignored(key) {
-    if (!ignored || ignored.length === 0) {
-      return false;
-    }
-
-    return ignored.indexOf(key);
-  }
-
-  for (k in hash) {
-    if (hash.hasOwnProperty(k) && !(is_ignored(ignored))) {
-      rv.push([k, hash[k]]);
-    }
-  }
-
-  return rv;
-}
-
-
-function findall(re, str) {
-  var match, matches = [];
-
-  while ((match = re.exec(str))) {
-      matches.push(match);
-  }
-
-  return matches;
-}
-
-function merge(a, b) {
-  var c = {}, attrname;
-
-  for (attrname in a) {
-    if (a.hasOwnProperty(attrname)) {
-      c[attrname] = a[attrname];
-    }
-  }
-  for (attrname in b) {
-    if (b.hasOwnProperty(attrname)) {
-      c[attrname] = b[attrname];
-    }
-  }
-  return c;
-}
-
-exports.items = items;
-exports.findall = findall;
-exports.merge = merge;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/node_modules/sax/AUTHORS
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/node_modules/sax/AUTHORS b/windows/template/cordova/node_modules/elementtree/node_modules/sax/AUTHORS
deleted file mode 100644
index 26d8659..0000000
--- a/windows/template/cordova/node_modules/elementtree/node_modules/sax/AUTHORS
+++ /dev/null
@@ -1,9 +0,0 @@
-# contributors sorted by whether or not they're me.
-Isaac Z. Schlueter <i...@izs.me>
-Stein Martin Hustad <st...@hustad.com>
-Mikeal Rogers <mi...@gmail.com>
-Laurie Harper <la...@holoweb.net>
-Jann Horn <ja...@Jann-PC.fritz.box>
-Elijah Insua <tm...@gmail.com>
-Henry Rawas <he...@schakra.com>
-Justin Makeig <jm...@makeig.com>

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/f4e2ac6a/windows/template/cordova/node_modules/elementtree/node_modules/sax/LICENSE
----------------------------------------------------------------------
diff --git a/windows/template/cordova/node_modules/elementtree/node_modules/sax/LICENSE b/windows/template/cordova/node_modules/elementtree/node_modules/sax/LICENSE
deleted file mode 100644
index 05a4010..0000000
--- a/windows/template/cordova/node_modules/elementtree/node_modules/sax/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.