Merged finished kivi-input in view

This commit is contained in:
Naida Vatric
2020-03-14 14:09:36 +01:00
17 changed files with 415 additions and 261 deletions

View File

@@ -9,14 +9,21 @@
gtag('js', new Date());
gtag('config', '<%= process.env.GA_ID %>');
</script>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/13.1.5/nouislider.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.0/dropzone.css">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/validate.js/0.13.1/validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.0/dropzone.js"></script>
<script type="text/javascript">
Dropzone.autoDiscover = false;
</script>
<meta charset="UTF-8" />
<link rel="stylesheet" href="/assets/main.css">
<link rel="stylesheet" href="/assets/segment.css">
@@ -52,6 +59,9 @@
<% } else { %>
<title>Kivi.ba</title>
<% } %>
</head>
<body>

View File

@@ -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>

View File

@@ -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 %>"

View File

@@ -1,72 +1,12 @@
<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 action="/photos-upload" class="dropzone" id="photos-upload">
<div class="fallback">
<input name="file" type="file" multiple />
</div>
</div>
<div class="mdl-textfield mdl-js-textfield mdl-textfield--file" id="status"></div>
<br>
<script type="text/javascript">
/*
var c = "";
var filename = "";
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
function getFilename() {
var fullPath = document.getElementById('selector').value;
if (fullPath) {
var startIndex = (fullPath.indexOf('\\') >= 0 ? fullPath.lastIndexOf('\\') : fullPath.lastIndexOf('/'));
filename = fullPath.substring(startIndex);
if (filename.indexOf('\\') === 0 || filename.indexOf('/') === 0) {
filename = filename.substring(1);
}
filename = (uuidv4() + filename).replace(/\s+/g, '');
return (filename);
}
return (null);
}
function upload() {
var file = $('#selector')[0].files[0];
uploadFile(file)
}
async function generateSignedURL() {
const file = getFilename();
const response = await fetch('/generateSignedURL?filename=' + file);
if (!response.ok) {
throw new Error('Network response for fetch was not ok.');
}
c = await response.text();
c = c.replace(/\"/g, "")
console.log("Got signedURL: " + c)
console.log("Trying to upload " + file)
upload();
console.log("Complete")
return false;
}
function uploadFile(file) {
$("#status").html('Starting Upload...')
url = c
fetch(url, {
method: 'PUT',
body: file
})
.then(response => response.text())
.catch(error => $("#status").html(error)
)
.then(response => $("#status").html('File uploaded successfully: ' + filename));
}
*/
</script>
<input type="hidden" name="imageUrls" id="imageUrls" value="">

View File

@@ -3,11 +3,11 @@
<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,
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,7 +227,8 @@
}
$("#submit").click( function () {
$("#submit").click( async function (e) {
e.preventDefault();
if (marker) {
const currentLocation = marker.getPosition();
@@ -170,7 +246,6 @@
$("#lng").val(0);
}
//Tag for checking of error presence
let hasErrors = false;
//Check if email is valid
@@ -196,12 +271,19 @@
validate (input);
} */
const addedFiles = photosUploader.files.filter(file => file.status!=="error");
const asyncUpload =[];
addedFiles.forEach( file => {
asyncUpload.push(generateSignedURL(file));
})
if (!hasErrors) {
await Promise.all(asyncUpload);
$("#publishForm").submit();
if (!hasErrors) {
$("#publishForm").submit();
};
});
});