mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	Updated filesaves.js'
This commit is contained in:
		
							parent
							
								
									4a35d883d5
								
							
						
					
					
						commit
						3c6c109077
					
				
					 10 changed files with 169 additions and 437 deletions
				
			
		|  | @ -128,7 +128,6 @@ | |||
|     <Compile Include="public\scripts\amt-wsman-0.2.0.js" /> | ||||
|     <Compile Include="public\scripts\amt-wsman-ws-0.2.0.js" /> | ||||
|     <Compile Include="public\scripts\common-0.0.1.js" /> | ||||
|     <Compile Include="public\scripts\filesaver.1.1.20151003.js" /> | ||||
|     <Compile Include="public\scripts\meshcentral.js" /> | ||||
|     <Compile Include="redirserver.js" /> | ||||
|     <Compile Include="webauthn.js" /> | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| { | ||||
|   "name": "meshcentral", | ||||
|   "version": "0.3.6-j", | ||||
|   "version": "0.3.6-k", | ||||
|   "keywords": [ | ||||
|     "Remote Management", | ||||
|     "Intel AMT", | ||||
|  |  | |||
|  | @ -1,270 +0,0 @@ | |||
| /* FileSaver.js | ||||
|  * A saveAs() FileSaver implementation. | ||||
|  * 1.1.20151003 | ||||
|  * | ||||
|  * By Eli Grey, http://eligrey.com
 | ||||
|  * License: MIT | ||||
|  *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
 | ||||
|  */ | ||||
| 
 | ||||
| /*global self */ | ||||
| /*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 || (function (view) { | ||||
|     "use strict"; | ||||
|     // IE <10 is explicitly unsupported
 | ||||
|     if (typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) { | ||||
|         return; | ||||
|     } | ||||
|     var | ||||
| 		  doc = view.document | ||||
| 		  // only get URL when necessary in case Blob.js hasn't overridden it yet
 | ||||
| 		, get_URL = function () { | ||||
| 		    return view.URL || view.webkitURL || view; | ||||
| 		} | ||||
| 		, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a") | ||||
| 		, can_use_save_link = "download" in save_link | ||||
| 		, click = function (node) { | ||||
| 		    var event = new MouseEvent("click"); | ||||
| 		    node.dispatchEvent(event); | ||||
| 		} | ||||
| 		, is_safari = /Version\/[\d\.]+.*Safari/.test(navigator.userAgent) | ||||
| 		, 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 | ||||
| 		// See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and
 | ||||
| 		// https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047
 | ||||
| 		// for the reasoning behind the timeout and revocation flow
 | ||||
| 		, arbitrary_revoke_timeout = 500 // in ms
 | ||||
| 		, revoke = function (file) { | ||||
| 		    var revoker = function () { | ||||
| 		        if (typeof file === "string") { // file is an object URL
 | ||||
| 		            get_URL().revokeObjectURL(file); | ||||
| 		        } else { // file is a File
 | ||||
| 		            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) { | ||||
| 		    // prepend BOM for UTF-8 XML and text types (including HTML)
 | ||||
| 		    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, no_auto_bom) { | ||||
| 		    if (!no_auto_bom) { | ||||
| 		        blob = auto_bom(blob); | ||||
| 		    } | ||||
| 		    // First try a.download, then web filesystem, then object URLs
 | ||||
| 		    var | ||||
| 				  filesaver = this | ||||
| 				, type = blob.type | ||||
| 				, blob_changed = false | ||||
| 				, object_url | ||||
| 				, target_view | ||||
| 				, dispatch_all = function () { | ||||
| 				    dispatch(filesaver, "writestart progress write writeend".split(" ")); | ||||
| 				} | ||||
| 				// on any filesys errors revert to saving with object URLs
 | ||||
| 				, fs_error = function () { | ||||
| 				    if (target_view && is_safari && typeof FileReader !== "undefined") { | ||||
| 				        // Safari doesn't allow downloading of blob urls
 | ||||
| 				        var reader = new FileReader(); | ||||
| 				        reader.onloadend = function () { | ||||
| 				            var base64Data = reader.result; | ||||
| 				            target_view.location.href = "data:attachment/file" + base64Data.slice(base64Data.search(/[,;]/)); | ||||
| 				            filesaver.readyState = filesaver.DONE; | ||||
| 				            dispatch_all(); | ||||
| 				        }; | ||||
| 				        reader.readAsDataURL(blob); | ||||
| 				        filesaver.readyState = filesaver.INIT; | ||||
| 				        return; | ||||
| 				    } | ||||
| 				    // don't create more object URLs than needed
 | ||||
| 				    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 && is_safari) { | ||||
| 				            //Apple do not allow window.open, see http://bit.ly/1kZffRI
 | ||||
| 				            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; | ||||
| 		        setTimeout(function () { | ||||
| 		            click(save_link); | ||||
| 		            dispatch_all(); | ||||
| 		            revoke(object_url); | ||||
| 		            filesaver.readyState = filesaver.DONE; | ||||
| 		        }); | ||||
| 		        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); | ||||
| 		        blob_changed = true; | ||||
| 		    } | ||||
| 		    // Since I can't be sure that the guessed media type will trigger a download
 | ||||
| 		    // in WebKit, I append .download to the filename.
 | ||||
| 		    // https://bugs.webkit.org/show_bug.cgi?id=65440
 | ||||
| 		    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) { | ||||
| 		                // delete file if it already exists
 | ||||
| 		                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, no_auto_bom) { | ||||
| 		    return new FileSaver(blob, name, no_auto_bom); | ||||
| 		} | ||||
|     ; | ||||
|     // IE 10+ (native saveAs)
 | ||||
|     if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) { | ||||
|         return function (blob, name, no_auto_bom) { | ||||
|             if (!no_auto_bom) { | ||||
|                 blob = auto_bom(blob); | ||||
|             } | ||||
|             return navigator.msSaveOrOpenBlob(blob, name || "download"); | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     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 | ||||
| )); | ||||
| // `self` is undefined in Firefox for Android content script context
 | ||||
| // while `this` is nsIContentFrameMessageManager
 | ||||
| // with an attribute `content` that corresponds to the window
 | ||||
| 
 | ||||
| if (typeof module !== "undefined" && module.exports) { | ||||
|     module.exports.saveAs = saveAs; | ||||
| } else if ((typeof define !== "undefined" && define !== null) && (define.amd != null)) { | ||||
|     define([], function () { | ||||
|         return saveAs; | ||||
|     }); | ||||
| } | ||||
|  | @ -1,19 +1,19 @@ | |||
| (function (global, factory) { | ||||
|   if (typeof define === "function" && define.amd) { | ||||
|     define([], factory); | ||||
|   } else if (typeof exports !== "undefined") { | ||||
|     factory(); | ||||
|   } else { | ||||
|     var mod = { | ||||
|       exports: {} | ||||
|     }; | ||||
|     factory(); | ||||
|     global.FileSaver = mod.exports; | ||||
|   } | ||||
|     if (typeof define === "function" && define.amd) { | ||||
|         define([], factory); | ||||
|     } else if (typeof exports !== "undefined") { | ||||
|         factory(); | ||||
|     } else { | ||||
|         var mod = { | ||||
|             exports: {} | ||||
|         }; | ||||
|         factory(); | ||||
|         global.FileSaver = mod.exports; | ||||
|     } | ||||
| })(this, function () { | ||||
|   "use strict"; | ||||
| 
 | ||||
|   /* | ||||
|     "use strict"; | ||||
|      | ||||
|     /* | ||||
|   * FileSaver.js | ||||
|   * A saveAs() FileSaver implementation. | ||||
|   * | ||||
|  | @ -25,156 +25,160 @@ | |||
|   // The one and only way of getting global scope in all environments
 | ||||
|   // https://stackoverflow.com/q/3277182/1008999
 | ||||
|   var _global = typeof window === 'object' && window.window === window ? window : typeof self === 'object' && self.self === self ? self : typeof global === 'object' && global.global === global ? global : void 0; | ||||
| 
 | ||||
|   function bom(blob, opts) { | ||||
|     if (typeof opts === 'undefined') opts = { | ||||
|       autoBom: false | ||||
|     };else if (typeof opts !== 'object') { | ||||
|       console.warn('Depricated: Expected third argument to be a object'); | ||||
|       opts = { | ||||
|         autoBom: !opts | ||||
|       }; | ||||
|     } // prepend BOM for UTF-8 XML and text/* types (including HTML)
 | ||||
|     // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
 | ||||
| 
 | ||||
|     if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { | ||||
|       return new Blob([String.fromCharCode(0xFEFF), blob], { | ||||
|         type: blob.type | ||||
|       }); | ||||
|      | ||||
|     function bom(blob, opts) { | ||||
|         if (typeof opts === 'undefined') opts = { | ||||
|             autoBom: false | ||||
|         }; else if (typeof opts !== 'object') { | ||||
|             console.warn('Deprecated: Expected third argument to be a object'); | ||||
|             opts = { | ||||
|                 autoBom: !opts | ||||
|             }; | ||||
|         } // prepend BOM for UTF-8 XML and text/* types (including HTML)
 | ||||
|         // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
 | ||||
|          | ||||
|         if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { | ||||
|             return new Blob([String.fromCharCode(0xFEFF), blob], { | ||||
|                 type: blob.type | ||||
|             }); | ||||
|         } | ||||
|          | ||||
|         return blob; | ||||
|     } | ||||
| 
 | ||||
|     return blob; | ||||
|   } | ||||
| 
 | ||||
|   function download(url, name, opts) { | ||||
|     var xhr = new XMLHttpRequest(); | ||||
|     xhr.open('GET', url); | ||||
|     xhr.responseType = 'blob'; | ||||
| 
 | ||||
|     xhr.onload = function () { | ||||
|       saveAs(xhr.response, name, opts); | ||||
|     }; | ||||
| 
 | ||||
|     xhr.onerror = function () { | ||||
|       console.error('could not download file'); | ||||
|     }; | ||||
| 
 | ||||
|     xhr.send(); | ||||
|   } | ||||
| 
 | ||||
|   function corsEnabled(url) { | ||||
|     var xhr = new XMLHttpRequest(); // use sync to avoid popup blocker
 | ||||
| 
 | ||||
|     xhr.open('HEAD', url, false); | ||||
|     xhr.send(); | ||||
|     return xhr.status >= 200 && xhr.status <= 299; | ||||
|   } // `a.click()` doesn't work for all browsers (#465)
 | ||||
| 
 | ||||
| 
 | ||||
|   function click(node) { | ||||
|     try { | ||||
|       node.dispatchEvent(new MouseEvent('click')); | ||||
|     } catch (e) { | ||||
|       var evt = document.createEvent('MouseEvents'); | ||||
|       evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null); | ||||
|       node.dispatchEvent(evt); | ||||
|      | ||||
|     function download(url, name, opts) { | ||||
|         var xhr = new XMLHttpRequest(); | ||||
|         xhr.open('GET', url); | ||||
|         xhr.responseType = 'blob'; | ||||
|          | ||||
|         xhr.onload = function () { | ||||
|             saveAs(xhr.response, name, opts); | ||||
|         }; | ||||
|          | ||||
|         xhr.onerror = function () { | ||||
|             console.error('could not download file'); | ||||
|         }; | ||||
|          | ||||
|         xhr.send(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   var saveAs = _global.saveAs || // probably in some web worker
 | ||||
|   typeof window !== 'object' || window !== _global ? function saveAs() {} | ||||
|      | ||||
|     function corsEnabled(url) { | ||||
|         var xhr = new XMLHttpRequest(); // use sync to avoid popup blocker
 | ||||
|          | ||||
|         xhr.open('HEAD', url, false); | ||||
|          | ||||
|         try { | ||||
|             xhr.send(); | ||||
|         } catch (e) { } | ||||
|          | ||||
|         return xhr.status >= 200 && xhr.status <= 299; | ||||
|     } // `a.click()` doesn't work for all browsers (#465)
 | ||||
|      | ||||
|      | ||||
|     function click(node) { | ||||
|         try { | ||||
|             node.dispatchEvent(new MouseEvent('click')); | ||||
|         } catch (e) { | ||||
|             var evt = document.createEvent('MouseEvents'); | ||||
|             evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null); | ||||
|             node.dispatchEvent(evt); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     var saveAs = _global.saveAs || (// probably in some web worker
 | ||||
|   typeof window !== 'object' || window !== _global ? function saveAs() { } | ||||
|   /* noop */ | ||||
|   // Use download attribute first if possible (#193 Lumia mobile)
 | ||||
|   : 'download' in HTMLAnchorElement.prototype ? function saveAs(blob, name, opts) { | ||||
|     var URL = _global.URL || _global.webkitURL; | ||||
|     var a = document.createElement('a'); | ||||
|     name = name || blob.name || 'download'; | ||||
|     a.download = name; | ||||
|     a.rel = 'noopener'; // tabnabbing
 | ||||
|     // TODO: detect chrome extensions & packaged apps
 | ||||
|     // a.target = '_blank'
 | ||||
| 
 | ||||
|     if (typeof blob === 'string') { | ||||
|       // Support regular links
 | ||||
|       a.href = blob; | ||||
| 
 | ||||
|       if (a.origin !== location.origin) { | ||||
|         corsEnabled(a.href) ? download(blob, name, opts) : click(a, a.target = '_blank'); | ||||
|       } else { | ||||
|         click(a); | ||||
|       } | ||||
|     } else { | ||||
|       // Support blobs
 | ||||
|       a.href = URL.createObjectURL(blob); | ||||
|       setTimeout(function () { | ||||
|         URL.revokeObjectURL(a.href); | ||||
|       }, 4E4); // 40s
 | ||||
| 
 | ||||
|       setTimeout(function () { | ||||
|         click(a); | ||||
|       }, 0); | ||||
|     } | ||||
|   } // Use msSaveOrOpenBlob as a second approach
 | ||||
|   : 'msSaveOrOpenBlob' in navigator ? function saveAs(blob, name, opts) { | ||||
|     name = name || blob.name || 'download'; | ||||
| 
 | ||||
|     if (typeof blob === 'string') { | ||||
|       if (corsEnabled(blob)) { | ||||
|         download(blob, name, opts); | ||||
|       } else { | ||||
|         var URL = _global.URL || _global.webkitURL; | ||||
|         var a = document.createElement('a'); | ||||
|         a.href = blob; | ||||
|         a.target = '_blank'; | ||||
|         setTimeout(function () { | ||||
|           click(a); | ||||
|         }); | ||||
|       } | ||||
|     } else { | ||||
|       navigator.msSaveOrOpenBlob(bom(blob, opts), name); | ||||
|     } | ||||
|   } // Fallback to using FileReader and a popup
 | ||||
|         name = name || blob.name || 'download'; | ||||
|         a.download = name; | ||||
|         a.rel = 'noopener'; // tabnabbing
 | ||||
|         // TODO: detect chrome extensions & packaged apps
 | ||||
|         // a.target = '_blank'
 | ||||
|          | ||||
|         if (typeof blob === 'string') { | ||||
|             // Support regular links
 | ||||
|             a.href = blob; | ||||
|              | ||||
|             if (a.origin !== location.origin) { | ||||
|                 corsEnabled(a.href) ? download(blob, name, opts) : click(a, a.target = '_blank'); | ||||
|             } else { | ||||
|                 click(a); | ||||
|             } | ||||
|         } else { | ||||
|             // Support blobs
 | ||||
|             a.href = URL.createObjectURL(blob); | ||||
|             setTimeout(function () { | ||||
|                 URL.revokeObjectURL(a.href); | ||||
|             }, 4E4); // 40s
 | ||||
|              | ||||
|             setTimeout(function () { | ||||
|                 click(a); | ||||
|             }, 0); | ||||
|         } | ||||
|     } // Use msSaveOrOpenBlob as a second approach
 | ||||
|   : 'msSaveOrOpenBlob' in navigator ? function saveAs(blob, name, opts) { | ||||
|         name = name || blob.name || 'download'; | ||||
|          | ||||
|         if (typeof blob === 'string') { | ||||
|             if (corsEnabled(blob)) { | ||||
|                 download(blob, name, opts); | ||||
|             } else { | ||||
|                 var a = document.createElement('a'); | ||||
|                 a.href = blob; | ||||
|                 a.target = '_blank'; | ||||
|                 setTimeout(function () { | ||||
|                     click(a); | ||||
|                 }); | ||||
|             } | ||||
|         } else { | ||||
|             navigator.msSaveOrOpenBlob(bom(blob, opts), name); | ||||
|         } | ||||
|     } // Fallback to using FileReader and a popup
 | ||||
|   : function saveAs(blob, name, opts, popup) { | ||||
|     // Open a popup immediately do go around popup blocker
 | ||||
|     // Mostly only avalible on user interaction and the fileReader is async so...
 | ||||
|     popup = popup || open('', '_blank'); | ||||
| 
 | ||||
|     if (popup) { | ||||
|       popup.document.title = popup.document.body.innerText = 'downloading...'; | ||||
|         // Open a popup immediately do go around popup blocker
 | ||||
|         // Mostly only available on user interaction and the fileReader is async so...
 | ||||
|         popup = popup || open('', '_blank'); | ||||
|          | ||||
|         if (popup) { | ||||
|             popup.document.title = popup.document.body.innerText = 'downloading...'; | ||||
|         } | ||||
|          | ||||
|         if (typeof blob === 'string') return download(blob, name, opts); | ||||
|         var force = blob.type === 'application/octet-stream'; | ||||
|          | ||||
|         var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari; | ||||
|          | ||||
|         var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent); | ||||
|          | ||||
|         if ((isChromeIOS || force && isSafari) && typeof FileReader === 'object') { | ||||
|             // Safari doesn't allow downloading of blob URLs
 | ||||
|             var reader = new FileReader(); | ||||
|              | ||||
|             reader.onloadend = function () { | ||||
|                 var url = reader.result; | ||||
|                 url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;'); | ||||
|                 if (popup) popup.location.href = url; else location = url; | ||||
|                 popup = null; // reverse-tabnabbing #460
 | ||||
|             }; | ||||
|              | ||||
|             reader.readAsDataURL(blob); | ||||
|         } else { | ||||
|             var URL = _global.URL || _global.webkitURL; | ||||
|             var url = URL.createObjectURL(blob); | ||||
|             if (popup) popup.location = url; else location.href = url; | ||||
|             popup = null; // reverse-tabnabbing #460
 | ||||
|              | ||||
|             setTimeout(function () { | ||||
|                 URL.revokeObjectURL(url); | ||||
|             }, 4E4); // 40s
 | ||||
|         } | ||||
|     }); | ||||
|     _global.saveAs = saveAs.saveAs = saveAs; | ||||
|      | ||||
|     if (typeof module !== 'undefined') { | ||||
|         module.exports = saveAs; | ||||
|     } | ||||
| 
 | ||||
