You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by de...@apache.org on 2012/04/03 17:55:59 UTC
[2/3] Update javascript to latest cordova-js.
http://git-wip-us.apache.org/repos/asf/incubator-cordova-blackberry-webworks/blob/e1b33e48/javascript/cordova.blackberry.js
----------------------------------------------------------------------
diff --git a/javascript/cordova.blackberry.js b/javascript/cordova.blackberry.js
index ef23e63..b183c79 100644
--- a/javascript/cordova.blackberry.js
+++ b/javascript/cordova.blackberry.js
@@ -16,7 +16,10 @@
specific language governing permissions and limitations
under the License.
*/
-(function() {
+
+;(function() {
+
+// file: lib/scripts/require.js
var require,
define;
@@ -61,217 +64,8 @@ if (typeof module === "object" && typeof require === "function") {
module.exports.define = define;
}
-define('cordova/channel', function(require, exports, module) {
-/**
- * Custom pub-sub channel that can have functions subscribed to it
- * @constructor
- * @param type String the channel name
- * @param opts Object options to pass into the channel, currently
- * supports:
- * onSubscribe: callback that fires when
- * something subscribes to the Channel. Sets
- * context to the Channel.
- * onUnsubscribe: callback that fires when
- * something unsubscribes to the Channel. Sets
- * context to the Channel.
- */
-var Channel = function(type, opts) {
- this.type = type;
- this.handlers = {};
- this.numHandlers = 0;
- this.guid = 0;
- this.fired = false;
- this.enabled = true;
- this.events = {
- onSubscribe:null,
- onUnsubscribe:null
- };
- if (opts) {
- if (opts.onSubscribe) this.events.onSubscribe = opts.onSubscribe;
- if (opts.onUnsubscribe) this.events.onUnsubscribe = opts.onUnsubscribe;
- }
- },
- channel = {
- /**
- * Calls the provided function only after all of the channels specified
- * have been fired.
- */
- join: function (h, c) {
- var i = c.length;
- var len = i;
- var f = function() {
- if (!(--i)) h();
- };
- for (var j=0; j<len; j++) {
- !c[j].fired?c[j].subscribeOnce(f):i--;
- }
- if (!i) h();
- },
- create: function (type, opts) {
- channel[type] = new Channel(type, opts);
- return channel[type];
- },
-
- /**
- * cordova Channels that must fire before "deviceready" is fired.
- */
- deviceReadyChannelsArray: [],
- deviceReadyChannelsMap: {},
-
- /**
- * Indicate that a feature needs to be initialized before it is ready to be used.
- * This holds up Cordova's "deviceready" event until the feature has been initialized
- * and Cordova.initComplete(feature) is called.
- *
- * @param feature {String} The unique feature name
- */
- waitForInitialization: function(feature) {
- if (feature) {
- var c = null;
- if (this[feature]) {
- c = this[feature];
- }
- else {
- c = this.create(feature);
- }
- this.deviceReadyChannelsMap[feature] = c;
- this.deviceReadyChannelsArray.push(c);
- }
- },
-
- /**
- * Indicate that initialization code has completed and the feature is ready to be used.
- *
- * @param feature {String} The unique feature name
- */
- initializationComplete: function(feature) {
- var c = this.deviceReadyChannelsMap[feature];
- if (c) {
- c.fire();
- }
- }
- },
- utils = require('cordova/utils');
-
-/**
- * Subscribes the given function to the channel. Any time that
- * Channel.fire is called so too will the function.
- * Optionally specify an execution context for the function
- * and a guid that can be used to stop subscribing to the channel.
- * Returns the guid.
- */
-Channel.prototype.subscribe = function(f, c, g) {
- // need a function to call
- if (f === null || f === undefined) { return; }
-
- var func = f;
- if (typeof c == "object" && f instanceof Function) { func = utils.close(c, f); }
-
- g = g || func.observer_guid || f.observer_guid || this.guid++;
- func.observer_guid = g;
- f.observer_guid = g;
- this.handlers[g] = func;
- this.numHandlers++;
- if (this.events.onSubscribe) this.events.onSubscribe.call(this);
- return g;
-};
-
-/**
- * Like subscribe but the function is only called once and then it
- * auto-unsubscribes itself.
- */
-Channel.prototype.subscribeOnce = function(f, c) {
- // need a function to call
- if (f === null || f === undefined) { return; }
-
- var g = null;
- var _this = this;
- var m = function() {
- f.apply(c || null, arguments);
- _this.unsubscribe(g);
- };
- if (this.fired) {
- if (typeof c == "object" && f instanceof Function) { f = utils.close(c, f); }
- f.apply(this, this.fireArgs);
- } else {
- g = this.subscribe(m);
- }
- return g;
-};
-
-/**
- * Unsubscribes the function with the given guid from the channel.
- */
-Channel.prototype.unsubscribe = function(g) {
- // need a function to unsubscribe
- if (g === null || g === undefined) { return; }
-
- if (g instanceof Function) { g = g.observer_guid; }
- this.handlers[g] = null;
- delete this.handlers[g];
- this.numHandlers--;
- if (this.events.onUnsubscribe) this.events.onUnsubscribe.call(this);
-};
-
-/**
- * Calls all functions subscribed to this channel.
- */
-Channel.prototype.fire = function(e) {
- if (this.enabled) {
- var fail = false;
- this.fired = true;
- for (var item in this.handlers) {
- var handler = this.handlers[item];
- if (handler instanceof Function) {
- var rv = (handler.apply(this, arguments)===false);
- fail = fail || rv;
- }
- }
- this.fireArgs = arguments;
- return !fail;
- }
- return true;
-};
-
-//HACK: defining them here so they are ready super fast!
-
-// DOM event that is received when the web page is loaded and parsed.
-channel.create('onDOMContentLoaded');
-
-// Event to indicate the Cordova native side is ready.
-channel.create('onNativeReady');
-
-// Event to indicate that all Cordova JavaScript objects have been created
-// and it's time to run plugin constructors.
-channel.create('onCordovaReady');
-
-// Event to indicate that device properties are available
-channel.create('onCordovaInfoReady');
-
-// Event to indicate that the connection property has been set.
-channel.create('onCordovaConnectionReady');
-
-// Event to indicate that Cordova is ready
-channel.create('onDeviceReady');
-
-// Event to indicate a resume lifecycle event
-channel.create('onResume');
-
-// Event to indicate a pause lifecycle event
-channel.create('onPause');
-
-// Event to indicate a destroy lifecycle event
-channel.create('onDestroy');
-
-// Channels that must fire before "deviceready" is fired.
-channel.waitForInitialization('onCordovaReady');
-channel.waitForInitialization('onCordovaInfoReady');
-channel.waitForInitialization('onCordovaConnectionReady');
-
-module.exports = channel;
-
-});
-define('cordova', function(require, exports, module) {
+// file: lib/cordova.js
+define("cordova", function(require, exports, module) {
var channel = require('cordova/channel');
/**
* Intercept calls to addEventListener + removeEventListener and handle deviceready,
@@ -468,8 +262,9 @@ var cordova = {
}
}
},
-
+ // TODO: remove in 2.0.
addPlugin: function(name, obj) {
+ console.log("[DEPRECATION NOTICE] window.addPlugin and window.plugins will be removed in version 2.0.");
if (!window.plugins[name]) {
window.plugins[name] = obj;
}
@@ -491,6 +286,7 @@ var cordova = {
/**
* Legacy variable for plugin support
+ * TODO: remove in 2.0.
*/
if (!window.PhoneGap) {
window.PhoneGap = cordova;
@@ -498,6 +294,7 @@ if (!window.PhoneGap) {
/**
* Plugins object
+ * TODO: remove in 2.0.
*/
if (!window.plugins) {
window.plugins = {};
@@ -505,542 +302,22 @@ if (!window.plugins) {
module.exports = cordova;
-});
-define('cordova/exec', function(require, exports, module) {
-/**
- * Execute a cordova command. It is up to the native side whether this action
- * is synchronous or asynchronous. The native side can return:
- * Synchronous: PluginResult object as a JSON string
- * Asynchrounous: Empty string ""
- * If async, the native side will cordova.callbackSuccess or cordova.callbackError,
- * depending upon the result of the action.
- *
- * @param {Function} success The success callback
- * @param {Function} fail The fail callback
- * @param {String} service The name of the service to use
- * @param {String} action Action to be run in cordova
- * @param {String[]} [args] Zero or more arguments to pass to the method
- */
-var blackberry = require('cordova/plugin/blackberry/manager'),
- cordova = require('cordova');
-
-module.exports = function(success, fail, service, action, args) {
- try {
- var v = blackberry.exec(success, fail, service, action, args);
+})
- // If status is OK, then return value back to caller
- if (v.status == cordova.callbackStatus.OK) {
+// file: lib/common/builder.js
+define("cordova/builder", function(require, exports, module) {
+function each(objects, func, context) {
+ for (var prop in objects) {
+ if (objects.hasOwnProperty(prop)) {
+ func.apply(context, [objects[prop], prop]);
+ }
+ }
+}
- // If there is a success callback, then call it now with returned value
- if (success) {
- try {
- success(v.message);
- }
- catch (e) {
- console.log("Error in success callback: "+ service + "." + action + " = "+e);
- }
-
- }
- return v.message;
- } else if (v.status == cordova.callbackStatus.NO_RESULT) {
-
- } else {
- // If error, then display error
- console.log("Error: " + service + "." + action + " Status="+v.status+" Message="+v.message);
-
- // If there is a fail callback, then call it now with returned value
- if (fail) {
- try {
- fail(v.message);
- }
- catch (e) {
- console.log("Error in error callback: " + service + "." + action + " = "+e);
- }
- }
- return null;
- }
- } catch (e) {
- alert("Error: "+e);
- }
-};
-
-});
-define('cordova/common', function(require, exports, module) {
-module.exports = {
- objects: {
- cordova: {
- path: 'cordova',
- children: {
- exec: {
- path: 'cordova/exec'
- }
- }
- },
- navigator: {
- children: {
- notification: {
- path: 'cordova/plugin/notification'
- },
- accelerometer: {
- path: 'cordova/plugin/accelerometer'
- },
- battery: {
- path: 'cordova/plugin/battery'
- },
- camera:{
- path: 'cordova/plugin/Camera'
- },
- compass:{
- path: 'cordova/plugin/compass'
- },
- contacts: {
- path: 'cordova/plugin/contacts'
- },
- device:{
- children:{
- capture: {
- path: 'cordova/plugin/capture'
- }
- }
- },
- geolocation: {
- path: 'cordova/plugin/geolocation'
- },
- network: {
- children: {
- connection: {
- path: 'cordova/plugin/network'
- }
- }
- }
- }
- },
- Acceleration: {
- path: 'cordova/plugin/Acceleration'
- },
- Camera:{
- path: 'cordova/plugin/CameraConstants'
- },
- CaptureError: {
- path: 'cordova/plugin/CaptureError'
- },
- CaptureAudioOptions:{
- path: 'cordova/plugin/CaptureAudioOptions'
- },
- CaptureImageOptions: {
- path: 'cordova/plugin/CaptureImageOptions'
- },
- CaptureVideoOptions: {
- path: 'cordova/plugin/CaptureVideoOptions'
- },
- CompassHeading:{
- path: 'cordova/plugin/CompassHeading'
- },
- CompassError:{
- path: 'cordova/plugin/CompassError'
- },
- ConfigurationData: {
- path: 'cordova/plugin/ConfigurationData'
- },
- Connection: {
- path: 'cordova/plugin/Connection'
- },
- Contact: {
- path: 'cordova/plugin/Contact'
- },
- ContactAddress: {
- path: 'cordova/plugin/ContactAddress'
- },
- ContactError: {
- path: 'cordova/plugin/ContactError'
- },
- ContactField: {
- path: 'cordova/plugin/ContactField'
- },
- ContactFindOptions: {
- path: 'cordova/plugin/ContactFindOptions'
- },
- ContactName: {
- path: 'cordova/plugin/ContactName'
- },
- ContactOrganization: {
- path: 'cordova/plugin/ContactOrganization'
- },
- Coordinates: {
- path: 'cordova/plugin/Coordinates'
- },
- DirectoryEntry: {
- path: 'cordova/plugin/DirectoryEntry'
- },
- DirectoryReader: {
- path: 'cordova/plugin/DirectoryReader'
- },
- Entry: {
- path: 'cordova/plugin/Entry'
- },
- File: {
- path: 'cordova/plugin/File'
- },
- FileEntry: {
- path: 'cordova/plugin/FileEntry'
- },
- FileError: {
- path: 'cordova/plugin/FileError'
- },
- FileReader: {
- path: 'cordova/plugin/FileReader'
- },
- FileSystem: {
- path: 'cordova/plugin/FileSystem'
- },
- FileTransfer: {
- path: 'cordova/plugin/FileTransfer'
- },
- FileTransferError: {
- path: 'cordova/plugin/FileTransferError'
- },
- FileUploadOptions: {
- path: 'cordova/plugin/FileUploadOptions'
- },
- FileUploadResult: {
- path: 'cordova/plugin/FileUploadResult'
- },
- FileWriter: {
- path: 'cordova/plugin/FileWriter'
- },
- Flags: {
- path: 'cordova/plugin/Flags'
- },
- LocalFileSystem: {
- path: 'cordova/plugin/LocalFileSystem'
- },
- Media: {
- path: 'cordova/plugin/Media'
- },
- MediaError: {
- path: 'cordova/plugin/MediaError'
- },
- MediaFile: {
- path: 'cordova/plugin/MediaFile'
- },
- MediaFileData:{
- path: 'cordova/plugin/MediaFileData'
- },
- Metadata:{
- path: 'cordova/plugin/Metadata'
- },
- Position: {
- path: 'cordova/plugin/Position'
- },
- PositionError: {
- path: 'cordova/plugin/PositionError'
- },
- ProgressEvent: {
- path: 'cordova/plugin/ProgressEvent'
- },
- requestFileSystem:{
- path: 'cordova/plugin/requestFileSystem'
- },
- resolveLocalFileSystemURI:{
- path: 'cordova/plugin/resolveLocalFileSystemURI'
- }
- }
-};
-
-});
-define('cordova/platform', function(require, exports, module) {
-module.exports = {
- id: "blackberry",
- initialize:function() {
- var cordova = require('cordova'),
- exec = require('cordova/exec'),
- channel = require('cordova/channel'),
- blackberryManager = require('cordova/plugin/blackberry/manager'),
- app = require('cordova/plugin/blackberry/app');
-
- // BB OS 5 does not define window.console.
- if (typeof window.console === 'undefined') {
- window.console = {};
- }
-
- // Override console.log with native logging ability.
- // BB OS 7 devices define console.log for use with web inspector
- // debugging. If console.log is already defined, invoke it in addition
- // to native logging.
- var origLog = window.console.log;
- window.console.log = function(msg) {
- if (typeof origLog === 'function') {
- origLog.call(window.console, msg);
- }
- org.apache.cordova.Logger.log(''+msg);
- };
-
- // Mapping of button events to BlackBerry key identifier.
- var buttonMapping = {
- 'backbutton' : blackberry.system.event.KEY_BACK,
- 'conveniencebutton1' : blackberry.system.event.KEY_CONVENIENCE_1,
- 'conveniencebutton2' : blackberry.system.event.KEY_CONVENIENCE_2,
- 'endcallbutton' : blackberry.system.event.KEY_ENDCALL,
- 'menubutton' : blackberry.system.event.KEY_MENU,
- 'startcallbutton' : blackberry.system.event.KEY_STARTCALL,
- 'volumedownbutton' : blackberry.system.event.KEY_VOLUMEDOWN,
- 'volumeupbutton' : blackberry.system.event.KEY_VOLUMEUP
- };
-
- // Generates a function which fires the specified event.
- var fireEvent = function(event) {
- return function() {
- cordova.fireDocumentEvent(event, null);
- };
- };
-
- var eventHandler = function(event) {
- return { onSubscribe : function() {
- // If we just attached the first handler, let native know we
- // need to override the back button.
- if (this.numHandlers === 1) {
- blackberry.system.event.onHardwareKey(
- buttonMapping[event], fireEvent(event));
- }
- },
- onUnsubscribe : function() {
- // If we just detached the last handler, let native know we
- // no longer override the back button.
- if (this.numHandlers === 0) {
- blackberry.system.event.onHardwareKey(
- buttonMapping[event], null);
- }
- }};
- };
-
- // Inject listeners for buttons on the document.
- for (var button in buttonMapping) {
- if (buttonMapping.hasOwnProperty(button)) {
- cordova.addDocumentEventHandler(button, eventHandler(button));
- }
- }
-
- // Fires off necessary code to pause/resume app
- var resume = function() {
- cordova.fireDocumentEvent('resume');
- blackberryManager.resume();
- };
- var pause = function() {
- cordova.fireDocumentEvent('pause');
- blackberryManager.pause();
- };
-
- /************************************************
- * Patch up the generic pause/resume listeners. *
- ************************************************/
-
- // Unsubscribe handler - turns off native backlight change
- // listener
- var onUnsubscribe = function() {
- if (channel.onResume.numHandlers === 0 && channel.onPause.numHandlers === 0) {
- exec(null, null, 'App', 'ignoreBacklight', []);
- }
- };
-
- // Native backlight detection win/fail callbacks
- var backlightWin = function(isOn) {
- if (isOn === true) {
- resume();
- } else {
- pause();
- }
- };
- var backlightFail = function(e) {
- console.log("Error detecting backlight on/off.");
- };
-
- // Override stock resume and pause listeners so we can trigger
- // some native methods during attach/remove
- channel.onResume = cordova.addDocumentEventHandler('resume', {
- onSubscribe:function() {
- // If we just attached the first handler and there are
- // no pause handlers, start the backlight system
- // listener on the native side.
- if (channel.onResume.numHandlers === 1 && channel.onPause.numHandlers === 0) {
- exec(backlightWin, backlightFail, "App", "detectBacklight", []);
- }
- },
- onUnsubscribe:onUnsubscribe
- });
- channel.onPause = cordova.addDocumentEventHandler('pause', {
- onSubscribe:function() {
- // If we just attached the first handler and there are
- // no resume handlers, start the backlight system
- // listener on the native side.
- if (channel.onResume.numHandlers === 0 && channel.onPause.numHandlers === 1) {
- exec(backlightWin, backlightFail, "App", "detectBacklight", []);
- }
- },
- onUnsubscribe:onUnsubscribe
- });
-
- // Fire resume event when application brought to foreground.
- blackberry.app.event.onForeground(resume);
-
- // Fire pause event when application sent to background.
- blackberry.app.event.onBackground(pause);
-
- // Trap BlackBerry WebWorks exit. Allow plugins to clean up before exiting.
- blackberry.app.event.onExit(app.exitApp);
- },
- objects: {
- navigator: {
- children: {
- app: {
- path: "cordova/plugin/blackberry/app"
- }
- }
- },
- device: {
- path: "cordova/plugin/blackberry/device"
- },
- File: { // exists natively on BlackBerry OS 7, override
- path: "cordova/plugin/File"
- }
- },
- merges: {
- navigator: {
- children: {
- contacts: {
- path: 'cordova/plugin/blackberry/contacts'
- },
- device: {
- path: 'cordova/plugin/blackberry/device'
- },
- notification: {
- path: 'cordova/plugin/blackberry/notification'
- }
- }
- },
- Contact: {
- path: 'cordova/plugin/blackberry/Contact'
- },
- DirectoryEntry: {
- path: 'cordova/plugin/blackberry/DirectoryEntry'
- },
- Entry: {
- path: 'cordova/plugin/blackberry/Entry'
- }
- }
-};
-
-});
-define('cordova/utils', function(require, exports, module) {
-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;
-}
-
-var _self = {
- /**
- * Does a deep clone of the object.
- */
- clone: function(obj) {
- if(!obj) {
- return obj;
- }
-
- var retVal, i;
-
- if(obj instanceof Array){
- retVal = [];
- for(i = 0; i < obj.length; ++i){
- retVal.push(_self.clone(obj[i]));
- }
- return retVal;
- }
-
- if (obj instanceof Function) {
- return obj;
- }
-
- if(!(obj instanceof Object)){
- return obj;
- }
-
- if(obj instanceof Date){
- return obj;
- }
-
- retVal = {};
- for(i in obj){
- if(!(i in retVal) || retVal[i] != obj[i]) {
- retVal[i] = _self.clone(obj[i]);
- }
- }
- return retVal;
- },
-
- close: function(context, func, params) {
- if (typeof params === 'undefined') {
- return function() {
- return func.apply(context, arguments);
- };
- } else {
- return function() {
- return func.apply(context, params);
- };
- }
- },
-
- /**
- * Create a UUID
- */
- createUUID: function() {
- return UUIDcreatePart(4) + '-' +
- UUIDcreatePart(2) + '-' +
- UUIDcreatePart(2) + '-' +
- UUIDcreatePart(2) + '-' +
- UUIDcreatePart(6);
- },
-
- /**
- * Extends a child object from a parent object using classical inheritance
- * pattern.
- */
- extend: (function() {
- // proxy used to establish prototype chain
- var F = function() {};
- // extend Child from Parent
- return function(Child, Parent) {
- F.prototype = Parent.prototype;
- Child.prototype = new F();
- Child.__super__ = Parent.prototype;
- Child.prototype.constructor = Child;
- };
- }())
-
-};
-
-module.exports = _self;
-
-});
-
-define('cordova/builder', function(require, exports, module) {
-function each(objects, func, context) {
- for (var prop in objects) {
- if (objects.hasOwnProperty(prop)) {
- func.apply(context, [objects[prop], prop]);
- }
- }
-}
-
-function include(parent, objects, clobber, merge) {
- each(objects, function (obj, key) {
- try {
- var result = obj.path ? require(obj.path) : {};
+function include(parent, objects, clobber, merge) {
+ each(objects, function (obj, key) {
+ try {
+ var result = obj.path ? require(obj.path) : {};
if (clobber) {
// Clobber if it doesn't exist.
@@ -1073,7 +350,7 @@ function include(parent, objects, clobber, merge) {
include(result, obj.children, clobber, merge);
}
} catch(e) {
- alert('Exception building cordova JS globals: ' + e + ' for key "' + key + '"');
+ utils.alert('Exception building cordova JS globals: ' + e + ' for key "' + key + '"');
}
});
}
@@ -1116,213 +393,666 @@ module.exports = {
}
};
-});
+})
+
+// file: lib/common/channel.js
+define("cordova/channel", function(require, exports, module) {
+/**
+ * Custom pub-sub channel that can have functions subscribed to it
+ * @constructor
+ * @param type String the channel name
+ * @param opts Object options to pass into the channel, currently
+ * supports:
+ * onSubscribe: callback that fires when
+ * something subscribes to the Channel. Sets
+ * context to the Channel.
+ * onUnsubscribe: callback that fires when
+ * something unsubscribes to the Channel. Sets
+ * context to the Channel.
+ */
+var Channel = function(type, opts) {
+ this.type = type;
+ this.handlers = {};
+ this.numHandlers = 0;
+ this.guid = 0;
+ this.fired = false;
+ this.enabled = true;
+ this.events = {
+ onSubscribe:null,
+ onUnsubscribe:null
+ };
+ if (opts) {
+ if (opts.onSubscribe) this.events.onSubscribe = opts.onSubscribe;
+ if (opts.onUnsubscribe) this.events.onUnsubscribe = opts.onUnsubscribe;
+ }
+ },
+ channel = {
+ /**
+ * Calls the provided function only after all of the channels specified
+ * have been fired.
+ */
+ join: function (h, c) {
+ var i = c.length;
+ var len = i;
+ var f = function() {
+ if (!(--i)) h();
+ };
+ for (var j=0; j<len; j++) {
+ !c[j].fired?c[j].subscribeOnce(f):i--;
+ }
+ if (!i) h();
+ },
+ create: function (type, opts) {
+ channel[type] = new Channel(type, opts);
+ return channel[type];
+ },
+
+ /**
+ * cordova Channels that must fire before "deviceready" is fired.
+ */
+ deviceReadyChannelsArray: [],
+ deviceReadyChannelsMap: {},
+
+ /**
+ * Indicate that a feature needs to be initialized before it is ready to be used.
+ * This holds up Cordova's "deviceready" event until the feature has been initialized
+ * and Cordova.initComplete(feature) is called.
+ *
+ * @param feature {String} The unique feature name
+ */
+ waitForInitialization: function(feature) {
+ if (feature) {
+ var c = null;
+ if (this[feature]) {
+ c = this[feature];
+ }
+ else {
+ c = this.create(feature);
+ }
+ this.deviceReadyChannelsMap[feature] = c;
+ this.deviceReadyChannelsArray.push(c);
+ }
+ },
+
+ /**
+ * Indicate that initialization code has completed and the feature is ready to be used.
+ *
+ * @param feature {String} The unique feature name
+ */
+ initializationComplete: function(feature) {
+ var c = this.deviceReadyChannelsMap[feature];
+ if (c) {
+ c.fire();
+ }
+ }
+ },
+ utils = require('cordova/utils');
+
+/**
+ * Subscribes the given function to the channel. Any time that
+ * Channel.fire is called so too will the function.
+ * Optionally specify an execution context for the function
+ * and a guid that can be used to stop subscribing to the channel.
+ * Returns the guid.
+ */
+Channel.prototype.subscribe = function(f, c, g) {
+ // need a function to call
+ if (f === null || f === undefined) { return; }
+
+ var func = f;
+ if (typeof c == "object" && f instanceof Function) { func = utils.close(c, f); }
+
+ g = g || func.observer_guid || f.observer_guid || this.guid++;
+ func.observer_guid = g;
+ f.observer_guid = g;
+ this.handlers[g] = func;
+ this.numHandlers++;
+ if (this.events.onSubscribe) this.events.onSubscribe.call(this);
+ return g;
+};
+
+/**
+ * Like subscribe but the function is only called once and then it
+ * auto-unsubscribes itself.
+ */
+Channel.prototype.subscribeOnce = function(f, c) {
+ // need a function to call
+ if (f === null || f === undefined) { return; }
+
+ var g = null;
+ var _this = this;
+ var m = function() {
+ f.apply(c || null, arguments);
+ _this.unsubscribe(g);
+ };
+ if (this.fired) {
+ if (typeof c == "object" && f instanceof Function) { f = utils.close(c, f); }
+ f.apply(this, this.fireArgs);
+ } else {
+ g = this.subscribe(m);
+ }
+ return g;
+};
+
+/**
+ * Unsubscribes the function with the given guid from the channel.
+ */
+Channel.prototype.unsubscribe = function(g) {
+ // need a function to unsubscribe
+ if (g === null || g === undefined) { return; }
+
+ if (g instanceof Function) { g = g.observer_guid; }
+ this.handlers[g] = null;
+ delete this.handlers[g];
+ this.numHandlers--;
+ if (this.events.onUnsubscribe) this.events.onUnsubscribe.call(this);
+};
+
+/**
+ * Calls all functions subscribed to this channel.
+ */
+Channel.prototype.fire = function(e) {
+ if (this.enabled) {
+ var fail = false;
+ this.fired = true;
+ for (var item in this.handlers) {
+ var handler = this.handlers[item];
+ if (handler instanceof Function) {
+ var rv = (handler.apply(this, arguments)===false);
+ fail = fail || rv;
+ }
+ }
+ this.fireArgs = arguments;
+ return !fail;
+ }
+ return true;
+};
+
+//HACK: defining them here so they are ready super fast!
+
+// DOM event that is received when the web page is loaded and parsed.
+channel.create('onDOMContentLoaded');
+
+// Event to indicate the Cordova native side is ready.
+channel.create('onNativeReady');
+
+// Event to indicate that all Cordova JavaScript objects have been created
+// and it's time to run plugin constructors.
+channel.create('onCordovaReady');
-define('cordova/plugin/Acceleration', function(require, exports, module) {
-var Acceleration = function(x, y, z) {
- this.x = x;
- this.y = y;
- this.z = z;
- this.timestamp = new Date().getTime();
-};
+// Event to indicate that device properties are available
+channel.create('onCordovaInfoReady');
-module.exports = Acceleration;
+// Event to indicate that the connection property has been set.
+channel.create('onCordovaConnectionReady');
-});
+// Event to indicate that Cordova is ready
+channel.create('onDeviceReady');
-define('cordova/plugin/accelerometer', function(require, exports, module) {
-/**
- * This class provides access to device accelerometer data.
- * @constructor
- */
-var utils = require("cordova/utils"),
- exec = require("cordova/exec");
+// Event to indicate a resume lifecycle event
+channel.create('onResume');
-// Local singleton variables.
-var timers = {};
+// Event to indicate a pause lifecycle event
+channel.create('onPause');
-var accelerometer = {
- /**
- * Asynchronously aquires the current acceleration.
- *
- * @param {Function} successCallback The function to call when the acceleration data is available
- * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL)
- * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL)
- */
- getCurrentAcceleration: function(successCallback, errorCallback, options) {
+// Event to indicate a destroy lifecycle event
+channel.create('onDestroy');
- // successCallback required
- if (typeof successCallback !== "function") {
- console.log("Accelerometer Error: successCallback is not a function");
- return;
- }
+// Channels that must fire before "deviceready" is fired.
+channel.waitForInitialization('onCordovaReady');
+channel.waitForInitialization('onCordovaInfoReady');
+channel.waitForInitialization('onCordovaConnectionReady');
- // errorCallback optional
- if (errorCallback && (typeof errorCallback !== "function")) {
- console.log("Accelerometer Error: errorCallback is not a function");
- return;
- }
+module.exports = channel;
- // Get acceleration
- exec(successCallback, errorCallback, "Accelerometer", "getAcceleration", []);
- },
+})
- /**
- * Asynchronously aquires the acceleration repeatedly at a given interval.
- *
- * @param {Function} successCallback The function to call each time the acceleration data is available
- * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL)
- * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL)
- * @return String The watch id that must be passed to #clearWatch to stop watching.
- */
- watchAcceleration: function(successCallback, errorCallback, options) {
+// file: lib/common/common.js
+define("cordova/common", function(require, exports, module) {
+module.exports = {
+ objects: {
+ cordova: {
+ path: 'cordova',
+ children: {
+ exec: {
+ path: 'cordova/exec'
+ }
+ }
+ },
+ navigator: {
+ children: {
+ notification: {
+ path: 'cordova/plugin/notification'
+ },
+ accelerometer: {
+ path: 'cordova/plugin/accelerometer'
+ },
+ battery: {
+ path: 'cordova/plugin/battery'
+ },
+ camera:{
+ path: 'cordova/plugin/Camera'
+ },
+ compass:{
+ path: 'cordova/plugin/compass'
+ },
+ contacts: {
+ path: 'cordova/plugin/contacts'
+ },
+ device:{
+ children:{
+ capture: {
+ path: 'cordova/plugin/capture'
+ }
+ }
+ },
+ geolocation: {
+ path: 'cordova/plugin/geolocation'
+ },
+ network: {
+ children: {
+ connection: {
+ path: 'cordova/plugin/network'
+ }
+ }
+ }
+ }
+ },
+ Acceleration: {
+ path: 'cordova/plugin/Acceleration'
+ },
+ Camera:{
+ path: 'cordova/plugin/CameraConstants'
+ },
+ CaptureError: {
+ path: 'cordova/plugin/CaptureError'
+ },
+ CaptureAudioOptions:{
+ path: 'cordova/plugin/CaptureAudioOptions'
+ },
+ CaptureImageOptions: {
+ path: 'cordova/plugin/CaptureImageOptions'
+ },
+ CaptureVideoOptions: {
+ path: 'cordova/plugin/CaptureVideoOptions'
+ },
+ CompassHeading:{
+ path: 'cordova/plugin/CompassHeading'
+ },
+ CompassError:{
+ path: 'cordova/plugin/CompassError'
+ },
+ ConfigurationData: {
+ path: 'cordova/plugin/ConfigurationData'
+ },
+ Connection: {
+ path: 'cordova/plugin/Connection'
+ },
+ Contact: {
+ path: 'cordova/plugin/Contact'
+ },
+ ContactAddress: {
+ path: 'cordova/plugin/ContactAddress'
+ },
+ ContactError: {
+ path: 'cordova/plugin/ContactError'
+ },
+ ContactField: {
+ path: 'cordova/plugin/ContactField'
+ },
+ ContactFindOptions: {
+ path: 'cordova/plugin/ContactFindOptions'
+ },
+ ContactName: {
+ path: 'cordova/plugin/ContactName'
+ },
+ ContactOrganization: {
+ path: 'cordova/plugin/ContactOrganization'
+ },
+ Coordinates: {
+ path: 'cordova/plugin/Coordinates'
+ },
+ DirectoryEntry: {
+ path: 'cordova/plugin/DirectoryEntry'
+ },
+ DirectoryReader: {
+ path: 'cordova/plugin/DirectoryReader'
+ },
+ Entry: {
+ path: 'cordova/plugin/Entry'
+ },
+ File: {
+ path: 'cordova/plugin/File'
+ },
+ FileEntry: {
+ path: 'cordova/plugin/FileEntry'
+ },
+ FileError: {
+ path: 'cordova/plugin/FileError'
+ },
+ FileReader: {
+ path: 'cordova/plugin/FileReader'
+ },
+ FileSystem: {
+ path: 'cordova/plugin/FileSystem'
+ },
+ FileTransfer: {
+ path: 'cordova/plugin/FileTransfer'
+ },
+ FileTransferError: {
+ path: 'cordova/plugin/FileTransferError'
+ },
+ FileUploadOptions: {
+ path: 'cordova/plugin/FileUploadOptions'
+ },
+ FileUploadResult: {
+ path: 'cordova/plugin/FileUploadResult'
+ },
+ FileWriter: {
+ path: 'cordova/plugin/FileWriter'
+ },
+ Flags: {
+ path: 'cordova/plugin/Flags'
+ },
+ LocalFileSystem: {
+ path: 'cordova/plugin/LocalFileSystem'
+ },
+ Media: {
+ path: 'cordova/plugin/Media'
+ },
+ MediaError: {
+ path: 'cordova/plugin/MediaError'
+ },
+ MediaFile: {
+ path: 'cordova/plugin/MediaFile'
+ },
+ MediaFileData:{
+ path: 'cordova/plugin/MediaFileData'
+ },
+ Metadata:{
+ path: 'cordova/plugin/Metadata'
+ },
+ Position: {
+ path: 'cordova/plugin/Position'
+ },
+ PositionError: {
+ path: 'cordova/plugin/PositionError'
+ },
+ ProgressEvent: {
+ path: 'cordova/plugin/ProgressEvent'
+ },
+ requestFileSystem:{
+ path: 'cordova/plugin/requestFileSystem'
+ },
+ resolveLocalFileSystemURI:{
+ path: 'cordova/plugin/resolveLocalFileSystemURI'
+ }
+ }
+};
- // Default interval (10 sec)
- var frequency = (options !== undefined && options.frequency !== undefined)? options.frequency : 10000;
+})
+
+// file: lib/blackberry/exec.js
+define("cordova/exec", function(require, exports, module) {
+/**
+ * Execute a cordova command. It is up to the native side whether this action
+ * is synchronous or asynchronous. The native side can return:
+ * Synchronous: PluginResult object as a JSON string
+ * Asynchrounous: Empty string ""
+ * If async, the native side will cordova.callbackSuccess or cordova.callbackError,
+ * depending upon the result of the action.
+ *
+ * @param {Function} success The success callback
+ * @param {Function} fail The fail callback
+ * @param {String} service The name of the service to use
+ * @param {String} action Action to be run in cordova
+ * @param {String[]} [args] Zero or more arguments to pass to the method
+ */
+var blackberry = require('cordova/plugin/blackberry/manager'),
+ cordova = require('cordova'),
+ utils = require('cordova/utils');
- // successCallback required
- if (typeof successCallback !== "function") {
- console.log("Accelerometer Error: successCallback is not a function");
- return;
- }
+module.exports = function(success, fail, service, action, args) {
+ try {
+ var v = blackberry.exec(success, fail, service, action, args);
- // errorCallback optional
- if (errorCallback && (typeof errorCallback !== "function")) {
- console.log("Accelerometer Error: errorCallback is not a function");
- return;
- }
+ // If status is OK, then return value back to caller
+ if (v.status == cordova.callbackStatus.OK) {
- // Make sure accelerometer timeout > frequency + 10 sec
- exec(
- function(timeout) {
- if (timeout < (frequency + 10000)) {
- exec(null, null, "Accelerometer", "setTimeout", [frequency + 10000]);
+ // If there is a success callback, then call it now with returned value
+ if (success) {
+ try {
+ success(v.message);
+ }
+ catch (e) {
+ console.log("Error in success callback: "+ service + "." + action + " = "+e);
}
- },
- function(e) { }, "Accelerometer", "getTimeout", []);
-
- // Start watch timer
- var id = utils.createUUID();
- timers[id] = window.setInterval(function() {
- exec(successCallback, errorCallback, "Accelerometer", "getAcceleration", []);
- }, (frequency ? frequency : 1));
- return id;
- },
+ }
+ return v.message;
+ } else if (v.status == cordova.callbackStatus.NO_RESULT) {
- /**
- * Clears the specified accelerometer watch.
- *
- * @param {String} id The id of the watch returned from #watchAcceleration.
- */
- clearWatch: function(id) {
+ } else {
+ // If error, then display error
+ console.log("Error: " + service + "." + action + " Status="+v.status+" Message="+v.message);
- // Stop javascript timer & remove from timer list
- if (id && timers[id] !== undefined) {
- window.clearInterval(timers[id]);
- delete timers[id];
+ // If there is a fail callback, then call it now with returned value
+ if (fail) {
+ try {
+ fail(v.message);
+ }
+ catch (e) {
+ console.log("Error in error callback: " + service + "." + action + " = "+e);
+ }
+ }
+ return null;
}
+ } catch (e) {
+ utils.alert("Error: "+e);
}
};
-module.exports = accelerometer;
+})
-});
+// file: lib/blackberry/platform.js
+define("cordova/platform", function(require, exports, module) {
+module.exports = {
+ id: "blackberry",
+ initialize:function() {
+ var cordova = require('cordova'),
+ exec = require('cordova/exec'),
+ channel = require('cordova/channel'),
+ blackberryManager = require('cordova/plugin/blackberry/manager'),
+ app = require('cordova/plugin/blackberry/app');
+ // BB OS 5 does not define window.console.
+ if (typeof window.console === 'undefined') {
+ window.console = {};
+ }
-define('cordova/plugin/battery', function(require, exports, module) {
-/**
- * This class contains information about the current battery status.
- * @constructor
- */
-var cordova = require('cordova'),
- exec = require('cordova/exec');
+ // Override console.log with native logging ability.
+ // BB OS 7 devices define console.log for use with web inspector
+ // debugging. If console.log is already defined, invoke it in addition
+ // to native logging.
+ var origLog = window.console.log;
+ window.console.log = function(msg) {
+ if (typeof origLog === 'function') {
+ origLog.call(window.console, msg);
+ }
+ org.apache.cordova.Logger.log(''+msg);
+ };
-function handlers() {
- return battery.channels.batterystatus.numHandlers +
- battery.channels.batterylow.numHandlers +
- battery.channels.batterycritical.numHandlers;
-}
+ // Mapping of button events to BlackBerry key identifier.
+ var buttonMapping = {
+ 'backbutton' : blackberry.system.event.KEY_BACK,
+ 'conveniencebutton1' : blackberry.system.event.KEY_CONVENIENCE_1,
+ 'conveniencebutton2' : blackberry.system.event.KEY_CONVENIENCE_2,
+ 'endcallbutton' : blackberry.system.event.KEY_ENDCALL,
+ 'menubutton' : blackberry.system.event.KEY_MENU,
+ 'startcallbutton' : blackberry.system.event.KEY_STARTCALL,
+ 'volumedownbutton' : blackberry.system.event.KEY_VOLUMEDOWN,
+ 'volumeupbutton' : blackberry.system.event.KEY_VOLUMEUP
+ };
-var Battery = function() {
- this._level = null;
- this._isPlugged = null;
- // Create new event handlers on the window (returns a channel instance)
- var subscriptionEvents = {
- onSubscribe:this.onSubscribe,
- onUnsubscribe:this.onUnsubscribe
- };
- this.channels = {
- batterystatus:cordova.addWindowEventHandler("batterystatus", subscriptionEvents),
- batterylow:cordova.addWindowEventHandler("batterylow", subscriptionEvents),
- batterycritical:cordova.addWindowEventHandler("batterycritical", subscriptionEvents)
- };
-};
-/**
- * Event handlers for when callbacks get registered for the battery.
- * Keep track of how many handlers we have so we can start and stop the native battery listener
- * appropriately (and hopefully save on battery life!).
- */
-Battery.prototype.onSubscribe = function() {
- var me = battery;
- // If we just registered the first handler, make sure native listener is started.
- if (handlers() === 1) {
- exec(me._status, me._error, "Battery", "start", []);
- }
-};
+ // Generates a function which fires the specified event.
+ var fireEvent = function(event) {
+ return function() {
+ cordova.fireDocumentEvent(event, null);
+ };
+ };
-Battery.prototype.onUnsubscribe = function() {
- var me = battery;
+ var eventHandler = function(event) {
+ return { onSubscribe : function() {
+ // If we just attached the first handler, let native know we
+ // need to override the back button.
+ if (this.numHandlers === 1) {
+ blackberry.system.event.onHardwareKey(
+ buttonMapping[event], fireEvent(event));
+ }
+ },
+ onUnsubscribe : function() {
+ // If we just detached the last handler, let native know we
+ // no longer override the back button.
+ if (this.numHandlers === 0) {
+ blackberry.system.event.onHardwareKey(
+ buttonMapping[event], null);
+ }
+ }};
+ };
- // If we just unregistered the last handler, make sure native listener is stopped.
- if (handlers() === 0) {
- exec(null, null, "Battery", "stop", []);
- }
-};
+ // Inject listeners for buttons on the document.
+ for (var button in buttonMapping) {
+ if (buttonMapping.hasOwnProperty(button)) {
+ cordova.addDocumentEventHandler(button, eventHandler(button));
+ }
+ }
-/**
- * Callback for battery status
- *
- * @param {Object} info keys: level, isPlugged
- */
-Battery.prototype._status = function(info) {
- if (info) {
- var me = battery;
- var level = info.level;
- if (me._level !== level || me._isPlugged !== info.isPlugged) {
- // Fire batterystatus event
- cordova.fireWindowEvent("batterystatus", info);
+ // Fires off necessary code to pause/resume app
+ var resume = function() {
+ cordova.fireDocumentEvent('resume');
+ blackberryManager.resume();
+ };
+ var pause = function() {
+ cordova.fireDocumentEvent('pause');
+ blackberryManager.pause();
+ };
+
+ /************************************************
+ * Patch up the generic pause/resume listeners. *
+ ************************************************/
+
+ // Unsubscribe handler - turns off native backlight change
+ // listener
+ var onUnsubscribe = function() {
+ if (channel.onResume.numHandlers === 0 && channel.onPause.numHandlers === 0) {
+ exec(null, null, 'App', 'ignoreBacklight', []);
+ }
+ };
+
+ // Native backlight detection win/fail callbacks
+ var backlightWin = function(isOn) {
+ if (isOn === true) {
+ resume();
+ } else {
+ pause();
+ }
+ };
+ var backlightFail = function(e) {
+ console.log("Error detecting backlight on/off.");
+ };
+
+ // Override stock resume and pause listeners so we can trigger
+ // some native methods during attach/remove
+ channel.onResume = cordova.addDocumentEventHandler('resume', {
+ onSubscribe:function() {
+ // If we just attached the first handler and there are
+ // no pause handlers, start the backlight system
+ // listener on the native side.
+ if (channel.onResume.numHandlers === 1 && channel.onPause.numHandlers === 0) {
+ exec(backlightWin, backlightFail, "App", "detectBacklight", []);
+ }
+ },
+ onUnsubscribe:onUnsubscribe
+ });
+ channel.onPause = cordova.addDocumentEventHandler('pause', {
+ onSubscribe:function() {
+ // If we just attached the first handler and there are
+ // no resume handlers, start the backlight system
+ // listener on the native side.
+ if (channel.onResume.numHandlers === 0 && channel.onPause.numHandlers === 1) {
+ exec(backlightWin, backlightFail, "App", "detectBacklight", []);
+ }
+ },
+ onUnsubscribe:onUnsubscribe
+ });
- // Fire low battery event
- if (level === 20 || level === 5) {
- if (level === 20) {
- cordova.fireWindowEvent("batterylow", info);
- }
- else {
- cordova.fireWindowEvent("batterycritical", info);
- }
- }
- }
- me._level = level;
- me._isPlugged = info.isPlugged;
- }
-};
+ // Fire resume event when application brought to foreground.
+ blackberry.app.event.onForeground(resume);
-/**
- * Error callback for battery start
- */
-Battery.prototype._error = function(e) {
- console.log("Error initializing Battery: " + e);
+ // Fire pause event when application sent to background.
+ blackberry.app.event.onBackground(pause);
+
+ // Trap BlackBerry WebWorks exit. Allow plugins to clean up before exiting.
+ blackberry.app.event.onExit(app.exitApp);
+ },
+ objects: {
+ navigator: {
+ children: {
+ app: {
+ path: "cordova/plugin/blackberry/app"
+ }
+ }
+ },
+ device: {
+ path: "cordova/plugin/blackberry/device"
+ },
+ File: { // exists natively on BlackBerry OS 7, override
+ path: "cordova/plugin/File"
+ }
+ },
+ merges: {
+ navigator: {
+ children: {
+ contacts: {
+ path: 'cordova/plugin/blackberry/contacts'
+ },
+ device: {
+ path: 'cordova/plugin/blackberry/device'
+ },
+ notification: {
+ path: 'cordova/plugin/blackberry/notification'
+ }
+ }
+ },
+ Contact: {
+ path: 'cordova/plugin/blackberry/Contact'
+ },
+ DirectoryEntry: {
+ path: 'cordova/plugin/blackberry/DirectoryEntry'
+ },
+ Entry: {
+ path: 'cordova/plugin/blackberry/Entry'
+ }
+ }
};
-var battery = new Battery();
+})
-module.exports = battery;
+// file: lib/common/plugin/Acceleration.js
+define("cordova/plugin/Acceleration", function(require, exports, module) {
+var Acceleration = function(x, y, z) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.timestamp = new Date().getTime();
+};
-});
+module.exports = Acceleration;
+})
-define('cordova/plugin/Camera', function(require, exports, module) {
+// file: lib/common/plugin/Camera.js
+define("cordova/plugin/Camera", function(require, exports, module) {
var exec = require('cordova/exec'),
Camera = require('cordova/plugin/CameraConstants');
@@ -1408,9 +1138,10 @@ cameraExport.getPicture = function(successCallback, errorCallback, options) {
module.exports = cameraExport;
-});
+})
-define('cordova/plugin/CameraConstants', function(require, exports, module) {
+// file: lib/common/plugin/CameraConstants.js
+define("cordova/plugin/CameraConstants", function(require, exports, module) {
module.exports = {
DestinationType:{
DATA_URL: 0, // Return base64 encoded string
@@ -1432,251 +1163,86 @@ module.exports = {
}
};
-});
-
-define('cordova/plugin/capture', function(require, exports, module) {
-var exec = require('cordova/exec'),
- MediaFile = require('cordova/plugin/MediaFile');
-
-/**
- * Launches a capture of different types.
- *
- * @param (DOMString} type
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureVideoOptions} options
- */
-function _capture(type, successCallback, errorCallback, options) {
- var win = function(pluginResult) {
- var mediaFiles = [];
- var i;
- for (i = 0; i < pluginResult.length; i++) {
- var mediaFile = new MediaFile();
- mediaFile.name = pluginResult[i].name;
- mediaFile.fullPath = pluginResult[i].fullPath;
- mediaFile.type = pluginResult[i].type;
- mediaFile.lastModifiedDate = pluginResult[i].lastModifiedDate;
- mediaFile.size = pluginResult[i].size;
- mediaFiles.push(mediaFile);
- }
- successCallback(mediaFiles);
- };
- exec(win, errorCallback, "Capture", type, [options]);
-}
-/**
- * The Capture interface exposes an interface to the camera and microphone of the hosting device.
- */
-function Capture() {
- this.supportedAudioModes = [];
- this.supportedImageModes = [];
- this.supportedVideoModes = [];
-}
-
-/**
- * Launch audio recorder application for recording audio clip(s).
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureAudioOptions} options
- */
-Capture.prototype.captureAudio = function(successCallback, errorCallback, options){
- _capture("captureAudio", successCallback, errorCallback, options);
-};
-
-/**
- * Launch camera application for taking image(s).
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureImageOptions} options
- */
-Capture.prototype.captureImage = function(successCallback, errorCallback, options){
- _capture("captureImage", successCallback, errorCallback, options);
-};
-
-/**
- * Launch device camera application for recording video(s).
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureVideoOptions} options
- */
-Capture.prototype.captureVideo = function(successCallback, errorCallback, options){
- _capture("captureVideo", successCallback, errorCallback, options);
-};
-
-
-module.exports = new Capture();
-
-});
+})
-define('cordova/plugin/CaptureAudioOptions', function(require, exports, module) {
+// file: lib/common/plugin/CaptureAudioOptions.js
+define("cordova/plugin/CaptureAudioOptions", function(require, exports, module) {
/**
* Encapsulates all audio capture operation configuration options.
*/
var CaptureAudioOptions = function(){
// Upper limit of sound clips user can record. Value must be equal or greater than 1.
this.limit = 1;
- // Maximum duration of a single sound clip in seconds.
- this.duration = 0;
- // The selected audio mode. Must match with one of the elements in supportedAudioModes array.
- this.mode = null;
-};
-
-module.exports = CaptureAudioOptions;
-
-});
-
-define('cordova/plugin/CaptureError', function(require, exports, module) {
-/**
- * The CaptureError interface encapsulates all errors in the Capture API.
- */
-var CaptureError = function(c) {
- this.code = c || null;
-};
-
-// Camera or microphone failed to capture image or sound.
-CaptureError.CAPTURE_INTERNAL_ERR = 0;
-// Camera application or audio capture application is currently serving other capture request.
-CaptureError.CAPTURE_APPLICATION_BUSY = 1;
-// Invalid use of the API (e.g. limit parameter has value less than one).
-CaptureError.CAPTURE_INVALID_ARGUMENT = 2;
-// User exited camera application or audio capture application before capturing anything.
-CaptureError.CAPTURE_NO_MEDIA_FILES = 3;
-// The requested capture operation is not supported.
-CaptureError.CAPTURE_NOT_SUPPORTED = 20;
-
-module.exports = CaptureError;
-
-});
-
-define('cordova/plugin/CaptureImageOptions', function(require, exports, module) {
-/**
- * Encapsulates all image capture operation configuration options.
- */
-var CaptureImageOptions = function(){
- // Upper limit of images user can take. Value must be equal or greater than 1.
- this.limit = 1;
- // The selected image mode. Must match with one of the elements in supportedImageModes array.
- this.mode = null;
-};
-
-module.exports = CaptureImageOptions;
-
-});
-
-define('cordova/plugin/CaptureVideoOptions', function(require, exports, module) {
-/**
- * Encapsulates all video capture operation configuration options.
- */
-var CaptureVideoOptions = function(){
- // Upper limit of videos user can record. Value must be equal or greater than 1.
- this.limit = 1;
- // Maximum duration of a single video clip in seconds.
- this.duration = 0;
- // The selected video mode. Must match with one of the elements in supportedVideoModes array.
- this.mode = null;
-};
-
-module.exports = CaptureVideoOptions;
-
-});
-
-define('cordova/plugin/compass', function(require, exports, module) {
-var exec = require('cordova/exec'),
- utils = require('cordova/utils'),
- CompassHeading = require('cordova/plugin/CompassHeading'),
- CompassError = require('cordova/plugin/CompassError'),
- timers = {},
- compass = {
- /**
- * Asynchronously acquires the current heading.
- * @param {Function} successCallback The function to call when the heading
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the heading data.
- * @param {CompassOptions} options The options for getting the heading data (not used).
- */
- getCurrentHeading:function(successCallback, errorCallback) {
- // successCallback required
- if (typeof successCallback !== "function") {
- console.log("Compass Error: successCallback is not a function");
- return;
- }
-
- // errorCallback optional
- if (errorCallback && (typeof errorCallback !== "function")) {
- console.log("Compass Error: errorCallback is not a function");
- return;
- }
-
- var win = function(result) {
- var ch = new CompassHeading(result.magneticHeading, result.trueHeading, result.headingAccuracy, result.timestamp);
- successCallback(ch);
- };
- var fail = function(code) {
- var ce = new CompassError(code);
- errorCallback(ce);
- }
-
- // Get heading
- exec(win, fail, "Compass", "getHeading", []);
- },
+ // Maximum duration of a single sound clip in seconds.
+ this.duration = 0;
+ // The selected audio mode. Must match with one of the elements in supportedAudioModes array.
+ this.mode = null;
+};
- /**
- * Asynchronously acquires the heading repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the heading
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the heading data.
- * @param {HeadingOptions} options The options for getting the heading data
- * such as timeout and the frequency of the watch.
- */
- watchHeading:function(successCallback, errorCallback, options) {
- // Default interval (100 msec)
- var frequency = (options !== undefined && options.frequency !== undefined) ? options.frequency : 100;
+module.exports = CaptureAudioOptions;
- // successCallback required
- if (typeof successCallback !== "function") {
- console.log("Compass Error: successCallback is not a function");
- return;
- }
+})
- // errorCallback optional
- if (errorCallback && (typeof errorCallback !== "function")) {
- console.log("Compass Error: errorCallback is not a function");
- return;
- }
+// file: lib/common/plugin/CaptureError.js
+define("cordova/plugin/CaptureError", function(require, exports, module) {
+/**
+ * The CaptureError interface encapsulates all errors in the Capture API.
+ */
+var CaptureError = function(c) {
+ this.code = c || null;
+};
- // Start watch timer to get headings
- var id = utils.createUUID();
+// Camera or microphone failed to capture image or sound.
+CaptureError.CAPTURE_INTERNAL_ERR = 0;
+// Camera application or audio capture application is currently serving other capture request.
+CaptureError.CAPTURE_APPLICATION_BUSY = 1;
+// Invalid use of the API (e.g. limit parameter has value less than one).
+CaptureError.CAPTURE_INVALID_ARGUMENT = 2;
+// User exited camera application or audio capture application before capturing anything.
+CaptureError.CAPTURE_NO_MEDIA_FILES = 3;
+// The requested capture operation is not supported.
+CaptureError.CAPTURE_NOT_SUPPORTED = 20;
- timers[id] = window.setInterval(function() {
- compass.getCurrentHeading(successCallback, errorCallback);
- }, frequency);
+module.exports = CaptureError;
- return id;
- },
+})
- /**
- * Clears the specified heading watch.
- * @param {String} watchId The ID of the watch returned from #watchHeading.
- */
- clearWatch:function(id) {
- // Stop javascript timer & remove from timer list
- if (id && timers[id]) {
- clearInterval(timers[id]);
- delete timers[id];
- }
- }
- // TODO: add the filter-based iOS-only methods
- };
+// file: lib/common/plugin/CaptureImageOptions.js
+define("cordova/plugin/CaptureImageOptions", function(require, exports, module) {
+/**
+ * Encapsulates all image capture operation configuration options.
+ */
+var CaptureImageOptions = function(){
+ // Upper limit of images user can take. Value must be equal or greater than 1.
+ this.limit = 1;
+ // The selected image mode. Must match with one of the elements in supportedImageModes array.
+ this.mode = null;
+};
-module.exports = compass;
+module.exports = CaptureImageOptions;
-});
+})
+
+// file: lib/common/plugin/CaptureVideoOptions.js
+define("cordova/plugin/CaptureVideoOptions", function(require, exports, module) {
+/**
+ * Encapsulates all video capture operation configuration options.
+ */
+var CaptureVideoOptions = function(){
+ // Upper limit of videos user can record. Value must be equal or greater than 1.
+ this.limit = 1;
+ // Maximum duration of a single video clip in seconds.
+ this.duration = 0;
+ // The selected video mode. Must match with one of the elements in supportedVideoModes array.
+ this.mode = null;
+};
+
+module.exports = CaptureVideoOptions;
+
+})
-define('cordova/plugin/CompassError', function(require, exports, module) {
+// file: lib/common/plugin/CompassError.js
+define("cordova/plugin/CompassError", function(require, exports, module) {
/**
* CompassError.
* An error code assigned by an implementation when an error has occured
@@ -1691,9 +1257,10 @@ CompassError.COMPASS_NOT_SUPPORTED = 20;
module.exports = CompassError;
-});
+})
-define('cordova/plugin/CompassHeading', function(require, exports, module) {
+// file: lib/common/plugin/CompassHeading.js
+define("cordova/plugin/CompassHeading", function(require, exports, module) {
var CompassHeading = function(magneticHeading, trueHeading, headingAccuracy, timestamp) {
this.magneticHeading = (magneticHeading !== undefined ? magneticHeading : null);
this.trueHeading = (trueHeading !== undefined ? trueHeading : null);
@@ -1703,9 +1270,10 @@ var CompassHeading = function(magneticHeading, trueHeading, headingAccuracy, tim
module.exports = CompassHeading;
-});
+})
-define('cordova/plugin/ConfigurationData', function(require, exports, module) {
+// file: lib/common/plugin/ConfigurationData.js
+define("cordova/plugin/ConfigurationData", function(require, exports, module) {
/**
* Encapsulates a set of parameters that the capture device supports.
*/
@@ -1722,9 +1290,10 @@ function ConfigurationData() {
module.exports = ConfigurationData;
-});
+})
-define('cordova/plugin/Connection', function(require, exports, module) {
+// file: lib/common/plugin/Connection.js
+define("cordova/plugin/Connection", function(require, exports, module) {
/**
* Network status
*/
@@ -1738,9 +1307,10 @@ module.exports = {
NONE: "none"
};
-});
+})
-define('cordova/plugin/Contact', function(require, exports, module) {
+// file: lib/common/plugin/Contact.js
+define("cordova/plugin/Contact", function(require, exports, module) {
var exec = require('cordova/exec'),
ContactError = require('cordova/plugin/ContactError'),
utils = require('cordova/utils');
@@ -1919,9 +1489,10 @@ Contact.prototype.save = function(successCB, errorCB) {
module.exports = Contact;
-});
+})
-define('cordova/plugin/ContactAddress', function(require, exports, module) {
+// file: lib/common/plugin/ContactAddress.js
+define("cordova/plugin/ContactAddress", function(require, exports, module) {
/**
* Contact address.
* @constructor
@@ -1948,9 +1519,10 @@ var ContactAddress = function(pref, type, formatted, streetAddress, locality, re
module.exports = ContactAddress;
-});
+})
-define('cordova/plugin/ContactError', function(require, exports, module) {
+// file: lib/common/plugin/ContactError.js
+define("cordova/plugin/ContactError", function(require, exports, module) {
/**
* ContactError.
* An error code assigned by an implementation when an error has occured
@@ -1973,9 +1545,10 @@ ContactError.PERMISSION_DENIED_ERROR = 20;
module.exports = ContactError;
-});
+})
-define('cordova/plugin/ContactField', function(require, exports, module) {
+// file: lib/common/plugin/ContactField.js
+define("cordova/plugin/ContactField", function(require, exports, module) {
/**
* Generic contact field.
* @constructor
@@ -1993,9 +1566,10 @@ var ContactField = function(type, value, pref) {
module.exports = ContactField;
-});
+})
-define('cordova/plugin/ContactFindOptions', function(require, exports, module) {
+// file: lib/common/plugin/ContactFindOptions.js
+define("cordova/plugin/ContactFindOptions", function(require, exports, module) {
/**
* ContactFindOptions.
* @constructor
@@ -2010,9 +1584,10 @@ var ContactFindOptions = function(filter, multiple) {
module.exports = ContactFindOptions;
-});
+})
-define('cordova/plugin/ContactName', function(require, exports, module) {
+// file: lib/common/plugin/ContactName.js
+define("cordova/plugin/ContactName", function(require, exports, module) {
/**
* Contact name.
* @constructor
@@ -2034,9 +1609,10 @@ var ContactName = function(formatted, familyName, givenName, middle, prefix, suf
module.exports = ContactName;
-});
+})
-define('cordova/plugin/ContactOrganization', function(require, exports, module) {
+// file: lib/common/plugin/ContactOrganization.js
+define("cordova/plugin/ContactOrganization", function(require, exports, module) {
/**
* Contact organization.
* @constructor
@@ -2061,70 +1637,10 @@ var ContactOrganization = function(pref, type, name, dept, title) {
module.exports = ContactOrganization;
-});
-
-define('cordova/plugin/contacts', function(require, exports, module) {
-var exec = require('cordova/exec'),
- ContactError = require('cordova/plugin/ContactError'),
- Contact = require('cordova/plugin/Contact');
-
-/**
-* Represents a group of Contacts.
-* @constructor
-*/
-var contacts = {
- /**
- * Returns an array of Contacts matching the search criteria.
- * @param fields that should be searched
- * @param successCB success callback
- * @param errorCB error callback
- * @param {ContactFindOptions} options that can be applied to contact searching
- * @return array of Contacts matching search criteria
- */
- find:function(fields, successCB, errorCB, options) {
- if (!successCB) {
- throw new TypeError("You must specify a success callback for the find command.");
- }
- if (!fields || (fields instanceof Array && fields.length === 0)) {
- if (typeof errorCB === "function") {
- errorCB(new ContactError(ContactError.INVALID_ARGUMENT_ERROR));
- }
- } else {
- var win = function(result) {
- var cs = [];
- for (var i = 0, l = result.length; i < l; i++) {
- cs.push(contacts.create(result[i]));
- }
- successCB(cs);
- };
- exec(win, errorCB, "Contacts", "search", [fields, options]);
- }
- },
-
- /**
- * This function creates a new contact, but it does not persist the contact
- * to device storage. To persist the contact to device storage, invoke
- * contact.save().
- * @param properties an object who's properties will be examined to create a new Contact
- * @returns new Contact object
- */
- create:function(properties) {
- var i;
- var contact = new Contact();
- for (i in properties) {
- if (typeof contact[i] !== 'undefined' && properties.hasOwnProperty(i)) {
- contact[i] = properties[i];
- }
- }
- return contact;
- }
-};
-
-module.exports = contacts;
-
-});
+})
-define('cordova/plugin/Coordinates', function(require, exports, module) {
+// file: lib/common/plugin/Coordinates.js
+define("cordova/plugin/Coordinates", function(require, exports, module) {
/**
* This class contains position information.
* @param {Object} lat
@@ -2169,9 +1685,10 @@ var Coordinates = function(lat, lng, alt, acc, head, vel, altacc) {
module.exports = Coordinates;
-});
+})
-define('cordova/plugin/DirectoryEntry', function(require, exports, module) {
+// file: lib/common/plugin/DirectoryEntry.js
+define("cordova/plugin/DirectoryEntry", function(require, exports, module) {
var utils = require('cordova/utils'),
exec = require('cordova/exec'),
Entry = require('cordova/plugin/Entry'),
@@ -2253,9 +1770,10 @@ DirectoryEntry.prototype.getFile = function(path, options, successCallback, erro
module.exports = DirectoryEntry;
-});
+})
-define('cordova/plugin/DirectoryReader', function(require, exports, module) {
+// file: lib/common/plugin/DirectoryReader.js
+define("cordova/plugin/DirectoryReader", function(require, exports, module) {
var exec = require('cordova/exec');
/**
@@ -2298,9 +1816,10 @@ DirectoryReader.prototype.readEntries = function(successCallback, errorCallback)
module.exports = DirectoryReader;
-});
+})
-define('cordova/plugin/Entry', function(require, exports, module) {
+// file: lib/common/plugin/Entry.js
+define("cordova/plugin/Entry", function(require, exports, module) {
var exec = require('cordova/exec'),
FileError = require('cordova/plugin/FileError'),
Metadata = require('cordova/plugin/Metadata');
@@ -2492,18 +2011,23 @@ Entry.prototype.remove = function(successCallback, errorCallback) {
* @param errorCallback {Function} called with a FileError
*/
Entry.prototype.getParent = function(successCallback, errorCallback) {
+ var win = typeof successCallback !== 'function' ? null : function(result) {
+ var DirectoryEntry = require('cordova/plugin/DirectoryEntry');
+ var entry = new DirectoryEntry(result.name, result.fullPath);
+ successCallback(entry);
+ };
var fail = typeof errorCallback !== 'function' ? null : function(code) {
errorCallback(new FileError(code));
};
- exec(successCallback, fail, "File", "getParent", [this.fullPath]);
+ exec(win, fail, "File", "getParent", [this.fullPath]);
};
module.exports = Entry;
-});
-
+})
-define('cordova/plugin/File', function(require, exports, module) {
+// file: lib/common/plugin/File.js
+define("cordova/plugin/File", function(require, exports, module) {
/**
* Constructor.
* name {DOMString} name of the file, without path information
@@ -2523,9 +2047,10 @@ var File = function(name, fullPath, type, lastModifiedDate, size){
module.exports = File;
-});
+})
-define('cordova/plugin/FileEntry', function(require, exports, module) {
+// file: lib/common/plugin/FileEntry.js
+define("cordova/plugin/FileEntry", function(require, exports, module) {
var utils = require('cordova/utils'),
exec = require('cordova/exec'),
Entry = require('cordova/plugin/Entry'),
@@ -2590,9 +2115,10 @@ FileEntry.prototype.file = function(successCallback, errorCallback) {
module.exports = FileEntry;
-});
+})
-define('cordova/plugin/FileError', function(require, exports, module) {
+// file: lib/common/plugin/FileError.js
+define("cordova/plugin/FileError", function(require, exports, module) {
/**
* FileError
*/
@@ -2619,9 +2145,10 @@ FileError.PATH_EXISTS_ERR = 12;
module.exports = FileError;
-});
+})
-define('cordova/plugin/FileReader', function(require, exports, module) {
+// file: lib/common/plugin/FileReader.js
+define("cordova/plugin/FileReader", function(require, exports, module) {
var exec = require('cordova/exec'),
FileError = require('cordova/plugin/FileError'),
ProgressEvent = require('cordova/plugin/ProgressEvent');
@@ -2654,43 +2181,130 @@ var FileReader = function() {
this.onabort = null; // When the read has been aborted. For instance, by invoking the abort() method.
};
-// States
-FileReader.EMPTY = 0;
-FileReader.LOADING = 1;
-FileReader.DONE = 2;
+// States
+FileReader.EMPTY = 0;
+FileReader.LOADING = 1;
+FileReader.DONE = 2;
+
+/**
+ * Abort reading file.
+ */
+FileReader.prototype.abort = function() {
+ this.result = null;
+
+ if (this.readyState == FileReader.DONE || this.readyState == FileReader.EMPTY) {
+ return;
+ }
+
+ this.readyState = FileReader.DONE;
+
+ // If abort callback
+ if (typeof this.onabort === 'function') {
+ this.onabort(new ProgressEvent('abort', {target:this}));
+ }
+ // If load end callback
+ if (typeof this.onloadend === 'function') {
+ this.onloadend(new ProgressEvent('loadend', {target:this}));
+ }
+};
+
+/**
+ * Read text file.
+ *
+ * @param file {File} File object containing file properties
+ * @param encoding [Optional] (see http://www.iana.org/assignments/character-sets)
+ */
+FileReader.prototype.readAsText = function(file, encoding) {
+ // Figure out pathing
+ this.fileName = '';
+ if (typeof file.fullPath === 'undefined') {
+ this.fileName = file;
+ } else {
+ this.fileName = file.fullPath;
+ }
+
+ // Already loading something
+ if (this.readyState == FileReader.LOADING) {
+ throw new FileError(FileError.INVALID_STATE_ERR);
+ }
+
+ // LOADING state
+ this.readyState = FileReader.LOADING;
+
+ // If loadstart callback
+ if (typeof this.onloadstart === "function") {
+ this.onloadstart(new ProgressEvent("loadstart", {target:this}));
+ }
+
+ // Default encoding is UTF-8
+ var enc = encoding ? encoding : "UTF-8";
+
+ var me = this;
+
+ // Read file
+ exec(
+ // Success callback
+ function(r) {
+ // If DONE (cancelled), then don't do anything
+ if (me.readyState === FileReader.DONE) {
+ return;
+ }
+
+ // Save result
+ me.result = r;
+
+ // If onload callback
+ if (typeof me.onload === "function") {
+ me.onload(new ProgressEvent("load", {target:me}));
+ }
+
+ // DONE state
+ me.readyState = FileReader.DONE;
+
+ // If onloadend callback
+ if (typeof me.onloadend === "function") {
+ me.onloadend(new ProgressEvent("loadend", {target:me}));
+ }
+ },
+ // Error callback
+ function(e) {
+ // If DONE (cancelled), then don't do anything
+ if (me.readyState === FileReader.DONE) {
+ return;
+ }
+
+ // DONE state
+ me.readyState = FileReader.DONE;
-/**
- * Abort reading file.
- */
-FileReader.prototype.abort = function() {
- this.result = null;
+ // null result
+ me.result = null;
- if (this.readyState == FileReader.DONE || this.readyState == FileReader.EMPTY) {
- return;
- }
+ // Save error
+ me.error = new FileError(e);
- this.readyState = FileReader.DONE;
+ // If onerror callback
+ if (typeof me.onerror === "function") {
+ me.onerror(new ProgressEvent("error", {target:me}));
+ }
- // If abort callback
- if (typeof this.onabort === 'function') {
- this.onabort(new ProgressEvent('abort', {target:this}));
- }
- // If load end callback
- if (typeof this.onloadend === 'function') {
- this.onloadend(new ProgressEvent('loadend', {target:this}));
- }
+ // If onloadend callback
+ if (typeof me.onloadend === "function") {
+ me.onloadend(new ProgressEvent("loadend", {target:me}));
+ }
+ }, "File", "readAsText", [this.fileName, enc]);
};
+
/**
- * Read text file.
+ * Read file and return data as a base64 encoded data url.
+ * A data url is of the form:
+ * data:[<mediatype>][;base64],<data>
*
* @param file {File} File object containing file properties
- * @param encoding [Optional] (see http://www.iana.org/assignments/character-sets)
*/
-FileReader.prototype.readAsText = function(file, encoding) {
- // Figure out pathing
- this.fileName = '';
- if (typeof file.fullPath === 'undefined') {
+FileReader.prototype.readAsDataURL = function(file) {
+ this.fileName = "";
+ if (typeof file.fullPath === "undefined") {
this.fileName = file;
} else {
this.fileName = file.fullPath;
@@ -2709,9 +2323,6 @@ FileReader.prototype.readAsText = function(file, encoding) {
this.onloadstart(new ProgressEvent("loadstart", {target:this}));
}
- // Default encoding is UTF-8
- var enc = encoding ? encoding : "UTF-8";
-
var me = this;
// Read file
@@ -2723,6 +2334,9 @@ FileReader.prototype.readAsText = function(file, encoding) {
return;
}
+ // DONE state
+ me.readyState = FileReader.DONE;
+
// Save result
me.result = r;
@@ -2731,9 +2345,6 @@ FileReader.prototype.readAsText = function(file, encoding) {
me.onload(new ProgressEvent("load", {target:me}));
}
- // DONE state
- me.readyState = FileReader.DONE;
-
// If onloadend callback
if (typeof me.onloadend === "function") {
me.onloadend(new ProgressEvent("loadend", {target:me}));
@@ -2749,1716 +2360,2224 @@ FileReader.prototype.readAsText = function(file, encoding) {
// DONE state
me.readyState = FileReader.DONE;
- // null result
- me.result = null;
+ me.result = null;
+
+ // Save error
+ me.error = new FileError(e);
+
+ // If onerror callback
+ if (typeof me.onerror === "function") {
+ me.onerror(new ProgressEvent("error", {target:me}));
+ }
+
+ // If onloadend callback
+ if (typeof me.onloadend === "function") {
+ me.onloadend(new ProgressEvent("loadend", {target:me}));
+ }
+ }, "File", "readAsDataURL", [this.fileName]);
+};
+
+/**
+ * Read file and return data as a binary data.
+ *
+ * @param file {File} File object containing file properties
+ */
+FileReader.prototype.readAsBinaryString = function(file) {
+ // TODO - Can't return binary data to browser.
+ console.log('method "readAsBinaryString" is not supported at this time.');
+};
+
+/**
+ * Read file and return data as a binary data.
+ *
+ * @param file {File} File object containing file properties
+ */
+FileReader.prototype.readAsArrayBuffer = function(file) {
+ // TODO - Can't return binary data to browser.
+ console.log('This method is not supported at this time.');
+};
+
+module.exports = FileReader;
+
+})
+
+// file: lib/common/plugin/FileSystem.js
+define("cordova/plugin/FileSystem", function(require, exports, module) {
+var DirectoryEntry = require('cordova/plugin/DirectoryEntry');
+
+/**
+ * An interface representing a file system
+ *
+ * @constructor
+ * {DOMString} name the unique name of the file system (readonly)
+ * {DirectoryEntry} root directory of the file system (readonly)
+ */
+var FileSystem = function(name, root) {
+ this.name = name || null;
+ if (root) {
+ this.root = new DirectoryEntry(root.name, root.fullPath);
+ }
+};
+
+module.exports = FileSystem;
+
+})
+
+// file: lib/common/plugin/FileTransfer.js
+define("cordova/plugin/FileTransfer", function(require, exports, module) {
+var exec = require('cordova/exec');
+
+/**
+ * FileTransfer uploads a file to a remote server.
+ * @constructor
+ */
+var FileTransfer = function() {};
+
+/**
+* Given an absolute file path, uploads a file on the device to a remote server
+* using a multipart HTTP request.
+* @param filePath {String} Full path of the file on the device
+* @param server {String} URL of the server to receive the file
+* @param successCallback (Function} Callback to be invoked when upload has completed
+* @param errorCallback {Function} Callback to be invoked upon error
+* @param options {FileUploadOptions} Optional parameters such as file name and mimetype
+*/
+FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, debug) {
+ // check for options
+ var fileKey = null;
+ var fileName = null;
+ var mimeType = null;
+ var params = null;
+ var chunkedMode = true;
+ if (options) {
+ fileKey = options.fileKey;
+ fileName = options.fileName;
+ mimeType = options.mimeType;
+ if (options.chunkedMode !== null || typeof options.chunkedMode !== "undefined") {
+ chunkedMode = options.chunkedMode;
+ }
+ if (options.params) {
+ params = options.params;
+ }
+ else {
+ params = {};
+ }
+ }
+
+ exec(successCallback, errorCallback, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, debug, chunkedMode]);
+};
+
+/**
+ * Downloads a file form a given URL and saves it to the specified directory.
+ * @param source {String} URL of the server to receive the file
+ * @param target {String} Full path of the file on the device
+ * @param successCallback (Function} Callback to be invoked when upload has completed
+ * @param errorCallback {Function} Callback to be invoked upon error
+ */
+FileTransfer.prototype.download = function(source, target, successCallback, errorCallback) {
+ var win = function(result) {
+ var entry = null;
+ if (result.isDirectory) {
+ entry = new DirectoryEntry();
+ }
+ else if (result.isFile) {
+ entry = new FileEntry();
+ }
+ entry.isDirectory = result.isDirectory;
+ entry.isFile = result.isFile;
+ entry.name = result.name;
+ entry.fullPath = result.fullPath;
+ successCallback(entry);
+ };
+ exec(win, errorCallback, 'FileTransfer', 'download', [source, target]);
+};
+
+module.exports = FileTransfer;
+
+})
+
+// file: lib/common/plugin/FileTransferError.js
+define("cordova/plugin/FileTransferError", function(require, exports, module) {
+/**
+ * FileTransferError
+ * @constructor
+ */
+var FileTransferError = function(code) {
+ this.code = code || null;
+};
+
+FileTransferError.FILE_NOT_FOUND_ERR = 1;
+FileTransferError.INVALID_URL_ERR = 2;
+FileTransferError.CONNECTION_ERR = 3;
+
+module.exports = FileTransferError;
+
+})
+
+// file: lib/common/plugin/FileUploadOptions.js
+define("cordova/plugin/FileUploadOptions", function(require, exports, module) {
+/**
+ * Options to customize the HTTP request used to upload files.
+ * @constructor
+ * @param fileKey {String} Name of file request parameter.
+ * @param fileName {String} Filename to be used by the server. Defaults to image.jpg.
+ * @param mimeType {String} Mimetype of the uploaded file. Defaults to image/jpeg.
+ * @param params {Object} Object with key: value params to send to the server.
+ */
+var FileUploadOptions = function(fileKey, fileName, mimeType, params) {
+ this.fileKey = fileKey || null;
+ this.fileName = fileName || null;
+ this.mimeType = mimeType || null;
+ this.params = params || null;
+};
+
+module.exports = FileUploadOptions;
+
+})
+
+// file: lib/common/plugin/FileUploadResult.js
+define("cordova/plugin/FileUploadResult", function(require, exports, module) {
+/**
+ * FileUploadResult
+ * @constructor
+ */
+var FileUploadResult = function() {
+ this.bytesSent = 0;
+ this.responseCode = null;
+ this.response = null;
+};
+
+module.exports = FileUploadResult;
+
+})
+
+// file: lib/common/plugin/FileWriter.js
+define("cordova/plugin/F
<TRUNCATED>