Compare commits

..

33 Commits

Author SHA1 Message Date
Jan
08c78bb568 Merge pull request 'Adding disclaimer as seperate site' (#17) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #17
2024-11-19 16:00:02 +01:00
Jan
807d104d06 Adding disclaimer as seperate site 2024-11-19 15:58:23 +01:00
Jan
09d26bd73f Merge pull request 'Added new disclaimer Video' (#16) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #16
2024-11-19 14:24:22 +01:00
Jan
053aa4bd5a Added new disclaimer Video 2024-11-19 14:22:55 +01:00
Jan
1d1f5be753 Merge pull request 'Removed the hopefuly last placeholdervideo' (#15) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #15
2024-11-13 11:22:40 +01:00
Jan
40e24501f6 Removed the hopefuly last placeholdervideo 2024-11-13 11:16:41 +01:00
Jan
aedc1cf9ea Merge pull request 'letzte kleine fixes' (#14) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #14
2024-11-13 11:11:57 +01:00
Jan
522d10f422 Small file naming typo fixed 2024-11-13 11:05:52 +01:00
Jan
789d49a2c9 Fixed error in p3info text 2024-11-13 11:02:41 +01:00
Jan
f548c60157 Merge pull request 'final study push (hopefully)' (#13) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #13
2024-11-12 16:19:17 +01:00
Jan
86c5f3fdea Final changes (deploy without exp videos) 2024-11-12 16:17:07 +01:00
Jan
26c28cd0da 0044 as learning phase video now 2024-10-23 15:51:42 +02:00
Jan
da2c959ba7 Merge pull request 'new Videos and task 3 Text corrected' (#12) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #12
2024-10-23 14:22:04 +02:00
Jan
e1b814da4f new Videos and task 3 Text corrected 2024-10-23 14:20:07 +02:00
Jan
df80e62707 Merge pull request 'video management' (#11) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #11
2024-10-13 16:14:08 +02:00
Jan
edcd32db47 small improvement to video management page 2024-10-13 16:13:03 +02:00
Jan
e253586467 video management page now exists 2024-10-13 16:09:42 +02:00
Jan
45d2874999 Merge pull request 'More fixes, those are the final texts !!!' (#10) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #10
2024-10-13 15:43:46 +02:00
Jan
728c282a3d try to remove database via git 2024-10-13 15:42:25 +02:00
Jan
23e6ee55c6 multiple choice bug fixed 2024-10-13 15:29:30 +02:00
Jan
52db4cc0fb fixed small bug 2024-10-13 15:22:18 +02:00
Jan
2702ce3c3c password is checked via hash now 2024-10-13 15:18:14 +02:00
Jan
ab27d70946 More fixes, those are the final texts !!! 2024-10-07 14:05:43 +02:00
Jan
39bf5861b8 Merge pull request 'small fixes' (#9) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #9
2024-10-07 12:18:33 +02:00
Jan
9bbbd39c9b Merge pull request 'added impressum page' (#8) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #8
2024-10-07 10:18:59 +02:00
Jan
a329baeb78 Merge pull request 'Feedback von Ella' (#7) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #7
2024-10-03 17:41:58 +02:00
Jan
97cb17733e Merge pull request 'working' (#6) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #6
2024-10-02 13:23:44 +02:00
Jan
64d89a8821 Merge pull request 'working' (#5) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #5
2024-10-02 12:25:24 +02:00
Jan
f29ba7c8e0 Merge pull request 'update für Feedback' (#4) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #4
2024-09-23 15:17:21 +02:00
Jan
915b69a775 Merge pull request 'working into main, userstudy mostly finished' (#3) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #3
2024-09-19 15:26:30 +02:00
Jan
cf630bc040 Merge pull request 'Cleanup, now redirects work again' (#2) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #2
2024-08-20 17:12:40 +02:00
Jan
fb82d4c19a Merge pull request 'Merging Latest changes into main' (#1) from working into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #1
2024-08-20 17:03:27 +02:00
be84a7e8b3 Add CI
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-02 12:00:33 +02:00
40 changed files with 1441 additions and 127 deletions

30
.drone.yml Normal file
View File

@@ -0,0 +1,30 @@
kind: pipeline
name: default
steps:
- name: deploy
image: registry.eterna.leafbla.de/pelipper
settings:
ssh_key:
from_secret: rsync_key
source: slaeforms/
destination: pelipper@oreburgh.leafbla.de:/srv/docker/janapp/slaeforms/
- name: restart
image: registry.eterna.leafbla.de/drowzee
settings:
host: oreburgh.leafbla.de
username: psyduck
key:
from_secret: deploy_key
command: |
cd /srv/docker/janapp;
docker compose down;
docker compose up --build -d;
trigger:
branch:
- main
image_pull_secrets:
- docker_config

View File

@@ -15,9 +15,9 @@ from sqlalchemy.orm import DeclarativeBase
import os import os
import csv import csv
from zipfile import ZipFile from zipfile import ZipFile
import hashlib
random_order = True # activate environment: cd C:\...\...\....\...\Code\SLAEForms Testing\.venv\Scripts\
# activate environment: cd C:\Users\Jan\Google Drive\Master Stuff\Code\SLAEForms Testing\.venv\Scripts\
# then this: activate # then this: activate
#SETUP-------------------------------------------------- #SETUP--------------------------------------------------
@@ -41,7 +41,7 @@ app.secret_key = b"29fe9e8edd407c5491d4f1c05632d9fa33e26ed8734a3f5e080ebac3772a5
UPLOAD_FOLDER = 'uploads' UPLOAD_FOLDER = 'uploads'
EXPORT_FOLDER = 'exports' EXPORT_FOLDER = 'exports'
PASSWORD = '#1ACGmsjd' PASSWORD = 'd5aff9fc14d1f20f4ccddaa8b4f2c1765228b74ed0b1dfb868bf1064e0d655e2'
CONFIGFILE = 'userstudy1.json' CONFIGFILE = 'userstudy1.json'
# CONFIGFILE = 'test.json' # CONFIGFILE = 'test.json'
# CONFIGFILE = 'default.json' # CONFIGFILE = 'default.json'
@@ -191,9 +191,10 @@ def startpage():
case "single_video": case "single_video":
order = list(config[name]["stimuli"]["list"]) # order = list of simuli keys order = list(config[name]["stimuli"]["list"]) # order = list of simuli keys
print("order: ",order) print("order: ",order)
if config[name]["stimuli"]["order"] == "random": if "order" in config[name]["stimuli"]:
random.shuffle(order) #in random order if config[name]["stimuli"]["order"] == "random":
session["block_order"][name] = order random.shuffle(order) #in random order
session["block_order"][name] = order
case "double_video": case "double_video":
order = [] # order = list of stimuli keys order = [] # order = list of stimuli keys
list_1 = list(config[name]["stimuli"]["list_1"]) list_1 = list(config[name]["stimuli"]["list_1"])
@@ -540,7 +541,7 @@ def export_all_videos():
with ZipFile('zip_exports/all_videos.zip', 'w') as zipf: #no compression, need to add zipfile.ZIP_DEFLATED for compression with ZipFile('zip_exports/all_videos.zip', 'w') as zipf: #no compression, need to add zipfile.ZIP_DEFLATED for compression
zipdir('uploads/', zipf) zipdir('uploads/', zipf)
return send_file("zip_exports/all_videos.zip", as_attachment=False, download_name="all_tables.zip") return send_file("zip_exports/all_videos.zip", as_attachment=False, download_name="all_videos.zip")
def create_csv(table, filename): def create_csv(table, filename):
@@ -615,6 +616,39 @@ def show_tables():
tables = meta.tables tables = meta.tables
return render_template('show_tables.html', tables=tables) return render_template('show_tables.html', tables=tables)
@app.route("/manage_uploads")
def manage_uploads():
if not session.get("logged_in"):
return redirect("/login")
videodir = "uploads/"
videolist = os.listdir(videodir)
num_videos = len(videolist)
return render_template("manage_uploads.html", videolist=videolist, num_videos=num_videos)
@app.route("/deleteuploads", methods=["POST"])
def deleteuploads():
if not session.get("logged_in"):
return redirect("/login")
print("deleting all videos")
videodir = "uploads/"
for video in os.listdir(videodir):
os.remove(os.path.join(videodir, video))
print("videos deleted")
return redirect("/all_links")
@app.route("/task3")
def task3():
return render_template("task3.html")
# Root page ----------------------------- # Root page -----------------------------
@@ -622,9 +656,10 @@ def show_tables():
def login(): def login():
if request.method == "POST": if request.method == "POST":
if request.form["password"] == PASSWORD: pwhash = hashlib.sha256(request.form["password"].encode('utf-8')).hexdigest()
if pwhash == PASSWORD:
session["logged_in"] = True session["logged_in"] = True
return redirect("/") return redirect(url_for("all_links"))
return render_template("login.html") return render_template("login.html")

View File

@@ -88,7 +88,7 @@ dialog .iframe-container {
max-width: 1690px; max-width: 1690px;
/* Maximum width to keep it from getting too wide on large screens */ /* Maximum width to keep it from getting too wide on large screens */
padding: 20px; padding: 20px;
background-color: #7b8cdb; background-color: #b6c3ff; /* used to be 7b8cdb */
/* Just for visual differentiation */ /* Just for visual differentiation */
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
} }
@@ -143,6 +143,10 @@ label {
width: 60%; width: 60%;
} }
button {
border: 1px solid #000;
}
/* buttons */ /* buttons */
.buttondisable { .buttondisable {
filter: invert(65%); filter: invert(65%);
@@ -160,6 +164,7 @@ label {
/* Optional: rounds the corners of the button */ /* Optional: rounds the corners of the button */
width: auto; width: auto;
float: right; float: right;
border: 1px solid #000;
} }
#submitbutton:hover { #submitbutton:hover {
@@ -219,7 +224,7 @@ h2 {
height: 70px; height: 70px;
/* Set a specific height for the buttons */ /* Set a specific height for the buttons */
background-color: #cae4ff; background-color: #cae4ff;
border: none; border: 1px solid #000;
color: white; color: white;
padding: 10px 20px; padding: 10px 20px;
margin: 0 10px; margin: 0 10px;
@@ -269,6 +274,7 @@ video {
width: auto; width: auto;
height: auto; height: auto;
margin: auto auto; margin: auto auto;
display: block;
} }
iframe { iframe {
@@ -285,12 +291,29 @@ iframe {
} }
.iframe-container { .iframe-container {
position: relative;
/*padding-bottom: 56.25%;*/
/* 16:9 */
padding-bottom: 100%;
/* 1:1 */
height: 0;
}
.iframe-container2 {
position: relative; position: relative;
padding-bottom: 56.25%; padding-bottom: 56.25%;
/* 16:9 */ /* 16:9 */
height: 0; height: 0;
} }
.iframe-container2 iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.video-container { .video-container {
max-width: 100%; max-width: 100%;
position: relative; position: relative;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -12,11 +12,6 @@
<div class="container"> <div class="container">
<h2>Datenschutzerklärung</h2> <h2>Datenschutzerklärung</h2>
<video controls>
<source src="{{ url_for('static', filename='videos/platzhalter-video.mp4') }}" type="video/mp4">
</video>
<div class="spacer" aria-hidden="true" style="height:20px"></div>
<div class="textblock"> <div class="textblock">
<h3> <h3>
Information betroffener Personen zur Verarbeitung personenbezogener Daten Information betroffener Personen zur Verarbeitung personenbezogener Daten

View File

@@ -13,6 +13,9 @@
<h2>Impressum</h2> <h2>Impressum</h2>
<div class="textblock"> <div class="textblock">
<p>
Datenschutzerklärung: <a href="{{ url_for('datenschutz') }}" target="_blank">Datenschutz</a>
</p>
<p> <p>
Verantwortlicher für slaeforms.leafbla.de: Jan Dickmann, zusammen mit dem DFKI Saarbrücken, Affective Computing Group Verantwortlicher für slaeforms.leafbla.de: Jan Dickmann, zusammen mit dem DFKI Saarbrücken, Affective Computing Group
</p> </p>

View File

@@ -12,24 +12,19 @@
<div class="container"> <div class="container">
<h2>SLAEFORMS Gebärdensprachavatar Studie</h2> <h2>SLAEFORMS Gebärdensprachavatar Studie</h2>
<video controls>
<source src="{{ url_for('static', filename='videos/platzhalter-video.mp4') }}" type="video/mp4">
</video>
<div class="spacer" aria-hidden="true" style="height:20px"></div>
<div class="spacer" aria-hidden="true" style="height:20px"></div>
<div class="textblock"> <div class="textblock">
<p style="font-size: 22px;"> <p style="font-size: 22px;">
Bei allen Aufgaben in dieser Studie gibt es ein Erklärvideo, in dem die Aufgabe und die Antwortmöglichkeiten in Gebärdensprache erklärt werden. Bei allen Aufgaben in dieser Studie gibt es Texte, in denen die Aufgaben und die Antwortmöglichkeiten erklärt werden.
Falls Sie Fragen haben oder eine Aufgabe nicht verstehen, können Sie den "Gebärdensprach"-Button auf der rechten Seite des Bildschirms klicken, um das Video und den Erklärtext zu sehen. Falls Sie Fragen haben oder eine Aufgabe nicht verstehen, können Sie den "Info"-Button auf der rechten Seite des Bildschirms klicken, um den Erklärtext zu sehen.
Sie können den Button nochmal anklicken, um wieder zur Aufgabe zurückzukommen. Sie können den Button nochmal anklicken, um wieder zur Aufgabe zurückzukommen.
</p> </p>
<div style="margin: auto; display: block; max-width: 90px;"> <div style="margin: auto; display: block; max-width: 90px;">
<button style="margin: auto; max-width: 90px;"><img class="infoButtonIcon" id="buttonInfoIcon" <button style="margin: auto; max-width: 90px;"><img class="infoButtonIcon" id="buttonInfoIcon"
src="{{ url_for('static', filename='icons/sl-icon.png')}}" alt="sign-language-icon"></button> src="{{ url_for('static', filename='icons/info-icon.png')}}" alt="info-icon"></button>
</div> </div>
<p style="font-size: 22px; text-align: center;"> <p style="font-size: 22px; text-align: center;">
Der Gebärdensprach-Button. Das ist der Info-Button.
</p> </p>
</div> </div>

View File

@@ -0,0 +1,52 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='styles.css')}}"" /> <!-- styles.css {{ url_for('static', filename='styles.css')}}-->
<link rel=" shortcut icon" href="{{ url_for('static', filename='icons/favicon.ico') }}">
<title>DGS Avatar Study</title>
</head>
<body>
<div class="container" style="height: 100%; font-size: 22px;">
<h2>Upload management</h2>
<div class="textblock">
<p>
Anzahl Videos: {{ num_videos }}
</p>
<p>
Die aktuellen Videos:
</p>
</div>
{% for video in videolist %}
<p>{{video}}</p>
{% endfor %}
<div class="textblock">
<p>
Download <a href="{{ url_for('export_all_videos') }}" target="_blank">hier</a>.
</p>
</div>
<form class="dsgvoform" action="{{ url_for('deleteuploads') }}" method="post">
<label for="terms-and-conditions">
<input class="inline" id="terms-and-conditions" type="checkbox" required name="terms-and-conditions" />
Alle Videos löschen.
</label>
<div class="button-container">
<button id="submitbutton" type="submit">Löschen</button>
</div>
</form>
<div class="spacer" aria-hidden="true" style="height:50px"></div>
</div>
</body>
<footer>
<div class="container" style="font-size: 19px;">
<a href="{{ url_for('startpage') }}" target="_blank">Startseite</a>
<a href="{{ url_for('impressum') }}" target="_blank">Impressum</a>
<a href="{{ url_for('datenschutz') }}" target="_blank">Datenschutz</a>
</div>
</footer>
</html>

View File

@@ -0,0 +1,77 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='styles.css')}}"" /> <!-- styles.css {{ url_for('static', filename='styles.css')}}-->
<link rel=" shortcut icon" href="{{ url_for('static', filename='icons/favicon.ico') }}">
<title>DGS Avatar Study</title>
</head>
<body>
<div class="container">
<h2>SLAEFORMS Gebärdensprachavatar Studie</h2>
<div class="textblock">
<div style="margin: auto; font-size: 20px;">
<p>
Hallo und willkommen zu dieser Studie, danke für Ihre Teilnahme.
</p>
<p>
In dieser Studie geht es um die Entwicklung von Gebärdensprachavataren.
</p>
<p>
Bitte beachten Sie, dass diese Avatare noch in einer frühen Entwicklungsphase und noch nicht für den
Gebrauch in einer App/einem Computerprogramm oder auf einer Webseite geeignet sind. In dieser Studie
geht es darum, einzelne Aspekte der Avatare und neue technologische Ansätze zu testen. Dementsprechend
haben die Avatare noch viele offensichtliche Schwächen, wie zum Beispiel, dass bisher nur die Arme und
der Oberkörper, aber nicht das Gesicht animiert ist. Bitte bewerten Sie nur die Qualität der Hände und
Arme.
</p>
<p>
Diese Studie richtet sich an Menschen, die Gebärdensprache beherrschen, insbesondere gehörlose Menschen.
Nehmen Sie bitte nur Teil, wenn Sie (Deutsche) Gebärdensprache beherrschen.
Die Studie dauert ca. 20 Minuten.
</p>
<p>
Während der Studie werden sie sich Videos anschauen, diese bewerten und Feedback dazu geben können.
Verwenden Sie deshalb bitte, wenn möglich ein Gerät mit einem großen Bildschirm (Laptop, PC, Tablet) für
Ihre Teilnahme, damit Sie die Videos in ausreichender Größe sehen können.
</p>
<p>
Sie haben während der Studie die Möglichkeit (optional) Videofeedback zu geben, dazu brauchen sie eine
Webcam. Die Videos werden nicht veröffentlicht und nur Übersetzern zur Auswertung der Studienergebnisse
gezeigt.
</p>
<p>
Das Laden der Seiten kann manchmal einige Sekunden dauern. Falls es zu einem Fehler kommen sollte und ein Video nicht geladen wird, versuchen Sie bitte die Seite neu zu laden.
</p>
<p>
Für jeden Teil der Studie gibt es einen Text, der die Fragestellung und die Antwortmöglichkeiten erklärt. Falls Sie den Text während der Studie nochmal sehen möchten, können Sie es
über den „Info“-Knopf auf der rechten Seite aufrufen.
</p>
<p>
Bitte versuchen sie während der Studie nicht auf die vorherige Seite "zurück" zu gehen, da sie nicht zu vorherigen Fragen zurück können.
</p>
</div>
</div>
<form class="dsgvoform" action="{{ url_for('sendpage') }}" method="post">
<div class="button-container">
<button id="submitbutton" type="submit">Weiter</button>
</div>
</form>
<div class="spacer" aria-hidden="true" style="height:80px"></div>
</div>
</body>
<footer>
<div class="container" style="font-size: 19px;">
<a href="{{ url_for('startpage') }}" target="_blank">Startseite</a>
<a href="{{ url_for('impressum') }}" target="_blank">Impressum</a>
<a href="{{ url_for('datenschutz') }}" target="_blank">Datenschutz</a>
</div>
</footer>
</html>

View File

@@ -12,10 +12,6 @@
<div class="container"> <div class="container">
<h2>SLAEFORMS Gebärdensprachavatar Studie</h2> <h2>SLAEFORMS Gebärdensprachavatar Studie</h2>
<video controls>
<source src="{{ url_for('static', filename='videos/platzhalter-video.mp4') }}" type="video/mp4">
</video>
<div class="spacer" aria-hidden="true" style="height:20px"></div>
<div class="textblock"> <div class="textblock">
{% include "p1infos.html" %} {% include "p1infos.html" %}

View File

@@ -1,7 +1,7 @@
<div style="margin: auto; max-width: 80%; font-size: 20px;"> <div style="margin: auto; max-width: 80%; font-size: 20px;">
<p>Studie Teil 2:</p> <p>Studie Teil 2:</p>
<p>Im Folgenden sehen Sie zwei Videos, in denen der gleiche Satz mit unterschiedlichen Formulierungen gebärdet wird.</p> <p>Im Folgenden sehen Sie zwei Videos, in denen der gleiche Satz mit unterschiedlichen Formulierungen gebärdet wird.</p>
<p>Der folgende Satz wird gebärdet: Gleis 18, Einfahrt RE 77 Richtung Köln Hauptbahnhof über Hannover, Abfahrt 3:44 Uhr.</p> <p>Der folgende Satz wird gebärdet: Einfahrt RE 77 Richtung Köln Hauptbahnhof über Hannover, Abfahrt 3:44 Uhr.</p>
<p>Bitte verwenden Sie die Punkteskala, um zu bewerten, welches der beiden Videos Sie besser finden.</p> <p>Bitte verwenden Sie die Punkteskala, um zu bewerten, welches der beiden Videos Sie besser finden.</p>
<ol start="1"> <ol start="1">
<li>Welche Formulierung war natürlicher?</li> <li>Welche Formulierung war natürlicher?</li>

View File

@@ -12,10 +12,6 @@
<div class="container"> <div class="container">
<h2>SLAEFORMS Gebärdensprachavatar Studie</h2> <h2>SLAEFORMS Gebärdensprachavatar Studie</h2>
<video controls>
<source src="{{ url_for('static', filename='videos/platzhalter-video.mp4') }}" type="video/mp4">
</video>
<div class="spacer" aria-hidden="true" style="height:20px"></div>
<div class="textblock"> <div class="textblock">
{% include "p2infos.html" %} {% include "p2infos.html" %}

View File

@@ -11,10 +11,10 @@
</ol> </ol>
<p>Die Antwortmöglichkeiten sind jedes Mal:</p> <p>Die Antwortmöglichkeiten sind jedes Mal:</p>
<ol start="1"> <ol start="1">
<li>Links</li> <li>Trifft überhaupt nicht zu</li>
<li>Eher links</li> <li>Trifft eher nicht zu</li>
<li>Beide gleich</li> <li>Ich weiß nicht</li>
<li>Eher rechts</li> <li>Trifft eher zu</li>
<li>Rechts</li> <li>Trifft vollkommen zu</li>
</ol> </ol>
</div> </div>

View File

@@ -12,10 +12,6 @@
<div class="container"> <div class="container">
<h2>SLAEFORMS Gebärdensprachavatar Studie</h2> <h2>SLAEFORMS Gebärdensprachavatar Studie</h2>
<video controls>
<source src="{{ url_for('static', filename='videos/platzhalter-video.mp4') }}" type="video/mp4">
</video>
<div class="spacer" aria-hidden="true" style="height:20px"></div>
<div class="textblock"> <div class="textblock">
{% include "p3infos.html" %} {% include "p3infos.html" %}

View File

@@ -13,6 +13,13 @@
allowfullscreen></iframe> allowfullscreen></iframe>
</div> </div>
{% elif (embed == "vimeo") %}
<div class="iframe-container">
<iframe title="vimeo-player" class="center" src="{{ video_url }}" frameborder="0" allowfullscreen></iframe>
</div>
{% elif (embed == "no") %} {% elif (embed == "no") %}
<video controls> <video controls>
@@ -42,8 +49,6 @@
</div> </div>
</div> </div>
<div class="dv_half"> <div class="dv_half">
<div class="iframe-container"> <div class="iframe-container">
<iframe class="center" src="{{ video_url2 }}" title="YouTube video player" frameborder="0" <iframe class="center" src="{{ video_url2 }}" title="YouTube video player" frameborder="0"
@@ -53,6 +58,25 @@
</div> </div>
</div> </div>
{% elif (embed == "vimeo") %}
<div class="double_video_container">
<div class="dv_half">
<div class="iframe-container">
<iframe title="vimeo-player" class="center" src="{{ video_url1 }}" frameborder="0" allowfullscreen></iframe>
</div>
</div>
<div class="dv_half">
<div class="iframe-container">
<iframe title="vimeo-player" class="center" src="{{ video_url2 }}" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
{% elif (embed == "no") %} {% elif (embed == "no") %}
<div class="double_video_container"> <div class="double_video_container">
<div class="dv_half"> <div class="dv_half">
@@ -121,9 +145,11 @@ step={{question["step"]}}
<button class="dialogBtn" autofocus><img class="infoButtonIcon" id="buttonClose" <button class="dialogBtn" autofocus><img class="infoButtonIcon" id="buttonClose"
src="{{ url_for('static', filename='icons/x-icon.png')}}" alt="Delete Icon"></button> src="{{ url_for('static', filename='icons/x-icon.png')}}" alt="Delete Icon"></button>
{% if ("videourl" in infovideo) %}
<video controls> <video controls>
<source src="{{ url_for('static', filename=infovideo['videourl']) }}" type="video/mp4"> <source src="{{ url_for('static', filename=infovideo['videourl']) }}" type="video/mp4">
</video> </video>
{% endif %}
<div class="dialogTextContainer"> <div class="dialogTextContainer">
{% if ("infotext" in infovideo) %} {% if ("infotext" in infovideo) %}
<p>{{ infovideo["infotext"] }}</p> <p>{{ infovideo["infotext"] }}</p>
@@ -134,7 +160,7 @@ step={{question["step"]}}
</div> </div>
</dialog> </dialog>
<button class="dialogBtn"><img class="infoButtonIcon" id="buttonInfoIcon" <button class="dialogBtn"><img class="infoButtonIcon" id="buttonInfoIcon"
src="{{ url_for('static', filename='icons/sl-icon.png')}}" alt="Info Icon"></button> src="{{ url_for('static', filename='icons/info-icon.png')}}" alt="Info Icon"></button>
<script src="{{ url_for('static', filename='infoDialogScript.js')}}"></script> <script src="{{ url_for('static', filename='infoDialogScript.js')}}"></script>
{% endif %} {% endif %}
@@ -157,7 +183,7 @@ step={{question["step"]}}
<div class="spacer" aria-hidden="true" style="height:30px"></div> <div class="spacer" aria-hidden="true" style="height:30px"></div>
<div class="questioncontainer"> <div class="questioncontainer">
<h3 style="margin: auto;">{{ questions[question]['text']}}</h3> <h3 style="margin: auto;">{{ questions[question]['text']}}</h3>
</div> </div>
<div class="spacer" aria-hidden="true" style="height:60px"></div> <div class="spacer" aria-hidden="true" style="height:60px"></div>
@@ -165,7 +191,7 @@ step={{question["step"]}}
{% elif (questions[question]["type"] == "likert") %} {% elif (questions[question]["type"] == "likert") %}
<div class="likertcontainer"> <div class="likertcontainer">
<div class="questioncontainer"> <div class="questioncontainer">
<h3>{{ questions[question]['text']}}</h3> <h3>{{ questions[question]['text']}}</h3>
</div> </div>
<div class="likert" style="--likert-rows: {{ questions[question]['points']|length() }}"> <div class="likert" style="--likert-rows: {{ questions[question]['points']|length() }}">
{% for point in questions[question]["points"] %} {% for point in questions[question]["points"] %}
@@ -184,7 +210,7 @@ step={{question["step"]}}
{% elif (questions[question]["type"] == "likert-basic") %} {% elif (questions[question]["type"] == "likert-basic") %}
<div class="questioncontainer"> <div class="questioncontainer">
<h3>{{ questions[question]['text']}}</h3> <h3>{{ questions[question]['text']}}</h3>
</div> </div>
<div class="normal-likert-container"> <div class="normal-likert-container">
@@ -262,7 +288,8 @@ step={{question["step"]}}
{% elif (questions[question]["type"] == "multiplechoice") %} {% elif (questions[question]["type"] == "multiplechoice") %}
<div class="compressWidth"> <div class="compressWidth">
<label> <p>
<div>
{{ questions[question]['text']}} {{ questions[question]['text']}}
{% for point in questions[question]["points"] %} {% for point in questions[question]["points"] %}
@@ -272,7 +299,8 @@ step={{question["step"]}}
{{ questions[question]['points'][point]['text']}}</label> {{ questions[question]['points'][point]['text']}}</label>
{% endfor %} {% endfor %}
</label> </div>
</p>
</div> </div>
<div class="spacer" aria-hidden="true" style="height:30px"></div> <div class="spacer" aria-hidden="true" style="height:30px"></div>
@@ -319,13 +347,13 @@ step={{question["step"]}}
<div class="spacer" aria-hidden="true" style="height:30px"></div> <div class="spacer" aria-hidden="true" style="height:30px"></div>
<div class="button-container"> <div class="button-container">
{% if ("lastquestion" in stimlui) %} {% if ("lastquestion" in stimlui) %}
<button id="submitbutton" type="submit">Studie Beenden</button> <button id="submitbutton" type="submit">Studie Beenden</button>
<!-- TODO maybe I want to use this instead: <button id="submitbutton" type="submit">Submit</button> /// <input class="inputs" id="submitbutton" type="submit" value="submit" />--> <!-- TODO maybe I want to use this instead: <button id="submitbutton" type="submit">Submit</button> /// <input class="inputs" id="submitbutton" type="submit" value="submit" />-->
{% else %} {% else %}
<button id="submitbutton" type="submit">Weiter</button> <button id="submitbutton" type="submit">Weiter</button>
<!-- TODO maybe I want to use this instead: <button id="submitbutton" type="submit">Submit</button> /// <input class="inputs" id="submitbutton" type="submit" value="submit" />--> <!-- TODO maybe I want to use this instead: <button id="submitbutton" type="submit">Submit</button> /// <input class="inputs" id="submitbutton" type="submit" value="submit" />-->
{% endif %} {% endif %}
</div> </div>
</form> </form>
@@ -334,9 +362,9 @@ step={{question["step"]}}
</body> </body>
<footer> <footer>
<div class="container" style="font-size: 19px;"> <div class="container" style="font-size: 19px;">
<a href="{{ url_for('startpage') }}" target="_blank">Startseite</a> <a href="{{ url_for('startpage') }}" target="_blank">Startseite</a>
<a href="{{ url_for('impressum') }}" target="_blank">Impressum</a> <a href="{{ url_for('impressum') }}" target="_blank">Impressum</a>
<a href="{{ url_for('datenschutz') }}" target="_blank">Datenschutz</a> <a href="{{ url_for('datenschutz') }}" target="_blank">Datenschutz</a>
</div> </div>
</footer> </footer>

View File

@@ -12,10 +12,13 @@
<div class="container" style="height: 100%; font-size: 22px;"> <div class="container" style="height: 100%; font-size: 22px;">
<h2>SLAEFORMS Gebärdensprachavatar Studie</h2> <h2>SLAEFORMS Gebärdensprachavatar Studie</h2>
<video controls> <div class="iframe-container2">
<source src="{{ url_for('static', filename='videos/platzhalter-video.mp4') }}" type="video/mp4">
</video> <iframe title="vimeo-player" src="https://player.vimeo.com/video/1031133490?h=bfa5b559f9" frameborder="0"
<div class="spacer" aria-hidden="true" style="height:20px"></div> allowfullscreen></iframe>
</div>
<div class="textblock"> <div class="textblock">
<p> <p>
@@ -25,39 +28,21 @@
In dieser Studie geht es um die Entwicklung von Gebärdensprachavataren. In dieser Studie geht es um die Entwicklung von Gebärdensprachavataren.
</p> </p>
<p> <p>
Bitte beachten Sie, dass diese Avatare noch in einer frühen Entwicklungsphase und noch nicht für den Bitte berücksichtige, dass die Avatare, die wir zeigen, in keiner Weise der Qualität entsprechen, wie
Gebrauch in einer App/einem Computerprogramm oder auf einer Webseite geeignet sind. In dieser Studie sie genutzt werden sollen. Sie sind nur Beispiele, die niemals in einer Anwendung zu sehen sein werden.
geht es darum, einzelne Aspekte der Avatare und neue technologische Ansätze zu testen. Dementsprechend Es geht darum, dass wir die Darstellung der Hände und Arme testen wollen. Bitte bewertet deshalb nicht
haben die Avatare noch viele offensichtliche Schwächen, wie zum Beispiel, dass bisher nur die Arme und Darstellungsqualität und lasst euch nicht davon beeinflussen. Außerdem möchten wir testen, wie die
der Oberkörper, aber nicht das Gesicht animiert ist. Bitte bewerten Sie nur die Qualität der Hände und Nutzung einer Feedback-Funktion per Videoaufnahme verwendet werden kann.
Arme.
</p> </p>
<p> <p>
Diese Studie richtet sich an Menschen, die Gebärdensprache beherrschen, insbesondere gehörlose Menschen. Die Rückmeldung von euch ist wichtig und ihr könnt das in Gebärdensprache machen.
Nehmen Sie bitte nur Teil, wenn Sie (Deutsche) Gebärdensprache beherrschen. Die Teilnahme wird nur für die Auswertung genutzt. In keiner Weise wird etwas von euch veröffentlicht, auch nicht eure Videos.
Die Studie dauert ca. 20 Minuten. Alle weiteren Infos findet ihr im Text.
</p> </p>
<p> <p>
Während der Studie werden sie sich Videos anschauen, diese bewerten und Feedback dazu geben können. Danke für eure Teilnahme, die im Rahmen eine Abschlussarbeit erfolgt. Weitere Infos dazu findet ihr im Impressum.
Verwenden Sie deshalb bitte, wenn möglich ein Gerät mit einem großen Bildschirm (Laptop, PC, Tablet) für
Ihre Teilnahme, damit Sie die Videos in ausreichender Größe sehen können.
</p>
<p>
Sie haben während der Studie die Möglichkeit (optional) Videofeedback zu geben, dazu brauchen sie eine
Webcam. Die Videos werden nicht veröffentlicht und nur Übersetzern zur Auswertung der Studienergebnisse
gezeigt.
</p>
<p>
Das Laden der Seiten kann manchmal einige Sekunden dauern, bei schlechtem Internet auch länger. Haben sie bitte Geduld. Falls es zu einem Fehler kommt und ein Video nicht geladen wird, versuchen sie die Seite neu zu laden.
</p>
<p>
Für jeden Teil der Studie gibt es ein Video, das die Fragestellung und die Antwortmöglichkeiten in
Gebärdensprache erklärt. Falls Sie das Video während der Studie nochmal sehen möchten, können Sie es
über den „Info“-Knopf auf der rechten Seite aufrufen.
</p>
<p>
Bitte versuchen sie während der Studie nicht auf die vorherige Seite "zurück" zu gehen, da sie nicht zu vorherigen Fragen zurück können.
</p> </p>
<div class="spacer" aria-hidden="true" style="height:20px"></div>
<p> <p>
Die Teilnahme an dieser Studie ist komplett freiwillig, Sie können die Studie zu jedem Zeitpunkt Die Teilnahme an dieser Studie ist komplett freiwillig, Sie können die Studie zu jedem Zeitpunkt
abbrechen, indem Sie die Seite einfach schließen. Sie können außerdem die Löschung aller Daten bei uns abbrechen, indem Sie die Seite einfach schließen. Sie können außerdem die Löschung aller Daten bei uns
@@ -78,9 +63,9 @@
</body> </body>
<footer> <footer>
<div class="container" style="font-size: 19px;"> <div class="container" style="font-size: 19px;">
<a href="{{ url_for('startpage') }}" target="_blank">Startseite</a> <a href="{{ url_for('startpage') }}" target="_blank">Startseite</a>
<a href="{{ url_for('impressum') }}" target="_blank">Impressum</a> <a href="{{ url_for('impressum') }}" target="_blank">Impressum</a>
<a href="{{ url_for('datenschutz') }}" target="_blank">Datenschutz</a> <a href="{{ url_for('datenschutz') }}" target="_blank">Datenschutz</a>
</div> </div>
</footer> </footer>

View File

@@ -21,10 +21,7 @@
<div class="container"> <div class="container">
<video controls> <div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/1017028141?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="0020-simple"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>
<source src="{{ url_for('static', filename='videos/GLEISvariations.mp4') }}" type="video/mp4">
</video>
<form class="formlayout" id="question_form" action="{{ url_for('sendpage') }}" method="post"> <form class="formlayout" id="question_form" action="{{ url_for('sendpage') }}" method="post">

View File

@@ -0,0 +1,34 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='styles.css')}}" />
<!-- styles.css {{ url_for('static', filename='styles.css')}}-->
<title>Task 3 Videos</title>
</head>
<body>
<div class="container">
<div class="double_video_container">
<div class="dv_half">
<div class="iframe-container">
<video controls>
<source src="{{ url_for('static', filename='videos/0009-intro-inflected.mp4') }}" type="video/mp4">
</video>
</div>
</div>
<div class="dv_half">
<div class="iframe-container">
<video controls>
<source src="{{ url_for('static', filename='videos/0009-variation-inflected.mp4') }}" type="video/mp4">
</video>
</div>
</div>
</div>
<div class="spacer" aria-hidden="true" style="height:30px"></div>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,8 @@
{ {
"Block -1":{
"type": "SinglePage",
"template": "oldstart.html"
},
"Block 0":{ "Block 0":{
"type": "SinglePage", "type": "SinglePage",
"template": "intropage.html" "template": "intropage.html"
@@ -7,13 +11,10 @@
"type": "TaskTemplate", "type": "TaskTemplate",
"template": "standard_template.html", "template": "standard_template.html",
"stimuli": { "stimuli": {
"type": "single_video", "type": "empty",
"order": "random",
"list": { "list": {
"video_1": "videos/platzhalter-video.mp4" "empty_stimulus": ""
},
"configuration": {
"embed": "no"
} }
}, },
"questions": { "questions": {
@@ -226,7 +227,6 @@
} }
}, },
"infovideo": { "infovideo": {
"videourl": "videos/platzhalter-video.mp4",
"htmlblock": "dqinfos.html", "htmlblock": "dqinfos.html",
"configuration": { "configuration": {
"embed": "no" "embed": "no"
@@ -296,9 +296,9 @@
"type": "single_video", "type": "single_video",
"order": "random", "order": "random",
"list": { "list": {
"video_1": "0009-inflected.mp4", "video_1": "0044-inflected.mp4",
"video_2": "0009-mocap.mp4", "video_2": "0044-mocap.mp4",
"video_3": "0009-simple.mp4" "video_3": "0044-simple.mp4"
}, },
"configuration": { "configuration": {
"embed": "no" "embed": "no"
@@ -433,7 +433,6 @@
} }
}, },
"infovideo": { "infovideo": {
"videourl": "videos/platzhalter-video.mp4",
"htmlblock": "p1infos.html", "htmlblock": "p1infos.html",
"configuration": { "configuration": {
"embed": "no" "embed": "no"
@@ -623,7 +622,6 @@
} }
}, },
"infovideo": { "infovideo": {
"videourl": "videos/platzhalter-video.mp4",
"htmlblock": "p1infos.html", "htmlblock": "p1infos.html",
"configuration": { "configuration": {
"embed": "no" "embed": "no"
@@ -667,10 +665,10 @@
"stimuli": { "stimuli": {
"type": "double_video", "type": "double_video",
"list_1": { "list_1": {
"video_1": "0009-inflected.mp4" "video_1": "0009-intro-inflected.mp4"
}, },
"list_2": { "list_2": {
"video_1": "0009-variation-wide.mp4" "video_1": "0009-variation-inflected.mp4"
}, },
"configuration": { "configuration": {
"embed": "no" "embed": "no"
@@ -680,7 +678,7 @@
"question0": { "question0": {
"type": "textblock", "type": "textblock",
"name": "fragestellung", "name": "fragestellung",
"text": "Der folgende Satz wird gebärdet: Gleis 18, Einfahrt RE 77 Richtung Köln Hauptbahnhof über Hannover, Abfahrt 3:44 Uhr." "text": "Der folgende Satz wird gebärdet: Einfahrt RE 77 Richtung Köln Hauptbahnhof über Hannover, Abfahrt 3:44 Uhr."
}, },
"question1": { "question1": {
"type": "likert-basic", "type": "likert-basic",
@@ -809,7 +807,6 @@
} }
}, },
"infovideo": { "infovideo": {
"videourl": "videos/platzhalter-video.mp4",
"htmlblock": "p2infos.html", "htmlblock": "p2infos.html",
"configuration": { "configuration": {
"embed": "no" "embed": "no"
@@ -1001,7 +998,6 @@
} }
}, },
"infovideo": { "infovideo": {
"videourl": "videos/platzhalter-video.mp4",
"htmlblock": "p3infos.html", "htmlblock": "p3infos.html",
"configuration": { "configuration": {
"embed": "no" "embed": "no"
@@ -1043,13 +1039,9 @@
"type": "TaskTemplate", "type": "TaskTemplate",
"template": "standard_template.html", "template": "standard_template.html",
"stimuli": { "stimuli": {
"type": "single_video", "type": "empty",
"order": "random",
"list": { "list": {
"video_1": "platzhalter-video.mp4" "empty_stimulus": ""
},
"configuration": {
"embed": "no"
}, },
"lastquestion": "true" "lastquestion": "true"
}, },