You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ti...@apache.org on 2013/02/27 22:34:13 UTC
[1/2] webworks commit: [CB-2555] - updating javascript
[CB-2555] - updating javascript
Project: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/commit/a1c430bb
Tree: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/tree/a1c430bb
Diff: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/diff/a1c430bb
Branch: refs/heads/master
Commit: a1c430bbc200bd0bafa0d4cc35a2096530a96771
Parents: 3d43c04
Author: Tim Kim <ti...@adobe.com>
Authored: Wed Feb 27 13:21:19 2013 -0800
Committer: Tim Kim <ti...@adobe.com>
Committed: Wed Feb 27 13:21:19 2013 -0800
----------------------------------------------------------------------
javascript/cordova.blackberry.js | 345 +++++++++++++++++++++++++++------
1 files changed, 281 insertions(+), 64 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/a1c430bb/javascript/cordova.blackberry.js
----------------------------------------------------------------------
diff --git a/javascript/cordova.blackberry.js b/javascript/cordova.blackberry.js
index cb48379..988dd43 100644
--- a/javascript/cordova.blackberry.js
+++ b/javascript/cordova.blackberry.js
@@ -1,8 +1,8 @@
// Platform: blackberry
-// commit cded0ad0826489ca07ae8bdd33905a37d40f3adf
+// commit c5437f050947a65045222c6ac9fa70cf71ba334e
-// File generated at :: Wed Feb 20 2013 13:20:15 GMT-0800 (PST)
+// File generated at :: Wed Feb 27 2013 13:16:46 GMT-0800 (PST)
/*
Licensed to the Apache Software Foundation (ASF) under one
@@ -262,7 +262,7 @@ var cordova = {
*/
callbackSuccess: function(callbackId, args) {
try {
- cordova.callbackFromNative(callbackId, true, args.status, args.message, args.keepCallback);
+ cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback);
} catch (e) {
console.log("Error in error callback: " + callbackId + " = "+e);
}
@@ -275,7 +275,7 @@ var cordova = {
// TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative.
// Derive success from status.
try {
- cordova.callbackFromNative(callbackId, false, args.status, args.message, args.keepCallback);
+ cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback);
} catch (e) {
console.log("Error in error callback: " + callbackId + " = "+e);
}
@@ -284,13 +284,13 @@ var cordova = {
/**
* Called by native code when returning the result from an action.
*/
- callbackFromNative: function(callbackId, success, status, message, keepCallback) {
+ callbackFromNative: function(callbackId, success, status, args, keepCallback) {
var callback = cordova.callbacks[callbackId];
if (callback) {
if (success && status == cordova.callbackStatus.OK) {
- callback.success && callback.success(message);
+ callback.success && callback.success.apply(null, args);
} else if (!success) {
- callback.fail && callback.fail(message);
+ callback.fail && callback.fail.apply(null, args);
}
// Clear callback if not expecting any more results
@@ -724,6 +724,10 @@ channel.createSticky('onCordovaInfoReady');
// Event to indicate that the connection property has been set.
channel.createSticky('onCordovaConnectionReady');
+// Event to indicate that all automatically loaded JS plugins are loaded and ready.
+// This is used in conjunction with the automatic plugin JS loading CLI prototype.
+channel.createSticky('onPluginsReady');
+
// Event to indicate that Cordova is ready
channel.createSticky('onDeviceReady');
@@ -993,7 +997,8 @@ define("cordova/plugin/Camera", function(require, exports, module) {
var argscheck = require('cordova/argscheck'),
exec = require('cordova/exec'),
- Camera = require('cordova/plugin/CameraConstants');
+ Camera = require('cordova/plugin/CameraConstants'),
+ CameraPopoverHandle = require('cordova/plugin/CameraPopoverHandle');
var cameraExport = {};
@@ -1033,6 +1038,7 @@ cameraExport.getPicture = function(successCallback, errorCallback, options) {
mediaType, allowEdit, correctOrientation, saveToPhotoAlbum, popoverOptions];
exec(successCallback, errorCallback, "Camera", "takePicture", args);
+ return new CameraPopoverHandle();
};
cameraExport.cleanup = function(successCallback, errorCallback) {
@@ -1077,6 +1083,24 @@ module.exports = {
});
+// file: lib/common/plugin/CameraPopoverHandle.js
+define("cordova/plugin/CameraPopoverHandle", function(require, exports, module) {
+
+var exec = require('cordova/exec');
+
+/**
+ * A handle to an image picker popover.
+ */
+var CameraPopoverHandle = function() {
+ this.setPosition = function(popoverOptions) {
+ console.log('CameraPopoverHandle.setPosition is only supported on iOS.');
+ };
+};
+
+module.exports = CameraPopoverHandle;
+
+});
+
// file: lib/common/plugin/CameraPopoverOptions.js
define("cordova/plugin/CameraPopoverOptions", function(require, exports, module) {
@@ -2500,7 +2524,7 @@ FileTransfer.prototype.upload = function(filePath, server, successCallback, erro
}
var fail = errorCallback && function(e) {
- var error = new FileTransferError(e.code, e.source, e.target, e.http_status);
+ var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body);
errorCallback(error);
};
@@ -2550,7 +2574,7 @@ FileTransfer.prototype.download = function(source, target, successCallback, erro
};
var fail = errorCallback && function(e) {
- var error = new FileTransferError(e.code, e.source, e.target, e.http_status);
+ var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body);
errorCallback(error);
};
@@ -5184,7 +5208,7 @@ module.exports = {
model: "PlayBook",
name: "PlayBook", // deprecated: please use device.model
uuid: info.uuid,
- cordova: "2.5.0rc1"
+ cordova: "2.5.0"
});
}),
request = new blackberry.transport.RemoteFunctionCall("org/apache/cordova/getDeviceInfo");
@@ -6081,7 +6105,8 @@ modulemapper.clobbers('cordova/plugin/device', 'device');
// file: lib/common/plugin/echo.js
define("cordova/plugin/echo", function(require, exports, module) {
-var exec = require('cordova/exec');
+var exec = require('cordova/exec'),
+ utils = require('cordova/utils');
/**
* Sends the given message through exec() to the Echo plugin, which sends it back to the successCallback.
@@ -6091,11 +6116,25 @@ var exec = require('cordova/exec');
* @param forceAsync Whether to force an async return value (for testing native->js bridge).
*/
module.exports = function(successCallback, errorCallback, message, forceAsync) {
- var action = forceAsync ? 'echoAsync' : 'echo';
- if (!forceAsync && message.constructor == ArrayBuffer) {
- action = 'echoArrayBuffer';
+ var action = 'echo';
+ var messageIsMultipart = (utils.typeName(message) == "Array");
+ var args = messageIsMultipart ? message : [message];
+
+ if (utils.typeName(message) == 'ArrayBuffer') {
+ if (forceAsync) {
+ console.warn('Cannot echo ArrayBuffer with forced async, falling back to sync.');
+ }
+ action += 'ArrayBuffer';
+ } else if (messageIsMultipart) {
+ if (forceAsync) {
+ console.warn('Cannot echo MultiPart Array with forced async, falling back to sync.');
+ }
+ action += 'MultiPart';
+ } else if (forceAsync) {
+ action += 'Async';
}
- exec(successCallback, errorCallback, "Echo", action, [message]);
+
+ exec(successCallback, errorCallback, "Echo", action, args);
};
@@ -9059,7 +9098,7 @@ module.exports = {
model: "Dev Alpha",
name: "Dev Alpha", // deprecated: please use device.model
uuid: blackberry.identity.uuid,
- cordova: "2.5.0rc1"
+ cordova: "2.5.0"
});
return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "Device info returned" };
@@ -9479,29 +9518,186 @@ module.exports = {
// file: lib/blackberry/plugin/qnx/fileTransfer.js
define("cordova/plugin/qnx/fileTransfer", function(require, exports, module) {
-var cordova = require('cordova');
+var cordova = require('cordova'),
+ FileEntry = require('cordova/plugin/FileEntry'),
+ FileTransferError = require('cordova/plugin/FileTransferError'),
+ FileUploadResult = require('cordova/plugin/FileUploadResult'),
+ ProgressEvent = require('cordova/plugin/ProgressEvent'),
+ nativeResolveLocalFileSystemURI = function(uri, success, fail) {
+ if (uri.substring(0,11) !== "filesystem:") {
+ uri = "filesystem:" + uri;
+ }
+ window.webkitResolveLocalFileSystemURL(uri, success, fail);
+ },
+ xhr;
-module.exports = {
- download: function (args, win, fail) {
- var source = args[0],
- target = args[1];
+function getParentPath(filePath) {
+ var pos = filePath.lastIndexOf('/');
+ return filePath.substring(0, pos + 1);
+}
- blackberry.io.filetransfer.download(source, target, win, fail);
+function getFileName(filePath) {
+ var pos = filePath.lastIndexOf('/');
+ return filePath.substring(pos + 1);
+}
+
+function cleanUpPath(filePath) {
+ var pos = filePath.lastIndexOf('/');
+ return filePath.substring(0, pos) + filePath.substring(pos + 1, filePath.length);
+}
+
+function checkURL(url) {
+ return url.indexOf(' ') === -1 ? true : false;
+}
+
+module.exports = {
+ abort: function () {
return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"};
},
- upload: function (args, win, fail) {
- var path = args[0],
+ upload: function(args, win, fail) {
+ var filePath = args[0],
server = args[1],
- options = {
- fileKey: args[2],
- fileName: args[3],
- mimeType: args[4],
- params: args[5],
- chunkedMode: args[6]
- };
+ fileKey = args[2],
+ fileName = args[3],
+ mimeType = args[4],
+ params = args[5],
+ /*trustAllHosts = args[6],*/
+ chunkedMode = args[7],
+ headers = args[8];
+
+ if (!checkURL(server)) {
+ fail(new FileTransferError(FileTransferError.INVALID_URL_ERR));
+ }
+
+ nativeResolveLocalFileSystemURI(filePath, function(entry) {
+ entry.file(function(file) {
+ function uploadFile(blobFile) {
+ var fd = new FormData();
+
+ fd.append(fileKey, blobFile, fileName);
+ for (var prop in params) {
+ if(params.hasOwnProperty(prop)) {
+ fd.append(prop, params[prop]);
+ }
+ }
+
+ xhr = new XMLHttpRequest();
+ xhr.open("POST", server);
+ xhr.onload = function(evt) {
+ if (xhr.status == 200) {
+ var result = new FileUploadResult();
+ result.bytesSent = file.size;
+ result.responseCode = xhr.status;
+ result.response = xhr.response;
+ win(result);
+ } else if (xhr.status == 404) {
+ fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, server, filePath, xhr.status));
+ } else {
+ fail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, xhr.status));
+ }
+ };
+ xhr.ontimeout = function(evt) {
+ fail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, xhr.status));
+ };
+ xhr.onerror = function () {
+ fail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, this.status));
+ };
+ xhr.onprogress = function (evt) {
+ win(evt);
+ };
+
+ for (var header in headers) {
+ if (headers.hasOwnProperty(header)) {
+ xhr.setRequestHeader(header, headers[header]);
+ }
+ }
+
+ xhr.send(fd);
+ }
+
+ var bytesPerChunk;
+ if (chunkedMode === true) {
+ bytesPerChunk = 1024 * 1024; // 1MB chunk sizes.
+ } else {
+ bytesPerChunk = file.size;
+ }
+ var start = 0;
+ var end = bytesPerChunk;
+ while (start < file.size) {
+ var chunk = file.slice(start, end, mimeType);
+ uploadFile(chunk);
+ start = end;
+ end = start + bytesPerChunk;
+ }
+ }, function(error) {
+ fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR));
+ });
+ }, function(error) {
+ fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR));
+ });
- blackberry.io.filetransfer.upload(path, server, win, fail, options);
+ return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"};
+ },
+
+ download: function (args, win, fail) {
+ var source = args[0],
+ target = cleanUpPath(args[1]),
+ fileWriter;
+
+ if (!checkURL(source)) {
+ fail(new FileTransferError(FileTransferError.INVALID_URL_ERR));
+ }
+
+ xhr = new XMLHttpRequest();
+
+ function writeFile(entry) {
+ entry.createWriter(function (writer) {
+ fileWriter = writer;
+ fileWriter.onwriteend = function (evt) {
+ if (!evt.target.error) {
+ win(new FileEntry(entry.name, entry.toURL()));
+ } else {
+ fail(evt.target.error);
+ }
+ };
+ fileWriter.onerror = function (evt) {
+ fail(evt.target.error);
+ };
+ fileWriter.write(new Blob([xhr.response]));
+ }, function (error) {
+ fail(error);
+ });
+ }
+
+ xhr.onerror = function (e) {
+ fail(new FileTransferError(FileTransferError.CONNECTION_ERR, source, target, xhr.status));
+ };
+
+ xhr.onload = function () {
+ if (xhr.readyState === xhr.DONE) {
+ if (xhr.status === 200 && xhr.response) {
+ nativeResolveLocalFileSystemURI(getParentPath(target), function (dir) {
+ dir.getFile(getFileName(target), {create: true}, writeFile, function (error) {
+ fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR));
+ });
+ }, function (error) {
+ fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR));
+ });
+ } else if (xhr.status === 404) {
+ fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, source, target, xhr.status));
+ } else {
+ fail(new FileTransferError(FileTransferError.CONNECTION_ERR, source, target, xhr.status));
+ }
+ }
+ };
+ xhr.onprogress = function (evt) {
+ win(evt);
+ };
+
+ xhr.responseType = "blob";
+ xhr.open("GET", source, true);
+ xhr.send();
return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"};
}
};
@@ -10279,39 +10475,26 @@ window.cordova = require('cordova');
(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 (context.navigator) {
+ function replaceNavigator(origNavigator) {
var CordovaNavigator = function() {};
- CordovaNavigator.prototype = context.navigator;
- context.navigator = new CordovaNavigator();
- }
-
- var channel = require("cordova/channel"),
- _self = {
- boot: function () {
- /**
- * Create all cordova objects once page has fully loaded and native side is ready.
- */
- channel.join(function() {
- var platform = require('cordova/platform');
-
- // Call the platform-specific initialization
- platform.initialize();
-
- // Fire event to notify that all objects are created
- channel.onCordovaReady.fire();
-
- // Fire onDeviceReady event once all constructors have run and
- // cordova info has been received from native side.
- channel.join(function() {
- require('cordova').fireDocumentEvent('deviceready');
- }, channel.deviceReadyChannelsArray);
-
- }, [ channel.onDOMContentLoaded, channel.onNativeReady ]);
+ CordovaNavigator.prototype = origNavigator;
+ var newNavigator = new CordovaNavigator();
+ // This work-around really only applies to new APIs that are newer than Function.bind.
+ // Without it, APIs such as getGamepads() break.
+ if (CordovaNavigator.bind) {
+ for (var key in origNavigator) {
+ if (typeof origNavigator[key] == 'function') {
+ newNavigator[key] = origNavigator[key].bind(origNavigator);
+ }
}
- };
+ }
+ return newNavigator;
+ }
+ if (context.navigator) {
+ context.navigator = replaceNavigator(context.navigator);
+ }
- // boot up once native side is ready
- channel.onNativeReady.subscribe(_self.boot);
+ var channel = require("cordova/channel");
// _nativeReady is global variable that the native side can set
// to signify that the native code is ready. It is a global since
@@ -10320,6 +10503,40 @@ window.cordova = require('cordova');
channel.onNativeReady.fire();
}
+ /**
+ * Create all cordova objects once page has fully loaded and native side is ready.
+ */
+ var joinEvents = [ channel.onDOMContentLoaded, channel.onNativeReady ];
+
+ // If this property is set to something truthy, join on onPluginsReady too.
+ // This property is set by the automatic JS installation prototype in cordova-cli,
+ // and will be removed when the prototype either becomes mainline or is dropped.
+ if (window.__onPluginsLoadedHack) {
+ joinEvents.push(channel.onPluginsReady);
+ }
+
+ channel.join(function() {
+ var builder = require('cordova/builder'),
+ platform = require('cordova/platform');
+
+ builder.buildIntoButDoNotClobber(platform.defaults, context);
+ builder.buildIntoAndClobber(platform.clobbers, context);
+ builder.buildIntoAndMerge(platform.merges, context);
+
+ // Call the platform-specific initialization
+ platform.initialize();
+
+ // Fire event to notify that all objects are created
+ channel.onCordovaReady.fire();
+
+ // Fire onDeviceReady event once all constructors have run and
+ // cordova info has been received from native side.
+ channel.join(function() {
+ require('cordova').fireDocumentEvent('deviceready');
+ }, channel.deviceReadyChannelsArray);
+
+ }, joinEvents);
+
}(window));
// file: lib/scripts/bootstrap-blackberry.js
@@ -10335,7 +10552,7 @@ document.addEventListener("DOMContentLoaded", function () {
});
};
wwjs.onerror = function () {
- alert('there was a problem loading webworks.js');
+ console.error('there was a problem loading webworks.js');
};
document.head.appendChild(wwjs);
break;