{"version":3,"sources":["?","../client/js/jquery-plugin.js","../client/js/util.js","../client/js/export.js","../client/js/error/error.js","../client/js/version.js","../client/js/features.js","../client/js/promise.js","../client/js/blob-proxy.js","../client/js/button.js","../client/js/upload-data.js","../client/js/uploader.basic.api.js","../client/js/uploader.basic.js","../client/js/ajax.requester.js","../client/js/upload-handler/upload.handler.js","../client/js/upload-handler/upload.handler.controller.js","../client/js/upload-handler/form.upload.handler.js","../client/js/upload-handler/xhr.upload.handler.js","../client/js/deletefile.ajax.requester.js","../client/js/image-support/megapix-image.js","../client/js/image-support/image.js","../client/js/image-support/exif.js","../client/js/identify.js","../client/js/image-support/validation.image.js","../client/js/session.js","../client/js/session.ajax.requester.js","../client/js/image-support/scaler.js","../client/js/third-party/ExifRestorer.js","../client/js/total-progress.js","../client/js/paste.js","../client/js/form-support.js","../client/js/third-party/crypto-js/core.js","../client/js/third-party/crypto-js/enc-base64.js","../client/js/third-party/crypto-js/hmac.js","../client/js/third-party/crypto-js/sha1.js","../client/js/third-party/crypto-js/sha256.js","../client/js/third-party/crypto-js/lib-typedarrays.js","../client/js/s3/util.js","../client/js/non-traditional-common/uploader.basic.api.js","../client/js/s3/uploader.basic.js","../client/js/s3/request-signer.js","../client/js/uploadsuccess.ajax.requester.js","../client/js/s3/multipart.initiate.ajax.requester.js","../client/js/s3/multipart.complete.ajax.requester.js","../client/js/s3/multipart.abort.ajax.requester.js","../client/js/s3/s3.xhr.upload.handler.js","../client/js/s3/s3.form.upload.handler.js","../client/js/dnd.js","../client/js/uploader.api.js","../client/js/uploader.js","../client/js/templating.js","../client/js/ui.handler.events.js","../client/js/ui.handler.click.filebuttons.js","../client/js/ui.handler.click.filename.js","../client/js/ui.handler.focusin.filenameinput.js","../client/js/ui.handler.focus.filenameinput.js","../client/js/ui.handler.edit.filename.js","../client/js/s3/uploader.js"],"names":["global","$","init","options","xformedOpts","transformVariables","newUploaderInstance","getNewUploaderInstance","uploader","addCallbacks","$el","params","uploaderType","pluginOption","namespace","charAt","toUpperCase","slice","toLowerCase","qq","FineUploader","dataStore","key","val","data","undefined","instanceToStore","option","optionVal","transformedOpts","callbacks","each","_options","prop","nonJqueryCallback","name","callbackEventTarget","exec","substring","nonJqueryCallbackRetVal","jqueryEventCallbackRetVal","originalArgs","Array","prototype","call","arguments","transformedArgs","idx","arg","push","maybeWrapInJquery","apply","this","triggerHandler","error","log","message","source","dest","xformed","arrayVals","element","inArray","pluginOptions","isPlainObject","isArray","arrayVal","arrayObjDest","merge","isValidCommand","command","type","match","delegateCommand","retVal","xformedArgs","origArgs","transformedVal","nodeType","cloneNode","fn","fineUploader","optionsOrCommand","self","selfArgs","retVals","index","el","length","jQuery","hide","style","display","attach","addEventListener","attachEvent","detach","removeEventListener","detachEvent","contains","descendant","compareDocumentPosition","insertBefore","elementB","parentNode","remove","removeChild","css","styles","Error","opacity","filter","Math","round","extend","hasClass","considerParent","re","RegExp","test","className","addClass","removeClass","replace","getByClass","first","candidates","result","querySelector","querySelectorAll","getElementsByTagName","getFirstByClass","children","child","firstChild","nextSibling","setText","text","innerText","textContent","clearText","hasAttribute","attrName","attrVal","getAttribute","canvasToBlob","canvas","mime","quality","dataUriToBlob","toDataURL","dataUri","arrayBuffer","byteString","intArray","mimeString","createBlob","BlobBuilder","window","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","blobBuilder","append","getBlob","Blob","split","indexOf","atob","decodeURI","ArrayBuffer","Uint8Array","character","charCodeAt","level","console","isObject","variable","Object","toString","isFunction","value","buffer","constructor","isItemList","maybeItemList","isNodeList","maybeNodeList","item","namedItem","isString","maybeString","trimStr","string","String","trim","format","str","args","newStr","nextIdxToReplace","strBefore","strAfter","isFile","maybeFile","File","isFileList","maybeFileList","FileList","isFileOrInput","maybeFileOrInput","isInput","maybeInput","notFile","evaluateType","normalizedType","HTMLInputElement","tagName","isBlob","maybeBlob","isXhrUploadSupported","input","document","createElement","multiple","FormData","createXhrInstance","upload","XMLHttpRequest","ActiveXObject","isFolderDropSupported","dataTransfer","items","webkitGetAsEntry","isFileChunkingSupported","androidStock","webkitSlice","mozSlice","sliceBlob","fileOrBlob","start","end","slicer","arrayBufferToHex","bytesAsHex","bytes","byt","byteAsHexStr","readBlobToHex","blob","startOffset","initialBlob","fileReader","FileReader","promise","Promise","onload","success","onerror","failure","readAsArrayBuffer","second","extendNested","override","target","sourceFn","super_","srcPropName","srcPropVal","arr","elt","from","len","hasOwnProperty","getUniqueId","c","r","random","v","ie","navigator","userAgent","ie7","ie8","ie10","ie11","edge","safari","vendor","chrome","opera","firefox","windows","platform","android","ios6","ios","ios7","ios8","ios800","iosChrome","iosSafari","iosSafariWebView","preventDefault","e","returnValue","toElement","div","html","innerHTML","iterableItem","callback","keyOrIndex","Storage","getItem","bind","oldFunc","context","newArgs","concat","obj2url","obj","temp","prefixDone","uristrings","prefix","add","nextObj","i","nextTemp","encodeURIComponent","join","obj2FormData","formData","arrayKeyName","obj2Inputs","form","setAttribute","appendChild","parseJson","json","JSON","parse","eval","getExtension","filename","extIdx","lastIndexOf","substr","getFilename","blobOrFileInput","fileName","DisposeSupport","disposers","dispose","disposer","shift","addDisposer","disposeFunction","define","amd","module","exports","version","supportedFeatures","testSupportsFileInputElement","tempInput","supported","disabled","ex","isChrome21OrHigher","isChrome14OrHigher","isCrossOriginXhrSupported","xhr","withCredentials","isXdrSupported","XDomainRequest","isCrossOriginAjaxSupported","isFolderSelectionSupported","webkitdirectory","isLocalStorageSupported","localStorage","setItem","isDragAndDropSupported","span","supportsUploading","supportsUploadingBlobs","supportsFileDrop","supportsAjaxFileUploading","supportsFolderDrop","supportsChunking","supportsResume","supportsUploadViaPaste","supportsUploadCors","supportsDeleteFileXdr","supportsDeleteFileCorsXhr","supportsDeleteFileCors","supportsFolderSelection","supportsImagePreviews","supportsUploadProgress","postMessage","ajaxUploading","blobUploading","canDetermineSize","chunking","deleteFileCors","deleteFileCorsXdr","deleteFileCorsXhr","dialogElement","HTMLDialogElement","fileDrop","folderDrop","folderSelection","imagePreviews","imageValidation","itemSizeValidation","pause","progressBar","resume","scaling","tiffPreviews","unlimitedScaledImageSize","uploading","uploadCors","uploadCustomHeaders","uploadNonMultipart","uploadViaPaste","isGenericPromise","maybePromise","then","successArgs","failureArgs","successCallbacks","failureCallbacks","doneCallbacks","state","onSuccess","onFailure","done","BlobProxy","referenceBlob","onCreate","create","UploadButton","o","createInput","BUTTON_ID_ATTR_NAME","buttonId","title","setMultiple","folders","acceptFiles","position","right","top","fontFamily","fontSize","margin","padding","cursor","height","disposeSupport","onChange","hoverClass","focusClass","ios8BrowserCrashWorkaround","overflow","direction","getInput","getButtonId","isMultiple","optInput","removeAttribute","setAcceptFiles","reset","UploadData","uploaderProxy","getDataByIds","idOrIds","entries","id","getDataByUuids","uuids","uuid","byUuid","getDataByStatus","status","statusResults","statuses","statusEnum","statusResultIndexes","byStatus","dataIndex","byProxyGroupId","byBatchId","addFile","spec","SUBMITTING","originalName","size","batchId","proxyGroupId","onStatusChange","retrieve","optionalFilter","setStatus","newStatus","oldStatus","byStatusOldStatusIndex","splice","uuidChanged","newUuid","oldUuid","updateName","newName","updateSize","newSize","setParentId","targetId","parentId","getIdsInProxyGroup","getIdsInBatch","SUBMITTED","REJECTED","QUEUED","CANCELED","PAUSED","UPLOADING","UPLOAD_RETRYING","UPLOAD_SUCCESSFUL","UPLOAD_FAILED","DELETE_FAILED","DELETING","DELETED","basePublicApi","addBlobs","blobDataOrArray","endpoint","addFiles","addInitialFiles","cannedFileList","cannedFile","_addCannedFile","_maybeHandleIos8SafariWorkaround","_storedIds","_currentBatchId","processBlob","_handleNewFile","blobs","defaultName","verifiedFiles","processBlobData","blobData","processCanvas","processCanvasData","canvasData","normalizedQuality","processFileOrInput","fileOrInput","files","file","normalizeData","fileContainer","_prepareItemsForUpload","cancel","_handler","cancelAll","storedIdsCopy","storedFileId","clearStoredFiles","continueUpload","uploadData","_uploadData","enabled","getName","_uploadFile","deleteFile","_onSubmitDelete","doesExist","fileOrBlobId","isValid","drawThumbnail","fileId","imgOrCanvas","maxSize","fromServer","customResizeFunction","fileOrUrl","promiseToReturn","_imageGenerator","_thumbnailUrls","scale","getFile","container","generate","modifiedContainer","reason","getButton","_getButton","_buttonIdsForFileIds","getEndpoint","_endpointStore","get","getInProgress","getParentId","uploadDataEntry","getUploads","getResumableFilesData","getSize","getNetUploads","_netUploaded","getRemainingAllowedItems","allowedItems","_currentItemLimit","_netUploadedOrQueued","getUuid","debug","pauseUpload","_autoRetries","_retryTimeouts","_preventRetries","_buttons","button","_paramsStore","_pasteHandler","session","refreshOnReset","_refreshSessionData","_succeededSinceLastAllComplete","_failedSinceLastAllComplete","_totalProgress","retry","_manualRetry","scaleImage","specs","Scaler","setCustomHeaders","headers","_customHeadersStore","set","setDeleteFileCustomHeaders","_deleteFileCustomHeadersStore","setDeleteFileEndpoint","_deleteFileEndpointStore","setDeleteFileParams","_deleteFileParamsStore","setEndpoint","setForm","elementOrId","_updateFormSupportAndParams","setItemLimit","newItemLimit","setName","setParams","setUuid","uploadStoredFiles","_itemError","_uploadStoredFiles","basePrivateApi","sessionData","deleteFileEndpoint","deleteFileParams","thumbnailUrl","_annotateWithButtonId","associatedInput","qqButtonId","_getButtonId","_batchError","onError","_createDeleteHandler","DeleteFileAjaxRequester","method","maxConnections","uuidParamName","request","uuidName","customHeaders","paramsStore","endpointStore","cors","onDelete","_onDelete","onDeleteComplete","xhrOrXdr","isError","_onDeleteComplete","_createPasteHandler","PasteSupport","targetElement","paste","pasteReceived","_handleCheckedCallback","onPasteReceived","_handlePasteSuccess","identifier","_createStore","initialValue","_readOnlyValues_","store","catchall","perIdReadOnlyValues","readOnlyValues","copy","orig","getReadOnlyValues","includeReadOnlyValues","existing","values","addReadOnly","_createUploadDataTracker","_onUploadStatusChange","_maybeAllComplete","setTimeout","_createUploadButton","allowMultiple","workarounds","iosEmptyVideos","_isAllowedExtension","allowedExtensions","accept","validation","classes","buttonFocus","buttonHover","ios8BrowserCrash","inputName","_onInputChange","fileInputTitle","_disposeSupport","_createUploadHandler","additionalOptions","lastOnProgress","preventRetryParam","preventRetryResponseProperty","onProgress","loaded","total","_onProgress","onComplete","_onComplete","onCancel","cancelFinalizationEffort","_onCancel","onUploadPrep","_onUploadPrep","onUpload","_onUpload","onUploadChunk","chunkData","_onUploadChunk","onUploadChunkSuccess","onResume","onAutoRetry","responseJSON","_onAutoRetry","onUuidChanged","setSize","_setSize","getDataByUuid","isQueued","UploadHandlerController","_fileOrBlobRejected","_formatSize","max","toFixed","sizeSymbols","_generateExtraButtonSpecs","_extraButtonSpecs","extraButtons","extraButtonOptionEntry","extraButtonSpec","_initExtraButton","extraButtonsSpec","_defaultButtonId","buttonOrFileInputOrFile","inputs","fileInput","fileBlobOrInput","_getNotFinished","_getValidationBase","_getValidationDescriptor","fileWrapper","_getValidationDescriptors","fileWrappers","fileDescriptors","_handleCameraAccess","camera","acceptIosCamera","optionRoot","details","callbackRetVal","successParam","newFileWrapperList","actualFile","handler","_customNewFileHandler","_handleNewFileGeneric","addFileToHandler","_trackButton","fileList","extSuppliedName","extension","_initFormSupportAndParams","_formSupport","FormSupport","attachedToForm","getFormInputsAsObject","autoUpload","newAutoUpload","newEndpoint","_isDeletePossible","expected","allowXdr","allowed","valid","allowedExt","extRegex","code","maybeNameOrNames","replacement","extensionsForMessage","placeholderMatch","messages","names","validationBase","allowedExtension","formatFileName","sizeLimit","minSizeLimit","placeholder","_onBeforeManualRetry","notFinished","_onAllComplete","ios8SafariUploads","alert","unsupportedBrowserIos8Safari","_maybeParseAndSendUploadError","response","errorReason","defaultResponseError","_maybeProcessNextItemAfterOnValidateCallback","validItem","stopOnFirstInvalidFile","validationDescriptor","onValidate","_onValidateCallbackSuccess","_onValidateCallbackFailure","successful","failed","onAllComplete","_shouldAutoRetry","_onBeforeAutoRetry","autoAttemptDelay","itemLimit","onManualRetry","clearTimeout","storedItemIndex","expunge","fileIndex","onIndividualProgress","_onSubmit","_onSubmitCallbackSuccess","_onSubmitted","onSubmitted","_storeForLater","onSuccessCallback","additionalMandatedParams","adjustedOnSuccessCallback","onSubmitDelete","_deleteHandler","sendDelete","_onTotalProgress","onTotalProgress","_onValidateBatchCallbackFailure","_onValidateBatchCallbackSuccess","validationDescriptors","errorMessage","proposedNetFilesUploadedOrQueued","tooManyItemsError","nextIndex","_validateFileOrBlobData","_upload","onValidateBatch","_preventLeaveInProgress","event","onLeave","Session","_session","addFileRecord","refresh","_sessionRequestComplete","onSessionRequestComplete","onNewSize","enableAuto","maxAutoAttempts","formElementOrId","onSubmit","idToUpload","stillSubmitting","validityChecker","ImageValidation","validate","image","errorCode","_wrapCallbacks","safeCallback","errorMsg","exception","callbackName","callbackFunc","FineUploaderBasic","disableCancelForFormUploads","filenameParam","forceMultipart","paramsInBody","totalFileSizeName","maxHeight","maxWidth","minHeight","minWidth","maybeXhr","maybeXhrOrXdr","attemptNumber","fileOrBlobData","typeError","sizeError","minSizeError","emptyError","noFilesError","maxHeightImageError","maxWidthImageError","minHeightImageError","minWidthImageError","retryFailTooManyItems","concurrent","mandatory","paramNames","partIndex","partByteOffset","chunkSize","totalFileSize","totalParts","partSize","recordsExpireIn","resuming","fileOrBlobName","sendCredentials","interceptSubmit","customResizer","sendOriginal","orient","defaultType","defaultQuality","failureText","includeExif","sizes","ImageGenerator","_scaler","handleNewFile","TotalProgress","entry","AjaxRequester","isSimpleMethod","containsNonSimpleHeaders","containsNonSimple","header","isXdr","getCorsAjaxTransport","ontimeout","onprogress","getXhrOrXdr","suppliedXhr","requestData","dequeue","nextId","queue","sendRequest","xdrError","isResponseSuccessful","getParams","onDemandParams","additionalParams","mandatedParams","optXhr","url","payload","onSend","createUrl","additionalQueryParams","getXdrLoadHandler","getXdrErrorHandler","onreadystatechange","getXhrReadyStateChangeHandler","registerForUploadProgress","open","setHeaders","send","shouldParamsBeInQueryString","contentType","stringify","addToPath","readyState","lengthComputable","onDemandHeaders","additionalHeaders","allHeaders","acceptHeader","setRequestHeader","allowXRequestedWithAndCacheControl","responseCode","successfulResponseCodes","prepareToSend","validMethods","DELETE","PATCH","POST","PUT","GET","initTransport","path","cacheBuster","withPath","appendToPath","withParams","withQueryParams","_additionalQueryParams_","withHeaders","withPayload","thePayload","withCacheBuster","qqtimestamp","Date","getTime","canceled","UploadHandler","proxy","fileState","fileItem","onCancelRetVal","getThirdPartyFileId","_getFileState","_setThirdPartyFileId","thirdPartyFileId","_wasCanceled","preventRetryResponse","controller","chunkingPossible","concurrentChunkingPossible","chunked","chunkIdx","_getChunkData","attemptingResume","chunkProgress","_getChunkDataForCallback","finalize","finalizeChunks","normaizedResponse","normalizeResponse","_maybeDeletePersistedChunkData","cleanup","hasMoreParts","remaining","nextPart","nextIdx","_getTotalChunks","reevaluateChunking","sendNext","inProgressChunks","inProgress","connectionManager","available","uploadChunk","clearCachedChunk","responseToReport","inProgressChunkIdx","_maybePersistChunkedState","inProgressIdx","unshift","ignoreFailure","keys","_getXhrs","ckid","ckXhr","abort","_cancelled","moveInProgressToRemaining","free","clearXhr","_open","_openChunks","_waiting","openChunkEntriesCount","openChunksCount","openChunkIndexes","dontAllowNext","allowNext","waitingIndex","connectionsIndex","getProxyOrBlob","getWaitingOrConnected","waitingOrConnected","chunks","parseInt","isUsingConnection","pop","openChunksEntry","simple","uploadFile","maybeNewUuid","_clearXhrs","getProxy","initHandler","handlerType","traditional","handlerModuleSubtype","_removeExpiredChunkingRecords","isDeferredEligibleForUpload","maybeDefer","generatedBlob","updateBlob","maybeSendDeferredFiles","errorResponse","idsInGroup","uploadedThisId","idInGroup","now","originalResponse","_shouldChunkThisFile","blobToUpload","cancelRetVal","isProxied","isResumable","FormUploadHandler","expungeFile","detachLoadEvents","isCors","postMessageCallbackTimers","corsMessageReceiver","stopReceivingMessages","iframe","getElementById","_getIframeName","getFileIdForIframeName","iframeName","initIframeForUpload","body","registerPostMessageCallback","onloadCallbacks","receiveMessage","onloadCallback","_parseJsonResponse","_detachLoadEvent","formHandlerInstanceId","WindowReceiveMessage","_attachLoadEvent","responseDescriptor","contentDocument","_createIframe","_initFormForUpload","targetName","innerHtmlOrMessage","XhrUploadHandler","xhrId","ajaxRequester","_getAjaxRequester","chunkFiles","resumeEnabled","blobOrProxy","_initTempState","_maybePrepareForResume","cachedChunks","tempState","xhrs","ajaxRequesters","responseParser","lastChunkIdx","_getXhr","resumableFilesData","_iterateResumeRecords","notResumable","optInProgress","optRemaining","reverse","paused","totalChunks","parts","newBlob","chunkId","_createXhr","optChunkIdx","_registerXhr","chunkIndex","fileSize","startBytes","endBytes","part","count","startByte","endByte","_getLocalStorageId","formatVersion","_getMimeType","_getPersistableData","ceil","_markNotResumable","localStorageId","removeItem","persistedData","lastUpdated","_registerProgressHandler","progressCalculator","totalSuccessfullyLoadedForFile","loadedForRequest","totalForRequest","estActualChunkLoaded","totalLoadedForFile","chunkLoaded","optAjaxRequester","xhrsId","expirationDays","expirationDate","setDate","getDate","getMandatedParams","_method","requester","detectSubsampling","img","ctx","iw","naturalWidth","ih","naturalHeight","width","getContext","drawImage","getImageData","detectVerticalSquash","alpha","ratio","sy","ey","py","renderImageToDataURL","doSquash","renderImageToCanvas","maybeCalculateDownsampledDimensions","maxPixels","origHeight","origWidth","newHeight","sqrt","newWidth","modifiedDimensions","save","resize","renderImageToCanvasWithCustomResizer","imageHeight","imageWidth","orientation","targetHeight","targetWidth","transformCoordinate","tmpCtx","sx","dx","d","tmpCanvas","vertSquashRatio","dw","dh","dy","clearRect","restore","qqImageRendered","resizeInfo","sourceCanvas","sourceCanvasContext","targetCanvas","translate","rotate","PI","MegaPixImage","srcImage","errorCallback","Image","URL","createObjectURL","webkitURL","src","listeners","imageLoadListeners","render","opt","imgWidth","imgHeight","optionsKey","optionsValue","oldTargetSrc","onrender","isImg","isCanvas","isImgCorsSupported","crossOrigin","isCanvasSupported","determineMimeOfFileName","nameWithPath","pathSegments","isCrossOrigin","targetProtocol","targetHostname","targetPort","targetAnchor","href","protocol","port","hostname","location","registerImgLoadListeners","registerCanvasDrawImageListener","registerThumbnailRenderedListener","registered","draw","drawPreview","Identify","megapixErrorHandler","isPreviewable","dummyExif","exif","Exif","mpImg","Orientation","failureMsg","drawOnCanvasOrImgFromUrl","canvasOrImg","tempImg","tempImgRender","drawOnImgFromUrlWithCssScaling","drawFromUrl","fileBlobOrUrl","_testing","parseLittleEndian","hex","pow","seekToApp1","offset","theOffset","thePromise","segmentLength","getApp1Offset","isLittleEndian","app1Start","getDirEntryCount","littleEndian","getIfd","dirEntries","getDirEntries","ifdHex","getTagValues","TAG_VAL_OFFSET","tagsToFind","TAG_IDS","vals","tagValHex","tagValLength","idHex","tagsToFindIdx","TAG_INFO","274","parser","onParseFailure","app1Offset","dirEntryCount","tagValues","isIdentifiable","magicBytes","questionableBytes","identifiable","magicBytesEntries","magicBytesArrayEntry","previewable","isPreviewableSync","PREVIEWABLE_MIME_TYPES","fileMime","isRecognizedImage","image/jpeg","image/gif","image/png","image/bmp","image/tiff","hasNonZeroLimits","limits","atLeastOne","limit","getWidthHeight","sizeDetermination","getFailingLimit","dimensions","failingLimit","limitName","limitValue","limitMatcher","dimensionPropName","actualValue","validationEffort","isJsonResponseValid","handleFileItems","fileItems","someItemsIgnored","err","refreshEffort","refreshCompleteCallback","requesterOptions","SessionAjaxRequester","queryServer","responseText","includeOriginal","failedToScaleText","_getSortedSizes","getFileRecords","originalFileUuid","originalFileName","originalBlobOrBlobData","records","originalBlob","sizeRecord","outputType","_determineOutputType","requestedType","refType","_getName","_generateScaledImage","failedText","api","scaledIds","originalId","record","blobSize","scaledId","qqparentuuid","qqparentsize","param","scalingEffort","scalingOptions","scaler","referenceType","scaledVersionProperties","startOfExt","versionType","scaledName","scaledExt","nameAppendage","sort","a","b","sourceFile","imageGenerator","scaledImageDataUri","signalSuccess","_insertExifHeader","scaledImageDataUriWithExif","originalImage","reader","insertionEffort","originalImageDataUri","ExifRestorer","readAsDataURL","_dataUriToBlob","_createBlob","KEY_STR","encode64","chr1","chr2","enc1","enc2","enc3","output","chr3","enc4","isNaN","origFileBase64","resizedFileBase64","expectedBase64Header","rawImage","decode64","segments","slice2Segments","exifManipulation","exifArray","getExifArray","newImageArray","insertExif","aBuffer","seg","x","imageData","buf","separatePoint","mae","ato","array","rawImageArray","head","endPoint","base64test","perFileProgress","totalLoaded","totalSize","lastLoadedSent","lastTotalSent","callbackProxy","noRetryableFiles","retryable","none","failedId","updateTotalProgress","onNew","newLoaded","newTotal","oldLoaded","oldTotal","isImage","registerPasteHandler","detachPasteHandler","clipboardData","getAsFile","unregisterPasteHandler","startUpload","determineNewEndpoint","formEl","validateForm","nativeSubmit","checkValidity","maybeUploadOnSubmit","submit","determineFormEl","_form2Obj","notIrrelevantType","irrelevantTypes","radioOrCheckbox","ignoreValue","checked","selectValue","select","selected","elements","CryptoJS","C","C_lib","lib","Base","F","overrides","subtype","mixIn","$super","instance","properties","propertyName","clone","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","C_enc","enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","fromCharCode","latin1Str","latin1StrLength","Utf8","decodeURIComponent","escape","utf8Str","unescape","BufferedBlockAlgorithm","_data","_nDataBytes","_append","_process","doFlush","dataWords","dataSigBytes","blockSize","blockSizeBytes","nBlocksReady","_minBufferSize","nWordsReady","nBytesReady","min","_doProcessBlock","processedWords","C_algo","Hasher","cfg","_doReset","update","messageUpdate","hash","_doFinalize","_createHelper","hasher","_createHmacHelper","HMAC","algo","Base64","map","_map","base64Chars","byte1","byte2","byte3","triplet","j","paddingChar","base64Str","base64StrLength","paddingIndex","bits1","bits2","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","hmac","W","SHA1","_hash","M","H","n","t","nBitsTotal","nBitsLeft","floor","HmacSHA1","K","isPrime","sqrtN","factor","getFractionalBits","nPrime","SHA256","f","g","h","gamma0x","gamma0","gamma1x","gamma1","ch","maj","sigma0","sigma1","t1","t2","HmacSHA256","superInit","subInit","typedArray","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","byteOffset","byteLength","typedArrayByteLength","s3","util","ALGORITHM_PARAM_NAME","AWS_PARAM_PREFIX","CREDENTIAL_PARAM_NAME","DATE_PARAM_NAME","REDUCED_REDUNDANCY_PARAM_NAME","REDUCED_REDUNDANCY_PARAM_VALUE","SERVER_SIDE_ENCRYPTION_PARAM_NAME","SERVER_SIDE_ENCRYPTION_PARAM_VALUE","SESSION_TOKEN_PARAM_NAME","V4_ALGORITHM_PARAM_VALUE","V4_SIGNATURE_PARAM_NAME","CASE_SENSITIVE_PARAM_NAMES","UNSIGNABLE_REST_HEADER_NAMES","UNPREFIXED_PARAM_NAMES","getBucket","bucket","patterns","pattern","_getPrefixedParamName","getPolicy","policy","conditions","date","drift","clockDrift","accessKey","acl","expectedStatus","sessionToken","successRedirectUrl","getSuccessRedirectAbsoluteUrl","minFileSize","maxFileSize","reducedRedundancy","region","serverSideEncryption","signatureVersion","expiration","getPolicyExpirationDate","Content-Type","success_action_status","success_action_redirect","getV4CredentialsString","getV4PolicyDate","awsParamName","enforceSizeLimits","refreshPolicyCredentials","newSessionToken","sessionTokenFound","oldCondIdx","oldCondObj","oldCondName","oldCondVal","generateAwsParams","signPolicyCallback","policyJson","awsParams","customParams","AWSAccessKeyId","policyAndSignature","updatedAccessKey","updatedSessionToken","signature","minSize","adjustedMinSize","adjustedMaxSize","adjustedDate","getPolicyDate","getCredentialsDate","getUTCFullYear","getUTCMonth","getUTCDate","_minutesToAdd_","pad","minutesToAdd","setMinutes","getMinutes","toISOString","number","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","parseIframeResponse","doc","contentWindow","queryString","search","etag","targetAnchorContainer","encodeQueryStringParam","percentEncoded","nonTraditionalBasePublicApi","setUploadSuccessParams","_uploadSuccessParamsStore","setUploadSuccessEndpoint","_uploadSuccessEndpointStore","nonTraditionalBasePrivateApi","submitSuccessRequest","successAjaxRequester","onCompleteArgs","successEndpoint","successCustomHeaders","uploadSuccess","successMethod","uploadSuccessParams","fileParams","onSuccessFromServer","successRequestResult","_failedSuccessRequestCallbacks","onFailureFromServer","UploadSuccessAjaxRequester","_getEndpointSpecificParams","sendSuccessRequest","successRequestCallback","objectProperties","host","credentials","secretKey","iframeSupport","localBlankPagePath","onCredentialsExpired","setCredentials","_currentCredentials","_aclStore","_cannedKeys","_cannedBuckets","_buckets","_hosts","getKey","ignoreEmpty","setAcl","aclStore","_determineBucket","getHost","_determineHost","getKeyName","_determineKeyName","maxSizeLimit","oldParams","modifiedParams","paramName","credentialsProvider","onExpired","updateCredentials","_determineObjectPropertyValue","property","maybe","keynameLogic","onGetKeynameFailure","onGetKeynameSuccess","keyname","keynameToUse","_handleKeynameFunction","keynameFunc","successCallback","failureCallback","getResponseHeader","s3Key","s3Bucket","RequestSigner","handleSignatureReceived","responseJson","pendingSignatureData","pendingSignatures","signatureConstructor","invalid","expectingPolicy","generateHeaders","getStringToSignArtifacts","requestInfo","endOfUrl","signatureSpec","toSign","headerNames","headersStr","generateStringToSign","contentMd5","headerIndexesToRemove","headerName","headerIdx","hashedContent","v2","getStringToSign","v4","signedHeaders","getSignedHeaders","hashed","toSignRaw","raw","thisSignatureRequester","REQUEST_TYPE","MULTIPART_ABORT","uploadId","MULTIPART_INITIATE","MULTIPART_COMPLETE","MULTIPART_UPLOAD","partNum","getEncodedHashedPayload","content","Host","determineSignatureClientSide","toBeSigned","signatureEffort","updatedHeaders","getHeaders","getToSign","signatureArtifacts","signApiRequest","stringToSign","signPolicy","Authorization","getRequestDate","getEndOfUrl","headersWordArray","headersHmacSha1","headersHmacSha1Base64","policyStr","policyWordArray","base64Policy","policyHmacSha1","policyHmacSha1Base64","getCanonicalQueryString","endOfUri","encodedQueryParams","encodedQueryParamNames","queryStrings","queryParamIdx","canonicalQueryString","nameAndVal","paramVal","forEach","encodedQueryParamName","getCanonicalRequest","getCanonicalUri","onloadend","DONE","getScope","canonicalRequest","hashedRequest","scope","stringToSignTemplate","dateKey","dateRegionKey","dateRegionServiceKey","signingKey","headersPattern","matches","credentialPattern","credentialCondition","credential","condition","getSignature","queryParams","stringToSignRaw","constructStringToSign","artifacts","theHeaders","withUploadId","theUploadId","withContent","theContent","withContentType","theContentType","withPartNum","thePartNum","toUTCString","_artifacts_","handleSuccessResponse","parsedResponse","pendingRequests","successIndicator","failureIndicator","InitiateMultipartAjaxRequester","getSignatureAjaxRequester","getContentType","handleInitiateRequestComplete","uploadIdElements","messageElements","pendingInitiateRequests","domParser","DOMParser","responseDoc","parseFromString","CompleteMultipartAjaxRequester","handleCompleteRequestComplete","pendingCompleteRequests","bucketEls","keyEls","getCompleteRequestBody","etagEntries","implementation","createDocument","etagEntry","partEl","partNumEl","partNumTextEl","createTextNode","etagTextEl","etagEl","XMLSerializer","serializeToString","AbortMultipartAjaxRequester","handleAbortRequestComplete","awsErrorMsg","errorEls","onGetBucket","onGetHost","onGetKeyName","combine","etagMap","etags","requesters","completeMultipart","initHeaders","urlSafe","restSignature","put","domain","track","setup","uploadIdPromise","initiateMultipart","abortMultipart","policySignature","initParams","toSend","cachedBucket","cachedHost","shouldReset","keyName","encodedKey","parsedErrorProps","parseError","awsResponseXml","codeEls","messageEls","parsedDoc","errorDetails","existedInLocalStorage","baseStorageId","bucketName","isValidResponse","innerHtml","responseData","createForm","handleFinishedUpload","handleUpload","DragAndDrop","uploadDroppedFiles","uploadDropZone","filesAsArray","dropLog","dropDisabled","processingDroppedFilesComplete","getElement","traverseFileTree","parseEntryPromise","fullPath","indexOfNameInFullPath","qqPath","droppedFiles","fileError","isDirectory","getFilesInDirectory","entriesLeft","accumEntries","existingPromise","dirReader","createReader","readEntries","newEntries","handleDataTransfer","pendingFolderPromises","handleDataTransferPromise","processingDroppedFiles","allowMultipleItems","dropError","setupDropzone","dropArea","dropZone","UploadDropZone","HIDE_ZONES_EVENT_NAME","onEnter","dropActive","stopPropagation","onLeaveNotDescendants","onDrop","HIDE_BEFORE_ENTER_ATTR","uploadDropZones","isFileDrag","dragEvent","fileDrag","types","leavingDocumentOut","relatedTarget","y","setupDragDrop","dropZones","dropZoneElements","maybeHideDropZones","HTMLElement","setupExtraDropzone","removeDropzone","dzs","targetEl","errorSpecifics","dragoverShouldBeCanceled","disableDropOutside","dropOutsideDisabled","dropEffect","isValidFileDrag","effectTest","dt","isSafari","effectAllowed","isOrSetDropDisabled","isDisabled","preventDrop","triggerHidezonesEvent","triggerUsingOldApi","hideZonesEvent","createEvent","initEvent","CustomEvent","dispatchEvent","attachEvents","effect","elementFromPoint","clientX","clientY","uiPublicApi","_parent","_templating","addCacheToDom","clearFiles","addExtraDropzone","_dnd","removeExtraDropzone","getItemByFileId","isHiddenForever","getFileContainer","_setupDragAndDrop","_totalFilesInBatch","_filesInBatchAddedToUi","_setupClickAndEditEventHandlers","formattedFilename","updateFilename","uploadPaused","continued","uploadContinued","getId","fileContainerOrChildEl","getFileId","getDropTarget","qqDropTarget","uiPrivateApi","_removeFileItem","removeFile","_fileButtonsClickHandler","FileButtonsClickHandler","_bindFileButtonsClickEvent","_focusinEventSupported","_isEditFilenameEnabled","_filenameClickHandler","_bindFilenameClickEvent","_filenameInputFocusInHandler","_bindFilenameInputFocusInEvent","_filenameInputFocusHandler","_bindFilenameInputFocusEvent","dragAndDrop","extraDropzones","templating","defaultDropZone","getDropZone","showDropProcessing","hideDropProcessing","errorData","lvl","onDeleteFile","onRetry","onPause","onContinue","onGetName","isEditFilenamePossible","FilenameClickHandler","FilenameInputFocusHandler","_filenameEditHandler","onGetUploadStatus","onSetName","onEditingStatusChange","isEditing","qqInput","getEditInput","qqFileContainer","hideFilename","hideEditIcon","showFilename","showEditIcon","markFilenameEditable","hideRetry","setStatusText","_classes","retrying","hidePause","FilenameInputFocusInHandler","hideSpinner","resetTotalProgress","reportDirectoryPaths","qqpath","_addToList","addHandler","updateProgress","hideCancel","hideProgress","waitingForResponse","_displayFileSize","completeUpload","_markFileAsSuccessful","fail","showCancel","isRetryPossible","showRetry","_controlFailureTextDisplay","parentRetVal","newResult","showDeleteButton","_maybeUpdateThumbnail","showSpinner","allowPause","retryNumForDisplay","maxAuto","retryNote","_showCancelLink","showAutoRetryNote","autoRetryNote","resetProgress","_onSubmitDeleteSuccess","forceConfirm","_showDeleteConfirm","_sendDeleteRequest","deletingFailedText","hideDeleteButton","deletingStatusText","confirmMessage","deleteRequestArgs","showConfirm","canned","prependData","prependIndex","dontDisplay","hideScaled","prependFiles","disableCancel","_handledProxyGroup","_clearList","addFileToCache","updateThumbnail","thumbnails","generatePreview","fileSizeOnSubmit","loadedSize","sizeForDisplay","_formatProgress","uploadedSize","formatProgress","mode","responseProperty","failureReason","failedUploadTextDisplay","failUpload","enableTooltip","_showTooltip","showMessage","_setupPastePrompt","namePromptMessage","defaultVal","showPrompt","fileStatus","placeholders","waitUntilResponse","listElement","template","editable","tooManyFilesError","unsupportedBrowser","promptForName","maxCount","notAvailablePath","waitingPath","timeBetweenThumbs","hasDialog","showDialog","confirm","defaultValue","prompt","Templating","templateIdOrEl","containerEl","fileContainerEl","maxThumbs","waitUntilUpdate","thumbnailNotAvailable","waitingForThumbnail","renderFailure","isEditElementsExist","isRetryElementExist","templateHtml","showThumbnails","serverScale","FILE_ID_ATTR","FILE_CLASS_PREFIX","THUMBNAIL_MAX_SIZE_ATTR","THUMBNAIL_SERVER_SCALE_ATTR","HIDE_DROPZONE_ATTR","DROPZPONE_TEXT_ATTR","IN_PROGRESS_CLASS","HIDDEN_FOREVER_CLASS","fileBatch","createDocumentFragment","isCancelDisabled","generatedThumbnails","thumbnailQueueMonitorRunning","thumbGenerationQueue","thumbnailMaxSize","selectorClasses","alertDialog","dialogCancelButton","confirmDialog","dialogMessage","dialogOkButton","promptDialog","drop","list","progressBarContainer","totalProgressBarContainer","totalProgressBar","spinner","continueButton","deleteButton","statusText","editFilenameInput","editNameIcon","dropText","dropProcessing","dropProcessingSpinner","thumbnail","previewGeneration","cachedThumbnailNotAvailableImg","cachedWaitingForThumbnailImg","cacheThumbnailPlaceholders","notAvailableUrl","waitingUrl","updatedImg","displayWaitingImg","waitingImgPlacement","maybeScalePlaceholderViaCss","show","generateNewPreview","getThumbnail","qqThumbnailId","maybeSetDisplayNotAvailableImg","generateNextQueuedPreview","queuedThumbRequest","processUpdateQueuedPreviewRequest","processNewQueuedPreviewRequest","getCancel","getTemplateEl","getContinue","getDialog","getDelete","getDropProcessing","getEditIcon","getPause","getProgress","getRetry","getSpinner","cssClass","previewing","notAvailableImgPlacement","parseAndGetTemplate","scriptEl","scriptHtml","fileListNode","tempTemplateEl","fileListHtml","defaultButton","dropTextEl","uploaderEl","fileTemplate","prependFile","parentEl","beforeEl","optFileOrBlob","relatedThumbnailId","useCachedPreview","showWaitingImg","setProgressBarWidth","percent","bar","progressBarSelector","targetThumbnailId","cachedThumbnailId","targetThumbnail","cachedThumbnail","hideTotalProgress","cantRenderEl","prependInfo","hideForever","batch","thumb","fileEl","fileNameEl","waitingImg","currentNode","getFileList","filenameEl","isFileName","icon","isEditIcon","isEditInput","isCancel","allowContinueButton","isPause","isContinueButton","isDeleteButton","isRetry","textEl","dialog","messageEl","inputEl","cancelBtn","okBtn","closeHandler","cancelClickHandler","okClickHandler","close","showModal","UiEventHandler","s","protectedApi","eventType","srcElement","onHandled","attachTo","getFileIdFromItem","qqFileId","getDisposeSupport","examineEvent","buttonHandlers","buttonType","firstLetterCapButtonType","inheritedInternalApi","handleFilenameEdit","FilenameEditHandler","handleInputFocus","getFilenameSansExtension","filenameSansExt","getOriginalExtension","origName","handleNameUpdate","newFilenameInputEl","origExtension","registerInputBlurHandler","registerInputEnterKeyHandler","keyCode","which","focusInput","focus"],"mappings":"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","file":"s3.jquery.fine-uploader.min.js","sourcesContent":[null,"/*globals jQuery, qq*/\n(function($) {\n \"use strict\";\n var $el,\n pluginOptions = [\"uploaderType\", \"endpointType\"];\n\n function init(options) {\n var xformedOpts = transformVariables(options || {}),\n newUploaderInstance = getNewUploaderInstance(xformedOpts);\n\n uploader(newUploaderInstance);\n addCallbacks(xformedOpts, newUploaderInstance);\n\n return $el;\n }\n\n function getNewUploaderInstance(params) {\n var uploaderType = pluginOption(\"uploaderType\"),\n namespace = pluginOption(\"endpointType\");\n\n // If the integrator has defined a specific type of uploader to load, use that, otherwise assume `qq.FineUploader`\n if (uploaderType) {\n // We can determine the correct constructor function to invoke by combining \"FineUploader\"\n // with the upper camel cased `uploaderType` value.\n uploaderType = uploaderType.charAt(0).toUpperCase() + uploaderType.slice(1).toLowerCase();\n\n if (namespace) {\n return new qq[namespace][\"FineUploader\" + uploaderType](params);\n }\n\n return new qq[\"FineUploader\" + uploaderType](params);\n }\n else {\n if (namespace) {\n return new qq[namespace].FineUploader(params);\n }\n\n return new qq.FineUploader(params);\n }\n }\n\n function dataStore(key, val) {\n var data = $el.data(\"fineuploader\");\n\n if (val) {\n if (data === undefined) {\n data = {};\n }\n data[key] = val;\n $el.data(\"fineuploader\", data);\n }\n else {\n if (data === undefined) {\n return null;\n }\n return data[key];\n }\n }\n\n //the underlying Fine Uploader instance is stored in jQuery's data stored, associated with the element\n // tied to this instance of the plug-in\n function uploader(instanceToStore) {\n return dataStore(\"uploader\", instanceToStore);\n }\n\n function pluginOption(option, optionVal) {\n return dataStore(option, optionVal);\n }\n\n // Implement all callbacks defined in Fine Uploader as functions that trigger appropriately names events and\n // return the result of executing the bound handler back to Fine Uploader\n function addCallbacks(transformedOpts, newUploaderInstance) {\n var callbacks = transformedOpts.callbacks = {};\n\n $.each(newUploaderInstance._options.callbacks, function(prop, nonJqueryCallback) {\n var name, callbackEventTarget;\n\n name = /^on(\\w+)/.exec(prop)[1];\n name = name.substring(0, 1).toLowerCase() + name.substring(1);\n callbackEventTarget = $el;\n\n callbacks[prop] = function() {\n var originalArgs = Array.prototype.slice.call(arguments),\n transformedArgs = [],\n nonJqueryCallbackRetVal, jqueryEventCallbackRetVal;\n\n $.each(originalArgs, function(idx, arg) {\n transformedArgs.push(maybeWrapInJquery(arg));\n });\n\n nonJqueryCallbackRetVal = nonJqueryCallback.apply(this, originalArgs);\n\n try {\n jqueryEventCallbackRetVal = callbackEventTarget.triggerHandler(name, transformedArgs);\n }\n catch (error) {\n qq.log(\"Caught error in Fine Uploader jQuery event handler: \" + error.message, \"error\");\n }\n\n /*jshint -W116*/\n if (nonJqueryCallbackRetVal != null) {\n return nonJqueryCallbackRetVal;\n }\n return jqueryEventCallbackRetVal;\n };\n });\n\n newUploaderInstance._options.callbacks = callbacks;\n }\n\n //transform jQuery objects into HTMLElements, and pass along all other option properties\n function transformVariables(source, dest) {\n var xformed, arrayVals;\n\n if (dest === undefined) {\n if (source.uploaderType !== \"basic\") {\n xformed = { element: $el[0] };\n }\n else {\n xformed = {};\n }\n }\n else {\n xformed = dest;\n }\n\n $.each(source, function(prop, val) {\n if ($.inArray(prop, pluginOptions) >= 0) {\n pluginOption(prop, val);\n }\n else if (val instanceof $) {\n xformed[prop] = val[0];\n }\n else if ($.isPlainObject(val)) {\n xformed[prop] = {};\n transformVariables(val, xformed[prop]);\n }\n else if ($.isArray(val)) {\n arrayVals = [];\n $.each(val, function(idx, arrayVal) {\n var arrayObjDest = {};\n\n if (arrayVal instanceof $) {\n $.merge(arrayVals, arrayVal);\n }\n else if ($.isPlainObject(arrayVal)) {\n transformVariables(arrayVal, arrayObjDest);\n arrayVals.push(arrayObjDest);\n }\n else {\n arrayVals.push(arrayVal);\n }\n });\n xformed[prop] = arrayVals;\n }\n else {\n xformed[prop] = val;\n }\n });\n\n if (dest === undefined) {\n return xformed;\n }\n }\n\n function isValidCommand(command) {\n return $.type(command) === \"string\" &&\n !command.match(/^_/) && //enforce private methods convention\n uploader()[command] !== undefined;\n }\n\n // Assuming we have already verified that this is a valid command, call the associated function in the underlying\n // Fine Uploader instance (passing along the arguments from the caller) and return the result of the call back to the caller\n function delegateCommand(command) {\n var xformedArgs = [],\n origArgs = Array.prototype.slice.call(arguments, 1),\n retVal;\n\n transformVariables(origArgs, xformedArgs);\n\n retVal = uploader()[command].apply(uploader(), xformedArgs);\n\n return maybeWrapInJquery(retVal);\n }\n\n // If the value is an `HTMLElement` or `HTMLDocument`, wrap it in a `jQuery` object\n function maybeWrapInJquery(val) {\n var transformedVal = val;\n\n // If the command is returning an `HTMLElement` or `HTMLDocument`, wrap it in a `jQuery` object\n /*jshint -W116*/\n if (val != null && typeof val === \"object\" &&\n (val.nodeType === 1 || val.nodeType === 9) && val.cloneNode) {\n\n transformedVal = $(val);\n }\n\n return transformedVal;\n }\n\n $.fn.fineUploader = function(optionsOrCommand) {\n var self = this, selfArgs = arguments, retVals = [];\n\n this.each(function(index, el) {\n $el = $(el);\n\n if (uploader() && isValidCommand(optionsOrCommand)) {\n retVals.push(delegateCommand.apply(self, selfArgs));\n\n if (self.length === 1) {\n return false;\n }\n }\n else if (typeof optionsOrCommand === \"object\" || !optionsOrCommand) {\n init.apply(self, selfArgs);\n }\n else {\n $.error(\"Method \" + optionsOrCommand + \" does not exist on jQuery.fineUploader\");\n }\n });\n\n if (retVals.length === 1) {\n return retVals[0];\n }\n else if (retVals.length > 1) {\n return retVals;\n }\n\n return this;\n };\n\n}(jQuery));\n","/*globals window, navigator, document, FormData, File, HTMLInputElement, XMLHttpRequest, Blob, Storage, ActiveXObject */\n/* jshint -W079 */\nvar qq = function(element) {\n \"use strict\";\n\n return {\n hide: function() {\n element.style.display = \"none\";\n return this;\n },\n\n /** Returns the function which detaches attached event */\n attach: function(type, fn) {\n if (element.addEventListener) {\n element.addEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.attachEvent(\"on\" + type, fn);\n }\n return function() {\n qq(element).detach(type, fn);\n };\n },\n\n detach: function(type, fn) {\n if (element.removeEventListener) {\n element.removeEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.detachEvent(\"on\" + type, fn);\n }\n return this;\n },\n\n contains: function(descendant) {\n // The [W3C spec](http://www.w3.org/TR/domcore/#dom-node-contains)\n // says a `null` (or ostensibly `undefined`) parameter\n // passed into `Node.contains` should result in a false return value.\n // IE7 throws an exception if the parameter is `undefined` though.\n if (!descendant) {\n return false;\n }\n\n // compareposition returns false in this case\n if (element === descendant) {\n return true;\n }\n\n if (element.contains) {\n return element.contains(descendant);\n } else {\n /*jslint bitwise: true*/\n return !!(descendant.compareDocumentPosition(element) & 8);\n }\n },\n\n /**\n * Insert this element before elementB.\n */\n insertBefore: function(elementB) {\n elementB.parentNode.insertBefore(element, elementB);\n return this;\n },\n\n remove: function() {\n element.parentNode.removeChild(element);\n return this;\n },\n\n /**\n * Sets styles for an element.\n * Fixes opacity in IE6-8.\n */\n css: function(styles) {\n /*jshint eqnull: true*/\n if (element.style == null) {\n throw new qq.Error(\"Can't apply style to node as it is not on the HTMLElement prototype chain!\");\n }\n\n /*jshint -W116*/\n if (styles.opacity != null) {\n if (typeof element.style.opacity !== \"string\" && typeof (element.filters) !== \"undefined\") {\n styles.filter = \"alpha(opacity=\" + Math.round(100 * styles.opacity) + \")\";\n }\n }\n qq.extend(element.style, styles);\n\n return this;\n },\n\n hasClass: function(name, considerParent) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n return re.test(element.className) || !!(considerParent && re.test(element.parentNode.className));\n },\n\n addClass: function(name) {\n if (!qq(element).hasClass(name)) {\n element.className += \" \" + name;\n }\n return this;\n },\n\n removeClass: function(name) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n element.className = element.className.replace(re, \" \").replace(/^\\s+|\\s+$/g, \"\");\n return this;\n },\n\n getByClass: function(className, first) {\n var candidates,\n result = [];\n\n if (first && element.querySelector) {\n return element.querySelector(\".\" + className);\n }\n else if (element.querySelectorAll) {\n return element.querySelectorAll(\".\" + className);\n }\n\n candidates = element.getElementsByTagName(\"*\");\n\n qq.each(candidates, function(idx, val) {\n if (qq(val).hasClass(className)) {\n result.push(val);\n }\n });\n return first ? result[0] : result;\n },\n\n getFirstByClass: function(className) {\n return qq(element).getByClass(className, true);\n },\n\n children: function() {\n var children = [],\n child = element.firstChild;\n\n while (child) {\n if (child.nodeType === 1) {\n children.push(child);\n }\n child = child.nextSibling;\n }\n\n return children;\n },\n\n setText: function(text) {\n element.innerText = text;\n element.textContent = text;\n return this;\n },\n\n clearText: function() {\n return qq(element).setText(\"\");\n },\n\n // Returns true if the attribute exists on the element\n // AND the value of the attribute is NOT \"false\" (case-insensitive)\n hasAttribute: function(attrName) {\n var attrVal;\n\n if (element.hasAttribute) {\n\n if (!element.hasAttribute(attrName)) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(element.getAttribute(attrName)) == null;\n }\n else {\n attrVal = element[attrName];\n\n if (attrVal === undefined) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(attrVal) == null;\n }\n }\n };\n};\n\n(function() {\n \"use strict\";\n\n qq.canvasToBlob = function(canvas, mime, quality) {\n return qq.dataUriToBlob(canvas.toDataURL(mime, quality));\n };\n\n qq.dataUriToBlob = function(dataUri) {\n var arrayBuffer, byteString,\n createBlob = function(data, mime) {\n var BlobBuilder = window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder,\n blobBuilder = BlobBuilder && new BlobBuilder();\n\n if (blobBuilder) {\n blobBuilder.append(data);\n return blobBuilder.getBlob(mime);\n }\n else {\n return new Blob([data], {type: mime});\n }\n },\n intArray, mimeString;\n\n // convert base64 to raw binary data held in a string\n if (dataUri.split(\",\")[0].indexOf(\"base64\") >= 0) {\n byteString = atob(dataUri.split(\",\")[1]);\n }\n else {\n byteString = decodeURI(dataUri.split(\",\")[1]);\n }\n\n // extract the MIME\n mimeString = dataUri.split(\",\")[0]\n .split(\":\")[1]\n .split(\";\")[0];\n\n // write the bytes of the binary string to an ArrayBuffer\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n qq.each(byteString, function(idx, character) {\n intArray[idx] = character.charCodeAt(0);\n });\n\n return createBlob(arrayBuffer, mimeString);\n };\n\n qq.log = function(message, level) {\n if (window.console) {\n if (!level || level === \"info\") {\n window.console.log(message);\n }\n else\n {\n if (window.console[level]) {\n window.console[level](message);\n }\n else {\n window.console.log(\"<\" + level + \"> \" + message);\n }\n }\n }\n };\n\n qq.isObject = function(variable) {\n return variable && !variable.nodeType && Object.prototype.toString.call(variable) === \"[object Object]\";\n };\n\n qq.isFunction = function(variable) {\n return typeof (variable) === \"function\";\n };\n\n /**\n * Check the type of a value. Is it an \"array\"?\n *\n * @param value value to test.\n * @returns true if the value is an array or associated with an `ArrayBuffer`\n */\n qq.isArray = function(value) {\n return Object.prototype.toString.call(value) === \"[object Array]\" ||\n (value && window.ArrayBuffer && value.buffer && value.buffer.constructor === ArrayBuffer);\n };\n\n // Looks for an object on a `DataTransfer` object that is associated with drop events when utilizing the Filesystem API.\n qq.isItemList = function(maybeItemList) {\n return Object.prototype.toString.call(maybeItemList) === \"[object DataTransferItemList]\";\n };\n\n // Looks for an object on a `NodeList` or an `HTMLCollection`|`HTMLFormElement`|`HTMLSelectElement`\n // object that is associated with collections of Nodes.\n qq.isNodeList = function(maybeNodeList) {\n return Object.prototype.toString.call(maybeNodeList) === \"[object NodeList]\" ||\n // If `HTMLCollection` is the actual type of the object, we must determine this\n // by checking for expected properties/methods on the object\n (maybeNodeList.item && maybeNodeList.namedItem);\n };\n\n qq.isString = function(maybeString) {\n return Object.prototype.toString.call(maybeString) === \"[object String]\";\n };\n\n qq.trimStr = function(string) {\n if (String.prototype.trim) {\n return string.trim();\n }\n\n return string.replace(/^\\s+|\\s+$/g, \"\");\n };\n\n /**\n * @param str String to format.\n * @returns {string} A string, swapping argument values with the associated occurrence of {} in the passed string.\n */\n qq.format = function(str) {\n\n var args = Array.prototype.slice.call(arguments, 1),\n newStr = str,\n nextIdxToReplace = newStr.indexOf(\"{}\");\n\n qq.each(args, function(idx, val) {\n var strBefore = newStr.substring(0, nextIdxToReplace),\n strAfter = newStr.substring(nextIdxToReplace + 2);\n\n newStr = strBefore + val + strAfter;\n nextIdxToReplace = newStr.indexOf(\"{}\", nextIdxToReplace + val.length);\n\n // End the loop if we have run out of tokens (when the arguments exceed the # of tokens)\n if (nextIdxToReplace < 0) {\n return false;\n }\n });\n\n return newStr;\n };\n\n qq.isFile = function(maybeFile) {\n return window.File && Object.prototype.toString.call(maybeFile) === \"[object File]\";\n };\n\n qq.isFileList = function(maybeFileList) {\n return window.FileList && Object.prototype.toString.call(maybeFileList) === \"[object FileList]\";\n };\n\n qq.isFileOrInput = function(maybeFileOrInput) {\n return qq.isFile(maybeFileOrInput) || qq.isInput(maybeFileOrInput);\n };\n\n qq.isInput = function(maybeInput, notFile) {\n var evaluateType = function(type) {\n var normalizedType = type.toLowerCase();\n\n if (notFile) {\n return normalizedType !== \"file\";\n }\n\n return normalizedType === \"file\";\n };\n\n if (window.HTMLInputElement) {\n if (Object.prototype.toString.call(maybeInput) === \"[object HTMLInputElement]\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n if (maybeInput.tagName) {\n if (maybeInput.tagName.toLowerCase() === \"input\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n qq.isBlob = function(maybeBlob) {\n if (window.Blob && Object.prototype.toString.call(maybeBlob) === \"[object Blob]\") {\n return true;\n }\n };\n\n qq.isXhrUploadSupported = function() {\n var input = document.createElement(\"input\");\n input.type = \"file\";\n\n return (\n input.multiple !== undefined &&\n typeof File !== \"undefined\" &&\n typeof FormData !== \"undefined\" &&\n typeof (qq.createXhrInstance()).upload !== \"undefined\");\n };\n\n // Fall back to ActiveX is native XHR is disabled (possible in any version of IE).\n qq.createXhrInstance = function() {\n if (window.XMLHttpRequest) {\n return new XMLHttpRequest();\n }\n\n try {\n return new ActiveXObject(\"MSXML2.XMLHTTP.3.0\");\n }\n catch (error) {\n qq.log(\"Neither XHR or ActiveX are supported!\", \"error\");\n return null;\n }\n };\n\n qq.isFolderDropSupported = function(dataTransfer) {\n return dataTransfer.items &&\n dataTransfer.items.length > 0 &&\n dataTransfer.items[0].webkitGetAsEntry;\n };\n\n qq.isFileChunkingSupported = function() {\n return !qq.androidStock() && //Android's stock browser cannot upload Blobs correctly\n qq.isXhrUploadSupported() &&\n (File.prototype.slice !== undefined || File.prototype.webkitSlice !== undefined || File.prototype.mozSlice !== undefined);\n };\n\n qq.sliceBlob = function(fileOrBlob, start, end) {\n var slicer = fileOrBlob.slice || fileOrBlob.mozSlice || fileOrBlob.webkitSlice;\n\n return slicer.call(fileOrBlob, start, end);\n };\n\n qq.arrayBufferToHex = function(buffer) {\n var bytesAsHex = \"\",\n bytes = new Uint8Array(buffer);\n\n qq.each(bytes, function(idx, byt) {\n var byteAsHexStr = byt.toString(16);\n\n if (byteAsHexStr.length < 2) {\n byteAsHexStr = \"0\" + byteAsHexStr;\n }\n\n bytesAsHex += byteAsHexStr;\n });\n\n return bytesAsHex;\n };\n\n qq.readBlobToHex = function(blob, startOffset, length) {\n var initialBlob = qq.sliceBlob(blob, startOffset, startOffset + length),\n fileReader = new FileReader(),\n promise = new qq.Promise();\n\n fileReader.onload = function() {\n promise.success(qq.arrayBufferToHex(fileReader.result));\n };\n\n fileReader.onerror = promise.failure;\n\n fileReader.readAsArrayBuffer(initialBlob);\n\n return promise;\n };\n\n qq.extend = function(first, second, extendNested) {\n qq.each(second, function(prop, val) {\n if (extendNested && qq.isObject(val)) {\n if (first[prop] === undefined) {\n first[prop] = {};\n }\n qq.extend(first[prop], val, true);\n }\n else {\n first[prop] = val;\n }\n });\n\n return first;\n };\n\n /**\n * Allow properties in one object to override properties in another,\n * keeping track of the original values from the target object.\n *\n * Note that the pre-overriden properties to be overriden by the source will be passed into the `sourceFn` when it is invoked.\n *\n * @param target Update properties in this object from some source\n * @param sourceFn A function that, when invoked, will return properties that will replace properties with the same name in the target.\n * @returns {object} The target object\n */\n qq.override = function(target, sourceFn) {\n var super_ = {},\n source = sourceFn(super_);\n\n qq.each(source, function(srcPropName, srcPropVal) {\n if (target[srcPropName] !== undefined) {\n super_[srcPropName] = target[srcPropName];\n }\n\n target[srcPropName] = srcPropVal;\n });\n\n return target;\n };\n\n /**\n * Searches for a given element (elt) in the array, returns -1 if it is not present.\n */\n qq.indexOf = function(arr, elt, from) {\n if (arr.indexOf) {\n return arr.indexOf(elt, from);\n }\n\n from = from || 0;\n var len = arr.length;\n\n if (from < 0) {\n from += len;\n }\n\n for (; from < len; from += 1) {\n if (arr.hasOwnProperty(from) && arr[from] === elt) {\n return from;\n }\n }\n return -1;\n };\n\n //this is a version 4 UUID\n qq.getUniqueId = function() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n /*jslint eqeq: true, bitwise: true*/\n var r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n //\n // Browsers and platforms detection\n qq.ie = function() {\n return navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.userAgent.indexOf(\"Trident\") !== -1;\n };\n\n qq.ie7 = function() {\n return navigator.userAgent.indexOf(\"MSIE 7\") !== -1;\n };\n\n qq.ie8 = function() {\n return navigator.userAgent.indexOf(\"MSIE 8\") !== -1;\n };\n\n qq.ie10 = function() {\n return navigator.userAgent.indexOf(\"MSIE 10\") !== -1;\n };\n\n qq.ie11 = function() {\n return qq.ie() && navigator.userAgent.indexOf(\"rv:11\") !== -1;\n };\n\n qq.edge = function() {\n return navigator.userAgent.indexOf(\"Edge\") >= 0;\n };\n\n qq.safari = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Apple\") !== -1;\n };\n\n qq.chrome = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Google\") !== -1;\n };\n\n qq.opera = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Opera\") !== -1;\n };\n\n qq.firefox = function() {\n return (!qq.edge() && !qq.ie11() && navigator.userAgent.indexOf(\"Mozilla\") !== -1 && navigator.vendor !== undefined && navigator.vendor === \"\");\n };\n\n qq.windows = function() {\n return navigator.platform === \"Win32\";\n };\n\n qq.android = function() {\n return navigator.userAgent.toLowerCase().indexOf(\"android\") !== -1;\n };\n\n // We need to identify the Android stock browser via the UA string to work around various bugs in this browser,\n // such as the one that prevents a `Blob` from being uploaded.\n qq.androidStock = function() {\n return qq.android() && navigator.userAgent.toLowerCase().indexOf(\"chrome\") < 0;\n };\n\n qq.ios6 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 6_\") !== -1;\n };\n\n qq.ios7 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 7_\") !== -1;\n };\n\n qq.ios8 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_\") !== -1;\n };\n\n // iOS 8.0.0\n qq.ios800 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_0 \") !== -1;\n };\n\n qq.ios = function() {\n /*jshint -W014 */\n return navigator.userAgent.indexOf(\"iPad\") !== -1\n || navigator.userAgent.indexOf(\"iPod\") !== -1\n || navigator.userAgent.indexOf(\"iPhone\") !== -1;\n };\n\n qq.iosChrome = function() {\n return qq.ios() && navigator.userAgent.indexOf(\"CriOS\") !== -1;\n };\n\n qq.iosSafari = function() {\n return qq.ios() && !qq.iosChrome() && navigator.userAgent.indexOf(\"Safari\") !== -1;\n };\n\n qq.iosSafariWebView = function() {\n return qq.ios() && !qq.iosChrome() && !qq.iosSafari();\n };\n\n //\n // Events\n\n qq.preventDefault = function(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n };\n\n /**\n * Creates and returns element from html string\n * Uses innerHTML to create an element\n */\n qq.toElement = (function() {\n var div = document.createElement(\"div\");\n return function(html) {\n div.innerHTML = html;\n var element = div.firstChild;\n div.removeChild(element);\n return element;\n };\n }());\n\n //key and value are passed to callback for each entry in the iterable item\n qq.each = function(iterableItem, callback) {\n var keyOrIndex, retVal;\n\n if (iterableItem) {\n // Iterate through [`Storage`](http://www.w3.org/TR/webstorage/#the-storage-interface) items\n if (window.Storage && iterableItem.constructor === window.Storage) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(iterableItem.key(keyOrIndex), iterableItem.getItem(iterableItem.key(keyOrIndex)));\n if (retVal === false) {\n break;\n }\n }\n }\n // `DataTransferItemList` & `NodeList` objects are array-like and should be treated as arrays\n // when iterating over items inside the object.\n else if (qq.isArray(iterableItem) || qq.isItemList(iterableItem) || qq.isNodeList(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n else if (qq.isString(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem.charAt(keyOrIndex));\n if (retVal === false) {\n break;\n }\n }\n }\n else {\n for (keyOrIndex in iterableItem) {\n if (Object.prototype.hasOwnProperty.call(iterableItem, keyOrIndex)) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n }\n }\n };\n\n //include any args that should be passed to the new function after the context arg\n qq.bind = function(oldFunc, context) {\n if (qq.isFunction(oldFunc)) {\n var args = Array.prototype.slice.call(arguments, 2);\n\n return function() {\n var newArgs = qq.extend([], args);\n if (arguments.length) {\n newArgs = newArgs.concat(Array.prototype.slice.call(arguments));\n }\n return oldFunc.apply(context, newArgs);\n };\n }\n\n throw new Error(\"first parameter must be a function!\");\n };\n\n /**\n * obj2url() takes a json-object as argument and generates\n * a querystring. pretty much like jQuery.param()\n *\n * how to use:\n *\n * `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');`\n *\n * will result in:\n *\n * `http://any.url/upload?otherParam=value&a=b&c=d`\n *\n * @param Object JSON-Object\n * @param String current querystring-part\n * @return String encoded querystring\n */\n qq.obj2url = function(obj, temp, prefixDone) {\n /*jshint laxbreak: true*/\n var uristrings = [],\n prefix = \"&\",\n add = function(nextObj, i) {\n var nextTemp = temp\n ? (/\\[\\]$/.test(temp)) // prevent double-encoding\n ? temp\n : temp + \"[\" + i + \"]\"\n : i;\n if ((nextTemp !== \"undefined\") && (i !== \"undefined\")) {\n uristrings.push(\n (typeof nextObj === \"object\")\n ? qq.obj2url(nextObj, nextTemp, true)\n : (Object.prototype.toString.call(nextObj) === \"[object Function]\")\n ? encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj())\n : encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj)\n );\n }\n };\n\n if (!prefixDone && temp) {\n prefix = (/\\?/.test(temp)) ? (/\\?$/.test(temp)) ? \"\" : \"&\" : \"?\";\n uristrings.push(temp);\n uristrings.push(qq.obj2url(obj));\n } else if ((Object.prototype.toString.call(obj) === \"[object Array]\") && (typeof obj !== \"undefined\")) {\n qq.each(obj, function(idx, val) {\n add(val, idx);\n });\n } else if ((typeof obj !== \"undefined\") && (obj !== null) && (typeof obj === \"object\")) {\n qq.each(obj, function(prop, val) {\n add(val, prop);\n });\n } else {\n uristrings.push(encodeURIComponent(temp) + \"=\" + encodeURIComponent(obj));\n }\n\n if (temp) {\n return uristrings.join(prefix);\n } else {\n return uristrings.join(prefix)\n .replace(/^&/, \"\")\n .replace(/%20/g, \"+\");\n }\n };\n\n qq.obj2FormData = function(obj, formData, arrayKeyName) {\n if (!formData) {\n formData = new FormData();\n }\n\n qq.each(obj, function(key, val) {\n key = arrayKeyName ? arrayKeyName + \"[\" + key + \"]\" : key;\n\n if (qq.isObject(val)) {\n qq.obj2FormData(val, formData, key);\n }\n else if (qq.isFunction(val)) {\n formData.append(key, val());\n }\n else {\n formData.append(key, val);\n }\n });\n\n return formData;\n };\n\n qq.obj2Inputs = function(obj, form) {\n var input;\n\n if (!form) {\n form = document.createElement(\"form\");\n }\n\n qq.obj2FormData(obj, {\n append: function(key, val) {\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", key);\n input.setAttribute(\"value\", val);\n form.appendChild(input);\n }\n });\n\n return form;\n };\n\n /**\n * Not recommended for use outside of Fine Uploader since this falls back to an unchecked eval if JSON.parse is not\n * implemented. For a more secure JSON.parse polyfill, use Douglas Crockford's json2.js.\n */\n qq.parseJson = function(json) {\n /*jshint evil: true*/\n if (window.JSON && qq.isFunction(JSON.parse)) {\n return JSON.parse(json);\n } else {\n return eval(\"(\" + json + \")\");\n }\n };\n\n /**\n * Retrieve the extension of a file, if it exists.\n *\n * @param filename\n * @returns {string || undefined}\n */\n qq.getExtension = function(filename) {\n var extIdx = filename.lastIndexOf(\".\") + 1;\n\n if (extIdx > 0) {\n return filename.substr(extIdx, filename.length - extIdx);\n }\n };\n\n qq.getFilename = function(blobOrFileInput) {\n /*jslint regexp: true*/\n\n if (qq.isInput(blobOrFileInput)) {\n // get input value and remove path to normalize\n return blobOrFileInput.value.replace(/.*(\\/|\\\\)/, \"\");\n }\n else if (qq.isFile(blobOrFileInput)) {\n if (blobOrFileInput.fileName !== null && blobOrFileInput.fileName !== undefined) {\n return blobOrFileInput.fileName;\n }\n }\n\n return blobOrFileInput.name;\n };\n\n /**\n * A generic module which supports object disposing in dispose() method.\n * */\n qq.DisposeSupport = function() {\n var disposers = [];\n\n return {\n /** Run all registered disposers */\n dispose: function() {\n var disposer;\n do {\n disposer = disposers.shift();\n if (disposer) {\n disposer();\n }\n }\n while (disposer);\n },\n\n /** Attach event handler and register de-attacher as a disposer */\n attach: function() {\n var args = arguments;\n /*jslint undef:true*/\n this.addDisposer(qq(args[0]).attach.apply(this, Array.prototype.slice.call(arguments, 1)));\n },\n\n /** Add disposer to the collection */\n addDisposer: function(disposeFunction) {\n disposers.push(disposeFunction);\n }\n };\n };\n}());\n","/* globals define, module, global, qq */\n(function() {\n \"use strict\";\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return qq;\n });\n }\n else if (typeof module !== \"undefined\" && module.exports) {\n module.exports = qq;\n }\n else {\n global.qq = qq;\n }\n}());\n","/* globals qq */\n/**\n * Fine Uploader top-level Error container. Inherits from `Error`.\n */\n(function() {\n \"use strict\";\n\n qq.Error = function(message) {\n this.message = \"[Fine Uploader \" + qq.version + \"] \" + message;\n };\n\n qq.Error.prototype = new Error();\n}());\n","/*global qq */\nqq.version = \"5.11.1\";\n","/* globals qq */\nqq.supportedFeatures = (function() {\n \"use strict\";\n\n var supportsUploading,\n supportsUploadingBlobs,\n supportsFileDrop,\n supportsAjaxFileUploading,\n supportsFolderDrop,\n supportsChunking,\n supportsResume,\n supportsUploadViaPaste,\n supportsUploadCors,\n supportsDeleteFileXdr,\n supportsDeleteFileCorsXhr,\n supportsDeleteFileCors,\n supportsFolderSelection,\n supportsImagePreviews,\n supportsUploadProgress;\n\n function testSupportsFileInputElement() {\n var supported = true,\n tempInput;\n\n try {\n tempInput = document.createElement(\"input\");\n tempInput.type = \"file\";\n qq(tempInput).hide();\n\n if (tempInput.disabled) {\n supported = false;\n }\n }\n catch (ex) {\n supported = false;\n }\n\n return supported;\n }\n\n //only way to test for Filesystem API support since webkit does not expose the DataTransfer interface\n function isChrome21OrHigher() {\n return (qq.chrome() || qq.opera()) &&\n navigator.userAgent.match(/Chrome\\/[2][1-9]|Chrome\\/[3-9][0-9]/) !== undefined;\n }\n\n //only way to test for complete Clipboard API support at this time\n function isChrome14OrHigher() {\n return (qq.chrome() || qq.opera()) &&\n navigator.userAgent.match(/Chrome\\/[1][4-9]|Chrome\\/[2-9][0-9]/) !== undefined;\n }\n\n //Ensure we can send cross-origin `XMLHttpRequest`s\n function isCrossOriginXhrSupported() {\n if (window.XMLHttpRequest) {\n var xhr = qq.createXhrInstance();\n\n //Commonly accepted test for XHR CORS support.\n return xhr.withCredentials !== undefined;\n }\n\n return false;\n }\n\n //Test for (terrible) cross-origin ajax transport fallback for IE9 and IE8\n function isXdrSupported() {\n return window.XDomainRequest !== undefined;\n }\n\n // CORS Ajax requests are supported if it is either possible to send credentialed `XMLHttpRequest`s,\n // or if `XDomainRequest` is an available alternative.\n function isCrossOriginAjaxSupported() {\n if (isCrossOriginXhrSupported()) {\n return true;\n }\n\n return isXdrSupported();\n }\n\n function isFolderSelectionSupported() {\n // We know that folder selection is only supported in Chrome via this proprietary attribute for now\n return document.createElement(\"input\").webkitdirectory !== undefined;\n }\n\n function isLocalStorageSupported() {\n try {\n return !!window.localStorage &&\n // unpatched versions of IE10/11 have buggy impls of localStorage where setItem is a string\n qq.isFunction(window.localStorage.setItem);\n }\n catch (error) {\n // probably caught a security exception, so no localStorage for you\n return false;\n }\n }\n\n function isDragAndDropSupported() {\n var span = document.createElement(\"span\");\n\n return (\"draggable\" in span || (\"ondragstart\" in span && \"ondrop\" in span)) &&\n !qq.android() && !qq.ios();\n }\n\n supportsUploading = testSupportsFileInputElement();\n\n supportsAjaxFileUploading = supportsUploading && qq.isXhrUploadSupported();\n\n supportsUploadingBlobs = supportsAjaxFileUploading && !qq.androidStock();\n\n supportsFileDrop = supportsAjaxFileUploading && isDragAndDropSupported();\n\n supportsFolderDrop = supportsFileDrop && isChrome21OrHigher();\n\n supportsChunking = supportsAjaxFileUploading && qq.isFileChunkingSupported();\n\n supportsResume = supportsAjaxFileUploading && supportsChunking && isLocalStorageSupported();\n\n supportsUploadViaPaste = supportsAjaxFileUploading && isChrome14OrHigher();\n\n supportsUploadCors = supportsUploading && (window.postMessage !== undefined || supportsAjaxFileUploading);\n\n supportsDeleteFileCorsXhr = isCrossOriginXhrSupported();\n\n supportsDeleteFileXdr = isXdrSupported();\n\n supportsDeleteFileCors = isCrossOriginAjaxSupported();\n\n supportsFolderSelection = isFolderSelectionSupported();\n\n supportsImagePreviews = supportsAjaxFileUploading && window.FileReader !== undefined;\n\n supportsUploadProgress = (function() {\n if (supportsAjaxFileUploading) {\n return !qq.androidStock() && !qq.iosChrome();\n }\n return false;\n }());\n\n return {\n ajaxUploading: supportsAjaxFileUploading,\n blobUploading: supportsUploadingBlobs,\n canDetermineSize: supportsAjaxFileUploading,\n chunking: supportsChunking,\n deleteFileCors: supportsDeleteFileCors,\n deleteFileCorsXdr: supportsDeleteFileXdr, //NOTE: will also return true in IE10, where XDR is also supported\n deleteFileCorsXhr: supportsDeleteFileCorsXhr,\n dialogElement: !!window.HTMLDialogElement,\n fileDrop: supportsFileDrop,\n folderDrop: supportsFolderDrop,\n folderSelection: supportsFolderSelection,\n imagePreviews: supportsImagePreviews,\n imageValidation: supportsImagePreviews,\n itemSizeValidation: supportsAjaxFileUploading,\n pause: supportsChunking,\n progressBar: supportsUploadProgress,\n resume: supportsResume,\n scaling: supportsImagePreviews && supportsUploadingBlobs,\n tiffPreviews: qq.safari(), // Not the best solution, but simple and probably accurate enough (for now)\n unlimitedScaledImageSize: !qq.ios(), // false simply indicates that there is some known limit\n uploading: supportsUploading,\n uploadCors: supportsUploadCors,\n uploadCustomHeaders: supportsAjaxFileUploading,\n uploadNonMultipart: supportsAjaxFileUploading,\n uploadViaPaste: supportsUploadViaPaste\n };\n\n}());\n","/*globals qq*/\n\n// Is the passed object a promise instance?\nqq.isGenericPromise = function(maybePromise) {\n \"use strict\";\n return !!(maybePromise && maybePromise.then && qq.isFunction(maybePromise.then));\n};\n\nqq.Promise = function() {\n \"use strict\";\n\n var successArgs, failureArgs,\n successCallbacks = [],\n failureCallbacks = [],\n doneCallbacks = [],\n state = 0;\n\n qq.extend(this, {\n then: function(onSuccess, onFailure) {\n if (state === 0) {\n if (onSuccess) {\n successCallbacks.push(onSuccess);\n }\n if (onFailure) {\n failureCallbacks.push(onFailure);\n }\n }\n else if (state === -1) {\n onFailure && onFailure.apply(null, failureArgs);\n }\n else if (onSuccess) {\n onSuccess.apply(null, successArgs);\n }\n\n return this;\n },\n\n done: function(callback) {\n if (state === 0) {\n doneCallbacks.push(callback);\n }\n else {\n callback.apply(null, failureArgs === undefined ? successArgs : failureArgs);\n }\n\n return this;\n },\n\n success: function() {\n state = 1;\n successArgs = arguments;\n\n if (successCallbacks.length) {\n qq.each(successCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n return this;\n },\n\n failure: function() {\n state = -1;\n failureArgs = arguments;\n\n if (failureCallbacks.length) {\n qq.each(failureCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n return this;\n }\n });\n};\n","/* globals qq */\n/**\n * Placeholder for a Blob that will be generated on-demand.\n *\n * @param referenceBlob Parent of the generated blob\n * @param onCreate Function to invoke when the blob must be created. Must be promissory.\n * @constructor\n */\nqq.BlobProxy = function(referenceBlob, onCreate) {\n \"use strict\";\n\n qq.extend(this, {\n referenceBlob: referenceBlob,\n\n create: function() {\n return onCreate(referenceBlob);\n }\n });\n};\n","/*globals qq*/\n\n/**\n * This module represents an upload or \"Select File(s)\" button. It's job is to embed an opaque ``\n * element as a child of a provided \"container\" element. This \"container\" element (`options.element`) is used to provide\n * a custom style for the `` element. The ability to change the style of the container element is also\n * provided here by adding CSS classes to the container on hover/focus.\n *\n * TODO Eliminate the mouseover and mouseout event handlers since the :hover CSS pseudo-class should now be\n * available on all supported browsers.\n *\n * @param o Options to override the default values\n */\nqq.UploadButton = function(o) {\n \"use strict\";\n\n var self = this,\n\n disposeSupport = new qq.DisposeSupport(),\n\n options = {\n // Corresponds to the `accept` attribute on the associated ``\n acceptFiles: null,\n\n // \"Container\" element\n element: null,\n\n focusClass: \"qq-upload-button-focus\",\n\n // A true value allows folders to be selected, if supported by the UA\n folders: false,\n\n // **This option will be removed** in the future as the :hover CSS pseudo-class is available on all supported browsers\n hoverClass: \"qq-upload-button-hover\",\n\n ios8BrowserCrashWorkaround: false,\n\n // If true adds `multiple` attribute to ``\n multiple: false,\n\n // `name` attribute of ``\n name: \"qqfile\",\n\n // Called when the browser invokes the onchange handler on the ``\n onChange: function(input) {},\n\n title: null\n },\n input, buttonId;\n\n // Overrides any of the default option values with any option values passed in during construction.\n qq.extend(options, o);\n\n buttonId = qq.getUniqueId();\n\n // Embed an opaque `` element as a child of `options.element`.\n function createInput() {\n var input = document.createElement(\"input\");\n\n input.setAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME, buttonId);\n input.setAttribute(\"title\", options.title);\n\n self.setMultiple(options.multiple, input);\n\n if (options.folders && qq.supportedFeatures.folderSelection) {\n // selecting directories is only possible in Chrome now, via a vendor-specific prefixed attribute\n input.setAttribute(\"webkitdirectory\", \"\");\n }\n\n if (options.acceptFiles) {\n input.setAttribute(\"accept\", options.acceptFiles);\n }\n\n input.setAttribute(\"type\", \"file\");\n input.setAttribute(\"name\", options.name);\n\n qq(input).css({\n position: \"absolute\",\n // in Opera only 'browse' button\n // is clickable and it is located at\n // the right side of the input\n right: 0,\n top: 0,\n fontFamily: \"Arial\",\n // It's especially important to make this an arbitrarily large value\n // to ensure the rendered input button in IE takes up the entire\n // space of the container element. Otherwise, the left side of the\n // button will require a double-click to invoke the file chooser.\n // In other browsers, this might cause other issues, so a large font-size\n // is only used in IE. There is a bug in IE8 where the opacity style is ignored\n // in some cases when the font-size is large. So, this workaround is not applied\n // to IE8.\n fontSize: qq.ie() && !qq.ie8() ? \"3500px\" : \"118px\",\n margin: 0,\n padding: 0,\n cursor: \"pointer\",\n opacity: 0\n });\n\n // Setting the file input's height to 100% in IE7 causes\n // most of the visible button to be unclickable.\n !qq.ie7() && qq(input).css({height: \"100%\"});\n\n options.element.appendChild(input);\n\n disposeSupport.attach(input, \"change\", function() {\n options.onChange(input);\n });\n\n // **These event handlers will be removed** in the future as the :hover CSS pseudo-class is available on all supported browsers\n disposeSupport.attach(input, \"mouseover\", function() {\n qq(options.element).addClass(options.hoverClass);\n });\n disposeSupport.attach(input, \"mouseout\", function() {\n qq(options.element).removeClass(options.hoverClass);\n });\n\n disposeSupport.attach(input, \"focus\", function() {\n qq(options.element).addClass(options.focusClass);\n });\n disposeSupport.attach(input, \"blur\", function() {\n qq(options.element).removeClass(options.focusClass);\n });\n\n return input;\n }\n\n // Make button suitable container for input\n qq(options.element).css({\n position: \"relative\",\n overflow: \"hidden\",\n // Make sure browse button is in the right side in Internet Explorer\n direction: \"ltr\"\n });\n\n // Exposed API\n qq.extend(this, {\n getInput: function() {\n return input;\n },\n\n getButtonId: function() {\n return buttonId;\n },\n\n setMultiple: function(isMultiple, optInput) {\n var input = optInput || this.getInput();\n\n // Temporary workaround for bug in in iOS8 UIWebView that causes the browser to crash\n // before the file chooser appears if the file input doesn't contain a multiple attribute.\n // See #1283.\n if (options.ios8BrowserCrashWorkaround && qq.ios8() && (qq.iosChrome() || qq.iosSafariWebView())) {\n input.setAttribute(\"multiple\", \"\");\n }\n\n else {\n if (isMultiple) {\n input.setAttribute(\"multiple\", \"\");\n }\n else {\n input.removeAttribute(\"multiple\");\n }\n }\n },\n\n setAcceptFiles: function(acceptFiles) {\n if (acceptFiles !== options.acceptFiles) {\n input.setAttribute(\"accept\", acceptFiles);\n }\n },\n\n reset: function() {\n if (input.parentNode) {\n qq(input).remove();\n }\n\n qq(options.element).removeClass(options.focusClass);\n input = null;\n input = createInput();\n }\n });\n\n input = createInput();\n};\n\nqq.UploadButton.BUTTON_ID_ATTR_NAME = \"qq-button-id\";\n","/*globals qq */\nqq.UploadData = function(uploaderProxy) {\n \"use strict\";\n\n var data = [],\n byUuid = {},\n byStatus = {},\n byProxyGroupId = {},\n byBatchId = {};\n\n function getDataByIds(idOrIds) {\n if (qq.isArray(idOrIds)) {\n var entries = [];\n\n qq.each(idOrIds, function(idx, id) {\n entries.push(data[id]);\n });\n\n return entries;\n }\n\n return data[idOrIds];\n }\n\n function getDataByUuids(uuids) {\n if (qq.isArray(uuids)) {\n var entries = [];\n\n qq.each(uuids, function(idx, uuid) {\n entries.push(data[byUuid[uuid]]);\n });\n\n return entries;\n }\n\n return data[byUuid[uuids]];\n }\n\n function getDataByStatus(status) {\n var statusResults = [],\n statuses = [].concat(status);\n\n qq.each(statuses, function(index, statusEnum) {\n var statusResultIndexes = byStatus[statusEnum];\n\n if (statusResultIndexes !== undefined) {\n qq.each(statusResultIndexes, function(i, dataIndex) {\n statusResults.push(data[dataIndex]);\n });\n }\n });\n\n return statusResults;\n }\n\n qq.extend(this, {\n /**\n * Adds a new file to the data cache for tracking purposes.\n *\n * @param spec Data that describes this file. Possible properties are:\n *\n * - uuid: Initial UUID for this file.\n * - name: Initial name of this file.\n * - size: Size of this file, omit if this cannot be determined\n * - status: Initial `qq.status` for this file. Omit for `qq.status.SUBMITTING`.\n * - batchId: ID of the batch this file belongs to\n * - proxyGroupId: ID of the proxy group associated with this file\n *\n * @returns {number} Internal ID for this file.\n */\n addFile: function(spec) {\n var status = spec.status || qq.status.SUBMITTING,\n id = data.push({\n name: spec.name,\n originalName: spec.name,\n uuid: spec.uuid,\n size: spec.size == null ? -1 : spec.size,\n status: status\n }) - 1;\n\n if (spec.batchId) {\n data[id].batchId = spec.batchId;\n\n if (byBatchId[spec.batchId] === undefined) {\n byBatchId[spec.batchId] = [];\n }\n byBatchId[spec.batchId].push(id);\n }\n\n if (spec.proxyGroupId) {\n data[id].proxyGroupId = spec.proxyGroupId;\n\n if (byProxyGroupId[spec.proxyGroupId] === undefined) {\n byProxyGroupId[spec.proxyGroupId] = [];\n }\n byProxyGroupId[spec.proxyGroupId].push(id);\n }\n\n data[id].id = id;\n byUuid[spec.uuid] = id;\n\n if (byStatus[status] === undefined) {\n byStatus[status] = [];\n }\n byStatus[status].push(id);\n\n uploaderProxy.onStatusChange(id, null, status);\n\n return id;\n },\n\n retrieve: function(optionalFilter) {\n if (qq.isObject(optionalFilter) && data.length) {\n if (optionalFilter.id !== undefined) {\n return getDataByIds(optionalFilter.id);\n }\n\n else if (optionalFilter.uuid !== undefined) {\n return getDataByUuids(optionalFilter.uuid);\n }\n\n else if (optionalFilter.status) {\n return getDataByStatus(optionalFilter.status);\n }\n }\n else {\n return qq.extend([], data, true);\n }\n },\n\n reset: function() {\n data = [];\n byUuid = {};\n byStatus = {};\n byBatchId = {};\n },\n\n setStatus: function(id, newStatus) {\n var oldStatus = data[id].status,\n byStatusOldStatusIndex = qq.indexOf(byStatus[oldStatus], id);\n\n byStatus[oldStatus].splice(byStatusOldStatusIndex, 1);\n\n data[id].status = newStatus;\n\n if (byStatus[newStatus] === undefined) {\n byStatus[newStatus] = [];\n }\n byStatus[newStatus].push(id);\n\n uploaderProxy.onStatusChange(id, oldStatus, newStatus);\n },\n\n uuidChanged: function(id, newUuid) {\n var oldUuid = data[id].uuid;\n\n data[id].uuid = newUuid;\n byUuid[newUuid] = id;\n delete byUuid[oldUuid];\n },\n\n updateName: function(id, newName) {\n data[id].name = newName;\n },\n\n updateSize: function(id, newSize) {\n data[id].size = newSize;\n },\n\n // Only applicable if this file has a parent that we may want to reference later.\n setParentId: function(targetId, parentId) {\n data[targetId].parentId = parentId;\n },\n\n getIdsInProxyGroup: function(id) {\n var proxyGroupId = data[id].proxyGroupId;\n\n if (proxyGroupId) {\n return byProxyGroupId[proxyGroupId];\n }\n return [];\n },\n\n getIdsInBatch: function(id) {\n var batchId = data[id].batchId;\n\n return byBatchId[batchId];\n }\n });\n};\n\nqq.status = {\n SUBMITTING: \"submitting\",\n SUBMITTED: \"submitted\",\n REJECTED: \"rejected\",\n QUEUED: \"queued\",\n CANCELED: \"canceled\",\n PAUSED: \"paused\",\n UPLOADING: \"uploading\",\n UPLOAD_RETRYING: \"retrying upload\",\n UPLOAD_SUCCESSFUL: \"upload successful\",\n UPLOAD_FAILED: \"upload failed\",\n DELETE_FAILED: \"delete failed\",\n DELETING: \"deleting\",\n DELETED: \"deleted\"\n};\n","/*globals qq*/\n/**\n * Defines the public API for FineUploaderBasic mode.\n */\n(function() {\n \"use strict\";\n\n qq.basePublicApi = {\n // DEPRECATED - TODO REMOVE IN NEXT MAJOR RELEASE (replaced by addFiles)\n addBlobs: function(blobDataOrArray, params, endpoint) {\n this.addFiles(blobDataOrArray, params, endpoint);\n },\n\n addInitialFiles: function(cannedFileList) {\n var self = this;\n\n qq.each(cannedFileList, function(index, cannedFile) {\n self._addCannedFile(cannedFile);\n });\n },\n\n addFiles: function(data, params, endpoint) {\n this._maybeHandleIos8SafariWorkaround();\n\n var batchId = this._storedIds.length === 0 ? qq.getUniqueId() : this._currentBatchId,\n\n processBlob = qq.bind(function(blob) {\n this._handleNewFile({\n blob: blob,\n name: this._options.blobs.defaultName\n }, batchId, verifiedFiles);\n }, this),\n\n processBlobData = qq.bind(function(blobData) {\n this._handleNewFile(blobData, batchId, verifiedFiles);\n }, this),\n\n processCanvas = qq.bind(function(canvas) {\n var blob = qq.canvasToBlob(canvas);\n\n this._handleNewFile({\n blob: blob,\n name: this._options.blobs.defaultName + \".png\"\n }, batchId, verifiedFiles);\n }, this),\n\n processCanvasData = qq.bind(function(canvasData) {\n var normalizedQuality = canvasData.quality && canvasData.quality / 100,\n blob = qq.canvasToBlob(canvasData.canvas, canvasData.type, normalizedQuality);\n\n this._handleNewFile({\n blob: blob,\n name: canvasData.name\n }, batchId, verifiedFiles);\n }, this),\n\n processFileOrInput = qq.bind(function(fileOrInput) {\n if (qq.isInput(fileOrInput) && qq.supportedFeatures.ajaxUploading) {\n var files = Array.prototype.slice.call(fileOrInput.files),\n self = this;\n\n qq.each(files, function(idx, file) {\n self._handleNewFile(file, batchId, verifiedFiles);\n });\n }\n else {\n this._handleNewFile(fileOrInput, batchId, verifiedFiles);\n }\n }, this),\n\n normalizeData = function() {\n if (qq.isFileList(data)) {\n data = Array.prototype.slice.call(data);\n }\n data = [].concat(data);\n },\n\n self = this,\n verifiedFiles = [];\n\n this._currentBatchId = batchId;\n\n if (data) {\n normalizeData();\n\n qq.each(data, function(idx, fileContainer) {\n if (qq.isFileOrInput(fileContainer)) {\n processFileOrInput(fileContainer);\n }\n else if (qq.isBlob(fileContainer)) {\n processBlob(fileContainer);\n }\n else if (qq.isObject(fileContainer)) {\n if (fileContainer.blob && fileContainer.name) {\n processBlobData(fileContainer);\n }\n else if (fileContainer.canvas && fileContainer.name) {\n processCanvasData(fileContainer);\n }\n }\n else if (fileContainer.tagName && fileContainer.tagName.toLowerCase() === \"canvas\") {\n processCanvas(fileContainer);\n }\n else {\n self.log(fileContainer + \" is not a valid file container! Ignoring!\", \"warn\");\n }\n });\n\n this.log(\"Received \" + verifiedFiles.length + \" files.\");\n this._prepareItemsForUpload(verifiedFiles, params, endpoint);\n }\n },\n\n cancel: function(id) {\n this._handler.cancel(id);\n },\n\n cancelAll: function() {\n var storedIdsCopy = [],\n self = this;\n\n qq.extend(storedIdsCopy, this._storedIds);\n qq.each(storedIdsCopy, function(idx, storedFileId) {\n self.cancel(storedFileId);\n });\n\n this._handler.cancelAll();\n },\n\n clearStoredFiles: function() {\n this._storedIds = [];\n },\n\n continueUpload: function(id) {\n var uploadData = this._uploadData.retrieve({id: id});\n\n if (!qq.supportedFeatures.pause || !this._options.chunking.enabled) {\n return false;\n }\n\n if (uploadData.status === qq.status.PAUSED) {\n this.log(qq.format(\"Paused file ID {} ({}) will be continued. Not paused.\", id, this.getName(id)));\n this._uploadFile(id);\n return true;\n }\n else {\n this.log(qq.format(\"Ignoring continue for file ID {} ({}). Not paused.\", id, this.getName(id)), \"error\");\n }\n\n return false;\n },\n\n deleteFile: function(id) {\n return this._onSubmitDelete(id);\n },\n\n // TODO document?\n doesExist: function(fileOrBlobId) {\n return this._handler.isValid(fileOrBlobId);\n },\n\n // Generate a variable size thumbnail on an img or canvas,\n // returning a promise that is fulfilled when the attempt completes.\n // Thumbnail can either be based off of a URL for an image returned\n // by the server in the upload response, or the associated `Blob`.\n drawThumbnail: function(fileId, imgOrCanvas, maxSize, fromServer, customResizeFunction) {\n var promiseToReturn = new qq.Promise(),\n fileOrUrl, options;\n\n if (this._imageGenerator) {\n fileOrUrl = this._thumbnailUrls[fileId];\n options = {\n customResizeFunction: customResizeFunction,\n maxSize: maxSize > 0 ? maxSize : null,\n scale: maxSize > 0\n };\n\n // If client-side preview generation is possible\n // and we are not specifically looking for the image URl returned by the server...\n if (!fromServer && qq.supportedFeatures.imagePreviews) {\n fileOrUrl = this.getFile(fileId);\n }\n\n /* jshint eqeqeq:false,eqnull:true */\n if (fileOrUrl == null) {\n promiseToReturn.failure({container: imgOrCanvas, error: \"File or URL not found.\"});\n }\n else {\n this._imageGenerator.generate(fileOrUrl, imgOrCanvas, options).then(\n function success(modifiedContainer) {\n promiseToReturn.success(modifiedContainer);\n },\n\n function failure(container, reason) {\n promiseToReturn.failure({container: container, error: reason || \"Problem generating thumbnail\"});\n }\n );\n }\n }\n else {\n promiseToReturn.failure({container: imgOrCanvas, error: \"Missing image generator module\"});\n }\n\n return promiseToReturn;\n },\n\n getButton: function(fileId) {\n return this._getButton(this._buttonIdsForFileIds[fileId]);\n },\n\n getEndpoint: function(fileId) {\n return this._endpointStore.get(fileId);\n },\n\n getFile: function(fileOrBlobId) {\n return this._handler.getFile(fileOrBlobId) || null;\n },\n\n getInProgress: function() {\n return this._uploadData.retrieve({\n status: [\n qq.status.UPLOADING,\n qq.status.UPLOAD_RETRYING,\n qq.status.QUEUED\n ]\n }).length;\n },\n\n getName: function(id) {\n return this._uploadData.retrieve({id: id}).name;\n },\n\n // Parent ID for a specific file, or null if this is the parent, or if it has no parent.\n getParentId: function(id) {\n var uploadDataEntry = this.getUploads({id: id}),\n parentId = null;\n\n if (uploadDataEntry) {\n if (uploadDataEntry.parentId !== undefined) {\n parentId = uploadDataEntry.parentId;\n }\n }\n\n return parentId;\n },\n\n getResumableFilesData: function() {\n return this._handler.getResumableFilesData();\n },\n\n getSize: function(id) {\n return this._uploadData.retrieve({id: id}).size;\n },\n\n getNetUploads: function() {\n return this._netUploaded;\n },\n\n getRemainingAllowedItems: function() {\n var allowedItems = this._currentItemLimit;\n\n if (allowedItems > 0) {\n return allowedItems - this._netUploadedOrQueued;\n }\n\n return null;\n },\n\n getUploads: function(optionalFilter) {\n return this._uploadData.retrieve(optionalFilter);\n },\n\n getUuid: function(id) {\n return this._uploadData.retrieve({id: id}).uuid;\n },\n\n log: function(str, level) {\n if (this._options.debug && (!level || level === \"info\")) {\n qq.log(\"[Fine Uploader \" + qq.version + \"] \" + str);\n }\n else if (level && level !== \"info\") {\n qq.log(\"[Fine Uploader \" + qq.version + \"] \" + str, level);\n\n }\n },\n\n pauseUpload: function(id) {\n var uploadData = this._uploadData.retrieve({id: id});\n\n if (!qq.supportedFeatures.pause || !this._options.chunking.enabled) {\n return false;\n }\n\n // Pause only really makes sense if the file is uploading or retrying\n if (qq.indexOf([qq.status.UPLOADING, qq.status.UPLOAD_RETRYING], uploadData.status) >= 0) {\n if (this._handler.pause(id)) {\n this._uploadData.setStatus(id, qq.status.PAUSED);\n return true;\n }\n else {\n this.log(qq.format(\"Unable to pause file ID {} ({}).\", id, this.getName(id)), \"error\");\n }\n }\n else {\n this.log(qq.format(\"Ignoring pause for file ID {} ({}). Not in progress.\", id, this.getName(id)), \"error\");\n }\n\n return false;\n },\n\n reset: function() {\n this.log(\"Resetting uploader...\");\n\n this._handler.reset();\n this._storedIds = [];\n this._autoRetries = [];\n this._retryTimeouts = [];\n this._preventRetries = [];\n this._thumbnailUrls = [];\n\n qq.each(this._buttons, function(idx, button) {\n button.reset();\n });\n\n this._paramsStore.reset();\n this._endpointStore.reset();\n this._netUploadedOrQueued = 0;\n this._netUploaded = 0;\n this._uploadData.reset();\n this._buttonIdsForFileIds = [];\n\n this._pasteHandler && this._pasteHandler.reset();\n this._options.session.refreshOnReset && this._refreshSessionData();\n\n this._succeededSinceLastAllComplete = [];\n this._failedSinceLastAllComplete = [];\n\n this._totalProgress && this._totalProgress.reset();\n },\n\n retry: function(id) {\n return this._manualRetry(id);\n },\n\n scaleImage: function(id, specs) {\n var self = this;\n\n return qq.Scaler.prototype.scaleImage(id, specs, {\n log: qq.bind(self.log, self),\n getFile: qq.bind(self.getFile, self),\n uploadData: self._uploadData\n });\n },\n\n setCustomHeaders: function(headers, id) {\n this._customHeadersStore.set(headers, id);\n },\n\n setDeleteFileCustomHeaders: function(headers, id) {\n this._deleteFileCustomHeadersStore.set(headers, id);\n },\n\n setDeleteFileEndpoint: function(endpoint, id) {\n this._deleteFileEndpointStore.set(endpoint, id);\n },\n\n setDeleteFileParams: function(params, id) {\n this._deleteFileParamsStore.set(params, id);\n },\n\n // Re-sets the default endpoint, an endpoint for a specific file, or an endpoint for a specific button\n setEndpoint: function(endpoint, id) {\n this._endpointStore.set(endpoint, id);\n },\n\n setForm: function(elementOrId) {\n this._updateFormSupportAndParams(elementOrId);\n },\n\n setItemLimit: function(newItemLimit) {\n this._currentItemLimit = newItemLimit;\n },\n\n setName: function(id, newName) {\n this._uploadData.updateName(id, newName);\n },\n\n setParams: function(params, id) {\n this._paramsStore.set(params, id);\n },\n\n setUuid: function(id, newUuid) {\n return this._uploadData.uuidChanged(id, newUuid);\n },\n\n uploadStoredFiles: function() {\n if (this._storedIds.length === 0) {\n this._itemError(\"noFilesError\");\n }\n else {\n this._uploadStoredFiles();\n }\n }\n };\n\n /**\n * Defines the private (internal) API for FineUploaderBasic mode.\n */\n qq.basePrivateApi = {\n // Updates internal state with a file record (not backed by a live file). Returns the assigned ID.\n _addCannedFile: function(sessionData) {\n var id = this._uploadData.addFile({\n uuid: sessionData.uuid,\n name: sessionData.name,\n size: sessionData.size,\n status: qq.status.UPLOAD_SUCCESSFUL\n });\n\n sessionData.deleteFileEndpoint && this.setDeleteFileEndpoint(sessionData.deleteFileEndpoint, id);\n sessionData.deleteFileParams && this.setDeleteFileParams(sessionData.deleteFileParams, id);\n\n if (sessionData.thumbnailUrl) {\n this._thumbnailUrls[id] = sessionData.thumbnailUrl;\n }\n\n this._netUploaded++;\n this._netUploadedOrQueued++;\n\n return id;\n },\n\n _annotateWithButtonId: function(file, associatedInput) {\n if (qq.isFile(file)) {\n file.qqButtonId = this._getButtonId(associatedInput);\n }\n },\n\n _batchError: function(message) {\n this._options.callbacks.onError(null, null, message, undefined);\n },\n\n _createDeleteHandler: function() {\n var self = this;\n\n return new qq.DeleteFileAjaxRequester({\n method: this._options.deleteFile.method.toUpperCase(),\n maxConnections: this._options.maxConnections,\n uuidParamName: this._options.request.uuidName,\n customHeaders: this._deleteFileCustomHeadersStore,\n paramsStore: this._deleteFileParamsStore,\n endpointStore: this._deleteFileEndpointStore,\n cors: this._options.cors,\n log: qq.bind(self.log, self),\n onDelete: function(id) {\n self._onDelete(id);\n self._options.callbacks.onDelete(id);\n },\n onDeleteComplete: function(id, xhrOrXdr, isError) {\n self._onDeleteComplete(id, xhrOrXdr, isError);\n self._options.callbacks.onDeleteComplete(id, xhrOrXdr, isError);\n }\n\n });\n },\n\n _createPasteHandler: function() {\n var self = this;\n\n return new qq.PasteSupport({\n targetElement: this._options.paste.targetElement,\n callbacks: {\n log: qq.bind(self.log, self),\n pasteReceived: function(blob) {\n self._handleCheckedCallback({\n name: \"onPasteReceived\",\n callback: qq.bind(self._options.callbacks.onPasteReceived, self, blob),\n onSuccess: qq.bind(self._handlePasteSuccess, self, blob),\n identifier: \"pasted image\"\n });\n }\n }\n });\n },\n\n _createStore: function(initialValue, _readOnlyValues_) {\n var store = {},\n catchall = initialValue,\n perIdReadOnlyValues = {},\n readOnlyValues = _readOnlyValues_,\n copy = function(orig) {\n if (qq.isObject(orig)) {\n return qq.extend({}, orig);\n }\n return orig;\n },\n getReadOnlyValues = function() {\n if (qq.isFunction(readOnlyValues)) {\n return readOnlyValues();\n }\n return readOnlyValues;\n },\n includeReadOnlyValues = function(id, existing) {\n if (readOnlyValues && qq.isObject(existing)) {\n qq.extend(existing, getReadOnlyValues());\n }\n\n if (perIdReadOnlyValues[id]) {\n qq.extend(existing, perIdReadOnlyValues[id]);\n }\n };\n\n return {\n set: function(val, id) {\n /*jshint eqeqeq: true, eqnull: true*/\n if (id == null) {\n store = {};\n catchall = copy(val);\n }\n else {\n store[id] = copy(val);\n }\n },\n\n get: function(id) {\n var values;\n\n /*jshint eqeqeq: true, eqnull: true*/\n if (id != null && store[id]) {\n values = store[id];\n }\n else {\n values = copy(catchall);\n }\n\n includeReadOnlyValues(id, values);\n\n return copy(values);\n },\n\n addReadOnly: function(id, values) {\n // Only applicable to Object stores\n if (qq.isObject(store)) {\n // If null ID, apply readonly values to all files\n if (id === null) {\n if (qq.isFunction(values)) {\n readOnlyValues = values;\n }\n else {\n readOnlyValues = readOnlyValues || {};\n qq.extend(readOnlyValues, values);\n }\n }\n else {\n perIdReadOnlyValues[id] = perIdReadOnlyValues[id] || {};\n qq.extend(perIdReadOnlyValues[id], values);\n }\n }\n },\n\n remove: function(fileId) {\n return delete store[fileId];\n },\n\n reset: function() {\n store = {};\n perIdReadOnlyValues = {};\n catchall = initialValue;\n }\n };\n },\n\n _createUploadDataTracker: function() {\n var self = this;\n\n return new qq.UploadData({\n getName: function(id) {\n return self.getName(id);\n },\n getUuid: function(id) {\n return self.getUuid(id);\n },\n getSize: function(id) {\n return self.getSize(id);\n },\n onStatusChange: function(id, oldStatus, newStatus) {\n self._onUploadStatusChange(id, oldStatus, newStatus);\n self._options.callbacks.onStatusChange(id, oldStatus, newStatus);\n self._maybeAllComplete(id, newStatus);\n\n if (self._totalProgress) {\n setTimeout(function() {\n self._totalProgress.onStatusChange(id, oldStatus, newStatus);\n }, 0);\n }\n }\n });\n },\n\n /**\n * Generate a tracked upload button.\n *\n * @param spec Object containing a required `element` property\n * along with optional `multiple`, `accept`, and `folders`.\n * @returns {qq.UploadButton}\n * @private\n */\n _createUploadButton: function(spec) {\n var self = this,\n acceptFiles = spec.accept || this._options.validation.acceptFiles,\n allowedExtensions = spec.allowedExtensions || this._options.validation.allowedExtensions,\n button;\n\n function allowMultiple() {\n if (qq.supportedFeatures.ajaxUploading) {\n // Workaround for bug in iOS7+ (see #1039)\n if (self._options.workarounds.iosEmptyVideos &&\n qq.ios() &&\n !qq.ios6() &&\n self._isAllowedExtension(allowedExtensions, \".mov\")) {\n\n return false;\n }\n\n if (spec.multiple === undefined) {\n return self._options.multiple;\n }\n\n return spec.multiple;\n }\n\n return false;\n }\n\n button = new qq.UploadButton({\n acceptFiles: acceptFiles,\n element: spec.element,\n focusClass: this._options.classes.buttonFocus,\n folders: spec.folders,\n hoverClass: this._options.classes.buttonHover,\n ios8BrowserCrashWorkaround: this._options.workarounds.ios8BrowserCrash,\n multiple: allowMultiple(),\n name: this._options.request.inputName,\n onChange: function(input) {\n self._onInputChange(input);\n },\n title: spec.title == null ? this._options.text.fileInputTitle : spec.title\n });\n\n this._disposeSupport.addDisposer(function() {\n button.dispose();\n });\n\n self._buttons.push(button);\n\n return button;\n },\n\n _createUploadHandler: function(additionalOptions, namespace) {\n var self = this,\n lastOnProgress = {},\n options = {\n debug: this._options.debug,\n maxConnections: this._options.maxConnections,\n cors: this._options.cors,\n paramsStore: this._paramsStore,\n endpointStore: this._endpointStore,\n chunking: this._options.chunking,\n resume: this._options.resume,\n blobs: this._options.blobs,\n log: qq.bind(self.log, self),\n preventRetryParam: this._options.retry.preventRetryResponseProperty,\n onProgress: function(id, name, loaded, total) {\n if (loaded < 0 || total < 0) {\n return;\n }\n\n if (lastOnProgress[id]) {\n if (lastOnProgress[id].loaded !== loaded || lastOnProgress[id].total !== total) {\n self._onProgress(id, name, loaded, total);\n self._options.callbacks.onProgress(id, name, loaded, total);\n }\n }\n else {\n self._onProgress(id, name, loaded, total);\n self._options.callbacks.onProgress(id, name, loaded, total);\n }\n\n lastOnProgress[id] = {loaded: loaded, total: total};\n\n },\n onComplete: function(id, name, result, xhr) {\n delete lastOnProgress[id];\n\n var status = self.getUploads({id: id}).status,\n retVal;\n\n // This is to deal with some observed cases where the XHR readyStateChange handler is\n // invoked by the browser multiple times for the same XHR instance with the same state\n // readyState value. Higher level: don't invoke complete-related code if we've already\n // done this.\n if (status === qq.status.UPLOAD_SUCCESSFUL || status === qq.status.UPLOAD_FAILED) {\n return;\n }\n\n retVal = self._onComplete(id, name, result, xhr);\n\n // If the internal `_onComplete` handler returns a promise, don't invoke the `onComplete` callback\n // until the promise has been fulfilled.\n if (retVal instanceof qq.Promise) {\n retVal.done(function() {\n self._options.callbacks.onComplete(id, name, result, xhr);\n });\n }\n else {\n self._options.callbacks.onComplete(id, name, result, xhr);\n }\n },\n onCancel: function(id, name, cancelFinalizationEffort) {\n var promise = new qq.Promise();\n\n self._handleCheckedCallback({\n name: \"onCancel\",\n callback: qq.bind(self._options.callbacks.onCancel, self, id, name),\n onFailure: promise.failure,\n onSuccess: function() {\n cancelFinalizationEffort.then(function() {\n self._onCancel(id, name);\n });\n\n promise.success();\n },\n identifier: id\n });\n\n return promise;\n },\n onUploadPrep: qq.bind(this._onUploadPrep, this),\n onUpload: function(id, name) {\n self._onUpload(id, name);\n self._options.callbacks.onUpload(id, name);\n },\n onUploadChunk: function(id, name, chunkData) {\n self._onUploadChunk(id, chunkData);\n self._options.callbacks.onUploadChunk(id, name, chunkData);\n },\n onUploadChunkSuccess: function(id, chunkData, result, xhr) {\n self._options.callbacks.onUploadChunkSuccess.apply(self, arguments);\n },\n onResume: function(id, name, chunkData) {\n return self._options.callbacks.onResume(id, name, chunkData);\n },\n onAutoRetry: function(id, name, responseJSON, xhr) {\n return self._onAutoRetry.apply(self, arguments);\n },\n onUuidChanged: function(id, newUuid) {\n self.log(\"Server requested UUID change from '\" + self.getUuid(id) + \"' to '\" + newUuid + \"'\");\n self.setUuid(id, newUuid);\n },\n getName: qq.bind(self.getName, self),\n getUuid: qq.bind(self.getUuid, self),\n getSize: qq.bind(self.getSize, self),\n setSize: qq.bind(self._setSize, self),\n getDataByUuid: function(uuid) {\n return self.getUploads({uuid: uuid});\n },\n isQueued: function(id) {\n var status = self.getUploads({id: id}).status;\n return status === qq.status.QUEUED ||\n status === qq.status.SUBMITTED ||\n status === qq.status.UPLOAD_RETRYING ||\n status === qq.status.PAUSED;\n },\n getIdsInProxyGroup: self._uploadData.getIdsInProxyGroup,\n getIdsInBatch: self._uploadData.getIdsInBatch\n };\n\n qq.each(this._options.request, function(prop, val) {\n options[prop] = val;\n });\n\n options.customHeaders = this._customHeadersStore;\n\n if (additionalOptions) {\n qq.each(additionalOptions, function(key, val) {\n options[key] = val;\n });\n }\n\n return new qq.UploadHandlerController(options, namespace);\n },\n\n _fileOrBlobRejected: function(id) {\n this._netUploadedOrQueued--;\n this._uploadData.setStatus(id, qq.status.REJECTED);\n },\n\n _formatSize: function(bytes) {\n var i = -1;\n do {\n bytes = bytes / 1000;\n i++;\n } while (bytes > 999);\n\n return Math.max(bytes, 0.1).toFixed(1) + this._options.text.sizeSymbols[i];\n },\n\n // Creates an internal object that tracks various properties of each extra button,\n // and then actually creates the extra button.\n _generateExtraButtonSpecs: function() {\n var self = this;\n\n this._extraButtonSpecs = {};\n\n qq.each(this._options.extraButtons, function(idx, extraButtonOptionEntry) {\n var multiple = extraButtonOptionEntry.multiple,\n validation = qq.extend({}, self._options.validation, true),\n extraButtonSpec = qq.extend({}, extraButtonOptionEntry);\n\n if (multiple === undefined) {\n multiple = self._options.multiple;\n }\n\n if (extraButtonSpec.validation) {\n qq.extend(validation, extraButtonOptionEntry.validation, true);\n }\n\n qq.extend(extraButtonSpec, {\n multiple: multiple,\n validation: validation\n }, true);\n\n self._initExtraButton(extraButtonSpec);\n });\n },\n\n _getButton: function(buttonId) {\n var extraButtonsSpec = this._extraButtonSpecs[buttonId];\n\n if (extraButtonsSpec) {\n return extraButtonsSpec.element;\n }\n else if (buttonId === this._defaultButtonId) {\n return this._options.button;\n }\n },\n\n /**\n * Gets the internally used tracking ID for a button.\n *\n * @param buttonOrFileInputOrFile `File`, ``, or a button container element\n * @returns {*} The button's ID, or undefined if no ID is recoverable\n * @private\n */\n _getButtonId: function(buttonOrFileInputOrFile) {\n var inputs, fileInput,\n fileBlobOrInput = buttonOrFileInputOrFile;\n\n // We want the reference file/blob here if this is a proxy (a file that will be generated on-demand later)\n if (fileBlobOrInput instanceof qq.BlobProxy) {\n fileBlobOrInput = fileBlobOrInput.referenceBlob;\n }\n\n // If the item is a `Blob` it will never be associated with a button or drop zone.\n if (fileBlobOrInput && !qq.isBlob(fileBlobOrInput)) {\n if (qq.isFile(fileBlobOrInput)) {\n return fileBlobOrInput.qqButtonId;\n }\n else if (fileBlobOrInput.tagName.toLowerCase() === \"input\" &&\n fileBlobOrInput.type.toLowerCase() === \"file\") {\n\n return fileBlobOrInput.getAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME);\n }\n\n inputs = fileBlobOrInput.getElementsByTagName(\"input\");\n\n qq.each(inputs, function(idx, input) {\n if (input.getAttribute(\"type\") === \"file\") {\n fileInput = input;\n return false;\n }\n });\n\n if (fileInput) {\n return fileInput.getAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME);\n }\n }\n },\n\n _getNotFinished: function() {\n return this._uploadData.retrieve({\n status: [\n qq.status.UPLOADING,\n qq.status.UPLOAD_RETRYING,\n qq.status.QUEUED,\n qq.status.SUBMITTING,\n qq.status.SUBMITTED,\n qq.status.PAUSED\n ]\n }).length;\n },\n\n // Get the validation options for this button. Could be the default validation option\n // or a specific one assigned to this particular button.\n _getValidationBase: function(buttonId) {\n var extraButtonSpec = this._extraButtonSpecs[buttonId];\n\n return extraButtonSpec ? extraButtonSpec.validation : this._options.validation;\n },\n\n _getValidationDescriptor: function(fileWrapper) {\n if (fileWrapper.file instanceof qq.BlobProxy) {\n return {\n name: qq.getFilename(fileWrapper.file.referenceBlob),\n size: fileWrapper.file.referenceBlob.size\n };\n }\n\n return {\n name: this.getUploads({id: fileWrapper.id}).name,\n size: this.getUploads({id: fileWrapper.id}).size\n };\n },\n\n _getValidationDescriptors: function(fileWrappers) {\n var self = this,\n fileDescriptors = [];\n\n qq.each(fileWrappers, function(idx, fileWrapper) {\n fileDescriptors.push(self._getValidationDescriptor(fileWrapper));\n });\n\n return fileDescriptors;\n },\n\n // Allows camera access on either the default or an extra button for iOS devices.\n _handleCameraAccess: function() {\n if (this._options.camera.ios && qq.ios()) {\n var acceptIosCamera = \"image/*;capture=camera\",\n button = this._options.camera.button,\n buttonId = button ? this._getButtonId(button) : this._defaultButtonId,\n optionRoot = this._options;\n\n // If we are not targeting the default button, it is an \"extra\" button\n if (buttonId && buttonId !== this._defaultButtonId) {\n optionRoot = this._extraButtonSpecs[buttonId];\n }\n\n // Camera access won't work in iOS if the `multiple` attribute is present on the file input\n optionRoot.multiple = false;\n\n // update the options\n if (optionRoot.validation.acceptFiles === null) {\n optionRoot.validation.acceptFiles = acceptIosCamera;\n }\n else {\n optionRoot.validation.acceptFiles += \",\" + acceptIosCamera;\n }\n\n // update the already-created button\n qq.each(this._buttons, function(idx, button) {\n if (button.getButtonId() === buttonId) {\n button.setMultiple(optionRoot.multiple);\n button.setAcceptFiles(optionRoot.acceptFiles);\n\n return false;\n }\n });\n }\n },\n\n _handleCheckedCallback: function(details) {\n var self = this,\n callbackRetVal = details.callback();\n\n if (qq.isGenericPromise(callbackRetVal)) {\n this.log(details.name + \" - waiting for \" + details.name + \" promise to be fulfilled for \" + details.identifier);\n return callbackRetVal.then(\n function(successParam) {\n self.log(details.name + \" promise success for \" + details.identifier);\n details.onSuccess(successParam);\n },\n function() {\n if (details.onFailure) {\n self.log(details.name + \" promise failure for \" + details.identifier);\n details.onFailure();\n }\n else {\n self.log(details.name + \" promise failure for \" + details.identifier);\n }\n });\n }\n\n if (callbackRetVal !== false) {\n details.onSuccess(callbackRetVal);\n }\n else {\n if (details.onFailure) {\n this.log(details.name + \" - return value was 'false' for \" + details.identifier + \". Invoking failure callback.\");\n details.onFailure();\n }\n else {\n this.log(details.name + \" - return value was 'false' for \" + details.identifier + \". Will not proceed.\");\n }\n }\n\n return callbackRetVal;\n },\n\n // Updates internal state when a new file has been received, and adds it along with its ID to a passed array.\n _handleNewFile: function(file, batchId, newFileWrapperList) {\n var self = this,\n uuid = qq.getUniqueId(),\n size = -1,\n name = qq.getFilename(file),\n actualFile = file.blob || file,\n handler = this._customNewFileHandler ?\n this._customNewFileHandler :\n qq.bind(self._handleNewFileGeneric, self);\n\n if (!qq.isInput(actualFile) && actualFile.size >= 0) {\n size = actualFile.size;\n }\n\n handler(actualFile, name, uuid, size, newFileWrapperList, batchId, this._options.request.uuidName, {\n uploadData: self._uploadData,\n paramsStore: self._paramsStore,\n addFileToHandler: function(id, file) {\n self._handler.add(id, file);\n self._netUploadedOrQueued++;\n self._trackButton(id);\n }\n });\n },\n\n _handleNewFileGeneric: function(file, name, uuid, size, fileList, batchId) {\n var id = this._uploadData.addFile({uuid: uuid, name: name, size: size, batchId: batchId});\n\n this._handler.add(id, file);\n this._trackButton(id);\n\n this._netUploadedOrQueued++;\n\n fileList.push({id: id, file: file});\n },\n\n _handlePasteSuccess: function(blob, extSuppliedName) {\n var extension = blob.type.split(\"/\")[1],\n name = extSuppliedName;\n\n /*jshint eqeqeq: true, eqnull: true*/\n if (name == null) {\n name = this._options.paste.defaultName;\n }\n\n name += \".\" + extension;\n\n this.addFiles({\n name: name,\n blob: blob\n });\n },\n\n // Creates an extra button element\n _initExtraButton: function(spec) {\n var button = this._createUploadButton({\n accept: spec.validation.acceptFiles,\n allowedExtensions: spec.validation.allowedExtensions,\n element: spec.element,\n folders: spec.folders,\n multiple: spec.multiple,\n title: spec.fileInputTitle\n });\n\n this._extraButtonSpecs[button.getButtonId()] = spec;\n },\n\n _initFormSupportAndParams: function() {\n this._formSupport = qq.FormSupport && new qq.FormSupport(\n this._options.form, qq.bind(this.uploadStoredFiles, this), qq.bind(this.log, this)\n );\n\n if (this._formSupport && this._formSupport.attachedToForm) {\n this._paramsStore = this._createStore(\n this._options.request.params, this._formSupport.getFormInputsAsObject\n );\n\n this._options.autoUpload = this._formSupport.newAutoUpload;\n if (this._formSupport.newEndpoint) {\n this._options.request.endpoint = this._formSupport.newEndpoint;\n }\n }\n else {\n this._paramsStore = this._createStore(this._options.request.params);\n }\n },\n\n _isDeletePossible: function() {\n if (!qq.DeleteFileAjaxRequester || !this._options.deleteFile.enabled) {\n return false;\n }\n\n if (this._options.cors.expected) {\n if (qq.supportedFeatures.deleteFileCorsXhr) {\n return true;\n }\n\n if (qq.supportedFeatures.deleteFileCorsXdr && this._options.cors.allowXdr) {\n return true;\n }\n\n return false;\n }\n\n return true;\n },\n\n _isAllowedExtension: function(allowed, fileName) {\n var valid = false;\n\n if (!allowed.length) {\n return true;\n }\n\n qq.each(allowed, function(idx, allowedExt) {\n /**\n * If an argument is not a string, ignore it. Added when a possible issue with MooTools hijacking the\n * `allowedExtensions` array was discovered. See case #735 in the issue tracker for more details.\n */\n if (qq.isString(allowedExt)) {\n /*jshint eqeqeq: true, eqnull: true*/\n var extRegex = new RegExp(\"\\\\.\" + allowedExt + \"$\", \"i\");\n\n if (fileName.match(extRegex) != null) {\n valid = true;\n return false;\n }\n }\n });\n\n return valid;\n },\n\n /**\n * Constructs and returns a message that describes an item/file error. Also calls `onError` callback.\n *\n * @param code REQUIRED - a code that corresponds to a stock message describing this type of error\n * @param maybeNameOrNames names of the items that have failed, if applicable\n * @param item `File`, `Blob`, or ``\n * @private\n */\n _itemError: function(code, maybeNameOrNames, item) {\n var message = this._options.messages[code],\n allowedExtensions = [],\n names = [].concat(maybeNameOrNames),\n name = names[0],\n buttonId = this._getButtonId(item),\n validationBase = this._getValidationBase(buttonId),\n extensionsForMessage, placeholderMatch;\n\n function r(name, replacement) { message = message.replace(name, replacement); }\n\n qq.each(validationBase.allowedExtensions, function(idx, allowedExtension) {\n /**\n * If an argument is not a string, ignore it. Added when a possible issue with MooTools hijacking the\n * `allowedExtensions` array was discovered. See case #735 in the issue tracker for more details.\n */\n if (qq.isString(allowedExtension)) {\n allowedExtensions.push(allowedExtension);\n }\n });\n\n extensionsForMessage = allowedExtensions.join(\", \").toLowerCase();\n\n r(\"{file}\", this._options.formatFileName(name));\n r(\"{extensions}\", extensionsForMessage);\n r(\"{sizeLimit}\", this._formatSize(validationBase.sizeLimit));\n r(\"{minSizeLimit}\", this._formatSize(validationBase.minSizeLimit));\n\n placeholderMatch = message.match(/(\\{\\w+\\})/g);\n if (placeholderMatch !== null) {\n qq.each(placeholderMatch, function(idx, placeholder) {\n r(placeholder, names[idx]);\n });\n }\n\n this._options.callbacks.onError(null, name, message, undefined);\n\n return message;\n },\n\n /**\n * Conditionally orders a manual retry of a failed upload.\n *\n * @param id File ID of the failed upload\n * @param callback Optional callback to invoke if a retry is prudent.\n * In lieu of asking the upload handler to retry.\n * @returns {boolean} true if a manual retry will occur\n * @private\n */\n _manualRetry: function(id, callback) {\n if (this._onBeforeManualRetry(id)) {\n this._netUploadedOrQueued++;\n this._uploadData.setStatus(id, qq.status.UPLOAD_RETRYING);\n\n if (callback) {\n callback(id);\n }\n else {\n this._handler.retry(id);\n }\n\n return true;\n }\n },\n\n _maybeAllComplete: function(id, status) {\n var self = this,\n notFinished = this._getNotFinished();\n\n if (status === qq.status.UPLOAD_SUCCESSFUL) {\n this._succeededSinceLastAllComplete.push(id);\n }\n else if (status === qq.status.UPLOAD_FAILED) {\n this._failedSinceLastAllComplete.push(id);\n }\n\n if (notFinished === 0 &&\n (this._succeededSinceLastAllComplete.length || this._failedSinceLastAllComplete.length)) {\n // Attempt to ensure onAllComplete is not invoked before other callbacks, such as onCancel & onComplete\n setTimeout(function() {\n self._onAllComplete(self._succeededSinceLastAllComplete, self._failedSinceLastAllComplete);\n }, 0);\n }\n },\n\n _maybeHandleIos8SafariWorkaround: function() {\n var self = this;\n\n if (this._options.workarounds.ios8SafariUploads && qq.ios800() && qq.iosSafari()) {\n setTimeout(function() {\n window.alert(self._options.messages.unsupportedBrowserIos8Safari);\n }, 0);\n throw new qq.Error(this._options.messages.unsupportedBrowserIos8Safari);\n }\n },\n\n _maybeParseAndSendUploadError: function(id, name, response, xhr) {\n // Assuming no one will actually set the response code to something other than 200\n // and still set 'success' to true...\n if (!response.success) {\n if (xhr && xhr.status !== 200 && !response.error) {\n this._options.callbacks.onError(id, name, \"XHR returned response code \" + xhr.status, xhr);\n }\n else {\n var errorReason = response.error ? response.error : this._options.text.defaultResponseError;\n this._options.callbacks.onError(id, name, errorReason, xhr);\n }\n }\n },\n\n _maybeProcessNextItemAfterOnValidateCallback: function(validItem, items, index, params, endpoint) {\n var self = this;\n\n if (items.length > index) {\n if (validItem || !this._options.validation.stopOnFirstInvalidFile) {\n //use setTimeout to prevent a stack overflow with a large number of files in the batch & non-promissory callbacks\n setTimeout(function() {\n var validationDescriptor = self._getValidationDescriptor(items[index]),\n buttonId = self._getButtonId(items[index].file),\n button = self._getButton(buttonId);\n\n self._handleCheckedCallback({\n name: \"onValidate\",\n callback: qq.bind(self._options.callbacks.onValidate, self, validationDescriptor, button),\n onSuccess: qq.bind(self._onValidateCallbackSuccess, self, items, index, params, endpoint),\n onFailure: qq.bind(self._onValidateCallbackFailure, self, items, index, params, endpoint),\n identifier: \"Item '\" + validationDescriptor.name + \"', size: \" + validationDescriptor.size\n });\n }, 0);\n }\n else if (!validItem) {\n for (; index < items.length; index++) {\n self._fileOrBlobRejected(items[index].id);\n }\n }\n }\n },\n\n _onAllComplete: function(successful, failed) {\n this._totalProgress && this._totalProgress.onAllComplete(successful, failed, this._preventRetries);\n\n this._options.callbacks.onAllComplete(qq.extend([], successful), qq.extend([], failed));\n\n this._succeededSinceLastAllComplete = [];\n this._failedSinceLastAllComplete = [];\n },\n\n /**\n * Attempt to automatically retry a failed upload.\n *\n * @param id The file ID of the failed upload\n * @param name The name of the file associated with the failed upload\n * @param responseJSON Response from the server, parsed into a javascript object\n * @param xhr Ajax transport used to send the failed request\n * @param callback Optional callback to be invoked if a retry is prudent.\n * Invoked in lieu of asking the upload handler to retry.\n * @returns {boolean} true if an auto-retry will occur\n * @private\n */\n _onAutoRetry: function(id, name, responseJSON, xhr, callback) {\n var self = this;\n\n self._preventRetries[id] = responseJSON[self._options.retry.preventRetryResponseProperty];\n\n if (self._shouldAutoRetry(id, name, responseJSON)) {\n self._maybeParseAndSendUploadError.apply(self, arguments);\n self._options.callbacks.onAutoRetry(id, name, self._autoRetries[id]);\n self._onBeforeAutoRetry(id, name);\n\n self._retryTimeouts[id] = setTimeout(function() {\n self.log(\"Retrying \" + name + \"...\");\n self._uploadData.setStatus(id, qq.status.UPLOAD_RETRYING);\n\n if (callback) {\n callback(id);\n }\n else {\n self._handler.retry(id);\n }\n }, self._options.retry.autoAttemptDelay * 1000);\n\n return true;\n }\n },\n\n _onBeforeAutoRetry: function(id, name) {\n this.log(\"Waiting \" + this._options.retry.autoAttemptDelay + \" seconds before retrying \" + name + \"...\");\n },\n\n //return false if we should not attempt the requested retry\n _onBeforeManualRetry: function(id) {\n var itemLimit = this._currentItemLimit,\n fileName;\n\n if (this._preventRetries[id]) {\n this.log(\"Retries are forbidden for id \" + id, \"warn\");\n return false;\n }\n else if (this._handler.isValid(id)) {\n fileName = this.getName(id);\n\n if (this._options.callbacks.onManualRetry(id, fileName) === false) {\n return false;\n }\n\n if (itemLimit > 0 && this._netUploadedOrQueued + 1 > itemLimit) {\n this._itemError(\"retryFailTooManyItems\");\n return false;\n }\n\n this.log(\"Retrying upload for '\" + fileName + \"' (id: \" + id + \")...\");\n return true;\n }\n else {\n this.log(\"'\" + id + \"' is not a valid file ID\", \"error\");\n return false;\n }\n },\n\n _onCancel: function(id, name) {\n this._netUploadedOrQueued--;\n\n clearTimeout(this._retryTimeouts[id]);\n\n var storedItemIndex = qq.indexOf(this._storedIds, id);\n if (!this._options.autoUpload && storedItemIndex >= 0) {\n this._storedIds.splice(storedItemIndex, 1);\n }\n\n this._uploadData.setStatus(id, qq.status.CANCELED);\n },\n\n _onComplete: function(id, name, result, xhr) {\n if (!result.success) {\n this._netUploadedOrQueued--;\n this._uploadData.setStatus(id, qq.status.UPLOAD_FAILED);\n\n if (result[this._options.retry.preventRetryResponseProperty] === true) {\n this._preventRetries[id] = true;\n }\n }\n else {\n if (result.thumbnailUrl) {\n this._thumbnailUrls[id] = result.thumbnailUrl;\n }\n\n this._netUploaded++;\n this._uploadData.setStatus(id, qq.status.UPLOAD_SUCCESSFUL);\n }\n\n this._maybeParseAndSendUploadError(id, name, result, xhr);\n\n return result.success ? true : false;\n },\n\n _onDelete: function(id) {\n this._uploadData.setStatus(id, qq.status.DELETING);\n },\n\n _onDeleteComplete: function(id, xhrOrXdr, isError) {\n var name = this.getName(id);\n\n if (isError) {\n this._uploadData.setStatus(id, qq.status.DELETE_FAILED);\n this.log(\"Delete request for '\" + name + \"' has failed.\", \"error\");\n\n // For error reporting, we only have access to the response status if this is not\n // an `XDomainRequest`.\n if (xhrOrXdr.withCredentials === undefined) {\n this._options.callbacks.onError(id, name, \"Delete request failed\", xhrOrXdr);\n }\n else {\n this._options.callbacks.onError(id, name, \"Delete request failed with response code \" + xhrOrXdr.status, xhrOrXdr);\n }\n }\n else {\n this._netUploadedOrQueued--;\n this._netUploaded--;\n this._handler.expunge(id);\n this._uploadData.setStatus(id, qq.status.DELETED);\n this.log(\"Delete request for '\" + name + \"' has succeeded.\");\n }\n },\n\n _onInputChange: function(input) {\n var fileIndex;\n\n if (qq.supportedFeatures.ajaxUploading) {\n for (fileIndex = 0; fileIndex < input.files.length; fileIndex++) {\n this._annotateWithButtonId(input.files[fileIndex], input);\n }\n\n this.addFiles(input.files);\n }\n // Android 2.3.x will fire `onchange` even if no file has been selected\n else if (input.value.length > 0) {\n this.addFiles(input);\n }\n\n qq.each(this._buttons, function(idx, button) {\n button.reset();\n });\n },\n\n _onProgress: function(id, name, loaded, total) {\n this._totalProgress && this._totalProgress.onIndividualProgress(id, loaded, total);\n },\n\n _onSubmit: function(id, name) {\n //nothing to do yet in core uploader\n },\n\n _onSubmitCallbackSuccess: function(id, name) {\n this._onSubmit.apply(this, arguments);\n this._uploadData.setStatus(id, qq.status.SUBMITTED);\n this._onSubmitted.apply(this, arguments);\n\n if (this._options.autoUpload) {\n this._options.callbacks.onSubmitted.apply(this, arguments);\n this._uploadFile(id);\n }\n else {\n this._storeForLater(id);\n this._options.callbacks.onSubmitted.apply(this, arguments);\n }\n },\n\n _onSubmitDelete: function(id, onSuccessCallback, additionalMandatedParams) {\n var uuid = this.getUuid(id),\n adjustedOnSuccessCallback;\n\n if (onSuccessCallback) {\n adjustedOnSuccessCallback = qq.bind(onSuccessCallback, this, id, uuid, additionalMandatedParams);\n }\n\n if (this._isDeletePossible()) {\n this._handleCheckedCallback({\n name: \"onSubmitDelete\",\n callback: qq.bind(this._options.callbacks.onSubmitDelete, this, id),\n onSuccess: adjustedOnSuccessCallback ||\n qq.bind(this._deleteHandler.sendDelete, this, id, uuid, additionalMandatedParams),\n identifier: id\n });\n return true;\n }\n else {\n this.log(\"Delete request ignored for ID \" + id + \", delete feature is disabled or request not possible \" +\n \"due to CORS on a user agent that does not support pre-flighting.\", \"warn\");\n return false;\n }\n },\n\n _onSubmitted: function(id) {\n //nothing to do in the base uploader\n },\n\n _onTotalProgress: function(loaded, total) {\n this._options.callbacks.onTotalProgress(loaded, total);\n },\n\n _onUploadPrep: function(id) {\n // nothing to do in the core uploader for now\n },\n\n _onUpload: function(id, name) {\n this._uploadData.setStatus(id, qq.status.UPLOADING);\n },\n\n _onUploadChunk: function(id, chunkData) {\n //nothing to do in the base uploader\n },\n\n _onUploadStatusChange: function(id, oldStatus, newStatus) {\n // Make sure a \"queued\" retry attempt is canceled if the upload has been paused\n if (newStatus === qq.status.PAUSED) {\n clearTimeout(this._retryTimeouts[id]);\n }\n },\n\n _onValidateBatchCallbackFailure: function(fileWrappers) {\n var self = this;\n\n qq.each(fileWrappers, function(idx, fileWrapper) {\n self._fileOrBlobRejected(fileWrapper.id);\n });\n },\n\n _onValidateBatchCallbackSuccess: function(validationDescriptors, items, params, endpoint, button) {\n var errorMessage,\n itemLimit = this._currentItemLimit,\n proposedNetFilesUploadedOrQueued = this._netUploadedOrQueued;\n\n if (itemLimit === 0 || proposedNetFilesUploadedOrQueued <= itemLimit) {\n if (items.length > 0) {\n this._handleCheckedCallback({\n name: \"onValidate\",\n callback: qq.bind(this._options.callbacks.onValidate, this, validationDescriptors[0], button),\n onSuccess: qq.bind(this._onValidateCallbackSuccess, this, items, 0, params, endpoint),\n onFailure: qq.bind(this._onValidateCallbackFailure, this, items, 0, params, endpoint),\n identifier: \"Item '\" + items[0].file.name + \"', size: \" + items[0].file.size\n });\n }\n else {\n this._itemError(\"noFilesError\");\n }\n }\n else {\n this._onValidateBatchCallbackFailure(items);\n errorMessage = this._options.messages.tooManyItemsError\n .replace(/\\{netItems\\}/g, proposedNetFilesUploadedOrQueued)\n .replace(/\\{itemLimit\\}/g, itemLimit);\n this._batchError(errorMessage);\n }\n },\n\n _onValidateCallbackFailure: function(items, index, params, endpoint) {\n var nextIndex = index + 1;\n\n this._fileOrBlobRejected(items[index].id, items[index].file.name);\n\n this._maybeProcessNextItemAfterOnValidateCallback(false, items, nextIndex, params, endpoint);\n },\n\n _onValidateCallbackSuccess: function(items, index, params, endpoint) {\n var self = this,\n nextIndex = index + 1,\n validationDescriptor = this._getValidationDescriptor(items[index]);\n\n this._validateFileOrBlobData(items[index], validationDescriptor)\n .then(\n function() {\n self._upload(items[index].id, params, endpoint);\n self._maybeProcessNextItemAfterOnValidateCallback(true, items, nextIndex, params, endpoint);\n },\n function() {\n self._maybeProcessNextItemAfterOnValidateCallback(false, items, nextIndex, params, endpoint);\n }\n );\n },\n\n _prepareItemsForUpload: function(items, params, endpoint) {\n if (items.length === 0) {\n this._itemError(\"noFilesError\");\n return;\n }\n\n var validationDescriptors = this._getValidationDescriptors(items),\n buttonId = this._getButtonId(items[0].file),\n button = this._getButton(buttonId);\n\n this._handleCheckedCallback({\n name: \"onValidateBatch\",\n callback: qq.bind(this._options.callbacks.onValidateBatch, this, validationDescriptors, button),\n onSuccess: qq.bind(this._onValidateBatchCallbackSuccess, this, validationDescriptors, items, params, endpoint, button),\n onFailure: qq.bind(this._onValidateBatchCallbackFailure, this, items),\n identifier: \"batch validation\"\n });\n },\n\n _preventLeaveInProgress: function() {\n var self = this;\n\n this._disposeSupport.attach(window, \"beforeunload\", function(e) {\n if (self.getInProgress()) {\n e = e || window.event;\n // for ie, ff\n e.returnValue = self._options.messages.onLeave;\n // for webkit\n return self._options.messages.onLeave;\n }\n });\n },\n\n // Attempts to refresh session data only if the `qq.Session` module exists\n // and a session endpoint has been specified. The `onSessionRequestComplete`\n // callback will be invoked once the refresh is complete.\n _refreshSessionData: function() {\n var self = this,\n options = this._options.session;\n\n /* jshint eqnull:true */\n if (qq.Session && this._options.session.endpoint != null) {\n if (!this._session) {\n qq.extend(options, {cors: this._options.cors});\n\n options.log = qq.bind(this.log, this);\n options.addFileRecord = qq.bind(this._addCannedFile, this);\n\n this._session = new qq.Session(options);\n }\n\n setTimeout(function() {\n self._session.refresh().then(function(response, xhrOrXdr) {\n self._sessionRequestComplete();\n self._options.callbacks.onSessionRequestComplete(response, true, xhrOrXdr);\n\n }, function(response, xhrOrXdr) {\n\n self._options.callbacks.onSessionRequestComplete(response, false, xhrOrXdr);\n });\n }, 0);\n }\n },\n\n _sessionRequestComplete: function() {},\n\n _setSize: function(id, newSize) {\n this._uploadData.updateSize(id, newSize);\n this._totalProgress && this._totalProgress.onNewSize(id);\n },\n\n _shouldAutoRetry: function(id, name, responseJSON) {\n var uploadData = this._uploadData.retrieve({id: id});\n\n /*jshint laxbreak: true */\n if (!this._preventRetries[id]\n && this._options.retry.enableAuto\n && uploadData.status !== qq.status.PAUSED) {\n\n if (this._autoRetries[id] === undefined) {\n this._autoRetries[id] = 0;\n }\n\n if (this._autoRetries[id] < this._options.retry.maxAutoAttempts) {\n this._autoRetries[id] += 1;\n return true;\n }\n }\n\n return false;\n },\n\n _storeForLater: function(id) {\n this._storedIds.push(id);\n },\n\n // Maps a file with the button that was used to select it.\n _trackButton: function(id) {\n var buttonId;\n\n if (qq.supportedFeatures.ajaxUploading) {\n buttonId = this._handler.getFile(id).qqButtonId;\n }\n else {\n buttonId = this._getButtonId(this._handler.getInput(id));\n }\n\n if (buttonId) {\n this._buttonIdsForFileIds[id] = buttonId;\n }\n },\n\n _updateFormSupportAndParams: function(formElementOrId) {\n this._options.form.element = formElementOrId;\n\n this._formSupport = qq.FormSupport && new qq.FormSupport(\n this._options.form, qq.bind(this.uploadStoredFiles, this), qq.bind(this.log, this)\n );\n\n if (this._formSupport && this._formSupport.attachedToForm) {\n this._paramsStore.addReadOnly(null, this._formSupport.getFormInputsAsObject);\n\n this._options.autoUpload = this._formSupport.newAutoUpload;\n if (this._formSupport.newEndpoint) {\n this.setEndpoint(this._formSupport.newEndpoint);\n }\n }\n },\n\n _upload: function(id, params, endpoint) {\n var name = this.getName(id);\n\n if (params) {\n this.setParams(params, id);\n }\n\n if (endpoint) {\n this.setEndpoint(endpoint, id);\n }\n\n this._handleCheckedCallback({\n name: \"onSubmit\",\n callback: qq.bind(this._options.callbacks.onSubmit, this, id, name),\n onSuccess: qq.bind(this._onSubmitCallbackSuccess, this, id, name),\n onFailure: qq.bind(this._fileOrBlobRejected, this, id, name),\n identifier: id\n });\n },\n\n _uploadFile: function(id) {\n if (!this._handler.upload(id)) {\n this._uploadData.setStatus(id, qq.status.QUEUED);\n }\n },\n\n _uploadStoredFiles: function() {\n var idToUpload, stillSubmitting,\n self = this;\n\n while (this._storedIds.length) {\n idToUpload = this._storedIds.shift();\n this._uploadFile(idToUpload);\n }\n\n // If we are still waiting for some files to clear validation, attempt to upload these again in a bit\n stillSubmitting = this.getUploads({status: qq.status.SUBMITTING}).length;\n if (stillSubmitting) {\n qq.log(\"Still waiting for \" + stillSubmitting + \" files to clear submit queue. Will re-parse stored IDs array shortly.\");\n setTimeout(function() {\n self._uploadStoredFiles();\n }, 1000);\n }\n },\n\n /**\n * Performs some internal validation checks on an item, defined in the `validation` option.\n *\n * @param fileWrapper Wrapper containing a `file` along with an `id`\n * @param validationDescriptor Normalized information about the item (`size`, `name`).\n * @returns qq.Promise with appropriate callbacks invoked depending on the validity of the file\n * @private\n */\n _validateFileOrBlobData: function(fileWrapper, validationDescriptor) {\n var self = this,\n file = (function() {\n if (fileWrapper.file instanceof qq.BlobProxy) {\n return fileWrapper.file.referenceBlob;\n }\n return fileWrapper.file;\n }()),\n name = validationDescriptor.name,\n size = validationDescriptor.size,\n buttonId = this._getButtonId(fileWrapper.file),\n validationBase = this._getValidationBase(buttonId),\n validityChecker = new qq.Promise();\n\n validityChecker.then(\n function() {},\n function() {\n self._fileOrBlobRejected(fileWrapper.id, name);\n });\n\n if (qq.isFileOrInput(file) && !this._isAllowedExtension(validationBase.allowedExtensions, name)) {\n this._itemError(\"typeError\", name, file);\n return validityChecker.failure();\n }\n\n if (size === 0) {\n this._itemError(\"emptyError\", name, file);\n return validityChecker.failure();\n }\n\n if (size > 0 && validationBase.sizeLimit && size > validationBase.sizeLimit) {\n this._itemError(\"sizeError\", name, file);\n return validityChecker.failure();\n }\n\n if (size > 0 && size < validationBase.minSizeLimit) {\n this._itemError(\"minSizeError\", name, file);\n return validityChecker.failure();\n }\n\n if (qq.ImageValidation && qq.supportedFeatures.imagePreviews && qq.isFile(file)) {\n new qq.ImageValidation(file, qq.bind(self.log, self)).validate(validationBase.image).then(\n validityChecker.success,\n function(errorCode) {\n self._itemError(errorCode + \"ImageError\", name, file);\n validityChecker.failure();\n }\n );\n }\n else {\n validityChecker.success();\n }\n\n return validityChecker;\n },\n\n _wrapCallbacks: function() {\n var self, safeCallback, prop;\n\n self = this;\n\n safeCallback = function(name, callback, args) {\n var errorMsg;\n\n try {\n return callback.apply(self, args);\n }\n catch (exception) {\n errorMsg = exception.message || exception.toString();\n self.log(\"Caught exception in '\" + name + \"' callback - \" + errorMsg, \"error\");\n }\n };\n\n /* jshint forin: false, loopfunc: true */\n for (prop in this._options.callbacks) {\n (function() {\n var callbackName, callbackFunc;\n callbackName = prop;\n callbackFunc = self._options.callbacks[callbackName];\n self._options.callbacks[callbackName] = function() {\n return safeCallback(callbackName, callbackFunc, arguments);\n };\n }());\n }\n }\n };\n}());\n","/*globals qq*/\n(function() {\n \"use strict\";\n\n qq.FineUploaderBasic = function(o) {\n var self = this;\n\n // These options define FineUploaderBasic mode.\n this._options = {\n debug: false,\n button: null,\n multiple: true,\n maxConnections: 3,\n disableCancelForFormUploads: false,\n autoUpload: true,\n\n request: {\n customHeaders: {},\n endpoint: \"/server/upload\",\n filenameParam: \"qqfilename\",\n forceMultipart: true,\n inputName: \"qqfile\",\n method: \"POST\",\n params: {},\n paramsInBody: true,\n totalFileSizeName: \"qqtotalfilesize\",\n uuidName: \"qquuid\"\n },\n\n validation: {\n allowedExtensions: [],\n sizeLimit: 0,\n minSizeLimit: 0,\n itemLimit: 0,\n stopOnFirstInvalidFile: true,\n acceptFiles: null,\n image: {\n maxHeight: 0,\n maxWidth: 0,\n minHeight: 0,\n minWidth: 0\n }\n },\n\n callbacks: {\n onSubmit: function(id, name) {},\n onSubmitted: function(id, name) {},\n onComplete: function(id, name, responseJSON, maybeXhr) {},\n onAllComplete: function(successful, failed) {},\n onCancel: function(id, name) {},\n onUpload: function(id, name) {},\n onUploadChunk: function(id, name, chunkData) {},\n onUploadChunkSuccess: function(id, chunkData, responseJSON, xhr) {},\n onResume: function(id, fileName, chunkData) {},\n onProgress: function(id, name, loaded, total) {},\n onTotalProgress: function(loaded, total) {},\n onError: function(id, name, reason, maybeXhrOrXdr) {},\n onAutoRetry: function(id, name, attemptNumber) {},\n onManualRetry: function(id, name) {},\n onValidateBatch: function(fileOrBlobData) {},\n onValidate: function(fileOrBlobData) {},\n onSubmitDelete: function(id) {},\n onDelete: function(id) {},\n onDeleteComplete: function(id, xhrOrXdr, isError) {},\n onPasteReceived: function(blob) {},\n onStatusChange: function(id, oldStatus, newStatus) {},\n onSessionRequestComplete: function(response, success, xhrOrXdr) {}\n },\n\n messages: {\n typeError: \"{file} has an invalid extension. Valid extension(s): {extensions}.\",\n sizeError: \"{file} is too large, maximum file size is {sizeLimit}.\",\n minSizeError: \"{file} is too small, minimum file size is {minSizeLimit}.\",\n emptyError: \"{file} is empty, please select files again without it.\",\n noFilesError: \"No files to upload.\",\n tooManyItemsError: \"Too many items ({netItems}) would be uploaded. Item limit is {itemLimit}.\",\n maxHeightImageError: \"Image is too tall.\",\n maxWidthImageError: \"Image is too wide.\",\n minHeightImageError: \"Image is not tall enough.\",\n minWidthImageError: \"Image is not wide enough.\",\n retryFailTooManyItems: \"Retry failed - you have reached your file limit.\",\n onLeave: \"The files are being uploaded, if you leave now the upload will be canceled.\",\n unsupportedBrowserIos8Safari: \"Unrecoverable error - this browser does not permit file uploading of any kind due to serious bugs in iOS8 Safari. Please use iOS8 Chrome until Apple fixes these issues.\"\n },\n\n retry: {\n enableAuto: false,\n maxAutoAttempts: 3,\n autoAttemptDelay: 5,\n preventRetryResponseProperty: \"preventRetry\"\n },\n\n classes: {\n buttonHover: \"qq-upload-button-hover\",\n buttonFocus: \"qq-upload-button-focus\"\n },\n\n chunking: {\n enabled: false,\n concurrent: {\n enabled: false\n },\n mandatory: false,\n paramNames: {\n partIndex: \"qqpartindex\",\n partByteOffset: \"qqpartbyteoffset\",\n chunkSize: \"qqchunksize\",\n totalFileSize: \"qqtotalfilesize\",\n totalParts: \"qqtotalparts\"\n },\n partSize: 2000000,\n // only relevant for traditional endpoints, only required when concurrent.enabled === true\n success: {\n endpoint: null\n }\n },\n\n resume: {\n enabled: false,\n recordsExpireIn: 7, //days\n paramNames: {\n resuming: \"qqresume\"\n }\n },\n\n formatFileName: function(fileOrBlobName) {\n return fileOrBlobName;\n },\n\n text: {\n defaultResponseError: \"Upload failure reason unknown\",\n fileInputTitle: \"file input\",\n sizeSymbols: [\"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"]\n },\n\n deleteFile: {\n enabled: false,\n method: \"DELETE\",\n endpoint: \"/server/upload\",\n customHeaders: {},\n params: {}\n },\n\n cors: {\n expected: false,\n sendCredentials: false,\n allowXdr: false\n },\n\n blobs: {\n defaultName: \"misc_data\"\n },\n\n paste: {\n targetElement: null,\n defaultName: \"pasted_image\"\n },\n\n camera: {\n ios: false,\n\n // if ios is true: button is null means target the default button, otherwise target the button specified\n button: null\n },\n\n // This refers to additional upload buttons to be handled by Fine Uploader.\n // Each element is an object, containing `element` as the only required\n // property. The `element` must be a container that will ultimately\n // contain an invisible `` created by Fine Uploader.\n // Optional properties of each object include `multiple`, `validation`,\n // and `folders`.\n extraButtons: [],\n\n // Depends on the session module. Used to query the server for an initial file list\n // during initialization and optionally after a `reset`.\n session: {\n endpoint: null,\n params: {},\n customHeaders: {},\n refreshOnReset: true\n },\n\n // Send parameters associated with an existing form along with the files\n form: {\n // Element ID, HTMLElement, or null\n element: \"qq-form\",\n\n // Overrides the base `autoUpload`, unless `element` is null.\n autoUpload: false,\n\n // true = upload files on form submission (and squelch submit event)\n interceptSubmit: true\n },\n\n // scale images client side, upload a new file for each scaled version\n scaling: {\n customResizer: null,\n\n // send the original file as well\n sendOriginal: true,\n\n // fox orientation for scaled images\n orient: true,\n\n // If null, scaled image type will match reference image type. This value will be referred to\n // for any size record that does not specific a type.\n defaultType: null,\n\n defaultQuality: 80,\n\n failureText: \"Failed to scale\",\n\n includeExif: false,\n\n // metadata about each requested scaled version\n sizes: []\n },\n\n workarounds: {\n iosEmptyVideos: true,\n ios8SafariUploads: true,\n ios8BrowserCrash: false\n }\n };\n\n // Replace any default options with user defined ones\n qq.extend(this._options, o, true);\n\n this._buttons = [];\n this._extraButtonSpecs = {};\n this._buttonIdsForFileIds = [];\n\n this._wrapCallbacks();\n this._disposeSupport = new qq.DisposeSupport();\n\n this._storedIds = [];\n this._autoRetries = [];\n this._retryTimeouts = [];\n this._preventRetries = [];\n this._thumbnailUrls = [];\n\n this._netUploadedOrQueued = 0;\n this._netUploaded = 0;\n this._uploadData = this._createUploadDataTracker();\n\n this._initFormSupportAndParams();\n\n this._customHeadersStore = this._createStore(this._options.request.customHeaders);\n this._deleteFileCustomHeadersStore = this._createStore(this._options.deleteFile.customHeaders);\n\n this._deleteFileParamsStore = this._createStore(this._options.deleteFile.params);\n\n this._endpointStore = this._createStore(this._options.request.endpoint);\n this._deleteFileEndpointStore = this._createStore(this._options.deleteFile.endpoint);\n\n this._handler = this._createUploadHandler();\n\n this._deleteHandler = qq.DeleteFileAjaxRequester && this._createDeleteHandler();\n\n if (this._options.button) {\n this._defaultButtonId = this._createUploadButton({\n element: this._options.button,\n title: this._options.text.fileInputTitle\n }).getButtonId();\n }\n\n this._generateExtraButtonSpecs();\n\n this._handleCameraAccess();\n\n if (this._options.paste.targetElement) {\n if (qq.PasteSupport) {\n this._pasteHandler = this._createPasteHandler();\n }\n else {\n this.log(\"Paste support module not found\", \"error\");\n }\n }\n\n this._preventLeaveInProgress();\n\n this._imageGenerator = qq.ImageGenerator && new qq.ImageGenerator(qq.bind(this.log, this));\n this._refreshSessionData();\n\n this._succeededSinceLastAllComplete = [];\n this._failedSinceLastAllComplete = [];\n\n this._scaler = (qq.Scaler && new qq.Scaler(this._options.scaling, qq.bind(this.log, this))) || {};\n if (this._scaler.enabled) {\n this._customNewFileHandler = qq.bind(this._scaler.handleNewFile, this._scaler);\n }\n\n if (qq.TotalProgress && qq.supportedFeatures.progressBar) {\n this._totalProgress = new qq.TotalProgress(\n qq.bind(this._onTotalProgress, this),\n\n function(id) {\n var entry = self._uploadData.retrieve({id: id});\n return (entry && entry.size) || 0;\n }\n );\n }\n\n this._currentItemLimit = this._options.validation.itemLimit;\n };\n\n // Define the private & public API methods.\n qq.FineUploaderBasic.prototype = qq.basePublicApi;\n qq.extend(qq.FineUploaderBasic.prototype, qq.basePrivateApi);\n}());\n","/*globals qq, XDomainRequest*/\n/** Generic class for sending non-upload ajax requests and handling the associated responses **/\nqq.AjaxRequester = function(o) {\n \"use strict\";\n\n var log, shouldParamsBeInQueryString,\n queue = [],\n requestData = {},\n options = {\n acceptHeader: null,\n validMethods: [\"PATCH\", \"POST\", \"PUT\"],\n method: \"POST\",\n contentType: \"application/x-www-form-urlencoded\",\n maxConnections: 3,\n customHeaders: {},\n endpointStore: {},\n paramsStore: {},\n mandatedParams: {},\n allowXRequestedWithAndCacheControl: true,\n successfulResponseCodes: {\n DELETE: [200, 202, 204],\n PATCH: [200, 201, 202, 203, 204],\n POST: [200, 201, 202, 203, 204],\n PUT: [200, 201, 202, 203, 204],\n GET: [200]\n },\n cors: {\n expected: false,\n sendCredentials: false\n },\n log: function(str, level) {},\n onSend: function(id) {},\n onComplete: function(id, xhrOrXdr, isError) {},\n onProgress: null\n };\n\n qq.extend(options, o);\n log = options.log;\n\n if (qq.indexOf(options.validMethods, options.method) < 0) {\n throw new Error(\"'\" + options.method + \"' is not a supported method for this type of request!\");\n }\n\n // [Simple methods](http://www.w3.org/TR/cors/#simple-method)\n // are defined by the W3C in the CORS spec as a list of methods that, in part,\n // make a CORS request eligible to be exempt from preflighting.\n function isSimpleMethod() {\n return qq.indexOf([\"GET\", \"POST\", \"HEAD\"], options.method) >= 0;\n }\n\n // [Simple headers](http://www.w3.org/TR/cors/#simple-header)\n // are defined by the W3C in the CORS spec as a list of headers that, in part,\n // make a CORS request eligible to be exempt from preflighting.\n function containsNonSimpleHeaders(headers) {\n var containsNonSimple = false;\n\n qq.each(containsNonSimple, function(idx, header) {\n if (qq.indexOf([\"Accept\", \"Accept-Language\", \"Content-Language\", \"Content-Type\"], header) < 0) {\n containsNonSimple = true;\n return false;\n }\n });\n\n return containsNonSimple;\n }\n\n function isXdr(xhr) {\n //The `withCredentials` test is a commonly accepted way to determine if XHR supports CORS.\n return options.cors.expected && xhr.withCredentials === undefined;\n }\n\n // Returns either a new `XMLHttpRequest` or `XDomainRequest` instance.\n function getCorsAjaxTransport() {\n var xhrOrXdr;\n\n if (window.XMLHttpRequest || window.ActiveXObject) {\n xhrOrXdr = qq.createXhrInstance();\n\n if (xhrOrXdr.withCredentials === undefined) {\n xhrOrXdr = new XDomainRequest();\n // Workaround for XDR bug in IE9 - https://social.msdn.microsoft.com/Forums/ie/en-US/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-handlers-not-specified?forum=iewebdevelopment\n xhrOrXdr.onload = function() {};\n xhrOrXdr.onerror = function() {};\n xhrOrXdr.ontimeout = function() {};\n xhrOrXdr.onprogress = function() {};\n }\n }\n\n return xhrOrXdr;\n }\n\n // Returns either a new XHR/XDR instance, or an existing one for the associated `File` or `Blob`.\n function getXhrOrXdr(id, suppliedXhr) {\n var xhrOrXdr = requestData[id].xhr;\n\n if (!xhrOrXdr) {\n if (suppliedXhr) {\n xhrOrXdr = suppliedXhr;\n }\n else {\n if (options.cors.expected) {\n xhrOrXdr = getCorsAjaxTransport();\n }\n else {\n xhrOrXdr = qq.createXhrInstance();\n }\n }\n\n requestData[id].xhr = xhrOrXdr;\n }\n\n return xhrOrXdr;\n }\n\n // Removes element from queue, sends next request\n function dequeue(id) {\n var i = qq.indexOf(queue, id),\n max = options.maxConnections,\n nextId;\n\n delete requestData[id];\n queue.splice(i, 1);\n\n if (queue.length >= max && i < max) {\n nextId = queue[max - 1];\n sendRequest(nextId);\n }\n }\n\n function onComplete(id, xdrError) {\n var xhr = getXhrOrXdr(id),\n method = options.method,\n isError = xdrError === true;\n\n dequeue(id);\n\n if (isError) {\n log(method + \" request for \" + id + \" has failed\", \"error\");\n }\n else if (!isXdr(xhr) && !isResponseSuccessful(xhr.status)) {\n isError = true;\n log(method + \" request for \" + id + \" has failed - response code \" + xhr.status, \"error\");\n }\n\n options.onComplete(id, xhr, isError);\n }\n\n function getParams(id) {\n var onDemandParams = requestData[id].additionalParams,\n mandatedParams = options.mandatedParams,\n params;\n\n if (options.paramsStore.get) {\n params = options.paramsStore.get(id);\n }\n\n if (onDemandParams) {\n qq.each(onDemandParams, function(name, val) {\n params = params || {};\n params[name] = val;\n });\n }\n\n if (mandatedParams) {\n qq.each(mandatedParams, function(name, val) {\n params = params || {};\n params[name] = val;\n });\n }\n\n return params;\n }\n\n function sendRequest(id, optXhr) {\n var xhr = getXhrOrXdr(id, optXhr),\n method = options.method,\n params = getParams(id),\n payload = requestData[id].payload,\n url;\n\n options.onSend(id);\n\n url = createUrl(id, params, requestData[id].additionalQueryParams);\n\n // XDR and XHR status detection APIs differ a bit.\n if (isXdr(xhr)) {\n xhr.onload = getXdrLoadHandler(id);\n xhr.onerror = getXdrErrorHandler(id);\n }\n else {\n xhr.onreadystatechange = getXhrReadyStateChangeHandler(id);\n }\n\n registerForUploadProgress(id);\n\n // The last parameter is assumed to be ignored if we are actually using `XDomainRequest`.\n xhr.open(method, url, true);\n\n // Instruct the transport to send cookies along with the CORS request,\n // unless we are using `XDomainRequest`, which is not capable of this.\n if (options.cors.expected && options.cors.sendCredentials && !isXdr(xhr)) {\n xhr.withCredentials = true;\n }\n\n setHeaders(id);\n\n log(\"Sending \" + method + \" request for \" + id);\n\n if (payload) {\n xhr.send(payload);\n }\n else if (shouldParamsBeInQueryString || !params) {\n xhr.send();\n }\n else if (params && options.contentType && options.contentType.toLowerCase().indexOf(\"application/x-www-form-urlencoded\") >= 0) {\n xhr.send(qq.obj2url(params, \"\"));\n }\n else if (params && options.contentType && options.contentType.toLowerCase().indexOf(\"application/json\") >= 0) {\n xhr.send(JSON.stringify(params));\n }\n else {\n xhr.send(params);\n }\n\n return xhr;\n }\n\n function createUrl(id, params, additionalQueryParams) {\n var endpoint = options.endpointStore.get(id),\n addToPath = requestData[id].addToPath;\n\n /*jshint -W116,-W041 */\n if (addToPath != undefined) {\n endpoint += \"/\" + addToPath;\n }\n\n if (shouldParamsBeInQueryString && params) {\n endpoint = qq.obj2url(params, endpoint);\n }\n\n if (additionalQueryParams) {\n endpoint = qq.obj2url(additionalQueryParams, endpoint);\n }\n\n return endpoint;\n }\n\n // Invoked by the UA to indicate a number of possible states that describe\n // a live `XMLHttpRequest` transport.\n function getXhrReadyStateChangeHandler(id) {\n return function() {\n if (getXhrOrXdr(id).readyState === 4) {\n onComplete(id);\n }\n };\n }\n\n function registerForUploadProgress(id) {\n var onProgress = options.onProgress;\n\n if (onProgress) {\n getXhrOrXdr(id).upload.onprogress = function(e) {\n if (e.lengthComputable) {\n onProgress(id, e.loaded, e.total);\n }\n };\n }\n }\n\n // This will be called by IE to indicate **success** for an associated\n // `XDomainRequest` transported request.\n function getXdrLoadHandler(id) {\n return function() {\n onComplete(id);\n };\n }\n\n // This will be called by IE to indicate **failure** for an associated\n // `XDomainRequest` transported request.\n function getXdrErrorHandler(id) {\n return function() {\n onComplete(id, true);\n };\n }\n\n function setHeaders(id) {\n var xhr = getXhrOrXdr(id),\n customHeaders = options.customHeaders,\n onDemandHeaders = requestData[id].additionalHeaders || {},\n method = options.method,\n allHeaders = {};\n\n // If XDomainRequest is being used, we can't set headers, so just ignore this block.\n if (!isXdr(xhr)) {\n options.acceptHeader && xhr.setRequestHeader(\"Accept\", options.acceptHeader);\n\n // Only attempt to add X-Requested-With & Cache-Control if permitted\n if (options.allowXRequestedWithAndCacheControl) {\n // Do not add X-Requested-With & Cache-Control if this is a cross-origin request\n // OR the cross-origin request contains a non-simple method or header.\n // This is done to ensure a preflight is not triggered exclusively based on the\n // addition of these 2 non-simple headers.\n if (!options.cors.expected || (!isSimpleMethod() || containsNonSimpleHeaders(customHeaders))) {\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n xhr.setRequestHeader(\"Cache-Control\", \"no-cache\");\n }\n }\n\n if (options.contentType && (method === \"POST\" || method === \"PUT\")) {\n xhr.setRequestHeader(\"Content-Type\", options.contentType);\n }\n\n qq.extend(allHeaders, qq.isFunction(customHeaders) ? customHeaders(id) : customHeaders);\n qq.extend(allHeaders, onDemandHeaders);\n\n qq.each(allHeaders, function(name, val) {\n xhr.setRequestHeader(name, val);\n });\n }\n }\n\n function isResponseSuccessful(responseCode) {\n return qq.indexOf(options.successfulResponseCodes[options.method], responseCode) >= 0;\n }\n\n function prepareToSend(id, optXhr, addToPath, additionalParams, additionalQueryParams, additionalHeaders, payload) {\n requestData[id] = {\n addToPath: addToPath,\n additionalParams: additionalParams,\n additionalQueryParams: additionalQueryParams,\n additionalHeaders: additionalHeaders,\n payload: payload\n };\n\n var len = queue.push(id);\n\n // if too many active connections, wait...\n if (len <= options.maxConnections) {\n return sendRequest(id, optXhr);\n }\n }\n\n shouldParamsBeInQueryString = options.method === \"GET\" || options.method === \"DELETE\";\n\n qq.extend(this, {\n // Start the process of sending the request. The ID refers to the file associated with the request.\n initTransport: function(id) {\n var path, params, headers, payload, cacheBuster, additionalQueryParams;\n\n return {\n // Optionally specify the end of the endpoint path for the request.\n withPath: function(appendToPath) {\n path = appendToPath;\n return this;\n },\n\n // Optionally specify additional parameters to send along with the request.\n // These will be added to the query string for GET/DELETE requests or the payload\n // for POST/PUT requests. The Content-Type of the request will be used to determine\n // how these parameters should be formatted as well.\n withParams: function(additionalParams) {\n params = additionalParams;\n return this;\n },\n\n withQueryParams: function(_additionalQueryParams_) {\n additionalQueryParams = _additionalQueryParams_;\n return this;\n },\n\n // Optionally specify additional headers to send along with the request.\n withHeaders: function(additionalHeaders) {\n headers = additionalHeaders;\n return this;\n },\n\n // Optionally specify a payload/body for the request.\n withPayload: function(thePayload) {\n payload = thePayload;\n return this;\n },\n\n // Appends a cache buster (timestamp) to the request URL as a query parameter (only if GET or DELETE)\n withCacheBuster: function() {\n cacheBuster = true;\n return this;\n },\n\n // Send the constructed request.\n send: function(optXhr) {\n if (cacheBuster && qq.indexOf([\"GET\", \"DELETE\"], options.method) >= 0) {\n params.qqtimestamp = new Date().getTime();\n }\n\n return prepareToSend(id, optXhr, path, params, additionalQueryParams, headers, payload);\n }\n };\n },\n\n canceled: function(id) {\n dequeue(id);\n }\n });\n};\n","/* globals qq */\n/**\n * Common upload handler functions.\n *\n * @constructor\n */\nqq.UploadHandler = function(spec) {\n \"use strict\";\n\n var proxy = spec.proxy,\n fileState = {},\n onCancel = proxy.onCancel,\n getName = proxy.getName;\n\n qq.extend(this, {\n add: function(id, fileItem) {\n fileState[id] = fileItem;\n fileState[id].temp = {};\n },\n\n cancel: function(id) {\n var self = this,\n cancelFinalizationEffort = new qq.Promise(),\n onCancelRetVal = onCancel(id, getName(id), cancelFinalizationEffort);\n\n onCancelRetVal.then(function() {\n if (self.isValid(id)) {\n fileState[id].canceled = true;\n self.expunge(id);\n }\n cancelFinalizationEffort.success();\n });\n },\n\n expunge: function(id) {\n delete fileState[id];\n },\n\n getThirdPartyFileId: function(id) {\n return fileState[id].key;\n },\n\n isValid: function(id) {\n return fileState[id] !== undefined;\n },\n\n reset: function() {\n fileState = {};\n },\n\n _getFileState: function(id) {\n return fileState[id];\n },\n\n _setThirdPartyFileId: function(id, thirdPartyFileId) {\n fileState[id].key = thirdPartyFileId;\n },\n\n _wasCanceled: function(id) {\n return !!fileState[id].canceled;\n }\n });\n};\n","/*globals qq*/\n/**\n * Base upload handler module. Controls more specific handlers.\n *\n * @param o Options. Passed along to the specific handler submodule as well.\n * @param namespace [optional] Namespace for the specific handler.\n */\nqq.UploadHandlerController = function(o, namespace) {\n \"use strict\";\n\n var controller = this,\n chunkingPossible = false,\n concurrentChunkingPossible = false,\n chunking, preventRetryResponse, log, handler,\n\n options = {\n paramsStore: {},\n maxConnections: 3, // maximum number of concurrent uploads\n chunking: {\n enabled: false,\n multiple: {\n enabled: false\n }\n },\n log: function(str, level) {},\n onProgress: function(id, fileName, loaded, total) {},\n onComplete: function(id, fileName, response, xhr) {},\n onCancel: function(id, fileName) {},\n onUploadPrep: function(id) {}, // Called if non-trivial operations will be performed before onUpload\n onUpload: function(id, fileName) {},\n onUploadChunk: function(id, fileName, chunkData) {},\n onUploadChunkSuccess: function(id, chunkData, response, xhr) {},\n onAutoRetry: function(id, fileName, response, xhr) {},\n onResume: function(id, fileName, chunkData) {},\n onUuidChanged: function(id, newUuid) {},\n getName: function(id) {},\n setSize: function(id, newSize) {},\n isQueued: function(id) {},\n getIdsInProxyGroup: function(id) {},\n getIdsInBatch: function(id) {}\n },\n\n chunked = {\n // Called when each chunk has uploaded successfully\n done: function(id, chunkIdx, response, xhr) {\n var chunkData = handler._getChunkData(id, chunkIdx);\n\n handler._getFileState(id).attemptingResume = false;\n\n delete handler._getFileState(id).temp.chunkProgress[chunkIdx];\n handler._getFileState(id).loaded += chunkData.size;\n\n options.onUploadChunkSuccess(id, handler._getChunkDataForCallback(chunkData), response, xhr);\n },\n\n // Called when all chunks have been successfully uploaded and we want to ask the handler to perform any\n // logic associated with closing out the file, such as combining the chunks.\n finalize: function(id) {\n var size = options.getSize(id),\n name = options.getName(id);\n\n log(\"All chunks have been uploaded for \" + id + \" - finalizing....\");\n handler.finalizeChunks(id).then(\n function(response, xhr) {\n log(\"Finalize successful for \" + id);\n\n var normaizedResponse = upload.normalizeResponse(response, true);\n\n options.onProgress(id, name, size, size);\n handler._maybeDeletePersistedChunkData(id);\n upload.cleanup(id, normaizedResponse, xhr);\n },\n function(response, xhr) {\n var normaizedResponse = upload.normalizeResponse(response, false);\n\n log(\"Problem finalizing chunks for file ID \" + id + \" - \" + normaizedResponse.error, \"error\");\n\n if (normaizedResponse.reset) {\n chunked.reset(id);\n }\n\n if (!options.onAutoRetry(id, name, normaizedResponse, xhr)) {\n upload.cleanup(id, normaizedResponse, xhr);\n }\n }\n );\n },\n\n hasMoreParts: function(id) {\n return !!handler._getFileState(id).chunking.remaining.length;\n },\n\n nextPart: function(id) {\n var nextIdx = handler._getFileState(id).chunking.remaining.shift();\n\n if (nextIdx >= handler._getTotalChunks(id)) {\n nextIdx = null;\n }\n\n return nextIdx;\n },\n\n reset: function(id) {\n log(\"Server or callback has ordered chunking effort to be restarted on next attempt for item ID \" + id, \"error\");\n\n handler._maybeDeletePersistedChunkData(id);\n handler.reevaluateChunking(id);\n handler._getFileState(id).loaded = 0;\n },\n\n sendNext: function(id) {\n var size = options.getSize(id),\n name = options.getName(id),\n chunkIdx = chunked.nextPart(id),\n chunkData = handler._getChunkData(id, chunkIdx),\n resuming = handler._getFileState(id).attemptingResume,\n inProgressChunks = handler._getFileState(id).chunking.inProgress || [];\n\n if (handler._getFileState(id).loaded == null) {\n handler._getFileState(id).loaded = 0;\n }\n\n // Don't follow-through with the resume attempt if the integrator returns false from onResume\n if (resuming && options.onResume(id, name, chunkData) === false) {\n chunked.reset(id);\n chunkIdx = chunked.nextPart(id);\n chunkData = handler._getChunkData(id, chunkIdx);\n resuming = false;\n }\n\n // If all chunks have already uploaded successfully, we must be re-attempting the finalize step.\n if (chunkIdx == null && inProgressChunks.length === 0) {\n chunked.finalize(id);\n }\n\n // Send the next chunk\n else {\n log(qq.format(\"Sending chunked upload request for item {}.{}, bytes {}-{} of {}.\", id, chunkIdx, chunkData.start + 1, chunkData.end, size));\n options.onUploadChunk(id, name, handler._getChunkDataForCallback(chunkData));\n inProgressChunks.push(chunkIdx);\n handler._getFileState(id).chunking.inProgress = inProgressChunks;\n\n if (concurrentChunkingPossible) {\n connectionManager.open(id, chunkIdx);\n }\n\n if (concurrentChunkingPossible && connectionManager.available() && handler._getFileState(id).chunking.remaining.length) {\n chunked.sendNext(id);\n }\n\n handler.uploadChunk(id, chunkIdx, resuming).then(\n // upload chunk success\n function success(response, xhr) {\n log(\"Chunked upload request succeeded for \" + id + \", chunk \" + chunkIdx);\n\n handler.clearCachedChunk(id, chunkIdx);\n\n var inProgressChunks = handler._getFileState(id).chunking.inProgress || [],\n responseToReport = upload.normalizeResponse(response, true),\n inProgressChunkIdx = qq.indexOf(inProgressChunks, chunkIdx);\n\n log(qq.format(\"Chunk {} for file {} uploaded successfully.\", chunkIdx, id));\n\n chunked.done(id, chunkIdx, responseToReport, xhr);\n\n if (inProgressChunkIdx >= 0) {\n inProgressChunks.splice(inProgressChunkIdx, 1);\n }\n\n handler._maybePersistChunkedState(id);\n\n if (!chunked.hasMoreParts(id) && inProgressChunks.length === 0) {\n chunked.finalize(id);\n }\n else if (chunked.hasMoreParts(id)) {\n chunked.sendNext(id);\n }\n else {\n log(qq.format(\"File ID {} has no more chunks to send and these chunk indexes are still marked as in-progress: {}\", id, JSON.stringify(inProgressChunks)));\n }\n },\n\n // upload chunk failure\n function failure(response, xhr) {\n log(\"Chunked upload request failed for \" + id + \", chunk \" + chunkIdx);\n\n handler.clearCachedChunk(id, chunkIdx);\n\n var responseToReport = upload.normalizeResponse(response, false),\n inProgressIdx;\n\n if (responseToReport.reset) {\n chunked.reset(id);\n }\n else {\n inProgressIdx = qq.indexOf(handler._getFileState(id).chunking.inProgress, chunkIdx);\n if (inProgressIdx >= 0) {\n handler._getFileState(id).chunking.inProgress.splice(inProgressIdx, 1);\n handler._getFileState(id).chunking.remaining.unshift(chunkIdx);\n }\n }\n\n // We may have aborted all other in-progress chunks for this file due to a failure.\n // If so, ignore the failures associated with those aborts.\n if (!handler._getFileState(id).temp.ignoreFailure) {\n // If this chunk has failed, we want to ignore all other failures of currently in-progress\n // chunks since they will be explicitly aborted\n if (concurrentChunkingPossible) {\n handler._getFileState(id).temp.ignoreFailure = true;\n\n log(qq.format(\"Going to attempt to abort these chunks: {}. These are currently in-progress: {}.\", JSON.stringify(Object.keys(handler._getXhrs(id))), JSON.stringify(handler._getFileState(id).chunking.inProgress)));\n qq.each(handler._getXhrs(id), function(ckid, ckXhr) {\n log(qq.format(\"Attempting to abort file {}.{}. XHR readyState {}. \", id, ckid, ckXhr.readyState));\n ckXhr.abort();\n // Flag the transport, in case we are waiting for some other async operation\n // to complete before attempting to upload the chunk\n ckXhr._cancelled = true;\n });\n\n // We must indicate that all aborted chunks are no longer in progress\n handler.moveInProgressToRemaining(id);\n\n // Free up any connections used by these chunks, but don't allow any\n // other files to take up the connections (until we have exhausted all auto-retries)\n connectionManager.free(id, true);\n }\n\n if (!options.onAutoRetry(id, name, responseToReport, xhr)) {\n // If one chunk fails, abort all of the others to avoid odd race conditions that occur\n // if a chunk succeeds immediately after one fails before we have determined if the upload\n // is a failure or not.\n upload.cleanup(id, responseToReport, xhr);\n }\n }\n }\n )\n .done(function() {\n handler.clearXhr(id, chunkIdx);\n });\n }\n }\n },\n\n connectionManager = {\n _open: [],\n _openChunks: {},\n _waiting: [],\n\n available: function() {\n var max = options.maxConnections,\n openChunkEntriesCount = 0,\n openChunksCount = 0;\n\n qq.each(connectionManager._openChunks, function(fileId, openChunkIndexes) {\n openChunkEntriesCount++;\n openChunksCount += openChunkIndexes.length;\n });\n\n return max - (connectionManager._open.length - openChunkEntriesCount + openChunksCount);\n },\n\n /**\n * Removes element from queue, starts upload of next\n */\n free: function(id, dontAllowNext) {\n var allowNext = !dontAllowNext,\n waitingIndex = qq.indexOf(connectionManager._waiting, id),\n connectionsIndex = qq.indexOf(connectionManager._open, id),\n nextId;\n\n delete connectionManager._openChunks[id];\n\n if (upload.getProxyOrBlob(id) instanceof qq.BlobProxy) {\n log(\"Generated blob upload has ended for \" + id + \", disposing generated blob.\");\n delete handler._getFileState(id).file;\n }\n\n // If this file was not consuming a connection, it was just waiting, so remove it from the waiting array\n if (waitingIndex >= 0) {\n connectionManager._waiting.splice(waitingIndex, 1);\n }\n // If this file was consuming a connection, allow the next file to be uploaded\n else if (allowNext && connectionsIndex >= 0) {\n connectionManager._open.splice(connectionsIndex, 1);\n\n nextId = connectionManager._waiting.shift();\n if (nextId >= 0) {\n connectionManager._open.push(nextId);\n upload.start(nextId);\n }\n }\n },\n\n getWaitingOrConnected: function() {\n var waitingOrConnected = [];\n\n // Chunked files may have multiple connections open per chunk (if concurrent chunking is enabled)\n // We need to grab the file ID of any file that has at least one chunk consuming a connection.\n qq.each(connectionManager._openChunks, function(fileId, chunks) {\n if (chunks && chunks.length) {\n waitingOrConnected.push(parseInt(fileId));\n }\n });\n\n // For non-chunked files, only one connection will be consumed per file.\n // This is where we aggregate those file IDs.\n qq.each(connectionManager._open, function(idx, fileId) {\n if (!connectionManager._openChunks[fileId]) {\n waitingOrConnected.push(parseInt(fileId));\n }\n });\n\n // There may be files waiting for a connection.\n waitingOrConnected = waitingOrConnected.concat(connectionManager._waiting);\n\n return waitingOrConnected;\n },\n\n isUsingConnection: function(id) {\n return qq.indexOf(connectionManager._open, id) >= 0;\n },\n\n open: function(id, chunkIdx) {\n if (chunkIdx == null) {\n connectionManager._waiting.push(id);\n }\n\n if (connectionManager.available()) {\n if (chunkIdx == null) {\n connectionManager._waiting.pop();\n connectionManager._open.push(id);\n }\n else {\n (function() {\n var openChunksEntry = connectionManager._openChunks[id] || [];\n openChunksEntry.push(chunkIdx);\n connectionManager._openChunks[id] = openChunksEntry;\n }());\n }\n\n return true;\n }\n\n return false;\n },\n\n reset: function() {\n connectionManager._waiting = [];\n connectionManager._open = [];\n }\n },\n\n simple = {\n send: function(id, name) {\n handler._getFileState(id).loaded = 0;\n\n log(\"Sending simple upload request for \" + id);\n handler.uploadFile(id).then(\n function(response, optXhr) {\n log(\"Simple upload request succeeded for \" + id);\n\n var responseToReport = upload.normalizeResponse(response, true),\n size = options.getSize(id);\n\n options.onProgress(id, name, size, size);\n upload.maybeNewUuid(id, responseToReport);\n upload.cleanup(id, responseToReport, optXhr);\n },\n\n function(response, optXhr) {\n log(\"Simple upload request failed for \" + id);\n\n var responseToReport = upload.normalizeResponse(response, false);\n\n if (!options.onAutoRetry(id, name, responseToReport, optXhr)) {\n upload.cleanup(id, responseToReport, optXhr);\n }\n }\n );\n }\n },\n\n upload = {\n cancel: function(id) {\n log(\"Cancelling \" + id);\n options.paramsStore.remove(id);\n connectionManager.free(id);\n },\n\n cleanup: function(id, response, optXhr) {\n var name = options.getName(id);\n\n options.onComplete(id, name, response, optXhr);\n\n if (handler._getFileState(id)) {\n handler._clearXhrs && handler._clearXhrs(id);\n }\n\n connectionManager.free(id);\n },\n\n // Returns a qq.BlobProxy, or an actual File/Blob if no proxy is involved, or undefined\n // if none of these are available for the ID\n getProxyOrBlob: function(id) {\n return (handler.getProxy && handler.getProxy(id)) ||\n (handler.getFile && handler.getFile(id));\n },\n\n initHandler: function() {\n var handlerType = namespace ? qq[namespace] : qq.traditional,\n handlerModuleSubtype = qq.supportedFeatures.ajaxUploading ? \"Xhr\" : \"Form\";\n\n handler = new handlerType[handlerModuleSubtype + \"UploadHandler\"](\n options,\n {\n getDataByUuid: options.getDataByUuid,\n getName: options.getName,\n getSize: options.getSize,\n getUuid: options.getUuid,\n log: log,\n onCancel: options.onCancel,\n onProgress: options.onProgress,\n onUuidChanged: options.onUuidChanged\n }\n );\n\n if (handler._removeExpiredChunkingRecords) {\n handler._removeExpiredChunkingRecords();\n }\n },\n\n isDeferredEligibleForUpload: function(id) {\n return options.isQueued(id);\n },\n\n // For Blobs that are part of a group of generated images, along with a reference image,\n // this will ensure the blobs in the group are uploaded in the order they were triggered,\n // even if some async processing must be completed on one or more Blobs first.\n maybeDefer: function(id, blob) {\n // If we don't have a file/blob yet & no file/blob exists for this item, request it,\n // and then submit the upload to the specific handler once the blob is available.\n // ASSUMPTION: This condition will only ever be true if XHR uploading is supported.\n if (blob && !handler.getFile(id) && blob instanceof qq.BlobProxy) {\n\n // Blob creation may take some time, so the caller may want to update the\n // UI to indicate that an operation is in progress, even before the actual\n // upload begins and an onUpload callback is invoked.\n options.onUploadPrep(id);\n\n log(\"Attempting to generate a blob on-demand for \" + id);\n blob.create().then(function(generatedBlob) {\n log(\"Generated an on-demand blob for \" + id);\n\n // Update record associated with this file by providing the generated Blob\n handler.updateBlob(id, generatedBlob);\n\n // Propagate the size for this generated Blob\n options.setSize(id, generatedBlob.size);\n\n // Order handler to recalculate chunking possibility, if applicable\n handler.reevaluateChunking(id);\n\n upload.maybeSendDeferredFiles(id);\n },\n\n // Blob could not be generated. Fail the upload & attempt to prevent retries. Also bubble error message.\n function(errorMessage) {\n var errorResponse = {};\n\n if (errorMessage) {\n errorResponse.error = errorMessage;\n }\n\n log(qq.format(\"Failed to generate blob for ID {}. Error message: {}.\", id, errorMessage), \"error\");\n\n options.onComplete(id, options.getName(id), qq.extend(errorResponse, preventRetryResponse), null);\n upload.maybeSendDeferredFiles(id);\n connectionManager.free(id);\n });\n }\n else {\n return upload.maybeSendDeferredFiles(id);\n }\n\n return false;\n },\n\n // Upload any grouped blobs, in the proper order, that are ready to be uploaded\n maybeSendDeferredFiles: function(id) {\n var idsInGroup = options.getIdsInProxyGroup(id),\n uploadedThisId = false;\n\n if (idsInGroup && idsInGroup.length) {\n log(\"Maybe ready to upload proxy group file \" + id);\n\n qq.each(idsInGroup, function(idx, idInGroup) {\n if (upload.isDeferredEligibleForUpload(idInGroup) && !!handler.getFile(idInGroup)) {\n uploadedThisId = idInGroup === id;\n upload.now(idInGroup);\n }\n else if (upload.isDeferredEligibleForUpload(idInGroup)) {\n return false;\n }\n });\n }\n else {\n uploadedThisId = true;\n upload.now(id);\n }\n\n return uploadedThisId;\n },\n\n maybeNewUuid: function(id, response) {\n if (response.newUuid !== undefined) {\n options.onUuidChanged(id, response.newUuid);\n }\n },\n\n // The response coming from handler implementations may be in various formats.\n // Instead of hoping a promise nested 5 levels deep will always return an object\n // as its first param, let's just normalize the response here.\n normalizeResponse: function(originalResponse, successful) {\n var response = originalResponse;\n\n // The passed \"response\" param may not be a response at all.\n // It could be a string, detailing the error, for example.\n if (!qq.isObject(originalResponse)) {\n response = {};\n\n if (qq.isString(originalResponse) && !successful) {\n response.error = originalResponse;\n }\n }\n\n response.success = successful;\n\n return response;\n },\n\n now: function(id) {\n var name = options.getName(id);\n\n if (!controller.isValid(id)) {\n throw new qq.Error(id + \" is not a valid file ID to upload!\");\n }\n\n options.onUpload(id, name);\n\n if (chunkingPossible && handler._shouldChunkThisFile(id)) {\n chunked.sendNext(id);\n }\n else {\n simple.send(id, name);\n }\n },\n\n start: function(id) {\n var blobToUpload = upload.getProxyOrBlob(id);\n\n if (blobToUpload) {\n return upload.maybeDefer(id, blobToUpload);\n }\n else {\n upload.now(id);\n return true;\n }\n }\n };\n\n qq.extend(this, {\n /**\n * Adds file or file input to the queue\n **/\n add: function(id, file) {\n handler.add.apply(this, arguments);\n },\n\n /**\n * Sends the file identified by id\n */\n upload: function(id) {\n if (connectionManager.open(id)) {\n return upload.start(id);\n }\n return false;\n },\n\n retry: function(id) {\n // On retry, if concurrent chunking has been enabled, we may have aborted all other in-progress chunks\n // for a file when encountering a failed chunk upload. We then signaled the controller to ignore\n // all failures associated with these aborts. We are now retrying, so we don't want to ignore\n // any more failures at this point.\n if (concurrentChunkingPossible) {\n handler._getFileState(id).temp.ignoreFailure = false;\n }\n\n // If we are attempting to retry a file that is already consuming a connection, this is likely an auto-retry.\n // Just go ahead and ask the handler to upload again.\n if (connectionManager.isUsingConnection(id)) {\n return upload.start(id);\n }\n\n // If we are attempting to retry a file that is not currently consuming a connection,\n // this is likely a manual retry attempt. We will need to ensure a connection is available\n // before the retry commences.\n else {\n return controller.upload(id);\n }\n },\n\n /**\n * Cancels file upload by id\n */\n cancel: function(id) {\n var cancelRetVal = handler.cancel(id);\n\n if (qq.isGenericPromise(cancelRetVal)) {\n cancelRetVal.then(function() {\n upload.cancel(id);\n });\n }\n else if (cancelRetVal !== false) {\n upload.cancel(id);\n }\n },\n\n /**\n * Cancels all queued or in-progress uploads\n */\n cancelAll: function() {\n var waitingOrConnected = connectionManager.getWaitingOrConnected(),\n i;\n\n // ensure files are cancelled in reverse order which they were added\n // to avoid a flash of time where a queued file begins to upload before it is canceled\n if (waitingOrConnected.length) {\n for (i = waitingOrConnected.length - 1; i >= 0; i--) {\n controller.cancel(waitingOrConnected[i]);\n }\n }\n\n connectionManager.reset();\n },\n\n // Returns a File, Blob, or the Blob/File for the reference/parent file if the targeted blob is a proxy.\n // Undefined if no file record is available.\n getFile: function(id) {\n if (handler.getProxy && handler.getProxy(id)) {\n return handler.getProxy(id).referenceBlob;\n }\n\n return handler.getFile && handler.getFile(id);\n },\n\n // Returns true if the Blob associated with the ID is related to a proxy s\n isProxied: function(id) {\n return !!(handler.getProxy && handler.getProxy(id));\n },\n\n getInput: function(id) {\n if (handler.getInput) {\n return handler.getInput(id);\n }\n },\n\n reset: function() {\n log(\"Resetting upload handler\");\n controller.cancelAll();\n connectionManager.reset();\n handler.reset();\n },\n\n expunge: function(id) {\n if (controller.isValid(id)) {\n return handler.expunge(id);\n }\n },\n\n /**\n * Determine if the file exists.\n */\n isValid: function(id) {\n return handler.isValid(id);\n },\n\n getResumableFilesData: function() {\n if (handler.getResumableFilesData) {\n return handler.getResumableFilesData();\n }\n return [];\n },\n\n /**\n * This may or may not be implemented, depending on the handler. For handlers where a third-party ID is\n * available (such as the \"key\" for Amazon S3), this will return that value. Otherwise, the return value\n * will be undefined.\n *\n * @param id Internal file ID\n * @returns {*} Some identifier used by a 3rd-party service involved in the upload process\n */\n getThirdPartyFileId: function(id) {\n if (controller.isValid(id)) {\n return handler.getThirdPartyFileId(id);\n }\n },\n\n /**\n * Attempts to pause the associated upload if the specific handler supports this and the file is \"valid\".\n * @param id ID of the upload/file to pause\n * @returns {boolean} true if the upload was paused\n */\n pause: function(id) {\n if (controller.isResumable(id) && handler.pause && controller.isValid(id) && handler.pause(id)) {\n connectionManager.free(id);\n handler.moveInProgressToRemaining(id);\n return true;\n }\n return false;\n },\n\n // True if the file is eligible for pause/resume.\n isResumable: function(id) {\n return !!handler.isResumable && handler.isResumable(id);\n }\n });\n\n qq.extend(options, o);\n log = options.log;\n chunkingPossible = options.chunking.enabled && qq.supportedFeatures.chunking;\n concurrentChunkingPossible = chunkingPossible && options.chunking.concurrent.enabled;\n\n preventRetryResponse = (function() {\n var response = {};\n\n response[options.preventRetryParam] = true;\n\n return response;\n }());\n\n upload.initHandler();\n};\n","/* globals qq */\n/**\n * Common APIs exposed to creators of upload via form/iframe handlers. This is reused and possibly overridden\n * in some cases by specific form upload handlers.\n *\n * @constructor\n */\nqq.FormUploadHandler = function(spec) {\n \"use strict\";\n\n var options = spec.options,\n handler = this,\n proxy = spec.proxy,\n formHandlerInstanceId = qq.getUniqueId(),\n onloadCallbacks = {},\n detachLoadEvents = {},\n postMessageCallbackTimers = {},\n isCors = options.isCors,\n inputName = options.inputName,\n getUuid = proxy.getUuid,\n log = proxy.log,\n corsMessageReceiver = new qq.WindowReceiveMessage({log: log});\n\n /**\n * Remove any trace of the file from the handler.\n *\n * @param id ID of the associated file\n */\n function expungeFile(id) {\n delete detachLoadEvents[id];\n\n // If we are dealing with CORS, we might still be waiting for a response from a loaded iframe.\n // In that case, terminate the timer waiting for a message from the loaded iframe\n // and stop listening for any more messages coming from this iframe.\n if (isCors) {\n clearTimeout(postMessageCallbackTimers[id]);\n delete postMessageCallbackTimers[id];\n corsMessageReceiver.stopReceivingMessages(id);\n }\n\n var iframe = document.getElementById(handler._getIframeName(id));\n if (iframe) {\n // To cancel request set src to something else. We use src=\"javascript:false;\"\n // because it doesn't trigger ie6 prompt on https\n /* jshint scripturl:true */\n iframe.setAttribute(\"src\", \"javascript:false;\");\n\n qq(iframe).remove();\n }\n }\n\n /**\n * @param iframeName `document`-unique Name of the associated iframe\n * @returns {*} ID of the associated file\n */\n function getFileIdForIframeName(iframeName) {\n return iframeName.split(\"_\")[0];\n }\n\n /**\n * Generates an iframe to be used as a target for upload-related form submits. This also adds the iframe\n * to the current `document`. Note that the iframe is hidden from view.\n *\n * @param name Name of the iframe.\n * @returns {HTMLIFrameElement} The created iframe\n */\n function initIframeForUpload(name) {\n var iframe = qq.toElement(\"\");\n\n iframe.setAttribute(\"id\", name);\n\n iframe.style.display = \"none\";\n document.body.appendChild(iframe);\n\n return iframe;\n }\n\n /**\n * If we are in CORS mode, we must listen for messages (containing the server response) from the associated\n * iframe, since we cannot directly parse the content of the iframe due to cross-origin restrictions.\n *\n * @param iframe Listen for messages on this iframe.\n * @param callback Invoke this callback with the message from the iframe.\n */\n function registerPostMessageCallback(iframe, callback) {\n var iframeName = iframe.id,\n fileId = getFileIdForIframeName(iframeName),\n uuid = getUuid(fileId);\n\n onloadCallbacks[uuid] = callback;\n\n // When the iframe has loaded (after the server responds to an upload request)\n // declare the attempt a failure if we don't receive a valid message shortly after the response comes in.\n detachLoadEvents[fileId] = qq(iframe).attach(\"load\", function() {\n if (handler.getInput(fileId)) {\n log(\"Received iframe load event for CORS upload request (iframe name \" + iframeName + \")\");\n\n postMessageCallbackTimers[iframeName] = setTimeout(function() {\n var errorMessage = \"No valid message received from loaded iframe for iframe name \" + iframeName;\n log(errorMessage, \"error\");\n callback({\n error: errorMessage\n });\n }, 1000);\n }\n });\n\n // Listen for messages coming from this iframe. When a message has been received, cancel the timer\n // that declares the upload a failure if a message is not received within a reasonable amount of time.\n corsMessageReceiver.receiveMessage(iframeName, function(message) {\n log(\"Received the following window message: '\" + message + \"'\");\n var fileId = getFileIdForIframeName(iframeName),\n response = handler._parseJsonResponse(message),\n uuid = response.uuid,\n onloadCallback;\n\n if (uuid && onloadCallbacks[uuid]) {\n log(\"Handling response for iframe name \" + iframeName);\n clearTimeout(postMessageCallbackTimers[iframeName]);\n delete postMessageCallbackTimers[iframeName];\n\n handler._detachLoadEvent(iframeName);\n\n onloadCallback = onloadCallbacks[uuid];\n\n delete onloadCallbacks[uuid];\n corsMessageReceiver.stopReceivingMessages(iframeName);\n onloadCallback(response);\n }\n else if (!uuid) {\n log(\"'\" + message + \"' does not contain a UUID - ignoring.\");\n }\n });\n }\n\n qq.extend(this, new qq.UploadHandler(spec));\n\n qq.override(this, function(super_) {\n return {\n /**\n * Adds File or Blob to the queue\n **/\n add: function(id, fileInput) {\n super_.add(id, {input: fileInput});\n\n fileInput.setAttribute(\"name\", inputName);\n\n // remove file input from DOM\n if (fileInput.parentNode) {\n qq(fileInput).remove();\n }\n },\n\n expunge: function(id) {\n expungeFile(id);\n super_.expunge(id);\n },\n\n isValid: function(id) {\n return super_.isValid(id) &&\n handler._getFileState(id).input !== undefined;\n }\n };\n });\n\n qq.extend(this, {\n getInput: function(id) {\n return handler._getFileState(id).input;\n },\n\n /**\n * This function either delegates to a more specific message handler if CORS is involved,\n * or simply registers a callback when the iframe has been loaded that invokes the passed callback\n * after determining if the content of the iframe is accessible.\n *\n * @param iframe Associated iframe\n * @param callback Callback to invoke after we have determined if the iframe content is accessible.\n */\n _attachLoadEvent: function(iframe, callback) {\n /*jslint eqeq: true*/\n var responseDescriptor;\n\n if (isCors) {\n registerPostMessageCallback(iframe, callback);\n }\n else {\n detachLoadEvents[iframe.id] = qq(iframe).attach(\"load\", function() {\n log(\"Received response for \" + iframe.id);\n\n // when we remove iframe from dom\n // the request stops, but in IE load\n // event fires\n if (!iframe.parentNode) {\n return;\n }\n\n try {\n // fixing Opera 10.53\n if (iframe.contentDocument &&\n iframe.contentDocument.body &&\n iframe.contentDocument.body.innerHTML == \"false\") {\n // In Opera event is fired second time\n // when body.innerHTML changed from false\n // to server response approx. after 1 sec\n // when we upload file with iframe\n return;\n }\n }\n catch (error) {\n //IE may throw an \"access is denied\" error when attempting to access contentDocument on the iframe in some cases\n log(\"Error when attempting to access iframe during handling of upload response (\" + error.message + \")\", \"error\");\n responseDescriptor = {success: false};\n }\n\n callback(responseDescriptor);\n });\n }\n },\n\n /**\n * Creates an iframe with a specific document-unique name.\n *\n * @param id ID of the associated file\n * @returns {HTMLIFrameElement}\n */\n _createIframe: function(id) {\n var iframeName = handler._getIframeName(id);\n\n return initIframeForUpload(iframeName);\n },\n\n /**\n * Called when we are no longer interested in being notified when an iframe has loaded.\n *\n * @param id Associated file ID\n */\n _detachLoadEvent: function(id) {\n if (detachLoadEvents[id] !== undefined) {\n detachLoadEvents[id]();\n delete detachLoadEvents[id];\n }\n },\n\n /**\n * @param fileId ID of the associated file\n * @returns {string} The `document`-unique name of the iframe\n */\n _getIframeName: function(fileId) {\n return fileId + \"_\" + formHandlerInstanceId;\n },\n\n /**\n * Generates a form element and appends it to the `document`. When the form is submitted, a specific iframe is targeted.\n * The name of the iframe is passed in as a property of the spec parameter, and must be unique in the `document`. Note\n * that the form is hidden from view.\n *\n * @param spec An object containing various properties to be used when constructing the form. Required properties are\n * currently: `method`, `endpoint`, `params`, `paramsInBody`, and `targetName`.\n * @returns {HTMLFormElement} The created form\n */\n _initFormForUpload: function(spec) {\n var method = spec.method,\n endpoint = spec.endpoint,\n params = spec.params,\n paramsInBody = spec.paramsInBody,\n targetName = spec.targetName,\n form = qq.toElement(\"
\"),\n url = endpoint;\n\n if (paramsInBody) {\n qq.obj2Inputs(params, form);\n }\n else {\n url = qq.obj2url(params, endpoint);\n }\n\n form.setAttribute(\"action\", url);\n form.setAttribute(\"target\", targetName);\n form.style.display = \"none\";\n document.body.appendChild(form);\n\n return form;\n },\n\n /**\n * @param innerHtmlOrMessage JSON message\n * @returns {*} The parsed response, or an empty object if the response could not be parsed\n */\n _parseJsonResponse: function(innerHtmlOrMessage) {\n var response = {};\n\n try {\n response = qq.parseJson(innerHtmlOrMessage);\n }\n catch (error) {\n log(\"Error when attempting to parse iframe upload response (\" + error.message + \")\", \"error\");\n }\n\n return response;\n }\n });\n};\n","/* globals qq */\n/**\n * Common API exposed to creators of XHR handlers. This is reused and possibly overriding in some cases by specific\n * XHR upload handlers.\n *\n * @constructor\n */\nqq.XhrUploadHandler = function(spec) {\n \"use strict\";\n\n var handler = this,\n namespace = spec.options.namespace,\n proxy = spec.proxy,\n chunking = spec.options.chunking,\n resume = spec.options.resume,\n chunkFiles = chunking && spec.options.chunking.enabled && qq.supportedFeatures.chunking,\n resumeEnabled = resume && spec.options.resume.enabled && chunkFiles && qq.supportedFeatures.resume,\n getName = proxy.getName,\n getSize = proxy.getSize,\n getUuid = proxy.getUuid,\n getEndpoint = proxy.getEndpoint,\n getDataByUuid = proxy.getDataByUuid,\n onUuidChanged = proxy.onUuidChanged,\n onProgress = proxy.onProgress,\n log = proxy.log;\n\n function abort(id) {\n qq.each(handler._getXhrs(id), function(xhrId, xhr) {\n var ajaxRequester = handler._getAjaxRequester(id, xhrId);\n\n xhr.onreadystatechange = null;\n xhr.upload.onprogress = null;\n xhr.abort();\n ajaxRequester && ajaxRequester.canceled && ajaxRequester.canceled(id);\n });\n }\n\n qq.extend(this, new qq.UploadHandler(spec));\n\n qq.override(this, function(super_) {\n return {\n /**\n * Adds File or Blob to the queue\n **/\n add: function(id, blobOrProxy) {\n if (qq.isFile(blobOrProxy) || qq.isBlob(blobOrProxy)) {\n super_.add(id, {file: blobOrProxy});\n }\n else if (blobOrProxy instanceof qq.BlobProxy) {\n super_.add(id, {proxy: blobOrProxy});\n }\n else {\n throw new Error(\"Passed obj is not a File, Blob, or proxy\");\n }\n\n handler._initTempState(id);\n resumeEnabled && handler._maybePrepareForResume(id);\n },\n\n expunge: function(id) {\n abort(id);\n handler._maybeDeletePersistedChunkData(id);\n handler._clearXhrs(id);\n super_.expunge(id);\n }\n };\n });\n\n qq.extend(this, {\n // Clear the cached chunk `Blob` after we are done with it, just in case the `Blob` bytes are stored in memory.\n clearCachedChunk: function(id, chunkIdx) {\n delete handler._getFileState(id).temp.cachedChunks[chunkIdx];\n },\n\n clearXhr: function(id, chunkIdx) {\n var tempState = handler._getFileState(id).temp;\n\n if (tempState.xhrs) {\n delete tempState.xhrs[chunkIdx];\n }\n if (tempState.ajaxRequesters) {\n delete tempState.ajaxRequesters[chunkIdx];\n }\n },\n\n // Called when all chunks have been successfully uploaded. Expected promissory return type.\n // This defines the default behavior if nothing further is required when all chunks have been uploaded.\n finalizeChunks: function(id, responseParser) {\n var lastChunkIdx = handler._getTotalChunks(id) - 1,\n xhr = handler._getXhr(id, lastChunkIdx);\n\n if (responseParser) {\n return new qq.Promise().success(responseParser(xhr), xhr);\n }\n\n return new qq.Promise().success({}, xhr);\n },\n\n getFile: function(id) {\n return handler.isValid(id) && handler._getFileState(id).file;\n },\n\n getProxy: function(id) {\n return handler.isValid(id) && handler._getFileState(id).proxy;\n },\n\n /**\n * @returns {Array} Array of objects containing properties useful to integrators\n * when it is important to determine which files are potentially resumable.\n */\n getResumableFilesData: function() {\n var resumableFilesData = [];\n\n handler._iterateResumeRecords(function(key, uploadData) {\n handler.moveInProgressToRemaining(null, uploadData.chunking.inProgress, uploadData.chunking.remaining);\n\n var data = {\n name: uploadData.name,\n remaining: uploadData.chunking.remaining,\n size: uploadData.size,\n uuid: uploadData.uuid\n };\n\n if (uploadData.key) {\n data.key = uploadData.key;\n }\n\n resumableFilesData.push(data);\n });\n\n return resumableFilesData;\n },\n\n isResumable: function(id) {\n return !!chunking && handler.isValid(id) && !handler._getFileState(id).notResumable;\n },\n\n moveInProgressToRemaining: function(id, optInProgress, optRemaining) {\n var inProgress = optInProgress || handler._getFileState(id).chunking.inProgress,\n remaining = optRemaining || handler._getFileState(id).chunking.remaining;\n\n if (inProgress) {\n log(qq.format(\"Moving these chunks from in-progress {}, to remaining.\", JSON.stringify(inProgress)));\n inProgress.reverse();\n qq.each(inProgress, function(idx, chunkIdx) {\n remaining.unshift(chunkIdx);\n });\n inProgress.length = 0;\n }\n },\n\n pause: function(id) {\n if (handler.isValid(id)) {\n log(qq.format(\"Aborting XHR upload for {} '{}' due to pause instruction.\", id, getName(id)));\n handler._getFileState(id).paused = true;\n abort(id);\n return true;\n }\n },\n\n reevaluateChunking: function(id) {\n if (chunking && handler.isValid(id)) {\n var state = handler._getFileState(id),\n totalChunks,\n i;\n\n delete state.chunking;\n\n state.chunking = {};\n totalChunks = handler._getTotalChunks(id);\n if (totalChunks > 1 || chunking.mandatory) {\n state.chunking.enabled = true;\n state.chunking.parts = totalChunks;\n state.chunking.remaining = [];\n\n for (i = 0; i < totalChunks; i++) {\n state.chunking.remaining.push(i);\n }\n\n handler._initTempState(id);\n }\n else {\n state.chunking.enabled = false;\n }\n }\n },\n\n updateBlob: function(id, newBlob) {\n if (handler.isValid(id)) {\n handler._getFileState(id).file = newBlob;\n }\n },\n\n _clearXhrs: function(id) {\n var tempState = handler._getFileState(id).temp;\n\n qq.each(tempState.ajaxRequesters, function(chunkId) {\n delete tempState.ajaxRequesters[chunkId];\n });\n\n qq.each(tempState.xhrs, function(chunkId) {\n delete tempState.xhrs[chunkId];\n });\n },\n\n /**\n * Creates an XHR instance for this file and stores it in the fileState.\n *\n * @param id File ID\n * @param optChunkIdx The chunk index associated with this XHR, if applicable\n * @returns {XMLHttpRequest}\n */\n _createXhr: function(id, optChunkIdx) {\n return handler._registerXhr(id, optChunkIdx, qq.createXhrInstance());\n },\n\n _getAjaxRequester: function(id, optChunkIdx) {\n var chunkIdx = optChunkIdx == null ? -1 : optChunkIdx;\n return handler._getFileState(id).temp.ajaxRequesters[chunkIdx];\n },\n\n _getChunkData: function(id, chunkIndex) {\n var chunkSize = chunking.partSize,\n fileSize = getSize(id),\n fileOrBlob = handler.getFile(id),\n startBytes = chunkSize * chunkIndex,\n endBytes = startBytes + chunkSize >= fileSize ? fileSize : startBytes + chunkSize,\n totalChunks = handler._getTotalChunks(id),\n cachedChunks = this._getFileState(id).temp.cachedChunks,\n\n // To work around a Webkit GC bug, we must keep each chunk `Blob` in scope until we are done with it.\n // See https://github.com/Widen/fine-uploader/issues/937#issuecomment-41418760\n blob = cachedChunks[chunkIndex] || qq.sliceBlob(fileOrBlob, startBytes, endBytes);\n\n cachedChunks[chunkIndex] = blob;\n\n return {\n part: chunkIndex,\n start: startBytes,\n end: endBytes,\n count: totalChunks,\n blob: blob,\n size: endBytes - startBytes\n };\n },\n\n _getChunkDataForCallback: function(chunkData) {\n return {\n partIndex: chunkData.part,\n startByte: chunkData.start + 1,\n endByte: chunkData.end,\n totalParts: chunkData.count\n };\n },\n\n /**\n * @param id File ID\n * @returns {string} Identifier for this item that may appear in the browser's local storage\n */\n _getLocalStorageId: function(id) {\n var formatVersion = \"5.0\",\n name = getName(id),\n size = getSize(id),\n chunkSize = chunking.partSize,\n endpoint = getEndpoint(id);\n\n return qq.format(\"qq{}resume{}-{}-{}-{}-{}\", namespace, formatVersion, name, size, chunkSize, endpoint);\n },\n\n _getMimeType: function(id) {\n return handler.getFile(id).type;\n },\n\n _getPersistableData: function(id) {\n return handler._getFileState(id).chunking;\n },\n\n /**\n * @param id ID of the associated file\n * @returns {number} Number of parts this file can be divided into, or undefined if chunking is not supported in this UA\n */\n _getTotalChunks: function(id) {\n if (chunking) {\n var fileSize = getSize(id),\n chunkSize = chunking.partSize;\n\n return Math.ceil(fileSize / chunkSize);\n }\n },\n\n _getXhr: function(id, optChunkIdx) {\n var chunkIdx = optChunkIdx == null ? -1 : optChunkIdx;\n return handler._getFileState(id).temp.xhrs[chunkIdx];\n },\n\n _getXhrs: function(id) {\n return handler._getFileState(id).temp.xhrs;\n },\n\n // Iterates through all XHR handler-created resume records (in local storage),\n // invoking the passed callback and passing in the key and value of each local storage record.\n _iterateResumeRecords: function(callback) {\n if (resumeEnabled) {\n qq.each(localStorage, function(key, item) {\n if (key.indexOf(qq.format(\"qq{}resume\", namespace)) === 0) {\n var uploadData = JSON.parse(item);\n callback(key, uploadData);\n }\n });\n }\n },\n\n _initTempState: function(id) {\n handler._getFileState(id).temp = {\n ajaxRequesters: {},\n chunkProgress: {},\n xhrs: {},\n cachedChunks: {}\n };\n },\n\n _markNotResumable: function(id) {\n handler._getFileState(id).notResumable = true;\n },\n\n // Removes a chunked upload record from local storage, if possible.\n // Returns true if the item was removed, false otherwise.\n _maybeDeletePersistedChunkData: function(id) {\n var localStorageId;\n\n if (resumeEnabled && handler.isResumable(id)) {\n localStorageId = handler._getLocalStorageId(id);\n\n if (localStorageId && localStorage.getItem(localStorageId)) {\n localStorage.removeItem(localStorageId);\n return true;\n }\n }\n\n return false;\n },\n\n // If this is a resumable upload, grab the relevant data from storage and items in memory that track this upload\n // so we can pick up from where we left off.\n _maybePrepareForResume: function(id) {\n var state = handler._getFileState(id),\n localStorageId, persistedData;\n\n // Resume is enabled and possible and this is the first time we've tried to upload this file in this session,\n // so prepare for a resume attempt.\n if (resumeEnabled && state.key === undefined) {\n localStorageId = handler._getLocalStorageId(id);\n persistedData = localStorage.getItem(localStorageId);\n\n // If we found this item in local storage, maybe we should resume it.\n if (persistedData) {\n persistedData = JSON.parse(persistedData);\n\n // If we found a resume record but we have already handled this file in this session,\n // don't try to resume it & ensure we don't persist future check data\n if (getDataByUuid(persistedData.uuid)) {\n handler._markNotResumable(id);\n }\n else {\n log(qq.format(\"Identified file with ID {} and name of {} as resumable.\", id, getName(id)));\n\n onUuidChanged(id, persistedData.uuid);\n\n state.key = persistedData.key;\n state.chunking = persistedData.chunking;\n state.loaded = persistedData.loaded;\n state.attemptingResume = true;\n\n handler.moveInProgressToRemaining(id);\n }\n }\n }\n },\n\n // Persist any data needed to resume this upload in a new session.\n _maybePersistChunkedState: function(id) {\n var state = handler._getFileState(id),\n localStorageId, persistedData;\n\n // If local storage isn't supported by the browser, or if resume isn't enabled or possible, give up\n if (resumeEnabled && handler.isResumable(id)) {\n localStorageId = handler._getLocalStorageId(id);\n\n persistedData = {\n name: getName(id),\n size: getSize(id),\n uuid: getUuid(id),\n key: state.key,\n chunking: state.chunking,\n loaded: state.loaded,\n lastUpdated: Date.now()\n };\n\n try {\n localStorage.setItem(localStorageId, JSON.stringify(persistedData));\n }\n catch (error) {\n log(qq.format(\"Unable to save resume data for '{}' due to error: '{}'.\", id, error.toString()), \"warn\");\n }\n }\n },\n\n _registerProgressHandler: function(id, chunkIdx, chunkSize) {\n var xhr = handler._getXhr(id, chunkIdx),\n name = getName(id),\n progressCalculator = {\n simple: function(loaded, total) {\n var fileSize = getSize(id);\n\n if (loaded === total) {\n onProgress(id, name, fileSize, fileSize);\n }\n else {\n onProgress(id, name, (loaded >= fileSize ? fileSize - 1 : loaded), fileSize);\n }\n },\n\n chunked: function(loaded, total) {\n var chunkProgress = handler._getFileState(id).temp.chunkProgress,\n totalSuccessfullyLoadedForFile = handler._getFileState(id).loaded,\n loadedForRequest = loaded,\n totalForRequest = total,\n totalFileSize = getSize(id),\n estActualChunkLoaded = loadedForRequest - (totalForRequest - chunkSize),\n totalLoadedForFile = totalSuccessfullyLoadedForFile;\n\n chunkProgress[chunkIdx] = estActualChunkLoaded;\n\n qq.each(chunkProgress, function(chunkIdx, chunkLoaded) {\n totalLoadedForFile += chunkLoaded;\n });\n\n onProgress(id, name, totalLoadedForFile, totalFileSize);\n }\n };\n\n xhr.upload.onprogress = function(e) {\n if (e.lengthComputable) {\n /* jshint eqnull: true */\n var type = chunkSize == null ? \"simple\" : \"chunked\";\n progressCalculator[type](e.loaded, e.total);\n }\n };\n },\n\n /**\n * Registers an XHR transport instance created elsewhere.\n *\n * @param id ID of the associated file\n * @param optChunkIdx The chunk index associated with this XHR, if applicable\n * @param xhr XMLHttpRequest object instance\n * @param optAjaxRequester `qq.AjaxRequester` associated with this request, if applicable.\n * @returns {XMLHttpRequest}\n */\n _registerXhr: function(id, optChunkIdx, xhr, optAjaxRequester) {\n var xhrsId = optChunkIdx == null ? -1 : optChunkIdx,\n tempState = handler._getFileState(id).temp;\n\n tempState.xhrs = tempState.xhrs || {};\n tempState.ajaxRequesters = tempState.ajaxRequesters || {};\n\n tempState.xhrs[xhrsId] = xhr;\n\n if (optAjaxRequester) {\n tempState.ajaxRequesters[xhrsId] = optAjaxRequester;\n }\n\n return xhr;\n },\n\n // Deletes any local storage records that are \"expired\".\n _removeExpiredChunkingRecords: function() {\n var expirationDays = resume.recordsExpireIn;\n\n handler._iterateResumeRecords(function(key, uploadData) {\n var expirationDate = new Date(uploadData.lastUpdated);\n\n // transform updated date into expiration date\n expirationDate.setDate(expirationDate.getDate() + expirationDays);\n\n if (expirationDate.getTime() <= Date.now()) {\n log(\"Removing expired resume record with key \" + key);\n localStorage.removeItem(key);\n }\n });\n },\n\n /**\n * Determine if the associated file should be chunked.\n *\n * @param id ID of the associated file\n * @returns {*} true if chunking is enabled, possible, and the file can be split into more than 1 part\n */\n _shouldChunkThisFile: function(id) {\n var state = handler._getFileState(id);\n\n if (!state.chunking) {\n handler.reevaluateChunking(id);\n }\n\n return state.chunking.enabled;\n }\n });\n};\n","/*globals qq, XMLHttpRequest*/\nqq.DeleteFileAjaxRequester = function(o) {\n \"use strict\";\n\n var requester,\n options = {\n method: \"DELETE\",\n uuidParamName: \"qquuid\",\n endpointStore: {},\n maxConnections: 3,\n customHeaders: function(id) {return {};},\n paramsStore: {},\n cors: {\n expected: false,\n sendCredentials: false\n },\n log: function(str, level) {},\n onDelete: function(id) {},\n onDeleteComplete: function(id, xhrOrXdr, isError) {}\n };\n\n qq.extend(options, o);\n\n function getMandatedParams() {\n if (options.method.toUpperCase() === \"POST\") {\n return {\n _method: \"DELETE\"\n };\n }\n\n return {};\n }\n\n requester = qq.extend(this, new qq.AjaxRequester({\n acceptHeader: \"application/json\",\n validMethods: [\"POST\", \"DELETE\"],\n method: options.method,\n endpointStore: options.endpointStore,\n paramsStore: options.paramsStore,\n mandatedParams: getMandatedParams(),\n maxConnections: options.maxConnections,\n customHeaders: function(id) {\n return options.customHeaders.get(id);\n },\n log: options.log,\n onSend: options.onDelete,\n onComplete: options.onDeleteComplete,\n cors: options.cors\n }));\n\n qq.extend(this, {\n sendDelete: function(id, uuid, additionalMandatedParams) {\n var additionalOptions = additionalMandatedParams || {};\n\n options.log(\"Submitting delete file request for \" + id);\n\n if (options.method === \"DELETE\") {\n requester.initTransport(id)\n .withPath(uuid)\n .withParams(additionalOptions)\n .send();\n }\n else {\n additionalOptions[options.uuidParamName] = uuid;\n requester.initTransport(id)\n .withParams(additionalOptions)\n .send();\n }\n }\n });\n};\n","/*global qq, define */\n/*jshint strict:false,bitwise:false,nonew:false,asi:true,-W064,-W116,-W089 */\n/**\n * Mega pixel image rendering library for iOS6+\n *\n * Fixes iOS6+'s image file rendering issue for large size image (over mega-pixel),\n * which causes unexpected subsampling when drawing it in canvas.\n * By using this library, you can safely render the image with proper stretching.\n *\n * Copyright (c) 2012 Shinichi Tomita