blob: f5e89e6229c721d9ad2280a5380367dde35b45a8 [file] [log] [blame]
/*
*
* 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 FileError = require('cordova/plugin/FileError'),
ProgressEvent = require('cordova/plugin/ProgressEvent');
var FileReader = function() {
this.fileName = "";
this.readyState = 0; // FileReader.EMPTY
// File data
this.result = null;
// Error
this.error = null;
// Event handlers
this.onloadstart = null; // When the read starts.
this.onprogress = null; // While reading (and decoding) file or fileBlob data, and reporting partial file data (progess.loaded/progress.total)
this.onload = null; // When the read has successfully completed.
this.onerror = null; // When the read has failed (see errors).
this.onloadend = null; // When the request has completed (either in success or failure).
this.onabort = null; // When the read has been aborted. For instance, by invoking the abort() method.
};
FileReader.prototype.readAsText = function(file, encoding) {
console.error("webos plugin filereader readastext:" + file);
//Mojo has no file i/o yet, so we use an xhr. very limited
// Already loading something
if (this.readyState == FileReader.LOADING) {
throw new FileError(FileError.INVALID_STATE_ERR);
}
// LOADING state
this.readyState = FileReader.LOADING;
// If loadstart callback
if (typeof this.onloadstart === "function") {
this.onloadstart(new ProgressEvent("loadstart", {target:this}));
}
// Default encoding is UTF-8
var enc = encoding ? encoding : "UTF-8";
var me = this;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
console.error("onreadystatechange:"+xhr.readyState+" "+xhr.status);
if (xhr.readyState == 4) {
if (xhr.status == 200 && xhr.responseText) {
console.error("file read completed");
// Save result
me.result = xhr.responseText;
// If onload callback
if (typeof me.onload === "function") {
me.onload(new ProgressEvent("load", {target:me}));
}
// DONE state
me.readyState = FileReader.DONE;
// If onloadend callback
if (typeof me.onloadend === "function") {
me.onloadend(new ProgressEvent("loadend", {target:me}));
}
} else {
// 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(FileError.NOT_FOUND_ERR);
// 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}));
}
}
}
};
xhr.open("GET", file, true);
xhr.send();
};
module.exports = FileReader;