From 0f54346dcb9f1df266374045e56ec78124b210b5 Mon Sep 17 00:00:00 2001 From: Anand Anthony Francis Date: Thu, 12 Nov 2020 04:16:12 +0530 Subject: [PATCH 1/4] filemanager - adding zip deploy --- .../Pages/NewUI/fileManager.cshtml | 77 ++++++++++++++++--- Kudu.Services/Zip/ZipController.cs | 5 +- 2 files changed, 72 insertions(+), 10 deletions(-) diff --git a/Kudu.Services.Web/Pages/NewUI/fileManager.cshtml b/Kudu.Services.Web/Pages/NewUI/fileManager.cshtml index 27eb810b..6939905b 100644 --- a/Kudu.Services.Web/Pages/NewUI/fileManager.cshtml +++ b/Kudu.Services.Web/Pages/NewUI/fileManager.cshtml @@ -3,23 +3,36 @@ @using Kudu.Services @using Microsoft.Extensions.FileProviders; -

File Manager

@*anchor tag to return back to previous directory; span - 'spaddPath' is used to keep track of current directory.*@
...
-
-
-
-
+ +@*Adding sections upload file and upload zip to different divs of a table*@ + + + + + +
+
+
+
+
+
+
+
+
@*Calling dropzone JavaScript*@ + +

File Manager

