You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by pu...@apache.org on 2012/11/07 01:15:20 UTC
[8/8] js commit: duplicate wp7 as wp
duplicate wp7 as wp
Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/commit/10d6ebc4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/tree/10d6ebc4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/diff/10d6ebc4
Branch: refs/heads/master
Commit: 10d6ebc4e272bef18eb2e197d925aa8ad0158e85
Parents: 0919268
Author: sgrebnov <se...@gmail.com>
Authored: Tue Nov 6 01:04:19 2012 +0400
Committer: sgrebnov <se...@gmail.com>
Committed: Tue Nov 6 01:04:19 2012 +0400
----------------------------------------------------------------------
Jakefile | 1 +
build/packager.js | 1 +
lib/wp/exec.js | 68 ++++++++
lib/wp/platform.js | 77 ++++++++
lib/wp/plugin/wp/CordovaCommandResult.js | 74 ++++++++
lib/wp/plugin/wp/CordovaMediaonStatus.js | 38 ++++
lib/wp/plugin/wp/DOMStorage.js | 195 +++++++++++++++++++++
lib/wp/plugin/wp/FileTransfer.js | 123 +++++++++++++
lib/wp/plugin/wp/FileUploadOptions.js | 47 +++++
lib/wp/plugin/wp/XHRPatch.js | 230 +++++++++++++++++++++++++
lib/wp/plugin/wp/console.js | 45 +++++
11 files changed, 899 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/Jakefile
----------------------------------------------------------------------
diff --git a/Jakefile b/Jakefile
index 2d89fa1..c678928 100644
--- a/Jakefile
+++ b/Jakefile
@@ -90,6 +90,7 @@ task('build', ['clean', 'hint', 'update-version'], function () {
packager.generate("blackberry",commitId);
packager.generate("ios",commitId);
packager.generate("wp7",commitId);
+ packager.generate("wp",commitId);
packager.generate("android",commitId);
packager.generate("bada",commitId);
packager.generate("tizen",commitId);
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/build/packager.js
----------------------------------------------------------------------
diff --git a/build/packager.js b/build/packager.js
index d5df739..20d7ed6 100644
--- a/build/packager.js
+++ b/build/packager.js
@@ -57,6 +57,7 @@ packager.bundle = function(platform, debug, commitId ) {
copyProps(modules, collectFiles(path.join('lib', 'blackberry', 'plugin'), 'plugin'));
copyProps(modules, collectFiles(path.join('lib', 'tizen', 'plugin', 'tizen'), 'plubin/tizen'));
copyProps(modules, collectFiles(path.join('lib', 'wp7', 'plugin', 'wp7'), 'plugin/wp7'));
+ copyProps(modules, collectFiles(path.join('lib', 'wp', 'plugin', 'wp'), 'plugin/wp'));
copyProps(modules, collectFiles(path.join('lib', 'windows8', 'plugin', 'windows8'), 'plugin/windows8'));
copyProps(modules, collectFiles(path.join('lib', 'ios', 'plugin', 'ios'), 'plugin/ios/'));
copyProps(modules, collectFiles(path.join('lib', 'bada', 'plugin', 'bada'), 'plugin/bada/'));
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/lib/wp/exec.js
----------------------------------------------------------------------
diff --git a/lib/wp/exec.js b/lib/wp/exec.js
new file mode 100644
index 0000000..96eb306
--- /dev/null
+++ b/lib/wp/exec.js
@@ -0,0 +1,68 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var cordova = require('cordova');
+
+/**
+ * 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
+ * Asynchronous: 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
+
+ */
+
+module.exports = function(success, fail, service, action, args) {
+
+ var callbackId = service + cordova.callbackId++;
+ if (typeof success == "function" || typeof fail == "function") {
+ cordova.callbacks[callbackId] = {success:success, fail:fail};
+ }
+ // generate a new command string, ex. DebugConsole/log/DebugConsole23/["wtf dude?"]
+ for(var n = 0; n < args.length; n++)
+ {
+ if(typeof args[n] !== "string")
+ {
+ args[n] = JSON.stringify(args[n]);
+ }
+ }
+ var command = service + "/" + action + "/" + callbackId + "/" + JSON.stringify(args);
+ // pass it on to Notify
+ try {
+ if(window.external) {
+ window.external.Notify(command);
+ }
+ else {
+ console.log("window.external not available :: command=" + command);
+ }
+ }
+ catch(e) {
+ console.log("Exception calling native with command :: " + command + " :: exception=" + e);
+ }
+};
+
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/lib/wp/platform.js
----------------------------------------------------------------------
diff --git a/lib/wp/platform.js b/lib/wp/platform.js
new file mode 100644
index 0000000..5f46ba6
--- /dev/null
+++ b/lib/wp/platform.js
@@ -0,0 +1,77 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var cordova = require('cordova'),
+ exec = require('cordova/exec');
+
+// specifically require the following patches :
+
+// localStorage+SessionStorage APIs
+require("cordova/plugin/wp/DOMStorage");
+
+// Fix XHR calls to local file-system
+require("cordova/plugin/wp/XHRPatch");
+
+
+module.exports = {
+ id: "wp",
+ initialize:function() {
+ window.alert = require("cordova/plugin/notification").alert;
+ window.FileReader = require("cordova/plugin/FileReader");
+ window.File = require("cordova/plugin/File");
+
+
+ // Inject a listener for the backbutton, and tell native to override the flag (true/false) when we have 1 or more, or 0, listeners
+ var backButtonChannel = cordova.addDocumentEventHandler('backbutton');
+ backButtonChannel.onHasSubscribersChange = function() {
+ exec(null, null, "CoreEvents", "overridebackbutton", [this.numHandlers == 1]);
+ };
+ },
+ objects: {
+ CordovaCommandResult: {
+ path:"cordova/plugin/wp/CordovaCommandResult"
+ },
+ CordovaMediaonStatus: {
+ path:"cordova/plugin/wp/CordovaMediaonStatus"
+ },
+ navigator: {
+ children: {
+ device: {
+ children:{
+ capture:{
+ path:"cordova/plugin/capture"
+ }
+ }
+ },
+ console: {
+ path: "cordova/plugin/wp/console"
+
+ }
+ }
+ },
+ console:{
+ path: "cordova/plugin/wp/console"
+ },
+ FileTransfer: {
+ path: 'cordova/plugin/wp/FileTransfer'
+ }
+ }
+};
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/lib/wp/plugin/wp/CordovaCommandResult.js
----------------------------------------------------------------------
diff --git a/lib/wp/plugin/wp/CordovaCommandResult.js b/lib/wp/plugin/wp/CordovaCommandResult.js
new file mode 100644
index 0000000..dae5279
--- /dev/null
+++ b/lib/wp/plugin/wp/CordovaCommandResult.js
@@ -0,0 +1,74 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+
+var cordova = require('cordova');
+var channel = require('cordova/channel');
+
+// singular WP callback function attached to window, status is used to determine if it is a success or error
+module.exports = function(status,callbackId,args,cast) {
+
+ if(status === "backbutton") {
+ // do not detach backbutton event, as we need to be able to catch exceptions
+ cordova.fireDocumentEvent("backbutton", undefined, true);
+ return "true";
+ }
+ else if(status === "resume") {
+ cordova.fireDocumentEvent('resume');
+ return "true";
+ }
+ else if(status === "pause") {
+ cordova.fireDocumentEvent('pause');
+ return "true";
+ }
+
+ var parsedArgs;
+ try
+ {
+ parsedArgs = JSON.parse(args);
+
+ }
+ catch(ex)
+ {
+ console.log("Parse error in CordovaCommandResult :: " + ex);
+ return;
+ }
+
+ try
+ {
+ // For some commands, the message is a JSON encoded string
+ // and other times, it is just a string, the try/catch handles the
+ // case where message was indeed, just a string.
+ parsedArgs.message = JSON.parse(parsedArgs.message);
+ }
+ catch(ex)
+ {
+
+ }
+ var safeStatus = parseInt(status, 10);
+ if(safeStatus === cordova.callbackStatus.NO_RESULT ||
+ safeStatus === cordova.callbackStatus.OK) {
+ cordova.callbackSuccess(callbackId,parsedArgs,cast);
+ }
+ else {
+ cordova.callbackError(callbackId,parsedArgs,cast);
+ }
+};
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/lib/wp/plugin/wp/CordovaMediaonStatus.js
----------------------------------------------------------------------
diff --git a/lib/wp/plugin/wp/CordovaMediaonStatus.js b/lib/wp/plugin/wp/CordovaMediaonStatus.js
new file mode 100644
index 0000000..8cd0879
--- /dev/null
+++ b/lib/wp/plugin/wp/CordovaMediaonStatus.js
@@ -0,0 +1,38 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+
+var cordova = require('cordova');
+var Media = require('cordova/plugin/Media');
+
+module.exports = function(args) {
+ try {
+
+ var res = JSON.parse(args);
+ if(res.msg == Media.MEDIA_ERROR) {
+ res.value = {'code':res.value};
+ }
+ Media.onStatus(res.id, res.msg, res.value);
+ }
+ catch(e) {
+ console.log("Error calling Media.onStatus :: " + e);
+ }
+};
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/lib/wp/plugin/wp/DOMStorage.js
----------------------------------------------------------------------
diff --git a/lib/wp/plugin/wp/DOMStorage.js b/lib/wp/plugin/wp/DOMStorage.js
new file mode 100644
index 0000000..b67ad40
--- /dev/null
+++ b/lib/wp/plugin/wp/DOMStorage.js
@@ -0,0 +1,195 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+(function(win,doc) {
+
+var docDomain = null;
+try {
+ docDomain = doc.domain;
+} catch (err) {
+ //console.log("caught exception trying to access document.domain");
+}
+
+// conditionally patch the window.localStorage and window.sessionStorage objects
+if (!docDomain || docDomain.length === 0) {
+
+ var DOMStorage = function(type) {
+ // default type is local
+ if(type == "sessionStorage") {
+ this._type = type;
+ }
+ Object.defineProperty( this, "length", {
+ configurable: true,
+ get: function(){ return this.getLength(); }
+ });
+ };
+
+ DOMStorage.prototype = {
+ _type:"localStorage",
+ _result:null,
+ keys:null,
+
+ onResult:function(key,valueStr) {
+ if(!this.keys) {
+ this.keys = [];
+ }
+ this._result = valueStr;
+ },
+
+ onKeysChanged:function(jsonKeys) {
+ this.keys = JSON.parse(jsonKeys);
+
+ var key;
+ for(var n = 0,len = this.keys.length; n < len; n++) {
+ key = this.keys[n];
+ if(!this.hasOwnProperty(key)) {
+ Object.defineProperty( this, key, {
+ configurable: true,
+ get: function(){ return this.getItem(key); },
+ set: function(val){ return this.setItem(key,val); }
+ });
+ }
+ }
+
+ },
+
+ initialize:function() {
+ window.external.Notify("DOMStorage/" + this._type + "/load/keys");
+ },
+
+ /*
+ The length attribute must return the number of key/value pairs currently present
+ in the list associated with the object.
+ */
+ getLength:function() {
+ if(!this.keys) {
+ this.initialize();
+ }
+ return this.keys.length;
+ },
+
+ /*
+ The key(n) method must return the name of the nth key in the list.
+ The order of keys is user-agent defined, but must be consistent within an object so long as the number of keys doesn't change.
+ (Thus, adding or removing a key may change the order of the keys, but merely changing the value of an existing key must not.)
+ If n is greater than or equal to the number of key/value pairs in the object, then this method must return null.
+ */
+ key:function(n) {
+ if(!this.keys) {
+ this.initialize();
+ }
+
+ if(n >= this.keys.length) {
+ return null;
+ } else {
+ return this.keys[n];
+ }
+ },
+
+ /*
+ The getItem(key) method must return the current value associated with the given key.
+ If the given key does not exist in the list associated with the object then this method must return null.
+ */
+ getItem:function(key) {
+ if(!this.keys) {
+ this.initialize();
+ }
+
+ var retVal = null;
+ if(this.keys.indexOf(key) > -1) {
+ window.external.Notify("DOMStorage/" + this._type + "/get/" + key);
+ retVal = window.unescape(decodeURIComponent(this._result));
+ this._result = null;
+ }
+ return retVal;
+ },
+ /*
+ The setItem(key, value) method must first check if a key/value pair with the given key already exists
+ in the list associated with the object.
+ If it does not, then a new key/value pair must be added to the list, with the given key and with its value set to value.
+ If the given key does exist in the list, then it must have its value updated to value.
+ If it couldn't set the new value, the method must raise an QUOTA_EXCEEDED_ERR exception.
+ (Setting could fail if, e.g., the user has disabled storage for the site, or if the quota has been exceeded.)
+ */
+ setItem:function(key,value) {
+ if(!this.keys) {
+ this.initialize();
+ }
+ window.external.Notify("DOMStorage/" + this._type + "/set/" + key + "/" + encodeURIComponent(window.escape(value)));
+ },
+
+ /*
+ The removeItem(key) method must cause the key/value pair with the given key to be removed from the list
+ associated with the object, if it exists.
+ If no item with that key exists, the method must do nothing.
+ */
+ removeItem:function(key) {
+ if(!this.keys) {
+ this.initialize();
+ }
+ var index = this.keys.indexOf(key);
+ if(index > -1) {
+ this.keys.splice(index,1);
+ // TODO: need sanity check for keys ? like 'clear','setItem', ...
+ window.external.Notify("DOMStorage/" + this._type + "/remove/" + key);
+ delete this[key];
+ }
+ },
+
+ /*
+ The clear() method must atomically cause the list associated with the object to be emptied of all
+ key/value pairs, if there are any.
+ If there are none, then the method must do nothing.
+ */
+ clear:function() {
+ if(!this.keys) {
+ this.initialize();
+ }
+
+ for(var n=0,len=this.keys.length; n < len;n++) {
+ // TODO: do we need a sanity check for keys ? like 'clear','setItem', ...
+ delete this[this.keys[n]];
+ }
+ this.keys = [];
+ window.external.Notify("DOMStorage/" + this._type + "/clear/");
+ }
+ };
+
+ // initialize DOMStorage
+
+ Object.defineProperty( window, "localStorage", {
+ writable: false,
+ configurable: false,
+ value:new DOMStorage("localStorage")
+ });
+ window.localStorage.initialize();
+
+ Object.defineProperty( window, "sessionStorage", {
+ writable: false,
+ configurable: false,
+ value:new DOMStorage("sessionStorage")
+ });
+ window.sessionStorage.initialize();
+}
+
+})(window, document);
+
+module.exports = null;
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/lib/wp/plugin/wp/FileTransfer.js
----------------------------------------------------------------------
diff --git a/lib/wp/plugin/wp/FileTransfer.js b/lib/wp/plugin/wp/FileTransfer.js
new file mode 100644
index 0000000..b2f8686
--- /dev/null
+++ b/lib/wp/plugin/wp/FileTransfer.js
@@ -0,0 +1,123 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var exec = require('cordova/exec'),
+ FileTransferError = require('cordova/plugin/FileTransferError');
+
+// Note that the only difference between this and the default implementation is the
+// object literal passed to exec() in upload - jm
+
+/**
+ * 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
+* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+*/
+
+FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) {
+
+ // sanity parameter checking
+ if (!filePath || !server) throw new Error("FileTransfer.upload requires filePath and server URL parameters at the minimum.");
+ // 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 are specified, and NOT a string already, we will stringify it.
+ if(options.params && typeof options.params != typeof "") {
+ var arrParams = [];
+ for(var v in options.params) {
+ arrParams.push(v + "=" + options.params[v]);
+ }
+ params = encodeURI(arrParams.join("&"));
+ }
+ }
+
+ var fail = function(e) {
+ var error = new FileTransferError(e.code, e.source, e.target, e.http_status);
+ errorCallback(error);
+ };
+ exec(successCallback, fail, 'FileTransfer', 'upload', [{"filePath":filePath,
+ "server":server,
+ "fileKey":fileKey,
+ "fileName":fileName,
+ "mimeType":mimeType,
+ "params":params,
+ "trustAllHosts":trustAllHosts,
+ "chunkedMode":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) {
+ // sanity parameter checking
+ if (!source || !target) throw new Error("FileTransfer.download requires source URI and target URI parameters at the minimum.");
+ var win = function(result) {
+ var entry = null;
+ if (result.isDirectory) {
+ entry = new (require('cordova/plugin/DirectoryEntry'))();
+ }
+ else if (result.isFile) {
+ entry = new (require('cordova/plugin/FileEntry'))();
+ }
+ entry.isDirectory = result.isDirectory;
+ entry.isFile = result.isFile;
+ entry.name = result.name;
+ entry.fullPath = result.fullPath;
+ successCallback(entry);
+ };
+
+ var fail = function(e) {
+ var error = new FileTransferError(e.code, e.source, e.target, e.http_status);
+ errorCallback(error);
+ };
+
+ exec(win, errorCallback, 'FileTransfer', 'download', [source, target]);
+};
+
+
+module.exports = FileTransfer;
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/lib/wp/plugin/wp/FileUploadOptions.js
----------------------------------------------------------------------
diff --git a/lib/wp/plugin/wp/FileUploadOptions.js b/lib/wp/plugin/wp/FileUploadOptions.js
new file mode 100644
index 0000000..44b0978
--- /dev/null
+++ b/lib/wp/plugin/wp/FileUploadOptions.js
@@ -0,0 +1,47 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/**
+ * 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;
+
+ if(params && typeof params != typeof "") {
+ var arrParams = [];
+ for(var v in params) {
+ arrParams.push(v + "=" + params[v]);
+ }
+ this.params = encodeURIComponent(arrParams.join("&"));
+ }
+ else {
+ this.params = params || null;
+ }
+};
+
+module.exports = FileUploadOptions;
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/lib/wp/plugin/wp/XHRPatch.js
----------------------------------------------------------------------
diff --git a/lib/wp/plugin/wp/XHRPatch.js b/lib/wp/plugin/wp/XHRPatch.js
new file mode 100644
index 0000000..9c9d62a
--- /dev/null
+++ b/lib/wp/plugin/wp/XHRPatch.js
@@ -0,0 +1,230 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+// TODO: the build process will implicitly wrap this in a define() call
+// with a closure of its own; do you need this extra closure?
+
+var LocalFileSystem = require('cordova/plugin/LocalFileSystem');
+
+(function (win, doc) {
+
+var docDomain = null;
+try {
+ docDomain = doc.domain;
+} catch (err) {
+ //console.log("caught exception trying to access document.domain");
+}
+
+if (!docDomain || docDomain.length === 0) {
+
+ var aliasXHR = win.XMLHttpRequest;
+
+ win.XMLHttpRequest = function () { };
+ win.XMLHttpRequest.noConflict = aliasXHR;
+ win.XMLHttpRequest.UNSENT = 0;
+ win.XMLHttpRequest.OPENED = 1;
+ win.XMLHttpRequest.HEADERS_RECEIVED = 2;
+ win.XMLHttpRequest.LOADING = 3;
+ win.XMLHttpRequest.DONE = 4;
+
+ win.XMLHttpRequest.prototype = {
+ UNSENT: 0,
+ OPENED: 1,
+ HEADERS_RECEIVED: 2,
+ LOADING: 3,
+ DONE: 4,
+
+ isAsync: false,
+ onreadystatechange: null,
+ readyState: 0,
+ _url: "",
+ timeout: 0,
+ withCredentials: false,
+ _requestHeaders: null,
+ open: function (reqType, uri, isAsync, user, password) {
+
+ if (uri && uri.indexOf("http") === 0) {
+ if (!this.wrappedXHR) {
+ this.wrappedXHR = new aliasXHR();
+ var self = this;
+
+ // timeout
+ if (this.timeout > 0) {
+ this.wrappedXHR.timeout = this.timeout;
+ }
+ Object.defineProperty(this, "timeout", {
+ set: function (val) {
+ this.wrappedXHR.timeout = val;
+ },
+ get: function () {
+ return this.wrappedXHR.timeout;
+ }
+ });
+
+
+
+ if (this.withCredentials) {
+ this.wrappedXHR.withCredentials = this.withCredentials;
+ }
+ Object.defineProperty(this, "withCredentials", {
+ set: function (val) {
+ this.wrappedXHR.withCredentials = val;
+ },
+ get: function () {
+ return this.wrappedXHR.withCredentials;
+ }
+ });
+
+
+ Object.defineProperty(this, "status", { get: function () {
+ return this.wrappedXHR.status;
+ }
+ });
+ Object.defineProperty(this, "responseText", { get: function () {
+ return this.wrappedXHR.responseText;
+ }
+ });
+ Object.defineProperty(this, "statusText", { get: function () {
+ return this.wrappedXHR.statusText;
+ }
+ });
+
+ Object.defineProperty(this, "responseXML", { get: function () {
+ return this.wrappedXHR.responseXML;
+ }
+ });
+
+ this.getResponseHeader = function (header) {
+ return this.wrappedXHR.getResponseHeader(header);
+ };
+ this.getAllResponseHeaders = function () {
+ return this.wrappedXHR.getAllResponseHeaders();
+ };
+
+ this.wrappedXHR.onreadystatechange = function () {
+ self.changeReadyState(self.wrappedXHR.readyState);
+ };
+ }
+ return this.wrappedXHR.open(reqType, uri, isAsync, user, password);
+ }
+ else {
+ // x-wmapp1://app/www/page2.html
+ // need to work some magic on the actual url/filepath
+ var newUrl = uri;
+ if (newUrl.indexOf(":/") > -1) {
+ newUrl = newUrl.split(":/")[1];
+ }
+ // prefix relative urls to our physical root
+ if(newUrl.indexOf("app/www/") < 0)
+ {
+ newUrl = "app/www/" + newUrl;
+ }
+
+ if (newUrl.lastIndexOf("/") === newUrl.length - 1) {
+ newUrl += "index.html"; // default page is index.html, when call is to a dir/ ( why not ...? )
+ }
+ this._url = newUrl;
+ }
+ },
+ statusText: "",
+ changeReadyState: function (newState) {
+ this.readyState = newState;
+ if (this.onreadystatechange) {
+ this.onreadystatechange();
+ }
+ },
+ setRequestHeader: function (header, value) {
+ if (this.wrappedXHR) {
+ this.wrappedXHR.setRequestHeader(header, value);
+ }
+ },
+ getResponseHeader: function (header) {
+ return this.wrappedXHR ? this.wrappedXHR.getResponseHeader(header) : "";
+ },
+ getAllResponseHeaders: function () {
+ return this.wrappedXHR ? this.wrappedXHR.getAllResponseHeaders() : "";
+ },
+ responseText: "",
+ responseXML: "",
+ onResult: function (res) {
+ this.status = 200;
+ if(typeof res == "object")
+ { // callback result handler may have already parsed this from a string-> a JSON object,
+ // if so, we need to restore its stringyness, as handlers are expecting string data.
+ // especially if used with jQ -> $.getJSON
+ res = JSON.stringify(res);
+ }
+ this.responseText = res;
+ this.responseXML = res;
+ this.changeReadyState(this.DONE);
+ },
+ onError: function (err) {
+ this.status = 404;
+ this.changeReadyState(this.DONE);
+ },
+
+ abort: function () {
+ if (this.wrappedXHR) {
+ return this.wrappedXHR.abort();
+ }
+ },
+
+ send: function (data) {
+ if (this.wrappedXHR) {
+ return this.wrappedXHR.send(data);
+ }
+ else {
+ this.changeReadyState(this.OPENED);
+
+ var alias = this;
+
+ var fail = function fail(evt) {
+ alias.onError(evt.code);
+ };
+
+ var gotFile = function gotFile(file) {
+ var reader = new FileReader();
+ reader.onloadend = function (evt) {
+ alias.onResult.apply(alias,[evt.target.result]);
+ };
+ reader.readAsText(file);
+ };
+
+ var gotEntry = function gotEntry(entry) {
+ entry.file(gotFile, fail);
+ };
+
+ var gotFS = function gotFS(fs) {
+ fs.root.getFile(alias._url, null, gotEntry, fail);
+ };
+
+ window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
+
+ }
+ },
+ status: 404
+ };
+} // if doc domain
+
+// end closure wrap
+})(window, document);
+
+module.exports = null;
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/10d6ebc4/lib/wp/plugin/wp/console.js
----------------------------------------------------------------------
diff --git a/lib/wp/plugin/wp/console.js b/lib/wp/plugin/wp/console.js
new file mode 100644
index 0000000..20197d5
--- /dev/null
+++ b/lib/wp/plugin/wp/console.js
@@ -0,0 +1,45 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+
+var exec = require('cordova/exec'),
+ channel = require('cordova/channel');
+var cordova = require("cordova");
+
+var debugConsole = {
+ log:function(msg){
+ exec(null,null,"DebugConsole","log",msg);
+ },
+ warn:function(msg){
+ exec(null,null,"DebugConsole","warn",msg);
+ },
+ error:function(msg){
+ exec(null,null,"DebugConsole","error",msg);
+ }
+};
+
+var oldOnError = window.onerror;
+window.onerror = function(msg,fileName,line) {
+ oldOnError && oldOnError(msg,fileName,line);
+ debugConsole.error(msg + " file:" + fileName + " Line:" + line);
+};
+
+module.exports = debugConsole;