{"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/window.receive.message.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/traditional/traditional.form.upload.handler.js","../client/js/traditional/traditional.xhr.upload.handler.js","../client/js/traditional/all-chunks-done.ajax.requester.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"],"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","WindowReceiveMessage","callbackWrapperDetachers","receiveMessage","onMessageCallbackWrapper","stopReceivingMessages","detacher","FormUploadHandler","expungeFile","detachLoadEvents","isCors","postMessageCallbackTimers","corsMessageReceiver","iframe","getElementById","_getIframeName","getFileIdForIframeName","iframeName","initIframeForUpload","body","registerPostMessageCallback","onloadCallbacks","onloadCallback","_parseJsonResponse","_detachLoadEvent","formHandlerInstanceId","_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","getIframeContentJson","doc","innerHtml","contentWindow","nodeValue","createForm","responseFromMessage","multipart","addChunkingSpecificParams","allChunksDoneRequester","AllChunksDoneAjaxRequester","createReadyStateChangedHandler","onUploadOrChunkComplete","getChunksCompleteParams","isErrorUploadResponse","parseResponse","sendChunksCompleteRequest","complete","setParamsAndGetEntityToSend","setUploadHeaders","extraHeaders","toSend","promises","endpointHandler","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":"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.8\";\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/*jshint -W117 */\nqq.WindowReceiveMessage = function(o) {\n \"use strict\";\n\n var options = {\n log: function(message, level) {}\n },\n callbackWrapperDetachers = {};\n\n qq.extend(options, o);\n\n qq.extend(this, {\n receiveMessage: function(id, callback) {\n var onMessageCallbackWrapper = function(event) {\n callback(event.data);\n };\n\n if (window.postMessage) {\n callbackWrapperDetachers[id] = qq(window).attach(\"message\", onMessageCallbackWrapper);\n }\n else {\n log(\"iframe message passing not supported in this browser!\", \"error\");\n }\n },\n\n stopReceivingMessages: function(id) {\n if (window.postMessage) {\n var detacher = callbackWrapperDetachers[id];\n if (detacher) {\n detacher();\n }\n }\n }\n });\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(\"