summaryrefslogtreecommitdiff
path: root/plugins/cordova-plugin-file/www
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/cordova-plugin-file/www')
-rw-r--r--plugins/cordova-plugin-file/www/DirectoryEntry.js117
-rw-r--r--plugins/cordova-plugin-file/www/DirectoryReader.js73
-rw-r--r--plugins/cordova-plugin-file/www/Entry.js260
-rw-r--r--plugins/cordova-plugin-file/www/File.js79
-rw-r--r--plugins/cordova-plugin-file/www/FileEntry.js81
-rw-r--r--plugins/cordova-plugin-file/www/FileError.js46
-rw-r--r--plugins/cordova-plugin-file/www/FileReader.js390
-rw-r--r--plugins/cordova-plugin-file/www/FileSystem.js48
-rw-r--r--plugins/cordova-plugin-file/www/FileUploadOptions.js41
-rw-r--r--plugins/cordova-plugin-file/www/FileUploadResult.js30
-rw-r--r--plugins/cordova-plugin-file/www/FileWriter.js302
-rw-r--r--plugins/cordova-plugin-file/www/Flags.js36
-rw-r--r--plugins/cordova-plugin-file/www/LocalFileSystem.js23
-rw-r--r--plugins/cordova-plugin-file/www/Metadata.js40
-rw-r--r--plugins/cordova-plugin-file/www/ProgressEvent.js67
-rw-r--r--plugins/cordova-plugin-file/www/android/FileSystem.js36
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/FileProxy.js51
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/FileSystem.js46
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/copyTo.js141
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/createEntryFromNative.js77
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/getDirectory.js72
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/getFile.js57
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/getFileMetadata.js65
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/getMetadata.js54
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/getParent.js57
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/info.js52
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/moveTo.js39
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/readAsArrayBuffer.js68
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/readAsBinaryString.js68
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/readAsDataURL.js65
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/readAsText.js77
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/readEntries.js71
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/remove.js61
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/removeRecursively.js62
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/requestAllFileSystems.js42
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/requestAnimationFrame.js38
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/requestFileSystem.js53
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js172
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/setMetadata.js33
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/truncate.js74
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/write.js73
-rw-r--r--plugins/cordova-plugin-file/www/browser/FileSystem.js31
-rw-r--r--plugins/cordova-plugin-file/www/browser/Preparing.js187
-rw-r--r--plugins/cordova-plugin-file/www/fileSystemPaths.js63
-rw-r--r--plugins/cordova-plugin-file/www/fileSystems-roots.js44
-rw-r--r--plugins/cordova-plugin-file/www/fileSystems.js25
-rw-r--r--plugins/cordova-plugin-file/www/firefoxos/FileSystem.js29
-rw-r--r--plugins/cordova-plugin-file/www/ios/FileSystem.js30
-rw-r--r--plugins/cordova-plugin-file/www/requestFileSystem.js76
-rw-r--r--plugins/cordova-plugin-file/www/resolveLocalFileSystemURI.js87
-rw-r--r--plugins/cordova-plugin-file/www/ubuntu/FileSystem.js34
-rw-r--r--plugins/cordova-plugin-file/www/ubuntu/FileWriter.js135
-rw-r--r--plugins/cordova-plugin-file/www/ubuntu/fileSystems-roots.js53
-rw-r--r--plugins/cordova-plugin-file/www/wp/FileUploadOptions.js49
54 files changed, 4180 insertions, 0 deletions
diff --git a/plugins/cordova-plugin-file/www/DirectoryEntry.js b/plugins/cordova-plugin-file/www/DirectoryEntry.js
new file mode 100644
index 00000000..62f468ab
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/DirectoryEntry.js
@@ -0,0 +1,117 @@
+/*
+ *
+ * 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 argscheck = require('cordova/argscheck'),
+ utils = require('cordova/utils'),
+ exec = require('cordova/exec'),
+ Entry = require('./Entry'),
+ FileError = require('./FileError'),
+ DirectoryReader = require('./DirectoryReader');
+
+/**
+ * An interface representing a directory on the file system.
+ *
+ * {boolean} isFile always false (readonly)
+ * {boolean} isDirectory always true (readonly)
+ * {DOMString} name of the directory, excluding the path leading to it (readonly)
+ * {DOMString} fullPath the absolute full path to the directory (readonly)
+ * {FileSystem} filesystem on which the directory resides (readonly)
+ */
+var DirectoryEntry = function(name, fullPath, fileSystem, nativeURL) {
+
+ // add trailing slash if it is missing
+ if ((fullPath) && !/\/$/.test(fullPath)) {
+ fullPath += "/";
+ }
+ // add trailing slash if it is missing
+ if (nativeURL && !/\/$/.test(nativeURL)) {
+ nativeURL += "/";
+ }
+ DirectoryEntry.__super__.constructor.call(this, false, true, name, fullPath, fileSystem, nativeURL);
+};
+
+utils.extend(DirectoryEntry, Entry);
+
+/**
+ * Creates a new DirectoryReader to read entries from this directory
+ */
+DirectoryEntry.prototype.createReader = function() {
+ return new DirectoryReader(this.toInternalURL());
+};
+
+/**
+ * Creates or looks up a directory
+ *
+ * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a directory
+ * @param {Flags} options to create or exclusively create the directory
+ * @param {Function} successCallback is called with the new entry
+ * @param {Function} errorCallback is called with a FileError
+ */
+DirectoryEntry.prototype.getDirectory = function(path, options, successCallback, errorCallback) {
+ argscheck.checkArgs('sOFF', 'DirectoryEntry.getDirectory', arguments);
+ var fs = this.filesystem;
+ var win = successCallback && function(result) {
+ var entry = new DirectoryEntry(result.name, result.fullPath, fs, result.nativeURL);
+ successCallback(entry);
+ };
+ var fail = errorCallback && function(code) {
+ errorCallback(new FileError(code));
+ };
+ exec(win, fail, "File", "getDirectory", [this.toInternalURL(), path, options]);
+};
+
+/**
+ * Deletes a directory and all of it's contents
+ *
+ * @param {Function} successCallback is called with no parameters
+ * @param {Function} errorCallback is called with a FileError
+ */
+DirectoryEntry.prototype.removeRecursively = function(successCallback, errorCallback) {
+ argscheck.checkArgs('FF', 'DirectoryEntry.removeRecursively', arguments);
+ var fail = errorCallback && function(code) {
+ errorCallback(new FileError(code));
+ };
+ exec(successCallback, fail, "File", "removeRecursively", [this.toInternalURL()]);
+};
+
+/**
+ * Creates or looks up a file
+ *
+ * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a file
+ * @param {Flags} options to create or exclusively create the file
+ * @param {Function} successCallback is called with the new entry
+ * @param {Function} errorCallback is called with a FileError
+ */
+DirectoryEntry.prototype.getFile = function(path, options, successCallback, errorCallback) {
+ argscheck.checkArgs('sOFF', 'DirectoryEntry.getFile', arguments);
+ var fs = this.filesystem;
+ var win = successCallback && function(result) {
+ var FileEntry = require('./FileEntry');
+ var entry = new FileEntry(result.name, result.fullPath, fs, result.nativeURL);
+ successCallback(entry);
+ };
+ var fail = errorCallback && function(code) {
+ errorCallback(new FileError(code));
+ };
+ exec(win, fail, "File", "getFile", [this.toInternalURL(), path, options]);
+};
+
+module.exports = DirectoryEntry;
diff --git a/plugins/cordova-plugin-file/www/DirectoryReader.js b/plugins/cordova-plugin-file/www/DirectoryReader.js
new file mode 100644
index 00000000..2894c9a3
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/DirectoryReader.js
@@ -0,0 +1,73 @@
+/*
+ *
+ * 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'),
+ FileError = require('./FileError') ;
+
+/**
+ * An interface that lists the files and directories in a directory.
+ */
+function DirectoryReader(localURL) {
+ this.localURL = localURL || null;
+ this.hasReadEntries = false;
+}
+
+/**
+ * Returns a list of entries from a directory.
+ *
+ * @param {Function} successCallback is called with a list of entries
+ * @param {Function} errorCallback is called with a FileError
+ */
+DirectoryReader.prototype.readEntries = function(successCallback, errorCallback) {
+ // If we've already read and passed on this directory's entries, return an empty list.
+ if (this.hasReadEntries) {
+ successCallback([]);
+ return;
+ }
+ var reader = this;
+ var win = typeof successCallback !== 'function' ? null : function(result) {
+ var retVal = [];
+ for (var i=0; i<result.length; i++) {
+ var entry = null;
+ if (result[i].isDirectory) {
+ entry = new (require('./DirectoryEntry'))();
+ }
+ else if (result[i].isFile) {
+ entry = new (require('./FileEntry'))();
+ }
+ entry.isDirectory = result[i].isDirectory;
+ entry.isFile = result[i].isFile;
+ entry.name = result[i].name;
+ entry.fullPath = result[i].fullPath;
+ entry.filesystem = new (require('./FileSystem'))(result[i].filesystemName);
+ entry.nativeURL = result[i].nativeURL;
+ retVal.push(entry);
+ }
+ reader.hasReadEntries = true;
+ successCallback(retVal);
+ };
+ var fail = typeof errorCallback !== 'function' ? null : function(code) {
+ errorCallback(new FileError(code));
+ };
+ exec(win, fail, "File", "readEntries", [this.localURL]);
+};
+
+module.exports = DirectoryReader;
diff --git a/plugins/cordova-plugin-file/www/Entry.js b/plugins/cordova-plugin-file/www/Entry.js
new file mode 100644
index 00000000..9cdc8774
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/Entry.js
@@ -0,0 +1,260 @@
+/*
+ *
+ * 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 argscheck = require('cordova/argscheck'),
+ exec = require('cordova/exec'),
+ FileError = require('./FileError'),
+ Metadata = require('./Metadata');
+
+/**
+ * Represents a file or directory on the local file system.
+ *
+ * @param isFile
+ * {boolean} true if Entry is a file (readonly)
+ * @param isDirectory
+ * {boolean} true if Entry is a directory (readonly)
+ * @param name
+ * {DOMString} name of the file or directory, excluding the path
+ * leading to it (readonly)
+ * @param fullPath
+ * {DOMString} the absolute full path to the file or directory
+ * (readonly)
+ * @param fileSystem
+ * {FileSystem} the filesystem on which this entry resides
+ * (readonly)
+ * @param nativeURL
+ * {DOMString} an alternate URL which can be used by native
+ * webview controls, for example media players.
+ * (optional, readonly)
+ */
+function Entry(isFile, isDirectory, name, fullPath, fileSystem, nativeURL) {
+ this.isFile = !!isFile;
+ this.isDirectory = !!isDirectory;
+ this.name = name || '';
+ this.fullPath = fullPath || '';
+ this.filesystem = fileSystem || null;
+ this.nativeURL = nativeURL || null;
+}
+
+/**
+ * Look up the metadata of the entry.
+ *
+ * @param successCallback
+ * {Function} is called with a Metadata object
+ * @param errorCallback
+ * {Function} is called with a FileError
+ */
+Entry.prototype.getMetadata = function(successCallback, errorCallback) {
+ argscheck.checkArgs('FF', 'Entry.getMetadata', arguments);
+ var success = successCallback && function(entryMetadata) {
+ var metadata = new Metadata({
+ size: entryMetadata.size,
+ modificationTime: entryMetadata.lastModifiedDate
+ });
+ successCallback(metadata);
+ };
+ var fail = errorCallback && function(code) {
+ errorCallback(new FileError(code));
+ };
+ exec(success, fail, "File", "getFileMetadata", [this.toInternalURL()]);
+};
+
+/**
+ * Set the metadata of the entry.
+ *
+ * @param successCallback
+ * {Function} is called with a Metadata object
+ * @param errorCallback
+ * {Function} is called with a FileError
+ * @param metadataObject
+ * {Object} keys and values to set
+ */
+Entry.prototype.setMetadata = function(successCallback, errorCallback, metadataObject) {
+ argscheck.checkArgs('FFO', 'Entry.setMetadata', arguments);
+ exec(successCallback, errorCallback, "File", "setMetadata", [this.toInternalURL(), metadataObject]);
+};
+
+/**
+ * Move a file or directory to a new location.
+ *
+ * @param parent
+ * {DirectoryEntry} the directory to which to move this entry
+ * @param newName
+ * {DOMString} new name of the entry, defaults to the current name
+ * @param successCallback
+ * {Function} called with the new DirectoryEntry object
+ * @param errorCallback
+ * {Function} called with a FileError
+ */
+Entry.prototype.moveTo = function(parent, newName, successCallback, errorCallback) {
+ argscheck.checkArgs('oSFF', 'Entry.moveTo', arguments);
+ var fail = errorCallback && function(code) {
+ errorCallback(new FileError(code));
+ };
+ var filesystem = this.filesystem,
+ srcURL = this.toInternalURL(),
+ // entry name
+ name = newName || this.name,
+ success = function(entry) {
+ if (entry) {
+ if (successCallback) {
+ // create appropriate Entry object
+ var newFSName = entry.filesystemName || (entry.filesystem && entry.filesystem.name);
+ var fs = newFSName ? new FileSystem(newFSName, { name: "", fullPath: "/" }) : new FileSystem(parent.filesystem.name, { name: "", fullPath: "/" });
+ var result = (entry.isDirectory) ? new (require('./DirectoryEntry'))(entry.name, entry.fullPath, fs, entry.nativeURL) : new (require('cordova-plugin-file.FileEntry'))(entry.name, entry.fullPath, fs, entry.nativeURL);
+ successCallback(result);
+ }
+ }
+ else {
+ // no Entry object returned
+ fail && fail(FileError.NOT_FOUND_ERR);
+ }
+ };
+
+ // copy
+ exec(success, fail, "File", "moveTo", [srcURL, parent.toInternalURL(), name]);
+};
+
+/**
+ * Copy a directory to a different location.
+ *
+ * @param parent
+ * {DirectoryEntry} the directory to which to copy the entry
+ * @param newName
+ * {DOMString} new name of the entry, defaults to the current name
+ * @param successCallback
+ * {Function} called with the new Entry object
+ * @param errorCallback
+ * {Function} called with a FileError
+ */
+Entry.prototype.copyTo = function(parent, newName, successCallback, errorCallback) {
+ argscheck.checkArgs('oSFF', 'Entry.copyTo', arguments);
+ var fail = errorCallback && function(code) {
+ errorCallback(new FileError(code));
+ };
+ var filesystem = this.filesystem,
+ srcURL = this.toInternalURL(),
+ // entry name
+ name = newName || this.name,
+ // success callback
+ success = function(entry) {
+ if (entry) {
+ if (successCallback) {
+ // create appropriate Entry object
+ var newFSName = entry.filesystemName || (entry.filesystem && entry.filesystem.name);
+ var fs = newFSName ? new FileSystem(newFSName, { name: "", fullPath: "/" }) : new FileSystem(parent.filesystem.name, { name: "", fullPath: "/" });
+ var result = (entry.isDirectory) ? new (require('./DirectoryEntry'))(entry.name, entry.fullPath, fs, entry.nativeURL) : new (require('cordova-plugin-file.FileEntry'))(entry.name, entry.fullPath, fs, entry.nativeURL);
+ successCallback(result);
+ }
+ }
+ else {
+ // no Entry object returned
+ fail && fail(FileError.NOT_FOUND_ERR);
+ }
+ };
+
+ // copy
+ exec(success, fail, "File", "copyTo", [srcURL, parent.toInternalURL(), name]);
+};
+
+/**
+ * Return a URL that can be passed across the bridge to identify this entry.
+ */
+Entry.prototype.toInternalURL = function() {
+ if (this.filesystem && this.filesystem.__format__) {
+ return this.filesystem.__format__(this.fullPath, this.nativeURL);
+ }
+};
+
+/**
+ * Return a URL that can be used to identify this entry.
+ * Use a URL that can be used to as the src attribute of a <video> or
+ * <audio> tag. If that is not possible, construct a cdvfile:// URL.
+ */
+Entry.prototype.toURL = function() {
+ if (this.nativeURL) {
+ return this.nativeURL;
+ }
+ // fullPath attribute may contain the full URL in the case that
+ // toInternalURL fails.
+ return this.toInternalURL() || "file://localhost" + this.fullPath;
+};
+
+/**
+ * Backwards-compatibility: In v1.0.0 - 1.0.2, .toURL would only return a
+ * cdvfile:// URL, and this method was necessary to obtain URLs usable by the
+ * webview.
+ * See CB-6051, CB-6106, CB-6117, CB-6152, CB-6199, CB-6201, CB-6243, CB-6249,
+ * and CB-6300.
+ */
+Entry.prototype.toNativeURL = function() {
+ console.log("DEPRECATED: Update your code to use 'toURL'");
+ return this.toURL();
+};
+
+/**
+ * Returns a URI that can be used to identify this entry.
+ *
+ * @param {DOMString} mimeType for a FileEntry, the mime type to be used to interpret the file, when loaded through this URI.
+ * @return uri
+ */
+Entry.prototype.toURI = function(mimeType) {
+ console.log("DEPRECATED: Update your code to use 'toURL'");
+ return this.toURL();
+};
+
+/**
+ * Remove a file or directory. It is an error to attempt to delete a
+ * directory that is not empty. It is an error to attempt to delete a
+ * root directory of a file system.
+ *
+ * @param successCallback {Function} called with no parameters
+ * @param errorCallback {Function} called with a FileError
+ */
+Entry.prototype.remove = function(successCallback, errorCallback) {
+ argscheck.checkArgs('FF', 'Entry.remove', arguments);
+ var fail = errorCallback && function(code) {
+ errorCallback(new FileError(code));
+ };
+ exec(successCallback, fail, "File", "remove", [this.toInternalURL()]);
+};
+
+/**
+ * Look up the parent DirectoryEntry of this entry.
+ *
+ * @param successCallback {Function} called with the parent DirectoryEntry object
+ * @param errorCallback {Function} called with a FileError
+ */
+Entry.prototype.getParent = function(successCallback, errorCallback) {
+ argscheck.checkArgs('FF', 'Entry.getParent', arguments);
+ var fs = this.filesystem;
+ var win = successCallback && function(result) {
+ var DirectoryEntry = require('./DirectoryEntry');
+ var entry = new DirectoryEntry(result.name, result.fullPath, fs, result.nativeURL);
+ successCallback(entry);
+ };
+ var fail = errorCallback && function(code) {
+ errorCallback(new FileError(code));
+ };
+ exec(win, fail, "File", "getParent", [this.toInternalURL()]);
+};
+
+module.exports = Entry;
diff --git a/plugins/cordova-plugin-file/www/File.js b/plugins/cordova-plugin-file/www/File.js
new file mode 100644
index 00000000..82ff7a78
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/File.js
@@ -0,0 +1,79 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/**
+ * Constructor.
+ * name {DOMString} name of the file, without path information
+ * fullPath {DOMString} the full path of the file, including the name
+ * type {DOMString} mime type
+ * lastModifiedDate {Date} last modified date
+ * size {Number} size of the file in bytes
+ */
+
+var File = function(name, localURL, type, lastModifiedDate, size){
+ this.name = name || '';
+ this.localURL = localURL || null;
+ this.type = type || null;
+ this.lastModified = lastModifiedDate || null;
+ // For backwards compatibility, store the timestamp in lastModifiedDate as well
+ this.lastModifiedDate = lastModifiedDate || null;
+ this.size = size || 0;
+
+ // These store the absolute start and end for slicing the file.
+ this.start = 0;
+ this.end = this.size;
+};
+
+/**
+ * Returns a "slice" of the file. Since Cordova Files don't contain the actual
+ * content, this really returns a File with adjusted start and end.
+ * Slices of slices are supported.
+ * start {Number} The index at which to start the slice (inclusive).
+ * end {Number} The index at which to end the slice (exclusive).
+ */
+File.prototype.slice = function(start, end) {
+ var size = this.end - this.start;
+ var newStart = 0;
+ var newEnd = size;
+ if (arguments.length) {
+ if (start < 0) {
+ newStart = Math.max(size + start, 0);
+ } else {
+ newStart = Math.min(size, start);
+ }
+ }
+
+ if (arguments.length >= 2) {
+ if (end < 0) {
+ newEnd = Math.max(size + end, 0);
+ } else {
+ newEnd = Math.min(end, size);
+ }
+ }
+
+ var newFile = new File(this.name, this.localURL, this.type, this.lastModified, this.size);
+ newFile.start = this.start + newStart;
+ newFile.end = this.start + newEnd;
+ return newFile;
+};
+
+
+module.exports = File;
diff --git a/plugins/cordova-plugin-file/www/FileEntry.js b/plugins/cordova-plugin-file/www/FileEntry.js
new file mode 100644
index 00000000..59a9dc37
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/FileEntry.js
@@ -0,0 +1,81 @@
+/*
+ *
+ * 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 utils = require('cordova/utils'),
+ exec = require('cordova/exec'),
+ Entry = require('./Entry'),
+ FileWriter = require('./FileWriter'),
+ File = require('./File'),
+ FileError = require('./FileError');
+
+/**
+ * An interface representing a file on the file system.
+ *
+ * {boolean} isFile always true (readonly)
+ * {boolean} isDirectory always false (readonly)
+ * {DOMString} name of the file, excluding the path leading to it (readonly)
+ * {DOMString} fullPath the absolute full path to the file (readonly)
+ * {FileSystem} filesystem on which the file resides (readonly)
+ */
+var FileEntry = function(name, fullPath, fileSystem, nativeURL) {
+ FileEntry.__super__.constructor.apply(this, [true, false, name, fullPath, fileSystem, nativeURL]);
+};
+
+utils.extend(FileEntry, Entry);
+
+/**
+ * Creates a new FileWriter associated with the file that this FileEntry represents.
+ *
+ * @param {Function} successCallback is called with the new FileWriter
+ * @param {Function} errorCallback is called with a FileError
+ */
+FileEntry.prototype.createWriter = function(successCallback, errorCallback) {
+ this.file(function(filePointer) {
+ var writer = new FileWriter(filePointer);
+
+ if (writer.localURL === null || writer.localURL === "") {
+ errorCallback && errorCallback(new FileError(FileError.INVALID_STATE_ERR));
+ } else {
+ successCallback && successCallback(writer);
+ }
+ }, errorCallback);
+};
+
+/**
+ * Returns a File that represents the current state of the file that this FileEntry represents.
+ *
+ * @param {Function} successCallback is called with the new File object
+ * @param {Function} errorCallback is called with a FileError
+ */
+FileEntry.prototype.file = function(successCallback, errorCallback) {
+ var localURL = this.toInternalURL();
+ var win = successCallback && function(f) {
+ var file = new File(f.name, localURL, f.type, f.lastModifiedDate, f.size);
+ successCallback(file);
+ };
+ var fail = errorCallback && function(code) {
+ errorCallback(new FileError(code));
+ };
+ exec(win, fail, "File", "getFileMetadata", [localURL]);
+};
+
+
+module.exports = FileEntry;
diff --git a/plugins/cordova-plugin-file/www/FileError.js b/plugins/cordova-plugin-file/www/FileError.js
new file mode 100644
index 00000000..6507921f
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/FileError.js
@@ -0,0 +1,46 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/**
+ * FileError
+ */
+function FileError(error) {
+ this.code = error || null;
+}
+
+// File error codes
+// Found in DOMException
+FileError.NOT_FOUND_ERR = 1;
+FileError.SECURITY_ERR = 2;
+FileError.ABORT_ERR = 3;
+
+// Added by File API specification
+FileError.NOT_READABLE_ERR = 4;
+FileError.ENCODING_ERR = 5;
+FileError.NO_MODIFICATION_ALLOWED_ERR = 6;
+FileError.INVALID_STATE_ERR = 7;
+FileError.SYNTAX_ERR = 8;
+FileError.INVALID_MODIFICATION_ERR = 9;
+FileError.QUOTA_EXCEEDED_ERR = 10;
+FileError.TYPE_MISMATCH_ERR = 11;
+FileError.PATH_EXISTS_ERR = 12;
+
+module.exports = FileError;
diff --git a/plugins/cordova-plugin-file/www/FileReader.js b/plugins/cordova-plugin-file/www/FileReader.js
new file mode 100644
index 00000000..5c523aa9
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/FileReader.js
@@ -0,0 +1,390 @@
+/*
+ *
+ * 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'),
+ modulemapper = require('cordova/modulemapper'),
+ utils = require('cordova/utils'),
+ File = require('./File'),
+ FileError = require('./FileError'),
+ ProgressEvent = require('./ProgressEvent'),
+ origFileReader = modulemapper.getOriginalSymbol(window, 'FileReader');
+
+/**
+ * This class reads the mobile device file system.
+ *
+ * For Android:
+ * The root directory is the root of the file system.
+ * To read from the SD card, the file name is "sdcard/my_file.txt"
+ * @constructor
+ */
+var FileReader = function() {
+ this._readyState = 0;
+ this._error = null;
+ this._result = null;
+ this._localURL = '';
+ this._realReader = origFileReader ? new origFileReader() : {};
+};
+
+// States
+FileReader.EMPTY = 0;
+FileReader.LOADING = 1;
+FileReader.DONE = 2;
+
+utils.defineGetter(FileReader.prototype, 'readyState', function() {
+ return this._localURL ? this._readyState : this._realReader.readyState;
+});
+
+utils.defineGetter(FileReader.prototype, 'error', function() {
+ return this._localURL ? this._error: this._realReader.error;
+});
+
+utils.defineGetter(FileReader.prototype, 'result', function() {
+ return this._localURL ? this._result: this._realReader.result;
+});
+
+function defineEvent(eventName) {
+ utils.defineGetterSetter(FileReader.prototype, eventName, function() {
+ return this._realReader[eventName] || null;
+ }, function(value) {
+ this._realReader[eventName] = value;
+ });
+}
+defineEvent('onloadstart'); // When the read starts.
+defineEvent('onprogress'); // While reading (and decoding) file or fileBlob data, and reporting partial file data (progress.loaded/progress.total)
+defineEvent('onload'); // When the read has successfully completed.
+defineEvent('onerror'); // When the read has failed (see errors).
+defineEvent('onloadend'); // When the request has completed (either in success or failure).
+defineEvent('onabort'); // When the read has been aborted. For instance, by invoking the abort() method.
+
+function initRead(reader, file) {
+ // Already loading something
+ if (reader.readyState == FileReader.LOADING) {
+ throw new FileError(FileError.INVALID_STATE_ERR);
+ }
+
+ reader._result = null;
+ reader._error = null;
+ reader._readyState = FileReader.LOADING;
+
+ if (typeof file.localURL == 'string') {
+ reader._localURL = file.localURL;
+ } else {
+ reader._localURL = '';
+ return true;
+ }
+
+ reader.onloadstart && reader.onloadstart(new ProgressEvent("loadstart", {target:reader}));
+}
+
+/**
+ * Abort reading file.
+ */
+FileReader.prototype.abort = function() {
+ if (origFileReader && !this._localURL) {
+ return this._realReader.abort();
+ }
+ 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) {
+ if (initRead(this, file)) {
+ return this._realReader.readAsText(file, encoding);
+ }
+
+ // Default encoding is UTF-8
+ var enc = encoding ? encoding : "UTF-8";
+ var me = this;
+ var execArgs = [this._localURL, enc, file.start, file.end];
+
+ // Read file
+ exec(
+ // Success callback
+ function(r) {
+ // If DONE (cancelled), then don't do anything
+ if (me._readyState === FileReader.DONE) {
+ return;
+ }
+
+ // DONE state
+ me._readyState = FileReader.DONE;
+
+ // Save result
+ me._result = r;
+
+ // If onload callback
+ if (typeof me.onload === "function") {
+ me.onload(new ProgressEvent("load", {target:me}));
+ }
+
+ // 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;
+
+ // null result
+ 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", "readAsText", execArgs);
+};
+
+
+/**
+ * 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
+ */
+FileReader.prototype.readAsDataURL = function(file) {
+ if (initRead(this, file)) {
+ return this._realReader.readAsDataURL(file);
+ }
+
+ var me = this;
+ var execArgs = [this._localURL, file.start, file.end];
+
+ // Read file
+ exec(
+ // Success callback
+ function(r) {
+ // If DONE (cancelled), then don't do anything
+ if (me._readyState === FileReader.DONE) {
+ return;
+ }
+
+ // DONE state
+ me._readyState = FileReader.DONE;
+
+ // Save result
+ me._result = r;
+
+ // If onload callback
+ if (typeof me.onload === "function") {
+ me.onload(new ProgressEvent("load", {target:me}));
+ }
+
+ // 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;
+
+ 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", execArgs);
+};
+
+/**
+ * Read file and return data as a binary data.
+ *
+ * @param file {File} File object containing file properties
+ */
+FileReader.prototype.readAsBinaryString = function(file) {
+ if (initRead(this, file)) {
+ return this._realReader.readAsBinaryString(file);
+ }
+
+ var me = this;
+ var execArgs = [this._localURL, file.start, file.end];
+
+ // Read file
+ exec(
+ // Success callback
+ function(r) {
+ // If DONE (cancelled), then don't do anything
+ if (me._readyState === FileReader.DONE) {
+ return;
+ }
+
+ // DONE state
+ me._readyState = FileReader.DONE;
+
+ me._result = r;
+
+ // If onload callback
+ if (typeof me.onload === "function") {
+ me.onload(new ProgressEvent("load", {target:me}));
+ }
+
+ // 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;
+
+ 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", "readAsBinaryString", execArgs);
+};
+
+/**
+ * Read file and return data as a binary data.
+ *
+ * @param file {File} File object containing file properties
+ */
+FileReader.prototype.readAsArrayBuffer = function(file) {
+ if (initRead(this, file)) {
+ return this._realReader.readAsArrayBuffer(file);
+ }
+
+ var me = this;
+ var execArgs = [this._localURL, file.start, file.end];
+
+ // Read file
+ exec(
+ // Success callback
+ function(r) {
+ // If DONE (cancelled), then don't do anything
+ if (me._readyState === FileReader.DONE) {
+ return;
+ }
+
+ // DONE state
+ me._readyState = FileReader.DONE;
+
+ if (r instanceof Array) {
+ r = new Uint8Array(r).buffer;
+ }
+ me._result = r;
+
+ // If onload callback
+ if (typeof me.onload === "function") {
+ me.onload(new ProgressEvent("load", {target:me}));
+ }
+
+ // 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;
+
+ 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", "readAsArrayBuffer", execArgs);
+};
+
+module.exports = FileReader;
diff --git a/plugins/cordova-plugin-file/www/FileSystem.js b/plugins/cordova-plugin-file/www/FileSystem.js
new file mode 100644
index 00000000..36bffbb0
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/FileSystem.js
@@ -0,0 +1,48 @@
+/*
+ *
+ * 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 DirectoryEntry = require('./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;
+ if (root) {
+ this.root = new DirectoryEntry(root.name, root.fullPath, this, root.nativeURL);
+ } else {
+ this.root = new DirectoryEntry(this.name, '/', this);
+ }
+};
+
+FileSystem.prototype.__format__ = function(fullPath, nativeUrl) {
+ return fullPath;
+};
+
+FileSystem.prototype.toJSON = function() {
+ return "<FileSystem: " + this.name + ">";
+};
+
+module.exports = FileSystem;
diff --git a/plugins/cordova-plugin-file/www/FileUploadOptions.js b/plugins/cordova-plugin-file/www/FileUploadOptions.js
new file mode 100644
index 00000000..b2977de7
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/FileUploadOptions.js
@@ -0,0 +1,41 @@
+/*
+ *
+ * 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.
+ * @param headers {Object} Keys are header names, values are header values. Multiple
+ * headers of the same name are not supported.
+ */
+var FileUploadOptions = function(fileKey, fileName, mimeType, params, headers, httpMethod) {
+ this.fileKey = fileKey || null;
+ this.fileName = fileName || null;
+ this.mimeType = mimeType || null;
+ this.params = params || null;
+ this.headers = headers || null;
+ this.httpMethod = httpMethod || null;
+};
+
+module.exports = FileUploadOptions;
diff --git a/plugins/cordova-plugin-file/www/FileUploadResult.js b/plugins/cordova-plugin-file/www/FileUploadResult.js
new file mode 100644
index 00000000..6d74bf23
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/FileUploadResult.js
@@ -0,0 +1,30 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/**
+ * FileUploadResult
+ * @constructor
+ */
+module.exports = function FileUploadResult(size, code, content) {
+ this.bytesSent = size;
+ this.responseCode = code;
+ this.response = content;
+ };
diff --git a/plugins/cordova-plugin-file/www/FileWriter.js b/plugins/cordova-plugin-file/www/FileWriter.js
new file mode 100644
index 00000000..f5e0f564
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/FileWriter.js
@@ -0,0 +1,302 @@
+/*
+ *
+ * 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'),
+ FileError = require('./FileError'),
+ ProgressEvent = require('./ProgressEvent');
+
+/**
+ * This class writes to the mobile device file system.
+ *
+ * For Android:
+ * The root directory is the root of the file system.
+ * To write to the SD card, the file name is "sdcard/my_file.txt"
+ *
+ * @constructor
+ * @param file {File} File object containing file properties
+ * @param append if true write to the end of the file, otherwise overwrite the file
+ */
+var FileWriter = function(file) {
+ this.fileName = "";
+ this.length = 0;
+ if (file) {
+ this.localURL = file.localURL || file;
+ this.length = file.size || 0;
+ }
+ // default is to write at the beginning of the file
+ this.position = 0;
+
+ this.readyState = 0; // EMPTY
+
+ this.result = null;
+
+ // Error
+ this.error = null;
+
+ // Event handlers
+ this.onwritestart = null; // When writing starts
+ this.onprogress = null; // While writing the file, and reporting partial file data
+ this.onwrite = null; // When the write has successfully completed.
+ this.onwriteend = null; // When the request has completed (either in success or failure).
+ this.onabort = null; // When the write has been aborted. For instance, by invoking the abort() method.
+ this.onerror = null; // When the write has failed (see errors).
+};
+
+// States
+FileWriter.INIT = 0;
+FileWriter.WRITING = 1;
+FileWriter.DONE = 2;
+
+/**
+ * Abort writing file.
+ */
+FileWriter.prototype.abort = function() {
+ // check for invalid state
+ if (this.readyState === FileWriter.DONE || this.readyState === FileWriter.INIT) {
+ throw new FileError(FileError.INVALID_STATE_ERR);
+ }
+
+ // set error
+ this.error = new FileError(FileError.ABORT_ERR);
+
+ this.readyState = FileWriter.DONE;
+
+ // If abort callback
+ if (typeof this.onabort === "function") {
+ this.onabort(new ProgressEvent("abort", {"target":this}));
+ }
+
+ // If write end callback
+ if (typeof this.onwriteend === "function") {
+ this.onwriteend(new ProgressEvent("writeend", {"target":this}));
+ }
+};
+
+/**
+ * Writes data to the file
+ *
+ * @param data text or blob to be written
+ */
+FileWriter.prototype.write = function(data) {
+
+ var that=this;
+ var supportsBinary = (typeof window.Blob !== 'undefined' && typeof window.ArrayBuffer !== 'undefined');
+ var isProxySupportBlobNatively = (cordova.platformId === "windows8" || cordova.platformId === "windows");
+ var isBinary;
+
+ // Check to see if the incoming data is a blob
+ if (data instanceof File || (!isProxySupportBlobNatively && supportsBinary && data instanceof Blob)) {
+ var fileReader = new FileReader();
+ fileReader.onload = function() {
+ // Call this method again, with the arraybuffer as argument
+ FileWriter.prototype.write.call(that, this.result);
+ };
+ if (supportsBinary) {
+ fileReader.readAsArrayBuffer(data);
+ } else {
+ fileReader.readAsText(data);
+ }
+ return;
+ }
+
+ // Mark data type for safer transport over the binary bridge
+ isBinary = supportsBinary && (data instanceof ArrayBuffer);
+ if (isBinary && cordova.platformId === "windowsphone") {
+ // create a plain array, using the keys from the Uint8Array view so that we can serialize it
+ data = Array.apply(null, new Uint8Array(data));
+ }
+
+ // Throw an exception if we are already writing a file
+ if (this.readyState === FileWriter.WRITING) {
+ throw new FileError(FileError.INVALID_STATE_ERR);
+ }
+
+ // WRITING state
+ this.readyState = FileWriter.WRITING;
+
+ var me = this;
+
+ // If onwritestart callback
+ if (typeof me.onwritestart === "function") {
+ me.onwritestart(new ProgressEvent("writestart", {"target":me}));
+ }
+
+ // Write file
+ exec(
+ // Success callback
+ function(r) {
+ // If DONE (cancelled), then don't do anything
+ if (me.readyState === FileWriter.DONE) {
+ return;
+ }
+
+ // position always increases by bytes written because file would be extended
+ me.position += r;
+ // The length of the file is now where we are done writing.
+
+ me.length = me.position;
+
+ // DONE state
+ me.readyState = FileWriter.DONE;
+
+ // If onwrite callback
+ if (typeof me.onwrite === "function") {
+ me.onwrite(new ProgressEvent("write", {"target":me}));
+ }
+
+ // If onwriteend callback
+ if (typeof me.onwriteend === "function") {
+ me.onwriteend(new ProgressEvent("writeend", {"target":me}));
+ }
+ },
+ // Error callback
+ function(e) {
+ // If DONE (cancelled), then don't do anything
+ if (me.readyState === FileWriter.DONE) {
+ return;
+ }
+
+ // DONE state
+ me.readyState = FileWriter.DONE;
+
+ // Save error
+ me.error = new FileError(e);
+
+ // If onerror callback
+ if (typeof me.onerror === "function") {
+ me.onerror(new ProgressEvent("error", {"target":me}));
+ }
+
+ // If onwriteend callback
+ if (typeof me.onwriteend === "function") {
+ me.onwriteend(new ProgressEvent("writeend", {"target":me}));
+ }
+ }, "File", "write", [this.localURL, data, this.position, isBinary]);
+};
+
+/**
+ * Moves the file pointer to the location specified.
+ *
+ * If the offset is a negative number the position of the file
+ * pointer is rewound. If the offset is greater than the file
+ * size the position is set to the end of the file.
+ *
+ * @param offset is the location to move the file pointer to.
+ */
+FileWriter.prototype.seek = function(offset) {
+ // Throw an exception if we are already writing a file
+ if (this.readyState === FileWriter.WRITING) {
+ throw new FileError(FileError.INVALID_STATE_ERR);
+ }
+
+ if (!offset && offset !== 0) {
+ return;
+ }
+
+ // See back from end of file.
+ if (offset < 0) {
+ this.position = Math.max(offset + this.length, 0);
+ }
+ // Offset is bigger than file size so set position
+ // to the end of the file.
+ else if (offset > this.length) {
+ this.position = this.length;
+ }
+ // Offset is between 0 and file size so set the position
+ // to start writing.
+ else {
+ this.position = offset;
+ }
+};
+
+/**
+ * Truncates the file to the size specified.
+ *
+ * @param size to chop the file at.
+ */
+FileWriter.prototype.truncate = function(size) {
+ // Throw an exception if we are already writing a file
+ if (this.readyState === FileWriter.WRITING) {
+ throw new FileError(FileError.INVALID_STATE_ERR);
+ }
+
+ // WRITING state
+ this.readyState = FileWriter.WRITING;
+
+ var me = this;
+
+ // If onwritestart callback
+ if (typeof me.onwritestart === "function") {
+ me.onwritestart(new ProgressEvent("writestart", {"target":this}));
+ }
+
+ // Write file
+ exec(
+ // Success callback
+ function(r) {
+ // If DONE (cancelled), then don't do anything
+ if (me.readyState === FileWriter.DONE) {
+ return;
+ }
+
+ // DONE state
+ me.readyState = FileWriter.DONE;
+
+ // Update the length of the file
+ me.length = r;
+ me.position = Math.min(me.position, r);
+
+ // If onwrite callback
+ if (typeof me.onwrite === "function") {
+ me.onwrite(new ProgressEvent("write", {"target":me}));
+ }
+
+ // If onwriteend callback
+ if (typeof me.onwriteend === "function") {
+ me.onwriteend(new ProgressEvent("writeend", {"target":me}));
+ }
+ },
+ // Error callback
+ function(e) {
+ // If DONE (cancelled), then don't do anything
+ if (me.readyState === FileWriter.DONE) {
+ return;
+ }
+
+ // DONE state
+ me.readyState = FileWriter.DONE;
+
+ // Save error
+ me.error = new FileError(e);
+
+ // If onerror callback
+ if (typeof me.onerror === "function") {
+ me.onerror(new ProgressEvent("error", {"target":me}));
+ }
+
+ // If onwriteend callback
+ if (typeof me.onwriteend === "function") {
+ me.onwriteend(new ProgressEvent("writeend", {"target":me}));
+ }
+ }, "File", "truncate", [this.localURL, size]);
+};
+
+module.exports = FileWriter;
diff --git a/plugins/cordova-plugin-file/www/Flags.js b/plugins/cordova-plugin-file/www/Flags.js
new file mode 100644
index 00000000..a9ae6da3
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/Flags.js
@@ -0,0 +1,36 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/**
+ * Supplies arguments to methods that lookup or create files and directories.
+ *
+ * @param create
+ * {boolean} file or directory if it doesn't exist
+ * @param exclusive
+ * {boolean} used with create; if true the command will fail if
+ * target path exists
+ */
+function Flags(create, exclusive) {
+ this.create = create || false;
+ this.exclusive = exclusive || false;
+}
+
+module.exports = Flags;
diff --git a/plugins/cordova-plugin-file/www/LocalFileSystem.js b/plugins/cordova-plugin-file/www/LocalFileSystem.js
new file mode 100644
index 00000000..1e8f2eeb
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/LocalFileSystem.js
@@ -0,0 +1,23 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+exports.TEMPORARY = 0;
+exports.PERSISTENT = 1;
diff --git a/plugins/cordova-plugin-file/www/Metadata.js b/plugins/cordova-plugin-file/www/Metadata.js
new file mode 100644
index 00000000..f95c44c7
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/Metadata.js
@@ -0,0 +1,40 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/**
+ * Information about the state of the file or directory
+ *
+ * {Date} modificationTime (readonly)
+ */
+var Metadata = function(metadata) {
+ if (typeof metadata == "object") {
+ this.modificationTime = new Date(metadata.modificationTime);
+ this.size = metadata.size || 0;
+ } else if (typeof metadata == "undefined") {
+ this.modificationTime = null;
+ this.size = 0;
+ } else {
+ /* Backwards compatiblity with platforms that only return a timestamp */
+ this.modificationTime = new Date(metadata);
+ }
+};
+
+module.exports = Metadata;
diff --git a/plugins/cordova-plugin-file/www/ProgressEvent.js b/plugins/cordova-plugin-file/www/ProgressEvent.js
new file mode 100644
index 00000000..f176f808
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/ProgressEvent.js
@@ -0,0 +1,67 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+// If ProgressEvent exists in global context, use it already, otherwise use our own polyfill
+// Feature test: See if we can instantiate a native ProgressEvent;
+// if so, use that approach,
+// otherwise fill-in with our own implementation.
+//
+// NOTE: right now we always fill in with our own. Down the road would be nice if we can use whatever is native in the webview.
+var ProgressEvent = (function() {
+ /*
+ var createEvent = function(data) {
+ var event = document.createEvent('Events');
+ event.initEvent('ProgressEvent', false, false);
+ if (data) {
+ for (var i in data) {
+ if (data.hasOwnProperty(i)) {
+ event[i] = data[i];
+ }
+ }
+ if (data.target) {
+ // TODO: cannot call <some_custom_object>.dispatchEvent
+ // need to first figure out how to implement EventTarget
+ }
+ }
+ return event;
+ };
+ try {
+ var ev = createEvent({type:"abort",target:document});
+ return function ProgressEvent(type, data) {
+ data.type = type;
+ return createEvent(data);
+ };
+ } catch(e){
+ */
+ return function ProgressEvent(type, dict) {
+ this.type = type;
+ this.bubbles = false;
+ this.cancelBubble = false;
+ this.cancelable = false;
+ this.lengthComputable = false;
+ this.loaded = dict && dict.loaded ? dict.loaded : 0;
+ this.total = dict && dict.total ? dict.total : 0;
+ this.target = dict && dict.target ? dict.target : null;
+ };
+ //}
+})();
+
+module.exports = ProgressEvent;
diff --git a/plugins/cordova-plugin-file/www/android/FileSystem.js b/plugins/cordova-plugin-file/www/android/FileSystem.js
new file mode 100644
index 00000000..518e4c42
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/android/FileSystem.js
@@ -0,0 +1,36 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+FILESYSTEM_PROTOCOL = "cdvfile";
+
+module.exports = {
+ __format__: function(fullPath, nativeUrl) {
+ var path = '/' + this.name + '/' + encodeURI(fullPath);
+ path = path.replace('//','/');
+ var ret = FILESYSTEM_PROTOCOL + '://localhost' + path;
+ var m = /\?.*/.exec(nativeUrl);
+ if (m) {
+ ret += m[0];
+ }
+ return ret;
+ }
+};
+
diff --git a/plugins/cordova-plugin-file/www/blackberry10/FileProxy.js b/plugins/cordova-plugin-file/www/blackberry10/FileProxy.js
new file mode 100644
index 00000000..bd286cb9
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/FileProxy.js
@@ -0,0 +1,51 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * FileProxy
+ *
+ * Register all File exec calls to be handled by proxy
+ */
+
+module.exports = {
+ copyTo: require('cordova-plugin-file.copyToProxy'),
+ getDirectory: require('cordova-plugin-file.getDirectoryProxy'),
+ getFile: require('cordova-plugin-file.getFileProxy'),
+ getFileMetadata: require('cordova-plugin-file.getFileMetadataProxy'),
+ getMetadata: require('cordova-plugin-file.getMetadataProxy'),
+ getParent: require('cordova-plugin-file.getParentProxy'),
+ moveTo: require('cordova-plugin-file.moveToProxy'),
+ readAsArrayBuffer: require('cordova-plugin-file.readAsArrayBufferProxy'),
+ readAsBinaryString: require('cordova-plugin-file.readAsBinaryStringProxy'),
+ readAsDataURL: require('cordova-plugin-file.readAsDataURLProxy'),
+ readAsText: require('cordova-plugin-file.readAsTextProxy'),
+ readEntries: require('cordova-plugin-file.readEntriesProxy'),
+ remove: require('cordova-plugin-file.removeProxy'),
+ removeRecursively: require('cordova-plugin-file.removeRecursivelyProxy'),
+ resolveLocalFileSystemURI: require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAllFileSystems: require('cordova-plugin-file.requestAllFileSystemsProxy'),
+ requestFileSystem: require('cordova-plugin-file.requestFileSystemProxy'),
+ setMetadata: require('cordova-plugin-file.setMetadataProxy'),
+ truncate: require('cordova-plugin-file.truncateProxy'),
+ write: require('cordova-plugin-file.writeProxy')
+};
+
+require('cordova/exec/proxy').add('File', module.exports);
diff --git a/plugins/cordova-plugin-file/www/blackberry10/FileSystem.js b/plugins/cordova-plugin-file/www/blackberry10/FileSystem.js
new file mode 100644
index 00000000..59a1fac8
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/FileSystem.js
@@ -0,0 +1,46 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * FileSystem
+ *
+ * Translate temporary / persistent / root file paths
+ */
+
+var info = require("cordova-plugin-file.bb10FileSystemInfo");
+
+module.exports = {
+ __format__: function(fullPath) {
+ switch (this.name) {
+ case 'temporary':
+ path = info.temporaryPath + fullPath;
+ break;
+ case 'persistent':
+ path = info.persistentPath + fullPath;
+ break;
+ case 'root':
+ path = 'file://' + fullPath;
+ break;
+ }
+ return window.encodeURI(path);
+ }
+};
+
diff --git a/plugins/cordova-plugin-file/www/blackberry10/copyTo.js b/plugins/cordova-plugin-file/www/blackberry10/copyTo.js
new file mode 100644
index 00000000..f27bf54e
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/copyTo.js
@@ -0,0 +1,141 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * copyTo
+ *
+ * IN:
+ * args
+ * 0 - URL of entry to copy
+ * 1 - URL of the directory into which to copy/move the entry
+ * 2 - the new name of the entry, defaults to the current name
+ * move - if true, delete the entry which was copied
+ * OUT:
+ * success - entry for the copied file or directory
+ * fail - FileError
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args, move) {
+ var uri = args[0],
+ destination = args[1],
+ fileName = args[2],
+ copiedEntry,
+ onSuccess = function () {
+ resolve(
+ function (entry) {
+ if (typeof(success) === 'function') {
+ success(entry);
+ }
+ },
+ onFail,
+ [destination + copiedEntry.name]
+ );
+ },
+ onFail = function (error) {
+ if (typeof(fail) === 'function') {
+ if (error && error.code) {
+ //set error codes expected by mobile spec
+ if (uri === destination) {
+ fail(FileError.INVALID_MODIFICATION_ERR);
+ } else if (error.code === FileError.SECURITY_ERR) {
+ fail(FileError.INVALID_MODIFICATION_ERR);
+ } else {
+ fail(error.code);
+ }
+ } else {
+ fail(error);
+ }
+ }
+ },
+ writeFile = function (fileEntry, blob, entry) {
+ copiedEntry = fileEntry;
+ fileEntry.createWriter(function (fileWriter) {
+ fileWriter.onwriteend = function () {
+ if (move) {
+ entry.nativeEntry.remove(onSuccess, function () {
+ console.error("Move operation failed. Files may exist at both source and destination");
+ });
+ } else {
+ onSuccess();
+ }
+ };
+ fileWriter.onerror = onFail;
+ fileWriter.write(blob);
+ }, onFail);
+ },
+ copyFile = function (entry) {
+ if (entry.nativeEntry.file) {
+ entry.nativeEntry.file(function (file) {
+ var reader = new FileReader()._realReader;
+ reader.onloadend = function (e) {
+ var contents = new Uint8Array(this.result),
+ blob = new Blob([contents]);
+ resolve(function (destEntry) {
+ requestAnimationFrame(function () {
+ destEntry.nativeEntry.getFile(fileName, {create: true}, function (fileEntry) {
+ writeFile(fileEntry, blob, entry);
+ }, onFail);
+ });
+ }, onFail, [destination]);
+ };
+ reader.onerror = onFail;
+ reader.readAsArrayBuffer(file);
+ }, onFail);
+ } else {
+ onFail(FileError.INVALID_MODIFICATION_ERR);
+ }
+ },
+ copyDirectory = function (entry) {
+ resolve(function (destEntry) {
+ if (entry.filesystemName !== destEntry.filesystemName) {
+ console.error("Copying directories between filesystems is not supported on BB10");
+ onFail(FileError.INVALID_MODIFICATION_ERR);
+ } else {
+ entry.nativeEntry.copyTo(destEntry.nativeEntry, fileName, function () {
+ resolve(function (copiedDir) {
+ copiedEntry = copiedDir;
+ if (move) {
+ entry.nativeEntry.removeRecursively(onSuccess, onFail);
+ } else {
+ onSuccess();
+ }
+ }, onFail, [destination + fileName]);
+ }, onFail);
+ }
+ }, onFail, [destination]);
+ };
+ if (destination + fileName === uri) {
+ onFail(FileError.INVALID_MODIFICATION_ERR);
+ } else if (fileName.indexOf(':') > -1) {
+ onFail(FileError.ENCODING_ERR);
+ } else {
+ resolve(function (entry) {
+ if (entry.isDirectory) {
+ copyDirectory(entry);
+ } else {
+ copyFile(entry);
+ }
+ }, onFail, [uri]);
+ }
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/createEntryFromNative.js b/plugins/cordova-plugin-file/www/blackberry10/createEntryFromNative.js
new file mode 100644
index 00000000..e1e042ac
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/createEntryFromNative.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.
+ *
+*/
+
+/*
+ * createEntryFromNative
+ *
+ * IN
+ * native - webkit Entry
+ * OUT
+ * returns Cordova entry
+ */
+
+var info = require('cordova-plugin-file.bb10FileSystemInfo'),
+ fileSystems = require('cordova-plugin-file.fileSystems');
+
+module.exports = function (native) {
+ var entry = {
+ nativeEntry: native,
+ isDirectory: !!native.isDirectory,
+ isFile: !!native.isFile,
+ name: native.name,
+ fullPath: native.fullPath,
+ filesystemName: native.filesystem.name,
+ nativeURL: native.toURL()
+ },
+ persistentPath = info.persistentPath.substring(7),
+ temporaryPath = info.temporaryPath.substring(7);
+ //fix bb10 webkit incorrect nativeURL
+ if (native.filesystem.name === 'root') {
+ entry.nativeURL = 'file:///' + native.fullPath;
+ } else if (entry.nativeURL.indexOf('filesystem:local:///persistent/') === 0) {
+ entry.nativeURL = info.persistentPath + native.fullPath;
+ } else if (entry.nativeURL.indexOf('filesystem:local:///temporary') === 0) {
+ entry.nativeURL = info.temporaryPath + native.fullPath;
+ }
+ //translate file system name from bb10 webkit
+ if (entry.filesystemName === 'local__0:Persistent' || entry.fullPath.indexOf(persistentPath) !== -1) {
+ entry.filesystemName = 'persistent';
+ } else if (entry.filesystemName === 'local__0:Temporary' || entry.fullPath.indexOf(temporaryPath) !== -1) {
+ entry.filesystemName = 'temporary';
+ }
+ //add file system property (will be called sync)
+ fileSystems.getFs(entry.filesystemName, function (fs) {
+ entry.filesystem = fs;
+ });
+ //set root on fullPath for persistent / temporary locations
+ entry.fullPath = entry.fullPath.replace(persistentPath, "");
+ entry.fullPath = entry.fullPath.replace(temporaryPath, "");
+ //set trailing slash on directory
+ if (entry.isDirectory && entry.fullPath.substring(entry.fullPath.length - 1) !== '/') {
+ entry.fullPath += '/';
+ }
+ if (entry.isDirectory && entry.nativeURL.substring(entry.nativeURL.length - 1) !== '/') {
+ entry.nativeURL += '/';
+ }
+ //encode URL
+ entry.nativeURL = window.encodeURI(entry.nativeURL);
+ return entry;
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/getDirectory.js b/plugins/cordova-plugin-file/www/blackberry10/getDirectory.js
new file mode 100644
index 00000000..95c84c7a
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/getDirectory.js
@@ -0,0 +1,72 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * getDirectory
+ *
+ * IN:
+ * args
+ * 0 - local filesytem URI for the base directory to search
+ * 1 - directory to be created/returned; may be absolute path or relative path
+ * 2 - options object
+ * OUT:
+ * success - DirectoryEntry
+ * fail - FileError code
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0] === "/" ? "" : args[0],
+ dir = args[1],
+ options = args[2],
+ onSuccess = function (entry) {
+ if (typeof(success) === 'function') {
+ success(entry);
+ }
+ },
+ onFail = function (error) {
+ if (typeof(fail) === 'function') {
+ if (error && error.code) {
+ //set error codes expected by mobile-spec tests
+ if (error.code === FileError.INVALID_MODIFICATION_ERR && options.exclusive) {
+ fail(FileError.PATH_EXISTS_ERR);
+ } else if ( error.code === FileError.NOT_FOUND_ERR && dir.indexOf(':') > 0) {
+ fail(FileError.ENCODING_ERR);
+ } else {
+ fail(error.code);
+ }
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (entry) {
+ requestAnimationFrame(function () {
+ entry.nativeEntry.getDirectory(dir, options, function (nativeEntry) {
+ resolve(function (entry) {
+ onSuccess(entry);
+ }, onFail, [uri + "/" + dir]);
+ }, onFail);
+ });
+ }, onFail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/getFile.js b/plugins/cordova-plugin-file/www/blackberry10/getFile.js
new file mode 100644
index 00000000..1a730ae7
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/getFile.js
@@ -0,0 +1,57 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * getFile
+ *
+ * IN:
+ * args
+ * 0 - local filesytem URI for the base directory to search
+ * 1 - file to be created/returned; may be absolute path or relative path
+ * 2 - options object
+ * OUT:
+ * success - FileEntry
+ * fail - FileError code
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0] === "/" ? "" : args[0] + "/" + args[1],
+ options = args[2],
+ onSuccess = function (entry) {
+ if (typeof(success) === 'function') {
+ success(entry);
+ }
+ },
+ onFail = function (code) {
+ if (typeof(fail) === 'function') {
+ fail(code);
+ }
+ };
+ resolve(function (entry) {
+ if (!entry.isFile) {
+ onFail(FileError.TYPE_MISMATCH_ERR);
+ } else {
+ onSuccess(entry);
+ }
+ }, onFail, [uri, options]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/getFileMetadata.js b/plugins/cordova-plugin-file/www/blackberry10/getFileMetadata.js
new file mode 100644
index 00000000..3383e035
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/getFileMetadata.js
@@ -0,0 +1,65 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * getFileMetadata
+ *
+ * IN:
+ * args
+ * 0 - local filesytem URI
+ * OUT:
+ * success - file
+ * - name
+ * - type
+ * - lastModifiedDate
+ * - size
+ * fail - FileError code
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ onSuccess = function (entry) {
+ if (typeof(success) === 'function') {
+ success(entry);
+ }
+ },
+ onFail = function (error) {
+ if (typeof(fail) === 'function') {
+ if (error.code) {
+ fail(error.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (entry) {
+ requestAnimationFrame(function () {
+ if (entry.nativeEntry.file) {
+ entry.nativeEntry.file(onSuccess, onFail);
+ } else {
+ entry.nativeEntry.getMetadata(onSuccess, onFail);
+ }
+ });
+ }, onFail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/getMetadata.js b/plugins/cordova-plugin-file/www/blackberry10/getMetadata.js
new file mode 100644
index 00000000..3dd5c02c
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/getMetadata.js
@@ -0,0 +1,54 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * getMetadata
+ *
+ * IN:
+ * args
+ * 0 - local filesytem URI
+ * OUT:
+ * success - metadata
+ * fail - FileError code
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ onSuccess = function (entry) {
+ if (typeof(success) === 'function') {
+ success(entry);
+ }
+ },
+ onFail = function (error) {
+ if (typeof(fail) === 'function') {
+ if (error.code) {
+ fail(error.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (entry) {
+ entry.nativeEntry.getMetadata(onSuccess, onFail);
+ }, onFail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/getParent.js b/plugins/cordova-plugin-file/www/blackberry10/getParent.js
new file mode 100644
index 00000000..dd5e3547
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/getParent.js
@@ -0,0 +1,57 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * getParent
+ *
+ * IN:
+ * args
+ * 0 - local filesytem URI
+ * OUT:
+ * success - DirectoryEntry of parent
+ * fail - FileError code
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ onSuccess = function (entry) {
+ if (typeof(success) === 'function') {
+ success(entry);
+ }
+ },
+ onFail = function (error) {
+ if (typeof(fail) === 'function') {
+ if (error && error.code) {
+ fail(error.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (entry) {
+ requestAnimationFrame(function () {
+ entry.nativeEntry.getParent(onSuccess, onFail);
+ });
+ }, onFail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/info.js b/plugins/cordova-plugin-file/www/blackberry10/info.js
new file mode 100644
index 00000000..feaccd91
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/info.js
@@ -0,0 +1,52 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * info
+ *
+ * persistentPath - full path to app sandboxed persistent storage
+ * temporaryPath - full path to app sandboxed temporary storage
+ * localPath - full path to app source (www dir)
+ * MAX_SIZE - maximum size for filesystem request
+ */
+
+var info = {
+ persistentPath: "",
+ temporaryPath: "",
+ localPath: "",
+ MAX_SIZE: 64 * 1024 * 1024 * 1024
+};
+
+cordova.exec(
+ function (path) {
+ info.persistentPath = 'file://' + path + '/webviews/webfs/persistent/local__0';
+ info.temporaryPath = 'file://' + path + '/webviews/webfs/temporary/local__0';
+ info.localPath = path.replace('/data', '/app/native');
+ },
+ function () {
+ console.error('Unable to determine local storage file path');
+ },
+ 'File',
+ 'getHomePath',
+ false
+);
+
+module.exports = info;
diff --git a/plugins/cordova-plugin-file/www/blackberry10/moveTo.js b/plugins/cordova-plugin-file/www/blackberry10/moveTo.js
new file mode 100644
index 00000000..f6560e8a
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/moveTo.js
@@ -0,0 +1,39 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * moveTo
+ *
+ * IN:
+ * args
+ * 0 - URL of entry to move
+ * 1 - URL of the directory into which to move the entry
+ * 2 - the new name of the entry, defaults to the current name
+ * OUT:
+ * success - entry for the copied file or directory
+ * fail - FileError
+ */
+
+var copy = cordova.require('cordova-plugin-file.copyToProxy');
+
+module.exports = function (success, fail, args) {
+ copy(success, fail, args, true);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/readAsArrayBuffer.js b/plugins/cordova-plugin-file/www/blackberry10/readAsArrayBuffer.js
new file mode 100644
index 00000000..41c677a2
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/readAsArrayBuffer.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.
+ *
+*/
+
+/*
+ * readAsArrayBuffer
+ *
+ * IN:
+ * args
+ * 0 - URL of file to read
+ * 1 - start position
+ * 2 - end position
+ * OUT:
+ * success - ArrayBuffer of file
+ * fail - FileError
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ start = args[1],
+ end = args[2],
+ onSuccess = function (data) {
+ if (typeof success === 'function') {
+ success(data);
+ }
+ },
+ onFail = function (error) {
+ if (typeof fail === 'function') {
+ if (error && error.code) {
+ fail(error.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (fs) {
+ requestAnimationFrame(function () {
+ fs.nativeEntry.file(function (file) {
+ var reader = new FileReader()._realReader;
+ reader.onloadend = function () {
+ onSuccess(this.result.slice(start, end));
+ };
+ reader.onerror = onFail;
+ reader.readAsArrayBuffer(file);
+ }, onFail);
+ });
+ }, fail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/readAsBinaryString.js b/plugins/cordova-plugin-file/www/blackberry10/readAsBinaryString.js
new file mode 100644
index 00000000..6a70f1a2
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/readAsBinaryString.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.
+ *
+*/
+
+/*
+ * readAsBinaryString
+ *
+ * IN:
+ * args
+ * 0 - URL of file to read
+ * 1 - start position
+ * 2 - end position
+ * OUT:
+ * success - BinaryString contents of file
+ * fail - FileError
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ start = args[1],
+ end = args[2],
+ onSuccess = function (data) {
+ if (typeof success === 'function') {
+ success(data);
+ }
+ },
+ onFail = function (error) {
+ if (typeof fail === 'function') {
+ if (error && error.code) {
+ fail(error.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (fs) {
+ requestAnimationFrame(function () {
+ fs.nativeEntry.file(function (file) {
+ var reader = new FileReader()._realReader;
+ reader.onloadend = function () {
+ onSuccess(this.result.substring(start, end));
+ };
+ reader.onerror = onFail;
+ reader.readAsBinaryString(file);
+ }, onFail);
+ });
+ }, fail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/readAsDataURL.js b/plugins/cordova-plugin-file/www/blackberry10/readAsDataURL.js
new file mode 100644
index 00000000..0256c5ec
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/readAsDataURL.js
@@ -0,0 +1,65 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * readAsDataURL
+ *
+ * IN:
+ * args
+ * 0 - URL of file to read
+ * OUT:
+ * success - DataURL representation of file contents
+ * fail - FileError
+ */
+
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ onSuccess = function (data) {
+ if (typeof success === 'function') {
+ success(data);
+ }
+ },
+ onFail = function (error) {
+ if (typeof fail === 'function') {
+ if (error && error.code) {
+ fail(error.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (fs) {
+ requestAnimationFrame(function () {
+ fs.nativeEntry.file(function (file) {
+ var reader = new FileReader()._realReader;
+ reader.onloadend = function () {
+ onSuccess(this.result);
+ };
+ reader.onerror = onFail;
+ reader.readAsDataURL(file);
+ }, onFail);
+ });
+ }, fail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/readAsText.js b/plugins/cordova-plugin-file/www/blackberry10/readAsText.js
new file mode 100644
index 00000000..7809a908
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/readAsText.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.
+ *
+*/
+
+/*
+ * readAsText
+ *
+ * IN:
+ * args
+ * 0 - URL of file to read
+ * 1 - encoding
+ * 2 - start position
+ * 3 - end position
+ * OUT:
+ * success - text contents of file
+ * fail - FileError
+ */
+
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ start = args[2],
+ end = args[3],
+ onSuccess = function (data) {
+ if (typeof success === 'function') {
+ success(data);
+ }
+ },
+ onFail = function (error) {
+ if (typeof fail === 'function') {
+ if (error && error.code) {
+ fail(error.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (fs) {
+ requestAnimationFrame(function () {
+ fs.nativeEntry.file(function (file) {
+ var reader = new FileReader()._realReader;
+ reader.onloadend = function () {
+ var contents = new Uint8Array(this.result).subarray(start, end),
+ blob = new Blob([contents]),
+ textReader = new FileReader()._realReader;
+ textReader.onloadend = function () {
+ onSuccess(this.result);
+ };
+ textReader.onerror = onFail;
+ textReader.readAsText(blob);
+ };
+ reader.onerror = onFail;
+ reader.readAsArrayBuffer(file);
+ }, onFail);
+ });
+ }, fail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/readEntries.js b/plugins/cordova-plugin-file/www/blackberry10/readEntries.js
new file mode 100644
index 00000000..5284d77b
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/readEntries.js
@@ -0,0 +1,71 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * readEntries
+ *
+ * IN:
+ * args
+ * 0 - URL of directory to list
+ * OUT:
+ * success - Array of Entry objects
+ * fail - FileError
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ info = require('cordova-plugin-file.bb10FileSystemInfo'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame'),
+ createEntryFromNative = cordova.require('cordova-plugin-file.bb10CreateEntryFromNative');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ onSuccess = function (data) {
+ if (typeof success === 'function') {
+ success(data);
+ }
+ },
+ onFail = function (error) {
+ if (typeof fail === 'function') {
+ if (error.code) {
+ fail(error.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (fs) {
+ requestAnimationFrame(function () {
+ var reader = fs.nativeEntry.createReader(),
+ entries = [],
+ readEntries = function() {
+ reader.readEntries(function (results) {
+ if (!results.length) {
+ onSuccess(entries.sort().map(createEntryFromNative));
+ } else {
+ entries = entries.concat(Array.prototype.slice.call(results || [], 0));
+ readEntries();
+ }
+ }, onFail);
+ };
+ readEntries();
+ });
+ }, fail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/remove.js b/plugins/cordova-plugin-file/www/blackberry10/remove.js
new file mode 100644
index 00000000..f57973ae
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/remove.js
@@ -0,0 +1,61 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * remove
+ *
+ * IN:
+ * args
+ * 0 - URL of Entry to remove
+ * OUT:
+ * success - (no args)
+ * fail - FileError
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ onSuccess = function (data) {
+ if (typeof success === 'function') {
+ success(data);
+ }
+ },
+ onFail = function (error) {
+ if (typeof fail === 'function') {
+ if (error && error.code) {
+ fail(error.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (fs) {
+ requestAnimationFrame(function () {
+ if (fs.fullPath === '/') {
+ onFail(FileError.NO_MODIFICATION_ALLOWED_ERR);
+ } else {
+ fs.nativeEntry.remove(onSuccess, onFail);
+ }
+ });
+ }, fail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/removeRecursively.js b/plugins/cordova-plugin-file/www/blackberry10/removeRecursively.js
new file mode 100644
index 00000000..93b559bd
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/removeRecursively.js
@@ -0,0 +1,62 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * removeRecursively
+ *
+ * IN:
+ * args
+ * 0 - URL of DirectoryEntry to remove recursively
+ * OUT:
+ * success - (no args)
+ * fail - FileError
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ onSuccess = function (data) {
+ if (typeof success === 'function') {
+ success(data);
+ }
+ },
+ onFail = function (error) {
+ if (typeof fail === 'function') {
+ if (error.code) {
+ if (error.code === FileError.INVALID_MODIFICATION_ERR) {
+ //mobile-spec expects this error code
+ fail(FileError.NO_MODIFICATION_ALLOWED_ERR);
+ } else {
+ fail(error.code);
+ }
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (fs) {
+ requestAnimationFrame(function () {
+ fs.nativeEntry.removeRecursively(onSuccess, onFail);
+ });
+ }, fail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/requestAllFileSystems.js b/plugins/cordova-plugin-file/www/blackberry10/requestAllFileSystems.js
new file mode 100644
index 00000000..8354ab1c
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/requestAllFileSystems.js
@@ -0,0 +1,42 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * requestAllFileSystems
+ *
+ * IN - no arguments
+ * OUT
+ * success - Array of FileSystems
+ * - filesystemName
+ * - fullPath
+ * - name
+ * - nativeURL
+ */
+
+var info = require('cordova-plugin-file.bb10FileSystemInfo');
+
+module.exports = function (success, fail, args) {
+ success([
+ { filesystemName: 'persistent', name: 'persistent', fullPath: '/', nativeURL: info.persistentPath + '/' },
+ { filesystemName: 'temporary', name: 'temporary', fullPath: '/', nativeURL: info.temporaryPath + '/' },
+ { filesystemName: 'root', name: 'root', fullPath: '/', nativeURL: 'file:///' }
+ ]);
+}
diff --git a/plugins/cordova-plugin-file/www/blackberry10/requestAnimationFrame.js b/plugins/cordova-plugin-file/www/blackberry10/requestAnimationFrame.js
new file mode 100644
index 00000000..6c3288cc
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/requestAnimationFrame.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.
+ *
+*/
+
+/*
+ * requestAnimationFrame
+ *
+ * This is used throughout the BB10 File implementation to wrap
+ * native webkit calls. There is a bug in the webkit implementation
+ * which causes callbacks to never return when multiple file system
+ * APIs are called in sequence. This should also make the UI more
+ * responsive during file operations.
+ *
+ * Supported on BB10 OS > 10.1
+ */
+
+var requestAnimationFrame = window.requestAnimationFrame;
+if (typeof(requestAnimationFrame) !== 'function') {
+ requestAnimationFrame = function (cb) { cb(); };
+}
+module.exports = requestAnimationFrame;
diff --git a/plugins/cordova-plugin-file/www/blackberry10/requestFileSystem.js b/plugins/cordova-plugin-file/www/blackberry10/requestFileSystem.js
new file mode 100644
index 00000000..f02edbf5
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/requestFileSystem.js
@@ -0,0 +1,53 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * requestFileSystem
+ *
+ * IN:
+ * args
+ * 0 - type (TEMPORARY = 0, PERSISTENT = 1)
+ * 1 - size
+ * OUT:
+ * success - FileSystem object
+ * - name - the human readable directory name
+ * - root - DirectoryEntry object
+ * - isDirectory
+ * - isFile
+ * - name
+ * - fullPath
+ * fail - FileError code
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy');
+
+module.exports = function (success, fail, args) {
+ var fsType = args[0] === 0 ? 'temporary' : 'persistent',
+ size = args[1],
+ onSuccess = function (fs) {
+ var directory = {
+ name: fsType,
+ root: fs
+ };
+ success(directory);
+ };
+ resolve(onSuccess, fail, ['cdvfile://localhost/' + fsType + '/', undefined, size]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js b/plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js
new file mode 100644
index 00000000..0fc9c070
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js
@@ -0,0 +1,172 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * resolveLocalFileSystemURI
+ *
+ * IN
+ * args
+ * 0 - escaped local filesystem URI
+ * 1 - options (standard HTML5 file system options)
+ * 2 - size
+ * OUT
+ * success - Entry object
+ * - isDirectory
+ * - isFile
+ * - name
+ * - fullPath
+ * - nativeURL
+ * - fileSystemName
+ * fail - FileError code
+ */
+
+var info = require('cordova-plugin-file.bb10FileSystemInfo'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame'),
+ createEntryFromNative = require('cordova-plugin-file.bb10CreateEntryFromNative'),
+ SANDBOXED = true,
+ UNSANDBOXED = false;
+
+module.exports = function (success, fail, args) {
+ var request = args[0],
+ options = args[1],
+ size = args[2];
+ if (request) {
+ request = decodeURIComponent(request);
+ if (request.indexOf('?') > -1) {
+ //bb10 does not support params; strip them off
+ request = request.substring(0, request.indexOf('?'));
+ }
+ if (request.indexOf('file://localhost/') === 0) {
+ //remove localhost prefix
+ request = request.replace('file://localhost/', 'file:///');
+ }
+ //requests to sandboxed locations should use cdvfile
+ request = request.replace(info.persistentPath, 'cdvfile://localhost/persistent');
+ request = request.replace(info.temporaryPath, 'cdvfile://localhost/temporary');
+ //pick appropriate handler
+ if (request.indexOf('file:///') === 0) {
+ resolveFile(success, fail, request, options);
+ } else if (request.indexOf('cdvfile://localhost/') === 0) {
+ resolveCdvFile(success, fail, request, options, size);
+ } else if (request.indexOf('local:///') === 0) {
+ resolveLocal(success, fail, request, options);
+ } else {
+ fail(FileError.ENCODING_ERR);
+ }
+ } else {
+ fail(FileError.NOT_FOUND_ERR);
+ }
+};
+
+//resolve file:///
+function resolveFile(success, fail, request, options) {
+ var path = request.substring(7);
+ resolve(success, fail, path, window.PERSISTENT, UNSANDBOXED, options);
+}
+
+//resolve cdvfile://localhost/filesystemname/
+function resolveCdvFile(success, fail, request, options, size) {
+ var components = /cdvfile:\/\/localhost\/([^\/]+)\/(.*)/.exec(request),
+ fsType = components[1],
+ path = components[2];
+ if (fsType === 'persistent') {
+ resolve(success, fail, path, window.PERSISTENT, SANDBOXED, options, size);
+ }
+ else if (fsType === 'temporary') {
+ resolve(success, fail, path, window.TEMPORARY, SANDBOXED, options, size);
+ }
+ else if (fsType === 'root') {
+ resolve(success, fail, path, window.PERSISTENT, UNSANDBOXED, options);
+ }
+ else {
+ fail(FileError.NOT_FOUND_ERR);
+ }
+}
+
+//resolve local:///
+function resolveLocal(success, fail, request, options) {
+ var path = localPath + request.substring(8);
+ resolve(success, fail, path, window.PERSISTENT, UNSANDBOXED, options);
+}
+
+//validate parameters and set sandbox
+function resolve(success, fail, path, fsType, sandbox, options, size) {
+ options = options || { create: false };
+ size = size || info.MAX_SIZE;
+ if (size > info.MAX_SIZE) {
+ //bb10 does not respect quota; fail at unreasonably large size
+ fail(FileError.QUOTA_EXCEEDED_ERR);
+ } else if (path.indexOf(':') > -1) {
+ //files with : character are not valid in Cordova apps
+ fail(FileError.ENCODING_ERR);
+ } else {
+ requestAnimationFrame(function () {
+ cordova.exec(function () {
+ requestAnimationFrame(function () {
+ resolveNative(success, fail, path, fsType, options, size);
+ });
+ }, fail, 'File', 'setSandbox', [sandbox], false);
+ });
+ }
+}
+
+//find path using webkit file system
+function resolveNative(success, fail, path, fsType, options, size) {
+ window.webkitRequestFileSystem(
+ fsType,
+ size,
+ function (fs) {
+ if (path === '') {
+ //no path provided, call success with root file system
+ success(createEntryFromNative(fs.root));
+ } else {
+ //otherwise attempt to resolve as file
+ fs.root.getFile(
+ path,
+ options,
+ function (entry) {
+ success(createEntryFromNative(entry));
+ },
+ function (fileError) {
+ //file not found, attempt to resolve as directory
+ fs.root.getDirectory(
+ path,
+ options,
+ function (entry) {
+ success(createEntryFromNative(entry));
+ },
+ function (dirError) {
+ //path cannot be resolved
+ if (fileError.code === FileError.INVALID_MODIFICATION_ERR &&
+ options.exclusive) {
+ //mobile-spec expects this error code
+ fail(FileError.PATH_EXISTS_ERR);
+ } else {
+ fail(FileError.NOT_FOUND_ERR);
+ }
+ }
+ );
+ }
+ );
+ }
+ }
+ );
+}
diff --git a/plugins/cordova-plugin-file/www/blackberry10/setMetadata.js b/plugins/cordova-plugin-file/www/blackberry10/setMetadata.js
new file mode 100644
index 00000000..5254e868
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/setMetadata.js
@@ -0,0 +1,33 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * setMetadata
+ *
+ * BB10 OS does not support setting file metadata via HTML5 File System
+ */
+
+module.exports = function (success, fail, args) {
+ console.error("setMetadata not supported on BB10", arguments);
+ if (typeof(fail) === 'function') {
+ fail();
+ }
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/truncate.js b/plugins/cordova-plugin-file/www/blackberry10/truncate.js
new file mode 100644
index 00000000..ba7f77f1
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/truncate.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.
+ *
+*/
+
+/*
+ * truncate
+ *
+ * IN:
+ * args
+ * 0 - URL of file to truncate
+ * 1 - start position
+ * OUT:
+ * success - new length of file
+ * fail - FileError
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ length = args[1],
+ onSuccess = function (data) {
+ if (typeof success === 'function') {
+ success(data.loaded);
+ }
+ },
+ onFail = function (error) {
+ if (typeof fail === 'function') {
+ if (error && error.code) {
+ fail(error.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (fs) {
+ requestAnimationFrame(function () {
+ fs.nativeEntry.file(function (file) {
+ var reader = new FileReader()._realReader;
+ reader.onloadend = function () {
+ var contents = new Uint8Array(this.result).subarray(0, length);
+ blob = new Blob([contents]);
+ window.requestAnimationFrame(function () {
+ fs.nativeEntry.createWriter(function (fileWriter) {
+ fileWriter.onwriteend = onSuccess;
+ fileWriter.onerror = onFail;
+ fileWriter.write(blob);
+ }, onFail);
+ });
+ };
+ reader.onerror = onFail;
+ reader.readAsArrayBuffer(file);
+ }, onFail);
+ });
+ }, onFail, [uri]);
+};
diff --git a/plugins/cordova-plugin-file/www/blackberry10/write.js b/plugins/cordova-plugin-file/www/blackberry10/write.js
new file mode 100644
index 00000000..386ec670
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/write.js
@@ -0,0 +1,73 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * write
+ *
+ * IN:
+ * args
+ * 0 - URL of file to write
+ * 1 - data to write
+ * 2 - offset
+ * 3 - isBinary
+ * OUT:
+ * success - bytes written
+ * fail - FileError
+ */
+
+var resolve = cordova.require('cordova-plugin-file.resolveLocalFileSystemURIProxy'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame');
+
+module.exports = function (success, fail, args) {
+ var uri = args[0],
+ data = args[1],
+ offset = args[2],
+ isBinary = args[3],
+ onSuccess = function (data) {
+ if (typeof success === 'function') {
+ success(data.loaded);
+ }
+ },
+ onFail = function (error) {
+ if (typeof fail === 'function') {
+ if (error && error.code) {
+ fail(error.code);
+ } else if (error && error.target && error.target.code) {
+ fail(error.target.code);
+ } else {
+ fail(error);
+ }
+ }
+ };
+ resolve(function (fs) {
+ requestAnimationFrame(function () {
+ fs.nativeEntry.createWriter(function (writer) {
+ var blob = new Blob([data]);
+ if (offset) {
+ writer.seek(offset);
+ }
+ writer.onwriteend = onSuccess;
+ writer.onerror = onFail;
+ writer.write(blob);
+ }, onFail);
+ });
+ }, fail, [uri, { create: true }]);
+};
diff --git a/plugins/cordova-plugin-file/www/browser/FileSystem.js b/plugins/cordova-plugin-file/www/browser/FileSystem.js
new file mode 100644
index 00000000..27373d11
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/browser/FileSystem.js
@@ -0,0 +1,31 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*global FILESYSTEM_PREFIX: true, module*/
+
+FILESYSTEM_PREFIX = "file:///";
+
+module.exports = {
+ __format__: function(fullPath) {
+ return (FILESYSTEM_PREFIX + this.name + (fullPath[0] === '/' ? '' : '/') + encodeURI(fullPath));
+ }
+};
+
diff --git a/plugins/cordova-plugin-file/www/browser/Preparing.js b/plugins/cordova-plugin-file/www/browser/Preparing.js
new file mode 100644
index 00000000..13957e02
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/browser/Preparing.js
@@ -0,0 +1,187 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*global require*/
+
+//Only Chrome uses this file.
+var isChrome = window.webkitRequestFileSystem && window.webkitResolveLocalFileSystemURL;
+if (!isChrome) {
+ return;
+}
+
+var channel = require('cordova/channel');
+var FileError = require('./FileError');
+var PERSISTENT_FS_QUOTA = 5 * 1024 * 1024;
+var filePluginIsReadyEvent = new Event('filePluginIsReady');
+
+var entryFunctionsCreated = false;
+var quotaWasRequested = false;
+var eventWasThrown = false;
+
+if (!window.requestFileSystem) {
+ window.requestFileSystem = function(type, size, win, fail) {
+ if (fail) {
+ fail("Not supported");
+ }
+ };
+} else {
+ window.requestFileSystem(window.TEMPORARY, 1, createFileEntryFunctions, function() {});
+}
+
+if (!window.resolveLocalFileSystemURL) {
+ window.resolveLocalFileSystemURL = function(url, win, fail) {
+ if(fail) {
+ fail("Not supported");
+ }
+ };
+}
+
+// Resolves a filesystem entry by its path - which is passed either in standard (filesystem:file://) or
+// Cordova-specific (cdvfile://) universal way.
+// Aligns with specification: http://www.w3.org/TR/2011/WD-file-system-api-20110419/#widl-LocalFileSystem-resolveLocalFileSystemURL
+var nativeResolveLocalFileSystemURL = window.resolveLocalFileSystemURL || window.webkitResolveLocalFileSystemURL;
+window.resolveLocalFileSystemURL = function(url, win, fail) {
+ /* If url starts with `cdvfile` then we need convert it to Chrome real url first:
+ cdvfile://localhost/persistent/path/to/file -> filesystem:file://persistent/path/to/file */
+ if (url.trim().substr(0,7) === "cdvfile") {
+ /* Quirk:
+ Plugin supports cdvfile://localhost (local resources) only.
+ I.e. external resources are not supported via cdvfile. */
+ if (url.indexOf("cdvfile://localhost") !== -1) {
+ // Browser supports temporary and persistent only
+ var indexPersistent = url.indexOf('persistent');
+ var indexTemporary = url.indexOf('temporary');
+
+ /* Chrome urls start with 'filesystem:' prefix. See quirk:
+ toURL function in Chrome returns filesystem:-prefixed path depending on application host.
+ For example, filesystem:file:///persistent/somefile.txt,
+ filesystem:http://localhost:8080/persistent/somefile.txt. */
+ var prefix = 'filesystem:file:///';
+ if (location.protocol !== 'file:') {
+ prefix = 'filesystem:' + location.origin + '/';
+ }
+
+ var result;
+ if (indexPersistent !== -1) {
+ // cdvfile://localhost/persistent/path/to/file -> filesystem:file://persistent/path/to/file
+ // or filesystem:http://localhost:8080/persistent/path/to/file
+ result = prefix + 'persistent' + url.substr(indexPersistent + 10);
+ nativeResolveLocalFileSystemURL(result, win, fail);
+ return;
+ }
+
+ if (indexTemporary !== -1) {
+ // cdvfile://localhost/temporary/path/to/file -> filesystem:file://temporary/path/to/file
+ // or filesystem:http://localhost:8080/temporary/path/to/file
+ result = prefix + 'temporary' + url.substr(indexTemporary + 9);
+ nativeResolveLocalFileSystemURL(result, win, fail);
+ return;
+ }
+ }
+
+ // cdvfile other than local file resource is not supported
+ fail && fail(new FileError(FileError.ENCODING_ERR));
+ } else {
+ nativeResolveLocalFileSystemURL(url, win, fail);
+ }
+};
+
+function createFileEntryFunctions(fs) {
+ fs.root.getFile('todelete_658674_833_4_cdv', {create: true}, function(fileEntry) {
+ var fileEntryType = Object.getPrototypeOf(fileEntry);
+ var entryType = Object.getPrototypeOf(fileEntryType);
+
+ // Save the original method
+ var origToURL = entryType.toURL;
+ entryType.toURL = function () {
+ var origURL = origToURL.call(this);
+ if (this.isDirectory && origURL.substr(-1) !== '/') {
+ return origURL + '/';
+ }
+ return origURL;
+ };
+
+ entryType.toNativeURL = function () {
+ console.warn("DEPRECATED: Update your code to use 'toURL'");
+ return this.toURL();
+ };
+
+ entryType.toInternalURL = function() {
+ if (this.toURL().indexOf("persistent") > -1) {
+ return "cdvfile://localhost/persistent" + this.fullPath;
+ }
+
+ if (this.toURL().indexOf("temporary") > -1) {
+ return "cdvfile://localhost/temporary" + this.fullPath;
+ }
+ };
+
+ entryType.setMetadata = function(win, fail /*, metadata*/) {
+ fail && fail("Not supported");
+ };
+
+ fileEntry.createWriter(function(writer) {
+ var originalWrite = writer.write;
+ var writerProto = Object.getPrototypeOf(writer);
+ writerProto.write = function(blob) {
+ if(blob instanceof Blob) {
+ originalWrite.apply(this, [blob]);
+ } else {
+ var realBlob = new Blob([blob]);
+ originalWrite.apply(this, [realBlob]);
+ }
+ };
+
+ fileEntry.remove(function(){ entryFunctionsCreated = true; }, function(){ /* empty callback */ });
+ });
+ });
+}
+
+window.initPersistentFileSystem = function(size, win, fail) {
+ if (navigator.webkitPersistentStorage) {
+ navigator.webkitPersistentStorage.requestQuota(size, win, fail);
+ return;
+ }
+
+ fail("This browser does not support this function");
+};
+
+window.isFilePluginReadyRaised = function () { return eventWasThrown; };
+
+window.initPersistentFileSystem(PERSISTENT_FS_QUOTA, function() {
+ console.log('Persistent fs quota granted');
+ quotaWasRequested = true;
+}, function(e){
+ console.log('Error occured while trying to request Persistent fs quota: ' + JSON.stringify(e));
+});
+
+channel.onCordovaReady.subscribe(function () {
+ function dispatchEventIfReady() {
+ if (entryFunctionsCreated && quotaWasRequested) {
+ window.dispatchEvent(filePluginIsReadyEvent);
+ eventWasThrown = true;
+ } else {
+ setTimeout(dispatchEventIfReady, 100);
+ }
+ }
+
+ dispatchEventIfReady();
+}, false);
diff --git a/plugins/cordova-plugin-file/www/fileSystemPaths.js b/plugins/cordova-plugin-file/www/fileSystemPaths.js
new file mode 100644
index 00000000..c332f481
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/fileSystemPaths.js
@@ -0,0 +1,63 @@
+/*
+ *
+ * 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');
+var channel = require('cordova/channel');
+
+exports.file = {
+ // Read-only directory where the application is installed.
+ applicationDirectory: null,
+ // Root of app's private writable storage
+ applicationStorageDirectory: null,
+ // Where to put app-specific data files.
+ dataDirectory: null,
+ // Cached files that should survive app restarts.
+ // Apps should not rely on the OS to delete files in here.
+ cacheDirectory: null,
+ // Android: the application space on external storage.
+ externalApplicationStorageDirectory: null,
+ // Android: Where to put app-specific data files on external storage.
+ externalDataDirectory: null,
+ // Android: the application cache on external storage.
+ externalCacheDirectory: null,
+ // Android: the external storage (SD card) root.
+ externalRootDirectory: null,
+ // iOS: Temp directory that the OS can clear at will.
+ tempDirectory: null,
+ // iOS: Holds app-specific files that should be synced (e.g. to iCloud).
+ syncedDataDirectory: null,
+ // iOS: Files private to the app, but that are meaningful to other applciations (e.g. Office files)
+ documentsDirectory: null,
+ // BlackBerry10: Files globally available to all apps
+ sharedDirectory: null
+};
+
+channel.waitForInitialization('onFileSystemPathsReady');
+channel.onCordovaReady.subscribe(function() {
+ function after(paths) {
+ for (var k in paths) {
+ exports.file[k] = paths[k];
+ }
+ channel.initializationComplete('onFileSystemPathsReady');
+ }
+ exec(after, null, 'File', 'requestAllPaths', []);
+});
+
diff --git a/plugins/cordova-plugin-file/www/fileSystems-roots.js b/plugins/cordova-plugin-file/www/fileSystems-roots.js
new file mode 100644
index 00000000..ff77d944
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/fileSystems-roots.js
@@ -0,0 +1,44 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+// Map of fsName -> FileSystem.
+var fsMap = null;
+var FileSystem = require('./FileSystem');
+var exec = require('cordova/exec');
+
+// Overridden by Android, BlackBerry 10 and iOS to populate fsMap.
+require('./fileSystems').getFs = function(name, callback) {
+ if (fsMap) {
+ callback(fsMap[name]);
+ } else {
+ exec(success, null, "File", "requestAllFileSystems", []);
+ function success(response) {
+ fsMap = {};
+ for (var i = 0; i < response.length; ++i) {
+ var fsRoot = response[i];
+ var fs = new FileSystem(fsRoot.filesystemName, fsRoot);
+ fsMap[fs.name] = fs;
+ }
+ callback(fsMap[name]);
+ }
+ }
+};
+
diff --git a/plugins/cordova-plugin-file/www/fileSystems.js b/plugins/cordova-plugin-file/www/fileSystems.js
new file mode 100644
index 00000000..8ecdec3e
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/fileSystems.js
@@ -0,0 +1,25 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+// Overridden by Android, BlackBerry 10 and iOS to populate fsMap.
+module.exports.getFs = function(name, callback) {
+ callback(null);
+};
diff --git a/plugins/cordova-plugin-file/www/firefoxos/FileSystem.js b/plugins/cordova-plugin-file/www/firefoxos/FileSystem.js
new file mode 100644
index 00000000..8ff0ec4b
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/firefoxos/FileSystem.js
@@ -0,0 +1,29 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+FILESYSTEM_PREFIX = "file:///";
+
+module.exports = {
+ __format__: function(fullPath) {
+ return (FILESYSTEM_PREFIX + this.name + (fullPath[0] === '/' ? '' : '/') + encodeURI(fullPath));
+ }
+};
+
diff --git a/plugins/cordova-plugin-file/www/ios/FileSystem.js b/plugins/cordova-plugin-file/www/ios/FileSystem.js
new file mode 100644
index 00000000..b11d58f3
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/ios/FileSystem.js
@@ -0,0 +1,30 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+FILESYSTEM_PROTOCOL = "cdvfile";
+
+module.exports = {
+ __format__: function(fullPath) {
+ var path = ('/'+this.name+(fullPath[0]==='/'?'':'/')+encodeURI(fullPath)).replace('//','/');
+ return FILESYSTEM_PROTOCOL + '://localhost' + path;
+ }
+};
+
diff --git a/plugins/cordova-plugin-file/www/requestFileSystem.js b/plugins/cordova-plugin-file/www/requestFileSystem.js
new file mode 100644
index 00000000..84715fa7
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/requestFileSystem.js
@@ -0,0 +1,76 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+//For browser platform: not all browsers use this file.
+function checkBrowser() {
+ if (cordova.platformId === "browser" && navigator.userAgent.search(/Chrome/) > 0) {
+ var requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
+ module.exports = requestFileSystem;
+ return;
+ }
+}
+checkBrowser();
+
+var argscheck = require('cordova/argscheck'),
+ FileError = require('./FileError'),
+ FileSystem = require('./FileSystem'),
+ exec = require('cordova/exec');
+var fileSystems = require('./fileSystems');
+
+/**
+ * Request a file system in which to store application data.
+ * @param type local file system type
+ * @param size indicates how much storage space, in bytes, the application expects to need
+ * @param successCallback invoked with a FileSystem object
+ * @param errorCallback invoked if error occurs retrieving file system
+ */
+var requestFileSystem = function(type, size, successCallback, errorCallback) {
+ argscheck.checkArgs('nnFF', 'requestFileSystem', arguments);
+ var fail = function(code) {
+ errorCallback && errorCallback(new FileError(code));
+ };
+
+ if (type < 0) {
+ fail(FileError.SYNTAX_ERR);
+ } else {
+ // if successful, return a FileSystem object
+ var success = function(file_system) {
+ if (file_system) {
+ if (successCallback) {
+ fileSystems.getFs(file_system.name, function(fs) {
+ // This should happen only on platforms that haven't implemented requestAllFileSystems (windows)
+ if (!fs) {
+ fs = new FileSystem(file_system.name, file_system.root);
+ }
+ successCallback(fs);
+ });
+ }
+ }
+ else {
+ // no FileSystem object returned
+ fail(FileError.NOT_FOUND_ERR);
+ }
+ };
+ exec(success, fail, "File", "requestFileSystem", [type, size]);
+ }
+};
+
+module.exports = requestFileSystem;
diff --git a/plugins/cordova-plugin-file/www/resolveLocalFileSystemURI.js b/plugins/cordova-plugin-file/www/resolveLocalFileSystemURI.js
new file mode 100644
index 00000000..dd6f90cc
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/resolveLocalFileSystemURI.js
@@ -0,0 +1,87 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+//For browser platform: not all browsers use overrided `resolveLocalFileSystemURL`.
+function checkBrowser() {
+ if (cordova.platformId === "browser" && navigator.userAgent.search(/Chrome/) > 0) {
+ var requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
+ module.exports = requestFileSystem;
+ return;
+ }
+}
+checkBrowser();
+
+var argscheck = require('cordova/argscheck'),
+ DirectoryEntry = require('./DirectoryEntry'),
+ FileEntry = require('./FileEntry'),
+ FileError = require('./FileError'),
+ exec = require('cordova/exec');
+var fileSystems = require('./fileSystems');
+
+/**
+ * Look up file system Entry referred to by local URI.
+ * @param {DOMString} uri URI referring to a local file or directory
+ * @param successCallback invoked with Entry object corresponding to URI
+ * @param errorCallback invoked if error occurs retrieving file system entry
+ */
+module.exports.resolveLocalFileSystemURL = function(uri, successCallback, errorCallback) {
+ argscheck.checkArgs('sFF', 'resolveLocalFileSystemURI', arguments);
+ // error callback
+ var fail = function(error) {
+ errorCallback && errorCallback(new FileError(error));
+ };
+ // sanity check for 'not:valid:filename' or '/not:valid:filename'
+ // file.spec.12 window.resolveLocalFileSystemURI should error (ENCODING_ERR) when resolving invalid URI with leading /.
+ if(!uri || uri.split(":").length > 2) {
+ setTimeout( function() {
+ fail(FileError.ENCODING_ERR);
+ },0);
+ return;
+ }
+ // if successful, return either a file or directory entry
+ var success = function(entry) {
+ if (entry) {
+ if (successCallback) {
+ // create appropriate Entry object
+ var fsName = entry.filesystemName || (entry.filesystem && entry.filesystem.name) || (entry.filesystem == window.PERSISTENT ? 'persistent' : 'temporary');
+ fileSystems.getFs(fsName, function(fs) {
+ // This should happen only on platforms that haven't implemented requestAllFileSystems (windows)
+ if (!fs) {
+ fs = new FileSystem(fsName, {name:"", fullPath:"/"});
+ }
+ var result = (entry.isDirectory) ? new DirectoryEntry(entry.name, entry.fullPath, fs, entry.nativeURL) : new FileEntry(entry.name, entry.fullPath, fs, entry.nativeURL);
+ successCallback(result);
+ });
+ }
+ }
+ else {
+ // no Entry object returned
+ fail(FileError.NOT_FOUND_ERR);
+ }
+ };
+
+ exec(success, fail, "File", "resolveLocalFileSystemURI", [uri]);
+};
+
+module.exports.resolveLocalFileSystemURI = function() {
+ console.log("resolveLocalFileSystemURI is deprecated. Please call resolveLocalFileSystemURL instead.");
+ module.exports.resolveLocalFileSystemURL.apply(this, arguments);
+};
diff --git a/plugins/cordova-plugin-file/www/ubuntu/FileSystem.js b/plugins/cordova-plugin-file/www/ubuntu/FileSystem.js
new file mode 100644
index 00000000..c43da824
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/ubuntu/FileSystem.js
@@ -0,0 +1,34 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+FILESYSTEM_PROTOCOL = "cdvfile";
+
+module.exports = {
+ __format__: function(fullPath) {
+ if (this.name === 'content') {
+ return 'content:/' + fullPath;
+ }
+ var path = ('/' + this.name + (fullPath[0] === '/' ? '' : '/') + encodeURI(fullPath)).replace('//','/');
+
+ return FILESYSTEM_PROTOCOL + '://localhost' + path;
+ }
+};
+
diff --git a/plugins/cordova-plugin-file/www/ubuntu/FileWriter.js b/plugins/cordova-plugin-file/www/ubuntu/FileWriter.js
new file mode 100644
index 00000000..a75506b7
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/ubuntu/FileWriter.js
@@ -0,0 +1,135 @@
+/*
+ *
+ * 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'),
+ FileError = require('./FileError'),
+ ProgressEvent = require('./ProgressEvent');
+
+function write(data) {
+ var that=this;
+ var supportsBinary = (typeof window.Blob !== 'undefined' && typeof window.ArrayBuffer !== 'undefined');
+ var isBinary;
+
+ // Check to see if the incoming data is a blob
+ if (data instanceof File || (supportsBinary && data instanceof Blob)) {
+ var fileReader = new FileReader();
+ fileReader.onload = function() {
+ // Call this method again, with the arraybuffer as argument
+ FileWriter.prototype.write.call(that, this.result);
+ };
+ if (supportsBinary) {
+ fileReader.readAsArrayBuffer(data);
+ } else {
+ fileReader.readAsText(data);
+ }
+ return;
+ }
+
+ // Mark data type for safer transport over the binary bridge
+ isBinary = supportsBinary && (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);
+ }
+
+ // WRITING state
+ this.readyState = FileWriter.WRITING;
+
+ var me = this;
+
+ // If onwritestart callback
+ if (typeof me.onwritestart === "function") {
+ me.onwritestart(new ProgressEvent("writestart", {"target":me}));
+ }
+
+ if (data instanceof ArrayBuffer || data.buffer instanceof ArrayBuffer) {
+ data = new Uint8Array(data);
+ var binary = "";
+ for (var i = 0; i < data.byteLength; i++) {
+ binary += String.fromCharCode(data[i]);
+ }
+ data = binary;
+ }
+
+ var prefix = "file://localhost";
+ var path = this.localURL;
+ if (path.substr(0, prefix.length) == prefix) {
+ path = path.substr(prefix.length);
+ }
+ // Write file
+ exec(
+ // Success callback
+ function(r) {
+ // If DONE (cancelled), then don't do anything
+ if (me.readyState === FileWriter.DONE) {
+ return;
+ }
+
+ // position always increases by bytes written because file would be extended
+ me.position += r;
+ // The length of the file is now where we are done writing.
+
+ me.length = me.position;
+
+ // DONE state
+ me.readyState = FileWriter.DONE;
+
+ // If onwrite callback
+ if (typeof me.onwrite === "function") {
+ me.onwrite(new ProgressEvent("write", {"target":me}));
+ }
+
+ // If onwriteend callback
+ if (typeof me.onwriteend === "function") {
+ me.onwriteend(new ProgressEvent("writeend", {"target":me}));
+ }
+ },
+ // Error callback
+ function(e) {
+ // If DONE (cancelled), then don't do anything
+ if (me.readyState === FileWriter.DONE) {
+ return;
+ }
+
+ // DONE state
+ me.readyState = FileWriter.DONE;
+
+ // Save error
+ me.error = new FileError(e);
+
+ // If onerror callback
+ if (typeof me.onerror === "function") {
+ me.onerror(new ProgressEvent("error", {"target":me}));
+ }
+
+ // If onwriteend callback
+ if (typeof me.onwriteend === "function") {
+ me.onwriteend(new ProgressEvent("writeend", {"target":me}));
+ }
+ }, "File", "write", [path, data, this.position, isBinary]);
+};
+
+module.exports = {
+ write: write
+};
+
+require("cordova/exec/proxy").add("FileWriter", module.exports);
diff --git a/plugins/cordova-plugin-file/www/ubuntu/fileSystems-roots.js b/plugins/cordova-plugin-file/www/ubuntu/fileSystems-roots.js
new file mode 100644
index 00000000..e132a959
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/ubuntu/fileSystems-roots.js
@@ -0,0 +1,53 @@
+/*
+ *
+ * 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 fsMap = null;
+var FileSystem = require('./FileSystem');
+var LocalFileSystem = require('./LocalFileSystem');
+var exec = require('cordova/exec');
+
+var requestFileSystem = function(type, size, successCallback) {
+ var success = function(file_system) {
+ if (file_system) {
+ if (successCallback) {
+ fs = new FileSystem(file_system.name, file_system.root);
+ successCallback(fs);
+ }
+ }
+ };
+ exec(success, null, "File", "requestFileSystem", [type, size]);
+};
+
+require('./fileSystems').getFs = function(name, callback) {
+ if (fsMap) {
+ callback(fsMap[name]);
+ } else {
+ requestFileSystem(LocalFileSystem.PERSISTENT, 1, function(fs) {
+ requestFileSystem(LocalFileSystem.TEMPORARY, 1, function(tmp) {
+ fsMap = {};
+ fsMap[tmp.name] = tmp;
+ fsMap[fs.name] = fs;
+ callback(fsMap[name]);
+ });
+ });
+ }
+};
+
diff --git a/plugins/cordova-plugin-file/www/wp/FileUploadOptions.js b/plugins/cordova-plugin-file/www/wp/FileUploadOptions.js
new file mode 100644
index 00000000..696573ab
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/wp/FileUploadOptions.js
@@ -0,0 +1,49 @@
+/*
+ *
+ * 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, headers, httpMethod) {
+ this.fileKey = fileKey || null;
+ this.fileName = fileName || null;
+ this.mimeType = mimeType || null;
+ this.headers = headers || null;
+ this.httpMethod = httpMethod || 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;