Add navigator.connection and deprecate navigator.network.connection. Fixes issue: https://issues.apache.org/jira/browse/CB-1368
This involved: - Adding a util for creating a property getter (Android 2.1 doesn't support Object.defineProperty) - Adding a way to deprecate a namespace via builder.js (and deprecating navigator.network with it - Subclassing Navigator so that properties can be set on it. Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/commit/0982d4d3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/tree/0982d4d3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/diff/0982d4d3 Branch: refs/heads/master Commit: 0982d4d3e98f4a7b60261b645af1ca36bbef336e Parents: 9878d97 Author: Andrew Grieve <agri...@chromium.org> Authored: Wed Sep 5 16:33:41 2012 -0400 Committer: Andrew Grieve <agri...@chromium.org> Committed: Tue Sep 18 10:46:47 2012 -0400 ---------------------------------------------------------------------- lib/common/builder.js | 17 ++++++++++++++--- lib/common/common.js | 6 +++++- lib/common/utils.js | 11 +++++++++++ lib/scripts/bootstrap.js | 8 ++++++++ 4 files changed, 38 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/0982d4d3/lib/common/builder.js ---------------------------------------------------------------------- diff --git a/lib/common/builder.js b/lib/common/builder.js index 76386f0..13d1815 100644 --- a/lib/common/builder.js +++ b/lib/common/builder.js @@ -29,6 +29,17 @@ function each(objects, func, context) { } } +function assignOrWrapInDeprecateGetter(obj, key, value, message) { + if (message) { + utils.defineGetter(obj, key, function() { + window.console && console.log(message); + return value; + }); + } else { + obj[key] = value; + } +} + function include(parent, objects, clobber, merge) { each(objects, function (obj, key) { try { @@ -37,20 +48,20 @@ function include(parent, objects, clobber, merge) { if (clobber) { // Clobber if it doesn't exist. if (typeof parent[key] === 'undefined') { - parent[key] = result; + assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); } else if (typeof obj.path !== 'undefined') { // If merging, merge properties onto parent, otherwise, clobber. if (merge) { recursiveMerge(parent[key], result); } else { - parent[key] = result; + assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); } } result = parent[key]; } else { // Overwrite if not currently defined. if (typeof parent[key] == 'undefined') { - parent[key] = result; + assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated); } else if (merge && typeof obj.path !== 'undefined') { // If merging, merge parent onto result recursiveMerge(result, parent[key]); http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/0982d4d3/lib/common/common.js ---------------------------------------------------------------------- diff --git a/lib/common/common.js b/lib/common/common.js index 7aa837e..fce0a73 100644 --- a/lib/common/common.js +++ b/lib/common/common.js @@ -56,6 +56,9 @@ module.exports = { compass:{ path: 'cordova/plugin/compass' }, + connection: { + path: 'cordova/plugin/network' + }, contacts: { path: 'cordova/plugin/contacts' }, @@ -72,7 +75,8 @@ module.exports = { network: { children: { connection: { - path: 'cordova/plugin/network' + path: 'cordova/plugin/network', + deprecated: 'navigator.network.connection is deprecated. Use navigator.connection instead.' } } }, http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/0982d4d3/lib/common/utils.js ---------------------------------------------------------------------- diff --git a/lib/common/utils.js b/lib/common/utils.js index 139d723..5b0ac7c 100644 --- a/lib/common/utils.js +++ b/lib/common/utils.js @@ -22,6 +22,17 @@ var utils = exports; /** + * Defines a property getter for obj[key]. + */ +utils.defineGetter = function(obj, key, func) { + if (Object.defineProperty) { + Object.defineProperty(obj, key, { get: func }); + } else { + obj.__defineGetter__(key, func); + } +}; + +/** * Returns an indication of whether the argument is an array or not */ utils.isArray = function(a) { http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/0982d4d3/lib/scripts/bootstrap.js ---------------------------------------------------------------------- diff --git a/lib/scripts/bootstrap.js b/lib/scripts/bootstrap.js index 4887754..6aa08af 100644 --- a/lib/scripts/bootstrap.js +++ b/lib/scripts/bootstrap.js @@ -20,6 +20,14 @@ */ (function (context) { + // Replace navigator before any modules are required(), to ensure it happens as soon as possible. + // We replace it so that properties that can't be clobbered can instead be overridden. + if (typeof navigator != 'undefined') { + function CordovaNavigator() {} + CordovaNavigator.prototype = navigator; + navigator = new CordovaNavigator(); + } + var channel = require("cordova/channel"), _self = { boot: function () {