Update JS snapshot to version 3.8.2 (via coho)
diff --git a/template/www/cordova.js b/template/www/cordova.js
index c5a2dd4..985814d 100644
--- a/template/www/cordova.js
+++ b/template/www/cordova.js
@@ -1,5 +1,5 @@
 // Platform: wp8

-// b0463746dd842818c1f08560e998ec847460596c

+// 8e9610fe33fc743fcaf5d920064f0deb2cad1715

 /*

  Licensed to the Apache Software Foundation (ASF) under one

  or more contributor license agreements.  See the NOTICE file

@@ -19,7 +19,7 @@
  under the License.

 */

 ;(function() {

-var PLATFORM_VERSION_BUILD_LABEL = '3.8.1';

+var PLATFORM_VERSION_BUILD_LABEL = '3.8.2';

 // file: src/scripts/require.js

 

 /*jshint -W079 */

@@ -101,7 +101,9 @@
 // file: src/cordova.js

 define("cordova", function(require, exports, module) {

 

-if(window.cordova){

+// Workaround for Windows 10 in hosted environment case

+// http://www.w3.org/html/wg/drafts/html/master/browsers.html#named-access-on-the-window-object

+if (window.cordova && !(window.cordova instanceof HTMLElement)) {

     throw new Error("cordova already defined");

 }

 

@@ -331,7 +333,6 @@
 // file: src/common/argscheck.js

 define("cordova/argscheck", function(require, exports, module) {

 

-var exec = require('cordova/exec');

 var utils = require('cordova/utils');

 

 var moduleExports = module.exports;

@@ -816,7 +817,7 @@
 

 });

 

-// file: src/wp8/exec.js

+// file: /Users/steveng/repo/cordova/cordova-wp8/cordova-js-src/exec.js

 define("cordova/exec", function(require, exports, module) {

 

 var cordova = require('cordova'),

@@ -978,6 +979,7 @@
 // Register pause, resume and deviceready channels as events on document.

 channel.onPause = cordova.addDocumentEventHandler('pause');

 channel.onResume = cordova.addDocumentEventHandler('resume');

+channel.onActivated = cordova.addDocumentEventHandler('activated');

 channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready');

 

 // Listen for DOMContentLoaded and notify our channel subscribers.

@@ -1039,10 +1041,12 @@
 

 var channel = require('cordova/channel');

 var cordova = require('cordova');

+var modulemapper = require('cordova/modulemapper');

 var platform = require('cordova/platform');

+var pluginloader = require('cordova/pluginloader');

 var utils = require('cordova/utils');

 

-var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady];

+var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady, channel.onPluginsReady];

 

 // setting exec

 cordova.exec = require('cordova/exec');

@@ -1105,6 +1109,7 @@
 // Register pause, resume and deviceready channels as events on document.

 channel.onPause = cordova.addDocumentEventHandler('pause');

 channel.onResume = cordova.addDocumentEventHandler('resume');

+channel.onActivated = cordova.addDocumentEventHandler('activated');

 channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready');

 

 // Listen for DOMContentLoaded and notify our channel subscribers.

@@ -1126,10 +1131,19 @@
 // Call the platform-specific initialization.

 platform.bootstrap && platform.bootstrap();

 

+// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js.

+// The delay allows the attached modules to be defined before the plugin loader looks for them.

+setTimeout(function() {

+    pluginloader.load(function() {

+        channel.onPluginsReady.fire();

+    });

+}, 0);

+

 /**

  * Create all cordova objects once native side is ready.

  */

 channel.join(function() {

+    modulemapper.mapModules(window);

 

     platform.initialize && platform.initialize();

 

@@ -1248,7 +1262,104 @@
 

 });

 

-// file: src/wp8/platform.js

+// file: src/common/modulemapper_b.js

+define("cordova/modulemapper_b", function(require, exports, module) {

+

+var builder = require('cordova/builder'),

+    symbolList = [],

+    deprecationMap;

+

+exports.reset = function() {

+    symbolList = [];

+    deprecationMap = {};

+};

+

+function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) {

+    symbolList.push(strategy, moduleName, symbolPath);

+    if (opt_deprecationMessage) {

+        deprecationMap[symbolPath] = opt_deprecationMessage;

+    }

+}

+

+// Note: Android 2.3 does have Function.bind().

+exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) {

+    addEntry('c', moduleName, symbolPath, opt_deprecationMessage);

+};

+

+exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) {

+    addEntry('m', moduleName, symbolPath, opt_deprecationMessage);

+};

+

+exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) {

+    addEntry('d', moduleName, symbolPath, opt_deprecationMessage);

+};

+

+exports.runs = function(moduleName) {

+    addEntry('r', moduleName, null);

+};

+

+function prepareNamespace(symbolPath, context) {

+    if (!symbolPath) {

+        return context;

+    }

+    var parts = symbolPath.split('.');

+    var cur = context;

+    for (var i = 0, part; part = parts[i]; ++i) {

+        cur = cur[part] = cur[part] || {};

+    }

+    return cur;

+}

+

+exports.mapModules = function(context) {

+    var origSymbols = {};

+    context.CDV_origSymbols = origSymbols;

+    for (var i = 0, len = symbolList.length; i < len; i += 3) {

+        var strategy = symbolList[i];

+        var moduleName = symbolList[i + 1];

+        var module = require(moduleName);

+        // <runs/>

+        if (strategy == 'r') {

+            continue;

+        }

+        var symbolPath = symbolList[i + 2];

+        var lastDot = symbolPath.lastIndexOf('.');

+        var namespace = symbolPath.substr(0, lastDot);

+        var lastName = symbolPath.substr(lastDot + 1);

+

+        var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null;

+        var parentObj = prepareNamespace(namespace, context);

+        var target = parentObj[lastName];

+

+        if (strategy == 'm' && target) {

+            builder.recursiveMerge(target, module);

+        } else if ((strategy == 'd' && !target) || (strategy != 'd')) {

+            if (!(symbolPath in origSymbols)) {

+                origSymbols[symbolPath] = target;

+            }

+            builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg);

+        }

+    }

+};

+

+exports.getOriginalSymbol = function(context, symbolPath) {

+    var origSymbols = context.CDV_origSymbols;

+    if (origSymbols && (symbolPath in origSymbols)) {

+        return origSymbols[symbolPath];

+    }

+    var parts = symbolPath.split('.');

+    var obj = context;

+    for (var i = 0; i < parts.length; ++i) {

+        obj = obj && obj[parts[i]];

+    }

+    return obj;

+};

+

+exports.reset();

+

+

+});

