var
saveAs = saveAs || (
function
(view) {
"use strict"
;
if
(
typeof
navigator !==
"undefined"
&& /MSIE [1-9]\./.test(navigator.userAgent)) {
return
;
}
var
doc = view.document
, get_URL =
function
() {
return
view.URL || view.webkitURL || view;
}
, can_use_save_link =
"download"
in
save_link
, click =
function
(node) {
var
event = doc.createEvent(
"MouseEvents"
);
event.initMouseEvent(
"click"
,
true
,
false
, view, 0, 0, 0, 0, 0
,
false
,
false
,
false
,
false
, 0,
null
);
node.dispatchEvent(event);
}
, webkit_req_fs = view.webkitRequestFileSystem
, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
, throw_outside =
function
(ex) {
(view.setImmediate || view.setTimeout)(
function
() {
throw
ex;
}, 0);
}
, force_saveable_type =
"application/octet-stream"
, fs_min_size = 0
, arbitrary_revoke_timeout = 500
, revoke =
function
(file) {
var
revoker =
function
() {
if
(
typeof
file ===
"string"
) {
get_URL().revokeObjectURL(file);
}
else
{
file.remove();
}
};
if
(view.chrome) {
revoker();
}
else
{
setTimeout(revoker, arbitrary_revoke_timeout);
}
}
, dispatch =
function
(filesaver, event_types, event) {
event_types = [].concat(event_types);
var
i = event_types.length;
while
(i--) {
var
listener = filesaver[
"on"
+ event_types[i]];
if
(
typeof
listener ===
"function"
) {
try
{
listener.call(filesaver, event || filesaver);
}
catch
(ex) {
throw_outside(ex);
}
}
}
}
, auto_bom =
function
(blob) {
if
(/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
return
new
Blob([
"\ufeff"
, blob], {type: blob.type});
}
return
blob;
}
, FileSaver =
function
(blob, name) {
blob = auto_bom(blob);
var
filesaver =
this
, type = blob.type
, blob_changed =
false
, object_url
, target_view
, dispatch_all =
function
() {
dispatch(filesaver,
"writestart progress write writeend"
.split(
" "
));
}
, fs_error =
function
() {
if
(blob_changed || !object_url) {
object_url = get_URL().createObjectURL(blob);
}
if
(target_view) {
target_view.location.href = object_url;
}
else
{
var
new_tab = view.open(object_url,
"_blank"
);
if
(new_tab == undefined &&
typeof
safari !==
"undefined"
) {
view.location.href = object_url
}
}
filesaver.readyState = filesaver.DONE;
dispatch_all();
revoke(object_url);
}
, abortable =
function
(func) {
return
function
() {
if
(filesaver.readyState !== filesaver.DONE) {
return
func.apply(
this
, arguments);
}
};
}
, create_if_not_found = {create:
true
, exclusive:
false
}
, slice
;
filesaver.readyState = filesaver.INIT;
if
(!name) {
name =
"download"
;
}
if
(can_use_save_link) {
object_url = get_URL().createObjectURL(blob);
save_link.href = object_url;
save_link.download = name;
click(save_link);
filesaver.readyState = filesaver.DONE;
dispatch_all();
revoke(object_url);
return
;
}
if
(view.chrome && type && type !== force_saveable_type) {
slice = blob.slice || blob.webkitSlice;
blob = slice.call(blob, 0, blob.size, force_saveable_type);
blob_changed =
true
;
}
if
(webkit_req_fs && name !==
"download"
) {
name +=
".download"
;
}
if
(type === force_saveable_type || webkit_req_fs) {
target_view = view;
}
if
(!req_fs) {
fs_error();
return
;
}
fs_min_size += blob.size;
req_fs(view.TEMPORARY, fs_min_size, abortable(
function
(fs) {
fs.root.getDirectory(
"saved"
, create_if_not_found, abortable(
function
(dir) {
var
save =
function
() {
dir.getFile(name, create_if_not_found, abortable(
function
(file) {
file.createWriter(abortable(
function
(writer) {
writer.onwriteend =
function
(event) {
target_view.location.href = file.toURL();
filesaver.readyState = filesaver.DONE;
dispatch(filesaver,
"writeend"
, event);
revoke(file);
};
writer.onerror =
function
() {
var
error = writer.error;
if
(error.code !== error.ABORT_ERR) {
fs_error();
}
};
"writestart progress write abort"
.split(
" "
).forEach(
function
(event) {
writer[
"on"
+ event] = filesaver[
"on"
+ event];
});
writer.write(blob);
filesaver.abort =
function
() {
writer.abort();
filesaver.readyState = filesaver.DONE;
};
filesaver.readyState = filesaver.WRITING;
}), fs_error);
}), fs_error);
};
dir.getFile(name, {create:
false
}, abortable(
function
(file) {
file.remove();
save();
}), abortable(
function
(ex) {
if
(ex.code === ex.NOT_FOUND_ERR) {
save();
}
else
{
fs_error();
}
}));
}), fs_error);
}), fs_error);
}
, FS_proto = FileSaver.prototype
, saveAs =
function
(blob, name) {
return
new
FileSaver(blob, name);
}
;
if
(
typeof
navigator !==
"undefined"
&& navigator.msSaveOrOpenBlob) {
return
function
(blob, name) {
return
navigator.msSaveOrOpenBlob(auto_bom(blob), name);
};
}
FS_proto.abort =
function
() {
var
filesaver =
this
;
filesaver.readyState = filesaver.DONE;
dispatch(filesaver,
"abort"
);
};
FS_proto.readyState = FS_proto.INIT = 0;
FS_proto.WRITING = 1;
FS_proto.DONE = 2;
FS_proto.error =
FS_proto.onwritestart =
FS_proto.onprogress =
FS_proto.onwrite =
FS_proto.onabort =
FS_proto.onerror =
FS_proto.onwriteend =
null
;
return
saveAs;
}(
typeof
self !==
"undefined"
&& self
||
typeof
window !==
"undefined"
&& window
||
this
.content
));
if
(
typeof
module !==
"undefined"
&& module.exports) {
module.exports.saveAs = saveAs;
}
else
if
((
typeof
define !==
"undefined"
&& define !==
null
) && (define.amd !=
null
)) {
define([],
function
() {
return
saveAs;
});
}