123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- goog.provide('goog.fs');
- goog.require('goog.array');
- goog.require('goog.async.Deferred');
- goog.require('goog.fs.Error');
- goog.require('goog.fs.FileReader');
- goog.require('goog.fs.FileSystemImpl');
- goog.require('goog.fs.url');
- goog.require('goog.userAgent');
- goog.fs.get_ = function(type, size) {
- var requestFileSystem =
- goog.global.requestFileSystem || goog.global.webkitRequestFileSystem;
- if (!goog.isFunction(requestFileSystem)) {
- return goog.async.Deferred.fail(new Error('File API unsupported'));
- }
- var d = new goog.async.Deferred();
- requestFileSystem(
- type, size, function(fs) { d.callback(new goog.fs.FileSystemImpl(fs)); },
- function(err) {
- d.errback(new goog.fs.Error(err, 'requesting filesystem'));
- });
- return d;
- };
- goog.fs.FileSystemType_ = {
-
- TEMPORARY: 0,
-
- PERSISTENT: 1
- };
- goog.fs.getTemporary = function(size) {
- return goog.fs.get_(goog.fs.FileSystemType_.TEMPORARY, size);
- };
- goog.fs.getPersistent = function(size) {
- return goog.fs.get_(goog.fs.FileSystemType_.PERSISTENT, size);
- };
- goog.fs.createObjectUrl = function(blob) {
- return goog.fs.url.createObjectUrl(blob);
- };
- goog.fs.revokeObjectUrl = function(url) {
- goog.fs.url.revokeObjectUrl(url);
- };
- goog.fs.browserSupportsObjectUrls = function() {
- return goog.fs.url.browserSupportsObjectUrls();
- };
- goog.fs.getBlob = function(var_args) {
- var BlobBuilder = goog.global.BlobBuilder || goog.global.WebKitBlobBuilder;
- if (goog.isDef(BlobBuilder)) {
- var bb = new BlobBuilder();
- for (var i = 0; i < arguments.length; i++) {
- bb.append(arguments[i]);
- }
- return bb.getBlob();
- } else {
- return goog.fs.getBlobWithProperties(goog.array.toArray(arguments));
- }
- };
- goog.fs.getBlobWithProperties = function(parts, opt_type, opt_endings) {
- var BlobBuilder = goog.global.BlobBuilder || goog.global.WebKitBlobBuilder;
- if (goog.isDef(BlobBuilder)) {
- var bb = new BlobBuilder();
- for (var i = 0; i < parts.length; i++) {
- bb.append(parts[i], opt_endings);
- }
- return bb.getBlob(opt_type);
- } else if (goog.isDef(goog.global.Blob)) {
- var properties = {};
- if (opt_type) {
- properties['type'] = opt_type;
- }
- if (opt_endings) {
- properties['endings'] = opt_endings;
- }
- return new Blob(parts, properties);
- } else {
- throw Error('This browser doesn\'t seem to support creating Blobs');
- }
- };
- goog.fs.blobToString = function(blob, opt_encoding) {
- return goog.fs.FileReader.readAsText(blob, opt_encoding);
- };
- goog.fs.sliceBlob = function(blob, start, opt_end) {
- if (!goog.isDef(opt_end)) {
- opt_end = blob.size;
- }
- if (blob.webkitSlice) {
-
-
- return blob.webkitSlice(start, opt_end);
- } else if (blob.mozSlice) {
-
-
-
- return blob.mozSlice(start, opt_end);
- } else if (blob.slice) {
-
-
-
-
- if ((goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher('13.0')) ||
- (goog.userAgent.WEBKIT && !goog.userAgent.isVersionOrHigher('537.1'))) {
- if (start < 0) {
- start += blob.size;
- }
- if (start < 0) {
- start = 0;
- }
- if (opt_end < 0) {
- opt_end += blob.size;
- }
- if (opt_end < start) {
- opt_end = start;
- }
- return blob.slice(start, opt_end - start);
- }
-
-
-
-
- return blob.slice(start, opt_end);
- }
- return null;
- };
|