+

+// file: /Users/steveng/repo/cordova/cordova-wp8/cordova-js-src/platform.js

 define("cordova/platform", function(require, exports, module) {

 

 module.exports = {

@@ -1379,6 +1490,54 @@
 

 });

 

+// file: src/common/pluginloader_b.js

+define("cordova/pluginloader_b", function(require, exports, module) {

+

+var modulemapper = require('cordova/modulemapper');

+

+// Handler for the cordova_plugins.js content.

+// See plugman's plugin_loader.js for the details of this object.

+function handlePluginsObject(moduleList) {

+    // if moduleList is not defined or empty, we've nothing to do

+    if (!moduleList || !moduleList.length) {

+        return;

+    }

+

+    // Loop through all the modules and then through their clobbers and merges.

+    for (var i = 0, module; module = moduleList[i]; i++) {

+        if (module.clobbers && module.clobbers.length) {

+            for (var j = 0; j < module.clobbers.length; j++) {

+                modulemapper.clobbers(module.id, module.clobbers[j]);

+            }

+        }

+

+        if (module.merges && module.merges.length) {

+            for (var k = 0; k < module.merges.length; k++) {

+                modulemapper.merges(module.id, module.merges[k]);

+            }

+        }

+

+        // Finally, if runs is truthy we want to simply require() the module.

+        if (module.runs) {

+            modulemapper.runs(module.id);

+        }

+    }

+}

+

+// Loads all plugins' js-modules. Plugin loading is syncronous in browserified bundle

+// but the method accepts callback to be compatible with non-browserify flow.

+// onDeviceReady is blocked on onPluginsReady. onPluginsReady is fired when there are

+// no plugins to load, or they are all done.

+exports.load = function(callback) {

+    var moduleList = require("cordova/plugin_list");

+    handlePluginsObject(moduleList);

+

+    callback();

+};

+

+

+});

+

 // file: src/common/urlutil.js

 define("cordova/urlutil", function(require, exports, module) {

 

@@ -1458,15 +1617,14 @@
 /**

  * Returns an indication of whether the argument is an array or not

  */

-utils.isArray = function(a) {

-    return utils.typeName(a) == 'Array';

-};

+utils.isArray = Array.isArray ||

+                function(a) {return utils.typeName(a) == 'Array';};

 

 /**

  * Returns an indication of whether the argument is a Date or not

  */

 utils.isDate = function(d) {

-    return utils.typeName(d) == 'Date';

+    return (d instanceof Date);

 };

 

 /**

@@ -1500,17 +1658,25 @@
  * Returns a wrapped version of the function

  */

 utils.close = function(context, func, params) {

-    if (typeof params == 'undefined') {

-        return function() {

-            return func.apply(context, arguments);

-        };

-    } else {

-        return function() {

-            return func.apply(context, params);

-        };

-    }

+    return function() {

+        var args = params || arguments;

+        return func.apply(context, args);

+    };

 };

 

+//------------------------------------------------------------------------------

+function UUIDcreatePart(length) {

+    var uuidpart = "";

+    for (var i=0; i<length; i++) {

+        var uuidchar = parseInt((Math.random() * 256), 10).toString(16);

+        if (uuidchar.length == 1) {

+            uuidchar = "0" + uuidchar;

+        }

+        uuidpart += uuidchar;

+    }

+    return uuidpart;

+}

+

 /**

  * Create a UUID

  */

@@ -1522,6 +1688,7 @@
         UUIDcreatePart(6);

 };

 

+

 /**

  * Extends a child object from a parent object using classical inheritance

  * pattern.

@@ -1531,6 +1698,7 @@
     var F = function() {};

     // extend Child from Parent

     return function(Child, Parent) {

+

         F.prototype = Parent.prototype;

         Child.prototype = new F();

         Child.__super__ = Parent.prototype;

@@ -1550,18 +1718,7 @@
 };

 

 

-//------------------------------------------------------------------------------

-function UUIDcreatePart(length) {

-    var uuidpart = "";

-    for (var i=0; i<length; i++) {

-        var uuidchar = parseInt((Math.random() * 256), 10).toString(16);

-        if (uuidchar.length == 1) {

-            uuidchar = "0" + uuidchar;

-        }

-        uuidpart += uuidchar;

-    }

-    return uuidpart;

-}

+

 

 

 });