Changed dropzone - url WiP.
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.0/dropzone.js"></script>
|
||||
<script type="text/javascript">
|
||||
Dropzone.autoDiscover = false;
|
||||
Dropzone.autoDiscover = false;
|
||||
</script>
|
||||
|
||||
<meta charset="UTF-8" />
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<br>
|
||||
<div class="row">
|
||||
<% for (const input of additionalInputInputs){ %>
|
||||
<div class="input-field col s3 m4 l5">
|
||||
<div class="input-field col s12">
|
||||
<textarea
|
||||
id="<%= input.dbField %>"
|
||||
form="publishForm"
|
||||
@@ -15,9 +15,10 @@
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<div class="row">
|
||||
|
||||
<% for (const input of additionalBooleanPublishInputs){ %>
|
||||
<p>
|
||||
<p class="col s6 m4 l4">
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" class="filled-in" name="<%= input.dbField %>"
|
||||
<% if (additionalBooleanPublishValues[input.dbField]) { %>
|
||||
@@ -27,7 +28,7 @@
|
||||
</label>
|
||||
</p>
|
||||
<% } %>
|
||||
|
||||
</div>
|
||||
<br>
|
||||
<% for (const input of additionalSegmentSelectInputs){ %>
|
||||
<div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<br>
|
||||
<div class="row" id="basic-inputs">
|
||||
<% for (const input of basicInputInputs){ %>
|
||||
<div class="input-field col s3 m4 l5">
|
||||
<div class="input-field col s10 m5 l4">
|
||||
<input
|
||||
id="<%= input.dbField %>"
|
||||
name="<%= input.dbField %>"
|
||||
|
||||
@@ -1,111 +1,15 @@
|
||||
<br>
|
||||
<div class="mdl-textfield mdl-js-textfield mdl-textfield--file">
|
||||
<input type="file" id="selector">
|
||||
</div>
|
||||
|
||||
<input class="mdl-button mdl-button--raised mdl-button--colored" type="button" value="Upload"
|
||||
onclick="generateSignedURL()">
|
||||
|
||||
<div class="mdl-textfield mdl-js-textfield mdl-textfield--file" id="status"></div>
|
||||
|
||||
<s>******************************</s>
|
||||
<div action="/photos-upload" class="dropzone" id="photos-upload">
|
||||
<div class="fallback">
|
||||
<input name="file" type="file" multiple />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<button id="test">TEST</button>
|
||||
|
||||
<br>
|
||||
<div class="row center-align">
|
||||
<button id="test" class="welcome-center-button waves-effect waves-light btn col s4">UPLOAD</button>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="imageUrls" id="imageUrls" value="">
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function(){
|
||||
// Manual dropzone init
|
||||
const dropzoneOptions = {
|
||||
url: "/photos-upload", //can be a function that returns url ?
|
||||
autoProcessQueue:false, //not to upload files automaticly
|
||||
method: "put", //or post
|
||||
parallelUploads: 1,
|
||||
uploadMultiple: false, //or true ??
|
||||
addRemoveLinks: true,
|
||||
maxFilesize: 2, //MB,
|
||||
resizeWidth: 600,
|
||||
maxFiles: 10, // ??
|
||||
acceptedFiles: "image/*",
|
||||
accept: function(file, done){
|
||||
console.log('test');
|
||||
},
|
||||
dictDefaultMessage: `<span class="text-center">
|
||||
<h3>Prevuci fotografije ili klikni za dodavanje!</h3>
|
||||
</span>`,
|
||||
dictResponseError: 'Error uploading file!',
|
||||
dictRemoveFile: 'Izbriši '
|
||||
};
|
||||
var photosUploader = new Dropzone('#photos-upload', dropzoneOptions);
|
||||
|
||||
$("#test").click(function(e){
|
||||
e.preventDefault();
|
||||
const addedFiles = photosUploader.files.filter(file => file.status==="added");
|
||||
addedFiles.forEach( file => {
|
||||
generateSignedURL(file);
|
||||
|
||||
})
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function uuidv4() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||||
const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
function getFileName(fileName) {
|
||||
const encodedFileName = (uuidv4() + fileName).replace(/\s+/g, '');
|
||||
return encodedFileName;
|
||||
}
|
||||
|
||||
function upload() {
|
||||
var file = $('#selector')[0].files[0];
|
||||
uploadFile(file)
|
||||
}
|
||||
|
||||
|
||||
async function generateSignedURL(file) {
|
||||
const fileName = getFileName(file.name);
|
||||
const response = await fetch('/generateSignedURL?filename=' + fileName);
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response for fetch was not ok.');
|
||||
}
|
||||
let signedUrl = await response.text();
|
||||
signedUrl = signedUrl.replace(/\"/g, "")
|
||||
// console.log("Got signedURL: " + c)
|
||||
// console.log("Trying to upload " + fileName)
|
||||
uploadFile(file, fileName, signedUrl);
|
||||
// console.log("Complete")
|
||||
return false;
|
||||
}
|
||||
|
||||
function uploadFile(file, fileName, url) {
|
||||
$("#status").html('Starting Upload...')
|
||||
fetch(url, {
|
||||
method: 'PUT',
|
||||
headers: new Headers({'content-type': 'image/*'}),
|
||||
mode: 'cors',
|
||||
body: file
|
||||
})
|
||||
.then(response => response.text())
|
||||
.then (response => {
|
||||
return response;
|
||||
}
|
||||
)
|
||||
.catch(error => $("#status").html(error)
|
||||
)
|
||||
.then(response => {
|
||||
$("#status").html('File uploaded successfully: ' + fileName )
|
||||
$("#imageUrls").val($("#imageUrls").val()+ fileName+"|");
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -1,13 +1,13 @@
|
||||
<br>
|
||||
<form id="publishForm" method="POST" novalidate enctype="multipart/form-data">
|
||||
<form id="publishForm" method="POST" novalidate >
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<ul class="tabs">
|
||||
<li class="tab custom-col"><a href="#publishBasicData">Osnovni podaci</a></li>
|
||||
<li class="tab custom-col"><a href="#publishAdditionalData">Dodatni podaci</a></li>
|
||||
<li class="tab custom-col"><a href="#publishLocation">Lokacija</a></li>
|
||||
<li class="tab custom-col"><a href="#publishPhotos">Fotografije</a></li>
|
||||
<li class="tab custom-col"><a href="#publishEnd">Kraj</a></li>
|
||||
<li class="tab col s3"><a href="#publishBasicData">Osnovni podaci</a></li>
|
||||
<li class="tab col s3"><a href="#publishAdditionalData">Dodatni podaci</a></li>
|
||||
<li class="tab col s2"><a href="#publishLocation">Lokacija</a></li>
|
||||
<li class="tab col s2"><a href="#publishPhotos">Fotografije</a></li>
|
||||
<li class="tab col s2"><a href="#publishEnd">Kraj</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
@@ -32,10 +32,85 @@
|
||||
</form>
|
||||
|
||||
<script>
|
||||
function uuidv4() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||||
const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
function getFileName(fileName) {
|
||||
const encodedFileName = (uuidv4() + fileName).replace(/\s+/g, '');
|
||||
return encodedFileName;
|
||||
}
|
||||
|
||||
function upload() {
|
||||
var file = $('#selector')[0].files[0];
|
||||
uploadFile(file)
|
||||
}
|
||||
|
||||
|
||||
async function generateSignedURL(file) {
|
||||
const fileName = getFileName(file.name);
|
||||
const response = await fetch('/generateSignedURL?filename=' + fileName);
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response for fetch was not ok.');
|
||||
}
|
||||
let signedUrl = await response.text();
|
||||
signedUrl = signedUrl.replace(/\"/g, "")
|
||||
await uploadFile(file, fileName, signedUrl);
|
||||
return fileName;
|
||||
}
|
||||
|
||||
function uploadFile(file, fileName, url) {
|
||||
return fetch(url, {
|
||||
method: 'PUT',
|
||||
headers: new Headers({'content-type': 'image/*'}),
|
||||
mode: 'cors',
|
||||
body: file
|
||||
})
|
||||
.then(response => response.text())
|
||||
.then (response => {
|
||||
return response;
|
||||
}
|
||||
)
|
||||
.catch(error => $("#status").html(error)
|
||||
)
|
||||
.then(response => {
|
||||
$("#imageUrls").val($("#imageUrls").val()+ fileName+"|");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
$('.tabs').tabs();
|
||||
|
||||
// Manual dropzone init
|
||||
const dropzoneOptions = {
|
||||
url: "/photos-upload", //can be a function that returns url ?
|
||||
autoProcessQueue:false, //not to upload files automaticly
|
||||
method: "put", //or post
|
||||
parallelUploads: 1,
|
||||
uploadMultiple: false, //or true ??
|
||||
addRemoveLinks: true,
|
||||
maxFilesize: 2, //MB,
|
||||
resizeWidth: 600,
|
||||
maxFiles: 10, // ??
|
||||
acceptedFiles: "image/*",
|
||||
dictDefaultMessage: `<span class="text-center">
|
||||
<h3>Prevuci fotografije ili klikni za dodavanje!</h3>
|
||||
(Maksimalno 10 fotografija.)
|
||||
</span>`,
|
||||
dictResponseError: 'Error uploading file!',
|
||||
dictRemoveFile: 'Izbriši ',
|
||||
dictFileTooBig: 'Fajl je prevelik!',
|
||||
dictInvalidFileType: 'Iabrani fajl nije fotografija!',
|
||||
dictMaxFilesExceeded: 'Dostigli ste maksimalan broj fotografija!'
|
||||
};
|
||||
var photosUploader = new Dropzone('#photos-upload', dropzoneOptions);
|
||||
|
||||
|
||||
//VALIDATION - WiP
|
||||
//Helper validation functions
|
||||
const isValidEmail = $email => {
|
||||
const simpleEmailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
||||
@@ -152,8 +227,21 @@
|
||||
|
||||
}
|
||||
|
||||
|
||||
$("#test").click(function(e){
|
||||
e.preventDefault();
|
||||
const addedFiles = photosUploader.files.filter(file => file.status!=="error");
|
||||
console.log(addedFiles);
|
||||
addedFiles.forEach( async (file) => {
|
||||
await generateSignedURL(file);
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
|
||||
$("#submit").click( function () {
|
||||
|
||||
|
||||
if (marker) {
|
||||
const currentLocation = marker.getPosition();
|
||||
|
||||
@@ -196,10 +284,13 @@
|
||||
|
||||
validate (input);
|
||||
} */
|
||||
|
||||
if (!hasErrors) {
|
||||
$("#publishForm").submit();
|
||||
|
||||
if (!hasErrors) {
|
||||
$("#publishForm").submit();
|
||||
};
|
||||
|
||||
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user