Code refactored to be ready for solar upgrade. Many other minor fixes.
This commit is contained in:
commit
086f7f3bf2
|
@ -7,9 +7,9 @@ COPY static /usr/src/portal-webapp/static
|
|||
COPY contract/ /usr/src/portal-webapp/contract
|
||||
WORKDIR /usr/src/portal-webapp
|
||||
|
||||
RUN apt-get update && apt-get -y install wkhtmltopdf python3-pdfkit && \
|
||||
RUN apt-get update && apt-get -y install wkhtmltopdf && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN pip3 install --no-cache-dir flask flask-dropzone gunicorn pdfkit
|
||||
RUN pip3 install --no-cache-dir pdfkit flask flask-dropzone gunicorn pdfkit
|
||||
|
||||
CMD ["gunicorn", "--bind", "0.0.0.0:80", "-w", "1", "--access-logfile", "-", "app:app"]
|
||||
|
|
2
app.py
2
app.py
|
@ -81,7 +81,7 @@ app.config.update(
|
|||
dropzone = Dropzone(app)
|
||||
|
||||
|
||||
@app.route('/')
|
||||
@app.route(URL_ROOT)
|
||||
def index():
|
||||
return render_template('index.html')
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<style>
|
||||
table, th, td {
|
||||
border: 1px solid black;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@import url(http://fonts.googleapis.com/css?family=Roboto:400,400italic,500,500italic,700,700italic,900,900italic,300italic,300,100italic,100);
|
||||
@import url(https://fonts.googleapis.com/css?family=Roboto:400,400italic,500,500italic,700,700italic,900,900italic,300italic,300,100italic,100);
|
||||
|
||||
label,
|
||||
input {
|
||||
|
|
|
@ -1,10 +1,346 @@
|
|||
<<<<<<< HEAD
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
=======
|
||||
<!DOCTYPE html>
|
||||
<html lang="sl">
|
||||
>>>>>>> fd4bad4afe3ac3b7bcb321c7dc16ee38401527c5
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
<body>
|
||||
<<<<<<< HEAD
|
||||
<a href="/prevodi">Korpus paralelnih besdil ANG-SLO</a><br>
|
||||
<a href="/gigafida">Korpus Gigafida</a>
|
||||
=======
|
||||
<div class="bg"></div>
|
||||
<div id="main-window">
|
||||
<div id="rect1">
|
||||
<form id="my-dropzone" class="dropzone">
|
||||
<div style="position: relative; right: 390px;">
|
||||
<h1 id="title">Portal za oddajanje besedil za DS4 in DS1</h1>
|
||||
|
||||
<div class="corpus-type-selector">
|
||||
<button id="corpus-type-prevodi" class="corpus-type-button">PREVODI</button>
|
||||
<button id="corpus-type-gigafida" class="corpus-type-button">GIGAFIDA</button>
|
||||
<button id="corpus-type-solar" class="corpus-type-button">ŠOLAR</button>
|
||||
</div>
|
||||
|
||||
<select id="corpus-form-select" class="form-select" name="tip" form="tip" required="required" size="100">
|
||||
<option value="prevodi" selected="selected">Prevodi</option>
|
||||
<option value="gigafida">Gigafida</option>
|
||||
<option value="solar">Šolar</option>
|
||||
</select>
|
||||
|
||||
<label for="ime">* Ime:</label>
|
||||
<input type="text" id="ime" name="ime" required="required"/>
|
||||
|
||||
<label for="podjetje">Podjetje / institucija:</label>
|
||||
<input type="text" id="podjetje" name="podjetje"/>
|
||||
|
||||
<label for="naslov">Naslov:</label>
|
||||
<input type="text" id="naslov" name="naslov"/>
|
||||
|
||||
<label for="posta">Pošta:</label>
|
||||
<input type="text" id="posta" name="posta"/>
|
||||
|
||||
<label for="email">* Email:</label>
|
||||
<input type="text" id="email" name="email" required="required"/>
|
||||
|
||||
<label for="telefon">Telefon:</label>
|
||||
<input type="text" id="telefon" name="telefon"/>
|
||||
|
||||
<input type="checkbox" id="izjava" name="izjava" value="izjava" required="required">
|
||||
<label for="izjava">* Izjavljam, da sem lastnik avtorskih pravic in dovoljujem, da se besedila vključijo v korpuse v skladu z ustrezno licenco korpusa.</label>
|
||||
|
||||
<button id="button-submit" type="submit">Oddaj</button>
|
||||
</div>
|
||||
|
||||
<div class="dropzone-previews"></div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="popup-terms" style="display: none">
|
||||
<div id="popup-terms-text">
|
||||
<h2>POGODBA O PRENOSU AVTORSKIH PRAVIC</h2>
|
||||
|
||||
<h3>UVODNE DOLOČBE</h3>
|
||||
<h4><b>1. člen</b></h4>
|
||||
|
||||
<p>1.1. Stranki uvodoma ugotavljata, da naročnik izvaja projekt Razvoj slovenščine v digitalnem
|
||||
okolju – RSDO (v nadaljevanju projekt RSDO), ki je bil na javnem razpisu Razvoj slovenščine v
|
||||
digitalnem okolju – jezikovni viri in tehnologije (JR-ESRR-Razvoj slovenščine v digitalnem
|
||||
okolju), objavljenem v Uradnem listu RS št. 70/19 dne 29. 11. 2019, sprejet v sofinanciranje
|
||||
in katerega vsebina je razvidna s spletnih strani https://slovenscina.eu.</p>
|
||||
|
||||
<p>1.2. Stranki uvodoma ugotavljata, da bo naročnik v okviru projekta RSDO:
|
||||
- izdelal osrednjo digitalno slovarsko bazo, ki združuje različne tipe jezikovnih podatkov o
|
||||
slovenščini v odprtem dostopu,
|
||||
- izdelal terminološki portal z integriranim iskalnikom po slovenskih terminoloških virih, zlasti
|
||||
terminoloških slovarjih,
|
||||
- izdelal korpus prevodov po različnih domenah za učenje strojnega prevajalnika za jezikovni
|
||||
par angleščina-slovenščina in slovenščina-angleščina.</p>
|
||||
<p>1.3. Stranki uvodoma ugotavljata, da bo naročnik pri projektu RSDO za vse zgoraj opisane
|
||||
namene zbiral in uporabil besedilne vire, ki so navedeni v prilogi k tej pogodbi in ki so lahko
|
||||
avtorska dela ali drugi predmeti varstva v skladu z Zakonom o avtorski in sorodnih pravicah
|
||||
(Uradni list RS, št. 16/07 – uradno prečiščeno besedilo, 68/08, 110/13, 56/15, 63/16 – ZKUASP
|
||||
in 59/19; ZASP) in na katerih ima imetnik pravic avtorske, avtorski sorodne ali druge pravice v
|
||||
skladu z ZASP (v nadaljevanju avtorska dela).</p>
|
||||
|
||||
<p>1.4. Stranki ugotavljata, da bodo avtorska dela in vse njihove morebitne spremembe in
|
||||
predelave, ter zbirke podatkov, ki bodo med izvajanjem projekta RSDO nastale, javno
|
||||
dostopni pod pogoji prostih licenc (npr. CC BY-SA) in bodo na voljo za nekomercialen in
|
||||
komercialen razvoj tehnologij, za raziskave in za druge raziskovalne namene
|
||||
posameznikom, raziskovalnim in izobraževalnim institucijam, neprofitnim organizacijam,
|
||||
državnim organom, organizacijam z javnimi pooblastili in gospodarskim družbam v Sloveniji
|
||||
in tujini.</p>
|
||||
|
||||
<h3>PREDMET POGODBE</h3>
|
||||
<h4><b>2. člen</b></h4>
|
||||
|
||||
<p>2.1. Predmet pogodbe so vsa avtorska dela imetnika pravic, ki so navedena v prilogi k tej
|
||||
pogodbi.</p>
|
||||
|
||||
<p>2.2. S podpisom te pogodbe imetnik avtorskih pravic na naročnika prenaša avtorske pravice
|
||||
na avtorskih delih na način in v obsegu, kakor je navedeno v 3. členu te pogodbe.</p>
|
||||
|
||||
<h3>PRENOS AVTORSKIH PRAVIC</h3>
|
||||
<h4><b>3. člen</b></h4>
|
||||
|
||||
<p>3.1. S podpisom te pogodbe imetnik pravic na avtorskih delih, ki so predmet te pogodbe, na
|
||||
naročnika neizključno, brez časovnih in teritorialnih omejitev prenaša vse materialne avtorske
|
||||
pravice, avtorski sorodne pravice in druge pravice avtorja v skladu z ZASP, zlasti pravico
|
||||
reproduciranja (23. člen ZASP), distribuiranja (24. člena ZASP), dajanja v najem (25. člen ZASP),
|
||||
priobčitve javnosti (26. do 32.a člen ZASP), vključno s pravico dajanja na voljo javnosti (32.a
|
||||
člen ZASP) in pravico predelave (33. člen ZASP).</p>
|
||||
|
||||
<p>3.2. S podpisom te pogodbe imetnik pravic izrecno soglaša, da naročnik pravice iz točke 3.1.
|
||||
prenaša naprej na tretje osebe brez omejitev.</p>
|
||||
|
||||
<h3>JAMČEVANJE IMETNIKA PRAVIC</h3>
|
||||
|
||||
<h4><b>4. člen</b></h4>
|
||||
|
||||
<p>4.1. S podpisom te pogodbe imetnik pravic jamči, da je na avtorskih delih, ki so predmet te
|
||||
pogodbe, imetnik vseh avtorskih pravic, avtorski sorodnih pravic in drugih pravic avtorja v
|
||||
skladu z ZASP, ki so potrebne za prenos pravic po tej pogodbi, in da na avtorskih delih ne
|
||||
obstajajo pravice tretjih oseb, ki bi naročniku preprečevale njihovo uporabo.</p>
|
||||
|
||||
<p>4.2. Določbe te pogodbe ne vplivajo na prenos moralnih avtorskih pravic, ki so v skladu z
|
||||
določbami ZASP neprenosljive.</p>
|
||||
|
||||
<h3>OSEBNI PODATKI</h3>
|
||||
<h4><b>5. člen</b></h4>
|
||||
|
||||
<p>6.1. Stranki se zavezujeta, da bosta vse morebitne osebne podatke, ki jih bosta obdelovali za
|
||||
namene izvajanja te pogodbe, obdelovali na način, da bosta upoštevali vse veljavne predpise
|
||||
o varstvu osebnih podatkov in da bosta posameznikom, na katere se osebni podatki nanašajo,
|
||||
zagotovili vse potrebne informacije v skladu s predpisi o varstvu osebnih podatkov.<p>
|
||||
|
||||
<h3>KONTAKTNE OSEBE</h3>
|
||||
<h4><b>6. člen</b></h4>
|
||||
|
||||
<p>7.1 Kontaktna oseba za izvedbo te pogodbe na strani naročnika je [xxx].</p>
|
||||
<p>7.2. Kontaktna oseba za izvedbo te pogodbe na strani imetnika pravic je [xxx].</p>
|
||||
|
||||
<h3>KONČNE DOLOČBE</h3>
|
||||
<h4><b>7. člen</b></h4>
|
||||
|
||||
<p>8.1. Če je katerakoli določba te pogodbe nična, ostanejo druga določila te pogodbe v veljavi.</p>
|
||||
|
||||
<h4><b>8. člen</b></h4>
|
||||
|
||||
<p>9.1. Za razmerja v zvezi s to pogodbo se uporabljajo pravni predpisi Republike Slovenije.</p>
|
||||
<p>9.2. Spore iz te pogodbe bosta stranki reševali po mirni poti. V primeru, da mirna rešitev ne
|
||||
bo mogoča, je za vse spore v zvezi s to pogodbo pristojno sodišče v Ljubljani.</p>
|
||||
|
||||
<h4><b>9. člen</b></h4>
|
||||
|
||||
<p>10.1. Ta pogodba nadomešča vsa predhodna pogajanja, ponudbe in druge dogovore med
|
||||
strankama.</p>
|
||||
<p>10.2. Ta pogodba je sestavljena v [dveh] istovetnih izvodih, od katerih prejme vsaka stranka
|
||||
po enega.</p>
|
||||
<p>10.3. Pogodbeni stranki s podpisom potrjujeta veljavnost te pogodbe.</p>
|
||||
</div>
|
||||
<button id="button-submit-cancel" class="button-terms" style="background: #ff2d2d;">Prekliči</button>
|
||||
<button id="button-submit-final" class="button-terms">Oddaj</button>
|
||||
</div>
|
||||
|
||||
<!--{{ dropzone.load_js() }}-->
|
||||
<script src="static/dropzone.js"></script>
|
||||
<script>
|
||||
//////////////////////////////
|
||||
// Curpus type button logic //
|
||||
//////////////////////////////
|
||||
var formSelector = document.getElementById("corpus-form-select");
|
||||
var buttons = document.getElementsByClassName("corpus-type-button");
|
||||
|
||||
function performButtonClickLogic(clickedBtnId) {
|
||||
// Update buttons
|
||||
for (var i = 0; i < buttons.length; i++) {
|
||||
var btn = buttons[i];
|
||||
if (btn.id == clickedBtnId) {
|
||||
// Set style class
|
||||
btn.disabled = true;
|
||||
btn.classList.add("selected");
|
||||
} else {
|
||||
btn.disabled = false;
|
||||
btn.classList.remove("selected");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Update (hidden) form selector
|
||||
if (clickedBtnId == "corpus-type-prevodi") {
|
||||
formSelector.value = "prevodi";
|
||||
} else if (clickedBtnId == "corpus-type-gigafida") {
|
||||
formSelector.value = "gigafida";
|
||||
} else if (clickedBtnId == "corpus-type-solar") {
|
||||
formSelector.value = "solar";
|
||||
}
|
||||
}
|
||||
|
||||
var corpusTypeBtnListener = function(event) {
|
||||
var clickedBtnId = event.target.id;
|
||||
performButtonClickLogic(clickedBtnId);
|
||||
};
|
||||
|
||||
for (var i = 0; i < buttons.length; i++) {
|
||||
buttons[i].addEventListener('click', corpusTypeBtnListener);
|
||||
}
|
||||
|
||||
// When loading page automatically select "prevodi" option
|
||||
performButtonClickLogic("corpus-type-prevodi");
|
||||
|
||||
/////////////////////////
|
||||
// Dropzone //
|
||||
/////////////////////////
|
||||
var btnSubmit = document.getElementById("button-submit");
|
||||
var btnSubmitFinal = document.getElementById("button-submit-final");
|
||||
var btnSubmitCancel = document.getElementById("button-submit-cancel");
|
||||
var elemTermsPopup = document.getElementById("popup-terms");
|
||||
var termsScrollbox = document.getElementById("popup-terms-text");
|
||||
var scrollboxTriggered = false;
|
||||
var form = document.forms["my-dropzone"];
|
||||
|
||||
function isEmptyOrSpaces(str){
|
||||
return str == null || str.match(/^ *$/) !== null;
|
||||
}
|
||||
|
||||
const reEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||
|
||||
Dropzone.options.myDropzone = { // The camelized version of the ID of the form element
|
||||
url: "./upload",
|
||||
autoProcessQueue: false,
|
||||
uploadMultiple: true,
|
||||
parallelUploads: 20,
|
||||
paramName: "file", // The name that will be used to transfer the file
|
||||
maxFilesize: 1000, // MB
|
||||
acceptedFiles: ".txt, .csv, .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx",
|
||||
maxFiles: 20,
|
||||
dictDefaultMessage: `Kliknite ali odložite datoteke sem.`,
|
||||
dictFallbackMessage: "Vaš brskalnik ne podpira izbiranje datotek z odlaganjem (\"drag & drop\").",
|
||||
dictInvalidFileType: "Datoteka je napačnega formata.",
|
||||
dictFileTooBig: "Datoteke je prevelika {{filesize}}. Največja dovoljena velikost: {{maxFilesize}}MiB.",
|
||||
dictResponseError: "Napaka strežnika: {{statusCode}}",
|
||||
dictMaxFilesExceeded: "Ne morete naložiti več datotek.",
|
||||
dictCancelUpload: "Prekini prenos",
|
||||
dictRemoveFile: "Odstrani datoteko",
|
||||
dictCancelUploadConfirmation: "Ali res želite odstraniti to datoteko?",
|
||||
dictUploadCanceled: "Prenos prekinjen",
|
||||
|
||||
// The setting up of the dropzone
|
||||
init: function() {
|
||||
var dz = this;
|
||||
|
||||
|
||||
btnSubmit.addEventListener("click", function(e) {
|
||||
// Make sure that the form isn't actually being sent.
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
// Check form validity.
|
||||
var ime = form["ime"].value;
|
||||
var email = form["email"].value;
|
||||
var podjetje = form["podjetje"].value;
|
||||
var telefon = form["telefon"].value;
|
||||
var izjava = form["izjava"].checked;
|
||||
if (isEmptyOrSpaces(ime) || isEmptyOrSpaces(email) || !izjava) {
|
||||
alert("Izpolnite vsa obvezna polja!");
|
||||
} else if (!reEmail.test(email.toLowerCase())) {
|
||||
alert("Email napačnega formata!");
|
||||
} else if (ime.length > 100 || email.length > 100 || podjetje.length > 100 || telefon.length > 100) {
|
||||
alert("Velikost polj je omejena na 100 znakov.");
|
||||
} else {
|
||||
// Then make terms popup visible
|
||||
btnSubmit.disabled = true;
|
||||
btnSubmitFinal.disabled = true;
|
||||
elemTermsPopup.style.display = "inline";
|
||||
scrollboxTriggered = false;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// First change the button to actually tell Dropzone to process the queue.
|
||||
btnSubmitFinal.addEventListener("click", function(e) {
|
||||
// Hand off data to dropzone
|
||||
dz.processQueue();
|
||||
|
||||
// Clear fields and hide popup agian
|
||||
btnSubmit.disabled = false;
|
||||
elemTermsPopup.style.display = "none";
|
||||
form.reset();
|
||||
scrollboxTriggered = false;
|
||||
});
|
||||
|
||||
btnSubmitCancel.addEventListener("click", function(e) {
|
||||
btnSubmit.disabled = false;
|
||||
scrollboxTriggered = false;
|
||||
elemTermsPopup.style.display = "none";
|
||||
});
|
||||
|
||||
// Enable final submit button only if user scrolls to the end of the terms.
|
||||
function checkScrollboxTrigger(event) {
|
||||
var element = event.target;
|
||||
if (!scrollboxTriggered
|
||||
&& element.scrollHeight - element.scrollTop <= element.clientHeight + 50
|
||||
) {
|
||||
scrollboxTriggered = true;
|
||||
btnSubmitFinal.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
termsScrollbox.addEventListener('scroll', function(event) {
|
||||
checkScrollboxTrigger(event);
|
||||
});
|
||||
|
||||
termsScrollbox.addEventListener("mouseenter", function(event) {
|
||||
checkScrollboxTrigger(event);
|
||||
});
|
||||
|
||||
// Listen to the sendingmultiple event. In this case, it's the sendingmultiple event instead
|
||||
// of the sending event because uploadMultiple is set to true.
|
||||
this.on("sendingmultiple", function() {
|
||||
// Gets triggered when the form is actually being sent.
|
||||
// Hide the success button or the complete form.
|
||||
});
|
||||
|
||||
this.on("successmultiple", function(files, response) {
|
||||
// Gets triggered when the files have successfully been sent.
|
||||
// Redirect user or notify of success.
|
||||
alert("Odgovor strežnika: " + response);
|
||||
location.reload();
|
||||
});
|
||||
|
||||
this.on("errormultiple", function(files, response) {
|
||||
// Gets triggered when there was an error sending the files.
|
||||
// Maybe show form again, and notify user of error
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
>>>>>>> fd4bad4afe3ac3b7bcb321c7dc16ee38401527c5
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Reference in New Issue
Block a user