diff --git a/app.py b/app.py
index 0aa3aa7..81da579 100644
--- a/app.py
+++ b/app.py
@@ -7,6 +7,8 @@ from pathlib import Path
from flask import Flask, render_template, request
from flask_dropzone import Dropzone
+from smtplib import SMTP_SSL as SMTP
+
enabled_filetypes = ['txt', 'csv', 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx']
regex_email = re.compile('^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$')
@@ -19,7 +21,8 @@ app = Flask(__name__)
app.config.update(
UPLOADED_PATH = upload_dir,
- MAX_CONTENT_LENGTH = 1000000000 # 1GB
+ MAX_CONTENT_LENGTH = 1000000000, # 1GB
+ TEMPLATES_AUTO_RELOAD = True
)
dropzone = Dropzone(app)
@@ -50,6 +53,8 @@ def handle_upload():
store_metadata(request.form, file_hashes)
store_datafiles(files, file_hashes)
+ send_confirm_mail(request.form.get('email'))
+
return 'Uspešno ste oddali datotek(e). Št. datotek: {}'.format(len(files))
@@ -144,6 +149,20 @@ def store_datafiles(files, file_hashes):
path.mkdir()
f.save(path / f.filename)
+def send_confirm_mail(email):
+ #msg = MIMEText(content, text_subtype)
+ #msg['Subject'] = "TEST"
+ #msg['From'] = sender # some SMTP servers will do this automatically, not all
+
+ #conn = SMTP(SMTPserver)
+ #conn.set_debuglevel(False)
+ #conn.login(USERNAME, PASSWORD)
+ #try:
+ # conn.sendmail(sender, destination, msg.as_string())
+ #finally:
+ # conn.quit()
+ pass
+
if __name__ == '__main__':
app.run(debug=True)
diff --git a/static/dropzone.css b/static/dropzone.css
new file mode 100644
index 0000000..e046880
--- /dev/null
+++ b/static/dropzone.css
@@ -0,0 +1,466 @@
+@-webkit-keyframes passing-through {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(40px);
+ -moz-transform: translateY(40px);
+ -ms-transform: translateY(40px);
+ -o-transform: translateY(40px);
+ transform: translateY(40px);
+ }
+ 30%,
+ 70% {
+ opacity: 1;
+ -webkit-transform: translateY(0px);
+ -moz-transform: translateY(0px);
+ -ms-transform: translateY(0px);
+ -o-transform: translateY(0px);
+ transform: translateY(0px);
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-40px);
+ -moz-transform: translateY(-40px);
+ -ms-transform: translateY(-40px);
+ -o-transform: translateY(-40px);
+ transform: translateY(-40px);
+ }
+}
+@-moz-keyframes passing-through {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(40px);
+ -moz-transform: translateY(40px);
+ -ms-transform: translateY(40px);
+ -o-transform: translateY(40px);
+ transform: translateY(40px);
+ }
+ 30%,
+ 70% {
+ opacity: 1;
+ -webkit-transform: translateY(0px);
+ -moz-transform: translateY(0px);
+ -ms-transform: translateY(0px);
+ -o-transform: translateY(0px);
+ transform: translateY(0px);
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-40px);
+ -moz-transform: translateY(-40px);
+ -ms-transform: translateY(-40px);
+ -o-transform: translateY(-40px);
+ transform: translateY(-40px);
+ }
+}
+@keyframes passing-through {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(40px);
+ -moz-transform: translateY(40px);
+ -ms-transform: translateY(40px);
+ -o-transform: translateY(40px);
+ transform: translateY(40px);
+ }
+ 30%,
+ 70% {
+ opacity: 1;
+ -webkit-transform: translateY(0px);
+ -moz-transform: translateY(0px);
+ -ms-transform: translateY(0px);
+ -o-transform: translateY(0px);
+ transform: translateY(0px);
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-40px);
+ -moz-transform: translateY(-40px);
+ -ms-transform: translateY(-40px);
+ -o-transform: translateY(-40px);
+ transform: translateY(-40px);
+ }
+}
+@-webkit-keyframes slide-in {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(40px);
+ -moz-transform: translateY(40px);
+ -ms-transform: translateY(40px);
+ -o-transform: translateY(40px);
+ transform: translateY(40px);
+ }
+ 30% {
+ opacity: 1;
+ -webkit-transform: translateY(0px);
+ -moz-transform: translateY(0px);
+ -ms-transform: translateY(0px);
+ -o-transform: translateY(0px);
+ transform: translateY(0px);
+ }
+}
+@-moz-keyframes slide-in {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(40px);
+ -moz-transform: translateY(40px);
+ -ms-transform: translateY(40px);
+ -o-transform: translateY(40px);
+ transform: translateY(40px);
+ }
+ 30% {
+ opacity: 1;
+ -webkit-transform: translateY(0px);
+ -moz-transform: translateY(0px);
+ -ms-transform: translateY(0px);
+ -o-transform: translateY(0px);
+ transform: translateY(0px);
+ }
+}
+@keyframes slide-in {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(40px);
+ -moz-transform: translateY(40px);
+ -ms-transform: translateY(40px);
+ -o-transform: translateY(40px);
+ transform: translateY(40px);
+ }
+ 30% {
+ opacity: 1;
+ -webkit-transform: translateY(0px);
+ -moz-transform: translateY(0px);
+ -ms-transform: translateY(0px);
+ -o-transform: translateY(0px);
+ transform: translateY(0px);
+ }
+}
+@-webkit-keyframes pulse {
+ 0% {
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ -ms-transform: scale(1);
+ -o-transform: scale(1);
+ transform: scale(1);
+ }
+ 10% {
+ -webkit-transform: scale(1.1);
+ -moz-transform: scale(1.1);
+ -ms-transform: scale(1.1);
+ -o-transform: scale(1.1);
+ transform: scale(1.1);
+ }
+ 20% {
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ -ms-transform: scale(1);
+ -o-transform: scale(1);
+ transform: scale(1);
+ }
+}
+@-moz-keyframes pulse {
+ 0% {
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ -ms-transform: scale(1);
+ -o-transform: scale(1);
+ transform: scale(1);
+ }
+ 10% {
+ -webkit-transform: scale(1.1);
+ -moz-transform: scale(1.1);
+ -ms-transform: scale(1.1);
+ -o-transform: scale(1.1);
+ transform: scale(1.1);
+ }
+ 20% {
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ -ms-transform: scale(1);
+ -o-transform: scale(1);
+ transform: scale(1);
+ }
+}
+@keyframes pulse {
+ 0% {
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ -ms-transform: scale(1);
+ -o-transform: scale(1);
+ transform: scale(1);
+ }
+ 10% {
+ -webkit-transform: scale(1.1);
+ -moz-transform: scale(1.1);
+ -ms-transform: scale(1.1);
+ -o-transform: scale(1.1);
+ transform: scale(1.1);
+ }
+ 20% {
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ -ms-transform: scale(1);
+ -o-transform: scale(1);
+ transform: scale(1);
+ }
+}
+.dropzone,
+.dropzone * {
+ box-sizing: border-box;
+}
+.dropzone {
+ min-height: 150px;
+ border: 2px solid rgba(0, 0, 0, 0.3);
+ background: white;
+ padding: 20px 20px;
+}
+.dropzone.dz-clickable {
+ cursor: pointer;
+}
+.dropzone.dz-clickable * {
+ cursor: default;
+}
+.dropzone.dz-clickable .dz-message,
+.dropzone.dz-clickable .dz-message * {
+ cursor: pointer;
+}
+.dropzone.dz-started .dz-message {
+ display: none;
+}
+.dropzone.dz-drag-hover {
+ border-style: solid;
+}
+.dropzone.dz-drag-hover .dz-message {
+ opacity: 0.5;
+}
+.dropzone .dz-message {
+ text-align: center;
+ margin: 2em 0;
+}
+.dropzone .dz-preview {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+ margin: 16px;
+ min-height: 100px;
+}
+.dropzone .dz-preview:hover {
+ z-index: 1000;
+}
+.dropzone .dz-preview:hover .dz-details {
+ opacity: 1;
+}
+.dropzone .dz-preview.dz-file-preview .dz-image {
+ border-radius: 20px;
+ background: #999;
+ background: linear-gradient(to bottom, #eee, #ddd);
+}
+.dropzone .dz-preview.dz-file-preview .dz-details {
+ opacity: 1;
+}
+.dropzone .dz-preview.dz-image-preview {
+ background: white;
+}
+.dropzone .dz-preview.dz-image-preview .dz-details {
+ -webkit-transition: opacity 0.2s linear;
+ -moz-transition: opacity 0.2s linear;
+ -ms-transition: opacity 0.2s linear;
+ -o-transition: opacity 0.2s linear;
+ transition: opacity 0.2s linear;
+}
+.dropzone .dz-preview .dz-remove {
+ font-size: 14px;
+ text-align: center;
+ display: block;
+ cursor: pointer;
+ border: none;
+}
+.dropzone .dz-preview .dz-remove:hover {
+ text-decoration: underline;
+}
+.dropzone .dz-preview:hover .dz-details {
+ opacity: 1;
+}
+.dropzone .dz-preview .dz-details {
+ z-index: 20;
+ position: absolute;
+ top: 0;
+ left: 0;
+ opacity: 0;
+ font-size: 13px;
+ min-width: 100%;
+ max-width: 100%;
+ padding: 2em 1em;
+ text-align: center;
+ color: rgba(0, 0, 0, 0.9);
+ line-height: 150%;
+}
+.dropzone .dz-preview .dz-details .dz-size {
+ margin-bottom: 1em;
+ font-size: 16px;
+}
+.dropzone .dz-preview .dz-details .dz-filename {
+ white-space: nowrap;
+}
+.dropzone .dz-preview .dz-details .dz-filename:hover span {
+ border: 1px solid rgba(200, 200, 200, 0.8);
+ background-color: rgba(255, 255, 255, 0.8);
+}
+.dropzone .dz-preview .dz-details .dz-filename:not(:hover) {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {
+ border: 1px solid transparent;
+}
+.dropzone .dz-preview .dz-details .dz-filename span,
+.dropzone .dz-preview .dz-details .dz-size span {
+ background-color: rgba(255, 255, 255, 0.4);
+ padding: 0 0.4em;
+ border-radius: 3px;
+}
+.dropzone .dz-preview:hover .dz-image img {
+ -webkit-transform: scale(1.05, 1.05);
+ -moz-transform: scale(1.05, 1.05);
+ -ms-transform: scale(1.05, 1.05);
+ -o-transform: scale(1.05, 1.05);
+ transform: scale(1.05, 1.05);
+ -webkit-filter: blur(8px);
+ filter: blur(8px);
+}
+.dropzone .dz-preview .dz-image {
+ border-radius: 20px;
+ overflow: hidden;
+ width: 120px;
+ height: 120px;
+ position: relative;
+ display: block;
+ z-index: 10;
+}
+.dropzone .dz-preview .dz-image img {
+ display: block;
+}
+.dropzone .dz-preview.dz-success .dz-success-mark {
+ -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+ -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+ -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+ -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+ animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+}
+.dropzone .dz-preview.dz-error .dz-error-mark {
+ opacity: 1;
+ -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+ -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+ -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+ -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+ animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+}
+.dropzone .dz-preview .dz-success-mark,
+.dropzone .dz-preview .dz-error-mark {
+ pointer-events: none;
+ opacity: 0;
+ z-index: 500;
+ position: absolute;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -27px;
+ margin-top: -27px;
+}
+.dropzone .dz-preview .dz-success-mark svg,
+.dropzone .dz-preview .dz-error-mark svg {
+ display: block;
+ width: 54px;
+ height: 54px;
+}
+.dropzone .dz-preview.dz-processing .dz-progress {
+ opacity: 1;
+ -webkit-transition: all 0.2s linear;
+ -moz-transition: all 0.2s linear;
+ -ms-transition: all 0.2s linear;
+ -o-transition: all 0.2s linear;
+ transition: all 0.2s linear;
+}
+.dropzone .dz-preview.dz-complete .dz-progress {
+ opacity: 0;
+ -webkit-transition: opacity 0.4s ease-in;
+ -moz-transition: opacity 0.4s ease-in;
+ -ms-transition: opacity 0.4s ease-in;
+ -o-transition: opacity 0.4s ease-in;
+ transition: opacity 0.4s ease-in;
+}
+.dropzone .dz-preview:not(.dz-processing) .dz-progress {
+ -webkit-animation: pulse 6s ease infinite;
+ -moz-animation: pulse 6s ease infinite;
+ -ms-animation: pulse 6s ease infinite;
+ -o-animation: pulse 6s ease infinite;
+ animation: pulse 6s ease infinite;
+}
+.dropzone .dz-preview .dz-progress {
+ opacity: 1;
+ z-index: 1000;
+ pointer-events: none;
+ position: absolute;
+ height: 16px;
+ left: 50%;
+ top: 50%;
+ margin-top: -8px;
+ width: 80px;
+ margin-left: -40px;
+ background: rgba(255, 255, 255, 0.9);
+ -webkit-transform: scale(1);
+ border-radius: 8px;
+ overflow: hidden;
+}
+.dropzone .dz-preview .dz-progress .dz-upload {
+ background: #333;
+ background: linear-gradient(to bottom, #666, #444);
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 0;
+ -webkit-transition: width 300ms ease-in-out;
+ -moz-transition: width 300ms ease-in-out;
+ -ms-transition: width 300ms ease-in-out;
+ -o-transition: width 300ms ease-in-out;
+ transition: width 300ms ease-in-out;
+}
+.dropzone .dz-preview.dz-error .dz-error-message {
+ display: block;
+}
+.dropzone .dz-preview.dz-error:hover .dz-error-message {
+ opacity: 1;
+ pointer-events: auto;
+}
+.dropzone .dz-preview .dz-error-message {
+ pointer-events: none;
+ z-index: 1000;
+ position: absolute;
+ display: block;
+ display: none;
+ opacity: 0;
+ -webkit-transition: opacity 0.3s ease;
+ -moz-transition: opacity 0.3s ease;
+ -ms-transition: opacity 0.3s ease;
+ -o-transition: opacity 0.3s ease;
+ transition: opacity 0.3s ease;
+ border-radius: 8px;
+ font-size: 13px;
+ top: 130px;
+ left: -10px;
+ width: 140px;
+ background: #be2626;
+ background: linear-gradient(to bottom, #be2626, #a92222);
+ padding: 0.5em 1.2em;
+ color: white;
+}
+.dropzone .dz-preview .dz-error-message:after {
+ content: "";
+ position: absolute;
+ top: -6px;
+ left: 64px;
+ width: 0;
+ height: 0;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #be2626;
+}
diff --git a/static/dropzone.js b/static/dropzone.js
new file mode 100644
index 0000000..78d3604
--- /dev/null
+++ b/static/dropzone.js
@@ -0,0 +1,1982 @@
+"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",
+ 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
\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) {
+
+ // TODO: find scrollbox eleemnt, if not exist, create one
+
+ var scrollbox = this.previewsContainer.querySelector(".scrollbox");
+ if (scrollbox == null) {
+ scrollbox = document.createElement("div");
+ scrollbox.setAttribute("class", "scrollbox");
+ this.previewsContainer.appendChild(scrollbox);
+ }
+ console.log(scrollbox)
+
+ a.previewElement =
+ b.createElement(this.options.previewTemplate.trim()),
+ a.previewTemplate = a.previewElement,
+ scrollbox.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.textContent = 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, "Upload canceled.") },
+ canceledmultiple : function() {},
+ complete : function(a) {
+ if (a._removeLink &&
+ (a._removeLink.textContent = 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 b() {
+ 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",
+ document
+ .querySelector(a.options.hiddenInputContainer)
+ .appendChild(a.hiddenFileInput),
+ a.hiddenFileInput.addEventListener(
+ "change", function() {
+ var c = a.hiddenFileInput.files;
+ if (c.length)
+ for (var d = c, e = 0, d = d;;) {
+ var f;
+ if (e >= d.length)
+ break;
+ f = d[e++];
+ var g = f;
+ a.addFile(g)
+ }
+ return a.emit("addedfiles", c), b()
+ })
+ }()
+ }
+ 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 = '';
+ 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.files.map(function(
+ b) { return a.cancelUpload(b) })
+ }
+ },
+ {
+ key : "enable",
+ value : function() {
+ return 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);
+ var b = a.dataTransfer.files;
+ if (this.emit("addedfiles", b), b.length) {
+ var c = a.dataTransfer.items;
+ c && c.length && null != c[0].webkitGetAsEntry
+ ? this._addFilesFromItems(c)
+ : 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) {
+ var b = this;
+ return a.map(function(a) { return b.addFile(a) })
+ }
+ },
+ {
+ 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 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, !1, 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.height);
+ break;
+ case 7:
+ k.rotate(.5 * Math.PI),
+ k.translate(j.width, -j.height),
+ k.scale(-1, 1);
+ break;
+ case 8:
+ k.rotate(-.5 * Math.PI),
+ k.translate(-j.width, 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;
+ 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.2.0", 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);
diff --git a/static/image/bg.jpeg b/static/image/bg.jpeg
new file mode 100644
index 0000000..184c1f7
Binary files /dev/null and b/static/image/bg.jpeg differ
diff --git a/static/style.css b/static/style.css
new file mode 100644
index 0000000..7197625
--- /dev/null
+++ b/static/style.css
@@ -0,0 +1,358 @@
+@import url(http://fonts.googleapis.com/css?family=Roboto:400,400italic,500,500italic,700,700italic,900,900italic,300italic,300,100italic,100);
+
+label,
+input {
+ display: block;
+}
+
+input,
+select {
+ margin-bottom: 10px;
+}
+
+label {
+ margin-bottom: 5px;
+}
+
+body,
+html {
+ height: 100%;
+ margin: 0;
+ overflow-y: hidden;
+}
+
+.bg {
+ background-image: url("image/bg.jpeg");
+ height: 100%;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+}
+
+#main-window {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin-top: -331px;
+ margin-left: -388px;
+}
+
+#izjava {
+ float: left;
+ width: 32px;
+ height: 32px;
+ margin-right: 15px;
+}
+
+#title {
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: 200;
+ font-size: 36px;
+ line-height: 42px;
+ margin-block-start: 0.4em;
+
+ color: #006cb7;
+}
+
+label {
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 10px;
+ line-height: 12px;
+ text-transform: uppercase;
+ color: #46535b;
+}
+
+#button-submit {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ padding: 10px 40px;
+
+ position: absolute;
+ width: 138px;
+ height: 41px;
+ background: #006cb7;
+ border-radius: 29px;
+ border: 0px;
+ top: 430px;
+
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 18px;
+ line-height: 21px;
+ color: #ffffff;
+ flex: none;
+ order: 0;
+ flex-grow: 0;
+ margin: 0px 10px;
+}
+
+.button-terms:enabled {
+ justify-content: center;
+ align-items: center;
+ padding: 10px 40px;
+
+ width: 138px;
+ height: 41px;
+ background: #006cb7;
+ border-radius: 29px;
+ border: 0px;
+
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 18px;
+ line-height: 21px;
+ color: #ffffff;
+ flex: none;
+ order: 0;
+ flex-grow: 0;
+ margin-top: 15px;
+}
+
+.button-terms:disabled {
+ justify-content: center;
+ align-items: center;
+ padding: 10px 40px;
+
+ width: 138px;
+ height: 41px;
+ background: #a6a6a6;
+ border-radius: 29px;
+ border: 0px;
+
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 18px;
+ line-height: 21px;
+ color: #ffffff;
+ flex: none;
+ order: 0;
+ flex-grow: 0;
+ margin-top: 15px;
+}
+
+
+input {
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 16px;
+ line-height: 19px;
+ color: #46535b;
+ background: #f5f5f5;
+ border: 0px;
+ border-bottom: 2px solid #c4c4c4;
+ width: 100%;
+}
+
+#izjava {
+ width: auto;
+}
+
+.scrollbox {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+ margin-top: 16px;
+ margin-bottom: 16px;
+ min-height: 100px;
+ max-height: 500px;
+ top: -430px;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+#rect1 {
+ position: relative;
+ width: 388px;
+ height: 531px;
+
+ background: #f5f5f5;
+ box-shadow: 0px 4px 40px rgba(0, 0, 0, 0.25);
+ border-radius: 20px 0px 0px 20px;
+}
+
+.dropzone .dz-preview {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+ margin: 3px;
+ min-height: 20px;
+}
+
+.dropzone .dz-preview .dz-details {
+ z-index: 20;
+ position: absolute;
+ top: 0;
+ left: 0;
+ opacity: 0;
+ font-size: 13px;
+ min-width: 100%;
+ max-width: 100%;
+ padding: 0em;
+ text-align: center;
+ color: rgba(0, 0, 0, 0.9);
+ line-height: 150%;
+}
+
+.dropzone .dz-preview.dz-file-preview .dz-image {
+ border-radius: 20px;
+ background: #ffff;
+ background: linear-gradient(to bottom, #fff, #fff);
+}
+
+.dropzone .dz-message {
+ position: absolute;
+ text-align: center;
+ width: 60%;
+ height: 40%;
+ margin: 0 auto;
+ padding-top: 90px;
+ padding-left: 10px;
+ padding-right: 10px;
+ right: 75px;
+ top: 140px;
+
+ border: 2px dashed #ffffff;
+ box-sizing: border-box;
+ border-radius: 6px;
+
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: bold;
+ font-size: 18px;
+ line-height: 16px;
+ text-align: center;
+
+ color: #ffffff;
+}
+
+.dropzone .dz-preview .dz-image {
+ border-radius: 10px !important;
+ overflow: hidden;
+ width: 320px;
+ height: 40px;
+ position: relative;
+ display: block;
+ z-index: 10;
+}
+
+.dz-size {
+ float: right;
+ margin-right: 90px;
+ margin-top: 11px;
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 14px;
+ line-height: 19px;
+ color: #46535b;
+}
+
+.dropzone .dz-preview .dz-details .dz-size {
+ margin-bottom: 1em;
+ font-size: 14px;
+}
+
+.dz-filename {
+ float: left;
+ margin-top: 11px;
+ margin-left: 15px;
+ max-width: 140px;
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 14px;
+ line-height: 19px;
+ color: #46535b;
+}
+
+.dropzone .dz-preview .dz-progress {
+ opacity: 1;
+ z-index: 1000;
+ pointer-events: none;
+ position: absolute;
+ height: 16px;
+ left: 50%;
+ top: 50%;
+ margin-top: -8px;
+ width: 75px;
+ margin-left: 75px;
+ background: rgba(240, 240, 240, 0.8);
+ -webkit-transform: scale(1);
+ border-radius: 8px;
+ overflow: hidden;
+}
+
+.form-select {
+ display: none;
+}
+
+.corpus-type-selector {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-bottom: 2px solid grey;
+ margin-bottom: 20px;
+}
+
+.corpus-type-button {
+ width: 100%;
+ border: 0px;
+ outline: 0px;
+ background: rgba(0, 0, 0, 0);
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: 500;
+ font-size: 13px;
+ line-height: 21px;
+ text-transform: uppercase;
+ color: #848c91;
+}
+
+.corpus-type-button.selected {
+ width: 100%;
+ border: 0px;
+ outline: 0px;
+ color: #006cb7;
+ border-bottom: 3px solid #006cb7;
+ background: rgba(0, 0, 0, 0);
+}
+
+#popup-terms {
+ position: absolute;
+ top: 100px;
+ bottom: 100px;
+ left: 10%;
+ right: 10%;
+ width: 80%;
+ height: 80%;
+ padding: 5px 14px;
+ justify-content: center;
+ text-align: center;
+ background-color: #eee;
+ border-radius: 5px;
+ box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.2);
+}
+
+#popup-terms-text {
+ height: 90%;
+ border: 0px solid #ccc;
+ overflow-y: scroll;
+ text-align: left;
+
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 16px;
+ line-height: 19px;
+ color: #46535b;
+}
diff --git a/templates/index.html b/templates/index.html
index 24272e4..03993e3 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -3,133 +3,342 @@
Portal za oddajanje besedil za DS4 in DS1
- {{ dropzone.load_css() }}
-
+
+
+ {{ dropzone.style('position: absolute;
+ top: -0.5px;
+ width: 388px;
+ height: 532px;
+ left: 385px;
+ background: linear-gradient(198.62deg, rgba(255, 255, 255, 0.49) -1.62%, rgba(255, 255, 255, 0.73) -1.61%, rgba(255, 255, 255, 0.41) 79.34%);
+ box-shadow: 20px 4px 40px rgba(0, 0, 0, 0.25);
+ backdrop-filter: blur(20px);
+ border: 0px;
+ border-radius: 0px 20px 20px 0px;') }}
+
-Portal za oddajanje besedil za DS4 in DS1
-