|     if (typeof blob === 'string') return download(blob, name, opts); | ||||
|     var force = blob.type === 'application/octet-stream'; | ||||
| 
 | ||||
|     var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari; | ||||
| 
 | ||||
|     var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent); | ||||
| 
 | ||||
|     if ((isChromeIOS || force && isSafari) && typeof FileReader === 'object') { | ||||
|       // Safari doesn't allow downloading of blob urls
 | ||||
|       var reader = new FileReader(); | ||||
| 
 | ||||
|       reader.onloadend = function () { | ||||
|         var url = reader.result; | ||||
|         url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;'); | ||||
|         if (popup) popup.location.href = url;else location = url; | ||||
|         popup = null; // reverse-tabnabbing #460
 | ||||
|       }; | ||||
| 
 | ||||
|       reader.readAsDataURL(blob); | ||||
|     } else { | ||||
|       var URL = _global.URL || _global.webkitURL; | ||||
|       var url = URL.createObjectURL(blob); | ||||
|       if (popup) popup.location = url;else location.href = url; | ||||
|       popup = null; // reverse-tabnabbing #460
 | ||||
| 
 | ||||
|       setTimeout(function () { | ||||
|         URL.revokeObjectURL(url); | ||||
|       }, 4E4); // 40s
 | ||||
|     } | ||||
|   }; | ||||
|   _global.saveAs = saveAs.saveAs = saveAs; | ||||
| 
 | ||||