-@*anchor tag to return back to previous directory; span - 'spaddPath' is used to keep track of current directory.*@ -
...
- -@*Adding sections upload file and upload zip to different divs of a table*@ - - - + + + + + +
-
-
+ +
+ +
+ @*anchor tag to return back to previous directory; span - 'spaddPath' is used to keep track of current directory.*@ + @*
...
*@ +
...
+ @*Adding sections upload file and upload zip to different divs of a table*@ + + + - - -
+
+ + +
- -
-
-
-
- -@*Calling dropzone JavaScript*@ +
+
+
+
+
+
+
+
+
+ + + + + + - - - - +@**@ + + \ No newline at end of file diff --git a/Kudu.Services.Web/wwwroot/AceHelp.html b/Kudu.Services.Web/wwwroot/AceHelp.html new file mode 100644 index 00000000..0fae4921 --- /dev/null +++ b/Kudu.Services.Web/wwwroot/AceHelp.html @@ -0,0 +1,67 @@ + + + + + Keyboard Shortcuts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Save file without closing
(editor must be in focus)
CTRL + SCommand + S
FindCTRL + FCommand + F
ReplaceCTRL + HCommand + H
Go to matching bracketCTRL + PControl + P
(Un)comment line or selectionCTRL + /Command + /
Remove lineCTRL + DCommand + D
Move up current or selected linesALT + UpOption + Up
Move down current or selected linesALT + DownOption + Down
Show editor settingsCTRL + ,Command + ,
+ +
+ +
+ + \ No newline at end of file diff --git a/Kudu.Services.Web/wwwroot/Content/Scripts/fileManager.js b/Kudu.Services.Web/wwwroot/Content/Scripts/fileManager.js new file mode 100644 index 00000000..78d87c16 --- /dev/null +++ b/Kudu.Services.Web/wwwroot/Content/Scripts/fileManager.js @@ -0,0 +1,866 @@ +//Calling dropzone JavaScript + +//Dropzone 1 for Drag/Drop files & Folders +Dropzone.autoDiscover = false; +var myDropzone1 = new Dropzone( + '#upload-widget', { + addRemoveLinks: true, + disablePreview: true, + dictDefaultMessage: 'Drag a File/Folder here to upload, or click to select one', + accept: function (file, done) { + $('.dz-preview.dz-file-preview').css("display", "none"); //removing preview element of dropzone + showhidepaKmanLoader(true); + progressBarDisplay(true); + // Create a FormData object. + var formData = new FormData(); + formData.append('file', file); + if (file.fullPath == undefined) { + var url = '/api/vfs' + curPath + file.name; + } + else { + var url = '/api/vfs' + curPath + file.fullPath; + } + + //New XMLHttpRequest object + let request = new XMLHttpRequest(); + request.open('PUT', url); + request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + request.setRequestHeader("If-Match", "*"); + + // upload progress event + request.upload.addEventListener('progress', function (e) { + let perc = (e.loaded / e.total) * 100; + $('#copy-percentage').text(perc + "%"); + }); + + // Response + request.addEventListener('load', function (e) { + // HTTP status message + showhidepaKmanLoader(false); + progressBarDisplay(false); + $(".dz-default.dz-message").css("display", "block"); + $.get(("/api/vfs" + curPath.trim()), null, function (data) { + generateDynamicTable(data); + }); + }); + + // On error + request.onerror = function () { + showhidepaKmanLoader(false); + progressBarDisplay(false); + alert("Error while PUT request!"); + }; + + // Submit Request with zip file + request.send(file); + } +}); + +//Dropzone 2 for drag/drop zip files to extract the zip files in the respective directory +var myDropzone2 = new Dropzone( + '#upload-widget-zip', { + addRemoveLinks: true, + disablePreview: true, + dictDefaultMessage: 'Drag a Zip File here to extract & upload, or click to select one', + accept: function (file, done) { + debugger; + $('.dz-preview.dz-file-preview').css("display", "none"); //removing preview element of dropzone + showhidepaKmanLoader(true); + progressBarDisplay(true); + // Create a FormData object. + var formData = new FormData(); + formData.append('file', file); + if (file.name.indexOf(".zip") > 0) { + if (file.fullPath == undefined) { + var url = '/api/zip' + curPath + file.name; + //url = url.replace(".zip", ""); + url = url.replace(file.name, ""); + } + else { + var url = '/api/zip' + curPath + file.fullPath; + url = url.replace(".zip", ""); + } + } + else { + if (file.fullPath == undefined) { + var url = '/api/vfs' + curPath + file.name; + } + else { + var url = '/api/vfs' + curPath + file.fullPath; + } + } + + //New XMLHttpRequest object + let request = new XMLHttpRequest(); + request.open('PUT', url); + request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + request.setRequestHeader("If-Match", "*"); + + // upload progress event + request.upload.addEventListener('progress', function (e) { + let perc = (e.loaded / e.total) * 100; + $('#copy-percentage').text(perc + "%"); + }); + + // Response + request.addEventListener('load', function (e) { + // HTTP status message + if (request.status != 200) { // analyze HTTP status of the response + alert(`Error ${request.status}: ${request.statusText}`); // e.g. 404: Not Found + } else { // show the result + showhidepaKmanLoader(false); + progressBarDisplay(false); + $(".dz-default.dz-message").css("display", "block"); + $.get(("/api/vfs" + curPath.trim()), null, function (data) { + generateDynamicTable(data); + }); + } + }); + + // On error + request.onerror = function () { + showhidepaKmanLoader(false); + progressBarDisplay(false); + alert("Error while PUT request!"); + }; + + // Submit Request with zip file + request.send(file); + } +}); + +//File Manager - Main Section +var root = "/"; +var curPath = "/"; + +$.get("/api/vfs", null, function (data) { + generateDynamicTable(data); +}); + +function generateDynamicTable(fileContent) { + var dataFileManager = fileContent.length + 1; + + if (dataFileManager > 0) { + + //generation of dynamic table, based on data. + var table = document.createElement("table"); + table.id = "fileManagerTable"; + table.className = "table table-striped table-bordered table-hover table-condensed table-responsive"; + table.style.width = '100%'; + table.style.display = 'table'; + + // retrieve column header + var col = []; // define an empty array + for (var i = 0; i < dataFileManager; i++) { + for (var key in fileContent[i]) { + if (col.indexOf(key) === -1) { + col.push(key); + } + } + } + + // CREATE TABLE HEAD . + var tHead = document.createElement("thead"); + + + //Add table header row + var hRow = document.createElement("tr"); + + //Add an empty default column for the table + var emptyHeader = document.createElement("th"); + emptyHeader.style.width = "10%"; + hRow.appendChild(emptyHeader); + + //Adding column headers (with header names) to the table. + for (var i = 0; i < col.length; i++) { + var th = document.createElement("th"); + if ((col[i] != "name") && (col[i] != "size") && (col[i] != "mtime")) { + th.innerHTML = col[i]; + th.style.display = "none"; + } + if (col[i] == "name") { + th.style.width = "50%"; + th.innerText = "Name"; + } + if (col[i] == "size") { + th.style.width = "20%"; + th.innerText = "Size"; + } + if (col[i] == "mtime") { + th.style.width = "20%"; + th.innerText = "Modified Time"; + } + th.style.padding = "0px"; + hRow.appendChild(th); + } + tHead.appendChild(hRow); + table.appendChild(tHead); + + //creating table body. + var tBody = document.createElement("tbody"); + + //Adding column to the rows for the respective table. + for (var i = 0; i < dataFileManager; i++) { + + var bRow = document.createElement("tr"); //Create a row for each record. + + for (var j = -1; j < col.length; j++) { + if (fileContent[i] != undefined) { //checking the default row added for blank folders - skip assignment if data does not exist. + var td = document.createElement("td"); + if (j == -1) { + if ((fileContent[i][col[4]]).indexOf("directory") > 0) { + td.innerHTML = "  " + + ""; + } + else { + td.innerHTML = "  " + + "  " + + ""; + } + } + else if (j == 0) { + //check to set the name of the file/folder + if ((fileContent[i][col[4]]).indexOf("directory") > 0) { + td.innerHTML = " " + + "" + fileContent[i][col[j]] + ""; + } + else { + td.innerHTML = " " + + "" + fileContent[i][col[j]] + ""; + } + } + else if (j == 1) { + //check to set the size of the file/folder + if ((fileContent[i][col[4]]).indexOf("directory") <= 0) { + td.innerHTML = "" + fileContent[i][col[j]] ? (Math.ceil(fileContent[i][col[j]] / 1024) + ' KB') : '' + ""; + } + } + else if (j == 2) { + //check to set the modified time of the file/folder + td.innerHTML = "" + ((fileContent[i][col[j]] && new Date(fileContent[i][col[j]])) || new Date()).toLocaleString() + ""; + } + else { + td.innerHTML = fileContent[i][col[j]]; + td.style.display = "none"; + } + bRow.appendChild(td); + } + } + tBody.appendChild(bRow) + } + table.appendChild(tBody); + + + //add the dynamically created table to the div - divFileManager. + var divContainer = document.getElementById("divFileManager"); + if (divContainer != null) { + if (divContainer.innerHTML.length > 0) { + divContainer.innerHTML = ""; + } + divContainer.appendChild(table); + reStructure(); + } + + } +} + +//function to put file manager div after dropzone div +function reStructure() { + $("#divFileManager").insertAfter(".dz-default.dz-message:first"); +} + +//Tracking click event on file/folder name - would be used for in page edit of files. +$(document).on("click", "a[name='fname']", function (e) { + if ((e.currentTarget.parentElement.parentElement.cells[5].innerHTML).indexOf("directory") > 0) { + curPath = curPath + e.currentTarget.parentElement.parentElement.cells[1].innerText.trim() + "/"; + $("#Path").val(curPath); + $.get(e.currentTarget.parentElement.parentElement.cells[6].innerHTML, null, function (data) { + generateDynamicTable(data); + //$("#spaddPath").text(root); + if ($("#spaddPath").text() == "/") { + $("#spaddPath").text(curPath); + } + else { + $("#spaddPath").text() == "/" + $("#spaddPath").text(curPath); + } + }); + } + else { + $.get(e.currentTarget.parentElement.parentElement.cells[6].innerHTML, null, function (data) { + e.currentTarget.href = e.currentTarget.parentElement.parentElement.cells[6].innerHTML; + window.open( + e.currentTarget.href, + '_blank' + ); + }); + } +}); + +//Click event of anchor tag - aCurPath; sets the path to previous directory. +$(document).on("click", "a[id='aCurPath']", function (e) { + if ($("#spaddPath").text() != '') { + curPath = curPath.split("/"); + curPath.pop(); + curPath.pop(); + curPath = curPath.join("/").trim() + "/"; + $.get(("/api/vfs" + curPath), null, function (data) { + generateDynamicTable(data); + $("#spaddPath").text(curPath); + }); + } +}); + +//Tracking click event of delete Icon +$(document).on("click", "i[id='delIcon']", function (e) { + var result = confirm('Are you sure to delete the file?'); + if (result == true) { + showhidepaKmanLoader(true); + var url = e.currentTarget.parentElement.parentElement.cells[6].innerHTML; + + if (e.currentTarget.parentElement.parentElement.cells[5].innerHTML === "inode/directory") { + url += "?recursive=true"; + } + $.ajax({ + url: url, + method: "DELETE", + headers: { + "If-Match": "*" + }, + success: function (result) { + showhidepaKmanLoader(false); + $.get(("/api/vfs" + curPath.trim()), null, function (data) { + generateDynamicTable(data); + }); + }, + error: function (error) { + showhidepaKmanLoader(false); + alert("Error in delete request!"); + } + }); + } + else { + return; + } +}); + +//Tracking click event of edit Icon +$(document).on("click", "i[id='editIcon']", function (e) { + $(".edit-view").css('display', 'block'); + //$("#aCurPath").css('display', 'none'); + $("#containerFileManager").css('display', 'none'); + + if ($('.edit-view').is(':visible')) { + debugger; + editor.setValue(''); + var url = e.currentTarget.parentElement.parentElement.cells[6].innerHTML; + var filename = e.currentTarget.parentElement.parentElement.cells[1].innerText.trim(); + var mimeType = e.currentTarget.parentElement.parentElement.cells[5].innerText.trim() + //alert('clicked'); + statusbar.fetchingContents(); + getContent(url).then(function (result) { + editor.setValue(result); + if (mimeType === 'text/xml') { + result = vkbeautify.xml(result); + } + statusbar.showFilename(filename); + if (typeof filename !== 'undefined') { + var modelist = ace.require('ace/ext/modelist'); + var mode = modelist.getModeForPath(filename).mode; + if (mode === 'ace/mode/text') { + mode = getCustomMode(filename); + } + // Apply computed syntax mode or default to 'ace/mode/text' + editor.session.setMode(mode); + } + // Set Ace height + resizeAce(); + editor.focus(); + // Attach event handler to set new Ace height on browser resize + $(window).on('resize', function () { + resizeAce(); + }); + }); + } +}); + +//Tracking click event of download Icon +$(document).on("click", "a[id='dwnIcon']", function (e) { + showhidepaKmanLoader(true); + var element = document.createElement('a'); + if ((e.currentTarget.parentElement.parentElement.cells[5].innerHTML).indexOf("directory") > 0) { + var zipUrl = (e.currentTarget.parentElement.parentElement.cells[6].innerText).replace("/vfs/", "/zip/") + element.setAttribute('href', zipUrl); + element.setAttribute('download', e.currentTarget.parentElement.parentElement.cells[1].innerText.trim() + ".zip"); + } + else { + element.setAttribute('href', e.currentTarget.parentElement.parentElement.cells[6].innerText); + element.setAttribute('download', e.currentTarget.parentElement.parentElement.cells[1].innerText.trim()); + } + element.style.display = 'none'; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); + showhidepaKmanLoader(false); +}); + +// **********Ace Combined script from ace - init.js and filebrowser.js************ +// Resize editor window based on browser window.innerHeight +function resizeAce() { + // http://stackoverflow.com/questions/11584061/ + var new_height = (window.innerHeight - 170) + 'px'; + $('#editor').css({ 'height': new_height }); + editor.resize(); +} + +// Additional syntax highlight logic +function getCustomMode(filename) { + var _config = (/^(web|app).config$/i); + var _csproj = (/.(cs|vb)proj$/i); + var _xdt = (/.xdt$/i); + var _aspnet = (/.(cshtml|asp|aspx)$/i); + var _csx = (/.csx$/i); + var syntax_mode = 'ace/mode/text'; + if (filename.match(_config) || + filename.match(_csproj) || + filename.match(_xdt)) { + syntax_mode = 'ace/mode/xml'; + } + if (filename.match(_aspnet) || + filename.match(_csx)) { + syntax_mode = 'ace/mode/csharp'; + } + + return syntax_mode; +} + +// Act II - The Editor Awakens +var editor = ace.edit("editor"); +editor.setTheme("ace/theme/github"); +editor.getSession().setTabSize(4); +editor.getSession().setUseSoftTabs(true); +editor.$blockScrolling = Infinity; +editor.setOptions({ + "showPrintMargin": false, + "fontSize": 14 +}); + +// Show a red bar if content has changed +var contentHasChanged = false; +editor.on('change', function () { + // (Attempt to) separate user change from programatical + // https://github.com/ajaxorg/ace/issues/503 + if (editor.curOp && editor.curOp.command.name) { + if (contentHasChanged) { + return; + } + $('#statusbar').removeClass('statusbar-saved'); + $('#statusbar').addClass('statusbar-red'); + // Let's be nice to jQuery and only .addClass() on first change + contentHasChanged = true; + } +}); + +// Bind CTRL-S as Save without closing +editor.commands.addCommand({ + name: 'saveItem', + bindKey: { + win: 'Ctrl-S', + mac: 'Command-S', + sender: 'editor|cli' + }, + exec: function (env, args, request) { + saveItem(); + } +}); + +this.saveItem = function () { + debugger; + var text = editor.getValue(); + statusbar.savingChanges(); + this.setContent(this, text) + .done(function () { + statusbar.acknowledgeSave(); + }).fail(function (error) { + removeAllToasts(); + showErrorAsToast(error); + statusbar.errorState.set(); + }); +} + +this.saveItemAndClose = function () { + var text = editor.getValue(); + statusbar.savingChanges(); + this.setContent(this, text) + .done(function () { + statusbar.reset(); + + $(".edit-view").css('display', 'none'); + $("#containerFileManager").css('display', 'block'); + //removeAllToasts(); + $.get(("/api/vfs" + curPath.trim()), null, function (data) { + generateDynamicTable(data); + }); + }).fail(function (error) { + removeAllToasts(); + showErrorAsToast(error); + statusbar.errorState.set(); + }); +} + +this.setContent = function (item, text) { + var _url = '/api/vfs' + curPath + item.filename.trim(); + return $.ajax({ + url: _url, + data: text, + method: "PUT", + xhr: function () { // Custom XMLHttpRequest + var myXhr = $.ajaxSettings.xhr(); + if (myXhr.upload) { // Check if upload property exists + myXhr.upload.addEventListener('progress', function (e) { + copyProgressHandlingFunction(e, _url); + }, false); // For handling the progress of the upload + } + return myXhr; + }, + processData: false, + headers: { + "If-Match": "*" + } + }); +} + +this.getContent = function (item) { + return $.ajax({ + url: item, + dataType: "text", + headers: { + "If-Match": "*" + } + }); +} + +this.cancelEdit = function () { + editor.setValue(''); + statusbar.reset(); + $(".edit-view").css('display', 'none'); + $("#containerFileManager").css('display', 'block'); + removeAllToasts(); + $.get(("/api/vfs" + curPath.trim()), null, function (data) { + generateDynamicTable(data); + }); +} +//monitor file upload progress +function copyProgressHandlingFunction(e, uniqueUrl, forceUpdateModal) { + if (e && uniqueUrl && e.lengthComputable) { + copyObjectsManager.addCopyStats(uniqueUrl, e.loaded, e.total); //add/update stats + } + var perc = copyObjectsManager.getCurrentPercentCompletion(); // perc-per-total transaction + var copyObjs = copyObjectsManager.getCopyStats(); + + $('#copy-percentage').text(perc + "%"); + + if (perc != 100 && perc != 0) { + viewModel.isTransferInProgress(true); + } + + //handler for clearing out cache once it gets too large + var currentObjCount = Object.keys(copyObjs).length; + if (currentObjCount > 2000) { + for (var i = 0; i < 1000; i++) { //delete oldest 1000 copy prog objects + copyObjectsManager.removeAtIndex(0); + } + var date = new Date(); + copyObjectsManager.setInfoMessage('Cache was partialy auto-cleared at ' + date.toLocaleString() + ' for performance improvements'); + } + + if ($('#files-transfered-modal').is(':visible') || forceUpdateModal) { // update if modal visible + viewModel.copyProgStats(copyObjs); // update viewmodel + + var modalHeaderText = ''; + if (perc < 100) { + modalHeaderText = 'Transferred Files (' + perc + '%).'; + } else { + modalHeaderText = ' Transferred Files (' + perc + '%).'; + } + modalHeaderText += ' ' + ((_temp = copyObjectsManager.getInfoMessage()) ? _temp : ""); + $('#files-transfered-modal .modal-header').html(modalHeaderText); + } + +} + +// Hook the little pencil glyph and apply Ace syntax mode based on file extension +//$('.edit').on('click', '.fa-pencil', function () { +$("#editIcon").click(function () { + debugger; + if ($('.edit-view').is(':visible')) { + var filename; + try { + filename = (window.viewModel.fileEdit.peek()).name(); + } + catch (e) { + if (typeof console == 'object') { + console.log('Can not get filename. ' + e); + } + } + finally { + if (typeof filename !== 'undefined') { + var modelist = ace.require('ace/ext/modelist'); + var mode = modelist.getModeForPath(filename).mode; + if (mode === 'ace/mode/text') { + mode = getCustomMode(filename); + } + // Apply computed syntax mode or default to 'ace/mode/text' + editor.session.setMode(mode); + } + // Set Ace height + resizeAce(); + editor.focus(); + // Attach event handler to set new Ace height on browser resize + $(window).on('resize', function () { + resizeAce(); + }); + } + } +}); + +// Custom status bar for Ace (aka Project Wunderbar) +var statusbar = { + showFilename: + function (fileName) { + try { + if (fileName == undefined) { + filename = filename; + } + else { + filename = fileName + } + } + catch (e) { + filename = 'Can not get filename. See console for details.'; + if (typeof console == 'object') { + console.error('Can not get filename: %s', e); + } + } + finally { + $('#statusbar').text(filename); + } + }, + reset: + function () { + $('#statusbar').text(''); + $('#statusbar').removeClass('statusbar-red'); + $('#statusbar').removeClass('statusbar-saved'); + $('#statusbar').css('background', 'none'); + // Clear editor window + editor.setValue(''); + // Flag from ace-init.js + contentHasChanged = false; + // Clear search box + if (editor.searchBox) { + editor.searchBox.activeInput.value = ''; + editor.searchBox.hide(); + } + }, + savingChanges: + function () { + $('#statusbar').text('Saving changes...'); + $('#statusbar').prepend(''); + }, + fetchingContents: + function () { + $('#statusbar').text('Fetching contents...'); + $('#statusbar').prepend(''); + }, + acknowledgeSave: + function () { + this.errorState.remove(); + $('#statusbar').addClass('statusbar-saved'); + contentHasChanged = false; + this.showFilename(); + }, + errorState: + { + set: function () { + // We could not save the file + // Mild panic attack, turn statusbar red + statusbar.showFilename(); + $('#statusbar').css('background', '#ffdddd'); + }, + remove: function () { + $('#statusbar').css('background', 'none'); + $('#statusbar').removeClass('statusbar-red'); + } + } +}; + +var copyObjectsManager = { + init: function () { + this._copyProgressObjects = {}; + this.infoMessage = ''; + }, + getInfoMessage: function () { + return this._infoMessage; + }, + setInfoMessage: function (message) { + this._infoMessage = message; + }, + addCopyStats: function (uri, loadedData, totalData) { + + uri = uri.substring(uri.indexOf('/vfs') + 5, uri.length); // slice uri to be prettier[ex: http://localhost:37911/api/vfs/ttesstt//Kudu.FunctionalTests/Vfs/VfsControllerTest.cs => ttesstt//Kudu.FunctionalTests/Vfs/VfsControllerTest.cs] + if (this._copyProgressObjects[uri]) { + if (loadedData === totalData) { + this._copyProgressObjects[uri].endDate = $.now(); + } else { + this._copyProgressObjects[uri].copyPackEnded = false; + } + } else { + this._copyProgressObjects[uri] = {}; + this._copyProgressObjects[uri].startDate = $.now(); + this._copyProgressObjects[uri].copyPackEnded = false; //this is used for when copying multiple files in the same time so that i may still have a coherent percentage + } + + if (totalData === 0) { // empty files appear to have size 0 + totalData = loadedData = 1; + } + + this._copyProgressObjects[uri].loadedData = loadedData; + this._copyProgressObjects[uri].totalData = totalData; + }, + getCopyStats: function () { + return this._copyProgressObjects; + }, + getCurrentPercentCompletion: function () { + var currentTransfered = 0; + var finalTransfered = 0; + var foundItem = false; + + for (var key in this._copyProgressObjects) { + var co = this._copyProgressObjects[key]; + if (co.copyPackEnded === false) { + foundItem = true; + currentTransfered += co.loadedData; + finalTransfered += co.totalData; + } + } + + var perc = 0; + if (foundItem) { + perc = parseInt((currentTransfered / finalTransfered) * 100); + } else { // to avoid 0/0 + perc = 100; + } + + if (perc === 100 && foundItem) { // if all transactions have finished & have some unmarked transaction pack, cancel it out + for (var key in this._copyProgressObjects) { + this._copyProgressObjects[key].copyPackEnded = true; + } + } + + return perc; + }, + removeAtIndex: function (index) { + delete this._copyProgressObjects[index]; + }, + clearData: function () { + var date = new Date(); + this._infoMessage = 'You have cleared the cache at ' + date.toLocaleString(); + this._copyProgressObjects = {}; + } +} + +copyObjectsManager.init(); + +function showErrorAsToast(error) { + viewModel.processing(false); + // Check if 'error' has a status property. + // If true, treat as xhr response, otherwise string. + if (error.status) { + try { + var message = JSON.parse(error.responseText).Message; + } + catch (e) { + // error.responseText may be poisoned with HTML + // (i.e. session expires and the 403 Forbidden response from App Service contains tons of markup) + // Let's just ignore it if that's the case. We would need Cortana or something to parse that and + // extract a meaningful message. + if (!(/\/i.test(error.responseText))) { + var message = error.responseText; + } + } + var status = error.status; + var statusText = error.statusText; + var textToRender = status + ' ' + statusText + (typeof message !== 'undefined' ? ': ' + message : ''); + toast(textToRender); + } + // 'error' is a string + else toast(error); +} + +function toast(errorMsg) { + var scaffold = '\ +
\ +
\ + \ +
\ +
\ +

ERROR

