mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2025-06-14 18:10:40 +00:00
Add prototype
This commit is contained in:
5
vre_www/Dockerfile
Normal file
5
vre_www/Dockerfile
Normal file
@ -0,0 +1,5 @@
|
||||
FROM nginx:1.14.2
|
||||
|
||||
RUN mkdir -p /usr/share/nginx/html/vre
|
||||
|
||||
COPY website /usr/share/nginx/html/vre
|
222
vre_www/website/account.html
Normal file
222
vre_www/website/account.html
Normal file
@ -0,0 +1,222 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Opaque | Benutzerverwaltung</title>
|
||||
<link href="/vre/images/sfb_1288.png" rel="icon" type="image/png">
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<link rel="stylesheet" href="css/materialize.min.css">
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
<script src="js/vre_manager_rest.js"></script>
|
||||
<script src="js/vre.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
</head>
|
||||
<body class="blue-grey lighten-5">
|
||||
<header>
|
||||
<ul id="main-nav-account-dropdown" class="dropdown-content">
|
||||
<li class="active">
|
||||
<a href="account.html">Benutzerverwaltung</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<a href="javascript:logout();">Abmelden</a>
|
||||
</li>
|
||||
</ul>
|
||||
<nav class="blue-grey darken-2">
|
||||
<div class="container">
|
||||
<div class="nav-wrapper">
|
||||
<a href="portal.html" class="brand-logo">
|
||||
<i class="material-icons hide-on-small-only">cloud</i>
|
||||
Opaque
|
||||
</a>
|
||||
<a href="#" data-target="main-nav-mobile" class="sidenav-trigger">
|
||||
<i class="material-icons">menu</i>
|
||||
</a>
|
||||
<ul id="main-nav" class="right hide-on-med-and-down">
|
||||
<li>
|
||||
<a href="job_manager.html">
|
||||
<i class="material-icons left">work</i>
|
||||
Auftragsübersicht
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="nlp.html">
|
||||
<i class="material-icons left">format_textdirection_l_to_r</i>
|
||||
Linguistische Datenverarbeitung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="ocr.html">
|
||||
<i class="material-icons left">find_in_page</i>
|
||||
Texterkennung
|
||||
</a>
|
||||
</li>
|
||||
<li class="active">
|
||||
<a id="main-nav-account" class="dropdown-trigger" href="#!" data-target="main-nav-account-dropdown">
|
||||
<i class="material-icons left">account_circle</i>
|
||||
Benutzer
|
||||
<i class="material-icons right">arrow_drop_down</i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<ul class="sidenav" id="main-nav-mobile">
|
||||
<li>
|
||||
<a href="job_manager.html">
|
||||
<i class="material-icons left">work</i>
|
||||
Auftragsübersicht
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="nlp.html">
|
||||
<i class="material-icons left">format_textdirection_l_to_r</i>
|
||||
Linguistische Datenverarbeitung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="ocr.html">
|
||||
<i class="material-icons left">find_in_page</i>
|
||||
Texterkennung
|
||||
</a>
|
||||
</li>
|
||||
<li class="active">
|
||||
<a href="account.html">
|
||||
<i class="material-icons">account_circle</i>
|
||||
Benutzer
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:logout();">
|
||||
<i class="material-icons">account_circle</i>
|
||||
Abmelden
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12 m8">
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Benutzerverwaltung</span>
|
||||
<p> </p>
|
||||
<form id="user_form" class="row">
|
||||
<div class="input-field col s12 m6">
|
||||
<i class="material-icons prefix">account_circle</i>
|
||||
<input id="user-form-first-name" type="text">
|
||||
<label for="first-form-first-name">Vorname</label>
|
||||
</div>
|
||||
<div class="input-field col s12 m6">
|
||||
<input id="user-form-last-name" type="text">
|
||||
<label for="first-form-last-name">Nachname</label>
|
||||
</div>
|
||||
<div class="input-field col s12 m6">
|
||||
<i class="material-icons prefix">email</i>
|
||||
<input id="user-form-e-mail" type="text">
|
||||
<label for="first-form-e-mail">E-Mail</label>
|
||||
</div>
|
||||
<div class="input-field col s12 m6">
|
||||
<p style="height: 64px;">
|
||||
<label>
|
||||
<input id="user-form-notifications" type="checkbox" checked="checked">
|
||||
<span>Benachrichtigungen per E-Mail erhalten</span>
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
<div class="input-field col s12 m6">
|
||||
<i class="material-icons prefix">phone</i>
|
||||
<input id="user-form-phone" type="text">
|
||||
<label for="first-form-phone">Phone</label>
|
||||
</div>
|
||||
<div class="input-field col s12 right-align">
|
||||
<a id="user-form-reset" class="waves-effect waves-light btn disabled">Verwerfen</a>
|
||||
<a id="user-form-submit" class="waves-effect waves-light btn disabled">Bestätigen</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Texterkennung</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">find_in_page</i>
|
||||
Textdaten werden aus Scans oder Fotos zur anschließenden
|
||||
Weiterverarbeitung extrahiert.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="ocr.html" class="waves-effect waves-light btn">Zum Dienst</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Linguistische Datenverarbeitung</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">format_textdirection_l_to_r</i>
|
||||
Mit Hilfe datenverarbeitender Methoden werden Textdaten mit
|
||||
weiteren Informationen angereichert.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="nlp.html" class="waves-effect waves-light btn">Zum Dienst</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Auftragsübersicht</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">work</i>
|
||||
Hier wird der aktuelle Status sämtlicher vom Benutzer erstellten
|
||||
Aufträge aufgelistet.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="job_manager.html" class="waves-effect waves-light btn">Öffnen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="page-footer blue-grey darken-2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<p class="grey-text text-lighten-4 left">
|
||||
<a href="https://www.uni-bielefeld.de/">
|
||||
<img src="images/universitaet_bielefeld.png" alt="Logo: Universität Bielefeld" style="height: 72.5px">
|
||||
</a>
|
||||
</p>
|
||||
<p class="grey-text text-lighten-4 right">
|
||||
Gefördert durch die<br>
|
||||
<a href="https://www.dfg.de/">
|
||||
<img src="images/dfg.png" alt="Logo: Deutsche Forschungsgemeinschaft" style="height: 50px;">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-copyright">
|
||||
<div class="container">
|
||||
© 2019 Copyright
|
||||
<a class="grey-text text-lighten-4" href="https://www.uni-bielefeld.de/sfb1288">Universität Bielefeld | SFB 1288</a>
|
||||
<a class="grey-text text-lighten-4 right" href="impressum.html">Impressum</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<script src="js/materialize.min.js"></script>
|
||||
<script>
|
||||
M.AutoInit();
|
||||
</script>
|
||||
<script src="js/account.js"></script>
|
||||
</body>
|
||||
</html>
|
9067
vre_www/website/css/materialize.css
vendored
Normal file
9067
vre_www/website/css/materialize.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
13
vre_www/website/css/materialize.min.css
vendored
Normal file
13
vre_www/website/css/materialize.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
43
vre_www/website/css/style.css
Normal file
43
vre_www/website/css/style.css
Normal file
@ -0,0 +1,43 @@
|
||||
body {
|
||||
display: flex;
|
||||
min-height: 100vh;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
|
||||
.tabs .tab {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.tabs .tab a {
|
||||
color: rgba(0,0,0,0.87);
|
||||
}
|
||||
|
||||
.tabs .tab a:hover {
|
||||
background-color: #eceff1;
|
||||
color: rgba(0,0,0,0.87);
|
||||
}
|
||||
|
||||
.tabs .tab a.active, .tabs .tab a:focus.active {
|
||||
background-color: #fff;
|
||||
color: rgba(0,0,0,0.87);
|
||||
}
|
||||
|
||||
.tabs .indicator {
|
||||
background-color: #455a64;
|
||||
}
|
||||
|
||||
.no-padding {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.overflow-hidden {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.overflow-visible {
|
||||
overflow: visible;
|
||||
}
|
BIN
vre_www/website/images/dfg.png
Normal file
BIN
vre_www/website/images/dfg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
BIN
vre_www/website/images/sfb_1288-alt.png
Normal file
BIN
vre_www/website/images/sfb_1288-alt.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
vre_www/website/images/sfb_1288.png
Normal file
BIN
vre_www/website/images/sfb_1288.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.1 KiB |
BIN
vre_www/website/images/universitaet_bielefeld.png
Normal file
BIN
vre_www/website/images/universitaet_bielefeld.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
BIN
vre_www/website/images/workflow.png
Normal file
BIN
vre_www/website/images/workflow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
1
vre_www/website/images/workflow.xml
Normal file
1
vre_www/website/images/workflow.xml
Normal file
File diff suppressed because one or more lines are too long
54
vre_www/website/index.html
Normal file
54
vre_www/website/index.html
Normal file
@ -0,0 +1,54 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Opaque | Anmeldung</title>
|
||||
<link href="/vre/images/sfb_1288.png" rel="icon" type="image/png">
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<link rel="stylesheet" href="css/materialize.min.css">
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
<script src="js/vre_manager_rest.js"></script>
|
||||
<script src="js/vre.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
</head>
|
||||
<body class="blue-grey lighten-5">
|
||||
<main class="valign-wrapper">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col card s12 m6 offset-m3">
|
||||
<div class="card-content">
|
||||
<span class="card-title"><i class="material-icons left">cloud</i> Opaque</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col card s12 m6 offset-m3">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Anmeldung</span>
|
||||
<form id="login_form" class="row" action="javascript:LoginFormSubmitHandler();">
|
||||
<div class="input-field col s12">
|
||||
<input id="login-form-user" type="text" class="validate" autofocus="autofocus" onfocus="this.select()">
|
||||
<label for="login-form-user">Benutzername</label>
|
||||
</div>
|
||||
<div class="input-field col s12">
|
||||
<input id="login-form-password" type="password" class="validate">
|
||||
<label for="login-form-password">Passwort</label>
|
||||
<span class="helper-text" data-error="Benutzername oder Passwort falsch"></span>
|
||||
</div>
|
||||
<div class="input-field col s12 hide">
|
||||
<input id="login_form_submit" type="submit">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="javascript:LoginFormSubmitHandler();" class="waves-effect waves-light btn">Anmelden</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<script src="js/materialize.min.js"></script>
|
||||
<script>
|
||||
M.AutoInit();
|
||||
</script>
|
||||
<script src="js/index.js"></script>
|
||||
</body>
|
||||
</html>
|
197
vre_www/website/job_manager.html
Normal file
197
vre_www/website/job_manager.html
Normal file
@ -0,0 +1,197 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Opaque | Auftragsverwaltung</title>
|
||||
<link href="/vre/images/sfb_1288.png" rel="icon" type="image/png">
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<link rel="stylesheet" href="css/materialize.min.css">
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
<script src="js/vre_manager_rest.js"></script>
|
||||
<script src="js/vre.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
</head>
|
||||
<body class="blue-grey lighten-5">
|
||||
<header>
|
||||
<ul id="main-nav-account-dropdown" class="dropdown-content">
|
||||
<li>
|
||||
<a href="account.html">Benutzerverwaltung</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<a href="javascript:logout();">Abmelden</a>
|
||||
</li>
|
||||
</ul>
|
||||
<nav class="blue-grey darken-2">
|
||||
<div class="container">
|
||||
<div class="nav-wrapper">
|
||||
<a href="portal.html" class="brand-logo">
|
||||
<i class="material-icons hide-on-small-only">cloud</i>
|
||||
Opaque
|
||||
</a>
|
||||
<a href="#" data-target="main-nav-mobile" class="sidenav-trigger">
|
||||
<i class="material-icons">menu</i>
|
||||
</a>
|
||||
<ul id="main-nav" class="right hide-on-med-and-down">
|
||||
<li class="active">
|
||||
<a href="job_manager.html">
|
||||
<i class="material-icons left">work</i>
|
||||
Auftragsübersicht
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="nlp.html">
|
||||
<i class="material-icons left">format_textdirection_l_to_r</i>
|
||||
Linguistische Datenverarbeitung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="ocr.html">
|
||||
<i class="material-icons left">find_in_page</i>
|
||||
Texterkennung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a id="main-nav-account" class="dropdown-trigger" href="#!" data-target="main-nav-account-dropdown">
|
||||
<i class="material-icons left">account_circle</i>
|
||||
Benutzer
|
||||
<i class="material-icons right">arrow_drop_down</i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<ul class="sidenav" id="main-nav-mobile">
|
||||
<li class="active">
|
||||
<a href="job_manager.html">
|
||||
<i class="material-icons left">work</i>
|
||||
Auftragsübersicht
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="nlp.html">
|
||||
<i class="material-icons left">format_textdirection_l_to_r</i>
|
||||
Linguistische Datenverarbeitung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="ocr.html">
|
||||
<i class="material-icons left">find_in_page</i>
|
||||
Texterkennung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="account.html">
|
||||
<i class="material-icons">account_circle</i>
|
||||
Benutzer
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:logout();">
|
||||
<i class="material-icons">account_circle</i>
|
||||
Abmelden
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12 m8">
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Auftragsübersicht</span>
|
||||
<p>
|
||||
Die Auftragsübersicht bietet eine Übersicht über Ihre
|
||||
Aufträge. Nach erfolgreichem Abschluss können die Ergebnisse
|
||||
hier heruntergeladen werden.
|
||||
</p>
|
||||
<p> </p>
|
||||
<div class="card-panel no-padding z-depth-0">
|
||||
<ul class="tabs">
|
||||
<li class="tab col s3">
|
||||
<a data-job-filter="" class="active">Alle</a>
|
||||
</li>
|
||||
<li class="tab col s3">
|
||||
<a data-job-filter="finished">Abgeschlossen</a>
|
||||
</li>
|
||||
<li class="tab col s3">
|
||||
<a data-job-filter="running">Laufend</a>
|
||||
</li>
|
||||
<li class="tab col s3">
|
||||
<a data-job-filter="queued">Wartend</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<ul id="jobs-collapsible" class="collapsible expandable z-depth-0"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Linguistische Datenverarbeitung</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">format_textdirection_l_to_r</i>
|
||||
Mit Hilfe datenverarbeitender Methoden werden Textdaten mit
|
||||
weiteren Informationen angereichert.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="nlp.html" class="waves-effect waves-light btn">Zum Dienst</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Texterkennung</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">find_in_page</i>
|
||||
Textdaten werden aus Scans oder Fotos zur anschließenden
|
||||
Weiterverarbeitung extrahiert.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="ocr.html" class="waves-effect waves-light btn">Zum Dienst</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="page-footer blue-grey darken-2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<p class="grey-text text-lighten-4 left">
|
||||
<a href="https://www.uni-bielefeld.de/">
|
||||
<img src="images/universitaet_bielefeld.png" alt="Logo: Universität Bielefeld" style="height: 72.5px">
|
||||
</a>
|
||||
</p>
|
||||
<p class="grey-text text-lighten-4 right">
|
||||
Gefördert durch die<br>
|
||||
<a href="https://www.dfg.de/">
|
||||
<img src="images/dfg.png" alt="Logo: Deutsche Forschungsgemeinschaft" style="height: 50px;">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-copyright">
|
||||
<div class="container">
|
||||
© 2019 Copyright
|
||||
<a class="grey-text text-lighten-4" href="https://www.uni-bielefeld.de/sfb1288">Universität Bielefeld | SFB 1288</a>
|
||||
<a class="grey-text text-lighten-4 right" href="impressum.html">Impressum</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<script src="js/materialize.min.js"></script>
|
||||
<script>
|
||||
M.AutoInit();
|
||||
</script>
|
||||
<script src="js/job_manager.js"></script>
|
||||
</body>
|
||||
</html>
|
110
vre_www/website/js/account.js
Normal file
110
vre_www/website/js/account.js
Normal file
@ -0,0 +1,110 @@
|
||||
function setUserCallback() {
|
||||
userFormEMailElement.value = user["e-mail"];
|
||||
userFormFirstNameElement.value = user["firstName"];
|
||||
userFormLastNameElement.value = user["lastName"];
|
||||
userFormNotificationsElement.checked = user["notifications"];
|
||||
userFormPhoneElement.value = user["phone"];
|
||||
M.updateTextFields();
|
||||
|
||||
userFormEMailElement.addEventListener("input", event => {
|
||||
eMailChanged = (user["e-mail"] != userFormEMailElement.value) ? true : false;
|
||||
evaluateUserForm();
|
||||
});
|
||||
userFormFirstNameElement.addEventListener("input", event => {
|
||||
firstNameChanged = (user["firstName"] != userFormFirstNameElement.value) ? true : false;
|
||||
evaluateUserForm();
|
||||
});
|
||||
userFormLastNameElement.addEventListener("input", event => {
|
||||
lastNameChanged = (user["lastName"] != userFormLastNameElement.value) ? true : false;
|
||||
evaluateUserForm();
|
||||
});
|
||||
userFormNotificationsElement.addEventListener("change", event => {
|
||||
notificationsChanged = (user["notifications"] != userFormNotificationsElement.checked) ? true : false;
|
||||
evaluateUserForm();
|
||||
});
|
||||
userFormPhoneElement.addEventListener("input", event => {
|
||||
phoneChanged = (user["phone"] != userFormPhoneElement.value) ? true : false;
|
||||
evaluateUserForm();
|
||||
});
|
||||
userFormResetElement.addEventListener("click", event => {
|
||||
eMailChanged = false;
|
||||
firstNameChanged = false;
|
||||
lastNameChanged = false;
|
||||
notificationsChanged = false;
|
||||
phoneChanged = false;
|
||||
userFormEMailElement.value = user["e-mail"];
|
||||
userFormFirstNameElement.value = user["firstName"];
|
||||
userFormLastNameElement.value = user["lastName"];
|
||||
userFormNotificationsElement.checked = user["notifications"];
|
||||
userFormPhoneElement.value = user["phone"];
|
||||
evaluateUserForm();
|
||||
});
|
||||
userFormSubmitElement.addEventListener("click", event => {
|
||||
if (eMailChanged) {
|
||||
user["e-mail"] = userFormEMailElement.value;
|
||||
eMailChanged = false;
|
||||
}
|
||||
if (firstNameChanged) {
|
||||
user["firstName"] = userFormFirstNameElement.value;
|
||||
firstNameChanged = false;
|
||||
}
|
||||
if (lastNameChanged) {
|
||||
user["lastName"] = userFormLastNameElement.value;
|
||||
lastNameChanged = false;
|
||||
}
|
||||
if (notificationsChanged) {
|
||||
user["notifications"] = userFormNotificationsElement.checked;
|
||||
notificationsChanged = false;
|
||||
}
|
||||
if (phoneChanged) {
|
||||
user["phone"] = userFormPhoneElement.value;
|
||||
phoneChanged = false;
|
||||
}
|
||||
localStorage.setItem("user", JSON.stringify(user));
|
||||
M.toast({html: "Benutzerdaten wurden aktualisiert."});
|
||||
evaluateUserForm();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function evaluateUserForm() {
|
||||
var somethingChanged;
|
||||
|
||||
somethingChanged = eMailChanged || firstNameChanged || lastNameChanged || notificationsChanged || phoneChanged;
|
||||
|
||||
if (somethingChanged) {
|
||||
userFormResetElement.classList.remove("disabled");
|
||||
userFormSubmitElement.classList.remove("disabled");
|
||||
} else {
|
||||
userFormResetElement.classList.add("disabled");
|
||||
userFormSubmitElement.classList.add("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var eMailChanged;
|
||||
var firstNameChanged;
|
||||
var lastNameChanged;
|
||||
var notificationsChanged;
|
||||
var phoneChanged;
|
||||
var userFormEMailElement;
|
||||
var userFormFirstNameElement;
|
||||
var userFormLastNameElement;
|
||||
var userFormNotificationsElement;
|
||||
var userFormPhoneElement;
|
||||
var userFormResetElement;
|
||||
var userFormSubmitElement;
|
||||
|
||||
|
||||
eMailChanged = false;
|
||||
firstNameChanged = false;
|
||||
lastNameChanged = false;
|
||||
notificationsChanged = false;
|
||||
phoneChanged = false;
|
||||
userFormFirstNameElement = document.getElementById("user-form-first-name");
|
||||
userFormLastNameElement = document.getElementById("user-form-last-name");
|
||||
userFormEMailElement = document.getElementById("user-form-e-mail");
|
||||
userFormNotificationsElement = document.getElementById("user-form-notifications");
|
||||
userFormPhoneElement = document.getElementById("user-form-phone");
|
||||
userFormResetElement = document.getElementById("user-form-reset");
|
||||
userFormSubmitElement = document.getElementById("user-form-submit");
|
17
vre_www/website/js/index.js
Normal file
17
vre_www/website/js/index.js
Normal file
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Process the submit event from the login form.
|
||||
*/
|
||||
function LoginFormSubmitHandler() {
|
||||
var loginFormPasswordElement;
|
||||
var loginFormUserElement;
|
||||
|
||||
loginFormPasswordElement = document.getElementById("login-form-password");
|
||||
loginFormUserElement = document.getElementById("login-form-user");
|
||||
|
||||
try {
|
||||
login(loginFormPasswordElement.value, loginFormUserElement.value);
|
||||
} catch(e) {
|
||||
loginFormPasswordElement.classList.add("invalid");
|
||||
loginFormUserElement.classList.add("invalid");
|
||||
}
|
||||
}
|
43
vre_www/website/js/job_form_handler.js
Normal file
43
vre_www/website/js/job_form_handler.js
Normal file
@ -0,0 +1,43 @@
|
||||
function jobFormChangeHandler() {
|
||||
if (jobFormFileElement.files.length === 0 || jobFormLanguageElement.value === "" || jobFormNameElement.value === "") {
|
||||
jobFormSubmitElement.classList.add("disabled");
|
||||
} else {
|
||||
jobFormSubmitElement.classList.remove("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function jobFormSubmitHandler() {
|
||||
createJob(jobFormFileElement.files[0], jobFormLanguageElement.value, jobFormNameElement.value, jobFormServiceElement.value, user["id"]);
|
||||
}
|
||||
|
||||
|
||||
var jobFormElement;
|
||||
var jobFormFileElement;
|
||||
var jobFormLanguageElement;
|
||||
var jobFormNameElement;
|
||||
var jobFormServiceElement;
|
||||
var jobFormSubmitElement;
|
||||
|
||||
|
||||
jobFormElement = document.getElementById("job_form");
|
||||
jobFormFileElement = document.getElementById("job_form_file");
|
||||
jobFormLanguageElement = document.getElementById("job_form_language");
|
||||
jobFormNameElement = document.getElementById("job_form_name");
|
||||
jobFormServiceElement = document.getElementById("job_form_service");
|
||||
jobFormSubmitElement = document.getElementById("job_form_submit");
|
||||
|
||||
|
||||
jobFormFileElement.addEventListener("change", jobFormChangeHandler);
|
||||
jobFormLanguageElement.addEventListener("change", jobFormChangeHandler);
|
||||
jobFormNameElement.addEventListener("input", jobFormChangeHandler);
|
||||
|
||||
M.Modal.init(
|
||||
document.getElementById("create_job"),
|
||||
{
|
||||
"onCloseEnd": modal => {
|
||||
jobFormElement.reset();
|
||||
M.updateTextFields();
|
||||
}
|
||||
}
|
||||
);
|
172
vre_www/website/js/job_manager.js
Normal file
172
vre_www/website/js/job_manager.js
Normal file
@ -0,0 +1,172 @@
|
||||
var JOBLANGUAGES = {
|
||||
"nlp": {
|
||||
"de": "Deutsch",
|
||||
"en": "Englisch",
|
||||
"fr": "Französisch",
|
||||
"pt": "Portugisisch",
|
||||
"es": "Spanisch"
|
||||
},
|
||||
"ocr": {
|
||||
"deu": "Deutsch",
|
||||
"deu_frak": "Deutsch (Fraktur)",
|
||||
"eng": "Englisch",
|
||||
"fra": "Französisch",
|
||||
"por": "Portugisisch",
|
||||
"spa": "Spanisch"
|
||||
}
|
||||
};
|
||||
var JOBSERVICEICONS = {
|
||||
"nlp": "format_textdirection_l_to_r",
|
||||
"ocr": "find_in_page"
|
||||
};
|
||||
var JOBSTATUSCOLORS = {
|
||||
"failed": "pink",
|
||||
"finished": "teal",
|
||||
"queued": "amber",
|
||||
"running": "indigo"
|
||||
};
|
||||
var JOBSTATUSNAMES = {
|
||||
"failed": 'Fehlgeschlagen',
|
||||
"finished": 'Abgeschlossen',
|
||||
"queued": 'Wartend',
|
||||
"running": 'Laufend'
|
||||
}
|
||||
var JOBSTATUSTEXTS = {
|
||||
'failed': 'Es ist ein Fehler bei der Bearbeitung des Auftrages aufgetreten. \
|
||||
Für weitere Informationen wenden Sie sich mit dem \
|
||||
Auftragskennzeichen an den Seitenbetreiber.',
|
||||
'finished': 'Der Auftrag ist abgeschlossen, die Ergebnisse können nun \
|
||||
heruntergeladen werden. Die Quelldatei bleibt verfügbar und \
|
||||
kann jederzeit abgerufen werden.',
|
||||
'queued': 'Der Auftrag befindet sich in der Warteschlange und wird vom \
|
||||
System bearbeitet, sobald Rechenkapazität verfügbar ist.',
|
||||
'running': 'Dieser Auftrag wird gerade bearbeitet, sobald der Vorgang \
|
||||
abgeschlossen wurde, können die Ergebnisse hier heruntergeladen \
|
||||
werden.'
|
||||
}
|
||||
|
||||
|
||||
var jobsCollapsibleElement;
|
||||
var jobStatusFilter;
|
||||
|
||||
jobsCollapsibleElement = document.getElementById("jobs-collapsible");
|
||||
jobStatusFilter = '';
|
||||
|
||||
|
||||
M.Collapsible.init(
|
||||
jobsCollapsibleElement,
|
||||
{accordion: false}
|
||||
);
|
||||
document.querySelectorAll('[data-job-filter]').forEach(jobFilterElement => {
|
||||
jobFilterElement.addEventListener("click", event => {
|
||||
jobStatusFilter = event.currentTarget.getAttribute("data-job-filter");
|
||||
jobListManager();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
function jobListManager() {
|
||||
jobs.forEach(job => {
|
||||
var jobElement;
|
||||
|
||||
jobElement = document.getElementById(job["id"]);
|
||||
// Check whether an element with id = job['id'] is found
|
||||
if (jobElement) {
|
||||
var jobResultElement;
|
||||
var jobStatusElement;
|
||||
var jobStatusTextElement;
|
||||
|
||||
jobResultElement = jobElement.querySelector('.job-result');
|
||||
jobStatusElement = jobElement.querySelector('.job-status');
|
||||
jobStatusTextElement = jobElement.querySelector('.job-status-text');
|
||||
|
||||
// Check whether the job status changed since it got printed
|
||||
if (jobStatusElement.innerHTML != JOBSTATUSNAMES[job["status"]]) {
|
||||
// Update the job status element (label and color)
|
||||
jobStatusElement.innerHTML = JOBSTATUSNAMES[job["status"]];
|
||||
jobStatusElement.classList.remove("pink", "teal", "amber", "indigo");
|
||||
jobStatusElement.classList.add(JOBSTATUSCOLORS[job["status"]]);
|
||||
// Update the job status text element
|
||||
jobStatusTextElement.innerHTML = JOBSTATUSTEXTS[job["status"]];
|
||||
// Check whether the new job status is 'finished'
|
||||
if (job["status"] === "finished") {
|
||||
// Unhide the jobs result element
|
||||
jobResultElement.classList.remove("hide");
|
||||
}
|
||||
}
|
||||
// If the job status doesn't match the current filter, remove it
|
||||
//if (jobStatusFilter != "" && job["status"] != jobStatusFilter) jobElement.remove();
|
||||
// If the job status doesn't match the current filter, hide it
|
||||
if (jobStatusFilter != "" && job["status"] != jobStatusFilter) {
|
||||
jobElement.classList.add('hide');
|
||||
} else {
|
||||
jobElement.classList.remove('hide');
|
||||
}
|
||||
} else {
|
||||
// If the job status doesn't match the current filter, skip it
|
||||
//if (jobStatusFilter != "" && job["status"] != jobStatusFilter) return;
|
||||
jobElement = document.createElement("li");
|
||||
jobElement.setAttribute("id", job["id"]);
|
||||
// If the job status doesn't match the current filter, skip it
|
||||
if (jobStatusFilter != "" && job["status"] != jobStatusFilter) {
|
||||
jobElement.classList.add('hide');
|
||||
} else {
|
||||
jobElement.classList.remove('hide');
|
||||
}
|
||||
jobElement.innerHTML =
|
||||
'<div class="collapsible-header">'
|
||||
+ '<i class="material-icons dropdown-indicator">arrow_drop_down</i>'
|
||||
+ '<i class="material-icons">'
|
||||
+ JOBSERVICEICONS[job["service"]]
|
||||
+ '</i>'
|
||||
+ job["name"]
|
||||
+ '<span class="job-status new badge ' + JOBSTATUSCOLORS[job["status"]] + '" data-badge-caption="">'
|
||||
+ JOBSTATUSNAMES[job["status"]]
|
||||
+ '</span>'
|
||||
+ '</div>'
|
||||
+ '<div class="collapsible-body">'
|
||||
+ '<p class="job-status-text">' + JOBSTATUSTEXTS[job["status"]] + '</p>'
|
||||
+ '<p> </p>'
|
||||
+ '<p class="overflow-hidden">'
|
||||
+ '<i class="material-icons blue-grey-text text-darken-2 left">bookmark</i>'
|
||||
+ 'Auftragskennzeichen: '
|
||||
+ job["id"]
|
||||
+ '</p>'
|
||||
+ '<p class="overflow-hidden">'
|
||||
+ '<i class="material-icons blue-grey-text text-darken-2 left">insert_drive_file</i>'
|
||||
+ 'Datei: '
|
||||
+ '<a href="../vre_files/jobs/' + job["id"] + '/' + job["file"] + '">'
|
||||
+ job["file"]
|
||||
+ '</a>'
|
||||
+ '</p>'
|
||||
+ '<p class="overflow-hidden">'
|
||||
+ '<i class="material-icons blue-grey-text text-darken-2 left">language</i>'
|
||||
+ 'Sprache: '
|
||||
+ JOBLANGUAGES[job["service"]][job["language"]]
|
||||
+ '</p>'
|
||||
+ '<p class="job-result' + (job['status'] != 'finished' ? ' hide' : '') + ' overflow-hidden">'
|
||||
+ '<i class="material-icons blue-grey-text text-darken-2 left">archive</i>'
|
||||
+ 'Ergebnisse: '
|
||||
+ '<a href="../vre_files/jobs/' + job["id"] + '/' + job["file"].split(".").slice(0, -1).join(".") + '_-_' + job["service"] + '.zip">'
|
||||
+ 'Download'
|
||||
+ '</a>'
|
||||
+ '</p>'
|
||||
+ '</div>';
|
||||
|
||||
jobElement.querySelector('.collapsible-header').addEventListener("click", event => {
|
||||
var dropdownIndicatorElement;
|
||||
|
||||
dropdownIndicatorElement = event.currentTarget.querySelector('.dropdown-indicator');
|
||||
if (dropdownIndicatorElement.innerHTML === "arrow_drop_down") {
|
||||
dropdownIndicatorElement.innerHTML = "arrow_drop_up";
|
||||
} else {
|
||||
dropdownIndicatorElement.innerHTML = "arrow_drop_down";
|
||||
}
|
||||
});
|
||||
jobsCollapsibleElement.appendChild(jobElement);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
setJobsCallback = jobListManager;
|
12374
vre_www/website/js/materialize.js
vendored
Normal file
12374
vre_www/website/js/materialize.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6
vre_www/website/js/materialize.min.js
vendored
Normal file
6
vre_www/website/js/materialize.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
154
vre_www/website/js/vre.js
Normal file
154
vre_www/website/js/vre.js
Normal file
@ -0,0 +1,154 @@
|
||||
var JOBSPOLLINTERVALL = 1000;
|
||||
var USERS = {
|
||||
"testbenutzer": {
|
||||
"e-mail": "t.benutzer@uni-bielefeld.de",
|
||||
"firstName": "Test",
|
||||
"id": "testbenutzer",
|
||||
"lastName": "Benutzer",
|
||||
"notifications": true,
|
||||
"password": "passwort",
|
||||
"phone": "+49 521 106-XXXXX"
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// The job list of the current user
|
||||
var jobs;
|
||||
// The current user
|
||||
var user;
|
||||
|
||||
|
||||
/**
|
||||
* Login a user and redirect the visitor to the portal page.
|
||||
* @param {string} password - The password to use for login.
|
||||
* @param {string} user - The user to use for login.
|
||||
*/
|
||||
function login(password, user) {
|
||||
// Check if the user exists
|
||||
if (USERS[user]) {
|
||||
// Check if the password is correct
|
||||
if (USERS[user]["password"] === password) {
|
||||
// Save the user data to the local storage
|
||||
localStorage.setItem("user", JSON.stringify(USERS[user]));
|
||||
// Redirect the visitor to the portal page
|
||||
window.location = "/vre/portal.html";
|
||||
return;
|
||||
}
|
||||
}
|
||||
// The function only ends here, when the user doesn't exists or when the
|
||||
// password was wrong, in both cases it should throw an exception
|
||||
throw "User doesn't exist or password was wrong!";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logout the current user and redirect the visitor to the login page.
|
||||
*/
|
||||
function logout() {
|
||||
// delete all data from the local storage
|
||||
localStorage.clear();
|
||||
// redirect to the login page
|
||||
window.location = "/vre/";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The main function, which is executed on each page after it's completly
|
||||
* loaded.
|
||||
*/
|
||||
function main() {
|
||||
M.Dropdown.init(
|
||||
document.getElementById("main-nav-account"),
|
||||
{"constrainWidth": false, "coverTrigger": false}
|
||||
);
|
||||
|
||||
// Indicates whether the current page is the login page
|
||||
var isLoginPage;
|
||||
// Indicates whether the current page is a service page (like ocr or nlp)
|
||||
var isServicePage;
|
||||
|
||||
|
||||
isLoginPage = window.location.pathname === "/vre/" || window.location.pathname === "/vre/index.html";
|
||||
isServicePage = window.location.pathname === "/vre/nlp.html" || window.location.pathname === "/vre/ocr.html";
|
||||
|
||||
// Check if the visitor is logged in, by checking if the local storage
|
||||
// contains a user
|
||||
if (localStorage.getItem("user")) {
|
||||
// Redirect to the portal page if the current page is the login page
|
||||
if (isLoginPage) window.location = "portal.html";
|
||||
// Load user from the local storage
|
||||
user = JSON.parse(localStorage.getItem("user"));
|
||||
// If a function named setUserCallback exists, call it
|
||||
if (typeof(setUserCallback) === "function") setUserCallback();
|
||||
} else {
|
||||
// Redirect to the login page if the current page isn't the login page
|
||||
if (!isLoginPage) window.location = "index.html";
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the local storage contains a copy of the users job list
|
||||
if (localStorage.getItem("jobs")) {
|
||||
// Load the job list from the local storage
|
||||
jobs = JSON.parse(localStorage.getItem("jobs"));
|
||||
// If a function named setJobsCallback exists, call it
|
||||
if (typeof(setJobsCallback) === "function") setJobsCallback();
|
||||
} else {
|
||||
// Load the job list from the vre server
|
||||
getJobs({"user": user["id"]}, function(newJobs) {
|
||||
jobs = newJobs;
|
||||
// If a function named setJobsCallback exists, call it
|
||||
if (typeof(setJobsCallback) === "function") setJobsCallback();
|
||||
});
|
||||
}
|
||||
|
||||
// Set a continous poll for the job list
|
||||
setInterval(getJobs, JOBSPOLLINTERVALL, {"user": user["id"]}, updateJobs);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Updates the job list in the local storage and the contents of the global
|
||||
* job list variable. It also informs the visitor about job status changes.
|
||||
* @param {Object[]} newJobs - The new job list.
|
||||
*/
|
||||
function updateJobs(newJobs) {
|
||||
var i;
|
||||
// Indicates whether the new job list differs from the old one
|
||||
var hasJobsChanged;
|
||||
// The new job list as JSON string
|
||||
var newJobsAsJSONString;
|
||||
|
||||
newJobsAsJSONString = JSON.stringify(newJobs);
|
||||
hasJobsChanged = localStorage.getItem("jobs") != newJobsAsJSONString;
|
||||
|
||||
if (hasJobsChanged) {
|
||||
// Iterate over the old job list
|
||||
for (i = 0; i < jobs.length; i++) {
|
||||
// Check whether the status of the currently iterated job changed
|
||||
if (jobs[i]["status"] != newJobs[i]["status"]) {
|
||||
// Inform the visitor with a toast message about the new status
|
||||
switch (newJobs[i]["status"]) {
|
||||
case "failed":
|
||||
M.toast({html: "Auftrag '" + jobs[i]["name"] + "' is fehlgeschlagen."});
|
||||
break;
|
||||
case "finished":
|
||||
M.toast({html: "Auftrag '" + jobs[i]["name"] + "' wurde abgeschlossen."});
|
||||
break;
|
||||
case "running":
|
||||
M.toast({html: "Auftrag '" + jobs[i]["name"] + "' wird bearbeitet."});
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
// Save the new job list to the local storage
|
||||
localStorage.setItem("jobs", newJobsAsJSONString);
|
||||
// Replace the global job list variable with the new job list
|
||||
jobs = newJobs;
|
||||
// If a function named setJobsCallback exists, call it
|
||||
if (typeof(setJobsCallback) === "function") setJobsCallback();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
window.onload = main;
|
180
vre_www/website/js/vre_manager_rest.js
Normal file
180
vre_www/website/js/vre_manager_rest.js
Normal file
@ -0,0 +1,180 @@
|
||||
var VREMANAGER = "http://" + window.location.hostname + ":5000";
|
||||
|
||||
|
||||
/**
|
||||
* Sends an asynchronous HTTP request to the vre manager in order to create a
|
||||
* new job.
|
||||
* @param {File} file - The file to process with the job.
|
||||
* @param {string} language - The language of the file contents.
|
||||
* @param {string} name - A name for the job, this doesn't have to be unique.
|
||||
* @param {string} service - The service this job belongs to.
|
||||
* @param {string} user - The user this job belongs to.
|
||||
* @param {function} [callback] - A function, that is called after the HTTP
|
||||
* request finished.
|
||||
*/
|
||||
function createJob(file, language, name, service, user, callback = console.log) {
|
||||
var formData;
|
||||
var oReq;
|
||||
var query;
|
||||
|
||||
formData = new FormData();
|
||||
formData.append("file", file);
|
||||
|
||||
oReq = new XMLHttpRequest();
|
||||
oReq.addEventListener("loadend", function(oEvent) {
|
||||
if (this.status === 201) {
|
||||
M.toast({html: "Auftrag '" + name + "' wurde erstellt."});
|
||||
callback(JSON.parse(this.responseText));
|
||||
} else {
|
||||
if (this.status === 415) {
|
||||
M.toast({html: "Auftrag '" + name + "' konnte nicht erstellt werden.<br>(Unerwarteter Dateityp)"});
|
||||
} else {
|
||||
M.toast({html: "Auftrag '" + name + "' konnte nicht erstellt werden.<br>(Fehlercode: " + this.status + ")"});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
query = "?language=" + language + "&name=" + name + "&service=" + service + "&user=" + user;
|
||||
|
||||
oReq.open("POST", VREMANAGER + "/vre/jobs" + query);
|
||||
oReq.send(formData);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sends an asynchronous HTTP request to the vre manager in order to delete an
|
||||
* existing job.
|
||||
* @param {string} id - The id of the job to be deleted.
|
||||
* @param {function} [callback] - A function, that is called after the HTTP
|
||||
* request finished.
|
||||
*/
|
||||
function deleteJob(id, callback = console.log) {
|
||||
var oReq;
|
||||
|
||||
oReq = new XMLHttpRequest();
|
||||
oReq.addEventListener("loadend", function(oEvent) {
|
||||
if (this.status === 204) {
|
||||
M.toast({html: "Auftrag '" + id + "' wurde gelöscht."});
|
||||
callback();
|
||||
} else {
|
||||
M.toast({html: "Auftrag '" + id + "' konnte nicht gelöscht werden.<br>(Fehlercode: " + this.status + ")"});
|
||||
}
|
||||
});
|
||||
|
||||
oReq.open("DELETE", VREMANAGER + "/vre/jobs/" + id);
|
||||
oReq.send();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sends an asynchronous HTTP request to the vre manager in order to get all
|
||||
* informations about a specific and existing job.
|
||||
* @param {string} id - The id of the job to get the information from.
|
||||
* @param {function} [callback] - A function, that is called after the HTTP
|
||||
* request finished.
|
||||
*/
|
||||
function getJob(id, callback = console.log) {
|
||||
var oReq;
|
||||
|
||||
oReq = new XMLHttpRequest();
|
||||
oReq.addEventListener("loadend", function(oEvent) {
|
||||
if (this.status === 200) {
|
||||
callback(JSON.parse(this.responseText));
|
||||
}
|
||||
});
|
||||
|
||||
oReq.open("GET", VREMANAGER + "/vre/jobs/" + id);
|
||||
oReq.send();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sends an asynchronous HTTP request to the vre manager in order to get a
|
||||
* (filtered) list of all jobs.
|
||||
* @param {object} [filters=null] - An object containing filters. E.g.
|
||||
* {'service': 'nlp', 'status': 'finished'}
|
||||
* @param {function} [callback] - A function, that is called after the HTTP
|
||||
* request finished.
|
||||
*/
|
||||
function getJobs(filters = null, callback = console.log) {
|
||||
var oReq;
|
||||
var query;
|
||||
|
||||
oReq = new XMLHttpRequest();
|
||||
oReq.addEventListener("loadend", function(oEvent) {
|
||||
if (this.status === 200) {
|
||||
callback(JSON.parse(this.responseText));
|
||||
}
|
||||
});
|
||||
|
||||
query = ""
|
||||
if (filters) {
|
||||
if (filters["name"]) {
|
||||
query += (query === "") ? "?" : "&";
|
||||
query += "name=" + filters["name"];
|
||||
}
|
||||
if (filters["service"]) {
|
||||
query += (query === "") ? "?" : "&";
|
||||
query += "service=" + filters["service"];
|
||||
}
|
||||
if (filters["status"]) {
|
||||
query += (query === "") ? "?" : "&";
|
||||
query += "status=" + filters["status"];
|
||||
}
|
||||
if (filters["user"]) {
|
||||
query += (query === "") ? "?" : "&";
|
||||
query += "user=" + filters["user"];
|
||||
}
|
||||
}
|
||||
|
||||
oReq.open("GET", VREMANAGER + "/vre/jobs" + query);
|
||||
oReq.send();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sends an asynchronous HTTP request to the vre manager in order to update the
|
||||
* values of a specific and existing job.
|
||||
* @param {string} id - The id of the job to update.
|
||||
* @param {object} [newValues=null] - An object containing the new values. E.g.
|
||||
* {'status': 'finished'}
|
||||
* @param {function} [callback] - A function, that is called after the HTTP
|
||||
* request finished.
|
||||
*/
|
||||
function updateJob(id, newValues = null, callback = console.log) {
|
||||
var oReq;
|
||||
var query;
|
||||
|
||||
oReq = new XMLHttpRequest();
|
||||
oReq.addEventListener("loadend", function(oEvent) {
|
||||
if (this.status === 200) {
|
||||
M.toast({html: "Auftrag '" + id + "' wurde aktualisiert."});
|
||||
callback(JSON.parse(this.responseText));
|
||||
} else {
|
||||
M.toast({html: "Auftrag '" + id + "' konnte nicht aktualisiert werden.<br>(Fehlercode: " + this.status + ")"});
|
||||
}
|
||||
});
|
||||
|
||||
query = ""
|
||||
if (newValues) {
|
||||
if (newValues["name"]) {
|
||||
query += (query === "") ? "?" : "&";
|
||||
query += "name=" + newValues["name"];
|
||||
}
|
||||
if (newValues["language"]) {
|
||||
query += (query === "") ? "?" : "&";
|
||||
query += "language=" + newValues["language"];
|
||||
}
|
||||
if (newValues["report"]) {
|
||||
query += (query === "") ? "?" : "&";
|
||||
query += "report=" + newValues["report"];
|
||||
}
|
||||
if (newValues["status"]) {
|
||||
query += (query === "") ? "?" : "&";
|
||||
query += "status=" + newValues["status"];
|
||||
}
|
||||
}
|
||||
|
||||
oReq.open("PUT", VREMANAGER + "/vre/jobs/" + id + query);
|
||||
oReq.send();
|
||||
}
|
295
vre_www/website/nlp.html
Normal file
295
vre_www/website/nlp.html
Normal file
@ -0,0 +1,295 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Opaque | Linguistische Datenverarbeitung</title>
|
||||
<link href="/vre/images/sfb_1288.png" rel="icon" type="image/png">
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<link rel="stylesheet" href="css/materialize.min.css">
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
<script src="js/vre_manager_rest.js"></script>
|
||||
<script src="js/vre.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
</head>
|
||||
<body class="blue-grey lighten-5">
|
||||
<header>
|
||||
<ul id="main-nav-account-dropdown" class="dropdown-content">
|
||||
<li>
|
||||
<a href="account.html">Benutzerverwaltung</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<a href="javascript:logout();">Abmelden</a>
|
||||
</li>
|
||||
</ul>
|
||||
<nav class="blue-grey darken-2">
|
||||
<div class="container">
|
||||
<div class="nav-wrapper">
|
||||
<a href="portal.html" class="brand-logo">
|
||||
<i class="material-icons hide-on-small-only">cloud</i>
|
||||
Opaque
|
||||
</a>
|
||||
<a href="#" data-target="main-nav-mobile" class="sidenav-trigger">
|
||||
<i class="material-icons">menu</i>
|
||||
</a>
|
||||
<ul id="main-nav" class="right hide-on-med-and-down">
|
||||
<li>
|
||||
<a href="job_manager.html">
|
||||
<i class="material-icons left">work</i>
|
||||
Auftragsübersicht
|
||||
</a>
|
||||
</li>
|
||||
<li class="active">
|
||||
<a href="nlp.html">
|
||||
<i class="material-icons left">format_textdirection_l_to_r</i>
|
||||
Linguistische Datenverarbeitung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="ocr.html">
|
||||
<i class="material-icons left">find_in_page</i>
|
||||
Texterkennung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a id="main-nav-account" class="dropdown-trigger" href="#!" data-target="main-nav-account-dropdown">
|
||||
<i class="material-icons left">account_circle</i>
|
||||
Benutzer
|
||||
<i class="material-icons right">arrow_drop_down</i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<ul class="sidenav" id="main-nav-mobile">
|
||||
<li>
|
||||
<a href="job_manager.html">
|
||||
<i class="material-icons left">work</i>
|
||||
Auftragsübersicht
|
||||
</a>
|
||||
</li>
|
||||
<li class="active">
|
||||
<a href="nlp.html">
|
||||
<i class="material-icons left">format_textdirection_l_to_r</i>
|
||||
Linguistische Datenverarbeitung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="ocr.html">
|
||||
<i class="material-icons left">find_in_page</i>
|
||||
Texterkennung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="account.html">
|
||||
<i class="material-icons">account_circle</i>
|
||||
Benutzer
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:logout();">
|
||||
<i class="material-icons">account_circle</i>
|
||||
Abmelden
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12 m8">
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Linguistische Datenverarbeitung</span>
|
||||
<p>
|
||||
Mit Hilfe computergestützter linguistischer
|
||||
Datenverarbeitungsmethoden können Textdateien mit weiteren
|
||||
Informationen angereichert werden. Auf dieser Plattform werden
|
||||
derzeit die im folgenden aufgeführten
|
||||
Textverarbeitungsroutinen in automatisierter Form zur
|
||||
Verfügung gestellt.
|
||||
</p>
|
||||
<div class="row">
|
||||
<div class="col s12 m6">
|
||||
<div class="card z-depth-0">
|
||||
<div class="card-content">
|
||||
<span class="card-title">
|
||||
<i class="material-icons blue-grey-text text-darken-2 left">layers</i>
|
||||
Tokenisierung
|
||||
</span>
|
||||
<p>
|
||||
Aufteilung eines Textes in Sätze und Wörter. Dies
|
||||
ist zur weiteren Verarbeitung notwendig.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6">
|
||||
<div class="card z-depth-0">
|
||||
<div class="card-content">
|
||||
<span class="card-title">
|
||||
<i class="material-icons blue-grey-text text-darken-2 left">layers</i>
|
||||
Lemmatisierung
|
||||
</span>
|
||||
<p>
|
||||
Reduktion der Flexionsformen eines Wortes auf dessen
|
||||
Grundform.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6">
|
||||
<div class="card z-depth-0">
|
||||
<div class="card-content">
|
||||
<span class="card-title">
|
||||
<i class="material-icons blue-grey-text text-darken-2 left">layers</i>
|
||||
Part-of-speech-Tagging
|
||||
</span>
|
||||
<p>
|
||||
Kontext- und definitionsbezogene Zuordnung von Wörtern
|
||||
und Satzzeichen zu Wortarten.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6">
|
||||
<div class="card z-depth-0">
|
||||
<div class="card-content">
|
||||
<span class="card-title">
|
||||
<i class="material-icons blue-grey-text text-darken-2 left">layers</i>
|
||||
Eigennamenerkennung
|
||||
</span>
|
||||
<p>
|
||||
Identifikation von Wörtern, die eine Entität
|
||||
beschreiben, wie Firmen- und Personennamen.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p>
|
||||
Die Ausgabe erfolgt in Form einer <i>verticalized text</i>
|
||||
Datei (Dateiendung: .vrt). In diesem Format kann der Text
|
||||
einfach in Auswertungsprogramme, wie zum Beispiel der <a href="http://cwb.sourceforge.net/">IMS Open Corpus Workbench</a>,
|
||||
eingefügt werden.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Auftrag erstellen</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">playlist_add</i>
|
||||
Auftragsformular zur linguistische Datenverarbeitung von
|
||||
Textdateien.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="#create_job" class="waves-effect waves-light btn modal-trigger">Erstellen</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Auftragsübersicht</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">work</i>
|
||||
Hier wird der aktuelle Status sämtlicher vom Benutzer
|
||||
erstellten Aufträge aufgelistet.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="job_manager.html" class="waves-effect waves-light btn">Öffnen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="create_job" class="modal overflow-visible">
|
||||
<div class="modal-content">
|
||||
<h4 style="line-height: 60px;"><i class="material-icons medium blue-grey-text text-darken-2 left">playlist_add</i>Linguistische Datenverarbeitung</h4>
|
||||
<p>
|
||||
Um den Auftrag abschicken zu können, müssen alle Formularfelder
|
||||
ausgefüllt werden. Anschließend erhalten Sie fortlaufende
|
||||
Benachrichtigungen über den aktuellen Bearbeitungsstand des
|
||||
Auftrags. Nach erfolgreicher Bearbeitung, stehen die Ergebnisse in
|
||||
der <a href="job_manager.html">Auftragsverwaltung</a> zum Download
|
||||
zur Verfügung.
|
||||
</p>
|
||||
<form id="job_form" class="row">
|
||||
<div class="input-field col s12">
|
||||
<input placeholder="Mein Auftragsname" id="job_form_name" type="text" class="validate">
|
||||
<label for="job_form_name">Auftragsname</label>
|
||||
</div>
|
||||
<div class="file-field input-field col s12 m6">
|
||||
<div class="btn">
|
||||
<span>Datei</span>
|
||||
<input id="job_form_file" type="file" accept="text/plain">
|
||||
</div>
|
||||
<div class="file-path-wrapper">
|
||||
<input class="file-path validate" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-field col s12 m6">
|
||||
<select id="job_form_language">
|
||||
<option value="" disabled selected>Option auswählen</option>
|
||||
<option value="de">Deutsch</option>
|
||||
<option value="en">Englisch</option>
|
||||
<option value="fr">Französisch</option>
|
||||
<option value="pt">Portugisisch</option>
|
||||
<option value="es">Spanisch</option>
|
||||
</select>
|
||||
<label>Sprache der Eingabedatei</label>
|
||||
</div>
|
||||
<div class="input-field col s12 m6 hide">
|
||||
<select id="job_form_service">
|
||||
<option value="nlp" selected></option>
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="modal-close waves-effect waves-green btn-flat">Abbrechen</a>
|
||||
<a href="javascript:jobFormSubmitHandler();" id="job_form_submit" class="modal-close waves-effect waves-green btn disabled">Abschicken</a>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="page-footer blue-grey darken-2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<p class="grey-text text-lighten-4 left">
|
||||
<a href="https://www.uni-bielefeld.de/">
|
||||
<img src="images/universitaet_bielefeld.png" alt="Logo: Universität Bielefeld" style="height: 72.5px">
|
||||
</a>
|
||||
</p>
|
||||
<p class="grey-text text-lighten-4 right">
|
||||
Gefördert durch die<br>
|
||||
<a href="https://www.dfg.de/">
|
||||
<img src="images/dfg.png" alt="Logo: Deutsche Forschungsgemeinschaft" style="height: 50px;">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-copyright">
|
||||
<div class="container">
|
||||
© 2019 Copyright
|
||||
<a class="grey-text text-lighten-4" href="https://www.uni-bielefeld.de/sfb1288">Universität Bielefeld | SFB 1288</a>
|
||||
<a class="grey-text text-lighten-4 right" href="impressum.html">Impressum</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<script src="js/materialize.min.js"></script>
|
||||
<script>
|
||||
M.AutoInit();
|
||||
</script>
|
||||
<script src="js/job_form_handler.js"></script>
|
||||
</body>
|
||||
</html>
|
293
vre_www/website/ocr.html
Normal file
293
vre_www/website/ocr.html
Normal file
@ -0,0 +1,293 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Opaque | Texterkennung</title>
|
||||
<link href="/vre/images/sfb_1288.png" rel="icon" type="image/png">
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<link rel="stylesheet" href="css/materialize.min.css">
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
<script src="js/vre_manager_rest.js"></script>
|
||||
<script src="js/vre.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
</head>
|
||||
<body class="blue-grey lighten-5">
|
||||
<header>
|
||||
<ul id="main-nav-account-dropdown" class="dropdown-content">
|
||||
<li>
|
||||
<a href="account.html">Benutzerverwaltung</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<a href="javascript:logout();">Abmelden</a>
|
||||
</li>
|
||||
</ul>
|
||||
<nav class="blue-grey darken-2">
|
||||
<div class="container">
|
||||
<div class="nav-wrapper">
|
||||
<a href="portal.html" class="brand-logo">
|
||||
<i class="material-icons hide-on-small-only">cloud</i>
|
||||
Opaque
|
||||
</a>
|
||||
<a href="#" data-target="main-nav-mobile" class="sidenav-trigger">
|
||||
<i class="material-icons">menu</i>
|
||||
</a>
|
||||
<ul id="main-nav" class="right hide-on-med-and-down">
|
||||
<li>
|
||||
<a href="job_manager.html">
|
||||
<i class="material-icons left">work</i>
|
||||
Auftragsübersicht
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="nlp.html">
|
||||
<i class="material-icons left">format_textdirection_l_to_r</i>
|
||||
Linguistische Datenverarbeitung
|
||||
</a>
|
||||
</li>
|
||||
<li class="active">
|
||||
<a href="ocr.html">
|
||||
<i class="material-icons left">find_in_page</i>
|
||||
Texterkennung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a id="main-nav-account" class="dropdown-trigger" href="#!" data-target="main-nav-account-dropdown">
|
||||
<i class="material-icons left">account_circle</i>
|
||||
Benutzer
|
||||
<i class="material-icons right">arrow_drop_down</i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<ul class="sidenav" id="main-nav-mobile">
|
||||
<li>
|
||||
<a href="job_manager.html">
|
||||
<i class="material-icons left">work</i>
|
||||
Auftragsübersicht
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="nlp.html">
|
||||
<i class="material-icons left">format_textdirection_l_to_r</i>
|
||||
Linguistische Datenverarbeitung
|
||||
</a>
|
||||
</li>
|
||||
<li class="active">
|
||||
<a href="ocr.html">
|
||||
<i class="material-icons left">find_in_page</i>
|
||||
Texterkennung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="account.html">
|
||||
<i class="material-icons">account_circle</i>
|
||||
Benutzer
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:logout();">
|
||||
<i class="material-icons">account_circle</i>
|
||||
Abmelden
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12 m8">
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Texterkennung</span>
|
||||
<p>
|
||||
Der hier zur Verfügung gestellte Dienst basiert auf Verfahren der
|
||||
optischen Zeichenerkennung. Dabei werden durch optische Analysemethoden
|
||||
und einen anschließenden Abgleich mit Wörterbüchern aus Bilddaten,
|
||||
wie Fotos oder Scans, Textdaten erzeugt. Erst dieser Vorverarbeitungsschritt
|
||||
ermöglicht eine computergestützte Verarbeitung von Dokumenten.
|
||||
</p>
|
||||
<div class="row">
|
||||
<div class="col s12 m6">
|
||||
<div class="card z-depth-0">
|
||||
<div class="card-content">
|
||||
<span class="card-title">
|
||||
<i class="material-icons blue-grey-text text-darken-2 left">layers</i>
|
||||
Eingabe von Bilddaten
|
||||
</span>
|
||||
<p>
|
||||
Über ein Auftragsformular können Bilddaten in Form von
|
||||
PDF-Dateien hochgeladen werden.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6">
|
||||
<div class="card z-depth-0">
|
||||
<div class="card-content">
|
||||
<span class="card-title">
|
||||
<i class="material-icons blue-grey-text text-darken-2 left">layers</i>
|
||||
Optische Zeichenerkennung
|
||||
</span>
|
||||
<p>
|
||||
Die optische Zeichenerkennung erfolgt in der
|
||||
Recheninfrastruktur der Plattform.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6">
|
||||
<div class="card z-depth-0">
|
||||
<div class="card-content">
|
||||
<span class="card-title">
|
||||
<i class="material-icons blue-grey-text text-darken-2 left">layers</i>
|
||||
Fehlerkorrektur
|
||||
</span>
|
||||
<p>
|
||||
Je nach Qualität der Eingabedaten kann es zu
|
||||
Fehlern kommen, die korrigiert werden sollten.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6">
|
||||
<div class="card z-depth-0">
|
||||
<div class="card-content">
|
||||
<span class="card-title">
|
||||
<i class="material-icons blue-grey-text text-darken-2 left">layers</i>
|
||||
Weiterverarbeitung
|
||||
</span>
|
||||
<p>
|
||||
Die Textdaten können weiterverarbeitet<a class="tooltipped" data-position="top" data-tooltip="Zum Beispiel durch die hier angebotene linguistische Datenverarbeitung."><sup>[*]</sup></a>
|
||||
oder in dieser Form bereits genutzt<a class="tooltipped" data-position="top" data-tooltip="Zum Beispiel mit dem Programm "AntConc"."><sup>[*]</sup></a> werden.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p>
|
||||
Die Ausgabe dieses Dienstes erfolgt in Form von Textdateien,
|
||||
PDF Dateien mit hinterlegtem Text und <a href="https://tei-c.org/guidelines/p5/" target="_blank">TEI P5</a>
|
||||
konformen XML Dateien.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Auftrag erstellen</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">playlist_add</i>
|
||||
Auftragsformular zur Texterkennung von PDF-Dateien.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="#create_job" class="waves-effect waves-light btn modal-trigger">Erstellen</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Auftragsübersicht</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">work</i>
|
||||
Hier wird der aktuelle Status sämtlicher vom Benutzer erstellten
|
||||
Aufträge aufgelistet.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="job_manager.html" class="waves-effect waves-light btn">Öffnen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="create_job" class="modal overflow-visible">
|
||||
<div class="modal-content">
|
||||
<h4 style="line-height: 60px;"><i class="material-icons medium blue-grey-text text-darken-2 left">playlist_add</i>Texterkennung</h4>
|
||||
<p>
|
||||
Um den Auftrag erstellen zu können, müssen alle Formularfelder
|
||||
ausgefüllt werden. Nachdem der Auftrag abgeschickt wurde, erhalten
|
||||
Sie fortlaufende Benachrichtigungen über den aktuellen Bearbeitungsstand.
|
||||
Nach erfolgreicher Bearbeitung stehen die Ergebnisse in
|
||||
der <a href="job_manager.html">Auftragsübersicht</a> zum Download
|
||||
zur Verfügung.
|
||||
</p>
|
||||
<form id="job_form" class="row">
|
||||
<div class="input-field col s12">
|
||||
<input placeholder="Mein Auftragsname" id="job_form_name" type="text" class="validate">
|
||||
<label for="job_form_name">Auftragsname</label>
|
||||
</div>
|
||||
<div class="file-field input-field col s12 m6">
|
||||
<div class="btn">
|
||||
<span>Datei</span>
|
||||
<input id="job_form_file" type="file" accept="application/pdf">
|
||||
</div>
|
||||
<div class="file-path-wrapper">
|
||||
<input class="file-path validate" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-field col s12 m6">
|
||||
<select id="job_form_language">
|
||||
<option value="" disabled selected>Option auswählen</option>
|
||||
<option value="deu">Deutsch</option>
|
||||
<option value="deu_frak">Deutsch (Fraktur)</option>
|
||||
<option value="eng">Englisch</option>
|
||||
<option value="fra">Französisch</option>
|
||||
<option value="por">Portugisisch</option>
|
||||
<option value="spa">Spanisch</option>
|
||||
</select>
|
||||
<label>Sprache der Eingabedatei</label>
|
||||
</div>
|
||||
<div class="input-field col s12 m6 hide">
|
||||
<select id="job_form_service">
|
||||
<option value="ocr" selected></option>
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="modal-close waves-effect waves-green btn-flat">Abbrechen</a>
|
||||
<a href="javascript:jobFormSubmitHandler();" id="job_form_submit" class="modal-close waves-effect waves-green btn disabled">Abschicken</a>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="page-footer blue-grey darken-2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<p class="grey-text text-lighten-4 left">
|
||||
<a href="https://www.uni-bielefeld.de/">
|
||||
<img src="images/universitaet_bielefeld.png" alt="Logo: Universität Bielefeld" style="height: 72.5px">
|
||||
</a>
|
||||
</p>
|
||||
<p class="grey-text text-lighten-4 right">
|
||||
Gefördert durch die<br>
|
||||
<a href="https://www.dfg.de/">
|
||||
<img src="images/dfg.png" alt="Logo: Deutsche Forschungsgemeinschaft" style="height: 50px;">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-copyright">
|
||||
<div class="container">
|
||||
© 2019 Copyright
|
||||
<a class="grey-text text-lighten-4" href="https://www.uni-bielefeld.de/sfb1288">Universität Bielefeld | SFB 1288</a>
|
||||
<a class="grey-text text-lighten-4 right" href="impressum.html">Impressum</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<script src="js/materialize.min.js"></script>
|
||||
<script>
|
||||
M.AutoInit();
|
||||
</script>
|
||||
<script src="js/job_form_handler.js"></script>
|
||||
</body>
|
||||
</html>
|
233
vre_www/website/portal.html
Normal file
233
vre_www/website/portal.html
Normal file
@ -0,0 +1,233 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Opaque | Portal</title>
|
||||
<link href="/vre/images/sfb_1288.png" rel="icon" type="image/png">
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<link rel="stylesheet" href="css/materialize.min.css">
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
<script src="js/vre_manager_rest.js"></script>
|
||||
<script src="js/vre.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
</head>
|
||||
<body class="blue-grey lighten-5">
|
||||
<header>
|
||||
<ul id="main-nav-account-dropdown" class="dropdown-content">
|
||||
<li>
|
||||
<a href="account.html">Benutzerverwaltung</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<a href="javascript:logout();">Abmelden</a>
|
||||
</li>
|
||||
</ul>
|
||||
<nav class="blue-grey darken-2">
|
||||
<div class="container">
|
||||
<div class="nav-wrapper">
|
||||
<a href="portal.html" class="brand-logo">
|
||||
<i class="material-icons hide-on-small-only">cloud</i>
|
||||
Opaque
|
||||
</a>
|
||||
<a href="#" data-target="main-nav-mobile" class="sidenav-trigger">
|
||||
<i class="material-icons">menu</i>
|
||||
</a>
|
||||
<ul id="main-nav" class="right hide-on-med-and-down">
|
||||
<li>
|
||||
<a href="job_manager.html">
|
||||
<i class="material-icons left">work</i>
|
||||
Auftragsübersicht
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="nlp.html">
|
||||
<i class="material-icons left">format_textdirection_l_to_r</i>
|
||||
Linguistische Datenverarbeitung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="ocr.html">
|
||||
<i class="material-icons left">find_in_page</i>
|
||||
Texterkennung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a id="main-nav-account" class="dropdown-trigger" href="#!" data-target="main-nav-account-dropdown">
|
||||
<i class="material-icons left">account_circle</i>
|
||||
Benutzer
|
||||
<i class="material-icons right">arrow_drop_down</i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<ul class="sidenav" id="main-nav-mobile">
|
||||
<li>
|
||||
<a href="job_manager.html">
|
||||
<i class="material-icons left">work</i>
|
||||
Auftragsübersicht
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="nlp.html">
|
||||
<i class="material-icons left">format_textdirection_l_to_r</i>
|
||||
Linguistische Datenverarbeitung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="ocr.html">
|
||||
<i class="material-icons left">find_in_page</i>
|
||||
Texterkennung
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="account.html">
|
||||
<i class="material-icons">account_circle</i>
|
||||
Benutzer
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:logout();">
|
||||
<i class="material-icons">account_circle</i>
|
||||
Abmelden
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12 m8">
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Portal</span>
|
||||
<p class="overflow-hidden">
|
||||
<i class="material-icons blue-grey-text text-darken-2 left" style="font-size: 135px;">cloud</i>
|
||||
Opaque ist eine freie Plattform zur Unterstützung
|
||||
textverarbeitender Prozesse. Sie soll es ermöglichen,
|
||||
komplexe Programme zur einfachen Nutzung bereitzustellen und
|
||||
bereits etablierte Textverarbeitungsroutinen ohne die Hürde langer
|
||||
Einarbeitungszeiten zugänglich zu machen. Alle Berechnungen
|
||||
werden dabei von den vom SFB 1288 zur Verfügung gestellten
|
||||
Servern ausgeführt. So können Aufträge bearbeitet werden, ohne
|
||||
dass der Computer des Benutzers eingeschaltet sein muss.
|
||||
</p>
|
||||
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<div class="divider"></div>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
|
||||
<p class="overflow-hidden">
|
||||
<i class="material-icons blue-grey-text text-darken-2 left" style="font-size: 135px;">lock_open</i>
|
||||
Alle hier zur Verfügung gestellten Dienste wurden durch den
|
||||
Einsatz freier Software realisiert. Um den Ansprüchen modernen
|
||||
Forschungsdatenmanagements zu entsprechen, muss die
|
||||
Nachnutzbarkeit von Ergebnissen sichergestellt werden. Aus diesem Grund
|
||||
wird bewusst auf proprietäre Dateiformate verzichtet. Stattdessen werden nur
|
||||
standardisierte und offene Formate genutzt, die eine
|
||||
einfache Verbreitung und Weiterverarbeitung ermöglichen.
|
||||
</p>
|
||||
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<div class="divider"></div>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
|
||||
<p class="overflow-hidden">
|
||||
<img src="images/sfb_1288.png" alt="Logo: SFB 1288" class="left" style="width: 135px; height: 135px; margin-right: 15px;">
|
||||
Diese Seite wurde vom Teilprojekt INF des Sonderforschungsbereich 1288
|
||||
vor dem Hintergrund der gesammelten Erfahrungen entwickelt, die in einem
|
||||
Pilotprojekt zur digitalen Verarbeitung von Textdaten im SFB gemacht wurden.<br>
|
||||
Für Fragen und Anregungen steht das TP INF gerne via E-Mail zur Verfügung:
|
||||
<br><a href="mailto:mailto:inf_sfb1288@lists.uni-bielefeld.de">inf_sfb1288@lists.uni-bielefeld.de</a>
|
||||
</p>
|
||||
|
||||
<p> </p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col s12 m4">
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Linguistische Datenverarbeitung</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">format_textdirection_l_to_r</i>
|
||||
Mit Hilfe datenverarbeitender Methoden werden Textdaten mit
|
||||
weiteren Informationen angereichert.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="nlp.html" class="waves-effect waves-light btn">Zum Dienst</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Texterkennung</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">find_in_page</i>
|
||||
Textdaten werden aus Scans oder Fotos zur anschließenden
|
||||
Weiterverarbeitung extrahiert.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="ocr.html" class="waves-effect waves-light btn">Zum Dienst</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
<span class="card-title">Auftragsübersicht</span>
|
||||
<p>
|
||||
<i class="material-icons medium blue-grey-text text-darken-2 left">work</i>
|
||||
Hier wird der aktuelle Status sämtlicher vom Benutzer erstellten
|
||||
Aufträge aufgelistet.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action right-align">
|
||||
<a href="job_manager.html" class="waves-effect waves-light btn">Öffnen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="page-footer blue-grey darken-2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<p class="grey-text text-lighten-4 left">
|
||||
<a href="https://www.uni-bielefeld.de/">
|
||||
<img src="images/universitaet_bielefeld.png" alt="Logo: Universität Bielefeld" style="height: 72.5px">
|
||||
</a>
|
||||
</p>
|
||||
<p class="grey-text text-lighten-4 right">
|
||||
Gefördert durch die<br>
|
||||
<a href="https://www.dfg.de/">
|
||||
<img src="images/dfg.png" alt="Logo: Deutsche Forschungsgemeinschaft" style="height: 50px;">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-copyright">
|
||||
<div class="container">
|
||||
© 2019 Copyright
|
||||
<a class="grey-text text-lighten-4" href="https://www.uni-bielefeld.de/sfb1288">Universität Bielefeld | SFB 1288</a>
|
||||
<a class="grey-text text-lighten-4 right" href="impressum.html">Impressum</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<script src="js/materialize.min.js"></script>
|
||||
<script>
|
||||
M.AutoInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Reference in New Issue
Block a user