/* 
 | 
 * JavaScript Canvas to Blob 2.0.5 
 | 
 * https://github.com/blueimp/JavaScript-Canvas-to-Blob 
 | 
 * 
 | 
 * Copyright 2012, Sebastian Tschan 
 | 
 * https://blueimp.net 
 | 
 * 
 | 
 * Licensed under the MIT license: 
 | 
 * http://www.opensource.org/licenses/MIT 
 | 
 * 
 | 
 * Based on stackoverflow user Stoive's code snippet: 
 | 
 * http://stackoverflow.com/q/4998908 
 | 
 */ 
 | 
  
 | 
/*jslint nomen: true, regexp: true */ 
 | 
/*global window, atob, Blob, ArrayBuffer, Uint8Array, define */ 
 | 
  
 | 
(function (window) { 
 | 
    'use strict'; 
 | 
    var CanvasPrototype = window.HTMLCanvasElement && 
 | 
            window.HTMLCanvasElement.prototype, 
 | 
        hasBlobConstructor = window.Blob && (function () { 
 | 
            try { 
 | 
                return Boolean(new Blob()); 
 | 
            } catch (e) { 
 | 
                return false; 
 | 
            } 
 | 
        }()), 
 | 
        hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array && 
 | 
            (function () { 
 | 
                try { 
 | 
                    return new Blob([new Uint8Array(100)]).size === 100; 
 | 
                } catch (e) { 
 | 
                    return false; 
 | 
                } 
 | 
            }()), 
 | 
        BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || 
 | 
            window.MozBlobBuilder || window.MSBlobBuilder, 
 | 
        dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob && 
 | 
            window.ArrayBuffer && window.Uint8Array && function (dataURI) { 
 | 
                var byteString, 
 | 
                    arrayBuffer, 
 | 
                    intArray, 
 | 
                    i, 
 | 
                    mimeString, 
 | 
                    bb; 
 | 
                if (dataURI.split(',')[0].indexOf('base64') >= 0) { 
 | 
                    // Convert base64 to raw binary data held in a string: 
 | 
                    byteString = atob(dataURI.split(',')[1]); 
 | 
                } else { 
 | 
                    // Convert base64/URLEncoded data component to raw binary data: 
 | 
                    byteString = decodeURIComponent(dataURI.split(',')[1]); 
 | 
                } 
 | 
                // Write the bytes of the string to an ArrayBuffer: 
 | 
                arrayBuffer = new ArrayBuffer(byteString.length); 
 | 
                intArray = new Uint8Array(arrayBuffer); 
 | 
                for (i = 0; i < byteString.length; i += 1) { 
 | 
                    intArray[i] = byteString.charCodeAt(i); 
 | 
                } 
 | 
                // Separate out the mime component: 
 | 
                mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; 
 | 
                // Write the ArrayBuffer (or ArrayBufferView) to a blob: 
 | 
                if (hasBlobConstructor) { 
 | 
                    return new Blob( 
 | 
                        [hasArrayBufferViewSupport ? intArray : arrayBuffer], 
 | 
                        {type: mimeString} 
 | 
                    ); 
 | 
                } 
 | 
                bb = new BlobBuilder(); 
 | 
                bb.append(arrayBuffer); 
 | 
                return bb.getBlob(mimeString); 
 | 
            }; 
 | 
    if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) { 
 | 
        if (CanvasPrototype.mozGetAsFile) { 
 | 
            CanvasPrototype.toBlob = function (callback, type, quality) { 
 | 
                if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) { 
 | 
                    callback(dataURLtoBlob(this.toDataURL(type, quality))); 
 | 
                } else { 
 | 
                    callback(this.mozGetAsFile('blob', type)); 
 | 
                } 
 | 
            }; 
 | 
        } else if (CanvasPrototype.toDataURL && dataURLtoBlob) { 
 | 
            CanvasPrototype.toBlob = function (callback, type, quality) { 
 | 
                callback(dataURLtoBlob(this.toDataURL(type, quality))); 
 | 
            }; 
 | 
        } 
 | 
    } 
 | 
    if (typeof define === 'function' && define.amd) { 
 | 
        define(function () { 
 | 
            return dataURLtoBlob; 
 | 
        }); 
 | 
    } else { 
 | 
        window.dataURLtoBlob = dataURLtoBlob; 
 | 
    } 
 | 
}(window)); 
 |