This commit is contained in:
Joe Bowser 2013-06-20 16:33:17 -07:00
commit b032dcca16

View File

@ -1,5 +1,5 @@
// Platform: android // Platform: android
// 2.7.0rc1-75-g76065a1 // 2.9.0rc1-0-g002f33d
/* /*
Licensed to the Apache Software Foundation (ASF) under one Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file or more contributor license agreements. See the NOTICE file
@ -19,7 +19,7 @@
under the License. under the License.
*/ */
;(function() { ;(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 // file: lib/scripts/require.js
var require, var require,
@ -2396,11 +2396,7 @@ function initRead(reader, file) {
reader._error = null; reader._error = null;
reader._readyState = FileReader.LOADING; reader._readyState = FileReader.LOADING;
if (typeof file == 'string') { if (typeof file.fullPath == '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') {
reader._fileName = file.fullPath; reader._fileName = file.fullPath;
} else { } else {
reader._fileName = ''; reader._fileName = '';
@ -3063,9 +3059,31 @@ FileWriter.prototype.abort = function() {
/** /**
* Writes data to the file * 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 // Throw an exception if we are already writing a file
if (this.readyState === FileWriter.WRITING) { if (this.readyState === FileWriter.WRITING) {
throw new FileError(FileError.INVALID_STATE_ERR); throw new FileError(FileError.INVALID_STATE_ERR);
@ -3131,7 +3149,7 @@ FileWriter.prototype.write = function(text) {
if (typeof me.onwriteend === "function") { if (typeof me.onwriteend === "function") {
me.onwriteend(new ProgressEvent("writeend", {"target":me})); 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) { close: function (eventname) {
exec(null, null, "InAppBrowser", "close", []); exec(null, null, "InAppBrowser", "close", []);
}, },
show: function (eventname) {
exec(null, null, "InAppBrowser", "show", []);
},
addEventListener: function (eventname,f) { addEventListener: function (eventname,f) {
if (eventname in this.channels) { if (eventname in this.channels) {
this.channels[eventname].subscribe(f); 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. // Helper function to inject a <script> tag.
function injectScript(path) { function injectScript(path) {
scriptCounter++; scriptCounter++;
var script = document.createElement("script"); var script = document.createElement("script");
script.onload = scriptLoadedCallback; script.onload = scriptLoadedCallback;
script.onerror = scriptErrorCallback;
script.src = path; script.src = path;
document.head.appendChild(script); document.head.appendChild(script);
} }
@ -6796,10 +6827,10 @@ require('cordova/channel').onNativeReady.fire();
context.cordova.require('cordova/channel').onPluginsReady.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. // 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. // 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) { function handlePluginsObject(modules, path) {
// First create the callback for when all plugins are loaded. // First create the callback for when all plugins are loaded.
var mapper = context.cordova.require('cordova/modulemapper'); 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. // Loop through all the plugins and then through their clobbers and merges.
for (var i = 0; i < modules.length; i++) { for (var i = 0; i < modules.length; i++) {
var module = modules[i]; var module = modules[i];
if (!module) continue; 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.clobbers && module.clobbers.length) { if (module.merges && module.merges.length) {
for (var j = 0; j < module.clobbers.length; j++) { for (var k = 0; k < module.merges.length; k++) {
mapper.clobbers(module.id, module.clobbers[j]); 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);
}
} }
} catch(err) {
// error with module, most likely clobbers, should we continue?
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);
}
} }
finishPluginLoading(); finishPluginLoading();
@ -6849,6 +6885,33 @@ require('cordova/channel').onNativeReady.fire();
break; 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. // Try to XHR the cordova_plugins.json file asynchronously.
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.onload = function() { xhr.onload = function() {
@ -6867,14 +6930,16 @@ require('cordova/channel').onNativeReady.fire();
} }
}; };
xhr.onerror = function() { 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 try { // we commented we were going to try, so let us actually try and catch
xhr.open('GET', plugins_json, true); // Async xhr.open('GET', plugins_json, true); // Async
xhr.send(); xhr.send();
} catch(err){ } catch(err){
finishPluginLoading(); injectPluginScript();
} }
}(window)); }(window));