diff --git a/guacamole/src/main/webapp/scripts/lib/blob/LICENSE.md b/guacamole/src/main/webapp/scripts/lib/blob/LICENSE.md index 7eb56b98e..11520c90c 100644 --- a/guacamole/src/main/webapp/scripts/lib/blob/LICENSE.md +++ b/guacamole/src/main/webapp/scripts/lib/blob/LICENSE.md @@ -1,9 +1,4 @@ -This software is licensed under the MIT/X11 license. - -MIT/X11 license ---------------- - -Copyright © 2011 [Eli Grey][1]. +Copyright © 2014 [Eli Grey][1]. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation @@ -27,4 +22,4 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - [1]: http://eligrey.com \ No newline at end of file + [1]: http://eligrey.com diff --git a/guacamole/src/main/webapp/scripts/lib/blob/blob.js b/guacamole/src/main/webapp/scripts/lib/blob/blob.js index 6d48b3977..3b44c651f 100644 --- a/guacamole/src/main/webapp/scripts/lib/blob/blob.js +++ b/guacamole/src/main/webapp/scripts/lib/blob/blob.js @@ -1,11 +1,11 @@ /* Blob.js * A Blob implementation. - * 2013-06-20 - * + * 2014-07-24 + * * By Eli Grey, http://eligrey.com - * By Devin Samarin, https://github.com/eboyjr + * By Devin Samarin, https://github.com/dsamarin * License: X11/MIT - * See LICENSE.md + * See https://github.com/eligrey/Blob.js/blob/master/LICENSE.md */ /*global self, unescape */ @@ -14,12 +14,21 @@ /*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */ -if (typeof Blob !== "function" || typeof URL === "undefined") -if (typeof Blob === "function" && typeof webkitURL !== "undefined") var URL = webkitURL; -else var Blob = (function (view) { +(function (view) { "use strict"; - var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || view.MSBlobBuilder || (function(view) { + view.URL = view.URL || view.webkitURL; + + if (view.Blob && view.URL) { + try { + new Blob; + return; + } catch (e) {} + } + + // Internally we use a BlobBuilder implementation to base Blob off of + // in order to support older browsers that only have BlobBuilder + var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function(view) { var get_class = function(object) { return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]; @@ -50,25 +59,34 @@ else var Blob = (function (view) { , URL = real_URL , btoa = view.btoa , atob = view.atob - , can_apply_typed_arrays = false - , can_apply_typed_arrays_test = function(pass) { - can_apply_typed_arrays = !pass; - } - + , ArrayBuffer = view.ArrayBuffer , Uint8Array = view.Uint8Array + + , origin = /^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/ ; FakeBlob.fake = FB_proto.fake = true; while (file_ex_code--) { FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1; } - try { - if (Uint8Array) { - can_apply_typed_arrays_test.apply(0, new Uint8Array(1)); - } - } catch (ex) {} + // Polyfill URL if (!real_URL.createObjectURL) { - URL = view.URL = {}; + URL = view.URL = function(uri) { + var + uri_info = document.createElementNS("http://www.w3.org/1999/xhtml", "a") + , uri_origin + ; + uri_info.href = uri; + if (!("origin" in uri_info)) { + if (uri_info.protocol.toLowerCase() === "data:") { + uri_info.origin = null; + } else { + uri_origin = uri.match(origin); + uri_info.origin = uri_origin && uri_origin[1]; + } + } + return uri_info; + }; } URL.createObjectURL = function(blob) { var @@ -102,19 +120,16 @@ else var Blob = (function (view) { var bb = this.data; // decode data to a binary string if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) { - if (can_apply_typed_arrays) { - bb.push(String.fromCharCode.apply(String, new Uint8Array(data))); - } else { - var - str = "" - , buf = new Uint8Array(data) - , i = 0 - , buf_len = buf.length - ; - for (; i < buf_len; i++) { - str += String.fromCharCode(buf[i]); - } + var + str = "" + , buf = new Uint8Array(data) + , i = 0 + , buf_len = buf.length + ; + for (; i < buf_len; i++) { + str += String.fromCharCode(buf[i]); } + bb.push(str); } else if (get_class(data) === "Blob" || get_class(data) === "File") { if (FileReaderSync) { var fr = new FileReaderSync; @@ -162,10 +177,14 @@ else var Blob = (function (view) { FB_proto.toString = function() { return "[object Blob]"; }; + FB_proto.close = function() { + this.size = 0; + delete this.data; + }; return FakeBlobBuilder; }(view)); - return function Blob(blobParts, options) { + view.Blob = function(blobParts, options) { var type = options ? (options.type || "") : ""; var builder = new BlobBuilder(); if (blobParts) { @@ -175,4 +194,4 @@ else var Blob = (function (view) { } return builder.getBlob(type); }; -}(self)); +}(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this));