{"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/azure/util.js","../client/js/non-traditional-common/uploader.basic.api.js","../client/js/azure/uploader.basic.js","../client/js/azure/azure.xhr.upload.handler.js","../client/js/azure/get-sas.js","../client/js/uploadsuccess.ajax.requester.js","../client/js/azure/rest/delete-blob.js","../client/js/azure/rest/put-blob.js","../client/js/azure/rest/put-block.js","../client/js/azure/rest/put-block-list.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/azure/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","azure","util","AZURE_PARAM_PREFIX","_paramNameMatchesAzureParameter","_getPrefixedParamName","getParamsAsHeaders","headerName","parseAzureError","codeTag","messageTag","domParser","DOMParser","responseDoc","parseFromString","errorTag","errorDetails","nonTraditionalBasePublicApi","setUploadSuccessParams","_uploadSuccessParamsStore","setUploadSuccessEndpoint","_uploadSuccessEndpointStore","nonTraditionalBasePrivateApi","submitSuccessRequest","successAjaxRequester","onCompleteArgs","successEndpoint","successCustomHeaders","uploadSuccess","successMethod","uploadSuccessParams","fileParams","onSuccessFromServer","successRequestResult","_failedSuccessRequestCallbacks","onFailureFromServer","UploadSuccessAjaxRequester","_getEndpointSpecificParams","sendSuccessRequest","successRequestCallback","signature","blobProperties","minFileSize","_cannedBlobNames","getBlobName","onGetBlobName","_determineBlobName","deleteBlob","_deleteBlob","blobNameOptionValue","fileExtension","blobNameToUse","blobName","relatedToCancel","deleteBlobSasUri","blobUriStore","deleteFileEndpointStore","getSasSuccess","sasUri","getSasFailure","DeleteBlob","getSas","GetSas","restRequestVerb","combineChunks","getSignedUrl","mimeType","blockIdEntries","putBlockList","handleFailure","determineBlobUrl","containerUrl","getBlobNameSuccess","getBlobNameFailure","getSasId","getSasXhr","determineBlobUrlSuccess","blobUrl","getSasForPutBlobOrBlock","determineBlobUrlFailure","azureError","minFileSizeForChunking","getBlobMetadata","putBlob","PutBlob","putBlock","PutBlock","PutBlockList","blockIdEntry","chunkingData","maybePossible","sasResponseReceived","requestPromises","blobUri","requestPromise","restVerb","bloburi","handleSuccessResponse","parsedResponse","pendingRequests","responseJson","successIndicator","failureIndicator","codes","endpoints","promises","endpointHandler","Content-Type","createBlockId","partNum","digits","zeros","paddedPartNum","btoa","blockId","createRequestBody","doc","implementation","createDocument","latestEl","latestTextEl","createTextNode","XMLSerializer","serializeToString","fileMimeType","registerXhrCallback","blockIdsXml","x-ms-blob-content-type","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","content","createDocumentFragment","map","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","update","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":"azure.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