' + + errorMsg + + '
\ +
'; + var item = $(scaffold); + $('#toast').append($(item)); + $(item).animate({ 'right': '12px' }, 'fast'); + $('#toast').on('click', '#toast-close', function () { + var notification = $(this).parent(); + notification.animate({ 'right': '-400px' }, function () { + notification.remove(); + }); + }); +} + +function removeAllToasts() { + $('.notification').remove(); +} + +function showhidepaKmanLoader(shVal) { + if (shVal) { + $('.paKman').show(); + } + else { + $('.paKman').hide(); + } +} + +function progressBarDisplay(shVal) { + if (shVal) { + $('.btn.btn-info.box-border').show(); + } + else { + $('.btn.btn-info.box-border').hide(); + } +} + +function showAceHelpModal() { + $('#ace-help-modal').modal(); + //Can also be loaded from DebugConsole using path ~/Pages/filename + $('#ace-help-modal .modal-body').load('/AceHelp.html', + function (response, status, xhr) { + if (status == 'error') { + $(this).html(''); + if (typeof console == 'object') { + console.error('Can not load help page: ' + 'xhr.status = ' + + xhr.status + ' ' + xhr.statusText); + } + } + }); +} + +$("#tblFileManager.table-responsive").hover(function () { + $("#upload-widget-zip.dropzone.dz-clickable").css("background-color", "#f1f1f1"); + $("#upload-widget-zip.dropzone.dz-clickable").height($("#upload-widget.dropzone.dz-clickable").height()); +}, function () { + $("#upload-widget-zip.dropzone.dz-clickable").css("background-color", ""); +}); \ No newline at end of file From 4641e2b6d34c71c4b58281cded0f76913b693e3d Mon Sep 17 00:00:00 2001 From: Anand Anthony Francis Date: Sat, 21 Nov 2020 03:40:34 +0530 Subject: [PATCH 4/4] adding edit and zip file deploy to filemanager --- .../Pages/NewUI/fileManager.cshtml | 2 +- .../wwwroot/Content/Scripts/dragdrop.js | 22 +++++++++++++++++++ .../wwwroot/Content/Scripts/dropzone.min.js | 2 -- .../wwwroot/Content/Scripts/fileManager.js | 4 ---- 4 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 Kudu.Services.Web/wwwroot/Content/Scripts/dragdrop.js delete mode 100644 Kudu.Services.Web/wwwroot/Content/Scripts/dropzone.min.js diff --git a/Kudu.Services.Web/Pages/NewUI/fileManager.cshtml b/Kudu.Services.Web/Pages/NewUI/fileManager.cshtml index 4a0ef8af..b2d4cfbf 100644 --- a/Kudu.Services.Web/Pages/NewUI/fileManager.cshtml +++ b/Kudu.Services.Web/Pages/NewUI/fileManager.cshtml @@ -83,7 +83,7 @@ - + @**@ diff --git a/Kudu.Services.Web/wwwroot/Content/Scripts/dragdrop.js b/Kudu.Services.Web/wwwroot/Content/Scripts/dragdrop.js new file mode 100644 index 00000000..f9305598 --- /dev/null +++ b/Kudu.Services.Web/wwwroot/Content/Scripts/dragdrop.js @@ -0,0 +1,22 @@ +/*License + +(The MIT License) +Copyright(c) 2012 Matias Meno < m@tias.me> +Logo & Website Design(c) 2015 "1910" www.weare1910.com +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +"use strict"; function _possibleConstructorReturn(a, b) { if (!a) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !b || "object" != typeof b && "function" != typeof b ? a : b } function _inherits(a, b) { if ("function" != typeof b && null !== b) throw new TypeError("Super expression must either be null or a function, not " + typeof b); a.prototype = Object.create(b && b.prototype, { constructor: { value: a, enumerable: !1, writable: !0, configurable: !0 } }), b && (Object.setPrototypeOf ? Object.setPrototypeOf(a, b) : a.__proto__ = b) } function _classCallCheck(a, b) { if (!(a instanceof b)) throw new TypeError("Cannot call a class as a function") } function __guard__(a, b) { return void 0 !== a && null !== a ? b(a) : void 0 } function __guardMethod__(a, b, c) { return void 0 !== a && null !== a && "function" == typeof a[b] ? c(a, b) : void 0 } var _createClass = function () { function a(a, b) { for (var c = 0; c < b.length; c++) { var d = b[c]; d.enumerable = d.enumerable || !1, d.configurable = !0, "value" in d && (d.writable = !0), Object.defineProperty(a, d.key, d) } } return function (b, c, d) { return c && a(b.prototype, c), d && a(b, d), b } }(), Emitter = function () { function a() { _classCallCheck(this, a) } return _createClass(a, [{ key: "on", value: function (a, b) { return this._callbacks = this._callbacks || {}, this._callbacks[a] || (this._callbacks[a] = []), this._callbacks[a].push(b), this } }, { key: "emit", value: function (a) { this._callbacks = this._callbacks || {}; var b = this._callbacks[a]; if (b) { for (var c = arguments.length, d = Array(c > 1 ? c - 1 : 0), e = 1; e < c; e++)d[e - 1] = arguments[e]; for (var f = b, g = 0, f = f; ;) { var h; if (g >= f.length) break; h = f[g++]; h.apply(this, d) } } return this } }, { key: "off", value: function (a, b) { if (!this._callbacks || 0 === arguments.length) return this._callbacks = {}, this; var c = this._callbacks[a]; if (!c) return this; if (1 === arguments.length) return delete this._callbacks[a], this; for (var d = 0; d < c.length; d++) { if (c[d] === b) { c.splice(d, 1); break } } return this } }]), a }(), Dropzone = function (a) { + function b(a, c) { _classCallCheck(this, b); var d = _possibleConstructorReturn(this, (b.__proto__ || Object.getPrototypeOf(b)).call(this)), e = void 0, f = void 0; if (d.element = a, d.version = b.version, d.defaultOptions.previewTemplate = d.defaultOptions.previewTemplate.replace(/\n*/g, ""), d.clickableElements = [], d.listeners = [], d.files = [], "string" == typeof d.element && (d.element = document.querySelector(d.element)), !d.element || null == d.element.nodeType) throw new Error("Invalid dropzone element."); if (d.element.dropzone) throw new Error("Dropzone already attached."); b.instances.push(d), d.element.dropzone = d; var g = null != (f = b.optionsForElement(d.element)) ? f : {}; if (d.options = b.extend({}, d.defaultOptions, g, null != c ? c : {}), d.options.forceFallback || !b.isBrowserSupported()) { var h; return h = d.options.fallback.call(d), _possibleConstructorReturn(d, h) } if (null == d.options.url && (d.options.url = d.element.getAttribute("action")), !d.options.url) throw new Error("No URL provided."); if (d.options.acceptedFiles && d.options.acceptedMimeTypes) throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated."); if (d.options.uploadMultiple && d.options.chunking) throw new Error("You cannot set both: uploadMultiple and chunking."); return d.options.acceptedMimeTypes && (d.options.acceptedFiles = d.options.acceptedMimeTypes, delete d.options.acceptedMimeTypes), null != d.options.renameFilename && (d.options.renameFile = function (a) { return d.options.renameFilename.call(d, a.name, a) }), d.options.method = d.options.method.toUpperCase(), (e = d.getExistingFallback()) && e.parentNode && e.parentNode.removeChild(e), !1 !== d.options.previewsContainer && (d.options.previewsContainer ? d.previewsContainer = b.getElement(d.options.previewsContainer, "previewsContainer") : d.previewsContainer = d.element), d.options.clickable && (!0 === d.options.clickable ? d.clickableElements = [d.element] : d.clickableElements = b.getElements(d.options.clickable, "clickable")), d.init(), d } return _inherits(b, a), _createClass(b, null, [{ key: "initClass", value: function () { this.prototype.Emitter = Emitter, this.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "addedfiles", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached", "queuecomplete"], this.prototype.defaultOptions = { url: null, method: "post", withCredentials: !1, timeout: 3e4, parallelUploads: 2, uploadMultiple: !1, chunking: !1, forceChunking: !1, chunkSize: 2e6, parallelChunkUploads: !1, retryChunks: !1, retryChunksLimit: 3, maxFilesize: 256, paramName: "file", createImageThumbnails: !0, maxThumbnailFilesize: 10, thumbnailWidth: 120, thumbnailHeight: 120, thumbnailMethod: "crop", resizeWidth: null, resizeHeight: null, resizeMimeType: null, resizeQuality: .8, resizeMethod: "contain", filesizeBase: 1e3, maxFiles: null, headers: null, clickable: !0, ignoreHiddenFiles: !0, acceptedFiles: null, acceptedMimeTypes: null, autoProcessQueue: !0, autoQueue: !0, addRemoveLinks: !1, previewsContainer: null, hiddenInputContainer: "body", capture: null, renameFilename: null, renameFile: null, forceFallback: !1, dictDefaultMessage: "Drop files here to upload", dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.", dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.", dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.", dictInvalidFileType: "You can't upload files of this type.", dictResponseError: "Server responded with {{statusCode}} code.", dictCancelUpload: "Cancel upload", dictUploadCanceled: "Upload canceled.", dictCancelUploadConfirmation: "Are you sure you want to cancel this upload?", dictRemoveFile: "Remove file", dictRemoveFileConfirmation: null, dictMaxFilesExceeded: "You can not upload any more files.", dictFileSizeUnits: { tb: "TB", gb: "GB", mb: "MB", kb: "KB", b: "b" }, init: function () { }, params: function (a, b, c) { if (c) return { dzuuid: c.file.upload.uuid, dzchunkindex: c.index, dztotalfilesize: c.file.size, dzchunksize: this.options.chunkSize, dztotalchunkcount: c.file.upload.totalChunkCount, dzchunkbyteoffset: c.index * this.options.chunkSize } }, accept: function (a, b) { return b() }, chunksUploaded: function (a, b) { b() }, fallback: function () { var a = void 0; this.element.className = this.element.className + " dz-browser-not-supported"; for (var c = this.element.getElementsByTagName("div"), d = 0, c = c; ;) { var e; if (d >= c.length) break; e = c[d++]; var f = e; if (/(^| )dz-message($| )/.test(f.className)) { a = f, f.className = "dz-message"; break } } a || (a = b.createElement('
'), this.element.appendChild(a)); var g = a.getElementsByTagName("span")[0]; return g && (null != g.textContent ? g.textContent = this.options.dictFallbackMessage : null != g.innerText && (g.innerText = this.options.dictFallbackMessage)), this.element.appendChild(this.getFallbackForm()) }, resize: function (a, b, c, d) { var e = { srcX: 0, srcY: 0, srcWidth: a.width, srcHeight: a.height }, f = a.width / a.height; null == b && null == c ? (b = e.srcWidth, c = e.srcHeight) : null == b ? b = c * f : null == c && (c = b / f), b = Math.min(b, e.srcWidth), c = Math.min(c, e.srcHeight); var g = b / c; if (e.srcWidth > b || e.srcHeight > c) if ("crop" === d) f > g ? (e.srcHeight = a.height, e.srcWidth = e.srcHeight * g) : (e.srcWidth = a.width, e.srcHeight = e.srcWidth / g); else { if ("contain" !== d) throw new Error("Unknown resizeMethod '" + d + "'"); f > g ? c = b / f : b = c * f } return e.srcX = (a.width - e.srcWidth) / 2, e.srcY = (a.height - e.srcHeight) / 2, e.trgWidth = b, e.trgHeight = c, e }, transformFile: function (a, b) { return (this.options.resizeWidth || this.options.resizeHeight) && a.type.match(/image.*/) ? this.resizeImage(a, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, b) : b(a) }, previewTemplate: '
\n
\n
\n
\n
\n
\n
\n
\n
\n \n Check\n \n \n \n \n \n
\n
\n \n Error\n \n \n \n \n \n \n \n
\n
', drop: function (a) { return this.element.classList.remove("dz-drag-hover") }, dragstart: function (a) { }, dragend: function (a) { return this.element.classList.remove("dz-drag-hover") }, dragenter: function (a) { return this.element.classList.add("dz-drag-hover") }, dragover: function (a) { return this.element.classList.add("dz-drag-hover") }, dragleave: function (a) { return this.element.classList.remove("dz-drag-hover") }, paste: function (a) { }, reset: function () { return this.element.classList.remove("dz-started") }, addedfile: function (a) { var c = this; if (this.element === this.previewsContainer && this.element.classList.add("dz-started"), this.previewsContainer) { a.previewElement = b.createElement(this.options.previewTemplate.trim()), a.previewTemplate = a.previewElement, this.previewsContainer.appendChild(a.previewElement); for (var d = a.previewElement.querySelectorAll("[data-dz-name]"), e = 0, d = d; ;) { var f; if (e >= d.length) break; f = d[e++]; var g = f; g.textContent = a.name } for (var h = a.previewElement.querySelectorAll("[data-dz-size]"), i = 0, h = h; !(i >= h.length);)g = h[i++], g.innerHTML = this.filesize(a.size); this.options.addRemoveLinks && (a._removeLink = b.createElement('' + this.options.dictRemoveFile + ""), a.previewElement.appendChild(a._removeLink)); for (var j = function (d) { return d.preventDefault(), d.stopPropagation(), a.status === b.UPLOADING ? b.confirm(c.options.dictCancelUploadConfirmation, function () { return c.removeFile(a) }) : c.options.dictRemoveFileConfirmation ? b.confirm(c.options.dictRemoveFileConfirmation, function () { return c.removeFile(a) }) : c.removeFile(a) }, k = a.previewElement.querySelectorAll("[data-dz-remove]"), l = 0, k = k; ;) { var m; if (l >= k.length) break; m = k[l++]; m.addEventListener("click", j) } } }, removedfile: function (a) { return null != a.previewElement && null != a.previewElement.parentNode && a.previewElement.parentNode.removeChild(a.previewElement), this._updateMaxFilesReachedClass() }, thumbnail: function (a, b) { if (a.previewElement) { a.previewElement.classList.remove("dz-file-preview"); for (var c = a.previewElement.querySelectorAll("[data-dz-thumbnail]"), d = 0, c = c; ;) { var e; if (d >= c.length) break; e = c[d++]; var f = e; f.alt = a.name, f.src = b } return setTimeout(function () { return a.previewElement.classList.add("dz-image-preview") }, 1) } }, error: function (a, b) { if (a.previewElement) { a.previewElement.classList.add("dz-error"), "String" != typeof b && b.error && (b = b.error); for (var c = a.previewElement.querySelectorAll("[data-dz-errormessage]"), d = 0, c = c; ;) { var e; if (d >= c.length) break; e = c[d++]; e.textContent = b } } }, errormultiple: function () { }, processing: function (a) { if (a.previewElement && (a.previewElement.classList.add("dz-processing"), a._removeLink)) return a._removeLink.innerHTML = this.options.dictCancelUpload }, processingmultiple: function () { }, uploadprogress: function (a, b, c) { if (a.previewElement) for (var d = a.previewElement.querySelectorAll("[data-dz-uploadprogress]"), e = 0, d = d; ;) { var f; if (e >= d.length) break; f = d[e++]; var g = f; "PROGRESS" === g.nodeName ? g.value = b : g.style.width = b + "%" } }, totaluploadprogress: function () { }, sending: function () { }, sendingmultiple: function () { }, success: function (a) { if (a.previewElement) return a.previewElement.classList.add("dz-success") }, successmultiple: function () { }, canceled: function (a) { return this.emit("error", a, this.options.dictUploadCanceled) }, canceledmultiple: function () { }, complete: function (a) { if (a._removeLink && (a._removeLink.innerHTML = this.options.dictRemoveFile), a.previewElement) return a.previewElement.classList.add("dz-complete") }, completemultiple: function () { }, maxfilesexceeded: function () { }, maxfilesreached: function () { }, queuecomplete: function () { }, addedfiles: function () { } }, this.prototype._thumbnailQueue = [], this.prototype._processingThumbnail = !1 } }, { key: "extend", value: function (a) { for (var b = arguments.length, c = Array(b > 1 ? b - 1 : 0), d = 1; d < b; d++)c[d - 1] = arguments[d]; for (var e = c, f = 0, e = e; ;) { var g; if (f >= e.length) break; g = e[f++]; var h = g; for (var i in h) { var j = h[i]; a[i] = j } } return a } }]), _createClass(b, [{ key: "getAcceptedFiles", value: function () { return this.files.filter(function (a) { return a.accepted }).map(function (a) { return a }) } }, { key: "getRejectedFiles", value: function () { return this.files.filter(function (a) { return !a.accepted }).map(function (a) { return a }) } }, { key: "getFilesWithStatus", value: function (a) { return this.files.filter(function (b) { return b.status === a }).map(function (a) { return a }) } }, { key: "getQueuedFiles", value: function () { return this.getFilesWithStatus(b.QUEUED) } }, { key: "getUploadingFiles", value: function () { return this.getFilesWithStatus(b.UPLOADING) } }, { key: "getAddedFiles", value: function () { return this.getFilesWithStatus(b.ADDED) } }, { key: "getActiveFiles", value: function () { return this.files.filter(function (a) { return a.status === b.UPLOADING || a.status === b.QUEUED }).map(function (a) { return a }) } }, { key: "init", value: function () { var a = this; if ("form" === this.element.tagName && this.element.setAttribute("enctype", "multipart/form-data"), this.element.classList.contains("dropzone") && !this.element.querySelector(".dz-message") && this.element.appendChild(b.createElement('
' + this.options.dictDefaultMessage + "
")), this.clickableElements.length) { !function c() { return a.hiddenFileInput && a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput), a.hiddenFileInput = document.createElement("input"), a.hiddenFileInput.setAttribute("type", "file"), (null === a.options.maxFiles || a.options.maxFiles > 1) && a.hiddenFileInput.setAttribute("multiple", "multiple"), a.hiddenFileInput.className = "dz-hidden-input", null !== a.options.acceptedFiles && a.hiddenFileInput.setAttribute("accept", a.options.acceptedFiles), null !== a.options.capture && a.hiddenFileInput.setAttribute("capture", a.options.capture), a.hiddenFileInput.style.visibility = "hidden", a.hiddenFileInput.style.position = "absolute", a.hiddenFileInput.style.top = "0", a.hiddenFileInput.style.left = "0", a.hiddenFileInput.style.height = "0", a.hiddenFileInput.style.width = "0", b.getElement(a.options.hiddenInputContainer, "hiddenInputContainer").appendChild(a.hiddenFileInput), a.hiddenFileInput.addEventListener("change", function () { var b = a.hiddenFileInput.files; if (b.length) for (var d = b, e = 0, d = d; ;) { var f; if (e >= d.length) break; f = d[e++]; var g = f; a.addFile(g) } return a.emit("addedfiles", b), c() }) }() } this.URL = null !== window.URL ? window.URL : window.webkitURL; for (var c = this.events, d = 0, c = c; ;) { var e; if (d >= c.length) break; e = c[d++]; var f = e; this.on(f, this.options[f]) } this.on("uploadprogress", function () { return a.updateTotalUploadProgress() }), this.on("removedfile", function () { return a.updateTotalUploadProgress() }), this.on("canceled", function (b) { return a.emit("complete", b) }), this.on("complete", function (b) { if (0 === a.getAddedFiles().length && 0 === a.getUploadingFiles().length && 0 === a.getQueuedFiles().length) return setTimeout(function () { return a.emit("queuecomplete") }, 0) }); var g = function (a) { return a.stopPropagation(), a.preventDefault ? a.preventDefault() : a.returnValue = !1 }; return this.listeners = [{ element: this.element, events: { dragstart: function (b) { return a.emit("dragstart", b) }, dragenter: function (b) { return g(b), a.emit("dragenter", b) }, dragover: function (b) { var c = void 0; try { c = b.dataTransfer.effectAllowed } catch (a) { } return b.dataTransfer.dropEffect = "move" === c || "linkMove" === c ? "move" : "copy", g(b), a.emit("dragover", b) }, dragleave: function (b) { return a.emit("dragleave", b) }, drop: function (b) { return g(b), a.drop(b) }, dragend: function (b) { return a.emit("dragend", b) } } }], this.clickableElements.forEach(function (c) { return a.listeners.push({ element: c, events: { click: function (d) { return (c !== a.element || d.target === a.element || b.elementInside(d.target, a.element.querySelector(".dz-message"))) && a.hiddenFileInput.click(), !0 } } }) }), this.enable(), this.options.init.call(this) } }, { key: "destroy", value: function () { return this.disable(), this.removeAllFiles(!0), (null != this.hiddenFileInput ? this.hiddenFileInput.parentNode : void 0) && (this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput), this.hiddenFileInput = null), delete this.element.dropzone, b.instances.splice(b.instances.indexOf(this), 1) } }, { key: "updateTotalUploadProgress", value: function () { var a = void 0, b = 0, c = 0; if (this.getActiveFiles().length) { for (var d = this.getActiveFiles(), e = 0, d = d; ;) { var f; if (e >= d.length) break; f = d[e++]; var g = f; b += g.upload.bytesSent, c += g.upload.total } a = 100 * b / c } else a = 100; return this.emit("totaluploadprogress", a, c, b) } }, { key: "_getParamName", value: function (a) { return "function" == typeof this.options.paramName ? this.options.paramName(a) : this.options.paramName + (this.options.uploadMultiple ? "[" + a + "]" : "") } }, { key: "_renameFile", value: function (a) { return "function" != typeof this.options.renameFile ? a.name : this.options.renameFile(a) } }, { key: "getFallbackForm", value: function () { var a = void 0, c = void 0; if (a = this.getExistingFallback()) return a; var d = '
'; this.options.dictFallbackText && (d += "

