From caed585033747ac27c3a0dccd72110eef829420a Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Tue, 22 Jul 2014 08:08:31 +0300 Subject: [PATCH] Update Filesaver.js to v2014-07-21. --- docs/assets/js/vendor/filesaver.js | 45 +++++++++++++----------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/docs/assets/js/vendor/filesaver.js b/docs/assets/js/vendor/filesaver.js index 6095017e94..e7c05d593f 100644 --- a/docs/assets/js/vendor/filesaver.js +++ b/docs/assets/js/vendor/filesaver.js @@ -1,10 +1,10 @@ /* FileSaver.js - * A saveAs() FileSaver implementation. - * 2014-05-27 + * A saveAs() FileSaver implementation. + * 2014-07-21 * - * By Eli Grey, http://eligrey.com - * License: X11/MIT - * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md + * By Eli Grey, http://eligrey.com + * License: X11/MIT + * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md */ /*global self */ @@ -49,18 +49,17 @@ var saveAs = saveAs } , force_saveable_type = "application/octet-stream" , fs_min_size = 0 - , deletion_queue = [] - , process_deletion_queue = function() { - var i = deletion_queue.length; - while (i--) { - var file = deletion_queue[i]; + // See https://code.google.com/p/chromium/issues/detail?id=375297#c7 for + // the reasoning behind the timeout and revocation flow + , arbitrary_revoke_timeout = 10 + , revoke = function(file) { + setTimeout(function() { if (typeof file === "string") { // file is an object URL get_URL().revokeObjectURL(file); } else { // file is a File file.remove(); } - } - deletion_queue.length = 0; // clear queue + }, arbitrary_revoke_timeout); } , dispatch = function(filesaver, event_types, event) { event_types = [].concat(event_types); @@ -84,11 +83,6 @@ var saveAs = saveAs , blob_changed = false , object_url , target_view - , get_object_url = function() { - var object_url = get_URL().createObjectURL(blob); - deletion_queue.push(object_url); - return object_url; - } , dispatch_all = function() { dispatch(filesaver, "writestart progress write writeend".split(" ")); } @@ -96,15 +90,16 @@ var saveAs = saveAs , fs_error = function() { // don't create more object URLs than needed if (blob_changed || !object_url) { - object_url = get_object_url(blob); + object_url = get_URL().createObjectURL(blob); } if (target_view) { target_view.location.href = object_url; } else { - window.open(object_url, "_blank"); + view.open(object_url, "_blank"); } filesaver.readyState = filesaver.DONE; dispatch_all(); + revoke(object_url); } , abortable = function(func) { return function() { @@ -121,17 +116,20 @@ var saveAs = saveAs name = "download"; } if (can_use_save_link) { - object_url = get_object_url(blob); + 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; } // Object and web filesystem URLs have a problem saving in Google Chrome when // viewed in a tab, so I force save with application/octet-stream // http://code.google.com/p/chromium/issues/detail?id=91158 + // Update: Google errantly closed 91158, I submitted it again: + // https://code.google.com/p/chromium/issues/detail?id=389642 if (view.chrome && type && type !== force_saveable_type) { slice = blob.slice || blob.webkitSlice; blob = slice.call(blob, 0, blob.size, force_saveable_type); @@ -158,9 +156,9 @@ var saveAs = saveAs file.createWriter(abortable(function(writer) { writer.onwriteend = function(event) { target_view.location.href = file.toURL(); - deletion_queue.push(file); filesaver.readyState = filesaver.DONE; dispatch(filesaver, "writeend", event); + revoke(file); }; writer.onerror = function() { var error = writer.error; @@ -217,11 +215,6 @@ var saveAs = saveAs FS_proto.onwriteend = 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