|   if (typeof module !== 'undefined') { | ||||
|     module.exports = saveAs; | ||||
|   } | ||||
| }); | ||||
|  |  | |||
							
								
								
									
										3
									
								
								public/scripts/filesaver.min.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								public/scripts/filesaver.min.js
									
										
									
									
										vendored
									
									
								
							|  | @ -1,3 +1,2 @@ | |||
| (function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Depricated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}function c(b,c,d){var e=new XMLHttpRequest;e.open("GET",b),e.responseType="blob",e.onload=function(){a(e.response,c,d)},e.onerror=function(){console.error("could not download file")},e.send()}function d(a){var b=new XMLHttpRequest;return b.open("HEAD",a,!1),b.send(),200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent("click"))}catch(c){var b=document.createEvent("MouseEvents");b.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,a=f.saveAs||"object"!=typeof window||window!==f?function(){}:"download"in HTMLAnchorElement.prototype?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement("a");g=g||b.name||"download",j.download=g,j.rel="noopener","string"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target="_blank")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:"msSaveOrOpenBlob"in navigator?function(f,g,h){if(g=g||f.name||"download","string"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement("a");i.href=f,i.target="_blank",setTimeout(function(){e(i)})}}:function(a,b,d,e){if(e=e||open("","_blank"),e&&(e.document.title=e.document.body.innerText="downloading..."),"string"==typeof a)return c(a,b,d);var g="application/octet-stream"===a.type,h=/constructor/i.test(f.HTMLElement)||f.safari,i=/CriOS\/[\d]+/.test(navigator.userAgent);if((i||g&&h)&&"object"==typeof FileReader){var j=new FileReader;j.onloadend=function(){var a=j.result;a=i?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),e?e.location.href=a:location=a,e=null},j.readAsDataURL(a)}else{var k=f.URL||f.webkitURL,l=k.createObjectURL(a);e?e.location=l:location.href=l,e=null,setTimeout(function(){k.revokeObjectURL(l)},4E4)}};f.saveAs=a.saveAs=a,"undefined"!=typeof module&&(module.exports=a)}); | ||||
| 
 | ||||
