- From: Olli Pettay <Olli.Pettay@helsinki.fi>
- Date: Mon, 17 Aug 2009 12:45:36 +0300
- To: Michael Nordman <michaeln@google.com>
- CC: Jonas Sicking <jonas@sicking.cc>, Garrett Smith <dhtmlkitchen@gmail.com>, Webapps WG <public-webapps@w3.org>
On 8/17/09 12:33 AM, Michael Nordman wrote:
> Strictly speaking, I think the seperate 'Reader' class makes for a more
> correct API. The two corners above would not conflict since each would
> presumably be working with a distinct FileReader object. And the
> seperate 'Reader' with event handlers seems more javscript'y.
I agree with this. Reader+events 'feels' pretty much what I'd like to see.
>
> If we go with distinct 'Readers', maybe have the 'Data' object
> responsible for manufacturing them as there could be differences in
> where the 'Data' really resides and what it takes to retrieve it.
>
> var reader = data.createReader();
I'd do
var reader = new DataReader(someDataObject, DataReader.BINARY);
reader.onload =
function(evt) {
// grab the data using evt.target.getData();
};
reader.read();
>
> File - represents a file in the file system
> BinaryData - represents a bag of binary bits (roughly analogous to a
> Gears.Blob)
> BinaryDataReader - an interface to read those bits
>
> File isa BinaryData
> XHR.ResponseBody isa BinaryData
> SQLBlob isa BinaryData
So whatever implements Data would be readable using DataReader.
(Note, I wouldn't call it BinaryData, but just Data, or something like
that.)
So to read a file
var reader = new DataReader(input.files[0], DataReader.TEXT, "UTF-8");
reader.onload = handleLoad;
reader.read();
To read just some part of a file
var reader = new DataReader(input.files[0].slice(0, 1024),
DataReader.TEXT, "UTF-8");
reader.onload = handleHeaderLoad;
reader.read();
Interface would be close to what Jonas proposed as an
alternative API
[Constructor, Implements=EventTarget]
interface DataReader {
const unsigned short BINARY = 0;
const unsigned short TEXT = 1;
const unsigned short DATAURL = 2;
DataReader(Data, getAsType [, encoding]);
void read();
void abort();
const unsigned short INITIAL = 0;
const unsigned short LOADING = 1;
const unsigned short DONE = 2;
readonly attribute unsigned short readyState;
readonly attribute unsigned short dataType;
readonly attribute DOMString encoding;
readonly attribute unsigned long length;
readonly attribute DOMString getData([unsigned long offset [,
unsigned long length]]);
attribute Function onloadstart;
attribute Function onprogress;
attribute Function onload;
attribute Function onabort;
attribute Function onerror;
attribute Function onloadend;
};
-Olli
Received on Monday, 17 August 2009 09:46:29 UTC