Updated Branches: refs/heads/master 3ace9348f -> 03c5208d4
Update JS snapshot to version 2.9.0rc1 (via coho) Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/03c5208d Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/03c5208d Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/03c5208d Branch: refs/heads/master Commit: 03c5208d472a066382b8ec8c885f200e35f02c4c Parents: 3ace934 Author: Andrew Grieve <[email protected]> Authored: Thu Jun 20 15:21:58 2013 -0400 Committer: Andrew Grieve <[email protected]> Committed: Thu Jun 20 15:21:58 2013 -0400 ---------------------------------------------------------------------- framework/assets/www/cordova.js | 129 ++++++++++++++++++++++++++--------- 1 file changed, 97 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-android/blob/03c5208d/framework/assets/www/cordova.js ---------------------------------------------------------------------- diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js index e638234..b072c81 100644 --- a/framework/assets/www/cordova.js +++ b/framework/assets/www/cordova.js @@ -1,5 +1,5 @@ // Platform: android -// 2.7.0rc1-75-g76065a1 +// 2.9.0rc1-0-g002f33d /* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file @@ -19,7 +19,7 @@ under the License. */ ;(function() { -var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-75-g76065a1'; +var CORDOVA_JS_BUILD_LABEL = '2.9.0rc1-0-g002f33d'; // file: lib/scripts/require.js var require, @@ -2396,11 +2396,7 @@ function initRead(reader, file) { reader._error = null; reader._readyState = FileReader.LOADING; - if (typeof file == 'string') { - // Deprecated in Cordova 2.4. - console.warn('Using a string argument with FileReader.readAs functions is deprecated.'); - reader._fileName = file; - } else if (typeof file.fullPath == 'string') { + if (typeof file.fullPath == 'string') { reader._fileName = file.fullPath; } else { reader._fileName = ''; @@ -3063,9 +3059,31 @@ FileWriter.prototype.abort = function() { /** * Writes data to the file * - * @param text to be written + * @param data text or blob to be written */ -FileWriter.prototype.write = function(text) { +FileWriter.prototype.write = function(data) { + + var isBinary = false; + + // If we don't have Blob or ArrayBuffer support, don't bother. + if (typeof window.Blob !== 'undefined' && typeof window.ArrayBuffer !== 'undefined') { + + // Check to see if the incoming data is a blob + if (data instanceof Blob) { + var that=this; + var fileReader = new FileReader(); + fileReader.onload = function() { + // Call this method again, with the arraybuffer as argument + FileWriter.prototype.write.call(that, this.result); + }; + fileReader.readAsArrayBuffer(data); + return; + } + + // Mark data type for safer transport over the binary bridge + isBinary = (data instanceof ArrayBuffer); + } + // Throw an exception if we are already writing a file if (this.readyState === FileWriter.WRITING) { throw new FileError(FileError.INVALID_STATE_ERR); @@ -3131,7 +3149,7 @@ FileWriter.prototype.write = function(text) { if (typeof me.onwriteend === "function") { me.onwriteend(new ProgressEvent("writeend", {"target":me})); } - }, "File", "write", [this.fileName, text, this.position]); + }, "File", "write", [this.fileName, data, this.position, isBinary]); }; /** @@ -3317,6 +3335,9 @@ InAppBrowser.prototype = { close: function (eventname) { exec(null, null, "InAppBrowser", "close", []); }, + show: function (eventname) { + exec(null, null, "InAppBrowser", "show", []); + }, addEventListener: function (eventname,f) { if (eventname in this.channels) { this.channels[eventname].subscribe(f); @@ -6780,11 +6801,21 @@ require('cordova/channel').onNativeReady.fire(); } } + function scriptErrorCallback(err) { + // Open Question: If a script path specified in cordova_plugins.js does not exist, do we fail for all? + // this is currently just continuing. + scriptCounter--; + if (scriptCounter === 0) { + onScriptLoadingComplete && onScriptLoadingComplete(); + } + } + // Helper function to inject a <script> tag. function injectScript(path) { scriptCounter++; var script = document.createElement("script"); script.onload = scriptLoadedCallback; + script.onerror = scriptErrorCallback; script.src = path; document.head.appendChild(script); } @@ -6796,10 +6827,10 @@ require('cordova/channel').onNativeReady.fire(); context.cordova.require('cordova/channel').onPluginsReady.fire(); } - // Handler for the cordova_plugins.json content. + // Handler for the cordova_plugins.js content. // See plugman's plugin_loader.js for the details of this object. // This function is only called if the really is a plugins array that isn't empty. - // Otherwise the XHR response handler will just call finishPluginLoading(). + // Otherwise the onerror response handler will just call finishPluginLoading(). function handlePluginsObject(modules, path) { // First create the callback for when all plugins are loaded. var mapper = context.cordova.require('cordova/modulemapper'); @@ -6807,26 +6838,31 @@ require('cordova/channel').onNativeReady.fire(); // Loop through all the plugins and then through their clobbers and merges. for (var i = 0; i < modules.length; i++) { var module = modules[i]; - if (!module) continue; - - if (module.clobbers && module.clobbers.length) { - for (var j = 0; j < module.clobbers.length; j++) { - mapper.clobbers(module.id, module.clobbers[j]); + if (module) { + try { + if (module.clobbers && module.clobbers.length) { + for (var j = 0; j < module.clobbers.length; j++) { + mapper.clobbers(module.id, module.clobbers[j]); + } + } + + if (module.merges && module.merges.length) { + for (var k = 0; k < module.merges.length; k++) { + mapper.merges(module.id, module.merges[k]); + } + } + + // Finally, if runs is truthy we want to simply require() the module. + // This can be skipped if it had any merges or clobbers, though, + // since the mapper will already have required the module. + if (module.runs && !(module.clobbers && module.clobbers.length) && !(module.merges && module.merges.length)) { + context.cordova.require(module.id); + } } - } - - if (module.merges && module.merges.length) { - for (var k = 0; k < module.merges.length; k++) { - mapper.merges(module.id, module.merges[k]); + catch(err) { + // error with module, most likely clobbers, should we continue? } } - - // Finally, if runs is truthy we want to simply require() the module. - // This can be skipped if it had any merges or clobbers, though, - // since the mapper will already have required the module. - if (module.runs && !(module.clobbers && module.clobbers.length) && !(module.merges && module.merges.length)) { - context.cordova.require(module.id); - } } finishPluginLoading(); @@ -6849,6 +6885,33 @@ require('cordova/channel').onNativeReady.fire(); break; } } + + var plugins_json = path + 'cordova_plugins.json'; + var plugins_js = path + 'cordova_plugins.js'; + + // One some phones (Windows) this xhr.open throws an Access Denied exception + // So lets keep trying, but with a script tag injection technique instead of XHR + var injectPluginScript = function injectPluginScript() { + try { + var script = document.createElement("script"); + script.onload = function(){ + var list = cordova.require("cordova/plugin_list"); + handlePluginsObject(list,path); + }; + script.onerror = function() { + // Error loading cordova_plugins.js, file not found or something + // this is an acceptable error, pre-3.0.0, so we just move on. + finishPluginLoading(); + }; + script.src = plugins_js; + document.head.appendChild(script); + + } catch(err){ + finishPluginLoading(); + } + } + + // Try to XHR the cordova_plugins.json file asynchronously. var xhr = new XMLHttpRequest(); xhr.onload = function() { @@ -6867,14 +6930,16 @@ require('cordova/channel').onNativeReady.fire(); } }; xhr.onerror = function() { - finishPluginLoading(); + // In this case, the json file was not present, but XHR was allowed, + // so we should still try the script injection technique with the js file + // in case that is there. + injectPluginScript(); }; - var plugins_json = path + 'cordova_plugins.json'; try { // we commented we were going to try, so let us actually try and catch xhr.open('GET', plugins_json, true); // Async xhr.send(); } catch(err){ - finishPluginLoading(); + injectPluginScript(); } }(window));
