You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
5.7 KiB
136 lines
5.7 KiB
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
|
|
var saveAs = saveAs || "undefined" !== typeof navigator && navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator) || function(a) {
|
|
"use strict";
|
|
if ("undefined" === typeof navigator || !/MSIE [1-9]\./.test(navigator.userAgent)) {
|
|
var k = a.document
|
|
, n = k.createElementNS("http://www.w3.org/1999/xhtml", "a")
|
|
, w = "download"in n
|
|
, x = function(c) {
|
|
var e = k.createEvent("MouseEvents");
|
|
e.initMouseEvent("click", !0, !1, a, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null);
|
|
c.dispatchEvent(e)
|
|
}
|
|
, q = a.webkitRequestFileSystem
|
|
, u = a.requestFileSystem || q || a.mozRequestFileSystem
|
|
, y = function(c) {
|
|
(a.setImmediate || a.setTimeout)(function() {
|
|
throw c;
|
|
}, 0)
|
|
}
|
|
, r = 0
|
|
, s = function(c) {
|
|
var e = function() {
|
|
"string" === typeof c ? (a.URL || a.webkitURL || a).revokeObjectURL(c) : c.remove()
|
|
};
|
|
a.chrome ? e() : setTimeout(e, 500)
|
|
}
|
|
, t = function(c, a, d) {
|
|
a = [].concat(a);
|
|
for (var b = a.length; b--; ) {
|
|
var l = c["on" + a[b]];
|
|
if ("function" === typeof l)
|
|
try {
|
|
l.call(c, d || c)
|
|
} catch (f) {
|
|
y(f)
|
|
}
|
|
}
|
|
}
|
|
, m = function(c, e) {
|
|
var d = this, b = c.type, l = !1, f, p, k = function() {
|
|
t(d, ["writestart", "progress", "write", "writeend"])
|
|
}, g = function() {
|
|
if (l || !f)
|
|
f = (a.URL || a.webkitURL || a).createObjectURL(c);
|
|
p ? p.location.href = f : void 0 == a.open(f, "_blank") && "undefined" !== typeof safari && (a.location.href = f);
|
|
d.readyState = d.DONE;
|
|
k();
|
|
s(f)
|
|
}, h = function(a) {
|
|
return function() {
|
|
if (d.readyState !== d.DONE)
|
|
return a.apply(this, arguments)
|
|
}
|
|
}, m = {
|
|
create: !0,
|
|
exclusive: !1
|
|
}, v;
|
|
d.readyState = d.INIT;
|
|
e || (e = "download");
|
|
if (w)
|
|
f = (a.URL || a.webkitURL || a).createObjectURL(c),
|
|
n.href = f,
|
|
n.download = e,
|
|
x(n),
|
|
d.readyState = d.DONE,
|
|
k(),
|
|
s(f);
|
|
else {
|
|
a.chrome && b && "application/octet-stream" !== b && (v = c.slice || c.webkitSlice,
|
|
c = v.call(c, 0, c.size, "application/octet-stream"),
|
|
l = !0);
|
|
q && "download" !== e && (e += ".download");
|
|
if ("application/octet-stream" === b || q)
|
|
p = a;
|
|
u ? (r += c.size,
|
|
u(a.TEMPORARY, r, h(function(a) {
|
|
a.root.getDirectory("saved", m, h(function(a) {
|
|
var b = function() {
|
|
a.getFile(e, m, h(function(a) {
|
|
a.createWriter(h(function(b) {
|
|
b.onwriteend = function(b) {
|
|
p.location.href = a.toURL();
|
|
d.readyState = d.DONE;
|
|
t(d, "writeend", b);
|
|
s(a)
|
|
}
|
|
;
|
|
b.onerror = function() {
|
|
var a = b.error;
|
|
a.code !== a.ABORT_ERR && g()
|
|
}
|
|
;
|
|
["writestart", "progress", "write", "abort"].forEach(function(a) {
|
|
b["on" + a] = d["on" + a]
|
|
});
|
|
b.write(c);
|
|
d.abort = function() {
|
|
b.abort();
|
|
d.readyState = d.DONE
|
|
}
|
|
;
|
|
d.readyState = d.WRITING
|
|
}), g)
|
|
}), g)
|
|
};
|
|
a.getFile(e, {
|
|
create: !1
|
|
}, h(function(a) {
|
|
a.remove();
|
|
b()
|
|
}), h(function(a) {
|
|
a.code === a.NOT_FOUND_ERR ? b() : g()
|
|
}))
|
|
}), g)
|
|
}), g)) : g()
|
|
}
|
|
}
|
|
, b = m.prototype;
|
|
b.abort = function() {
|
|
this.readyState = this.DONE;
|
|
t(this, "abort")
|
|
}
|
|
;
|
|
b.readyState = b.INIT = 0;
|
|
b.WRITING = 1;
|
|
b.DONE = 2;
|
|
b.error = b.onwritestart = b.onprogress = b.onwrite = b.onabort = b.onerror = b.onwriteend = null;
|
|
return function(a, b) {
|
|
return new m(a,b)
|
|
}
|
|
}
|
|
}("undefined" !== typeof self && self || "undefined" !== typeof window && window || this.content);
|
|
"undefined" !== typeof module && null !== module ? module.exports = saveAs : "undefined" !== typeof define && null !== define && null != define.amd && define([], function() {
|
|
return saveAs
|
|
});
|