{"version":3,"sources":["file-uploader.js","jquery.ui.widget.js","jquery.iframe-transport.js","jquery.fileupload.js","jquery.fileupload-process.js","jquery.fileupload-validate.js","croppie.js"],"names":["mountFileUploader","rootUploaderEl","$","find","each","initFileUpload","on","removeFile","renameCustomFile","removeCustomFile","replaceCustomFile","selectFile","editCrop","saveCrop","disableFileInputs","resetFileUploader","filePath","attr","baseFileUrl","FileAdded","val","index","element","this","fileupload","url","uploadFileUrl","dataType","maxFileSize","formData","__RequestVerificationToken","dropZone","parents","processalways","e","data","file","files","error","ShowErrorMessage","submit","TargetFolder","ReturnBase64","ContainerType","send","parentContainer","css","show","remove","prop","done","result","customFieldID","isParentCustomer","isCustomerImage","fieldPrefix","fileLimit","name","fullPath","type","size","trigger","progressall","progress","parseInt","loaded","total","always","target","updateFileName","croppieContainerElement","imgPreviewElement","croppieElement","editCropButton","saveCropButton","addClass","croppie","fileUploaderButton","parent","length","html","replace","deleteFile","prefix","customFieldFiles","inputName","includes","customFieldInput","siblings","append","removeClass","fileName","fileExtension","split","pop","ShowRenameModal","newName","ajax","renameFileUrl","success","status","ShowSavedPopup","newFileLink","customFieldFileBaseUrl","renameIcon","first","text","fileInput","fileInfo","JSON","parse","decodeURIComponent","encodeURIComponent","stringify","filesViewModel","TriggerReload","Date","ShowConfirmationModal","targetElement","parentElement","nextElementSibling","querySelector","uploader","browseOptions","title","multiple","extensions","oninsert","args","srcToFile","focusedFile","then","moxieManagerScriptUrl","appendTo","moxieIntervalID","setInterval","moxman","browse","clearInterval","initCroppie","uploaderContainer","resultFormat","endsWith","resultOptions","circle","format","backgroundColor","blob","File","finalWidth","finalRatio","width","Math","ceil","min","height","cropType","toLowerCase","viewport","mouseWheelZoom","boundary","enforceBoundary","contentType","lowerFileName","isImage","indexOf","showFileLink","tempImgUrl","is","floor","fileList","fileCount","click","multiFileUploaderButton","substring","jsonString","fileLink","prepend","fadeOut","fileAddedEvent","CustomEvent","detail","dispatchEvent","imageInput","encodedString","hiddenInput","newFileName","src","fetch","res","arrayBuffer","buf","fileUploader","errorMessage","factory","define","amd","exports","require","jQuery","orig","widget_uuid","widget_slice","Array","prototype","slice","cleanData","elems","events","elem","i","_data","triggerHandler","widget","base","fullName","existingConstructor","constructor","basePrototype","proxiedPrototype","namespace","Widget","expr","options","_createWidget","arguments","extend","version","_proto","_childConstructors","value","_super","_superApply","isFunction","apply","returnValue","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","child","childPrototype","push","bridge","key","input","call","inputIndex","inputLength","hasOwnProperty","undefined","isPlainObject","object","fn","isMethodCall","methodValue","instance","charAt","jquery","pushStack","get","concat","option","_init","defaultElement","disabled","create","uuid","eventNamespace","bindings","hoverable","focusable","_on","event","destroy","document","style","ownerDocument","window","defaultView","parentWindow","_getCreateOptions","_create","_trigger","_getCreateEventData","noop","_destroy","unbind","removeData","camelCase","removeAttr","parts","curOption","shift","_setOptions","_setOption","toggleClass","enable","disable","suppressDisabledCheck","handlers","delegateElement","add","handler","handlerProxy","hasClass","guid","match","eventName","selector","delegate","bind","_off","join","undelegate","not","_delay","delay","setTimeout","_hoverable","mouseenter","currentTarget","mouseleave","_focusable","focusin","focusout","callback","Event","originalEvent","isDefaultPrevented","hide","method","defaultEffect","effect","hasOptions","effectName","duration","isEmptyObject","complete","effects","easing","queue","next","counter","ajaxTransport","async","form","iframe","addParamChar","initialIframeSrc","_","completeCallback","formAcceptCharset","test","fileInputClones","paramNames","isArray","paramName","response","contents","firstChild","Error","field","clone","after","replaceWith","body","abort","ajaxSetup","converters","parseJSON","xmlDoc","isXMLDoc","parseXML","XMLDocument","xml","globalEval","getDragHandler","isDragOver","dataTransfer","inArray","types","delegatedEvent","preventDefault","dropEffect","support","RegExp","navigator","userAgent","xhrFileUpload","ProgressEvent","FileReader","xhrFormDataFileUpload","FormData","blobSlice","Blob","webkitSlice","mozSlice","pasteZone","replaceFileInput","singleFileUploads","limitMultiFileUploads","limitMultiFileUploadSize","limitMultiFileUploadSizeOverhead","sequentialUploads","limitConcurrentUploads","forceIframeTransport","redirect","redirectParamName","postMessage","multipart","maxChunkSize","uploadedBytes","recalculateProgress","progressInterval","bitrateInterval","autoUpload","messages","i18n","message","context","toString","serializeArray","process","processData","cache","timeout","_specialOptions","_blobSlice","_BitrateTimer","timestamp","now","getTime","bitrate","getBitrate","interval","timeDiff","_isXHRUpload","_getFormData","_getTotal","_initProgressObject","obj","_progress","_initResponseObject","_response","_onProgress","lengthComputable","_time","chunkSize","_bitrateTimer","_initProgressListener","that","xhr","ajaxSettings","upload","oe","_isInstanceOf","Object","_initXHRData","headers","contentRange","encodeURI","uploadName","_initIframeSettings","targetHost","location","host","_initDataSettings","_chunkedUpload","_getParamName","_initFormSettings","href","toUpperCase","_getAJAXSettings","_getDeferredState","deferred","state","isResolved","isRejected","_enhancePromise","promise","fail","_getXHRPromise","resolveOrReject","dfd","Deferred","resolveWith","rejectWith","_addConvenienceMethods","getPromise","resolveFunc","rejectFunc","_processQueue","pipe","errorThrown","jqXHR","_onSend","processing","_getUploadedBytes","range","getResponseHeader","upperBytesPos","testOnly","fs","ub","mcs","o","currentLoaded","textStatus","_beforeSend","_active","_onDone","_onFail","_onAlways","jqXHRorResult","jqXHRorError","aborted","slot","_sending","nextSlot","_slots","resolve","_sequence","_onAdd","paramNameSet","paramNameSlice","fileSet","filesLength","limit","limitSize","overhead","batchSize","j","originalFiles","newData","_replaceFileInput","inputClone","restoreFocus","activeElement","fileInputClone","reset","detach","focus","map","el","_handleFileTreeEntry","entry","path","dirReader","errorHandler","readEntries","results","entries","_handleFileTreeEntries","successHandler","isFile","_file","relativePath","isDirectory","createReader","when","_getDroppedFiles","items","webkitGetAsEntry","getAsEntry","item","getAsFile","makeArray","_getSingleFileInputFiles","fileSize","_getFileInputFiles","_onChange","_onPaste","clipboardData","_onDrop","_onDragOver","_onDragEnter","_onDragLeave","_initEventHandlers","dragover","drop","dragenter","dragleave","paste","change","_destroyEventHandlers","reinit","_initSpecialOptions","_getRegExp","str","modifiers","_isRegExpOption","_initDataAttributes","attributes","active","reject","originalAdd","blueimp","processQueue","$this","processActions","_processFile","originalData","chain","settings","func","action","_transformProcessQueue","_processing","opts","_processingQueue","acceptFileTypes","minFileSize","maxNumberOfFiles","getNumberOfFiles","validate","MutationObserver","mutations","forEach","mutation","addedNodes","addedNode","parentNode","id","observe","childList","subtree","addEventListener","children","root","nodeName","module","Croppie","self","Promise","a","b","c","TypeError","_state","_value","_deferreds","f","d","k","onFulfilled","onRejected","g","h","setImmediate","l","all","race","_setImmediateFn","params","bubbles","cancelable","evt","createEvent","initCustomEvent","HTMLCanvasElement","toBlob","defineProperty","quality","binStr","atob","toDataURL","len","arr","Uint8Array","charCodeAt","CSS_TRANS_ORG","CSS_TRANSFORM","CSS_USERSELECT","cssPrefixes","emptyStyles","createElement","EXIF_NORM","EXIF_FLIP","vendorPrefix","capProp","deepExtend","destination","source","property","dispatchChange","initEvent","fireEvent","styles","tmp","classList","className","setAttributes","attrs","setAttribute","num","v","naturalImageDimensions","img","ornt","w","naturalWidth","naturalHeight","orient","getExifOrientation","x","TRANSLATE_OPTS","translate3d","suffix","translate","Transform","y","scale","parseFloat","fromMatrix","fromString","vals","values","globals","TransformOrigin","exifdata","Orientation","drawCanvas","canvas","orientation","ctx","getContext","save","rotate","PI","drawImage","restore","overlay","bw","bh","customViewportClass","useCanvas","enableOrientation","_hasExif","elements","preview","isNaN","alt","appendChild","customClass","_initDraggable","enableZoom","_initializeZoom","enableResize","_initializeResize","enableExif","EXIF","direction","originalX","originalY","maxWidth","maxHeight","vr","hr","wrap","isDragging","mouseDown","ev","button","overlayRect","getBoundingClientRect","pageX","pageY","touches","mouseMove","mouseUp","deltaX","deltaY","newHeight","newWidth","_updateOverlay","_updateZoomLimits","_updateCenterPoint","_triggerUpdate","removeEventListener","resizeControls","_setZoomerVal","z","zoomer","fix","max","zoomerWrap","_onZoom","origin","viewportRect","transform","scroll","delta","targetZoom","ctrlKey","wheelDelta","_currentZoom","step","display","showZoomer","ui","vpRect","applyCss","transCss","boundaries","_getVirtualBoundaries","transBoundaries","oBoundaries","maxX","minX","maxY","minY","_debouncedOverlay","vpWidth","vpHeight","centerFromBoundaryX","clientWidth","centerFromBoundaryY","clientHeight","imgRect","curImgWidth","curImgHeight","halfWidth","halfHeight","originMinX","originMinY","vpData","pc","top","left","center","adj","cx","cy","tx","ty","newCss","originalDistance","assignTransformCoordinates","bottom","right","toggleGrabState","touch1","touch2","dist","sqrt","zoom","shiftKey","keyCode","enableKeyMovement","movement","parseKeyDown","keyMove","setZoom","boundRect","imgData","wait","immediate","later","callNow","clearTimeout","_isVisible","update","Prototype","offsetHeight","offsetWidth","_updatePropertiesFromImage","cssReset","transformReset","originReset","bound","_originalImageWidth","_originalImageHeight","points","_bindPoints","_centerImage","initial","initialZoom","defaultInitialZoom","minW","minH","minZoom","maxZoom","boundaryData","boundZoom","pointsWidth","vpOffset","originTop","originLeft","transformTop","transformLeft","imgDim","vpDim","boundDim","vpLeft","vpTop","_transferImageToCanvas","customOrientation","clearRect","_getCanvas","canvasWidth","outputWidth","canvasHeight","outputHeight","fillStyle","fillRect","sx","sy","sWidth","sHeight","dx","dy","dWidth","dHeight","abs","globalCompositeOperation","beginPath","arc","closePath","fill","_getHtmlResult","div","_getBase64Result","_getBlobResult","_replaceImage","replaceChild","_bind","cb","doExif","hasExif","Image","opacity","_resolve","removeAttribute","onload","getData","onerror","relative","natDim","rect","aspectRatio","x0","y0","x1","y1","p","decimalPoints","toFixed","_get","widthDiff","heightDiff","x2","y2","Infinity","Number","NEGATIVE_INFINITY","RESULT_DEFAULTS","RESULT_FORMATS","_result","resultType","ratio","_refresh","_rotate","deg","offset","removeChild","ot","singleInst","defaults","tagName","origImage","replacementDiv","bindOpts","orientationControls","enabled","leftClass","rightClass","refresh"],"mappings":"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","file":"fileupload-bundle.js","sourcesContent":["$(function () {\r\n $(\".file-uploader\").each(function () {\r\n mountFileUploader(this);\r\n });\r\n\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.addedNodes.length > 0) {\r\n mutation.addedNodes.forEach(addedNode => {\r\n let parentNode = addedNode.parentNode;\r\n while (parentNode) {\r\n if (parentNode.id && (parentNode.id.includes('editable-fields') || parentNode.id.includes('order-add-form') || parentNode.id.includes('attendee-add-form'))) {\r\n mountFileUploader(mutation.addedNodes[0].parentNode);\r\n break;\r\n }\r\n\r\n parentNode = parentNode.parentNode;\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n observer.observe(document.body, { childList: true, subtree: true });\r\n\r\n // For accessibility, \"enter\" keydown events should trigger the file uploader\r\n if ($('.fileinput-button') && $('.fileinput-button')[0]) {\r\n $('.fileinput-button')[0].addEventListener('keydown', function (e) {\r\n if (e.key.toLowerCase() === \"enter\") {\r\n $('.fileinput-button')[0].children[2].click();\r\n }\r\n });\r\n }\r\n});\r\n\r\nfunction mountFileUploader(rootUploaderEl) {\r\n $(rootUploaderEl).find(\"input[type=file]\").each(initFileUpload);\r\n $(rootUploaderEl).on(\"click\", \".remove-file\", removeFile);\r\n $(rootUploaderEl).on(\"click\", \".rename-custom-file\", renameCustomFile);\r\n $(rootUploaderEl).on(\"click\", \".remove-custom-file\", removeCustomFile);\r\n $(rootUploaderEl).on(\"click\", \".replace-custom-file\", replaceCustomFile);\r\n $(rootUploaderEl).on(\"click\", \".select-from-files\", selectFile);\r\n $(rootUploaderEl).on(\"click\", \".edit-crop\", editCrop);\r\n $(rootUploaderEl).on(\"click\", \".save-crop\", saveCrop);\r\n $(rootUploaderEl).find(\"input[type=file]\").each(disableFileInputs);\r\n}\r\n\r\nfunction resetFileUploader(rootUploaderEl, filePath) {\r\n if (rootUploaderEl.find('.file-uploader-img').attr('src') != baseFileUrl + filePath) {\r\n FileAdded(filePath, rootUploaderEl, filePath);\r\n rootUploaderEl.find('[name$=\"_Original\"]').val(filePath)\r\n }\r\n}\r\n\r\nfunction initFileUpload(index, element) {\r\n $(this).fileupload({\r\n url: uploadFileUrl,\r\n dataType: 'json',\r\n maxFileSize: 20000000,\r\n formData: {\r\n '__RequestVerificationToken': $(\"[name='__RequestVerificationToken']\").val()\r\n },\r\n dropZone: $(this).parents(\".file-uploader\"),\r\n processalways: function (e, data) {\r\n var index = data.index,\r\n file = data.files[index];\r\n if (file.error) {\r\n ShowErrorMessage($(this), file.error);\r\n }\r\n },\r\n submit: function (e, data) {\r\n if (!data.formData)\r\n data.formData = {};\r\n\r\n data.formData.TargetFolder = $(this).parents(\".file-uploader\").data(\"target-folder\");\r\n data.formData.__RequestVerificationToken = $(\"[name='__RequestVerificationToken']\").val();\r\n data.formData.ReturnBase64 = $(element).data(\"return-base64\");\r\n data.formData.ContainerType = $(element).data(\"container-type\");\r\n },\r\n send: function (e, data) {\r\n var parentContainer = $(this).parents(\".file-uploader\");\r\n parentContainer.find(\".progress-bar\").css('width', 0);\r\n parentContainer.find(\".progress\").show();\r\n parentContainer.find(\".error-message\").remove();\r\n $(\"[type='submit']\").prop(\"disabled\", true);\r\n },\r\n done: function (e, data) {\r\n if (data.result.error) {\r\n ShowErrorMessage($(this), data.result.error);\r\n return;\r\n }\r\n var file = data.result;\r\n var parentContainer = $(this).parents(\".file-uploader\");\r\n\r\n var customFieldID = $(element).data(\"custom-field-id\");\r\n var isParentCustomer = $(element).data(\"is-parent-customer\") == \"True\" || $(element).data(\"is-parent-customer\") == true;\r\n var isCustomerImage = $(element).data(\"is-customer-image\") == \"True\";\r\n var fieldPrefix = $(element).data(\"field-prefix\");\r\n var fileLimit = $(element).data(\"file-limit\");\r\n FileAdded(file.name, parentContainer, file.fullPath, file.type, file.size, customFieldID, isParentCustomer, isCustomerImage, fileLimit, fieldPrefix);\r\n $(this).trigger(\"file-upload-done\", [file]);\r\n },\r\n progressall: function (e, data) {\r\n var progress = parseInt(data.loaded / data.total * 100, 10);\r\n $(this).parents(\".file-uploader\").find(\".progress-bar\").css('width', progress + '%');\r\n },\r\n always: function (e, data) {\r\n $(\"[type='submit']\").prop(\"disabled\", false);\r\n }\r\n });\r\n}\r\n\r\nfunction removeFile(e) {\r\n var parentContainer = $(e.target).parents(\".file-uploader\");\r\n var hiddenFileNameInput = parentContainer.find(\"[type=hidden]:first\");\r\n updateFileName(hiddenFileNameInput, \"\");\r\n\r\n var croppieContainerElement = parentContainer.find(\".file-uploader-img-container\");\r\n var imgPreviewElement = parentContainer.find(\"img\");\r\n var croppieElement = parentContainer.find(\".file-uploader-croppie\");\r\n\r\n var editCropButton = parentContainer.find(\".edit-crop\");\r\n var saveCropButton = parentContainer.find(\".save-crop\");\r\n\r\n croppieContainerElement.addClass(\"hidden\");\r\n saveCropButton.addClass(\"hidden\");\r\n editCropButton.addClass(\"hidden\");\r\n imgPreviewElement.addClass(\"hidden\");\r\n croppieElement.croppie('destroy');\r\n\r\n //if (parentContainer.data(\"crop-type\")) {\r\n // var imgCroppie = parentContainer.find(\".file-uploader-croppie\");\r\n // var imageContainer = parentContainer.find(\".file-uploader-img-container\");\r\n // //imgCroppie.croppie('bind', {\r\n // // url: ''\r\n // //});\r\n // imageContainer.addClass(\"hidden\");\r\n // parentContainer.find(\".save-crop\").addClass(\"hidden\");\r\n //}\r\n //else {\r\n parentContainer.find(\".file-link\").remove();\r\n //}\r\n\r\n $(e.target).addClass(\"hidden\");\r\n\r\n var fileUploaderButton = $(e.target).parent().find(\"a.fileinput-button\");\r\n if (fileUploaderButton.length > 0) {\r\n fileUploaderButton.find(\"span\").html(fileUploaderButton.find(\"span\").html().replace(\"Replace\", \"Upload\"));\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction deleteFile(target) {\r\n var parentContainer = $(target).parents(\".file-list\");\r\n var customFieldID = parentContainer.parents(\".file-uploader\").find(\"input[type='file']\").data(\"custom-field-id\");\r\n var prefix = parentContainer.parents(\".file-uploader\").find(\"input[type='file']\").data(\"field-prefix\");\r\n var isParentCustomer = parentContainer.parents(\".file-uploader\").find(\"input[type='file']\").data(\"is-parent-customer\") == \"True\";\r\n $(target).parent().remove();\r\n var customFieldFiles = parentContainer.find(\".custom-field-file\");\r\n\r\n var hiddenFileNameInput = parentContainer.parents(\".file-uploader\").find(\"[type=hidden]:first\");\r\n updateFileName(hiddenFileNameInput, \"\");\r\n\r\n // if no files are left for this custom field file, add the hidden input so the server knows to delete the file\r\n if (customFieldFiles.length == 0) {\r\n\r\n let inputName = \"\";\r\n if (prefix && prefix.includes(\"Order\")) {\r\n inputName = `${prefix}CustomField_${customFieldID}`;\r\n customFieldInput = parentContainer.parents(\".file-uploader\").siblings(`input[name=\"${inputName}\"]`);\r\n customFieldInput.attr(\"value\", \"\");\r\n } else {\r\n inputName = `${isParentCustomer ? \"Parent\" : \"\"}CustomFieldFile_${customFieldID}`;\r\n }\r\n\r\n parentContainer.append(`<input id=\"empty-custom-field-file\" name=\"${inputName}\" class=\"hidden\" type=\"text\" value=\"\"/>`);\r\n\r\n // update button labels\r\n var fileUploaderButton = parentContainer.parents(\".file-uploader\").find(\"span.file-input-label-single\");\r\n fileUploaderButton.html(\"Upload File\");\r\n fileUploaderButton = parentContainer.parents(\".file-uploader\").find(\"span.file-input-label-multiple\");\r\n fileUploaderButton.html(\"Upload File(s)\");\r\n }\r\n\r\n var customFieldFiles = parentContainer.find(\".custom-field-file\");\r\n var fileCount = customFieldFiles.length;\r\n var fileLimit = parentContainer.parents(\".file-uploader\").find(\"input[type='file']\").data(\"file-limit\");\r\n\r\n if (fileCount < fileLimit) {\r\n parentContainer.parents(\".file-uploader\").find(\".fileinput-button\").removeClass(\"disabled\");\r\n parentContainer.parents(\".file-uploader\").find(\".fileinput-button input[type='file']\").prop(\"disabled\", false);\r\n }\r\n}\r\n\r\nfunction renameCustomFile(e) {\r\n var fileName = $(e.target).data(\"file-name\");\r\n var fullPath = $(e.target).data(\"full-path\");\r\n var fileExtension = fileName.split('.').pop();\r\n ShowRenameModal(fileName, function (newName) {\r\n $.ajax({\r\n url: renameFileUrl,\r\n type: 'POST',\r\n data: {\r\n \"fullPath\": fullPath,\r\n \"newName\": newName\r\n },\r\n success: function (data) {\r\n if (data && data.status == \"OK\") {\r\n newName = `${newName}.${fileExtension}`;\r\n ShowSavedPopup(`${fileName} renamed to ${newName}`, '');\r\n var newFileLink = `${customFieldFileBaseUrl}/${fullPath.split('/').pop()}?fileName=${newName}`;\r\n\r\n // e.target is the rename-custom-file icon\r\n var renameIcon = $(e.target).first();\r\n renameIcon.siblings(\".file-name\").text(newName);\r\n renameIcon.attr(\"data-file-name\", newName);\r\n renameIcon.siblings(\"a\").attr(\"href\", newFileLink);\r\n renameIcon.siblings(\".remove-custom-file\").attr(\"data-file-name\", newName);\r\n renameIcon.siblings(\".replace-custom-file\").attr(\"data-file-name\", newName).attr(\"href\", newFileLink);\r\n var fileInput = renameIcon.siblings(\"input\");\r\n var fileInfo = JSON.parse(decodeURIComponent(fileInput.val()));\r\n fileInfo.fileName = newName;\r\n fileInput.attr(\"value\", encodeURIComponent(JSON.stringify(fileInfo)));\r\n\r\n if (filesViewModel) {\r\n filesViewModel.TriggerReload(new Date());\r\n }\r\n }\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction removeCustomFile(e) {\r\n var fileName = $(e.target).data(\"file-name\");\r\n ShowConfirmationModal(`Are you sure you want to delete ${fileName}?`, function () {\r\n deleteFile(e.target);\r\n });\r\n}\r\n\r\nfunction replaceCustomFile(e) {\r\n var fileName = $(e.target).data(\"file-name\");\r\n ShowConfirmationModal(`Are you sure you want to replace ${fileName}?`, function () {\r\n deleteFile(e.target);\r\n }, null, null, null, null, null, function () {\r\n const targetElement = e.target.parentElement.nextElementSibling;\r\n if (targetElement) {\r\n const customFile = targetElement.querySelector('.remove-custom-file');\r\n deleteFile(customFile);\r\n }\r\n });\r\n}\r\n\r\nfunction selectFile(e) {\r\n var uploader = $(e.target).parents(\".file-uploader\").find(\"input[type=file]\");\r\n var extensions = $(e.target).data(\"extensions\");\r\n var browseOptions = {\r\n title: 'Novi Files',\r\n multiple: false,\r\n extensions: extensions,\r\n oninsert: function (args) {\r\n var pathToFile = args.focusedFile.url;\r\n srcToFile(pathToFile, args.focusedFile.name).then(function (file) {\r\n uploader.fileupload('add', { files: [file] });\r\n });\r\n }\r\n };\r\n if (typeof (moxman) == \"undefined\") {\r\n $('<script>').attr('type', 'text/javascript').attr('src', moxieManagerScriptUrl).appendTo('body');\r\n var moxieIntervalID = setInterval(function () {\r\n if (typeof (moxman) != \"undefined\") {\r\n moxman.browse(browseOptions);\r\n clearInterval(moxieIntervalID);\r\n }\r\n }, 100);\r\n } else {\r\n moxman.browse(browseOptions);\r\n }\r\n return false;\r\n}\r\n\r\nfunction editCrop(e) {\r\n initCroppie($(e.target));\r\n}\r\n\r\nfunction saveCrop(e) {\r\n var uploaderContainer = $(e.target).parents(\".file-uploader\");\r\n var uploader = uploaderContainer.find(\"input[type=file]\");\r\n var croppieContainerElement = uploaderContainer.find(\".file-uploader-img-container\");\r\n var croppieElement = uploaderContainer.find(\".file-uploader-croppie\");\r\n var imgPreviewElement = uploaderContainer.find(\"img\");\r\n\r\n uploaderContainer.data(\"saving-crop\", true);\r\n\r\n var fileName = croppieElement.data(\"file-name\");\r\n\r\n //Our only two result formats are JPEG & PNG - If the file name isn't one of those, we have to adjust file name to be PNG\r\n var resultFormat = fileName.endsWith(\".jpg\") || fileName.endsWith(\".jpeg\") ? \"jpeg\" : \"png\";\r\n if (!fileName.endsWith(\".png\") && resultFormat == \"png\") {\r\n fileName = fileName.replace(/\\.[^/.]+$/, \"\") + \".png\";\r\n }\r\n\r\n var resultOptions = {\r\n type: 'blob',\r\n circle: false,\r\n size: 'original',\r\n format: resultFormat,\r\n };\r\n\r\n //JPEG has no transparency, so we have to fill the background with something\r\n if (resultFormat == \"jpeg\") {\r\n resultOptions.backgroundColor = '#FFFFFF';\r\n }\r\n\r\n croppieElement.croppie('result', resultOptions).then(function (blob) {\r\n uploader.fileupload('add', {\r\n files: [new File([blob], fileName, {\r\n type: blob.type,\r\n })]\r\n });\r\n });\r\n}\r\n\r\nfunction initCroppie(element) {\r\n var uploaderContainer = $(element).parents(\".file-uploader\");\r\n var croppieContainerElement = uploaderContainer.find(\".file-uploader-img-container\");\r\n var croppieElement = uploaderContainer.find(\".file-uploader-croppie\");\r\n var imgPreviewElement = uploaderContainer.find(\"img\");\r\n\r\n var editCropButton = uploaderContainer.find(\".edit-crop\");\r\n var saveCropButton = uploaderContainer.find(\".save-crop\");\r\n\r\n var finalWidth = $(uploaderContainer).data(\"width\");\r\n var finalHeight = $(uploaderContainer).data(\"height\");\r\n var finalRatio = finalHeight / finalWidth;\r\n\r\n var width = Math.ceil(Math.min(uploaderContainer.width(), finalWidth));\r\n var height = Math.ceil(width * finalRatio);\r\n\r\n editCropButton.addClass(\"hidden\");\r\n imgPreviewElement.addClass(\"hidden\");\r\n croppieContainerElement.removeClass(\"hidden\");\r\n saveCropButton.removeClass(\"hidden\");\r\n\r\n \r\n var cropType = $(uploaderContainer).data(\"crop-type\").toLowerCase();\r\n \r\n\r\n var croppieInstance = $(croppieElement).croppie({\r\n viewport: {\r\n width: width - 2,\r\n height: height - 2,\r\n type: cropType\r\n },\r\n mouseWheelZoom: false,\r\n boundary: { width: width, height: height },\r\n enforceBoundary: false\r\n });\r\n $(uploaderContainer).find(\".cr-slider\").addClass(\"ignore\");\r\n\r\n croppieElement.data(\"file-name\", imgPreviewElement.attr(\"alt\"));\r\n croppieElement.croppie('bind', { url: imgPreviewElement.attr(\"src\") });\r\n}\r\n\r\nfunction FileAdded(fileName, parentContainer, fullPath, contentType, size, customFieldID = 0, isParentCustomer = false, isCustomerImage = false, fileLimit = 1, prefix = \"\") {\r\n $(\"[type='submit']\").prop(\"disabled\", true);\r\n var lowerFileName = fileName.toLowerCase();\r\n var isImage = lowerFileName.indexOf(\".jpg\") > 0 || lowerFileName.indexOf(\".jpeg\") > 0 || lowerFileName.indexOf(\".gif\") > 0\r\n || lowerFileName.indexOf(\".png\") > 0 || lowerFileName.indexOf(\".bmp\") > 0 || lowerFileName.indexOf(\".ico\") > 0 || lowerFileName.indexOf(\".svg\") > 0;\r\n\r\n let showFileLink = true;\r\n\r\n // This is a override to make sure the link does not show. For example the signature. \r\n if (parentContainer.data(\"hide-link\")) {\r\n showFileLink = false;\r\n }\r\n\r\n if (isImage) {\r\n var tempImgUrl = baseFileUrl + fullPath;\r\n var croppieElement = parentContainer.find(\".file-uploader-croppie\");\r\n //If we are using croppie in this file uploader, we need to run bind to correctly attach to the new image\r\n\r\n if (croppieElement.is(\":visible\") == true && parentContainer.data(\"saving-crop\") != true) {\r\n croppieElement.data(\"file-name\", fileName);\r\n\r\n croppieElement.croppie('bind', {\r\n url: tempImgUrl\r\n });\r\n }\r\n else {\r\n var croppieContainerElement = parentContainer.find(\".file-uploader-img-container\");\r\n var imgPreviewElement = parentContainer.find(\"img\");\r\n\r\n var editCropButton = parentContainer.find(\".edit-crop\");\r\n var saveCropButton = parentContainer.find(\".save-crop\");\r\n \r\n var imgPreview = parentContainer.find(\"img\");\r\n var imgWidth = parentContainer.data(\"width\");\r\n var imgHeight = parentContainer.data(\"height\");\r\n \r\n imgPreviewElement.attr(\"alt\", fileName).attr(\"src\", tempImgUrl + \"?\" + \"t=\" + Math.floor(new Date() / 1000));\r\n\r\n if (parentContainer.data(\"saving-crop\") == true) {\r\n\r\n croppieContainerElement.addClass(\"hidden\");\r\n saveCropButton.addClass(\"hidden\");\r\n editCropButton.removeClass(\"hidden\");\r\n imgPreviewElement.removeClass(\"hidden\");\r\n parentContainer.data(\"saving-crop\", false);\r\n croppieElement.croppie('destroy');\r\n }\r\n else if (parentContainer.data(\"crop-type\")) {\r\n initCroppie(editCropButton);\r\n }\r\n else {\r\n imgPreviewElement.removeClass(\"hidden\");\r\n }\r\n\r\n // We need to check to make sure that the Croppie-Container and Preview-element are present. If not, then we will show the file link.\r\n if (croppieContainerElement.length > 0 || imgPreviewElement.length > 0) {\r\n showFileLink = false;\r\n }\r\n }\r\n }\r\n\r\n if (showFileLink) {\r\n if (customFieldID > 0) {\r\n $(\"#empty-custom-field-file\").remove();\r\n\r\n var customFieldFiles = parentContainer.find(\".custom-field-file\");\r\n var fileList = parentContainer.find(\".file-list\");\r\n var fileCount = customFieldFiles.length + 1;\r\n\r\n // if file upload input does not have multiple attribute, we need to delete the existing custom field file input\r\n if (!parentContainer.find(\"input[type=file]\").attr(\"multiple\")) {\r\n parentContainer.find(\".replace-custom-file\").click();\r\n }\r\n\r\n var multiFileUploaderButton = parentContainer.find(\"span.file-input-label-multiple\");\r\n\r\n if (fileCount > fileLimit) {\r\n parentContainer.find(\".fileinput-button\").addClass(\"disabled\");\r\n parentContainer.find(\".fileinput-button input[type='file']\").prop(\"disabled\", true);\r\n } else {\r\n multiFileUploaderButton.html(\"Upload Additional File(s)\");\r\n\r\n fileList.append(`<span class='custom-field-file' id='${fileCount}'><span class='file-name'>${fileName}</span> <a href='' target='_blank'><i class='fa-solid fa-cloud-arrow-down'></i></a> <i class=\"fa-solid fa-trash-can remove-custom-file\" data-file-name='${fileName}'></i><a class=\"replace-custom-file\" data-file-name='${fileName}' data-custom-field-id='${customFieldID}'></a></span>`);\r\n\r\n var newFileLink = parentContainer.find(`#${fileCount} a`);\r\n newFileLink.attr(\"href\", customFieldFileBaseUrl + \"/temp?fileName=\" + fullPath.substring(fullPath.indexOf(\"/temp\") + 6));\r\n\r\n var fileInfo = {\r\n fileName: fileName,\r\n contentType: contentType,\r\n fullPath: fullPath,\r\n size: size\r\n };\r\n\r\n var jsonString = JSON.stringify(fileInfo);\r\n\r\n let inputName = \"\";\r\n if (prefix.includes(\"Order\") || prefix.includes(\"Cart\")) { // ecommerce\r\n inputName = `${prefix}CustomField_${customFieldID}`;\r\n } else {\r\n inputName = `${isParentCustomer ? \"Parent\" : \"\"}CustomFieldFile_${customFieldID}`;\r\n }\r\n\r\n var customFieldInput = parentContainer.find(`input[name=\"${inputName}\"]`);\r\n\r\n if (customFieldInput.length <= fileCount) {\r\n newFileLink.parent().append(`<input name=\"${inputName}\" value=\"${encodeURIComponent(jsonString)}\" class=\"hidden\"/>`);\r\n } else {\r\n customFieldInput.attr(\"value\", `${encodeURIComponent(jsonString)}`);\r\n }\r\n\r\n var fileUploaderButton = parentContainer.find(\"span.file-input-label-single\");\r\n fileUploaderButton.html(\"Replace File\");\r\n }\r\n } else {\r\n var fileLink = parentContainer.find(\".file-link\");\r\n if (fileLink.length == 0) {\r\n parentContainer.prepend('<a class=\"file-link\" target=\"_blank\" />');\r\n fileLink = parentContainer.find(\".file-link\");\r\n }\r\n\r\n fileLink.attr(\"href\", baseFileUrl + fullPath).html(fileName);\r\n }\r\n }\r\n\r\n parentContainer.find(\".remove-file\").removeClass(\"hidden\");\r\n\r\n var hiddenFileNameInput = parentContainer.find(\"[type=hidden]:first\");\r\n updateFileName(hiddenFileNameInput, fullPath);\r\n parentContainer.find(\".progress\").fadeOut(5000);\r\n\r\n const fileAddedEvent = new CustomEvent('fileAdded', { detail: { fileName: fileName } });\r\n parentContainer[0].dispatchEvent(fileAddedEvent);\r\n\r\n if (isCustomerImage) {\r\n var fileInfo = {\r\n fileName: fileName,\r\n contentType: contentType,\r\n fullPath: fullPath,\r\n size: size\r\n };\r\n\r\n var jsonString = JSON.stringify(fileInfo);\r\n var imageInput = parentContainer.find(\"[type=hidden]:first\");\r\n var encodedString = encodeURIComponent(jsonString);\r\n imageInput.attr(\"value\", encodedString);\r\n }\r\n\r\n $(\"[type='submit']\").prop(\"disabled\", false);\r\n}\r\n\r\nfunction updateFileName(hiddenInput, newFileName) {\r\n hiddenInput.val(newFileName);\r\n if (hiddenInput[0]) {\r\n hiddenInput[0].dispatchEvent(new CustomEvent('updateFileName', { detail: newFileName }));\r\n }\r\n}\r\n\r\nfunction srcToFile(src, fileName) {\r\n return (fetch(src)\r\n .then(function (res) { return res.arrayBuffer(); })\r\n .then(function (buf) { return new File([buf], fileName); })\r\n );\r\n}\r\n\r\nfunction ShowErrorMessage(fileUploader, error) {\r\n var parentContainer = fileUploader.parents(\".file-uploader\");\r\n var errorMessage = parentContainer.find(\".error-message\");\r\n\r\n if (errorMessage.length == 0) {\r\n parentContainer.append('<div class=\"alert alert-danger text-danger error-message\" style=\"margin-top:5px;\"> </div>');\r\n errorMessage = parentContainer.find(\".error-message\");\r\n }\r\n\r\n errorMessage.html(\"<span class='novicon novicon-warning' style='margin-right:5px;'></span> \" + error);\r\n}\r\n\r\nfunction disableFileInputs(index, element) {\r\n if ($(element).data(\"file-limit\")) {\r\n var parentContainer = $(element).parents(\".file-uploader\").find(\".file-list\");\r\n var customFieldFiles = parentContainer.find(\".custom-field-file\");\r\n var fileCount = customFieldFiles.length;\r\n var fileLimit = parentContainer.parents(\".file-uploader\").find(\"input[type='file']\").data(\"file-limit\");\r\n if (fileCount >= fileLimit) {\r\n $(element).parents(\".file-uploader\").find(\".fileinput-button\").addClass(\"disabled\");\r\n $(element).prop(\"disabled\", true);\r\n }\r\n }\r\n}","/*! jQuery UI - v1.11.4+CommonJS - 2015-08-28\r\n* http://jqueryui.com\r\n* Includes: widget.js\r\n* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */\r\n\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\r\n\t\t// AMD. Register as an anonymous module.\r\n\t\tdefine([ \"jquery\" ], factory );\r\n\r\n\t} else if ( typeof exports === \"object\" ) {\r\n\r\n\t\t// Node/CommonJS\r\n\t\tfactory( require( \"jquery\" ) );\r\n\r\n\t} else {\r\n\r\n\t\t// Browser globals\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n/*!\r\n * jQuery UI Widget 1.11.4\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n *\r\n * http://api.jqueryui.com/jQuery.widget/\r\n */\r\n\r\n\r\nvar widget_uuid = 0,\r\n\twidget_slice = Array.prototype.slice;\r\n\r\n$.cleanData = (function( orig ) {\r\n\treturn function( elems ) {\r\n\t\tvar events, elem, i;\r\n\t\tfor ( i = 0; (elem = elems[i]) != null; i++ ) {\r\n\t\t\ttry {\r\n\r\n\t\t\t\t// Only trigger remove when necessary to save time\r\n\t\t\t\tevents = $._data( elem, \"events\" );\r\n\t\t\t\tif ( events && events.remove ) {\r\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\r\n\t\t\t\t}\r\n\r\n\t\t\t// http://bugs.jquery.com/ticket/8235\r\n\t\t\t} catch ( e ) {}\r\n\t\t}\r\n\t\torig( elems );\r\n\t};\r\n})( $.cleanData );\r\n\r\n$.widget = function( name, base, prototype ) {\r\n\tvar fullName, existingConstructor, constructor, basePrototype,\r\n\t\t// proxiedPrototype allows the provided prototype to remain unmodified\r\n\t\t// so that it can be used as a mixin for multiple widgets (#8876)\r\n\t\tproxiedPrototype = {},\r\n\t\tnamespace = name.split( \".\" )[ 0 ];\r\n\r\n\tname = name.split( \".\" )[ 1 ];\r\n\tfullName = namespace + \"-\" + name;\r\n\r\n\tif ( !prototype ) {\r\n\t\tprototype = base;\r\n\t\tbase = $.Widget;\r\n\t}\r\n\r\n\t// create selector for plugin\r\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\r\n\t\treturn !!$.data( elem, fullName );\r\n\t};\r\n\r\n\t$[ namespace ] = $[ namespace ] || {};\r\n\texistingConstructor = $[ namespace ][ name ];\r\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\r\n\t\t// allow instantiation without \"new\" keyword\r\n\t\tif ( !this._createWidget ) {\r\n\t\t\treturn new constructor( options, element );\r\n\t\t}\r\n\r\n\t\t// allow instantiation without initializing for simple inheritance\r\n\t\t// must use \"new\" keyword (the code above always passes args)\r\n\t\tif ( arguments.length ) {\r\n\t\t\tthis._createWidget( options, element );\r\n\t\t}\r\n\t};\r\n\t// extend with the existing constructor to carry over any static properties\r\n\t$.extend( constructor, existingConstructor, {\r\n\t\tversion: prototype.version,\r\n\t\t// copy the object used to create the prototype in case we need to\r\n\t\t// redefine the widget later\r\n\t\t_proto: $.extend( {}, prototype ),\r\n\t\t// track widgets that inherit from this widget in case this widget is\r\n\t\t// redefined after a widget inherits from it\r\n\t\t_childConstructors: []\r\n\t});\r\n\r\n\tbasePrototype = new base();\r\n\t// we need to make the options hash a property directly on the new instance\r\n\t// otherwise we'll modify the options hash on the prototype that we're\r\n\t// inheriting from\r\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\r\n\t$.each( prototype, function( prop, value ) {\r\n\t\tif ( !$.isFunction( value ) ) {\r\n\t\t\tproxiedPrototype[ prop ] = value;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tproxiedPrototype[ prop ] = (function() {\r\n\t\t\tvar _super = function() {\r\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\r\n\t\t\t\t},\r\n\t\t\t\t_superApply = function( args ) {\r\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, args );\r\n\t\t\t\t};\r\n\t\t\treturn function() {\r\n\t\t\t\tvar __super = this._super,\r\n\t\t\t\t\t__superApply = this._superApply,\r\n\t\t\t\t\treturnValue;\r\n\r\n\t\t\t\tthis._super = _super;\r\n\t\t\t\tthis._superApply = _superApply;\r\n\r\n\t\t\t\treturnValue = value.apply( this, arguments );\r\n\r\n\t\t\t\tthis._super = __super;\r\n\t\t\t\tthis._superApply = __superApply;\r\n\r\n\t\t\t\treturn returnValue;\r\n\t\t\t};\r\n\t\t})();\r\n\t});\r\n\tconstructor.prototype = $.widget.extend( basePrototype, {\r\n\t\t// TODO: remove support for widgetEventPrefix\r\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\r\n\t\t// don't prefix for widgets that aren't DOM-based\r\n\t\twidgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name\r\n\t}, proxiedPrototype, {\r\n\t\tconstructor: constructor,\r\n\t\tnamespace: namespace,\r\n\t\twidgetName: name,\r\n\t\twidgetFullName: fullName\r\n\t});\r\n\r\n\t// If this widget is being redefined then we need to find all widgets that\r\n\t// are inheriting from it and redefine all of them so that they inherit from\r\n\t// the new version of this widget. We're essentially trying to replace one\r\n\t// level in the prototype chain.\r\n\tif ( existingConstructor ) {\r\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\r\n\t\t\tvar childPrototype = child.prototype;\r\n\r\n\t\t\t// redefine the child widget using the same prototype that was\r\n\t\t\t// originally used, but inherit from the new version of the base\r\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto );\r\n\t\t});\r\n\t\t// remove the list of existing child constructors from the old constructor\r\n\t\t// so the old child constructors can be garbage collected\r\n\t\tdelete existingConstructor._childConstructors;\r\n\t} else {\r\n\t\tbase._childConstructors.push( constructor );\r\n\t}\r\n\r\n\t$.widget.bridge( name, constructor );\r\n\r\n\treturn constructor;\r\n};\r\n\r\n$.widget.extend = function( target ) {\r\n\tvar input = widget_slice.call( arguments, 1 ),\r\n\t\tinputIndex = 0,\r\n\t\tinputLength = input.length,\r\n\t\tkey,\r\n\t\tvalue;\r\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\r\n\t\tfor ( key in input[ inputIndex ] ) {\r\n\t\t\tvalue = input[ inputIndex ][ key ];\r\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\r\n\t\t\t\t// Clone objects\r\n\t\t\t\tif ( $.isPlainObject( value ) ) {\r\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\r\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\r\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\r\n\t\t\t\t\t\t$.widget.extend( {}, value );\r\n\t\t\t\t// Copy everything else by reference\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttarget[ key ] = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn target;\r\n};\r\n\r\n$.widget.bridge = function( name, object ) {\r\n\tvar fullName = object.prototype.widgetFullName || name;\r\n\t$.fn[ name ] = function( options ) {\r\n\t\tvar isMethodCall = typeof options === \"string\",\r\n\t\t\targs = widget_slice.call( arguments, 1 ),\r\n\t\t\treturnValue = this;\r\n\r\n\t\tif ( isMethodCall ) {\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvar methodValue,\r\n\t\t\t\t\tinstance = $.data( this, fullName );\r\n\t\t\t\tif ( options === \"instance\" ) {\r\n\t\t\t\t\treturnValue = instance;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif ( !instance ) {\r\n\t\t\t\t\treturn $.error( \"cannot call methods on \" + name + \" prior to initialization; \" +\r\n\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\r\n\t\t\t\t}\r\n\t\t\t\tif ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === \"_\" ) {\r\n\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name + \" widget instance\" );\r\n\t\t\t\t}\r\n\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\r\n\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\r\n\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\r\n\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\r\n\t\t\t\t\t\tmethodValue;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\r\n\t\t\t// Allow multiple hashes to be passed on init\r\n\t\t\tif ( args.length ) {\r\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat(args) );\r\n\t\t\t}\r\n\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvar instance = $.data( this, fullName );\r\n\t\t\t\tif ( instance ) {\r\n\t\t\t\t\tinstance.option( options || {} );\r\n\t\t\t\t\tif ( instance._init ) {\r\n\t\t\t\t\t\tinstance._init();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn returnValue;\r\n\t};\r\n};\r\n\r\n$.Widget = function( /* options, element */ ) {};\r\n$.Widget._childConstructors = [];\r\n\r\n$.Widget.prototype = {\r\n\twidgetName: \"widget\",\r\n\twidgetEventPrefix: \"\",\r\n\tdefaultElement: \"<div>\",\r\n\toptions: {\r\n\t\tdisabled: false,\r\n\r\n\t\t// callbacks\r\n\t\tcreate: null\r\n\t},\r\n\t_createWidget: function( options, element ) {\r\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\r\n\t\tthis.element = $( element );\r\n\t\tthis.uuid = widget_uuid++;\r\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\r\n\r\n\t\tthis.bindings = $();\r\n\t\tthis.hoverable = $();\r\n\t\tthis.focusable = $();\r\n\r\n\t\tif ( element !== this ) {\r\n\t\t\t$.data( element, this.widgetFullName, this );\r\n\t\t\tthis._on( true, this.element, {\r\n\t\t\t\tremove: function( event ) {\r\n\t\t\t\t\tif ( event.target === element ) {\r\n\t\t\t\t\t\tthis.destroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.document = $( element.style ?\r\n\t\t\t\t// element within the document\r\n\t\t\t\telement.ownerDocument :\r\n\t\t\t\t// element is window or document\r\n\t\t\t\telement.document || element );\r\n\t\t\tthis.window = $( this.document[0].defaultView || this.document[0].parentWindow );\r\n\t\t}\r\n\r\n\t\tthis.options = $.widget.extend( {},\r\n\t\t\tthis.options,\r\n\t\t\tthis._getCreateOptions(),\r\n\t\t\toptions );\r\n\r\n\t\tthis._create();\r\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\r\n\t\tthis._init();\r\n\t},\r\n\t_getCreateOptions: $.noop,\r\n\t_getCreateEventData: $.noop,\r\n\t_create: $.noop,\r\n\t_init: $.noop,\r\n\r\n\tdestroy: function() {\r\n\t\tthis._destroy();\r\n\t\t// we can probably remove the unbind calls in 2.0\r\n\t\t// all event bindings should go through this._on()\r\n\t\tthis.element\r\n\t\t\t.unbind( this.eventNamespace )\r\n\t\t\t.removeData( this.widgetFullName )\r\n\t\t\t// support: jquery <1.6.3\r\n\t\t\t// http://bugs.jquery.com/ticket/9413\r\n\t\t\t.removeData( $.camelCase( this.widgetFullName ) );\r\n\t\tthis.widget()\r\n\t\t\t.unbind( this.eventNamespace )\r\n\t\t\t.removeAttr( \"aria-disabled\" )\r\n\t\t\t.removeClass(\r\n\t\t\t\tthis.widgetFullName + \"-disabled \" +\r\n\t\t\t\t\"ui-state-disabled\" );\r\n\r\n\t\t// clean up events and states\r\n\t\tthis.bindings.unbind( this.eventNamespace );\r\n\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\r\n\t\tthis.focusable.removeClass( \"ui-state-focus\" );\r\n\t},\r\n\t_destroy: $.noop,\r\n\r\n\twidget: function() {\r\n\t\treturn this.element;\r\n\t},\r\n\r\n\toption: function( key, value ) {\r\n\t\tvar options = key,\r\n\t\t\tparts,\r\n\t\t\tcurOption,\r\n\t\t\ti;\r\n\r\n\t\tif ( arguments.length === 0 ) {\r\n\t\t\t// don't return a reference to the internal hash\r\n\t\t\treturn $.widget.extend( {}, this.options );\r\n\t\t}\r\n\r\n\t\tif ( typeof key === \"string\" ) {\r\n\t\t\t// handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\r\n\t\t\toptions = {};\r\n\t\t\tparts = key.split( \".\" );\r\n\t\t\tkey = parts.shift();\r\n\t\t\tif ( parts.length ) {\r\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\r\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\r\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\r\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\r\n\t\t\t\t}\r\n\t\t\t\tkey = parts.pop();\r\n\t\t\t\tif ( arguments.length === 1 ) {\r\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\r\n\t\t\t\t}\r\n\t\t\t\tcurOption[ key ] = value;\r\n\t\t\t} else {\r\n\t\t\t\tif ( arguments.length === 1 ) {\r\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\r\n\t\t\t\t}\r\n\t\t\t\toptions[ key ] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._setOptions( options );\r\n\r\n\t\treturn this;\r\n\t},\r\n\t_setOptions: function( options ) {\r\n\t\tvar key;\r\n\r\n\t\tfor ( key in options ) {\r\n\t\t\tthis._setOption( key, options[ key ] );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\t_setOption: function( key, value ) {\r\n\t\tthis.options[ key ] = value;\r\n\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\tthis.widget()\r\n\t\t\t\t.toggleClass( this.widgetFullName + \"-disabled\", !!value );\r\n\r\n\t\t\t// If the widget is becoming disabled, then nothing is interactive\r\n\t\t\tif ( value ) {\r\n\t\t\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\r\n\t\t\t\tthis.focusable.removeClass( \"ui-state-focus\" );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function() {\r\n\t\treturn this._setOptions({ disabled: false });\r\n\t},\r\n\tdisable: function() {\r\n\t\treturn this._setOptions({ disabled: true });\r\n\t},\r\n\r\n\t_on: function( suppressDisabledCheck, element, handlers ) {\r\n\t\tvar delegateElement,\r\n\t\t\tinstance = this;\r\n\r\n\t\t// no suppressDisabledCheck flag, shuffle arguments\r\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\r\n\t\t\thandlers = element;\r\n\t\t\telement = suppressDisabledCheck;\r\n\t\t\tsuppressDisabledCheck = false;\r\n\t\t}\r\n\r\n\t\t// no element argument, shuffle and use this.element\r\n\t\tif ( !handlers ) {\r\n\t\t\thandlers = element;\r\n\t\t\telement = this.element;\r\n\t\t\tdelegateElement = this.widget();\r\n\t\t} else {\r\n\t\t\telement = delegateElement = $( element );\r\n\t\t\tthis.bindings = this.bindings.add( element );\r\n\t\t}\r\n\r\n\t\t$.each( handlers, function( event, handler ) {\r\n\t\t\tfunction handlerProxy() {\r\n\t\t\t\t// allow widgets to customize the disabled handling\r\n\t\t\t\t// - disabled as an array instead of boolean\r\n\t\t\t\t// - disabled class as method for disabling individual parts\r\n\t\t\t\tif ( !suppressDisabledCheck &&\r\n\t\t\t\t\t\t( instance.options.disabled === true ||\r\n\t\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\r\n\t\t\t\t\t.apply( instance, arguments );\r\n\t\t\t}\r\n\r\n\t\t\t// copy the guid so direct unbinding works\r\n\t\t\tif ( typeof handler !== \"string\" ) {\r\n\t\t\t\thandlerProxy.guid = handler.guid =\r\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\r\n\t\t\t}\r\n\r\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ ),\r\n\t\t\t\teventName = match[1] + instance.eventNamespace,\r\n\t\t\t\tselector = match[2];\r\n\t\t\tif ( selector ) {\r\n\t\t\t\tdelegateElement.delegate( selector, eventName, handlerProxy );\r\n\t\t\t} else {\r\n\t\t\t\telement.bind( eventName, handlerProxy );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_off: function( element, eventName ) {\r\n\t\teventName = (eventName || \"\").split( \" \" ).join( this.eventNamespace + \" \" ) +\r\n\t\t\tthis.eventNamespace;\r\n\t\telement.unbind( eventName ).undelegate( eventName );\r\n\r\n\t\t// Clear the stack to avoid memory leaks (#10056)\r\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\r\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\r\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\r\n\t},\r\n\r\n\t_delay: function( handler, delay ) {\r\n\t\tfunction handlerProxy() {\r\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\r\n\t\t\t\t.apply( instance, arguments );\r\n\t\t}\r\n\t\tvar instance = this;\r\n\t\treturn setTimeout( handlerProxy, delay || 0 );\r\n\t},\r\n\r\n\t_hoverable: function( element ) {\r\n\t\tthis.hoverable = this.hoverable.add( element );\r\n\t\tthis._on( element, {\r\n\t\t\tmouseenter: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-hover\" );\r\n\t\t\t},\r\n\t\t\tmouseleave: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-hover\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_focusable: function( element ) {\r\n\t\tthis.focusable = this.focusable.add( element );\r\n\t\tthis._on( element, {\r\n\t\t\tfocusin: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-focus\" );\r\n\t\t\t},\r\n\t\t\tfocusout: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-focus\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_trigger: function( type, event, data ) {\r\n\t\tvar prop, orig,\r\n\t\t\tcallback = this.options[ type ];\r\n\r\n\t\tdata = data || {};\r\n\t\tevent = $.Event( event );\r\n\t\tevent.type = ( type === this.widgetEventPrefix ?\r\n\t\t\ttype :\r\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\r\n\t\t// the original event may come from any element\r\n\t\t// so we need to reset the target on the new event\r\n\t\tevent.target = this.element[ 0 ];\r\n\r\n\t\t// copy original event properties over to the new event\r\n\t\torig = event.originalEvent;\r\n\t\tif ( orig ) {\r\n\t\t\tfor ( prop in orig ) {\r\n\t\t\t\tif ( !( prop in event ) ) {\r\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element.trigger( event, data );\r\n\t\treturn !( $.isFunction( callback ) &&\r\n\t\t\tcallback.apply( this.element[0], [ event ].concat( data ) ) === false ||\r\n\t\t\tevent.isDefaultPrevented() );\r\n\t}\r\n};\r\n\r\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\r\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\r\n\t\tif ( typeof options === \"string\" ) {\r\n\t\t\toptions = { effect: options };\r\n\t\t}\r\n\t\tvar hasOptions,\r\n\t\t\teffectName = !options ?\r\n\t\t\t\tmethod :\r\n\t\t\t\toptions === true || typeof options === \"number\" ?\r\n\t\t\t\t\tdefaultEffect :\r\n\t\t\t\t\toptions.effect || defaultEffect;\r\n\t\toptions = options || {};\r\n\t\tif ( typeof options === \"number\" ) {\r\n\t\t\toptions = { duration: options };\r\n\t\t}\r\n\t\thasOptions = !$.isEmptyObject( options );\r\n\t\toptions.complete = callback;\r\n\t\tif ( options.delay ) {\r\n\t\t\telement.delay( options.delay );\r\n\t\t}\r\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\r\n\t\t\telement[ method ]( options );\r\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\r\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\r\n\t\t} else {\r\n\t\t\telement.queue(function( next ) {\r\n\t\t\t\t$( this )[ method ]();\r\n\t\t\t\tif ( callback ) {\r\n\t\t\t\t\tcallback.call( element[ 0 ] );\r\n\t\t\t\t}\r\n\t\t\t\tnext();\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n});\r\n\r\nvar widget = $.widget;\r\n\r\n\r\n\r\n}));\r\n","/*\r\n * jQuery Iframe Transport Plugin\r\n * https://github.com/blueimp/jQuery-File-Upload\r\n *\r\n * Copyright 2011, Sebastian Tschan\r\n * https://blueimp.net\r\n *\r\n * Licensed under the MIT license:\r\n * http://www.opensource.org/licenses/MIT\r\n */\r\n\r\n/* global define, require, window, document */\r\n\r\n(function (factory) {\r\n 'use strict';\r\n if (typeof define === 'function' && define.amd) {\r\n // Register as an anonymous AMD module:\r\n define(['jquery'], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS:\r\n factory(require('jquery'));\r\n } else {\r\n // Browser globals:\r\n factory(window.jQuery);\r\n }\r\n}(function ($) {\r\n 'use strict';\r\n\r\n // Helper variable to create unique names for the transport iframes:\r\n var counter = 0;\r\n\r\n // The iframe transport accepts four additional options:\r\n // options.fileInput: a jQuery collection of file input fields\r\n // options.paramName: the parameter name for the file form data,\r\n // overrides the name property of the file input field(s),\r\n // can be a string or an array of strings.\r\n // options.formData: an array of objects with name and value properties,\r\n // equivalent to the return data of .serializeArray(), e.g.:\r\n // [{name: 'a', value: 1}, {name: 'b', value: 2}]\r\n // options.initialIframeSrc: the URL of the initial iframe src,\r\n // by default set to \"javascript:false;\"\r\n $.ajaxTransport('iframe', function (options) {\r\n if (options.async) {\r\n // javascript:false as initial iframe src\r\n // prevents warning popups on HTTPS in IE6:\r\n /*jshint scripturl: true */\r\n var initialIframeSrc = options.initialIframeSrc || 'javascript:false;',\r\n /*jshint scripturl: false */\r\n form,\r\n iframe,\r\n addParamChar;\r\n return {\r\n send: function (_, completeCallback) {\r\n form = $('<form style=\"display:none;\"></form>');\r\n form.attr('accept-charset', options.formAcceptCharset);\r\n addParamChar = /\\?/.test(options.url) ? '&' : '?';\r\n // XDomainRequest only supports GET and POST:\r\n if (options.type === 'DELETE') {\r\n options.url = options.url + addParamChar + '_method=DELETE';\r\n options.type = 'POST';\r\n } else if (options.type === 'PUT') {\r\n options.url = options.url + addParamChar + '_method=PUT';\r\n options.type = 'POST';\r\n } else if (options.type === 'PATCH') {\r\n options.url = options.url + addParamChar + '_method=PATCH';\r\n options.type = 'POST';\r\n }\r\n // IE versions below IE8 cannot set the name property of\r\n // elements that have already been added to the DOM,\r\n // so we set the name along with the iframe HTML markup:\r\n counter += 1;\r\n iframe = $(\r\n '<iframe src=\"' + initialIframeSrc +\r\n '\" name=\"iframe-transport-' + counter + '\"></iframe>'\r\n ).bind('load', function () {\r\n var fileInputClones,\r\n paramNames = $.isArray(options.paramName) ?\r\n options.paramName : [options.paramName];\r\n iframe\r\n .unbind('load')\r\n .bind('load', function () {\r\n var response;\r\n // Wrap in a try/catch block to catch exceptions thrown\r\n // when trying to access cross-domain iframe contents:\r\n try {\r\n response = iframe.contents();\r\n // Google Chrome and Firefox do not throw an\r\n // exception when calling iframe.contents() on\r\n // cross-domain requests, so we unify the response:\r\n if (!response.length || !response[0].firstChild) {\r\n throw new Error();\r\n }\r\n } catch (e) {\r\n response = undefined;\r\n }\r\n // The complete callback returns the\r\n // iframe content document as response object:\r\n completeCallback(\r\n 200,\r\n 'success',\r\n {'iframe': response}\r\n );\r\n // Fix for IE endless progress bar activity bug\r\n // (happens on form submits to iframe targets):\r\n $('<iframe src=\"' + initialIframeSrc + '\"></iframe>')\r\n .appendTo(form);\r\n window.setTimeout(function () {\r\n // Removing the form in a setTimeout call\r\n // allows Chrome's developer tools to display\r\n // the response result\r\n form.remove();\r\n }, 0);\r\n });\r\n form\r\n .prop('target', iframe.prop('name'))\r\n .prop('action', options.url)\r\n .prop('method', options.type);\r\n if (options.formData) {\r\n $.each(options.formData, function (index, field) {\r\n $('<input type=\"hidden\"/>')\r\n .prop('name', field.name)\r\n .val(field.value)\r\n .appendTo(form);\r\n });\r\n }\r\n if (options.fileInput && options.fileInput.length &&\r\n options.type === 'POST') {\r\n fileInputClones = options.fileInput.clone();\r\n // Insert a clone for each file input field:\r\n options.fileInput.after(function (index) {\r\n return fileInputClones[index];\r\n });\r\n if (options.paramName) {\r\n options.fileInput.each(function (index) {\r\n $(this).prop(\r\n 'name',\r\n paramNames[index] || options.paramName\r\n );\r\n });\r\n }\r\n // Appending the file input fields to the hidden form\r\n // removes them from their original location:\r\n form\r\n .append(options.fileInput)\r\n .prop('enctype', 'multipart/form-data')\r\n // enctype must be set as encoding for IE:\r\n .prop('encoding', 'multipart/form-data');\r\n // Remove the HTML5 form attribute from the input(s):\r\n options.fileInput.removeAttr('form');\r\n }\r\n form.submit();\r\n // Insert the file input fields at their original location\r\n // by replacing the clones with the originals:\r\n if (fileInputClones && fileInputClones.length) {\r\n options.fileInput.each(function (index, input) {\r\n var clone = $(fileInputClones[index]);\r\n // Restore the original name and form properties:\r\n $(input)\r\n .prop('name', clone.prop('name'))\r\n .attr('form', clone.attr('form'));\r\n clone.replaceWith(input);\r\n });\r\n }\r\n });\r\n form.append(iframe).appendTo(document.body);\r\n },\r\n abort: function () {\r\n if (iframe) {\r\n // javascript:false as iframe src aborts the request\r\n // and prevents warning popups on HTTPS in IE6.\r\n // concat is used to avoid the \"Script URL\" JSLint error:\r\n iframe\r\n .unbind('load')\r\n .prop('src', initialIframeSrc);\r\n }\r\n if (form) {\r\n form.remove();\r\n }\r\n }\r\n };\r\n }\r\n });\r\n\r\n // The iframe transport returns the iframe content document as response.\r\n // The following adds converters from iframe to text, json, html, xml\r\n // and script.\r\n // Please note that the Content-Type for JSON responses has to be text/plain\r\n // or text/html, if the browser doesn't include application/json in the\r\n // Accept header, else IE will show a download dialog.\r\n // The Content-Type for XML responses on the other hand has to be always\r\n // application/xml or text/xml, so IE properly parses the XML response.\r\n // See also\r\n // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation\r\n $.ajaxSetup({\r\n converters: {\r\n 'iframe text': function (iframe) {\r\n return iframe && $(iframe[0].body).text();\r\n },\r\n 'iframe json': function (iframe) {\r\n return iframe && $.parseJSON($(iframe[0].body).text());\r\n },\r\n 'iframe html': function (iframe) {\r\n return iframe && $(iframe[0].body).html();\r\n },\r\n 'iframe xml': function (iframe) {\r\n var xmlDoc = iframe && iframe[0];\r\n return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc :\r\n $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||\r\n $(xmlDoc.body).html());\r\n },\r\n 'iframe script': function (iframe) {\r\n return iframe && $.globalEval($(iframe[0].body).text());\r\n }\r\n }\r\n });\r\n\r\n}));\r\n","/*\r\n * jQuery File Upload Plugin\r\n * https://github.com/blueimp/jQuery-File-Upload\r\n *\r\n * Copyright 2010, Sebastian Tschan\r\n * https://blueimp.net\r\n *\r\n * Licensed under the MIT license:\r\n * http://www.opensource.org/licenses/MIT\r\n */\r\n\r\n/* jshint nomen:false */\r\n/* global define, require, window, document, location, Blob, FormData */\r\n\r\n(function (factory) {\r\n 'use strict';\r\n if (typeof define === 'function' && define.amd) {\r\n // Register as an anonymous AMD module:\r\n define([\r\n 'jquery',\r\n 'jquery.ui.widget'\r\n ], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS:\r\n factory(\r\n require('jquery'),\r\n require('./vendor/jquery.ui.widget')\r\n );\r\n } else {\r\n // Browser globals:\r\n factory(window.jQuery);\r\n }\r\n}(function ($) {\r\n 'use strict';\r\n\r\n // Detect file input support, based on\r\n // http://viljamis.com/blog/2012/file-upload-support-on-mobile/\r\n $.support.fileInput = !(new RegExp(\r\n // Handle devices which give false positives for the feature detection:\r\n '(Android (1\\\\.[0156]|2\\\\.[01]))' +\r\n '|(Windows Phone (OS 7|8\\\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' +\r\n '|(w(eb)?OSBrowser)|(webOS)' +\r\n '|(Kindle/(1\\\\.0|2\\\\.[05]|3\\\\.0))'\r\n ).test(window.navigator.userAgent) ||\r\n // Feature detection for all other devices:\r\n $('<input type=\"file\">').prop('disabled'));\r\n\r\n // The FileReader API is not actually used, but works as feature detection,\r\n // as some Safari versions (5?) support XHR file uploads via the FormData API,\r\n // but not non-multipart XHR file uploads.\r\n // window.XMLHttpRequestUpload is not available on IE10, so we check for\r\n // window.ProgressEvent instead to detect XHR2 file upload capability:\r\n $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader);\r\n $.support.xhrFormDataFileUpload = !!window.FormData;\r\n\r\n // Detect support for Blob slicing (required for chunked uploads):\r\n $.support.blobSlice = window.Blob && (Blob.prototype.slice ||\r\n Blob.prototype.webkitSlice || Blob.prototype.mozSlice);\r\n\r\n // Helper function to create drag handlers for dragover/dragenter/dragleave:\r\n function getDragHandler(type) {\r\n var isDragOver = type === 'dragover';\r\n return function (e) {\r\n e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\r\n var dataTransfer = e.dataTransfer;\r\n if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 &&\r\n this._trigger(\r\n type,\r\n $.Event(type, {delegatedEvent: e})\r\n ) !== false) {\r\n e.preventDefault();\r\n if (isDragOver) {\r\n dataTransfer.dropEffect = 'copy';\r\n }\r\n }\r\n };\r\n }\r\n\r\n // The fileupload widget listens for change events on file input fields defined\r\n // via fileInput setting and paste or drop events of the given dropZone.\r\n // In addition to the default jQuery Widget methods, the fileupload widget\r\n // exposes the \"add\" and \"send\" methods, to add or directly send files using\r\n // the fileupload API.\r\n // By default, files added via file input selection, paste, drag & drop or\r\n // \"add\" method are uploaded immediately, but it is possible to override\r\n // the \"add\" callback option to queue file uploads.\r\n $.widget('blueimp.fileupload', {\r\n\r\n options: {\r\n // The drop target element(s), by the default the complete document.\r\n // Set to null to disable drag & drop support:\r\n dropZone: $(document),\r\n // The paste target element(s), by the default undefined.\r\n // Set to a DOM node or jQuery object to enable file pasting:\r\n pasteZone: undefined,\r\n // The file input field(s), that are listened to for change events.\r\n // If undefined, it is set to the file input fields inside\r\n // of the widget element on plugin initialization.\r\n // Set to null to disable the change listener.\r\n fileInput: undefined,\r\n // By default, the file input field is replaced with a clone after\r\n // each input field change event. This is required for iframe transport\r\n // queues and allows change events to be fired for the same file\r\n // selection, but can be disabled by setting the following option to false:\r\n replaceFileInput: true,\r\n // The parameter name for the file form data (the request argument name).\r\n // If undefined or empty, the name property of the file input field is\r\n // used, or \"files[]\" if the file input name property is also empty,\r\n // can be a string or an array of strings:\r\n paramName: undefined,\r\n // By default, each file of a selection is uploaded using an individual\r\n // request for XHR type uploads. Set to false to upload file\r\n // selections in one request each:\r\n singleFileUploads: true,\r\n // To limit the number of files uploaded with one XHR request,\r\n // set the following option to an integer greater than 0:\r\n limitMultiFileUploads: undefined,\r\n // The following option limits the number of files uploaded with one\r\n // XHR request to keep the request size under or equal to the defined\r\n // limit in bytes:\r\n limitMultiFileUploadSize: undefined,\r\n // Multipart file uploads add a number of bytes to each uploaded file,\r\n // therefore the following option adds an overhead for each file used\r\n // in the limitMultiFileUploadSize configuration:\r\n limitMultiFileUploadSizeOverhead: 512,\r\n // Set the following option to true to issue all file upload requests\r\n // in a sequential order:\r\n sequentialUploads: false,\r\n // To limit the number of concurrent uploads,\r\n // set the following option to an integer greater than 0:\r\n limitConcurrentUploads: undefined,\r\n // Set the following option to true to force iframe transport uploads:\r\n forceIframeTransport: false,\r\n // Set the following option to the location of a redirect url on the\r\n // origin server, for cross-domain iframe transport uploads:\r\n redirect: undefined,\r\n // The parameter name for the redirect url, sent as part of the form\r\n // data and set to 'redirect' if this option is empty:\r\n redirectParamName: undefined,\r\n // Set the following option to the location of a postMessage window,\r\n // to enable postMessage transport uploads:\r\n postMessage: undefined,\r\n // By default, XHR file uploads are sent as multipart/form-data.\r\n // The iframe transport is always using multipart/form-data.\r\n // Set to false to enable non-multipart XHR uploads:\r\n multipart: true,\r\n // To upload large files in smaller chunks, set the following option\r\n // to a preferred maximum chunk size. If set to 0, null or undefined,\r\n // or the browser does not support the required Blob API, files will\r\n // be uploaded as a whole.\r\n maxChunkSize: undefined,\r\n // When a non-multipart upload or a chunked multipart upload has been\r\n // aborted, this option can be used to resume the upload by setting\r\n // it to the size of the already uploaded bytes. This option is most\r\n // useful when modifying the options object inside of the \"add\" or\r\n // \"send\" callbacks, as the options are cloned for each file upload.\r\n uploadedBytes: undefined,\r\n // By default, failed (abort or error) file uploads are removed from the\r\n // global progress calculation. Set the following option to false to\r\n // prevent recalculating the global progress data:\r\n recalculateProgress: true,\r\n // Interval in milliseconds to calculate and trigger progress events:\r\n progressInterval: 100,\r\n // Interval in milliseconds to calculate progress bitrate:\r\n bitrateInterval: 500,\r\n // By default, uploads are started automatically when adding files:\r\n autoUpload: true,\r\n\r\n // Error and info messages:\r\n messages: {\r\n uploadedBytes: 'Uploaded bytes exceed file size'\r\n },\r\n\r\n // Translation function, gets the message key to be translated\r\n // and an object with context specific data as arguments:\r\n i18n: function (message, context) {\r\n message = this.messages[message] || message.toString();\r\n if (context) {\r\n $.each(context, function (key, value) {\r\n message = message.replace('{' + key + '}', value);\r\n });\r\n }\r\n return message;\r\n },\r\n\r\n // Additional form data to be sent along with the file uploads can be set\r\n // using this option, which accepts an array of objects with name and\r\n // value properties, a function returning such an array, a FormData\r\n // object (for XHR file uploads), or a simple object.\r\n // The form of the first fileInput is given as parameter to the function:\r\n formData: function (form) {\r\n return form.serializeArray();\r\n },\r\n\r\n // The add callback is invoked as soon as files are added to the fileupload\r\n // widget (via file input selection, drag & drop, paste or add API call).\r\n // If the singleFileUploads option is enabled, this callback will be\r\n // called once for each file in the selection for XHR file uploads, else\r\n // once for each file selection.\r\n //\r\n // The upload starts when the submit method is invoked on the data parameter.\r\n // The data object contains a files property holding the added files\r\n // and allows you to override plugin options as well as define ajax settings.\r\n //\r\n // Listeners for this callback can also be bound the following way:\r\n // .bind('fileuploadadd', func);\r\n //\r\n // data.submit() returns a Promise object and allows to attach additional\r\n // handlers using jQuery's Deferred callbacks:\r\n // data.submit().done(func).fail(func).always(func);\r\n add: function (e, data) {\r\n if (e.isDefaultPrevented()) {\r\n return false;\r\n }\r\n if (data.autoUpload || (data.autoUpload !== false &&\r\n $(this).fileupload('option', 'autoUpload'))) {\r\n data.process().done(function () {\r\n data.submit();\r\n });\r\n }\r\n },\r\n\r\n // Other callbacks:\r\n\r\n // Callback for the submit event of each file upload:\r\n // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);\r\n\r\n // Callback for the start of each file upload request:\r\n // send: function (e, data) {}, // .bind('fileuploadsend', func);\r\n\r\n // Callback for successful uploads:\r\n // done: function (e, data) {}, // .bind('fileuploaddone', func);\r\n\r\n // Callback for failed (abort or error) uploads:\r\n // fail: function (e, data) {}, // .bind('fileuploadfail', func);\r\n\r\n // Callback for completed (success, abort or error) requests:\r\n // always: function (e, data) {}, // .bind('fileuploadalways', func);\r\n\r\n // Callback for upload progress events:\r\n // progress: function (e, data) {}, // .bind('fileuploadprogress', func);\r\n\r\n // Callback for global upload progress events:\r\n // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);\r\n\r\n // Callback for uploads start, equivalent to the global ajaxStart event:\r\n // start: function (e) {}, // .bind('fileuploadstart', func);\r\n\r\n // Callback for uploads stop, equivalent to the global ajaxStop event:\r\n // stop: function (e) {}, // .bind('fileuploadstop', func);\r\n\r\n // Callback for change events of the fileInput(s):\r\n // change: function (e, data) {}, // .bind('fileuploadchange', func);\r\n\r\n // Callback for paste events to the pasteZone(s):\r\n // paste: function (e, data) {}, // .bind('fileuploadpaste', func);\r\n\r\n // Callback for drop events of the dropZone(s):\r\n // drop: function (e, data) {}, // .bind('fileuploaddrop', func);\r\n\r\n // Callback for dragover events of the dropZone(s):\r\n // dragover: function (e) {}, // .bind('fileuploaddragover', func);\r\n\r\n // Callback for the start of each chunk upload request:\r\n // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);\r\n\r\n // Callback for successful chunk uploads:\r\n // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);\r\n\r\n // Callback for failed (abort or error) chunk uploads:\r\n // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);\r\n\r\n // Callback for completed (success, abort or error) chunk upload requests:\r\n // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);\r\n\r\n // The plugin options are used as settings object for the ajax calls.\r\n // The following are jQuery ajax settings required for the file uploads:\r\n processData: false,\r\n contentType: false,\r\n cache: false,\r\n timeout: 0\r\n },\r\n\r\n // A list of options that require reinitializing event listeners and/or\r\n // special initialization code:\r\n _specialOptions: [\r\n 'fileInput',\r\n 'dropZone',\r\n 'pasteZone',\r\n 'multipart',\r\n 'forceIframeTransport'\r\n ],\r\n\r\n _blobSlice: $.support.blobSlice && function () {\r\n var slice = this.slice || this.webkitSlice || this.mozSlice;\r\n return slice.apply(this, arguments);\r\n },\r\n\r\n _BitrateTimer: function () {\r\n this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime());\r\n this.loaded = 0;\r\n this.bitrate = 0;\r\n this.getBitrate = function (now, loaded, interval) {\r\n var timeDiff = now - this.timestamp;\r\n if (!this.bitrate || !interval || timeDiff > interval) {\r\n this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;\r\n this.loaded = loaded;\r\n this.timestamp = now;\r\n }\r\n return this.bitrate;\r\n };\r\n },\r\n\r\n _isXHRUpload: function (options) {\r\n return !options.forceIframeTransport &&\r\n ((!options.multipart && $.support.xhrFileUpload) ||\r\n $.support.xhrFormDataFileUpload);\r\n },\r\n\r\n _getFormData: function (options) {\r\n var formData;\r\n if ($.type(options.formData) === 'function') {\r\n return options.formData(options.form);\r\n }\r\n if ($.isArray(options.formData)) {\r\n return options.formData;\r\n }\r\n if ($.type(options.formData) === 'object') {\r\n formData = [];\r\n $.each(options.formData, function (name, value) {\r\n formData.push({name: name, value: value});\r\n });\r\n return formData;\r\n }\r\n return [];\r\n },\r\n\r\n _getTotal: function (files) {\r\n var total = 0;\r\n $.each(files, function (index, file) {\r\n total += file.size || 1;\r\n });\r\n return total;\r\n },\r\n\r\n _initProgressObject: function (obj) {\r\n var progress = {\r\n loaded: 0,\r\n total: 0,\r\n bitrate: 0\r\n };\r\n if (obj._progress) {\r\n $.extend(obj._progress, progress);\r\n } else {\r\n obj._progress = progress;\r\n }\r\n },\r\n\r\n _initResponseObject: function (obj) {\r\n var prop;\r\n if (obj._response) {\r\n for (prop in obj._response) {\r\n if (obj._response.hasOwnProperty(prop)) {\r\n delete obj._response[prop];\r\n }\r\n }\r\n } else {\r\n obj._response = {};\r\n }\r\n },\r\n\r\n _onProgress: function (e, data) {\r\n if (e.lengthComputable) {\r\n var now = ((Date.now) ? Date.now() : (new Date()).getTime()),\r\n loaded;\r\n if (data._time && data.progressInterval &&\r\n (now - data._time < data.progressInterval) &&\r\n e.loaded !== e.total) {\r\n return;\r\n }\r\n data._time = now;\r\n loaded = Math.floor(\r\n e.loaded / e.total * (data.chunkSize || data._progress.total)\r\n ) + (data.uploadedBytes || 0);\r\n // Add the difference from the previously loaded state\r\n // to the global loaded counter:\r\n this._progress.loaded += (loaded - data._progress.loaded);\r\n this._progress.bitrate = this._bitrateTimer.getBitrate(\r\n now,\r\n this._progress.loaded,\r\n data.bitrateInterval\r\n );\r\n data._progress.loaded = data.loaded = loaded;\r\n data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(\r\n now,\r\n loaded,\r\n data.bitrateInterval\r\n );\r\n // Trigger a custom progress event with a total data property set\r\n // to the file size(s) of the current upload and a loaded data\r\n // property calculated accordingly:\r\n this._trigger(\r\n 'progress',\r\n $.Event('progress', {delegatedEvent: e}),\r\n data\r\n );\r\n // Trigger a global progress event for all current file uploads,\r\n // including ajax calls queued for sequential file uploads:\r\n this._trigger(\r\n 'progressall',\r\n $.Event('progressall', {delegatedEvent: e}),\r\n this._progress\r\n );\r\n }\r\n },\r\n\r\n _initProgressListener: function (options) {\r\n var that = this,\r\n xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();\r\n // Accesss to the native XHR object is required to add event listeners\r\n // for the upload progress event:\r\n if (xhr.upload) {\r\n $(xhr.upload).bind('progress', function (e) {\r\n var oe = e.originalEvent;\r\n // Make sure the progress event properties get copied over:\r\n e.lengthComputable = oe.lengthComputable;\r\n e.loaded = oe.loaded;\r\n e.total = oe.total;\r\n that._onProgress(e, options);\r\n });\r\n options.xhr = function () {\r\n return xhr;\r\n };\r\n }\r\n },\r\n\r\n _isInstanceOf: function (type, obj) {\r\n // Cross-frame instanceof check\r\n return Object.prototype.toString.call(obj) === '[object ' + type + ']';\r\n },\r\n\r\n _initXHRData: function (options) {\r\n var that = this,\r\n formData,\r\n file = options.files[0],\r\n // Ignore non-multipart setting if not supported:\r\n multipart = options.multipart || !$.support.xhrFileUpload,\r\n paramName = $.type(options.paramName) === 'array' ?\r\n options.paramName[0] : options.paramName;\r\n options.headers = $.extend({}, options.headers);\r\n if (options.contentRange) {\r\n options.headers['Content-Range'] = options.contentRange;\r\n }\r\n if (!multipart || options.blob || !this._isInstanceOf('File', file)) {\r\n options.headers['Content-Disposition'] = 'attachment; filename=\"' +\r\n encodeURI(file.name) + '\"';\r\n }\r\n if (!multipart) {\r\n options.contentType = file.type || 'application/octet-stream';\r\n options.data = options.blob || file;\r\n } else if ($.support.xhrFormDataFileUpload) {\r\n if (options.postMessage) {\r\n // window.postMessage does not allow sending FormData\r\n // objects, so we just add the File/Blob objects to\r\n // the formData array and let the postMessage window\r\n // create the FormData object out of this array:\r\n formData = this._getFormData(options);\r\n if (options.blob) {\r\n formData.push({\r\n name: paramName,\r\n value: options.blob\r\n });\r\n } else {\r\n $.each(options.files, function (index, file) {\r\n formData.push({\r\n name: ($.type(options.paramName) === 'array' &&\r\n options.paramName[index]) || paramName,\r\n value: file\r\n });\r\n });\r\n }\r\n } else {\r\n if (that._isInstanceOf('FormData', options.formData)) {\r\n formData = options.formData;\r\n } else {\r\n formData = new FormData();\r\n $.each(this._getFormData(options), function (index, field) {\r\n formData.append(field.name, field.value);\r\n });\r\n }\r\n if (options.blob) {\r\n formData.append(paramName, options.blob, file.name);\r\n } else {\r\n $.each(options.files, function (index, file) {\r\n // This check allows the tests to run with\r\n // dummy objects:\r\n if (that._isInstanceOf('File', file) ||\r\n that._isInstanceOf('Blob', file)) {\r\n formData.append(\r\n ($.type(options.paramName) === 'array' &&\r\n options.paramName[index]) || paramName,\r\n file,\r\n file.uploadName || file.name\r\n );\r\n }\r\n });\r\n }\r\n }\r\n options.data = formData;\r\n }\r\n // Blob reference is not needed anymore, free memory:\r\n options.blob = null;\r\n },\r\n\r\n _initIframeSettings: function (options) {\r\n var targetHost = $('<a></a>').prop('href', options.url).prop('host');\r\n // Setting the dataType to iframe enables the iframe transport:\r\n options.dataType = 'iframe ' + (options.dataType || '');\r\n // The iframe transport accepts a serialized array as form data:\r\n options.formData = this._getFormData(options);\r\n // Add redirect url to form data on cross-domain uploads:\r\n if (options.redirect && targetHost && targetHost !== location.host) {\r\n options.formData.push({\r\n name: options.redirectParamName || 'redirect',\r\n value: options.redirect\r\n });\r\n }\r\n },\r\n\r\n _initDataSettings: function (options) {\r\n if (this._isXHRUpload(options)) {\r\n if (!this._chunkedUpload(options, true)) {\r\n if (!options.data) {\r\n this._initXHRData(options);\r\n }\r\n this._initProgressListener(options);\r\n }\r\n if (options.postMessage) {\r\n // Setting the dataType to postmessage enables the\r\n // postMessage transport:\r\n options.dataType = 'postmessage ' + (options.dataType || '');\r\n }\r\n } else {\r\n this._initIframeSettings(options);\r\n }\r\n },\r\n\r\n _getParamName: function (options) {\r\n var fileInput = $(options.fileInput),\r\n paramName = options.paramName;\r\n if (!paramName) {\r\n paramName = [];\r\n fileInput.each(function () {\r\n var input = $(this),\r\n name = input.prop('name') || 'files[]',\r\n i = (input.prop('files') || [1]).length;\r\n while (i) {\r\n paramName.push(name);\r\n i -= 1;\r\n }\r\n });\r\n if (!paramName.length) {\r\n paramName = [fileInput.prop('name') || 'files[]'];\r\n }\r\n } else if (!$.isArray(paramName)) {\r\n paramName = [paramName];\r\n }\r\n return paramName;\r\n },\r\n\r\n _initFormSettings: function (options) {\r\n // Retrieve missing options from the input field and the\r\n // associated form, if available:\r\n if (!options.form || !options.form.length) {\r\n options.form = $(options.fileInput.prop('form'));\r\n // If the given file input doesn't have an associated form,\r\n // use the default widget file input's form:\r\n if (!options.form.length) {\r\n options.form = $(this.options.fileInput.prop('form'));\r\n }\r\n }\r\n options.paramName = this._getParamName(options);\r\n if (!options.url) {\r\n options.url = options.form.prop('action') || location.href;\r\n }\r\n // The HTTP request method must be \"POST\" or \"PUT\":\r\n options.type = (options.type ||\r\n ($.type(options.form.prop('method')) === 'string' &&\r\n options.form.prop('method')) || ''\r\n ).toUpperCase();\r\n if (options.type !== 'POST' && options.type !== 'PUT' &&\r\n options.type !== 'PATCH') {\r\n options.type = 'POST';\r\n }\r\n if (!options.formAcceptCharset) {\r\n options.formAcceptCharset = options.form.attr('accept-charset');\r\n }\r\n },\r\n\r\n _getAJAXSettings: function (data) {\r\n var options = $.extend({}, this.options, data);\r\n this._initFormSettings(options);\r\n this._initDataSettings(options);\r\n return options;\r\n },\r\n\r\n // jQuery 1.6 doesn't provide .state(),\r\n // while jQuery 1.8+ removed .isRejected() and .isResolved():\r\n _getDeferredState: function (deferred) {\r\n if (deferred.state) {\r\n return deferred.state();\r\n }\r\n if (deferred.isResolved()) {\r\n return 'resolved';\r\n }\r\n if (deferred.isRejected()) {\r\n return 'rejected';\r\n }\r\n return 'pending';\r\n },\r\n\r\n // Maps jqXHR callbacks to the equivalent\r\n // methods of the given Promise object:\r\n _enhancePromise: function (promise) {\r\n promise.success = promise.done;\r\n promise.error = promise.fail;\r\n promise.complete = promise.always;\r\n return promise;\r\n },\r\n\r\n // Creates and returns a Promise object enhanced with\r\n // the jqXHR methods abort, success, error and complete:\r\n _getXHRPromise: function (resolveOrReject, context, args) {\r\n var dfd = $.Deferred(),\r\n promise = dfd.promise();\r\n context = context || this.options.context || promise;\r\n if (resolveOrReject === true) {\r\n dfd.resolveWith(context, args);\r\n } else if (resolveOrReject === false) {\r\n dfd.rejectWith(context, args);\r\n }\r\n promise.abort = dfd.promise;\r\n return this._enhancePromise(promise);\r\n },\r\n\r\n // Adds convenience methods to the data callback argument:\r\n _addConvenienceMethods: function (e, data) {\r\n var that = this,\r\n getPromise = function (args) {\r\n return $.Deferred().resolveWith(that, args).promise();\r\n };\r\n data.process = function (resolveFunc, rejectFunc) {\r\n if (resolveFunc || rejectFunc) {\r\n data._processQueue = this._processQueue =\r\n (this._processQueue || getPromise([this])).pipe(\r\n function () {\r\n if (data.errorThrown) {\r\n return $.Deferred()\r\n .rejectWith(that, [data]).promise();\r\n }\r\n return getPromise(arguments);\r\n }\r\n ).pipe(resolveFunc, rejectFunc);\r\n }\r\n return this._processQueue || getPromise([this]);\r\n };\r\n data.submit = function () {\r\n if (this.state() !== 'pending') {\r\n data.jqXHR = this.jqXHR =\r\n (that._trigger(\r\n 'submit',\r\n $.Event('submit', {delegatedEvent: e}),\r\n this\r\n ) !== false) && that._onSend(e, this);\r\n }\r\n return this.jqXHR || that._getXHRPromise();\r\n };\r\n data.abort = function () {\r\n if (this.jqXHR) {\r\n return this.jqXHR.abort();\r\n }\r\n this.errorThrown = 'abort';\r\n that._trigger('fail', null, this);\r\n return that._getXHRPromise(false);\r\n };\r\n data.state = function () {\r\n if (this.jqXHR) {\r\n return that._getDeferredState(this.jqXHR);\r\n }\r\n if (this._processQueue) {\r\n return that._getDeferredState(this._processQueue);\r\n }\r\n };\r\n data.processing = function () {\r\n return !this.jqXHR && this._processQueue && that\r\n ._getDeferredState(this._processQueue) === 'pending';\r\n };\r\n data.progress = function () {\r\n return this._progress;\r\n };\r\n data.response = function () {\r\n return this._response;\r\n };\r\n },\r\n\r\n // Parses the Range header from the server response\r\n // and returns the uploaded bytes:\r\n _getUploadedBytes: function (jqXHR) {\r\n var range = jqXHR.getResponseHeader('Range'),\r\n parts = range && range.split('-'),\r\n upperBytesPos = parts && parts.length > 1 &&\r\n parseInt(parts[1], 10);\r\n return upperBytesPos && upperBytesPos + 1;\r\n },\r\n\r\n // Uploads a file in multiple, sequential requests\r\n // by splitting the file up in multiple blob chunks.\r\n // If the second parameter is true, only tests if the file\r\n // should be uploaded in chunks, but does not invoke any\r\n // upload requests:\r\n _chunkedUpload: function (options, testOnly) {\r\n options.uploadedBytes = options.uploadedBytes || 0;\r\n var that = this,\r\n file = options.files[0],\r\n fs = file.size,\r\n ub = options.uploadedBytes,\r\n mcs = options.maxChunkSize || fs,\r\n slice = this._blobSlice,\r\n dfd = $.Deferred(),\r\n promise = dfd.promise(),\r\n jqXHR,\r\n upload;\r\n if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||\r\n options.data) {\r\n return false;\r\n }\r\n if (testOnly) {\r\n return true;\r\n }\r\n if (ub >= fs) {\r\n file.error = options.i18n('uploadedBytes');\r\n return this._getXHRPromise(\r\n false,\r\n options.context,\r\n [null, 'error', file.error]\r\n );\r\n }\r\n // The chunk upload method:\r\n upload = function () {\r\n // Clone the options object for each chunk upload:\r\n var o = $.extend({}, options),\r\n currentLoaded = o._progress.loaded;\r\n o.blob = slice.call(\r\n file,\r\n ub,\r\n ub + mcs,\r\n file.type\r\n );\r\n // Store the current chunk size, as the blob itself\r\n // will be dereferenced after data processing:\r\n o.chunkSize = o.blob.size;\r\n // Expose the chunk bytes position range:\r\n o.contentRange = 'bytes ' + ub + '-' +\r\n (ub + o.chunkSize - 1) + '/' + fs;\r\n // Process the upload data (the blob and potential form data):\r\n that._initXHRData(o);\r\n // Add progress listeners for this chunk upload:\r\n that._initProgressListener(o);\r\n jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) ||\r\n that._getXHRPromise(false, o.context))\r\n .done(function (result, textStatus, jqXHR) {\r\n ub = that._getUploadedBytes(jqXHR) ||\r\n (ub + o.chunkSize);\r\n // Create a progress event if no final progress event\r\n // with loaded equaling total has been triggered\r\n // for this chunk:\r\n if (currentLoaded + o.chunkSize - o._progress.loaded) {\r\n that._onProgress($.Event('progress', {\r\n lengthComputable: true,\r\n loaded: ub - o.uploadedBytes,\r\n total: ub - o.uploadedBytes\r\n }), o);\r\n }\r\n options.uploadedBytes = o.uploadedBytes = ub;\r\n o.result = result;\r\n o.textStatus = textStatus;\r\n o.jqXHR = jqXHR;\r\n that._trigger('chunkdone', null, o);\r\n that._trigger('chunkalways', null, o);\r\n if (ub < fs) {\r\n // File upload not yet complete,\r\n // continue with the next chunk:\r\n upload();\r\n } else {\r\n dfd.resolveWith(\r\n o.context,\r\n [result, textStatus, jqXHR]\r\n );\r\n }\r\n })\r\n .fail(function (jqXHR, textStatus, errorThrown) {\r\n o.jqXHR = jqXHR;\r\n o.textStatus = textStatus;\r\n o.errorThrown = errorThrown;\r\n that._trigger('chunkfail', null, o);\r\n that._trigger('chunkalways', null, o);\r\n dfd.rejectWith(\r\n o.context,\r\n [jqXHR, textStatus, errorThrown]\r\n );\r\n });\r\n };\r\n this._enhancePromise(promise);\r\n promise.abort = function () {\r\n return jqXHR.abort();\r\n };\r\n upload();\r\n return promise;\r\n },\r\n\r\n _beforeSend: function (e, data) {\r\n if (this._active === 0) {\r\n // the start callback is triggered when an upload starts\r\n // and no other uploads are currently running,\r\n // equivalent to the global ajaxStart event:\r\n this._trigger('start');\r\n // Set timer for global bitrate progress calculation:\r\n this._bitrateTimer = new this._BitrateTimer();\r\n // Reset the global progress values:\r\n this._progress.loaded = this._progress.total = 0;\r\n this._progress.bitrate = 0;\r\n }\r\n // Make sure the container objects for the .response() and\r\n // .progress() methods on the data object are available\r\n // and reset to their initial state:\r\n this._initResponseObject(data);\r\n this._initProgressObject(data);\r\n data._progress.loaded = data.loaded = data.uploadedBytes || 0;\r\n data._progress.total = data.total = this._getTotal(data.files) || 1;\r\n data._progress.bitrate = data.bitrate = 0;\r\n this._active += 1;\r\n // Initialize the global progress values:\r\n this._progress.loaded += data.loaded;\r\n this._progress.total += data.total;\r\n },\r\n\r\n _onDone: function (result, textStatus, jqXHR, options) {\r\n var total = options._progress.total,\r\n response = options._response;\r\n if (options._progress.loaded < total) {\r\n // Create a progress event if no final progress event\r\n // with loaded equaling total has been triggered:\r\n this._onProgress($.Event('progress', {\r\n lengthComputable: true,\r\n loaded: total,\r\n total: total\r\n }), options);\r\n }\r\n response.result = options.result = result;\r\n response.textStatus = options.textStatus = textStatus;\r\n response.jqXHR = options.jqXHR = jqXHR;\r\n this._trigger('done', null, options);\r\n },\r\n\r\n _onFail: function (jqXHR, textStatus, errorThrown, options) {\r\n var response = options._response;\r\n if (options.recalculateProgress) {\r\n // Remove the failed (error or abort) file upload from\r\n // the global progress calculation:\r\n this._progress.loaded -= options._progress.loaded;\r\n this._progress.total -= options._progress.total;\r\n }\r\n response.jqXHR = options.jqXHR = jqXHR;\r\n response.textStatus = options.textStatus = textStatus;\r\n response.errorThrown = options.errorThrown = errorThrown;\r\n this._trigger('fail', null, options);\r\n },\r\n\r\n _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {\r\n // jqXHRorResult, textStatus and jqXHRorError are added to the\r\n // options object via done and fail callbacks\r\n this._trigger('always', null, options);\r\n },\r\n\r\n _onSend: function (e, data) {\r\n if (!data.submit) {\r\n this._addConvenienceMethods(e, data);\r\n }\r\n var that = this,\r\n jqXHR,\r\n aborted,\r\n slot,\r\n pipe,\r\n options = that._getAJAXSettings(data),\r\n send = function () {\r\n that._sending += 1;\r\n // Set timer for bitrate progress calculation:\r\n options._bitrateTimer = new that._BitrateTimer();\r\n jqXHR = jqXHR || (\r\n ((aborted || that._trigger(\r\n 'send',\r\n $.Event('send', {delegatedEvent: e}),\r\n options\r\n ) === false) &&\r\n that._getXHRPromise(false, options.context, aborted)) ||\r\n that._chunkedUpload(options) || $.ajax(options)\r\n ).done(function (result, textStatus, jqXHR) {\r\n that._onDone(result, textStatus, jqXHR, options);\r\n }).fail(function (jqXHR, textStatus, errorThrown) {\r\n that._onFail(jqXHR, textStatus, errorThrown, options);\r\n }).always(function (jqXHRorResult, textStatus, jqXHRorError) {\r\n that._onAlways(\r\n jqXHRorResult,\r\n textStatus,\r\n jqXHRorError,\r\n options\r\n );\r\n that._sending -= 1;\r\n that._active -= 1;\r\n if (options.limitConcurrentUploads &&\r\n options.limitConcurrentUploads > that._sending) {\r\n // Start the next queued upload,\r\n // that has not been aborted:\r\n var nextSlot = that._slots.shift();\r\n while (nextSlot) {\r\n if (that._getDeferredState(nextSlot) === 'pending') {\r\n nextSlot.resolve();\r\n break;\r\n }\r\n nextSlot = that._slots.shift();\r\n }\r\n }\r\n if (that._active === 0) {\r\n // The stop callback is triggered when all uploads have\r\n // been completed, equivalent to the global ajaxStop event:\r\n that._trigger('stop');\r\n }\r\n });\r\n return jqXHR;\r\n };\r\n this._beforeSend(e, options);\r\n if (this.options.sequentialUploads ||\r\n (this.options.limitConcurrentUploads &&\r\n this.options.limitConcurrentUploads <= this._sending)) {\r\n if (this.options.limitConcurrentUploads > 1) {\r\n slot = $.Deferred();\r\n this._slots.push(slot);\r\n pipe = slot.pipe(send);\r\n } else {\r\n this._sequence = this._sequence.pipe(send, send);\r\n pipe = this._sequence;\r\n }\r\n // Return the piped Promise object, enhanced with an abort method,\r\n // which is delegated to the jqXHR object of the current upload,\r\n // and jqXHR callbacks mapped to the equivalent Promise methods:\r\n pipe.abort = function () {\r\n aborted = [undefined, 'abort', 'abort'];\r\n if (!jqXHR) {\r\n if (slot) {\r\n slot.rejectWith(options.context, aborted);\r\n }\r\n return send();\r\n }\r\n return jqXHR.abort();\r\n };\r\n return this._enhancePromise(pipe);\r\n }\r\n return send();\r\n },\r\n\r\n _onAdd: function (e, data) {\r\n var that = this,\r\n result = true,\r\n options = $.extend({}, this.options, data),\r\n files = data.files,\r\n filesLength = files.length,\r\n limit = options.limitMultiFileUploads,\r\n limitSize = options.limitMultiFileUploadSize,\r\n overhead = options.limitMultiFileUploadSizeOverhead,\r\n batchSize = 0,\r\n paramName = this._getParamName(options),\r\n paramNameSet,\r\n paramNameSlice,\r\n fileSet,\r\n i,\r\n j = 0;\r\n if (!filesLength) {\r\n return false;\r\n }\r\n if (limitSize && files[0].size === undefined) {\r\n limitSize = undefined;\r\n }\r\n if (!(options.singleFileUploads || limit || limitSize) ||\r\n !this._isXHRUpload(options)) {\r\n fileSet = [files];\r\n paramNameSet = [paramName];\r\n } else if (!(options.singleFileUploads || limitSize) && limit) {\r\n fileSet = [];\r\n paramNameSet = [];\r\n for (i = 0; i < filesLength; i += limit) {\r\n fileSet.push(files.slice(i, i + limit));\r\n paramNameSlice = paramName.slice(i, i + limit);\r\n if (!paramNameSlice.length) {\r\n paramNameSlice = paramName;\r\n }\r\n paramNameSet.push(paramNameSlice);\r\n }\r\n } else if (!options.singleFileUploads && limitSize) {\r\n fileSet = [];\r\n paramNameSet = [];\r\n for (i = 0; i < filesLength; i = i + 1) {\r\n batchSize += files[i].size + overhead;\r\n if (i + 1 === filesLength ||\r\n ((batchSize + files[i + 1].size + overhead) > limitSize) ||\r\n (limit && i + 1 - j >= limit)) {\r\n fileSet.push(files.slice(j, i + 1));\r\n paramNameSlice = paramName.slice(j, i + 1);\r\n if (!paramNameSlice.length) {\r\n paramNameSlice = paramName;\r\n }\r\n paramNameSet.push(paramNameSlice);\r\n j = i + 1;\r\n batchSize = 0;\r\n }\r\n }\r\n } else {\r\n paramNameSet = paramName;\r\n }\r\n data.originalFiles = files;\r\n $.each(fileSet || files, function (index, element) {\r\n var newData = $.extend({}, data);\r\n newData.files = fileSet ? element : [element];\r\n newData.paramName = paramNameSet[index];\r\n that._initResponseObject(newData);\r\n that._initProgressObject(newData);\r\n that._addConvenienceMethods(e, newData);\r\n result = that._trigger(\r\n 'add',\r\n $.Event('add', {delegatedEvent: e}),\r\n newData\r\n );\r\n return result;\r\n });\r\n return result;\r\n },\r\n\r\n _replaceFileInput: function (data) {\r\n var input = data.fileInput,\r\n inputClone = input.clone(true),\r\n restoreFocus = input.is(document.activeElement);\r\n // Add a reference for the new cloned file input to the data argument:\r\n data.fileInputClone = inputClone;\r\n $('<form></form>').append(inputClone)[0].reset();\r\n // Detaching allows to insert the fileInput on another form\r\n // without loosing the file input value:\r\n input.after(inputClone).detach();\r\n // If the fileInput had focus before it was detached,\r\n // restore focus to the inputClone.\r\n if (restoreFocus) {\r\n inputClone.focus();\r\n }\r\n // Avoid memory leaks with the detached file input:\r\n $.cleanData(input.unbind('remove'));\r\n // Replace the original file input element in the fileInput\r\n // elements set with the clone, which has been copied including\r\n // event handlers:\r\n this.options.fileInput = this.options.fileInput.map(function (i, el) {\r\n if (el === input[0]) {\r\n return inputClone[0];\r\n }\r\n return el;\r\n });\r\n // If the widget has been initialized on the file input itself,\r\n // override this.element with the file input clone:\r\n if (input[0] === this.element[0]) {\r\n this.element = inputClone;\r\n }\r\n },\r\n\r\n _handleFileTreeEntry: function (entry, path) {\r\n var that = this,\r\n dfd = $.Deferred(),\r\n errorHandler = function (e) {\r\n if (e && !e.entry) {\r\n e.entry = entry;\r\n }\r\n // Since $.when returns immediately if one\r\n // Deferred is rejected, we use resolve instead.\r\n // This allows valid files and invalid items\r\n // to be returned together in one set:\r\n dfd.resolve([e]);\r\n },\r\n successHandler = function (entries) {\r\n that._handleFileTreeEntries(\r\n entries,\r\n path + entry.name + '/'\r\n ).done(function (files) {\r\n dfd.resolve(files);\r\n }).fail(errorHandler);\r\n },\r\n readEntries = function () {\r\n dirReader.readEntries(function (results) {\r\n if (!results.length) {\r\n successHandler(entries);\r\n } else {\r\n entries = entries.concat(results);\r\n readEntries();\r\n }\r\n }, errorHandler);\r\n },\r\n dirReader, entries = [];\r\n path = path || '';\r\n if (entry.isFile) {\r\n if (entry._file) {\r\n // Workaround for Chrome bug #149735\r\n entry._file.relativePath = path;\r\n dfd.resolve(entry._file);\r\n } else {\r\n entry.file(function (file) {\r\n file.relativePath = path;\r\n dfd.resolve(file);\r\n }, errorHandler);\r\n }\r\n } else if (entry.isDirectory) {\r\n dirReader = entry.createReader();\r\n readEntries();\r\n } else {\r\n // Return an empy list for file system items\r\n // other than files or directories:\r\n dfd.resolve([]);\r\n }\r\n return dfd.promise();\r\n },\r\n\r\n _handleFileTreeEntries: function (entries, path) {\r\n var that = this;\r\n return $.when.apply(\r\n $,\r\n $.map(entries, function (entry) {\r\n return that._handleFileTreeEntry(entry, path);\r\n })\r\n ).pipe(function () {\r\n return Array.prototype.concat.apply(\r\n [],\r\n arguments\r\n );\r\n });\r\n },\r\n\r\n _getDroppedFiles: function (dataTransfer) {\r\n dataTransfer = dataTransfer || {};\r\n var items = dataTransfer.items;\r\n if (items && items.length && (items[0].webkitGetAsEntry ||\r\n items[0].getAsEntry)) {\r\n return this._handleFileTreeEntries(\r\n $.map(items, function (item) {\r\n var entry;\r\n if (item.webkitGetAsEntry) {\r\n entry = item.webkitGetAsEntry();\r\n if (entry) {\r\n // Workaround for Chrome bug #149735:\r\n entry._file = item.getAsFile();\r\n }\r\n return entry;\r\n }\r\n return item.getAsEntry();\r\n })\r\n );\r\n }\r\n return $.Deferred().resolve(\r\n $.makeArray(dataTransfer.files)\r\n ).promise();\r\n },\r\n\r\n _getSingleFileInputFiles: function (fileInput) {\r\n fileInput = $(fileInput);\r\n var entries = fileInput.prop('webkitEntries') ||\r\n fileInput.prop('entries'),\r\n files,\r\n value;\r\n if (entries && entries.length) {\r\n return this._handleFileTreeEntries(entries);\r\n }\r\n files = $.makeArray(fileInput.prop('files'));\r\n if (!files.length) {\r\n value = fileInput.prop('value');\r\n if (!value) {\r\n return $.Deferred().resolve([]).promise();\r\n }\r\n // If the files property is not available, the browser does not\r\n // support the File API and we add a pseudo File object with\r\n // the input value as name with path information removed:\r\n files = [{name: value.replace(/^.*\\\\/, '')}];\r\n } else if (files[0].name === undefined && files[0].fileName) {\r\n // File normalization for Safari 4 and Firefox 3:\r\n $.each(files, function (index, file) {\r\n file.name = file.fileName;\r\n file.size = file.fileSize;\r\n });\r\n }\r\n return $.Deferred().resolve(files).promise();\r\n },\r\n\r\n _getFileInputFiles: function (fileInput) {\r\n if (!(fileInput instanceof $) || fileInput.length === 1) {\r\n return this._getSingleFileInputFiles(fileInput);\r\n }\r\n return $.when.apply(\r\n $,\r\n $.map(fileInput, this._getSingleFileInputFiles)\r\n ).pipe(function () {\r\n return Array.prototype.concat.apply(\r\n [],\r\n arguments\r\n );\r\n });\r\n },\r\n\r\n _onChange: function (e) {\r\n var that = this,\r\n data = {\r\n fileInput: $(e.target),\r\n form: $(e.target.form)\r\n };\r\n this._getFileInputFiles(data.fileInput).always(function (files) {\r\n data.files = files;\r\n if (that.options.replaceFileInput) {\r\n that._replaceFileInput(data);\r\n }\r\n if (that._trigger(\r\n 'change',\r\n $.Event('change', {delegatedEvent: e}),\r\n data\r\n ) !== false) {\r\n that._onAdd(e, data);\r\n }\r\n });\r\n },\r\n\r\n _onPaste: function (e) {\r\n var items = e.originalEvent && e.originalEvent.clipboardData &&\r\n e.originalEvent.clipboardData.items,\r\n data = {files: []};\r\n if (items && items.length) {\r\n $.each(items, function (index, item) {\r\n var file = item.getAsFile && item.getAsFile();\r\n if (file) {\r\n data.files.push(file);\r\n }\r\n });\r\n if (this._trigger(\r\n 'paste',\r\n $.Event('paste', {delegatedEvent: e}),\r\n data\r\n ) !== false) {\r\n this._onAdd(e, data);\r\n }\r\n }\r\n },\r\n\r\n _onDrop: function (e) {\r\n e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\r\n var that = this,\r\n dataTransfer = e.dataTransfer,\r\n data = {};\r\n if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\r\n e.preventDefault();\r\n this._getDroppedFiles(dataTransfer).always(function (files) {\r\n data.files = files;\r\n if (that._trigger(\r\n 'drop',\r\n $.Event('drop', {delegatedEvent: e}),\r\n data\r\n ) !== false) {\r\n that._onAdd(e, data);\r\n }\r\n });\r\n }\r\n },\r\n\r\n _onDragOver: getDragHandler('dragover'),\r\n\r\n _onDragEnter: getDragHandler('dragenter'),\r\n\r\n _onDragLeave: getDragHandler('dragleave'),\r\n\r\n _initEventHandlers: function () {\r\n if (this._isXHRUpload(this.options)) {\r\n this._on(this.options.dropZone, {\r\n dragover: this._onDragOver,\r\n drop: this._onDrop,\r\n // event.preventDefault() on dragenter is required for IE10+:\r\n dragenter: this._onDragEnter,\r\n // dragleave is not required, but added for completeness:\r\n dragleave: this._onDragLeave\r\n });\r\n this._on(this.options.pasteZone, {\r\n paste: this._onPaste\r\n });\r\n }\r\n if ($.support.fileInput) {\r\n this._on(this.options.fileInput, {\r\n change: this._onChange\r\n });\r\n }\r\n },\r\n\r\n _destroyEventHandlers: function () {\r\n this._off(this.options.dropZone, 'dragenter dragleave dragover drop');\r\n this._off(this.options.pasteZone, 'paste');\r\n this._off(this.options.fileInput, 'change');\r\n },\r\n\r\n _setOption: function (key, value) {\r\n var reinit = $.inArray(key, this._specialOptions) !== -1;\r\n if (reinit) {\r\n this._destroyEventHandlers();\r\n }\r\n this._super(key, value);\r\n if (reinit) {\r\n this._initSpecialOptions();\r\n this._initEventHandlers();\r\n }\r\n },\r\n\r\n _initSpecialOptions: function () {\r\n var options = this.options;\r\n if (options.fileInput === undefined) {\r\n options.fileInput = this.element.is('input[type=\"file\"]') ?\r\n this.element : this.element.find('input[type=\"file\"]');\r\n } else if (!(options.fileInput instanceof $)) {\r\n options.fileInput = $(options.fileInput);\r\n }\r\n if (!(options.dropZone instanceof $)) {\r\n options.dropZone = $(options.dropZone);\r\n }\r\n if (!(options.pasteZone instanceof $)) {\r\n options.pasteZone = $(options.pasteZone);\r\n }\r\n },\r\n\r\n _getRegExp: function (str) {\r\n var parts = str.split('/'),\r\n modifiers = parts.pop();\r\n parts.shift();\r\n return new RegExp(parts.join('/'), modifiers);\r\n },\r\n\r\n _isRegExpOption: function (key, value) {\r\n return key !== 'url' && $.type(value) === 'string' &&\r\n /^\\/.*\\/[igm]{0,3}$/.test(value);\r\n },\r\n\r\n _initDataAttributes: function () {\r\n var that = this,\r\n options = this.options,\r\n data = this.element.data();\r\n // Initialize options set via HTML5 data-attributes:\r\n $.each(\r\n this.element[0].attributes,\r\n function (index, attr) {\r\n var key = attr.name.toLowerCase(),\r\n value;\r\n if (/^data-/.test(key)) {\r\n // Convert hyphen-ated key to camelCase:\r\n key = key.slice(5).replace(/-[a-z]/g, function (str) {\r\n return str.charAt(1).toUpperCase();\r\n });\r\n value = data[key];\r\n if (that._isRegExpOption(key, value)) {\r\n value = that._getRegExp(value);\r\n }\r\n options[key] = value;\r\n }\r\n }\r\n );\r\n },\r\n\r\n _create: function () {\r\n this._initDataAttributes();\r\n this._initSpecialOptions();\r\n this._slots = [];\r\n this._sequence = this._getXHRPromise(true);\r\n this._sending = this._active = 0;\r\n this._initProgressObject(this);\r\n this._initEventHandlers();\r\n },\r\n\r\n // This method is exposed to the widget API and allows to query\r\n // the number of active uploads:\r\n active: function () {\r\n return this._active;\r\n },\r\n\r\n // This method is exposed to the widget API and allows to query\r\n // the widget upload progress.\r\n // It returns an object with loaded, total and bitrate properties\r\n // for the running uploads:\r\n progress: function () {\r\n return this._progress;\r\n },\r\n\r\n // This method is exposed to the widget API and allows adding files\r\n // using the fileupload API. The data parameter accepts an object which\r\n // must have a files property and can contain additional options:\r\n // .fileupload('add', {files: filesList});\r\n add: function (data) {\r\n var that = this;\r\n if (!data || this.options.disabled) {\r\n return;\r\n }\r\n if (data.fileInput && !data.files) {\r\n this._getFileInputFiles(data.fileInput).always(function (files) {\r\n data.files = files;\r\n that._onAdd(null, data);\r\n });\r\n } else {\r\n data.files = $.makeArray(data.files);\r\n this._onAdd(null, data);\r\n }\r\n },\r\n\r\n // This method is exposed to the widget API and allows sending files\r\n // using the fileupload API. The data parameter accepts an object which\r\n // must have a files or fileInput property and can contain additional options:\r\n // .fileupload('send', {files: filesList});\r\n // The method returns a Promise object for the file upload call.\r\n send: function (data) {\r\n if (data && !this.options.disabled) {\r\n if (data.fileInput && !data.files) {\r\n var that = this,\r\n dfd = $.Deferred(),\r\n promise = dfd.promise(),\r\n jqXHR,\r\n aborted;\r\n promise.abort = function () {\r\n aborted = true;\r\n if (jqXHR) {\r\n return jqXHR.abort();\r\n }\r\n dfd.reject(null, 'abort', 'abort');\r\n return promise;\r\n };\r\n this._getFileInputFiles(data.fileInput).always(\r\n function (files) {\r\n if (aborted) {\r\n return;\r\n }\r\n if (!files.length) {\r\n dfd.reject();\r\n return;\r\n }\r\n data.files = files;\r\n jqXHR = that._onSend(null, data);\r\n jqXHR.then(\r\n function (result, textStatus, jqXHR) {\r\n dfd.resolve(result, textStatus, jqXHR);\r\n },\r\n function (jqXHR, textStatus, errorThrown) {\r\n dfd.reject(jqXHR, textStatus, errorThrown);\r\n }\r\n );\r\n }\r\n );\r\n return this._enhancePromise(promise);\r\n }\r\n data.files = $.makeArray(data.files);\r\n if (data.files.length) {\r\n return this._onSend(null, data);\r\n }\r\n }\r\n return this._getXHRPromise(false, data && data.context);\r\n }\r\n\r\n });\r\n\r\n}));\r\n","/*\r\n * jQuery File Upload Processing Plugin\r\n * https://github.com/blueimp/jQuery-File-Upload\r\n *\r\n * Copyright 2012, Sebastian Tschan\r\n * https://blueimp.net\r\n *\r\n * Licensed under the MIT license:\r\n * http://www.opensource.org/licenses/MIT\r\n */\r\n\r\n/* jshint nomen:false */\r\n/* global define, require, window */\r\n\r\n(function (factory) {\r\n 'use strict';\r\n if (typeof define === 'function' && define.amd) {\r\n // Register as an anonymous AMD module:\r\n define([\r\n 'jquery',\r\n './jquery.fileupload'\r\n ], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS:\r\n factory(require('jquery'));\r\n } else {\r\n // Browser globals:\r\n factory(\r\n window.jQuery\r\n );\r\n }\r\n}(function ($) {\r\n 'use strict';\r\n\r\n var originalAdd = $.blueimp.fileupload.prototype.options.add;\r\n\r\n // The File Upload Processing plugin extends the fileupload widget\r\n // with file processing functionality:\r\n $.widget('blueimp.fileupload', $.blueimp.fileupload, {\r\n\r\n options: {\r\n // The list of processing actions:\r\n processQueue: [\r\n /*\r\n {\r\n action: 'log',\r\n type: 'debug'\r\n }\r\n */\r\n ],\r\n add: function (e, data) {\r\n var $this = $(this);\r\n data.process(function () {\r\n return $this.fileupload('process', data);\r\n });\r\n originalAdd.call(this, e, data);\r\n }\r\n },\r\n\r\n processActions: {\r\n /*\r\n log: function (data, options) {\r\n console[options.type](\r\n 'Processing \"' + data.files[data.index].name + '\"'\r\n );\r\n }\r\n */\r\n },\r\n\r\n _processFile: function (data, originalData) {\r\n var that = this,\r\n dfd = $.Deferred().resolveWith(that, [data]),\r\n chain = dfd.promise();\r\n this._trigger('process', null, data);\r\n $.each(data.processQueue, function (i, settings) {\r\n var func = function (data) {\r\n if (originalData.errorThrown) {\r\n return $.Deferred()\r\n .rejectWith(that, [originalData]).promise();\r\n }\r\n return that.processActions[settings.action].call(\r\n that,\r\n data,\r\n settings\r\n );\r\n };\r\n chain = chain.pipe(func, settings.always && func);\r\n });\r\n chain\r\n .done(function () {\r\n that._trigger('processdone', null, data);\r\n that._trigger('processalways', null, data);\r\n })\r\n .fail(function () {\r\n that._trigger('processfail', null, data);\r\n that._trigger('processalways', null, data);\r\n });\r\n return chain;\r\n },\r\n\r\n // Replaces the settings of each processQueue item that\r\n // are strings starting with an \"@\", using the remaining\r\n // substring as key for the option map,\r\n // e.g. \"@autoUpload\" is replaced with options.autoUpload:\r\n _transformProcessQueue: function (options) {\r\n var processQueue = [];\r\n $.each(options.processQueue, function () {\r\n var settings = {},\r\n action = this.action,\r\n prefix = this.prefix === true ? action : this.prefix;\r\n $.each(this, function (key, value) {\r\n if ($.type(value) === 'string' &&\r\n value.charAt(0) === '@') {\r\n settings[key] = options[\r\n value.slice(1) || (prefix ? prefix +\r\n key.charAt(0).toUpperCase() + key.slice(1) : key)\r\n ];\r\n } else {\r\n settings[key] = value;\r\n }\r\n\r\n });\r\n processQueue.push(settings);\r\n });\r\n options.processQueue = processQueue;\r\n },\r\n\r\n // Returns the number of files currently in the processsing queue:\r\n processing: function () {\r\n return this._processing;\r\n },\r\n\r\n // Processes the files given as files property of the data parameter,\r\n // returns a Promise object that allows to bind callbacks:\r\n process: function (data) {\r\n var that = this,\r\n options = $.extend({}, this.options, data);\r\n if (options.processQueue && options.processQueue.length) {\r\n this._transformProcessQueue(options);\r\n if (this._processing === 0) {\r\n this._trigger('processstart');\r\n }\r\n $.each(data.files, function (index) {\r\n var opts = index ? $.extend({}, options) : options,\r\n func = function () {\r\n if (data.errorThrown) {\r\n return $.Deferred()\r\n .rejectWith(that, [data]).promise();\r\n }\r\n return that._processFile(opts, data);\r\n };\r\n opts.index = index;\r\n that._processing += 1;\r\n that._processingQueue = that._processingQueue.pipe(func, func)\r\n .always(function () {\r\n that._processing -= 1;\r\n if (that._processing === 0) {\r\n that._trigger('processstop');\r\n }\r\n });\r\n });\r\n }\r\n return this._processingQueue;\r\n },\r\n\r\n _create: function () {\r\n this._super();\r\n this._processing = 0;\r\n this._processingQueue = $.Deferred().resolveWith(this)\r\n .promise();\r\n }\r\n\r\n });\r\n\r\n}));\r\n","/*\r\n * jQuery File Upload Validation Plugin\r\n * https://github.com/blueimp/jQuery-File-Upload\r\n *\r\n * Copyright 2013, Sebastian Tschan\r\n * https://blueimp.net\r\n *\r\n * Licensed under the MIT license:\r\n * http://www.opensource.org/licenses/MIT\r\n */\r\n\r\n/* global define, require, window */\r\n\r\n(function (factory) {\r\n 'use strict';\r\n if (typeof define === 'function' && define.amd) {\r\n // Register as an anonymous AMD module:\r\n define([\r\n 'jquery',\r\n './jquery.fileupload-process'\r\n ], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS:\r\n factory(require('jquery'));\r\n } else {\r\n // Browser globals:\r\n factory(\r\n window.jQuery\r\n );\r\n }\r\n}(function ($) {\r\n 'use strict';\r\n\r\n // Append to the default processQueue:\r\n $.blueimp.fileupload.prototype.options.processQueue.push(\r\n {\r\n action: 'validate',\r\n // Always trigger this action,\r\n // even if the previous action was rejected:\r\n always: true,\r\n // Options taken from the global options map:\r\n acceptFileTypes: '@',\r\n maxFileSize: '@',\r\n minFileSize: '@',\r\n maxNumberOfFiles: '@',\r\n disabled: '@disableValidation'\r\n }\r\n );\r\n\r\n // The File Upload Validation plugin extends the fileupload widget\r\n // with file validation functionality:\r\n $.widget('blueimp.fileupload', $.blueimp.fileupload, {\r\n\r\n options: {\r\n /*\r\n // The regular expression for allowed file types, matches\r\n // against either file type or file name:\r\n acceptFileTypes: /(\\.|\\/)(gif|jpe?g|png)$/i,\r\n // The maximum allowed file size in bytes:\r\n maxFileSize: 10000000, // 10 MB\r\n // The minimum allowed file size in bytes:\r\n minFileSize: undefined, // No minimal file size\r\n // The limit of files to be uploaded:\r\n maxNumberOfFiles: 10,\r\n */\r\n\r\n // Function returning the current number of files,\r\n // has to be overriden for maxNumberOfFiles validation:\r\n getNumberOfFiles: $.noop,\r\n\r\n // Error and info messages:\r\n messages: {\r\n maxNumberOfFiles: 'Maximum number of files exceeded',\r\n acceptFileTypes: 'File type not allowed',\r\n maxFileSize: 'File is too large',\r\n minFileSize: 'File is too small'\r\n }\r\n },\r\n\r\n processActions: {\r\n\r\n validate: function (data, options) {\r\n if (options.disabled) {\r\n return data;\r\n }\r\n var dfd = $.Deferred(),\r\n settings = this.options,\r\n file = data.files[data.index],\r\n fileSize;\r\n if (options.minFileSize || options.maxFileSize) {\r\n fileSize = file.size;\r\n }\r\n if ($.type(options.maxNumberOfFiles) === 'number' &&\r\n (settings.getNumberOfFiles() || 0) + data.files.length >\r\n options.maxNumberOfFiles) {\r\n file.error = settings.i18n('maxNumberOfFiles');\r\n } else if (options.acceptFileTypes &&\r\n !(options.acceptFileTypes.test(file.type) ||\r\n options.acceptFileTypes.test(file.name))) {\r\n file.error = settings.i18n('acceptFileTypes');\r\n } else if (fileSize > options.maxFileSize) {\r\n file.error = settings.i18n('maxFileSize');\r\n } else if ($.type(fileSize) === 'number' &&\r\n fileSize < options.minFileSize) {\r\n file.error = settings.i18n('minFileSize');\r\n } else {\r\n delete file.error;\r\n }\r\n if (file.error || data.files.error) {\r\n data.files.error = true;\r\n dfd.rejectWith(this, [data]);\r\n } else {\r\n dfd.resolveWith(this, [data]);\r\n }\r\n return dfd.promise();\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n}));\r\n","/*************************\r\n * Croppie\r\n * Copyright 2018\r\n * Foliotek\r\n * Version: 2.6.3\r\n *************************/\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(factory);\r\n } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {\r\n // CommonJS\r\n module.exports = factory();\r\n } else {\r\n // Browser globals\r\n root.Croppie = factory();\r\n }\r\n}(typeof self !== 'undefined' ? self : this, function () {\r\n\r\n /* Polyfills */\r\n if (typeof Promise !== 'function') {\r\n /*! promise-polyfill 3.1.0 */\r\n !function(a){function b(a,b){return function(){a.apply(b,arguments)}}function c(a){if(\"object\"!==typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!==typeof a)throw new TypeError(\"not a function\");this._state=null,this._value=null,this._deferreds=[],i(a,b(e,this),b(f,this))}function d(a){var b=this;return null===this._state?void this._deferreds.push(a):void k(function(){var c=b._state?a.onFulfilled:a.onRejected;if(null===c)return void(b._state?a.resolve:a.reject)(b._value);var d;try{d=c(b._value)}catch(e){return void a.reject(e)}a.resolve(d)})}function e(a){try{if(a===this)throw new TypeError(\"A promise cannot be resolved with itself.\");if(a&&(\"object\"===typeof a||\"function\"===typeof a)){var c=a.then;if(\"function\"===typeof c)return void i(b(c,a),b(e,this),b(f,this))}this._state=!0,this._value=a,g.call(this)}catch(d){f.call(this,d)}}function f(a){this._state=!1,this._value=a,g.call(this)}function g(){for(var a=0,b=this._deferreds.length;b>a;a++)d.call(this,this._deferreds[a]);this._deferreds=null}function h(a,b,c,d){this.onFulfilled=\"function\"===typeof a?a:null,this.onRejected=\"function\"===typeof b?b:null,this.resolve=c,this.reject=d}function i(a,b,c){var d=!1;try{a(function(a){d||(d=!0,b(a))},function(a){d||(d=!0,c(a))})}catch(e){if(d)return;d=!0,c(e)}}var j=setTimeout,k=\"function\"===typeof setImmediate&&setImmediate||function(a){j(a,1)},l=Array.isArray||function(a){return\"[object Array]\"===Object.prototype.toString.call(a)};c.prototype[\"catch\"]=function(a){return this.then(null,a)},c.prototype.then=function(a,b){var e=this;return new c(function(c,f){d.call(e,new h(a,b,c,f))})},c.all=function(){var a=Array.prototype.slice.call(1===arguments.length&&l(arguments[0])?arguments[0]:arguments);return new c(function(b,c){function d(f,g){try{if(g&&(\"object\"===typeof g||\"function\"===typeof g)){var h=g.then;if(\"function\"===typeof h)return void h.call(g,function(a){d(f,a)},c)}a[f]=g,0===--e&&b(a)}catch(i){c(i)}}if(0===a.length)return b([]);for(var e=a.length,f=0;f<a.length;f++)d(f,a[f])})},c.resolve=function(a){return a&&\"object\"===typeof a&&a.constructor===c?a:new c(function(b){b(a)})},c.reject=function(a){return new c(function(b,c){c(a)})},c.race=function(a){return new c(function(b,c){for(var d=0,e=a.length;e>d;d++)a[d].then(b,c)})},c._setImmediateFn=function(a){k=a},\"undefined\"!==typeof module&&module.exports?module.exports=c:a.Promise||(a.Promise=c)}(this);\r\n }\r\n\r\n if ( typeof window.CustomEvent !== \"function\" ) {\r\n (function(){\r\n function CustomEvent ( event, params ) {\r\n params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n var evt = document.createEvent( 'CustomEvent' );\r\n evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\r\n return evt;\r\n }\r\n CustomEvent.prototype = window.Event.prototype;\r\n window.CustomEvent = CustomEvent;\r\n }());\r\n }\r\n\r\n if (!HTMLCanvasElement.prototype.toBlob) {\r\n Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {\r\n value: function (callback, type, quality) {\r\n var binStr = atob( this.toDataURL(type, quality).split(',')[1] ),\r\n len = binStr.length,\r\n arr = new Uint8Array(len);\r\n\r\n for (var i=0; i<len; i++ ) {\r\n arr[i] = binStr.charCodeAt(i);\r\n }\r\n\r\n callback( new Blob( [arr], {type: type || 'image/png'} ) );\r\n }\r\n });\r\n }\r\n /* End Polyfills */\r\n\r\n var cssPrefixes = ['Webkit', 'Moz', 'ms'],\r\n emptyStyles = document.createElement('div').style,\r\n EXIF_NORM = [1,8,3,6],\r\n EXIF_FLIP = [2,7,4,5],\r\n CSS_TRANS_ORG,\r\n CSS_TRANSFORM,\r\n CSS_USERSELECT;\r\n\r\n function vendorPrefix(prop) {\r\n if (prop in emptyStyles) {\r\n return prop;\r\n }\r\n\r\n var capProp = prop[0].toUpperCase() + prop.slice(1),\r\n i = cssPrefixes.length;\r\n\r\n while (i--) {\r\n prop = cssPrefixes[i] + capProp;\r\n if (prop in emptyStyles) {\r\n return prop;\r\n }\r\n }\r\n }\r\n\r\n CSS_TRANSFORM = vendorPrefix('transform');\r\n CSS_TRANS_ORG = vendorPrefix('transformOrigin');\r\n CSS_USERSELECT = vendorPrefix('userSelect');\r\n\r\n function getExifOffset(ornt, rotate) {\r\n var arr = EXIF_NORM.indexOf(ornt) > -1 ? EXIF_NORM : EXIF_FLIP,\r\n index = arr.indexOf(ornt),\r\n offset = (rotate / 90) % arr.length;// 180 = 2%4 = 2 shift exif by 2 indexes\r\n\r\n return arr[(arr.length + index + (offset % arr.length)) % arr.length];\r\n }\r\n\r\n // Credits to : Andrew Dupont - http://andrewdupont.net/2009/08/28/deep-extending-objects-in-javascript/\r\n function deepExtend(destination, source) {\r\n destination = destination || {};\r\n for (var property in source) {\r\n if (source[property] && source[property].constructor && source[property].constructor === Object) {\r\n destination[property] = destination[property] || {};\r\n deepExtend(destination[property], source[property]);\r\n } else {\r\n destination[property] = source[property];\r\n }\r\n }\r\n return destination;\r\n }\r\n\r\n function clone(object) {\r\n return deepExtend({}, object);\r\n }\r\n\r\n function debounce(func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this, args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n }\r\n\r\n function dispatchChange(element) {\r\n if (\"createEvent\" in document) {\r\n var evt = document.createEvent(\"HTMLEvents\");\r\n evt.initEvent(\"change\", false, true);\r\n element.dispatchEvent(evt);\r\n }\r\n else {\r\n element.fireEvent(\"onchange\");\r\n }\r\n }\r\n\r\n //http://jsperf.com/vanilla-css\r\n function css(el, styles, val) {\r\n if (typeof (styles) === 'string') {\r\n var tmp = styles;\r\n styles = {};\r\n styles[tmp] = val;\r\n }\r\n\r\n for (var prop in styles) {\r\n el.style[prop] = styles[prop];\r\n }\r\n }\r\n\r\n function addClass(el, c) {\r\n if (el.classList) {\r\n el.classList.add(c);\r\n }\r\n else {\r\n el.className += ' ' + c;\r\n }\r\n }\r\n\r\n function removeClass(el, c) {\r\n if (el.classList) {\r\n el.classList.remove(c);\r\n }\r\n else {\r\n el.className = el.className.replace(c, '');\r\n }\r\n }\r\n\r\n function setAttributes(el, attrs) {\r\n for (var key in attrs) {\r\n el.setAttribute(key, attrs[key]);\r\n }\r\n }\r\n\r\n function num(v) {\r\n return parseInt(v, 10);\r\n }\r\n\r\n /* Utilities */\r\n function loadImage(src, doExif) {\r\n var img = new Image();\r\n img.style.opacity = '0';\r\n return new Promise(function (resolve, reject) {\r\n function _resolve() {\r\n img.style.opacity = '1';\r\n setTimeout(function () {\r\n resolve(img);\r\n }, 1);\r\n }\r\n\r\n img.removeAttribute('crossOrigin');\r\n if (src.match(/^https?:\\/\\/|^\\/\\//)) {\r\n img.setAttribute('crossOrigin', 'anonymous');\r\n }\r\n\r\n img.onload = function () {\r\n if (doExif) {\r\n EXIF.getData(img, function () {\r\n _resolve();\r\n });\r\n }\r\n else {\r\n _resolve();\r\n }\r\n };\r\n img.onerror = function (ev) {\r\n img.style.opacity = 1;\r\n setTimeout(function () {\r\n reject(ev);\r\n }, 1);\r\n };\r\n img.src = src;\r\n });\r\n }\r\n\r\n function naturalImageDimensions(img, ornt) {\r\n var w = img.naturalWidth;\r\n var h = img.naturalHeight;\r\n var orient = ornt || getExifOrientation(img);\r\n if (orient && orient >= 5) {\r\n var x= w;\r\n w = h;\r\n h = x;\r\n }\r\n return { width: w, height: h };\r\n }\r\n\r\n /* CSS Transform Prototype */\r\n var TRANSLATE_OPTS = {\r\n 'translate3d': {\r\n suffix: ', 0px'\r\n },\r\n 'translate': {\r\n suffix: ''\r\n }\r\n };\r\n var Transform = function (x, y, scale) {\r\n this.x = parseFloat(x);\r\n this.y = parseFloat(y);\r\n this.scale = parseFloat(scale);\r\n };\r\n\r\n Transform.parse = function (v) {\r\n if (v.style) {\r\n return Transform.parse(v.style[CSS_TRANSFORM]);\r\n }\r\n else if (v.indexOf('matrix') > -1 || v.indexOf('none') > -1) {\r\n return Transform.fromMatrix(v);\r\n }\r\n else {\r\n return Transform.fromString(v);\r\n }\r\n };\r\n\r\n Transform.fromMatrix = function (v) {\r\n var vals = v.substring(7).split(',');\r\n if (!vals.length || v === 'none') {\r\n vals = [1, 0, 0, 1, 0, 0];\r\n }\r\n\r\n return new Transform(num(vals[4]), num(vals[5]), parseFloat(vals[0]));\r\n };\r\n\r\n Transform.fromString = function (v) {\r\n var values = v.split(') '),\r\n translate = values[0].substring(Croppie.globals.translate.length + 1).split(','),\r\n scale = values.length > 1 ? values[1].substring(6) : 1,\r\n x = translate.length > 1 ? translate[0] : 0,\r\n y = translate.length > 1 ? translate[1] : 0;\r\n\r\n return new Transform(x, y, scale);\r\n };\r\n\r\n Transform.prototype.toString = function () {\r\n var suffix = TRANSLATE_OPTS[Croppie.globals.translate].suffix || '';\r\n return Croppie.globals.translate + '(' + this.x + 'px, ' + this.y + 'px' + suffix + ') scale(' + this.scale + ')';\r\n };\r\n\r\n var TransformOrigin = function (el) {\r\n if (!el || !el.style[CSS_TRANS_ORG]) {\r\n this.x = 0;\r\n this.y = 0;\r\n return;\r\n }\r\n var css = el.style[CSS_TRANS_ORG].split(' ');\r\n this.x = parseFloat(css[0]);\r\n this.y = parseFloat(css[1]);\r\n };\r\n\r\n TransformOrigin.prototype.toString = function () {\r\n return this.x + 'px ' + this.y + 'px';\r\n };\r\n\r\n function getExifOrientation (img) {\r\n return img.exifdata && img.exifdata.Orientation ? num(img.exifdata.Orientation) : 1;\r\n }\r\n\r\n function drawCanvas(canvas, img, orientation) {\r\n var width = img.width,\r\n height = img.height,\r\n ctx = canvas.getContext('2d');\r\n\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n ctx.save();\r\n switch (orientation) {\r\n case 2:\r\n ctx.translate(width, 0);\r\n ctx.scale(-1, 1);\r\n break;\r\n\r\n case 3:\r\n ctx.translate(width, height);\r\n ctx.rotate(180*Math.PI/180);\r\n break;\r\n\r\n case 4:\r\n ctx.translate(0, height);\r\n ctx.scale(1, -1);\r\n break;\r\n\r\n case 5:\r\n canvas.width = height;\r\n canvas.height = width;\r\n ctx.rotate(90*Math.PI/180);\r\n ctx.scale(1, -1);\r\n break;\r\n\r\n case 6:\r\n canvas.width = height;\r\n canvas.height = width;\r\n ctx.rotate(90*Math.PI/180);\r\n ctx.translate(0, -height);\r\n break;\r\n\r\n case 7:\r\n canvas.width = height;\r\n canvas.height = width;\r\n ctx.rotate(-90*Math.PI/180);\r\n ctx.translate(-width, height);\r\n ctx.scale(1, -1);\r\n break;\r\n\r\n case 8:\r\n canvas.width = height;\r\n canvas.height = width;\r\n ctx.translate(0, width);\r\n ctx.rotate(-90*Math.PI/180);\r\n break;\r\n }\r\n ctx.drawImage(img, 0,0, width, height);\r\n ctx.restore();\r\n }\r\n\r\n /* Private Methods */\r\n function _create() {\r\n var self = this,\r\n contClass = 'croppie-container',\r\n customViewportClass = self.options.viewport.type ? 'cr-vp-' + self.options.viewport.type : null,\r\n boundary, img, viewport, overlay, bw, bh;\r\n\r\n self.options.useCanvas = self.options.enableOrientation || _hasExif.call(self);\r\n // Properties on class\r\n self.data = {};\r\n self.elements = {};\r\n\r\n boundary = self.elements.boundary = document.createElement('div');\r\n viewport = self.elements.viewport = document.createElement('div');\r\n img = self.elements.img = document.createElement('img');\r\n overlay = self.elements.overlay = document.createElement('div');\r\n\r\n if (self.options.useCanvas) {\r\n self.elements.canvas = document.createElement('canvas');\r\n self.elements.preview = self.elements.canvas;\r\n }\r\n else {\r\n self.elements.preview = img;\r\n }\r\n\r\n addClass(boundary, 'cr-boundary');\r\n boundary.setAttribute('aria-dropeffect', 'none');\r\n bw = self.options.boundary.width;\r\n bh = self.options.boundary.height;\r\n css(boundary, {\r\n width: (bw + (isNaN(bw) ? '' : 'px')),\r\n height: (bh + (isNaN(bh) ? '' : 'px'))\r\n });\r\n\r\n addClass(viewport, 'cr-viewport');\r\n if (customViewportClass) {\r\n addClass(viewport, customViewportClass);\r\n }\r\n css(viewport, {\r\n width: self.options.viewport.width + 'px',\r\n height: self.options.viewport.height + 'px'\r\n });\r\n viewport.setAttribute('tabindex', 0);\r\n\r\n addClass(self.elements.preview, 'cr-image');\r\n setAttributes(self.elements.preview, { 'alt': 'preview', 'aria-grabbed': 'false' });\r\n addClass(overlay, 'cr-overlay');\r\n\r\n self.element.appendChild(boundary);\r\n boundary.appendChild(self.elements.preview);\r\n boundary.appendChild(viewport);\r\n boundary.appendChild(overlay);\r\n\r\n addClass(self.element, contClass);\r\n if (self.options.customClass) {\r\n addClass(self.element, self.options.customClass);\r\n }\r\n\r\n _initDraggable.call(this);\r\n\r\n if (self.options.enableZoom) {\r\n _initializeZoom.call(self);\r\n }\r\n\r\n // if (self.options.enableOrientation) {\r\n // _initRotationControls.call(self);\r\n // }\r\n\r\n if (self.options.enableResize) {\r\n _initializeResize.call(self);\r\n }\r\n }\r\n\r\n // function _initRotationControls () {\r\n // var self = this,\r\n // wrap, btnLeft, btnRight, iLeft, iRight;\r\n\r\n // wrap = document.createElement('div');\r\n // self.elements.orientationBtnLeft = btnLeft = document.createElement('button');\r\n // self.elements.orientationBtnRight = btnRight = document.createElement('button');\r\n\r\n // wrap.appendChild(btnLeft);\r\n // wrap.appendChild(btnRight);\r\n\r\n // iLeft = document.createElement('i');\r\n // iRight = document.createElement('i');\r\n // btnLeft.appendChild(iLeft);\r\n // btnRight.appendChild(iRight);\r\n\r\n // addClass(wrap, 'cr-rotate-controls');\r\n // addClass(btnLeft, 'cr-rotate-l');\r\n // addClass(btnRight, 'cr-rotate-r');\r\n\r\n // self.elements.boundary.appendChild(wrap);\r\n\r\n // btnLeft.addEventListener('click', function () {\r\n // self.rotate(-90);\r\n // });\r\n // btnRight.addEventListener('click', function () {\r\n // self.rotate(90);\r\n // });\r\n // }\r\n\r\n function _hasExif() {\r\n return this.options.enableExif && window.EXIF;\r\n }\r\n\r\n function _initializeResize () {\r\n var self = this;\r\n var wrap = document.createElement('div');\r\n var isDragging = false;\r\n var direction;\r\n var originalX;\r\n var originalY;\r\n var minSize = 50;\r\n var maxWidth;\r\n var maxHeight;\r\n var vr;\r\n var hr;\r\n\r\n addClass(wrap, 'cr-resizer');\r\n css(wrap, {\r\n width: this.options.viewport.width + 'px',\r\n height: this.options.viewport.height + 'px'\r\n });\r\n\r\n if (this.options.resizeControls.height) {\r\n vr = document.createElement('div');\r\n addClass(vr, 'cr-resizer-vertical');\r\n wrap.appendChild(vr);\r\n }\r\n\r\n if (this.options.resizeControls.width) {\r\n hr = document.createElement('div');\r\n addClass(hr, 'cr-resizer-horisontal');\r\n wrap.appendChild(hr);\r\n }\r\n\r\n function mouseDown(ev) {\r\n if (ev.button !== undefined && ev.button !== 0) return;\r\n\r\n ev.preventDefault();\r\n if (isDragging) {\r\n return;\r\n }\r\n\r\n var overlayRect = self.elements.overlay.getBoundingClientRect();\r\n\r\n isDragging = true;\r\n originalX = ev.pageX;\r\n originalY = ev.pageY;\r\n direction = ev.currentTarget.className.indexOf('vertical') !== -1 ? 'v' : 'h';\r\n maxWidth = overlayRect.width;\r\n maxHeight = overlayRect.height;\r\n\r\n if (ev.touches) {\r\n var touches = ev.touches[0];\r\n originalX = touches.pageX;\r\n originalY = touches.pageY;\r\n }\r\n\r\n window.addEventListener('mousemove', mouseMove);\r\n window.addEventListener('touchmove', mouseMove);\r\n window.addEventListener('mouseup', mouseUp);\r\n window.addEventListener('touchend', mouseUp);\r\n document.body.style[CSS_USERSELECT] = 'none';\r\n }\r\n\r\n function mouseMove(ev) {\r\n var pageX = ev.pageX;\r\n var pageY = ev.pageY;\r\n\r\n ev.preventDefault();\r\n\r\n if (ev.touches) {\r\n var touches = ev.touches[0];\r\n pageX = touches.pageX;\r\n pageY = touches.pageY;\r\n }\r\n\r\n var deltaX = pageX - originalX;\r\n var deltaY = pageY - originalY;\r\n var newHeight = self.options.viewport.height + deltaY;\r\n var newWidth = self.options.viewport.width + deltaX;\r\n\r\n if (direction === 'v' && newHeight >= minSize && newHeight <= maxHeight) {\r\n css(wrap, {\r\n height: newHeight + 'px'\r\n });\r\n\r\n self.options.boundary.height += deltaY;\r\n css(self.elements.boundary, {\r\n height: self.options.boundary.height + 'px'\r\n });\r\n\r\n self.options.viewport.height += deltaY;\r\n css(self.elements.viewport, {\r\n height: self.options.viewport.height + 'px'\r\n });\r\n }\r\n else if (direction === 'h' && newWidth >= minSize && newWidth <= maxWidth) {\r\n css(wrap, {\r\n width: newWidth + 'px'\r\n });\r\n\r\n self.options.boundary.width += deltaX;\r\n css(self.elements.boundary, {\r\n width: self.options.boundary.width + 'px'\r\n });\r\n\r\n self.options.viewport.width += deltaX;\r\n css(self.elements.viewport, {\r\n width: self.options.viewport.width + 'px'\r\n });\r\n }\r\n\r\n _updateOverlay.call(self);\r\n _updateZoomLimits.call(self);\r\n _updateCenterPoint.call(self);\r\n _triggerUpdate.call(self);\r\n originalY = pageY;\r\n originalX = pageX;\r\n }\r\n\r\n function mouseUp() {\r\n isDragging = false;\r\n window.removeEventListener('mousemove', mouseMove);\r\n window.removeEventListener('touchmove', mouseMove);\r\n window.removeEventListener('mouseup', mouseUp);\r\n window.removeEventListener('touchend', mouseUp);\r\n document.body.style[CSS_USERSELECT] = '';\r\n }\r\n\r\n if (vr) {\r\n vr.addEventListener('mousedown', mouseDown);\r\n vr.addEventListener('touchstart', mouseDown);\r\n }\r\n\r\n if (hr) {\r\n hr.addEventListener('mousedown', mouseDown);\r\n hr.addEventListener('touchstart', mouseDown);\r\n }\r\n\r\n this.elements.boundary.appendChild(wrap);\r\n }\r\n\r\n function _setZoomerVal(v) {\r\n if (this.options.enableZoom) {\r\n var z = this.elements.zoomer,\r\n val = fix(v, 4);\r\n\r\n z.value = Math.max(parseFloat(z.min), Math.min(parseFloat(z.max), val)).toString();\r\n }\r\n }\r\n\r\n function _initializeZoom() {\r\n var self = this,\r\n wrap = self.elements.zoomerWrap = document.createElement('div'),\r\n zoomer = self.elements.zoomer = document.createElement('input');\r\n\r\n addClass(wrap, 'cr-slider-wrap');\r\n addClass(zoomer, 'cr-slider');\r\n zoomer.type = 'range';\r\n zoomer.step = '0.0001';\r\n zoomer.value = '1';\r\n zoomer.style.display = self.options.showZoomer ? '' : 'none';\r\n zoomer.setAttribute('aria-label', 'zoom');\r\n\r\n self.element.appendChild(wrap);\r\n wrap.appendChild(zoomer);\r\n\r\n self._currentZoom = 1;\r\n\r\n function change() {\r\n _onZoom.call(self, {\r\n value: parseFloat(zoomer.value),\r\n origin: new TransformOrigin(self.elements.preview),\r\n viewportRect: self.elements.viewport.getBoundingClientRect(),\r\n transform: Transform.parse(self.elements.preview)\r\n });\r\n }\r\n\r\n function scroll(ev) {\r\n var delta, targetZoom;\r\n\r\n if(self.options.mouseWheelZoom === 'ctrl' && ev.ctrlKey !== true){\r\n return 0; \r\n } else if (ev.wheelDelta) {\r\n delta = ev.wheelDelta / 1200; //wheelDelta min: -120 max: 120 // max x 10 x 2\r\n } else if (ev.deltaY) {\r\n delta = ev.deltaY / 1060; //deltaY min: -53 max: 53 // max x 10 x 2\r\n } else if (ev.detail) {\r\n delta = ev.detail / -60; //delta min: -3 max: 3 // max x 10 x 2\r\n } else {\r\n delta = 0;\r\n }\r\n\r\n targetZoom = self._currentZoom + (delta * self._currentZoom);\r\n\r\n ev.preventDefault();\r\n _setZoomerVal.call(self, targetZoom);\r\n change.call(self);\r\n }\r\n\r\n self.elements.zoomer.addEventListener('input', change);// this is being fired twice on keypress\r\n self.elements.zoomer.addEventListener('change', change);\r\n\r\n if (self.options.mouseWheelZoom) {\r\n self.elements.boundary.addEventListener('mousewheel', scroll);\r\n self.elements.boundary.addEventListener('DOMMouseScroll', scroll);\r\n }\r\n }\r\n\r\n function _onZoom(ui) {\r\n var self = this,\r\n transform = ui ? ui.transform : Transform.parse(self.elements.preview),\r\n vpRect = ui ? ui.viewportRect : self.elements.viewport.getBoundingClientRect(),\r\n origin = ui ? ui.origin : new TransformOrigin(self.elements.preview);\r\n\r\n function applyCss() {\r\n var transCss = {};\r\n transCss[CSS_TRANSFORM] = transform.toString();\r\n transCss[CSS_TRANS_ORG] = origin.toString();\r\n css(self.elements.preview, transCss);\r\n }\r\n\r\n self._currentZoom = ui ? ui.value : self._currentZoom;\r\n transform.scale = self._currentZoom;\r\n self.elements.zoomer.setAttribute('aria-valuenow', self._currentZoom);\r\n applyCss();\r\n\r\n if (self.options.enforceBoundary) {\r\n var boundaries = _getVirtualBoundaries.call(self, vpRect),\r\n transBoundaries = boundaries.translate,\r\n oBoundaries = boundaries.origin;\r\n\r\n if (transform.x >= transBoundaries.maxX) {\r\n origin.x = oBoundaries.minX;\r\n transform.x = transBoundaries.maxX;\r\n }\r\n\r\n if (transform.x <= transBoundaries.minX) {\r\n origin.x = oBoundaries.maxX;\r\n transform.x = transBoundaries.minX;\r\n }\r\n\r\n if (transform.y >= transBoundaries.maxY) {\r\n origin.y = oBoundaries.minY;\r\n transform.y = transBoundaries.maxY;\r\n }\r\n\r\n if (transform.y <= transBoundaries.minY) {\r\n origin.y = oBoundaries.maxY;\r\n transform.y = transBoundaries.minY;\r\n }\r\n }\r\n applyCss();\r\n _debouncedOverlay.call(self);\r\n _triggerUpdate.call(self);\r\n }\r\n\r\n function _getVirtualBoundaries(viewport) {\r\n var self = this,\r\n scale = self._currentZoom,\r\n vpWidth = viewport.width,\r\n vpHeight = viewport.height,\r\n centerFromBoundaryX = self.elements.boundary.clientWidth / 2,\r\n centerFromBoundaryY = self.elements.boundary.clientHeight / 2,\r\n imgRect = self.elements.preview.getBoundingClientRect(),\r\n curImgWidth = imgRect.width,\r\n curImgHeight = imgRect.height,\r\n halfWidth = vpWidth / 2,\r\n halfHeight = vpHeight / 2;\r\n\r\n var maxX = ((halfWidth / scale) - centerFromBoundaryX) * -1;\r\n var minX = maxX - ((curImgWidth * (1 / scale)) - (vpWidth * (1 / scale)));\r\n\r\n var maxY = ((halfHeight / scale) - centerFromBoundaryY) * -1;\r\n var minY = maxY - ((curImgHeight * (1 / scale)) - (vpHeight * (1 / scale)));\r\n\r\n var originMinX = (1 / scale) * halfWidth;\r\n var originMaxX = (curImgWidth * (1 / scale)) - originMinX;\r\n\r\n var originMinY = (1 / scale) * halfHeight;\r\n var originMaxY = (curImgHeight * (1 / scale)) - originMinY;\r\n\r\n return {\r\n translate: {\r\n maxX: maxX,\r\n minX: minX,\r\n maxY: maxY,\r\n minY: minY\r\n },\r\n origin: {\r\n maxX: originMaxX,\r\n minX: originMinX,\r\n maxY: originMaxY,\r\n minY: originMinY\r\n }\r\n };\r\n }\r\n\r\n function _updateCenterPoint(rotate) {\r\n var self = this,\r\n scale = self._currentZoom,\r\n data = self.elements.preview.getBoundingClientRect(),\r\n vpData = self.elements.viewport.getBoundingClientRect(),\r\n transform = Transform.parse(self.elements.preview.style[CSS_TRANSFORM]),\r\n pc = new TransformOrigin(self.elements.preview),\r\n top = (vpData.top - data.top) + (vpData.height / 2),\r\n left = (vpData.left - data.left) + (vpData.width / 2),\r\n center = {},\r\n adj = {};\r\n\r\n if (rotate) {\r\n var cx = pc.x;\r\n var cy = pc.y;\r\n var tx = transform.x;\r\n var ty = transform.y;\r\n\r\n center.y = cx;\r\n center.x = cy;\r\n transform.y = tx;\r\n transform.x = ty;\r\n }\r\n else {\r\n center.y = top / scale;\r\n center.x = left / scale;\r\n\r\n adj.y = (center.y - pc.y) * (1 - scale);\r\n adj.x = (center.x - pc.x) * (1 - scale);\r\n\r\n transform.x -= adj.x;\r\n transform.y -= adj.y;\r\n }\r\n\r\n var newCss = {};\r\n newCss[CSS_TRANS_ORG] = center.x + 'px ' + center.y + 'px';\r\n newCss[CSS_TRANSFORM] = transform.toString();\r\n css(self.elements.preview, newCss);\r\n }\r\n\r\n function _initDraggable() {\r\n var self = this,\r\n isDragging = false,\r\n originalX,\r\n originalY,\r\n originalDistance,\r\n vpRect,\r\n transform;\r\n\r\n function assignTransformCoordinates(deltaX, deltaY) {\r\n var imgRect = self.elements.preview.getBoundingClientRect(),\r\n top = transform.y + deltaY,\r\n left = transform.x + deltaX;\r\n\r\n if (self.options.enforceBoundary) {\r\n if (vpRect.top > imgRect.top + deltaY && vpRect.bottom < imgRect.bottom + deltaY) {\r\n transform.y = top;\r\n }\r\n\r\n if (vpRect.left > imgRect.left + deltaX && vpRect.right < imgRect.right + deltaX) {\r\n transform.x = left;\r\n }\r\n }\r\n else {\r\n transform.y = top;\r\n transform.x = left;\r\n }\r\n }\r\n\r\n function toggleGrabState(isDragging) {\r\n self.elements.preview.setAttribute('aria-grabbed', isDragging);\r\n self.elements.boundary.setAttribute('aria-dropeffect', isDragging? 'move': 'none');\r\n }\r\n\r\n function keyDown(ev) {\r\n var LEFT_ARROW = 37,\r\n UP_ARROW = 38,\r\n RIGHT_ARROW = 39,\r\n DOWN_ARROW = 40;\r\n\r\n if (ev.shiftKey && (ev.keyCode === UP_ARROW || ev.keyCode === DOWN_ARROW)) {\r\n var zoom;\r\n if (ev.keyCode === UP_ARROW) {\r\n zoom = parseFloat(self.elements.zoomer.value) + parseFloat(self.elements.zoomer.step)\r\n }\r\n else {\r\n zoom = parseFloat(self.elements.zoomer.value) - parseFloat(self.elements.zoomer.step)\r\n }\r\n self.setZoom(zoom);\r\n }\r\n else if (self.options.enableKeyMovement && (ev.keyCode >= 37 && ev.keyCode <= 40)) {\r\n ev.preventDefault();\r\n var movement = parseKeyDown(ev.keyCode);\r\n\r\n transform = Transform.parse(self.elements.preview);\r\n document.body.style[CSS_USERSELECT] = 'none';\r\n vpRect = self.elements.viewport.getBoundingClientRect();\r\n keyMove(movement);\r\n }\r\n\r\n function parseKeyDown(key) {\r\n switch (key) {\r\n case LEFT_ARROW:\r\n return [1, 0];\r\n case UP_ARROW:\r\n return [0, 1];\r\n case RIGHT_ARROW:\r\n return [-1, 0];\r\n case DOWN_ARROW:\r\n return [0, -1];\r\n }\r\n }\r\n }\r\n\r\n function keyMove(movement) {\r\n var deltaX = movement[0],\r\n deltaY = movement[1],\r\n newCss = {};\r\n\r\n assignTransformCoordinates(deltaX, deltaY);\r\n\r\n newCss[CSS_TRANSFORM] = transform.toString();\r\n css(self.elements.preview, newCss);\r\n _updateOverlay.call(self);\r\n document.body.style[CSS_USERSELECT] = '';\r\n _updateCenterPoint.call(self);\r\n _triggerUpdate.call(self);\r\n originalDistance = 0;\r\n }\r\n\r\n function mouseDown(ev) {\r\n if (ev.button !== undefined && ev.button !== 0) return;\r\n\r\n ev.preventDefault();\r\n if (isDragging) return;\r\n isDragging = true;\r\n originalX = ev.pageX;\r\n originalY = ev.pageY;\r\n\r\n if (ev.touches) {\r\n var touches = ev.touches[0];\r\n originalX = touches.pageX;\r\n originalY = touches.pageY;\r\n }\r\n toggleGrabState(isDragging);\r\n transform = Transform.parse(self.elements.preview);\r\n window.addEventListener('mousemove', mouseMove);\r\n window.addEventListener('touchmove', mouseMove);\r\n window.addEventListener('mouseup', mouseUp);\r\n window.addEventListener('touchend', mouseUp);\r\n document.body.style[CSS_USERSELECT] = 'none';\r\n vpRect = self.elements.viewport.getBoundingClientRect();\r\n }\r\n\r\n function mouseMove(ev) {\r\n ev.preventDefault();\r\n var pageX = ev.pageX,\r\n pageY = ev.pageY;\r\n\r\n if (ev.touches) {\r\n var touches = ev.touches[0];\r\n pageX = touches.pageX;\r\n pageY = touches.pageY;\r\n }\r\n\r\n var deltaX = pageX - originalX,\r\n deltaY = pageY - originalY,\r\n newCss = {};\r\n\r\n if (ev.type === 'touchmove') {\r\n if (ev.touches.length > 1) {\r\n var touch1 = ev.touches[0];\r\n var touch2 = ev.touches[1];\r\n var dist = Math.sqrt((touch1.pageX - touch2.pageX) * (touch1.pageX - touch2.pageX) + (touch1.pageY - touch2.pageY) * (touch1.pageY - touch2.pageY));\r\n\r\n if (!originalDistance) {\r\n originalDistance = dist / self._currentZoom;\r\n }\r\n\r\n var scale = dist / originalDistance;\r\n\r\n _setZoomerVal.call(self, scale);\r\n dispatchChange(self.elements.zoomer);\r\n return;\r\n }\r\n }\r\n\r\n assignTransformCoordinates(deltaX, deltaY);\r\n\r\n newCss[CSS_TRANSFORM] = transform.toString();\r\n css(self.elements.preview, newCss);\r\n _updateOverlay.call(self);\r\n originalY = pageY;\r\n originalX = pageX;\r\n }\r\n\r\n function mouseUp() {\r\n isDragging = false;\r\n toggleGrabState(isDragging);\r\n window.removeEventListener('mousemove', mouseMove);\r\n window.removeEventListener('touchmove', mouseMove);\r\n window.removeEventListener('mouseup', mouseUp);\r\n window.removeEventListener('touchend', mouseUp);\r\n document.body.style[CSS_USERSELECT] = '';\r\n _updateCenterPoint.call(self);\r\n _triggerUpdate.call(self);\r\n originalDistance = 0;\r\n }\r\n\r\n self.elements.overlay.addEventListener('mousedown', mouseDown);\r\n self.elements.viewport.addEventListener('keydown', keyDown);\r\n self.elements.overlay.addEventListener('touchstart', mouseDown);\r\n }\r\n\r\n function _updateOverlay() {\r\n if (!this.elements) return; // since this is debounced, it can be fired after destroy\r\n var self = this,\r\n boundRect = self.elements.boundary.getBoundingClientRect(),\r\n imgData = self.elements.preview.getBoundingClientRect();\r\n\r\n css(self.elements.overlay, {\r\n width: imgData.width + 'px',\r\n height: imgData.height + 'px',\r\n top: (imgData.top - boundRect.top) + 'px',\r\n left: (imgData.left - boundRect.left) + 'px'\r\n });\r\n }\r\n var _debouncedOverlay = debounce(_updateOverlay, 500);\r\n\r\n function _triggerUpdate() {\r\n var self = this,\r\n data = self.get();\r\n\r\n if (!_isVisible.call(self)) {\r\n return;\r\n }\r\n\r\n self.options.update.call(self, data);\r\n if (self.$ && typeof Prototype === 'undefined') {\r\n self.$(self.element).trigger('update.croppie', data);\r\n }\r\n else {\r\n var ev;\r\n if (window.CustomEvent) {\r\n ev = new CustomEvent('update', { detail: data });\r\n } else {\r\n ev = document.createEvent('CustomEvent');\r\n ev.initCustomEvent('update', true, true, data);\r\n }\r\n\r\n self.element.dispatchEvent(ev);\r\n }\r\n }\r\n\r\n function _isVisible() {\r\n return this.elements.preview.offsetHeight > 0 && this.elements.preview.offsetWidth > 0;\r\n }\r\n\r\n function _updatePropertiesFromImage() {\r\n var self = this,\r\n initialZoom = 1,\r\n cssReset = {},\r\n img = self.elements.preview,\r\n imgData,\r\n transformReset = new Transform(0, 0, initialZoom),\r\n originReset = new TransformOrigin(),\r\n isVisible = _isVisible.call(self);\r\n\r\n if (!isVisible || self.data.bound) {// if the croppie isn't visible or it doesn't need binding\r\n return;\r\n }\r\n\r\n self.data.bound = true;\r\n cssReset[CSS_TRANSFORM] = transformReset.toString();\r\n cssReset[CSS_TRANS_ORG] = originReset.toString();\r\n cssReset['opacity'] = 1;\r\n css(img, cssReset);\r\n\r\n imgData = self.elements.preview.getBoundingClientRect();\r\n\r\n self._originalImageWidth = imgData.width;\r\n self._originalImageHeight = imgData.height;\r\n self.data.orientation = getExifOrientation(self.elements.img);\r\n\r\n if (self.options.enableZoom) {\r\n _updateZoomLimits.call(self, true);\r\n }\r\n else {\r\n self._currentZoom = initialZoom;\r\n }\r\n\r\n transformReset.scale = self._currentZoom;\r\n cssReset[CSS_TRANSFORM] = transformReset.toString();\r\n css(img, cssReset);\r\n\r\n if (self.data.points.length) {\r\n _bindPoints.call(self, self.data.points);\r\n }\r\n else {\r\n _centerImage.call(self);\r\n }\r\n\r\n _updateCenterPoint.call(self);\r\n _updateOverlay.call(self);\r\n }\r\n\r\n function _updateZoomLimits (initial) {\r\n var self = this,\r\n minZoom = Math.max(self.options.minZoom, 0) || 0,\r\n maxZoom = self.options.maxZoom || 1.5,\r\n initialZoom,\r\n defaultInitialZoom,\r\n zoomer = self.elements.zoomer,\r\n scale = parseFloat(zoomer.value),\r\n boundaryData = self.elements.boundary.getBoundingClientRect(),\r\n imgData = naturalImageDimensions(self.elements.img, self.data.orientation),\r\n vpData = self.elements.viewport.getBoundingClientRect(),\r\n minW,\r\n minH;\r\n if (self.options.enforceBoundary) {\r\n minW = vpData.width / imgData.width;\r\n minH = vpData.height / imgData.height;\r\n minZoom = Math.max(minW, minH);\r\n }\r\n\r\n if (minZoom >= maxZoom) {\r\n maxZoom = minZoom + 1;\r\n }\r\n\r\n zoomer.min = fix(minZoom, 4);\r\n zoomer.max = fix(maxZoom, 4);\r\n \r\n if (!initial && (scale < zoomer.min || scale > zoomer.max)) {\r\n _setZoomerVal.call(self, scale < zoomer.min ? zoomer.min : zoomer.max);\r\n }\r\n else if (initial) {\r\n defaultInitialZoom = Math.max((boundaryData.width / imgData.width), (boundaryData.height / imgData.height));\r\n initialZoom = self.data.boundZoom !== null ? self.data.boundZoom : defaultInitialZoom;\r\n _setZoomerVal.call(self, initialZoom);\r\n }\r\n\r\n dispatchChange(zoomer);\r\n }\r\n\r\n function _bindPoints(points) {\r\n if (points.length !== 4) {\r\n throw \"Croppie - Invalid number of points supplied: \" + points;\r\n }\r\n var self = this,\r\n pointsWidth = points[2] - points[0],\r\n // pointsHeight = points[3] - points[1],\r\n vpData = self.elements.viewport.getBoundingClientRect(),\r\n boundRect = self.elements.boundary.getBoundingClientRect(),\r\n vpOffset = {\r\n left: vpData.left - boundRect.left,\r\n top: vpData.top - boundRect.top\r\n },\r\n scale = vpData.width / pointsWidth,\r\n originTop = points[1],\r\n originLeft = points[0],\r\n transformTop = (-1 * points[1]) + vpOffset.top,\r\n transformLeft = (-1 * points[0]) + vpOffset.left,\r\n newCss = {};\r\n\r\n newCss[CSS_TRANS_ORG] = originLeft + 'px ' + originTop + 'px';\r\n newCss[CSS_TRANSFORM] = new Transform(transformLeft, transformTop, scale).toString();\r\n css(self.elements.preview, newCss);\r\n\r\n _setZoomerVal.call(self, scale);\r\n self._currentZoom = scale;\r\n }\r\n\r\n function _centerImage() {\r\n var self = this,\r\n imgDim = self.elements.preview.getBoundingClientRect(),\r\n vpDim = self.elements.viewport.getBoundingClientRect(),\r\n boundDim = self.elements.boundary.getBoundingClientRect(),\r\n vpLeft = vpDim.left - boundDim.left,\r\n vpTop = vpDim.top - boundDim.top,\r\n w = vpLeft - ((imgDim.width - vpDim.width) / 2),\r\n h = vpTop - ((imgDim.height - vpDim.height) / 2),\r\n transform = new Transform(w, h, self._currentZoom);\r\n\r\n css(self.elements.preview, CSS_TRANSFORM, transform.toString());\r\n }\r\n\r\n function _transferImageToCanvas(customOrientation) {\r\n var self = this,\r\n canvas = self.elements.canvas,\r\n img = self.elements.img,\r\n ctx = canvas.getContext('2d');\r\n\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n var orientation = self.options.enableOrientation && customOrientation || getExifOrientation(img);\r\n drawCanvas(canvas, img, orientation);\r\n }\r\n\r\n function _getCanvas(data) {\r\n var self = this,\r\n points = data.points,\r\n left = num(points[0]),\r\n top = num(points[1]),\r\n right = num(points[2]),\r\n bottom = num(points[3]),\r\n width = right-left,\r\n height = bottom-top,\r\n circle = data.circle,\r\n canvas = document.createElement('canvas'),\r\n ctx = canvas.getContext('2d'),\r\n startX = 0,\r\n startY = 0,\r\n canvasWidth = data.outputWidth || width,\r\n canvasHeight = data.outputHeight || height;\r\n\r\n canvas.width = canvasWidth;\r\n canvas.height = canvasHeight;\r\n\r\n if (data.backgroundColor) {\r\n ctx.fillStyle = data.backgroundColor;\r\n ctx.fillRect(0, 0, canvasWidth, canvasHeight);\r\n }\r\n\r\n // By default assume we're going to draw the entire\r\n // source image onto the destination canvas.\r\n var sx = left,\r\n sy = top,\r\n sWidth = width,\r\n sHeight = height,\r\n dx = 0,\r\n dy = 0,\r\n dWidth = canvasWidth,\r\n dHeight = canvasHeight;\r\n\r\n //\r\n // Do not go outside of the original image's bounds along the x-axis.\r\n // Handle translations when projecting onto the destination canvas.\r\n //\r\n\r\n // The smallest possible source x-position is 0.\r\n if (left < 0) {\r\n sx = 0;\r\n dx = (Math.abs(left) / width) * canvasWidth;\r\n }\r\n\r\n // The largest possible source width is the original image's width.\r\n if (sWidth + sx > self._originalImageWidth) {\r\n sWidth = self._originalImageWidth - sx;\r\n dWidth = (sWidth / width) * canvasWidth;\r\n }\r\n\r\n //\r\n // Do not go outside of the original image's bounds along the y-axis.\r\n //\r\n\r\n // The smallest possible source y-position is 0.\r\n if (top < 0) {\r\n sy = 0;\r\n dy = (Math.abs(top) / height) * canvasHeight;\r\n }\r\n\r\n // The largest possible source height is the original image's height.\r\n if (sHeight + sy > self._originalImageHeight) {\r\n sHeight = self._originalImageHeight - sy;\r\n dHeight = (sHeight / height) * canvasHeight;\r\n }\r\n\r\n // console.table({ left, right, top, bottom, canvasWidth, canvasHeight, width, height, startX, startY, circle, sx, sy, dx, dy, sWidth, sHeight, dWidth, dHeight });\r\n\r\n ctx.drawImage(this.elements.preview, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);\r\n if (circle) {\r\n ctx.fillStyle = '#fff';\r\n ctx.globalCompositeOperation = 'destination-in';\r\n ctx.beginPath();\r\n ctx.arc(canvas.width / 2, canvas.height / 2, canvas.width / 2, 0, Math.PI * 2, true);\r\n ctx.closePath();\r\n ctx.fill();\r\n }\r\n return canvas;\r\n }\r\n\r\n function _getHtmlResult(data) {\r\n var points = data.points,\r\n div = document.createElement('div'),\r\n img = document.createElement('img'),\r\n width = points[2] - points[0],\r\n height = points[3] - points[1];\r\n\r\n addClass(div, 'croppie-result');\r\n div.appendChild(img);\r\n css(img, {\r\n left: (-1 * points[0]) + 'px',\r\n top: (-1 * points[1]) + 'px'\r\n });\r\n img.src = data.url;\r\n css(div, {\r\n width: width + 'px',\r\n height: height + 'px'\r\n });\r\n\r\n return div;\r\n }\r\n\r\n function _getBase64Result(data) {\r\n return _getCanvas.call(this, data).toDataURL(data.format, data.quality);\r\n }\r\n\r\n function _getBlobResult(data) {\r\n var self = this;\r\n return new Promise(function (resolve) {\r\n _getCanvas.call(self, data).toBlob(function (blob) {\r\n resolve(blob);\r\n }, data.format, data.quality);\r\n });\r\n }\r\n\r\n function _replaceImage(img) {\r\n if (this.elements.img.parentNode) {\r\n Array.prototype.forEach.call(this.elements.img.classList, function(c) { img.classList.add(c); });\r\n this.elements.img.parentNode.replaceChild(img, this.elements.img);\r\n this.elements.preview = img; // if the img is attached to the DOM, they're not using the canvas\r\n }\r\n this.elements.img = img;\r\n }\r\n\r\n function _bind(options, cb) {\r\n var self = this,\r\n url,\r\n points = [],\r\n zoom = null,\r\n hasExif = _hasExif.call(self);\r\n\r\n if (typeof (options) === 'string') {\r\n url = options;\r\n options = {};\r\n }\r\n else if (Array.isArray(options)) {\r\n points = options.slice();\r\n }\r\n else if (typeof (options) === 'undefined' && self.data.url) { //refreshing\r\n _updatePropertiesFromImage.call(self);\r\n _triggerUpdate.call(self);\r\n return null;\r\n }\r\n else {\r\n url = options.url;\r\n points = options.points || [];\r\n zoom = typeof(options.zoom) === 'undefined' ? null : options.zoom;\r\n }\r\n\r\n self.data.bound = false;\r\n self.data.url = url || self.data.url;\r\n self.data.boundZoom = zoom;\r\n\r\n return loadImage(url, hasExif).then(function (img) {\r\n _replaceImage.call(self, img);\r\n if (!points.length) {\r\n var natDim = naturalImageDimensions(img);\r\n var rect = self.elements.viewport.getBoundingClientRect();\r\n var aspectRatio = rect.width / rect.height;\r\n var imgAspectRatio = natDim.width / natDim.height;\r\n var width, height;\r\n\r\n if (imgAspectRatio > aspectRatio) {\r\n height = natDim.height;\r\n width = height * aspectRatio;\r\n }\r\n else {\r\n width = natDim.width;\r\n height = natDim.height / aspectRatio;\r\n }\r\n\r\n var x0 = (natDim.width - width) / 2;\r\n var y0 = (natDim.height - height) / 2;\r\n var x1 = x0 + width;\r\n var y1 = y0 + height;\r\n self.data.points = [x0, y0, x1, y1];\r\n }\r\n else if (self.options.relative) {\r\n points = [\r\n points[0] * img.naturalWidth / 100,\r\n points[1] * img.naturalHeight / 100,\r\n points[2] * img.naturalWidth / 100,\r\n points[3] * img.naturalHeight / 100\r\n ];\r\n }\r\n\r\n self.data.points = points.map(function (p) {\r\n return parseFloat(p);\r\n });\r\n if (self.options.useCanvas) {\r\n _transferImageToCanvas.call(self, options.orientation);\r\n }\r\n _updatePropertiesFromImage.call(self);\r\n _triggerUpdate.call(self);\r\n cb && cb();\r\n });\r\n }\r\n\r\n function fix(v, decimalPoints) {\r\n return parseFloat(v).toFixed(decimalPoints || 0);\r\n }\r\n\r\n function _get() {\r\n var self = this,\r\n imgData = self.elements.preview.getBoundingClientRect(),\r\n vpData = self.elements.viewport.getBoundingClientRect(),\r\n x1 = vpData.left - imgData.left,\r\n y1 = vpData.top - imgData.top,\r\n widthDiff = (vpData.width - self.elements.viewport.offsetWidth) / 2, //border\r\n heightDiff = (vpData.height - self.elements.viewport.offsetHeight) / 2,\r\n x2 = x1 + self.elements.viewport.offsetWidth + widthDiff,\r\n y2 = y1 + self.elements.viewport.offsetHeight + heightDiff,\r\n scale = self._currentZoom;\r\n\r\n if (scale === Infinity || isNaN(scale)) {\r\n scale = 1;\r\n }\r\n\r\n var max = self.options.enforceBoundary ? 0 : Number.NEGATIVE_INFINITY;\r\n x1 = Math.max(max, x1 / scale);\r\n y1 = Math.max(max, y1 / scale);\r\n x2 = Math.max(max, x2 / scale);\r\n y2 = Math.max(max, y2 / scale);\r\n\r\n return {\r\n points: [fix(x1), fix(y1), fix(x2), fix(y2)],\r\n zoom: scale,\r\n orientation: self.data.orientation\r\n };\r\n }\r\n\r\n var RESULT_DEFAULTS = {\r\n type: 'canvas',\r\n format: 'png',\r\n quality: 1\r\n },\r\n RESULT_FORMATS = ['jpeg', 'webp', 'png'];\r\n\r\n function _result(options) {\r\n var self = this,\r\n data = _get.call(self),\r\n opts = deepExtend(clone(RESULT_DEFAULTS), clone(options)),\r\n resultType = (typeof (options) === 'string' ? options : (opts.type || 'base64')),\r\n size = opts.size || 'viewport',\r\n format = opts.format,\r\n quality = opts.quality,\r\n backgroundColor = opts.backgroundColor,\r\n circle = typeof opts.circle === 'boolean' ? opts.circle : (self.options.viewport.type === 'circle'),\r\n vpRect = self.elements.viewport.getBoundingClientRect(),\r\n ratio = vpRect.width / vpRect.height,\r\n prom;\r\n\r\n if (size === 'viewport') {\r\n data.outputWidth = vpRect.width;\r\n data.outputHeight = vpRect.height;\r\n } else if (typeof size === 'object') {\r\n if (size.width && size.height) {\r\n data.outputWidth = size.width;\r\n data.outputHeight = size.height;\r\n } else if (size.width) {\r\n data.outputWidth = size.width;\r\n data.outputHeight = size.width / ratio;\r\n } else if (size.height) {\r\n data.outputWidth = size.height * ratio;\r\n data.outputHeight = size.height;\r\n }\r\n }\r\n\r\n if (RESULT_FORMATS.indexOf(format) > -1) {\r\n data.format = 'image/' + format;\r\n data.quality = quality;\r\n }\r\n\r\n data.circle = circle;\r\n data.url = self.data.url;\r\n data.backgroundColor = backgroundColor;\r\n\r\n prom = new Promise(function (resolve) {\r\n switch(resultType.toLowerCase())\r\n {\r\n case 'rawcanvas':\r\n resolve(_getCanvas.call(self, data));\r\n break;\r\n case 'canvas':\r\n case 'base64':\r\n resolve(_getBase64Result.call(self, data));\r\n break;\r\n case 'blob':\r\n _getBlobResult.call(self, data).then(resolve);\r\n break;\r\n default:\r\n resolve(_getHtmlResult.call(self, data));\r\n break;\r\n }\r\n });\r\n return prom;\r\n }\r\n\r\n function _refresh() {\r\n _updatePropertiesFromImage.call(this);\r\n }\r\n\r\n function _rotate(deg) {\r\n if (!this.options.useCanvas || !this.options.enableOrientation) {\r\n throw 'Croppie: Cannot rotate without enableOrientation && EXIF.js included';\r\n }\r\n\r\n var self = this,\r\n canvas = self.elements.canvas;\r\n\r\n self.data.orientation = getExifOffset(self.data.orientation, deg);\r\n drawCanvas(canvas, self.elements.img, self.data.orientation);\r\n _updateCenterPoint.call(self, true);\r\n _updateZoomLimits.call(self);\r\n }\r\n\r\n function _destroy() {\r\n var self = this;\r\n self.element.removeChild(self.elements.boundary);\r\n removeClass(self.element, 'croppie-container');\r\n if (self.options.enableZoom) {\r\n self.element.removeChild(self.elements.zoomerWrap);\r\n }\r\n delete self.elements;\r\n }\r\n\r\n if (window.jQuery) {\r\n var $ = window.jQuery;\r\n $.fn.croppie = function (opts) {\r\n var ot = typeof opts;\r\n\r\n if (ot === 'string') {\r\n var args = Array.prototype.slice.call(arguments, 1);\r\n var singleInst = $(this).data('croppie');\r\n\r\n if (opts === 'get') {\r\n return singleInst.get();\r\n }\r\n else if (opts === 'result') {\r\n return singleInst.result.apply(singleInst, args);\r\n }\r\n else if (opts === 'bind') {\r\n return singleInst.bind.apply(singleInst, args);\r\n }\r\n\r\n return this.each(function () {\r\n var i = $(this).data('croppie');\r\n if (!i) return;\r\n\r\n var method = i[opts];\r\n if ($.isFunction(method)) {\r\n method.apply(i, args);\r\n if (opts === 'destroy') {\r\n $(this).removeData('croppie');\r\n }\r\n }\r\n else {\r\n throw 'Croppie ' + opts + ' method not found';\r\n }\r\n });\r\n }\r\n else {\r\n return this.each(function () {\r\n var i = new Croppie(this, opts);\r\n i.$ = $;\r\n $(this).data('croppie', i);\r\n });\r\n }\r\n };\r\n }\r\n\r\n function Croppie(element, opts) {\r\n if (element.className.indexOf('croppie-container') > -1) {\r\n throw new Error(\"Croppie: Can't initialize croppie more than once\");\r\n }\r\n this.element = element;\r\n this.options = deepExtend(clone(Croppie.defaults), opts);\r\n\r\n if (this.element.tagName.toLowerCase() === 'img') {\r\n var origImage = this.element;\r\n addClass(origImage, 'cr-original-image');\r\n setAttributes(origImage, {'aria-hidden' : 'true', 'alt' : '' });\r\n var replacementDiv = document.createElement('div');\r\n this.element.parentNode.appendChild(replacementDiv);\r\n replacementDiv.appendChild(origImage);\r\n this.element = replacementDiv;\r\n this.options.url = this.options.url || origImage.src;\r\n }\r\n\r\n _create.call(this);\r\n if (this.options.url) {\r\n var bindOpts = {\r\n url: this.options.url,\r\n points: this.options.points\r\n };\r\n delete this.options['url'];\r\n delete this.options['points'];\r\n _bind.call(this, bindOpts);\r\n }\r\n }\r\n\r\n Croppie.defaults = {\r\n viewport: {\r\n width: 100,\r\n height: 100,\r\n type: 'square'\r\n },\r\n boundary: { },\r\n orientationControls: {\r\n enabled: true,\r\n leftClass: '',\r\n rightClass: ''\r\n },\r\n resizeControls: {\r\n width: true,\r\n height: true\r\n },\r\n customClass: '',\r\n showZoomer: true,\r\n enableZoom: true,\r\n enableResize: false,\r\n mouseWheelZoom: true,\r\n enableExif: false,\r\n enforceBoundary: true,\r\n enableOrientation: false,\r\n enableKeyMovement: true,\r\n update: function () { }\r\n };\r\n\r\n Croppie.globals = {\r\n translate: 'translate3d'\r\n };\r\n\r\n deepExtend(Croppie.prototype, {\r\n bind: function (options, cb) {\r\n return _bind.call(this, options, cb);\r\n },\r\n get: function () {\r\n var data = _get.call(this);\r\n var points = data.points;\r\n if (this.options.relative) {\r\n points[0] /= this.elements.img.naturalWidth / 100;\r\n points[1] /= this.elements.img.naturalHeight / 100;\r\n points[2] /= this.elements.img.naturalWidth / 100;\r\n points[3] /= this.elements.img.naturalHeight / 100;\r\n }\r\n return data;\r\n },\r\n result: function (type) {\r\n return _result.call(this, type);\r\n },\r\n refresh: function () {\r\n return _refresh.call(this);\r\n },\r\n setZoom: function (v) {\r\n _setZoomerVal.call(this, v);\r\n dispatchChange(this.elements.zoomer);\r\n },\r\n rotate: function (deg) {\r\n _rotate.call(this, deg);\r\n },\r\n destroy: function () {\r\n return _destroy.call(this);\r\n }\r\n });\r\n return Croppie;\r\n}));\r\n"]}