/* FileSaver.js
- * A saveAs() FileSaver implementation.
- * 2014-01-24
+ * A saveAs() FileSaver implementation.
+ * 2014-05-27
*
- * By Eli Grey, http://eligrey.com
- * License: X11/MIT
- * See LICENSE.md
+ * By Eli Grey, http://eligrey.com
+ * License: X11/MIT
+ * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
*/
/*global self */
-/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
- plusplus: true */
+/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
var saveAs = saveAs
// IE 10+ (native saveAs)
- || (navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator))
+ || (typeof navigator !== "undefined" &&
+ navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator))
// Everyone else
|| (function(view) {
"use strict";
// IE <10 is explicitly unsupported
- if (/MSIE [1-9]\./.test(navigator.userAgent)) {
+ if (typeof navigator !== "undefined" &&
+ /MSIE [1-9]\./.test(navigator.userAgent)) {
return;
}
var
doc = view.document
- // only get URL when necessary in case BlobBuilder.js hasn't overridden it yet
+ // only get URL when necessary in case Blob.js hasn't overridden it yet
, get_URL = function() {
return view.URL || view.webkitURL || view;
}
- , URL = view.URL || view.webkitURL || view
, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
- , can_use_save_link = !view.externalHost && "download" in save_link
+ , can_use_save_link = !view.externalHost && "download" in save_link
, click = function(node) {
var event = doc.createEvent("MouseEvents");
event.initMouseEvent(
}
, webkit_req_fs = view.webkitRequestFileSystem
, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
- , throw_outside = function (ex) {
+ , throw_outside = function(ex) {
(view.setImmediate || view.setTimeout)(function() {
throw ex;
}, 0);
while (i--) {
var file = deletion_queue[i];
if (typeof file === "string") { // file is an object URL
- URL.revokeObjectURL(file);
+ get_URL().revokeObjectURL(file);
} else { // file is a File
file.remove();
}
if (target_view) {
target_view.location.href = object_url;
} else {
- window.open(object_url, "_blank");
- }
+ window.open(object_url, "_blank");
+ }
filesaver.readyState = filesaver.DONE;
dispatch_all();
}
}
if (can_use_save_link) {
object_url = get_object_url(blob);
- // FF for Android has a nasty garbage collection mechanism
- // that turns all objects that are not pure javascript into 'deadObject'
- // this means `doc` and `save_link` are unusable and need to be recreated
- // `view` is usable though:
- doc = view.document;
- save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a");
save_link.href = object_url;
save_link.download = name;
- var event = doc.createEvent("MouseEvents");
- event.initMouseEvent(
- "click", true, false, view, 0, 0, 0, 0, 0
- , false, false, false, false, 0, null
- );
- save_link.dispatchEvent(event);
+ click(save_link);
filesaver.readyState = filesaver.DONE;
dispatch_all();
return;
null;
view.addEventListener("unload", process_deletion_queue, false);
+ saveAs.unload = function() {
+ process_deletion_queue();
+ view.removeEventListener("unload", process_deletion_queue, false);
+ };
return saveAs;
}(
typeof self !== "undefined" && self
// while `this` is nsIContentFrameMessageManager
// with an attribute `content` that corresponds to the window
-if (typeof module !== "undefined") module.exports = saveAs;
+if (typeof module !== "undefined" && module !== null) {
+ module.exports = saveAs;
+} else if ((typeof define !== "undefined" && define !== null) && (define.amd != null)) {
+ define([], function() {
+ return saveAs;
+ });
+}