" + this.options.dictFallbackText + "

"), d += '
'; var e = b.createElement(d); return "FORM" !== this.element.tagName ? (c = b.createElement('
'), c.appendChild(e)) : (this.element.setAttribute("enctype", "multipart/form-data"), this.element.setAttribute("method", this.options.method)), null != c ? c : e } }, { key: "getExistingFallback", value: function () { for (var a = ["div", "form"], b = 0; b < a.length; b++) { var c, d = a[b]; if (c = function (a) { for (var b = a, c = 0, b = b; ;) { var d; if (c >= b.length) break; d = b[c++]; var e = d; if (/(^| )fallback($| )/.test(e.className)) return e } }(this.element.getElementsByTagName(d))) return c } } }, { key: "setupEventListeners", value: function () { return this.listeners.map(function (a) { return function () { var b = []; for (var c in a.events) { var d = a.events[c]; b.push(a.element.addEventListener(c, d, !1)) } return b }() }) } }, { key: "removeEventListeners", value: function () { return this.listeners.map(function (a) { return function () { var b = []; for (var c in a.events) { var d = a.events[c]; b.push(a.element.removeEventListener(c, d, !1)) } return b }() }) } }, { key: "disable", value: function () { var a = this; return this.clickableElements.forEach(function (a) { return a.classList.remove("dz-clickable") }), this.removeEventListeners(), this.disabled = !0, this.files.map(function (b) { return a.cancelUpload(b) }) } }, { key: "enable", value: function () { return delete this.disabled, this.clickableElements.forEach(function (a) { return a.classList.add("dz-clickable") }), this.setupEventListeners() } }, { key: "filesize", value: function (a) { var b = 0, c = "b"; if (a > 0) { for (var d = ["tb", "gb", "mb", "kb", "b"], e = 0; e < d.length; e++) { var f = d[e]; if (a >= Math.pow(this.options.filesizeBase, 4 - e) / 10) { b = a / Math.pow(this.options.filesizeBase, 4 - e), c = f; break } } b = Math.round(10 * b) / 10 } return "" + b + " " + this.options.dictFileSizeUnits[c] } }, { key: "_updateMaxFilesReachedClass", value: function () { return null != this.options.maxFiles && this.getAcceptedFiles().length >= this.options.maxFiles ? (this.getAcceptedFiles().length === this.options.maxFiles && this.emit("maxfilesreached", this.files), this.element.classList.add("dz-max-files-reached")) : this.element.classList.remove("dz-max-files-reached") } }, { key: "drop", value: function (a) { if (a.dataTransfer) { this.emit("drop", a); for (var b = [], c = 0; c < a.dataTransfer.files.length; c++)b[c] = a.dataTransfer.files[c]; if (this.emit("addedfiles", b), b.length) { var d = a.dataTransfer.items; d && d.length && null != d[0].webkitGetAsEntry ? this._addFilesFromItems(d) : this.handleFiles(b) } } } }, { key: "paste", value: function (a) { if (null != __guard__(null != a ? a.clipboardData : void 0, function (a) { return a.items })) { this.emit("paste", a); var b = a.clipboardData.items; return b.length ? this._addFilesFromItems(b) : void 0 } } }, { key: "handleFiles", value: function (a) { for (var b = a, c = 0, b = b; ;) { var d; if (c >= b.length) break; d = b[c++]; var e = d; this.addFile(e) } } }, { key: "_addFilesFromItems", value: function (a) { var b = this; return function () { for (var c = [], d = a, e = 0, d = d; ;) { var f; if (e >= d.length) break; f = d[e++]; var g, h = f; null != h.webkitGetAsEntry && (g = h.webkitGetAsEntry()) ? g.isFile ? c.push(b.addFile(h.getAsFile())) : g.isDirectory ? c.push(b._addFilesFromDirectory(g, g.name)) : c.push(void 0) : null != h.getAsFile && (null == h.kind || "file" === h.kind) ? c.push(b.addFile(h.getAsFile())) : c.push(void 0) } return c }() } }, { key: "_addFilesFromDirectory", value: function (a, b) { var c = this, d = a.createReader(), e = function (a) { return __guardMethod__(console, "log", function (b) { return b.log(a) }) }; return function a() { return d.readEntries(function (d) { if (d.length > 0) { for (var e = d, f = 0, e = e; ;) { var g; if (f >= e.length) break; g = e[f++]; var h = g; h.isFile ? h.file(function (a) { if (!c.options.ignoreHiddenFiles || "." !== a.name.substring(0, 1)) return a.fullPath = b + "/" + a.name, c.addFile(a) }) : h.isDirectory && c._addFilesFromDirectory(h, b + "/" + h.name) } a() } return null }, e) }() } }, { key: "accept", value: function (a, c) { return this.options.maxFilesize && a.size > 1024 * this.options.maxFilesize * 1024 ? c(this.options.dictFileTooBig.replace("{{filesize}}", Math.round(a.size / 1024 / 10.24) / 100).replace("{{maxFilesize}}", this.options.maxFilesize)) : b.isValidFile(a, this.options.acceptedFiles) ? null != this.options.maxFiles && this.getAcceptedFiles().length >= this.options.maxFiles ? (c(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}", this.options.maxFiles)), this.emit("maxfilesexceeded", a)) : this.options.accept.call(this, a, c) : c(this.options.dictInvalidFileType) } }, { key: "addFile", value: function (a) { var c = this; return a.upload = { uuid: b.uuidv4(), progress: 0, total: a.size, bytesSent: 0, filename: this._renameFile(a), chunked: this.options.chunking && (this.options.forceChunking || a.size > this.options.chunkSize), totalChunkCount: Math.ceil(a.size / this.options.chunkSize) }, this.files.push(a), a.status = b.ADDED, this.emit("addedfile", a), this._enqueueThumbnail(a), this.accept(a, function (b) { return b ? (a.accepted = !1, c._errorProcessing([a], b)) : (a.accepted = !0, c.options.autoQueue && c.enqueueFile(a)), c._updateMaxFilesReachedClass() }) } }, { key: "enqueueFiles", value: function (a) { for (var b = a, c = 0, b = b; ;) { var d; if (c >= b.length) break; d = b[c++]; var e = d; this.enqueueFile(e) } return null } }, { key: "enqueueFile", value: function (a) { var c = this; if (a.status !== b.ADDED || !0 !== a.accepted) throw new Error("This file can't be queued because it has already been processed or was rejected."); if (a.status = b.QUEUED, this.options.autoProcessQueue) return setTimeout(function () { return c.processQueue() }, 0) } }, { key: "_enqueueThumbnail", value: function (a) { var b = this; if (this.options.createImageThumbnails && a.type.match(/image.*/) && a.size <= 1024 * this.options.maxThumbnailFilesize * 1024) return this._thumbnailQueue.push(a), setTimeout(function () { return b._processThumbnailQueue() }, 0) } }, { key: "_processThumbnailQueue", value: function () { var a = this; if (!this._processingThumbnail && 0 !== this._thumbnailQueue.length) { this._processingThumbnail = !0; var b = this._thumbnailQueue.shift(); return this.createThumbnail(b, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, !0, function (c) { return a.emit("thumbnail", b, c), a._processingThumbnail = !1, a._processThumbnailQueue() }) } } }, { key: "removeFile", value: function (a) { if (a.status === b.UPLOADING && this.cancelUpload(a), this.files = without(this.files, a), this.emit("removedfile", a), 0 === this.files.length) return this.emit("reset") } }, { key: "removeAllFiles", value: function (a) { null == a && (a = !1); for (var c = this.files.slice(), d = 0, c = c; ;) { var e; if (d >= c.length) break; e = c[d++]; var f = e; (f.status !== b.UPLOADING || a) && this.removeFile(f) } return null } }, { key: "resizeImage", value: function (a, c, d, e, f) { var g = this; return this.createThumbnail(a, c, d, e, !0, function (c, d) { if (null == d) return f(a); var e = g.options.resizeMimeType; null == e && (e = a.type); var h = d.toDataURL(e, g.options.resizeQuality); return "image/jpeg" !== e && "image/jpg" !== e || (h = ExifRestore.restore(a.dataURL, h)), f(b.dataURItoBlob(h)) }) } }, { key: "createThumbnail", value: function (a, b, c, d, e, f) { var g = this, h = new FileReader; return h.onload = function () { return a.dataURL = h.result, "image/svg+xml" === a.type ? void (null != f && f(h.result)) : g.createThumbnailFromUrl(a, b, c, d, e, f) }, h.readAsDataURL(a) } }, { key: "createThumbnailFromUrl", value: function (a, b, c, d, e, f, g) { var h = this, i = document.createElement("img"); return g && (i.crossOrigin = g), i.onload = function () { var g = function (a) { return a(1) }; return "undefined" != typeof EXIF && null !== EXIF && e && (g = function (a) { return EXIF.getData(i, function () { return a(EXIF.getTag(this, "Orientation")) }) }), g(function (e) { a.width = i.width, a.height = i.height; var g = h.options.resize.call(h, a, b, c, d), j = document.createElement("canvas"), k = j.getContext("2d"); switch (j.width = g.trgWidth, j.height = g.trgHeight, e > 4 && (j.width = g.trgHeight, j.height = g.trgWidth), e) { case 2: k.translate(j.width, 0), k.scale(-1, 1); break; case 3: k.translate(j.width, j.height), k.rotate(Math.PI); break; case 4: k.translate(0, j.height), k.scale(1, -1); break; case 5: k.rotate(.5 * Math.PI), k.scale(1, -1); break; case 6: k.rotate(.5 * Math.PI), k.translate(0, -j.width); break; case 7: k.rotate(.5 * Math.PI), k.translate(j.height, -j.width), k.scale(-1, 1); break; case 8: k.rotate(-.5 * Math.PI), k.translate(-j.height, 0) }drawImageIOSFix(k, i, null != g.srcX ? g.srcX : 0, null != g.srcY ? g.srcY : 0, g.srcWidth, g.srcHeight, null != g.trgX ? g.trgX : 0, null != g.trgY ? g.trgY : 0, g.trgWidth, g.trgHeight); var l = j.toDataURL("image/png"); if (null != f) return f(l, j) }) }, null != f && (i.onerror = f), i.src = a.dataURL } }, { key: "processQueue", value: function () { var a = this.options.parallelUploads, b = this.getUploadingFiles().length, c = b; if (!(b >= a)) { var d = this.getQueuedFiles(); if (d.length > 0) { if (this.options.uploadMultiple) return this.processFiles(d.slice(0, a - b)); for (; c < a;) { if (!d.length) return; this.processFile(d.shift()), c++ } } } } }, { key: "processFile", value: function (a) { return this.processFiles([a]) } }, { key: "processFiles", value: function (a) { for (var c = a, d = 0, c = c; ;) { var e; if (d >= c.length) break; e = c[d++]; var f = e; f.processing = !0, f.status = b.UPLOADING, this.emit("processing", f) } return this.options.uploadMultiple && this.emit("processingmultiple", a), this.uploadFiles(a) } }, { key: "_getFilesWithXhr", value: function (a) { return this.files.filter(function (b) { return b.xhr === a }).map(function (a) { return a }) } }, { key: "cancelUpload", value: function (a) { if (a.status === b.UPLOADING) { for (var c = this._getFilesWithXhr(a.xhr), d = c, e = 0, d = d; ;) { var f; if (e >= d.length) break; f = d[e++]; f.status = b.CANCELED } void 0 !== a.xhr && a.xhr.abort(); for (var g = c, h = 0, g = g; ;) { var i; if (h >= g.length) break; i = g[h++]; var j = i; this.emit("canceled", j) } this.options.uploadMultiple && this.emit("canceledmultiple", c) } else a.status !== b.ADDED && a.status !== b.QUEUED || (a.status = b.CANCELED, this.emit("canceled", a), this.options.uploadMultiple && this.emit("canceledmultiple", [a])); if (this.options.autoProcessQueue) return this.processQueue() } }, { key: "resolveOption", value: function (a) { if ("function" == typeof a) { for (var b = arguments.length, c = Array(b > 1 ? b - 1 : 0), d = 1; d < b; d++)c[d - 1] = arguments[d]; return a.apply(this, c) } return a } }, { key: "uploadFile", value: function (a) { return this.uploadFiles([a]) } }, { key: "uploadFiles", value: function (a) { var c = this; this._transformFiles(a, function (d) { if (a[0].upload.chunked) { var e = a[0], f = d[0], g = 0; e.upload.chunks = []; var h = function () { for (var d = 0; void 0 !== e.upload.chunks[d];)d++; if (!(d >= e.upload.totalChunkCount)) { g++; var h = d * c.options.chunkSize, i = Math.min(h + c.options.chunkSize, e.size), j = { name: c._getParamName(0), data: f.webkitSlice ? f.webkitSlice(h, i) : f.slice(h, i), filename: e.upload.filename, chunkIndex: d }; e.upload.chunks[d] = { file: e, index: d, dataBlock: j, status: b.UPLOADING, progress: 0, retries: 0 }, c._uploadData(a, [j]) } }; if (e.upload.finishedChunkUpload = function (d) { var f = !0; d.status = b.SUCCESS, d.dataBlock = null, d.xhr = null; for (var g = 0; g < e.upload.totalChunkCount; g++) { if (void 0 === e.upload.chunks[g]) return h(); e.upload.chunks[g].status !== b.SUCCESS && (f = !1) } f && c.options.chunksUploaded(e, function () { c._finished(a, "", null) }) }, c.options.parallelChunkUploads) for (var i = 0; i < e.upload.totalChunkCount; i++)h(); else h() } else { for (var j = [], k = 0; k < a.length; k++)j[k] = { name: c._getParamName(k), data: d[k], filename: a[k].upload.filename }; c._uploadData(a, j) } }) } }, { key: "_getChunk", value: function (a, b) { for (var c = 0; c < a.upload.totalChunkCount; c++)if (void 0 !== a.upload.chunks[c] && a.upload.chunks[c].xhr === b) return a.upload.chunks[c] } }, { key: "_uploadData", value: function (a, c) { for (var d = this, e = new XMLHttpRequest, f = a, g = 0, f = f; ;) { var h; if (g >= f.length) break; h = f[g++]; h.xhr = e } a[0].upload.chunked && (a[0].upload.chunks[c[0].chunkIndex].xhr = e); var i = this.resolveOption(this.options.method, a), j = this.resolveOption(this.options.url, a); e.open(i, j, !0), e.timeout = this.resolveOption(this.options.timeout, a), e.withCredentials = !!this.options.withCredentials, e.onload = function (b) { d._finishedUploading(a, e, b) }, e.onerror = function () { d._handleUploadError(a, e) }, (null != e.upload ? e.upload : e).onprogress = function (b) { return d._updateFilesUploadProgress(a, e, b) }; var k = { Accept: "application/json", "Cache-Control": "no-cache", "X-Requested-With": "XMLHttpRequest" }; this.options.headers && b.extend(k, this.options.headers); for (var l in k) { var m = k[l]; m && e.setRequestHeader(l, m) } var n = new FormData; if (this.options.params) { var o = this.options.params; "function" == typeof o && (o = o.call(this, a, e, a[0].upload.chunked ? this._getChunk(a[0], e) : null)); for (var p in o) { var q = o[p]; n.append(p, q) } } for (var r = a, s = 0, r = r; ;) { var t; if (s >= r.length) break; t = r[s++]; var u = t; this.emit("sending", u, e, n) } this.options.uploadMultiple && this.emit("sendingmultiple", a, e, n), this._addFormElementData(n); for (var v = 0; v < c.length; v++) { var w = c[v]; n.append(w.name, w.data, w.filename) } this.submitRequest(e, n, a) } }, { + key: "_transformFiles", value: function (a, b) { + for (var c = this, d = [], e = 0, f = 0; f < a.length; f++)!function (f) { + c.options.transformFile.call(c, a[f], function (c) { + d[f] = c, + ++e === a.length && b(d) + }) + }(f) + } + }, { key: "_addFormElementData", value: function (a) { if ("FORM" === this.element.tagName) for (var b = this.element.querySelectorAll("input, textarea, select, button"), c = 0, b = b; ;) { var d; if (c >= b.length) break; d = b[c++]; var e = d, f = e.getAttribute("name"), g = e.getAttribute("type"); if (g && (g = g.toLowerCase()), void 0 !== f && null !== f) if ("SELECT" === e.tagName && e.hasAttribute("multiple")) for (var h = e.options, i = 0, h = h; ;) { var j; if (i >= h.length) break; j = h[i++]; var k = j; k.selected && a.append(f, k.value) } else (!g || "checkbox" !== g && "radio" !== g || e.checked) && a.append(f, e.value) } } }, { key: "_updateFilesUploadProgress", value: function (a, b, c) { var d = void 0; if (void 0 !== c) { if (d = 100 * c.loaded / c.total, a[0].upload.chunked) { var e = a[0], f = this._getChunk(e, b); f.progress = d, f.total = c.total, f.bytesSent = c.loaded; e.upload.progress = 0, e.upload.total = 0, e.upload.bytesSent = 0; for (var g = 0; g < e.upload.totalChunkCount; g++)void 0 !== e.upload.chunks[g] && void 0 !== e.upload.chunks[g].progress && (e.upload.progress += e.upload.chunks[g].progress, e.upload.total += e.upload.chunks[g].total, e.upload.bytesSent += e.upload.chunks[g].bytesSent); e.upload.progress = e.upload.progress / e.upload.totalChunkCount } else for (var h = a, i = 0, h = h; ;) { var j; if (i >= h.length) break; j = h[i++]; var k = j; k.upload.progress = d, k.upload.total = c.total, k.upload.bytesSent = c.loaded } for (var l = a, m = 0, l = l; ;) { var n; if (m >= l.length) break; n = l[m++]; var o = n; this.emit("uploadprogress", o, o.upload.progress, o.upload.bytesSent) } } else { var p = !0; d = 100; for (var q = a, r = 0, q = q; ;) { var s; if (r >= q.length) break; s = q[r++]; var t = s; 100 === t.upload.progress && t.upload.bytesSent === t.upload.total || (p = !1), t.upload.progress = d, t.upload.bytesSent = t.upload.total } if (p) return; for (var u = a, v = 0, u = u; ;) { var w; if (v >= u.length) break; w = u[v++]; var x = w; this.emit("uploadprogress", x, d, x.upload.bytesSent) } } } }, { key: "_finishedUploading", value: function (a, c, d) { var e = void 0; if (a[0].status !== b.CANCELED && 4 === c.readyState) { if ("arraybuffer" !== c.responseType && "blob" !== c.responseType && (e = c.responseText, c.getResponseHeader("content-type") && ~c.getResponseHeader("content-type").indexOf("application/json"))) try { e = JSON.parse(e) } catch (a) { d = a, e = "Invalid JSON response from server." } this._updateFilesUploadProgress(a), 200 <= c.status && c.status < 300 ? a[0].upload.chunked ? a[0].upload.finishedChunkUpload(this._getChunk(a[0], c)) : this._finished(a, e, d) : this._handleUploadError(a, c, e) } } }, { key: "_handleUploadError", value: function (a, c, d) { if (a[0].status !== b.CANCELED) { if (a[0].upload.chunked && this.options.retryChunks) { var e = this._getChunk(a[0], c); if (e.retries++ < this.options.retryChunksLimit) return void this._uploadData(a, [e.dataBlock]); console.warn("Retried this chunk too often. Giving up.") } for (var f = a, g = 0, f = f; ;) { if (g >= f.length) break; f[g++]; this._errorProcessing(a, d || this.options.dictResponseError.replace("{{statusCode}}", c.status), c) } } } }, { key: "submitRequest", value: function (a, b, c) { a.send(b) } }, { key: "_finished", value: function (a, c, d) { for (var e = a, f = 0, e = e; ;) { var g; if (f >= e.length) break; g = e[f++]; var h = g; h.status = b.SUCCESS, this.emit("success", h, c, d), this.emit("complete", h) } if (this.options.uploadMultiple && (this.emit("successmultiple", a, c, d), this.emit("completemultiple", a)), this.options.autoProcessQueue) return this.processQueue() } }, { key: "_errorProcessing", value: function (a, c, d) { for (var e = a, f = 0, e = e; ;) { var g; if (f >= e.length) break; g = e[f++]; var h = g; h.status = b.ERROR, this.emit("error", h, c, d), this.emit("complete", h) } if (this.options.uploadMultiple && (this.emit("errormultiple", a, c, d), this.emit("completemultiple", a)), this.options.autoProcessQueue) return this.processQueue() } }], [{ key: "uuidv4", value: function () { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (a) { var b = 16 * Math.random() | 0; return ("x" === a ? b : 3 & b | 8).toString(16) }) } }]), b +}(Emitter); Dropzone.initClass(), Dropzone.version = "5.5.1", Dropzone.options = {}, Dropzone.optionsForElement = function (a) { return a.getAttribute("id") ? Dropzone.options[camelize(a.getAttribute("id"))] : void 0 }, Dropzone.instances = [], Dropzone.forElement = function (a) { if ("string" == typeof a && (a = document.querySelector(a)), null == (null != a ? a.dropzone : void 0)) throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone."); return a.dropzone }, Dropzone.autoDiscover = !0, Dropzone.discover = function () { var a = void 0; if (document.querySelectorAll) a = document.querySelectorAll(".dropzone"); else { a = []; var b = function (b) { return function () { for (var c = [], d = b, e = 0, d = d; ;) { var f; if (e >= d.length) break; f = d[e++]; var g = f; /(^| )dropzone($| )/.test(g.className) ? c.push(a.push(g)) : c.push(void 0) } return c }() }; b(document.getElementsByTagName("div")), b(document.getElementsByTagName("form")) } return function () { for (var b = [], c = a, d = 0, c = c; ;) { var e; if (d >= c.length) break; e = c[d++]; var f = e; !1 !== Dropzone.optionsForElement(f) ? b.push(new Dropzone(f)) : b.push(void 0) } return b }() }, Dropzone.blacklistedBrowsers = [/opera.*(Macintosh|Windows Phone).*version\/12/i], Dropzone.isBrowserSupported = function () { var a = !0; if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) if ("classList" in document.createElement("a")) for (var b = Dropzone.blacklistedBrowsers, c = 0, b = b; ;) { var d; if (c >= b.length) break; d = b[c++]; var e = d; e.test(navigator.userAgent) && (a = !1) } else a = !1; else a = !1; return a }, Dropzone.dataURItoBlob = function (a) { for (var b = atob(a.split(",")[1]), c = a.split(",")[0].split(":")[1].split(";")[0], d = new ArrayBuffer(b.length), e = new Uint8Array(d), f = 0, g = b.length, h = 0 <= g; h ? f <= g : f >= g; h ? f++ : f--)e[f] = b.charCodeAt(f); return new Blob([d], { type: c }) }; var without = function (a, b) { return a.filter(function (a) { return a !== b }).map(function (a) { return a }) }, camelize = function (a) { return a.replace(/[\-_](\w)/g, function (a) { return a.charAt(1).toUpperCase() }) }; Dropzone.createElement = function (a) { var b = document.createElement("div"); return b.innerHTML = a, b.childNodes[0] }, Dropzone.elementInside = function (a, b) { if (a === b) return !0; for (; a = a.parentNode;)if (a === b) return !0; return !1 }, Dropzone.getElement = function (a, b) { var c = void 0; if ("string" == typeof a ? c = document.querySelector(a) : null != a.nodeType && (c = a), null == c) throw new Error("Invalid `" + b + "` option provided. Please provide a CSS selector or a plain HTML element."); return c }, Dropzone.getElements = function (a, b) { var c = void 0, d = void 0; if (a instanceof Array) { d = []; try { for (var e = a, f = 0, e = e; !(f >= e.length);)c = e[f++], d.push(this.getElement(c, b)) } catch (a) { d = null } } else if ("string" == typeof a) { d = []; for (var g = document.querySelectorAll(a), h = 0, g = g; !(h >= g.length);)c = g[h++], d.push(c) } else null != a.nodeType && (d = [a]); if (null == d || !d.length) throw new Error("Invalid `" + b + "` option provided. Please provide a CSS selector, a plain HTML element or a list of those."); return d }, Dropzone.confirm = function (a, b, c) { return window.confirm(a) ? b() : null != c ? c() : void 0 }, Dropzone.isValidFile = function (a, b) { if (!b) return !0; b = b.split(","); for (var c = a.type, d = c.replace(/\/.*$/, ""), e = b, f = 0, e = e; ;) { var g; if (f >= e.length) break; g = e[f++]; var h = g; if (h = h.trim(), "." === h.charAt(0)) { if (-1 !== a.name.toLowerCase().indexOf(h.toLowerCase(), a.name.length - h.length)) return !0 } else if (/\/\*$/.test(h)) { if (d === h.replace(/\/.*$/, "")) return !0 } else if (c === h) return !0 } return !1 }, "undefined" != typeof jQuery && null !== jQuery && (jQuery.fn.dropzone = function (a) { return this.each(function () { return new Dropzone(this, a) }) }), "undefined" != typeof module && null !== module ? module.exports = Dropzone : window.Dropzone = Dropzone, Dropzone.ADDED = "added", Dropzone.QUEUED = "queued", Dropzone.ACCEPTED = Dropzone.QUEUED, Dropzone.UPLOADING = "uploading", Dropzone.PROCESSING = Dropzone.UPLOADING, Dropzone.CANCELED = "canceled", Dropzone.ERROR = "error", Dropzone.SUCCESS = "success"; var detectVerticalSquash = function (a) { var b = (a.naturalWidth, a.naturalHeight), c = document.createElement("canvas"); c.width = 1, c.height = b; var d = c.getContext("2d"); d.drawImage(a, 0, 0); for (var e = d.getImageData(1, 0, 1, b), f = e.data, g = 0, h = b, i = b; i > g;) { 0 === f[4 * (i - 1) + 3] ? h = i : g = i, i = h + g >> 1 } var j = i / b; return 0 === j ? 1 : j }, drawImageIOSFix = function (a, b, c, d, e, f, g, h, i, j) { var k = detectVerticalSquash(b); return a.drawImage(b, c, d, e, f, g, h, i, j / k) }, ExifRestore = function () { function a() { _classCallCheck(this, a) } return _createClass(a, null, [{ key: "initClass", value: function () { this.KEY_STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" } }, { key: "encode64", value: function (a) { for (var b = "", c = void 0, d = void 0, e = "", f = void 0, g = void 0, h = void 0, i = "", j = 0; ;)if (c = a[j++], d = a[j++], e = a[j++], f = c >> 2, g = (3 & c) << 4 | d >> 4, h = (15 & d) << 2 | e >> 6, i = 63 & e, isNaN(d) ? h = i = 64 : isNaN(e) && (i = 64), b = b + this.KEY_STR.charAt(f) + this.KEY_STR.charAt(g) + this.KEY_STR.charAt(h) + this.KEY_STR.charAt(i), c = d = e = "", f = g = h = i = "", !(j < a.length)) break; return b } }, { key: "restore", value: function (a, b) { if (!a.match("data:image/jpeg;base64,")) return b; var c = this.decode64(a.replace("data:image/jpeg;base64,", "")), d = this.slice2Segments(c), e = this.exifManipulation(b, d); return "data:image/jpeg;base64," + this.encode64(e) } }, { key: "exifManipulation", value: function (a, b) { var c = this.getExifArray(b), d = this.insertExif(a, c); return new Uint8Array(d) } }, { key: "getExifArray", value: function (a) { for (var b = void 0, c = 0; c < a.length;) { if (b = a[c], 255 === b[0] & 225 === b[1]) return b; c++ } return [] } }, { key: "insertExif", value: function (a, b) { var c = a.replace("data:image/jpeg;base64,", ""), d = this.decode64(c), e = d.indexOf(255, 3), f = d.slice(0, e), g = d.slice(e), h = f; return h = h.concat(b), h = h.concat(g) } }, { key: "slice2Segments", value: function (a) { for (var b = 0, c = []; ;) { var d; if (255 === a[b] & 218 === a[b + 1]) break; if (255 === a[b] & 216 === a[b + 1]) b += 2; else { d = 256 * a[b + 2] + a[b + 3]; var e = b + d + 2, f = a.slice(b, e); c.push(f), b = e } if (b > a.length) break } return c } }, { key: "decode64", value: function (a) { var b = void 0, c = void 0, d = "", e = void 0, f = void 0, g = void 0, h = "", i = 0, j = [], k = /[^A-Za-z0-9\+\/\=]/g; for (k.exec(a) && console.warn("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."), a = a.replace(/[^A-Za-z0-9\+\/\=]/g, ""); ;)if (e = this.KEY_STR.indexOf(a.charAt(i++)), f = this.KEY_STR.indexOf(a.charAt(i++)), g = this.KEY_STR.indexOf(a.charAt(i++)), h = this.KEY_STR.indexOf(a.charAt(i++)), b = e << 2 | f >> 4, c = (15 & f) << 4 | g >> 2, d = (3 & g) << 6 | h, j.push(b), 64 !== g && j.push(c), 64 !== h && j.push(d), b = c = d = "", e = f = g = h = "", !(i < a.length)) break; return j } }]), a }(); ExifRestore.initClass(); var contentLoaded = function (a, b) { var c = !1, d = !0, e = a.document, f = e.documentElement, g = e.addEventListener ? "addEventListener" : "attachEvent", h = e.addEventListener ? "removeEventListener" : "detachEvent", i = e.addEventListener ? "" : "on", j = function d(f) { if ("readystatechange" !== f.type || "complete" === e.readyState) return ("load" === f.type ? a : e)[h](i + f.type, d, !1), !c && (c = !0) ? b.call(a, f.type || f) : void 0 }; if ("complete" !== e.readyState) { if (e.createEventObject && f.doScroll) { try { d = !a.frameElement } catch (a) { } d && function a() { try { f.doScroll("left") } catch (b) { return void setTimeout(a, 50) } return j("poll") }() } return e[g](i + "DOMContentLoaded", j, !1), e[g](i + "readystatechange", j, !1), a[g](i + "load", j, !1) } }; Dropzone._autoDiscoverFunction = function () { if (Dropzone.autoDiscover) return Dropzone.discover() }, contentLoaded(window, Dropzone._autoDiscoverFunction); \ No newline at end of file diff --git a/Kudu.Services.Web/wwwroot/Content/Scripts/dropzone.min.js b/Kudu.Services.Web/wwwroot/Content/Scripts/dropzone.min.js deleted file mode 100644 index e82b7750..00000000 --- a/Kudu.Services.Web/wwwroot/Content/Scripts/dropzone.min.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";function _possibleConstructorReturn(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function _inherits(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function __guard__(a,b){return void 0!==a&&null!==a?b(a):void 0}function __guardMethod__(a,b,c){return void 0!==a&&null!==a&&"function"==typeof a[b]?c(a,b):void 0}var _createClass=function(){function a(a,b){for(var c=0;c1?c-1:0),e=1;e=f.length)break;h=f[g++];h.apply(this,d)}}return this}},{key:"off",value:function(a,b){if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var c=this._callbacks[a];if(!c)return this;if(1===arguments.length)return delete this._callbacks[a],this;for(var d=0;d=c.length)break;e=c[d++];var f=e;if(/(^| )dz-message($| )/.test(f.className)){a=f,f.className="dz-message";break}}a||(a=b.createElement('
'),this.element.appendChild(a));var g=a.getElementsByTagName("span")[0];return g&&(null!=g.textContent?g.textContent=this.options.dictFallbackMessage:null!=g.innerText&&(g.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(a,b,c,d){var e={srcX:0,srcY:0,srcWidth:a.width,srcHeight:a.height},f=a.width/a.height;null==b&&null==c?(b=e.srcWidth,c=e.srcHeight):null==b?b=c*f:null==c&&(c=b/f),b=Math.min(b,e.srcWidth),c=Math.min(c,e.srcHeight);var g=b/c;if(e.srcWidth>b||e.srcHeight>c)if("crop"===d)f>g?(e.srcHeight=a.height,e.srcWidth=e.srcHeight*g):(e.srcWidth=a.width,e.srcHeight=e.srcWidth/g);else{if("contain"!==d)throw new Error("Unknown resizeMethod '"+d+"'");f>g?c=b/f:b=c*f}return e.srcX=(a.width-e.srcWidth)/2,e.srcY=(a.height-e.srcHeight)/2,e.trgWidth=b,e.trgHeight=c,e},transformFile:function(a,b){return(this.options.resizeWidth||this.options.resizeHeight)&&a.type.match(/image.*/)?this.resizeImage(a,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,b):b(a)},previewTemplate:'
\n
\n
\n
\n
\n
\n
\n
\n
\n \n Check\n \n \n \n \n \n
\n
\n \n Error\n \n \n \n \n \n \n \n
\n
',drop:function(a){return this.element.classList.remove("dz-drag-hover")},dragstart:function(a){},dragend:function(a){return this.element.classList.remove("dz-drag-hover")},dragenter:function(a){return this.element.classList.add("dz-drag-hover")},dragover:function(a){return this.element.classList.add("dz-drag-hover")},dragleave:function(a){return this.element.classList.remove("dz-drag-hover")},paste:function(a){},reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var c=this;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){a.previewElement=b.createElement(this.options.previewTemplate.trim()),a.previewTemplate=a.previewElement,this.previewsContainer.appendChild(a.previewElement);for(var d=a.previewElement.querySelectorAll("[data-dz-name]"),e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g=f;g.textContent=a.name}for(var h=a.previewElement.querySelectorAll("[data-dz-size]"),i=0,h=h;!(i>=h.length);)g=h[i++],g.innerHTML=this.filesize(a.size);this.options.addRemoveLinks&&(a._removeLink=b.createElement(''+this.options.dictRemoveFile+""),a.previewElement.appendChild(a._removeLink));for(var j=function(d){return d.preventDefault(),d.stopPropagation(),a.status===b.UPLOADING?b.confirm(c.options.dictCancelUploadConfirmation,function(){return c.removeFile(a)}):c.options.dictRemoveFileConfirmation?b.confirm(c.options.dictRemoveFileConfirmation,function(){return c.removeFile(a)}):c.removeFile(a)},k=a.previewElement.querySelectorAll("[data-dz-remove]"),l=0,k=k;;){var m;if(l>=k.length)break;m=k[l++];m.addEventListener("click",j)}}},removedfile:function(a){return null!=a.previewElement&&null!=a.previewElement.parentNode&&a.previewElement.parentNode.removeChild(a.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(a,b){if(a.previewElement){a.previewElement.classList.remove("dz-file-preview");for(var c=a.previewElement.querySelectorAll("[data-dz-thumbnail]"),d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];var f=e;f.alt=a.name,f.src=b}return setTimeout(function(){return a.previewElement.classList.add("dz-image-preview")},1)}},error:function(a,b){if(a.previewElement){a.previewElement.classList.add("dz-error"),"String"!=typeof b&&b.error&&(b=b.error);for(var c=a.previewElement.querySelectorAll("[data-dz-errormessage]"),d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];e.textContent=b}}},errormultiple:function(){},processing:function(a){if(a.previewElement&&(a.previewElement.classList.add("dz-processing"),a._removeLink))return a._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(a,b,c){if(a.previewElement)for(var d=a.previewElement.querySelectorAll("[data-dz-uploadprogress]"),e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g=f;"PROGRESS"===g.nodeName?g.value=b:g.style.width=b+"%"}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(a){if(a.previewElement)return a.previewElement.classList.add("dz-success")},successmultiple:function(){},canceled:function(a){return this.emit("error",a,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(a){if(a._removeLink&&(a._removeLink.innerHTML=this.options.dictRemoveFile),a.previewElement)return a.previewElement.classList.add("dz-complete")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}},this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:"extend",value:function(a){for(var b=arguments.length,c=Array(b>1?b-1:0),d=1;d=e.length)break;g=e[f++];var h=g;for(var i in h){var j=h[i];a[i]=j}}return a}}]),_createClass(b,[{key:"getAcceptedFiles",value:function(){return this.files.filter(function(a){return a.accepted}).map(function(a){return a})}},{key:"getRejectedFiles",value:function(){return this.files.filter(function(a){return!a.accepted}).map(function(a){return a})}},{key:"getFilesWithStatus",value:function(a){return this.files.filter(function(b){return b.status===a}).map(function(a){return a})}},{key:"getQueuedFiles",value:function(){return this.getFilesWithStatus(b.QUEUED)}},{key:"getUploadingFiles",value:function(){return this.getFilesWithStatus(b.UPLOADING)}},{key:"getAddedFiles",value:function(){return this.getFilesWithStatus(b.ADDED)}},{key:"getActiveFiles",value:function(){return this.files.filter(function(a){return a.status===b.UPLOADING||a.status===b.QUEUED}).map(function(a){return a})}},{key:"init",value:function(){var a=this;if("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(b.createElement('
'+this.options.dictDefaultMessage+"
")),this.clickableElements.length){!function c(){return a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement("input"),a.hiddenFileInput.setAttribute("type","file"),(null===a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute("multiple","multiple"),a.hiddenFileInput.className="dz-hidden-input",null!==a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles),null!==a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture),a.hiddenFileInput.style.visibility="hidden",a.hiddenFileInput.style.position="absolute",a.hiddenFileInput.style.top="0",a.hiddenFileInput.style.left="0",a.hiddenFileInput.style.height="0",a.hiddenFileInput.style.width="0",b.getElement(a.options.hiddenInputContainer,"hiddenInputContainer").appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener("change",function(){var b=a.hiddenFileInput.files;if(b.length)for(var d=b,e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g=f;a.addFile(g)}return a.emit("addedfiles",b),c()})}()}this.URL=null!==window.URL?window.URL:window.webkitURL;for(var c=this.events,d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];var f=e;this.on(f,this.options[f])}this.on("uploadprogress",function(){return a.updateTotalUploadProgress()}),this.on("removedfile",function(){return a.updateTotalUploadProgress()}),this.on("canceled",function(b){return a.emit("complete",b)}),this.on("complete",function(b){if(0===a.getAddedFiles().length&&0===a.getUploadingFiles().length&&0===a.getQueuedFiles().length)return setTimeout(function(){return a.emit("queuecomplete")},0)});var g=function(a){return a.stopPropagation(),a.preventDefault?a.preventDefault():a.returnValue=!1};return this.listeners=[{element:this.element,events:{dragstart:function(b){return a.emit("dragstart",b)},dragenter:function(b){return g(b),a.emit("dragenter",b)},dragover:function(b){var c=void 0;try{c=b.dataTransfer.effectAllowed}catch(a){}return b.dataTransfer.dropEffect="move"===c||"linkMove"===c?"move":"copy",g(b),a.emit("dragover",b)},dragleave:function(b){return a.emit("dragleave",b)},drop:function(b){return g(b),a.drop(b)},dragend:function(b){return a.emit("dragend",b)}}}],this.clickableElements.forEach(function(c){return a.listeners.push({element:c,events:{click:function(d){return(c!==a.element||d.target===a.element||b.elementInside(d.target,a.element.querySelector(".dz-message")))&&a.hiddenFileInput.click(),!0}}})}),this.enable(),this.options.init.call(this)}},{key:"destroy",value:function(){return this.disable(),this.removeAllFiles(!0),(null!=this.hiddenFileInput?this.hiddenFileInput.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,b.instances.splice(b.instances.indexOf(this),1)}},{key:"updateTotalUploadProgress",value:function(){var a=void 0,b=0,c=0;if(this.getActiveFiles().length){for(var d=this.getActiveFiles(),e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g=f;b+=g.upload.bytesSent,c+=g.upload.total}a=100*b/c}else a=100;return this.emit("totaluploadprogress",a,c,b)}},{key:"_getParamName",value:function(a){return"function"==typeof this.options.paramName?this.options.paramName(a):this.options.paramName+(this.options.uploadMultiple?"["+a+"]":"")}},{key:"_renameFile",value:function(a){return"function"!=typeof this.options.renameFile?a.name:this.options.renameFile(a)}},{key:"getFallbackForm",value:function(){var a=void 0,c=void 0;if(a=this.getExistingFallback())return a;var d='
';this.options.dictFallbackText&&(d+="

"+this.options.dictFallbackText+"

"),d+='
';var e=b.createElement(d);return"FORM"!==this.element.tagName?(c=b.createElement('
'),c.appendChild(e)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=c?c:e}},{key:"getExistingFallback",value:function(){for(var a=["div","form"],b=0;b=b.length)break;d=b[c++];var e=d;if(/(^| )fallback($| )/.test(e.className))return e}}(this.element.getElementsByTagName(d)))return c}}},{key:"setupEventListeners",value:function(){return this.listeners.map(function(a){return function(){var b=[];for(var c in a.events){var d=a.events[c];b.push(a.element.addEventListener(c,d,!1))}return b}()})}},{key:"removeEventListeners",value:function(){return this.listeners.map(function(a){return function(){var b=[];for(var c in a.events){var d=a.events[c];b.push(a.element.removeEventListener(c,d,!1))}return b}()})}},{key:"disable",value:function(){var a=this;return this.clickableElements.forEach(function(a){return a.classList.remove("dz-clickable")}),this.removeEventListeners(),this.disabled=!0,this.files.map(function(b){return a.cancelUpload(b)})}},{key:"enable",value:function(){return delete this.disabled,this.clickableElements.forEach(function(a){return a.classList.add("dz-clickable")}),this.setupEventListeners()}},{key:"filesize",value:function(a){var b=0,c="b";if(a>0){for(var d=["tb","gb","mb","kb","b"],e=0;e=Math.pow(this.options.filesizeBase,4-e)/10){b=a/Math.pow(this.options.filesizeBase,4-e),c=f;break}}b=Math.round(10*b)/10}return""+b+" "+this.options.dictFileSizeUnits[c]}},{key:"_updateMaxFilesReachedClass",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")}},{key:"drop",value:function(a){if(a.dataTransfer){this.emit("drop",a);for(var b=[],c=0;c=b.length)break;d=b[c++];var e=d;this.addFile(e)}}},{key:"_addFilesFromItems",value:function(a){var b=this;return function(){for(var c=[],d=a,e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g,h=f;null!=h.webkitGetAsEntry&&(g=h.webkitGetAsEntry())?g.isFile?c.push(b.addFile(h.getAsFile())):g.isDirectory?c.push(b._addFilesFromDirectory(g,g.name)):c.push(void 0):null!=h.getAsFile&&(null==h.kind||"file"===h.kind)?c.push(b.addFile(h.getAsFile())):c.push(void 0)}return c}()}},{key:"_addFilesFromDirectory",value:function(a,b){var c=this,d=a.createReader(),e=function(a){return __guardMethod__(console,"log",function(b){return b.log(a)})};return function a(){return d.readEntries(function(d){if(d.length>0){for(var e=d,f=0,e=e;;){var g;if(f>=e.length)break;g=e[f++];var h=g;h.isFile?h.file(function(a){if(!c.options.ignoreHiddenFiles||"."!==a.name.substring(0,1))return a.fullPath=b+"/"+a.name,c.addFile(a)}):h.isDirectory&&c._addFilesFromDirectory(h,b+"/"+h.name)}a()}return null},e)}()}},{key:"accept",value:function(a,c){return this.options.maxFilesize&&a.size>1024*this.options.maxFilesize*1024?c(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):b.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(c(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,c):c(this.options.dictInvalidFileType)}},{key:"addFile",value:function(a){var c=this;return a.upload={uuid:b.uuidv4(),progress:0,total:a.size,bytesSent:0,filename:this._renameFile(a),chunked:this.options.chunking&&(this.options.forceChunking||a.size>this.options.chunkSize),totalChunkCount:Math.ceil(a.size/this.options.chunkSize)},this.files.push(a),a.status=b.ADDED,this.emit("addedfile",a),this._enqueueThumbnail(a),this.accept(a,function(b){return b?(a.accepted=!1,c._errorProcessing([a],b)):(a.accepted=!0,c.options.autoQueue&&c.enqueueFile(a)),c._updateMaxFilesReachedClass()})}},{key:"enqueueFiles",value:function(a){for(var b=a,c=0,b=b;;){var d;if(c>=b.length)break;d=b[c++];var e=d;this.enqueueFile(e)}return null}},{key:"enqueueFile",value:function(a){var c=this;if(a.status!==b.ADDED||!0!==a.accepted)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(a.status=b.QUEUED,this.options.autoProcessQueue)return setTimeout(function(){return c.processQueue()},0)}},{key:"_enqueueThumbnail",value:function(a){var b=this;if(this.options.createImageThumbnails&&a.type.match(/image.*/)&&a.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(a),setTimeout(function(){return b._processThumbnailQueue()},0)}},{key:"_processThumbnailQueue",value:function(){var a=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var b=this._thumbnailQueue.shift();return this.createThumbnail(b,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(c){return a.emit("thumbnail",b,c),a._processingThumbnail=!1,a._processThumbnailQueue()})}}},{key:"removeFile",value:function(a){if(a.status===b.UPLOADING&&this.cancelUpload(a),this.files=without(this.files,a),this.emit("removedfile",a),0===this.files.length)return this.emit("reset")}},{key:"removeAllFiles",value:function(a){null==a&&(a=!1);for(var c=this.files.slice(),d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];var f=e;(f.status!==b.UPLOADING||a)&&this.removeFile(f)}return null}},{key:"resizeImage",value:function(a,c,d,e,f){var g=this;return this.createThumbnail(a,c,d,e,!0,function(c,d){if(null==d)return f(a);var e=g.options.resizeMimeType;null==e&&(e=a.type);var h=d.toDataURL(e,g.options.resizeQuality);return"image/jpeg"!==e&&"image/jpg"!==e||(h=ExifRestore.restore(a.dataURL,h)),f(b.dataURItoBlob(h))})}},{key:"createThumbnail",value:function(a,b,c,d,e,f){var g=this,h=new FileReader;return h.onload=function(){return a.dataURL=h.result,"image/svg+xml"===a.type?void(null!=f&&f(h.result)):g.createThumbnailFromUrl(a,b,c,d,e,f)},h.readAsDataURL(a)}},{key:"createThumbnailFromUrl",value:function(a,b,c,d,e,f,g){var h=this,i=document.createElement("img");return g&&(i.crossOrigin=g),i.onload=function(){var g=function(a){return a(1)};return"undefined"!=typeof EXIF&&null!==EXIF&&e&&(g=function(a){return EXIF.getData(i,function(){return a(EXIF.getTag(this,"Orientation"))})}),g(function(e){a.width=i.width,a.height=i.height;var g=h.options.resize.call(h,a,b,c,d),j=document.createElement("canvas"),k=j.getContext("2d");switch(j.width=g.trgWidth,j.height=g.trgHeight,e>4&&(j.width=g.trgHeight,j.height=g.trgWidth),e){case 2:k.translate(j.width,0),k.scale(-1,1);break;case 3:k.translate(j.width,j.height),k.rotate(Math.PI);break;case 4:k.translate(0,j.height),k.scale(1,-1);break;case 5:k.rotate(.5*Math.PI),k.scale(1,-1);break;case 6:k.rotate(.5*Math.PI),k.translate(0,-j.width);break;case 7:k.rotate(.5*Math.PI),k.translate(j.height,-j.width),k.scale(-1,1);break;case 8:k.rotate(-.5*Math.PI),k.translate(-j.height,0)}drawImageIOSFix(k,i,null!=g.srcX?g.srcX:0,null!=g.srcY?g.srcY:0,g.srcWidth,g.srcHeight,null!=g.trgX?g.trgX:0,null!=g.trgY?g.trgY:0,g.trgWidth,g.trgHeight);var l=j.toDataURL("image/png");if(null!=f)return f(l,j)})},null!=f&&(i.onerror=f),i.src=a.dataURL}},{key:"processQueue",value:function(){var a=this.options.parallelUploads,b=this.getUploadingFiles().length,c=b;if(!(b>=a)){var d=this.getQueuedFiles();if(d.length>0){if(this.options.uploadMultiple)return this.processFiles(d.slice(0,a-b));for(;c=c.length)break;e=c[d++];var f=e;f.processing=!0,f.status=b.UPLOADING,this.emit("processing",f)}return this.options.uploadMultiple&&this.emit("processingmultiple",a),this.uploadFiles(a)}},{key:"_getFilesWithXhr",value:function(a){return this.files.filter(function(b){return b.xhr===a}).map(function(a){return a})}},{key:"cancelUpload",value:function(a){if(a.status===b.UPLOADING){for(var c=this._getFilesWithXhr(a.xhr),d=c,e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];f.status=b.CANCELED}void 0!==a.xhr&&a.xhr.abort();for(var g=c,h=0,g=g;;){var i;if(h>=g.length)break;i=g[h++];var j=i;this.emit("canceled",j)}this.options.uploadMultiple&&this.emit("canceledmultiple",c)}else a.status!==b.ADDED&&a.status!==b.QUEUED||(a.status=b.CANCELED,this.emit("canceled",a),this.options.uploadMultiple&&this.emit("canceledmultiple",[a]));if(this.options.autoProcessQueue)return this.processQueue()}},{key:"resolveOption",value:function(a){if("function"==typeof a){for(var b=arguments.length,c=Array(b>1?b-1:0),d=1;d=e.upload.totalChunkCount)){g++;var h=d*c.options.chunkSize,i=Math.min(h+c.options.chunkSize,e.size),j={name:c._getParamName(0),data:f.webkitSlice?f.webkitSlice(h,i):f.slice(h,i),filename:e.upload.filename,chunkIndex:d};e.upload.chunks[d]={file:e,index:d,dataBlock:j,status:b.UPLOADING,progress:0,retries:0},c._uploadData(a,[j])}};if(e.upload.finishedChunkUpload=function(d){var f=!0;d.status=b.SUCCESS,d.dataBlock=null,d.xhr=null;for(var g=0;g=f.length)break;h=f[g++];h.xhr=e}a[0].upload.chunked&&(a[0].upload.chunks[c[0].chunkIndex].xhr=e);var i=this.resolveOption(this.options.method,a),j=this.resolveOption(this.options.url,a);e.open(i,j,!0),e.timeout=this.resolveOption(this.options.timeout,a),e.withCredentials=!!this.options.withCredentials,e.onload=function(b){d._finishedUploading(a,e,b)},e.onerror=function(){d._handleUploadError(a,e)},(null!=e.upload?e.upload:e).onprogress=function(b){return d._updateFilesUploadProgress(a,e,b)};var k={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};this.options.headers&&b.extend(k,this.options.headers);for(var l in k){var m=k[l];m&&e.setRequestHeader(l,m)}var n=new FormData;if(this.options.params){var o=this.options.params;"function"==typeof o&&(o=o.call(this,a,e,a[0].upload.chunked?this._getChunk(a[0],e):null));for(var p in o){var q=o[p];n.append(p,q)}}for(var r=a,s=0,r=r;;){var t;if(s>=r.length)break;t=r[s++];var u=t;this.emit("sending",u,e,n)}this.options.uploadMultiple&&this.emit("sendingmultiple",a,e,n),this._addFormElementData(n);for(var v=0;v=b.length)break;d=b[c++];var e=d,f=e.getAttribute("name"),g=e.getAttribute("type");if(g&&(g=g.toLowerCase()),void 0!==f&&null!==f)if("SELECT"===e.tagName&&e.hasAttribute("multiple"))for(var h=e.options,i=0,h=h;;){var j;if(i>=h.length)break;j=h[i++];var k=j;k.selected&&a.append(f,k.value)}else(!g||"checkbox"!==g&&"radio"!==g||e.checked)&&a.append(f,e.value)}}},{key:"_updateFilesUploadProgress",value:function(a,b,c){var d=void 0;if(void 0!==c){if(d=100*c.loaded/c.total,a[0].upload.chunked){var e=a[0],f=this._getChunk(e,b);f.progress=d,f.total=c.total,f.bytesSent=c.loaded;e.upload.progress=0,e.upload.total=0,e.upload.bytesSent=0;for(var g=0;g=h.length)break;j=h[i++];var k=j;k.upload.progress=d,k.upload.total=c.total,k.upload.bytesSent=c.loaded}for(var l=a,m=0,l=l;;){var n;if(m>=l.length)break;n=l[m++];var o=n;this.emit("uploadprogress",o,o.upload.progress,o.upload.bytesSent)}}else{var p=!0;d=100;for(var q=a,r=0,q=q;;){var s;if(r>=q.length)break;s=q[r++];var t=s;100===t.upload.progress&&t.upload.bytesSent===t.upload.total||(p=!1),t.upload.progress=d,t.upload.bytesSent=t.upload.total}if(p)return;for(var u=a,v=0,u=u;;){var w;if(v>=u.length)break;w=u[v++];var x=w;this.emit("uploadprogress",x,d,x.upload.bytesSent)}}}},{key:"_finishedUploading",value:function(a,c,d){var e=void 0;if(a[0].status!==b.CANCELED&&4===c.readyState){if("arraybuffer"!==c.responseType&&"blob"!==c.responseType&&(e=c.responseText,c.getResponseHeader("content-type")&&~c.getResponseHeader("content-type").indexOf("application/json")))try{e=JSON.parse(e)}catch(a){d=a,e="Invalid JSON response from server."}this._updateFilesUploadProgress(a),200<=c.status&&c.status<300?a[0].upload.chunked?a[0].upload.finishedChunkUpload(this._getChunk(a[0],c)):this._finished(a,e,d):this._handleUploadError(a,c,e)}}},{key:"_handleUploadError",value:function(a,c,d){if(a[0].status!==b.CANCELED){if(a[0].upload.chunked&&this.options.retryChunks){var e=this._getChunk(a[0],c);if(e.retries++=f.length)break;f[g++];this._errorProcessing(a,d||this.options.dictResponseError.replace("{{statusCode}}",c.status),c)}}}},{key:"submitRequest",value:function(a,b,c){a.send(b)}},{key:"_finished",value:function(a,c,d){for(var e=a,f=0,e=e;;){var g;if(f>=e.length)break;g=e[f++];var h=g;h.status=b.SUCCESS,this.emit("success",h,c,d),this.emit("complete",h)}if(this.options.uploadMultiple&&(this.emit("successmultiple",a,c,d),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()}},{key:"_errorProcessing",value:function(a,c,d){for(var e=a,f=0,e=e;;){var g;if(f>=e.length)break;g=e[f++];var h=g;h.status=b.ERROR,this.emit("error",h,c,d),this.emit("complete",h)}if(this.options.uploadMultiple&&(this.emit("errormultiple",a,c,d),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()}}],[{key:"uuidv4",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0;return("x"===a?b:3&b|8).toString(16)})}}]),b}(Emitter);Dropzone.initClass(),Dropzone.version="5.5.1",Dropzone.options={},Dropzone.optionsForElement=function(a){return a.getAttribute("id")?Dropzone.options[camelize(a.getAttribute("id"))]:void 0},Dropzone.instances=[],Dropzone.forElement=function(a){if("string"==typeof a&&(a=document.querySelector(a)),null==(null!=a?a.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return a.dropzone},Dropzone.autoDiscover=!0,Dropzone.discover=function(){var a=void 0;if(document.querySelectorAll)a=document.querySelectorAll(".dropzone");else{a=[];var b=function(b){return function(){for(var c=[],d=b,e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g=f;/(^| )dropzone($| )/.test(g.className)?c.push(a.push(g)):c.push(void 0)}return c}()};b(document.getElementsByTagName("div")),b(document.getElementsByTagName("form"))}return function(){for(var b=[],c=a,d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];var f=e;!1!==Dropzone.optionsForElement(f)?b.push(new Dropzone(f)):b.push(void 0)}return b}()},Dropzone.blacklistedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\/12/i],Dropzone.isBrowserSupported=function(){var a=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a"))for(var b=Dropzone.blacklistedBrowsers,c=0,b=b;;){var d;if(c>=b.length)break;d=b[c++];var e=d;e.test(navigator.userAgent)&&(a=!1)}else a=!1;else a=!1;return a},Dropzone.dataURItoBlob=function(a){for(var b=atob(a.split(",")[1]),c=a.split(",")[0].split(":")[1].split(";")[0],d=new ArrayBuffer(b.length),e=new Uint8Array(d),f=0,g=b.length,h=0<=g;h?f<=g:f>=g;h?f++:f--)e[f]=b.charCodeAt(f);return new Blob([d],{type:c})};var without=function(a,b){return a.filter(function(a){return a!==b}).map(function(a){return a})},camelize=function(a){return a.replace(/[\-_](\w)/g,function(a){return a.charAt(1).toUpperCase()})};Dropzone.createElement=function(a){var b=document.createElement("div");return b.innerHTML=a,b.childNodes[0]},Dropzone.elementInside=function(a,b){if(a===b)return!0;for(;a=a.parentNode;)if(a===b)return!0;return!1},Dropzone.getElement=function(a,b){var c=void 0;if("string"==typeof a?c=document.querySelector(a):null!=a.nodeType&&(c=a),null==c)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector or a plain HTML element.");return c},Dropzone.getElements=function(a,b){var c=void 0,d=void 0;if(a instanceof Array){d=[];try{for(var e=a,f=0,e=e;!(f>=e.length);)c=e[f++],d.push(this.getElement(c,b))}catch(a){d=null}}else if("string"==typeof a){d=[];for(var g=document.querySelectorAll(a),h=0,g=g;!(h>=g.length);)c=g[h++],d.push(c)}else null!=a.nodeType&&(d=[a]);if(null==d||!d.length)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return d},Dropzone.confirm=function(a,b,c){return window.confirm(a)?b():null!=c?c():void 0},Dropzone.isValidFile=function(a,b){if(!b)return!0;b=b.split(",");for(var c=a.type,d=c.replace(/\/.*$/,""),e=b,f=0,e=e;;){var g;if(f>=e.length)break;g=e[f++];var h=g;if(h=h.trim(),"."===h.charAt(0)){if(-1!==a.name.toLowerCase().indexOf(h.toLowerCase(),a.name.length-h.length))return!0}else if(/\/\*$/.test(h)){if(d===h.replace(/\/.*$/,""))return!0}else if(c===h)return!0}return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(a){return this.each(function(){return new Dropzone(this,a)})}),"undefined"!=typeof module&&null!==module?module.exports=Dropzone:window.Dropzone=Dropzone,Dropzone.ADDED="added",Dropzone.QUEUED="queued",Dropzone.ACCEPTED=Dropzone.QUEUED,Dropzone.UPLOADING="uploading",Dropzone.PROCESSING=Dropzone.UPLOADING,Dropzone.CANCELED="canceled",Dropzone.ERROR="error",Dropzone.SUCCESS="success";var detectVerticalSquash=function(a){var b=(a.naturalWidth,a.naturalHeight),c=document.createElement("canvas");c.width=1,c.height=b;var d=c.getContext("2d");d.drawImage(a,0,0);for(var e=d.getImageData(1,0,1,b),f=e.data,g=0,h=b,i=b;i>g;){0===f[4*(i-1)+3]?h=i:g=i,i=h+g>>1}var j=i/b;return 0===j?1:j},drawImageIOSFix=function(a,b,c,d,e,f,g,h,i,j){var k=detectVerticalSquash(b);return a.drawImage(b,c,d,e,f,g,h,i,j/k)},ExifRestore=function(){function a(){_classCallCheck(this,a)}return _createClass(a,null,[{key:"initClass",value:function(){this.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}},{key:"encode64",value:function(a){for(var b="",c=void 0,d=void 0,e="",f=void 0,g=void 0,h=void 0,i="",j=0;;)if(c=a[j++],d=a[j++],e=a[j++],f=c>>2,g=(3&c)<<4|d>>4,h=(15&d)<<2|e>>6,i=63&e,isNaN(d)?h=i=64:isNaN(e)&&(i=64),b=b+this.KEY_STR.charAt(f)+this.KEY_STR.charAt(g)+this.KEY_STR.charAt(h)+this.KEY_STR.charAt(i),c=d=e="",f=g=h=i="",!(ja.length)break}return c}},{key:"decode64",value:function(a){var b=void 0,c=void 0,d="",e=void 0,f=void 0,g=void 0,h="",i=0,j=[],k=/[^A-Za-z0-9\+\/\=]/g;for(k.exec(a)&&console.warn("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");;)if(e=this.KEY_STR.indexOf(a.charAt(i++)),f=this.KEY_STR.indexOf(a.charAt(i++)),g=this.KEY_STR.indexOf(a.charAt(i++)),h=this.KEY_STR.indexOf(a.charAt(i++)),b=e<<2|f>>4,c=(15&f)<<4|g>>2,d=(3&g)<<6|h,j.push(b),64!==g&&j.push(c),64!==h&&j.push(d),b=c=d="",e=f=g=h="",!(i