| (function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}function c(b,c,d){var e=new XMLHttpRequest;e.open("GET",b),e.responseType="blob",e.onload=function(){a(e.response,c,d)},e.onerror=function(){console.error("could not download file")},e.send()}function d(a){var b=new XMLHttpRequest;b.open("HEAD",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent("click"))}catch(c){var b=document.createEvent("MouseEvents");b.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,a=f.saveAs||("object"!=typeof window||window!==f?function(){}:"download"in HTMLAnchorElement.prototype?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement("a");g=g||b.name||"download",j.download=g,j.rel="noopener","string"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target="_blank")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:"msSaveOrOpenBlob"in navigator?function(f,g,h){if(g=g||f.name||"download","string"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement("a");i.href=f,i.target="_blank",setTimeout(function(){e(i)})}}:function(a,b,d,e){if(e=e||open("","_blank"),e&&(e.document.title=e.document.body.innerText="downloading..."),"string"==typeof a)return c(a,b,d);var g="application/octet-stream"===a.type,h=/constructor/i.test(f.HTMLElement)||f.safari,i=/CriOS\/[\d]+/.test(navigator.userAgent);if((i||g&&h)&&"object"==typeof FileReader){var j=new FileReader;j.onloadend=function(){var a=j.result;a=i?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),e?e.location.href=a:location=a,e=null},j.readAsDataURL(a)}else{var k=f.URL||f.webkitURL,l=k.createObjectURL(a);e?e.location=l:location.href=l,e=null,setTimeout(function(){k.revokeObjectURL(l)},4E4)}});f.saveAs=a.saveAs=a,"undefined"!=typeof module&&(module.exports=a)}); | ||||
| //# sourceMappingURL=FileSaver.min.js.map
 | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -18,7 +18,7 @@ | |||
|     <script type="text/javascript" src="scripts/zlib-inflate.js"></script> | ||||
|     <script type="text/javascript" src="scripts/zlib-adler32.js"></script> | ||||
|     <script type="text/javascript" src="scripts/zlib-crc32.js"></script> | ||||
|     <script keeplink=1 type="text/javascript" src="scripts/filesaver.1.1.20151003.js"></script> | ||||
|     <script keeplink=1 type="text/javascript" src="scripts/filesaver.js"></script> | ||||
|     <title>{{{title}}}</title> | ||||
|     <style> | ||||
|         a { | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
|     <script type="text/javascript" src="scripts/qrcode.min.js"></script> | ||||
|     <script keeplink=1 type="text/javascript" src="scripts/u2f-api.js"></script> | ||||
|     <script keeplink=1 type="text/javascript" src="scripts/charts.js"></script> | ||||
|     <script keeplink=1 type="text/javascript" src="scripts/filesaver.1.1.20151003.js"></script> | ||||
|     <script keeplink=1 type="text/javascript" src="scripts/filesaver.js"></script> | ||||
|     <script keeplink=1 type="text/javascript" src="scripts/ol.js"></script> | ||||
|     <script keeplink=1 type="text/javascript" src="scripts/ol3-contextmenu.js"></script> | ||||
|     <title>{{{title}}}</title> | ||||
|  |  | |||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue